Page MenuHomec4science

No OneTemporary

File Metadata

Created
Thu, Oct 10, 17:24
This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..c473190e8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,30 @@
+*~
+*.o
+*.so
+*.cu_o
+*.ptx
+*_ptx.h
+*.a
+*.d
+*.x
+*.exe
+*.dll
+
+Obj_*
+log.lammps
+log.cite
+*.bz2
+*.gz
+*.tar
+.*.swp
+*.orig
+*.rej
+.vagrant
+
+.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+ehthumbs.db
+Thumbs.db
diff --git a/doc/.gitignore b/doc/.gitignore
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/doc/.gitignore
@@ -0,0 +1 @@
+
diff --git a/doc/Makefile b/doc/Makefile
index 198fffda2..8ee8379c5 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -1,85 +1,85 @@
# Makefile for LAMMPS documentation
-SHA1 = $(shell echo $USER-$PWD | sha1sum | cut -f1 -d" ")
+SHA1 = $(shell echo $USER-$PWD | python utils/sha1sum.py)
BUILDDIR = /tmp/lammps-docs-$(SHA1)
RSTDIR = $(BUILDDIR)/rst
VENV = $(BUILDDIR)/docenv
TXT2RST = $(VENV)/bin/txt2rst
PYTHON = $(shell which python3)
ifeq ($(shell which python3 >/dev/null 2>&1; echo $$?), 1)
$(error Python3 was not found! Please check README.md for further instructions)
endif
ifeq ($(shell which virtualenv >/dev/null 2>&1; echo $$?), 1)
$(error virtualenv was not found! Please check README.md for further instructions)
endif
SOURCES=$(wildcard src/*.txt)
OBJECTS=$(SOURCES:src/%.txt=$(RSTDIR)/%.rst)
.PHONY: help clean-all clean html pdf venv
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make HTML version of documentation using Sphinx"
@echo " pdf to make Manual.pdf"
@echo " txt2html to build txt2html tool"
@echo " clean to remove all generated RST files"
@echo " clean-all to reset the entire build environment"
clean-all:
rm -rf $(BUILDDIR)/* utils/txt2html/txt2html.exe
clean:
rm -rf $(RSTDIR)
txt2html: utils/txt2html/txt2html.exe
html: $(OBJECTS)
@(\
. $(VENV)/bin/activate ;\
cp -r src/* $(RSTDIR)/ ;\
sphinx-build -j 8 -b html -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) html ;\
deactivate ;\
)
@echo "Build finished. The HTML pages are in doc/html."
pdf: utils/txt2html/txt2html.exe
@(\
cd src; \
../utils/txt2html/txt2html.exe -b *.txt; \
htmldoc --batch ../lammps.book; \
for s in `echo *.txt | sed -e 's,\.txt,\.html,g'` ; \
do grep -q $$s ../lammps.book || \
echo doc file $$s missing in lammps.book; done; \
rm *.html; \
)
utils/txt2html/txt2html.exe: utils/txt2html/txt2html.cpp
g++ -O -Wall -o $@ $<
$(RSTDIR)/%.rst : src/%.txt $(TXT2RST)
@(\
mkdir -p $(RSTDIR) ; \
. $(VENV)/bin/activate ;\
txt2rst $< > $@ ;\
deactivate ;\
)
$(VENV):
@( \
virtualenv -p $(PYTHON) $(VENV); \
. $(VENV)/bin/activate; \
pip install Sphinx; \
pip install sphinxcontrib-images; \
deactivate;\
)
$(TXT2RST): $(VENV)
@( \
. $(VENV)/bin/activate; \
(cd utils/converters;\
python setup.py develop);\
deactivate;\
)
diff --git a/doc/README.md b/doc/README.md
index fb130b35b..26a51c13a 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -1,32 +1,42 @@
# Generation of LAMMPS Documentation
The generation of all the documentation is managed by the Makefile inside the
`doc/` folder.
## Usage:
```bash
make html # generate HTML using Sphinx
make pdf # generate PDF using htmldoc
make clean # remove generated RST files
make clean-all # remove entire build folder and any cached data
```
## Installing prerequisites
To run the documention build toolchain Python 3 and virtualenv have to be
-installed. The following are instructions for common Linux distributions:
+installed. Here are instructions for common setups:
-### virtualenv
-
-#### Ubuntu
+### Ubuntu
```bash
sudo apt-get install python-virtualenv
```
-#### Fedora
+### Fedora
```
sudo yum install python-virtualenv
```
+
+### MacOS X
+
+## Python 3
+
+Download the latest Python 3 MacOS X package from https://www.python.org and install it.
+This will install both Python 3 and pip3.
+
+## virtualenv
+
+Once Python 3 is installed, open a Terminal and type `pip3 install virtualenv`. This will
+install virtualenv from the Python Package Index.
diff --git a/doc/html/Manual.html b/doc/html/Manual.html
index 2dfdb1123..5c7ec2f31 100644
--- a/doc/html/Manual.html
+++ b/doc/html/Manual.html
@@ -1,426 +1,426 @@
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LAMMPS Documentation &mdash; LAMMPS documentation</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/sphinxcontrib-images/LightBox2/lightbox2/css/lightbox.css" type="text/css" />
<link rel="top" title="LAMMPS documentation" href="index.html"/>
<link rel="next" title="1. Introduction" href="Section_intro.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-nav-search">
<a href="#" class="icon icon-home"> LAMMPS
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="Section_intro.html">1. Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_start.html">2. Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_commands.html">3. Commands</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_packages.html">4. Packages</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_accelerate.html">5. Accelerating LAMMPS performance</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_howto.html">6. How-to discussions</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_example.html">7. Example problems</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_perf.html">8. Performance &amp; scalability</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_tools.html">9. Additional tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_modify.html">10. Modifying &amp; extending LAMMPS</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_python.html">11. Python interface to LAMMPS</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_errors.html">12. Errors</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_history.html">13. Future and history</a></li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="#">LAMMPS</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="#">Docs</a> &raquo;</li>
<li>LAMMPS Documentation</li>
<li class="wy-breadcrumbs-aside">
<a href="http://lammps.sandia.gov">Website</a>
<a href="Section_commands.html#comm">Commands</a>
</li>
</ul>
<hr/>
<div class="rst-footer-buttons" style="margin-bottom: 1em" role="navigation" aria-label="footer navigation">
<a href="Section_intro.html" class="btn btn-neutral float-right" title="1. Introduction" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
</div>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<H1></H1><div class="section" id="lammps-documentation">
<h1>LAMMPS Documentation</h1>
<div class="section" id="aug-2016-version">
-<h2>20 Aug 2016 version</h2>
+<h2>27 Aug 2016 version</h2>
</div>
<div class="section" id="version-info">
<h2>Version info:</h2>
<p>The LAMMPS &#8220;version&#8221; is the date when it was released, such as 1 May
2010. LAMMPS is updated continuously. Whenever we fix a bug or add a
feature, we release it immediately, and post a notice on <a class="reference external" href="http://lammps.sandia.gov/bug.html">this page of the WWW site</a>. Each dated copy of LAMMPS contains all the
features and bug-fixes up to and including that version date. The
version date is printed to the screen and logfile every time you run
LAMMPS. It is also in the file src/version.h and in the LAMMPS
directory name created when you unpack a tarball, and at the top of
the first page of the manual (this page).</p>
<ul class="simple">
<li>If you browse the HTML doc pages on the LAMMPS WWW site, they always
describe the most current version of LAMMPS.</li>
<li>If you browse the HTML doc pages included in your tarball, they
describe the version you have.</li>
<li>The <a class="reference external" href="Manual.pdf">PDF file</a> on the WWW site or in the tarball is updated
about once per month. This is because it is large, and we don&#8217;t want
it to be part of every patch.</li>
<li>There is also a <a class="reference external" href="Developer.pdf">Developer.pdf</a> file in the doc
directory, which describes the internal structure and algorithms of
LAMMPS.</li>
</ul>
<p>LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel
Simulator.</p>
<p>LAMMPS is a classical molecular dynamics simulation code designed to
run efficiently on parallel computers. It was developed at Sandia
National Laboratories, a US Department of Energy facility, with
funding from the DOE. It is an open-source code, distributed freely
under the terms of the GNU Public License (GPL).</p>
<p>The primary developers of LAMMPS are <a class="reference external" href="http://www.sandia.gov/~sjplimp">Steve Plimpton</a>, Aidan
Thompson, and Paul Crozier who can be contacted at
sjplimp,athomps,pscrozi at sandia.gov. The <a class="reference external" href="http://lammps.sandia.gov">LAMMPS WWW Site</a> at
<a class="reference external" href="http://lammps.sandia.gov">http://lammps.sandia.gov</a> has more information about the code and its
uses.</p>
<hr class="docutils" />
<p>The LAMMPS documentation is organized into the following sections. If
you find errors or omissions in this manual or have suggestions for
useful information to add, please send an email to the developers so
we can improve the LAMMPS documentation.</p>
<p>Once you are familiar with LAMMPS, you may want to bookmark <a class="reference internal" href="Section_commands.html#comm"><span class="std std-ref">this page</span></a> at Section_commands.html#comm since
it gives quick access to documentation for all LAMMPS commands.</p>
<p><a class="reference external" href="Manual.pdf">PDF file</a> of the entire manual, generated by
<a class="reference external" href="http://freecode.com/projects/htmldoc">htmldoc</a></p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="Section_intro.html">1. Introduction</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_intro.html#what-is-lammps">1.1. What is LAMMPS</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_intro.html#lammps-features">1.2. LAMMPS features</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_intro.html#lammps-non-features">1.3. LAMMPS non-features</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_intro.html#open-source-distribution">1.4. Open source distribution</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_intro.html#acknowledgments-and-citations">1.5. Acknowledgments and citations</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_start.html">2. Getting Started</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_start.html#what-s-in-the-lammps-distribution">2.1. What&#8217;s in the LAMMPS distribution</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_start.html#making-lammps">2.2. Making LAMMPS</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_start.html#making-lammps-with-optional-packages">2.3. Making LAMMPS with optional packages</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_start.html#building-lammps-via-the-make-py-tool">2.4. Building LAMMPS via the Make.py tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_start.html#building-lammps-as-a-library">2.5. Building LAMMPS as a library</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_start.html#running-lammps">2.6. Running LAMMPS</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_start.html#command-line-options">2.7. Command-line options</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_start.html#lammps-screen-output">2.8. LAMMPS screen output</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_start.html#tips-for-users-of-previous-lammps-versions">2.9. Tips for users of previous LAMMPS versions</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_commands.html">3. Commands</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#lammps-input-script">3.1. LAMMPS input script</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#parsing-rules">3.2. Parsing rules</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#input-script-structure">3.3. Input script structure</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#commands-listed-by-category">3.4. Commands listed by category</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#individual-commands">3.5. Individual commands</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#fix-styles">3.6. Fix styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#compute-styles">3.7. Compute styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#pair-style-potentials">3.8. Pair_style potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#bond-style-potentials">3.9. Bond_style potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#angle-style-potentials">3.10. Angle_style potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#dihedral-style-potentials">3.11. Dihedral_style potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#improper-style-potentials">3.12. Improper_style potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_commands.html#kspace-solvers">3.13. Kspace solvers</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_packages.html">4. Packages</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_packages.html#standard-packages">4.1. Standard packages</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_packages.html#user-packages">4.2. User packages</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_accelerate.html">5. Accelerating LAMMPS performance</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_accelerate.html#measuring-performance">5.1. Measuring performance</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_accelerate.html#general-strategies">5.2. General strategies</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_accelerate.html#packages-with-optimized-styles">5.3. Packages with optimized styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_accelerate.html#comparison-of-various-accelerator-packages">5.4. Comparison of various accelerator packages</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_howto.html">6. How-to discussions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#restarting-a-simulation">6.1. Restarting a simulation</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#d-simulations">6.2. 2d simulations</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#charmm-amber-and-dreiding-force-fields">6.3. CHARMM, AMBER, and DREIDING force fields</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#running-multiple-simulations-from-one-input-script">6.4. Running multiple simulations from one input script</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#multi-replica-simulations">6.5. Multi-replica simulations</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#granular-models">6.6. Granular models</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#tip3p-water-model">6.7. TIP3P water model</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#tip4p-water-model">6.8. TIP4P water model</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#spc-water-model">6.9. SPC water model</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#coupling-lammps-to-other-codes">6.10. Coupling LAMMPS to other codes</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#visualizing-lammps-snapshots">6.11. Visualizing LAMMPS snapshots</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#triclinic-non-orthogonal-simulation-boxes">6.12. Triclinic (non-orthogonal) simulation boxes</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#nemd-simulations">6.13. NEMD simulations</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#finite-size-spherical-and-aspherical-particles">6.14. Finite-size spherical and aspherical particles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#output-from-lammps-thermo-dumps-computes-fixes-variables">6.15. Output from LAMMPS (thermo, dumps, computes, fixes, variables)</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#thermostatting-barostatting-and-computing-temperature">6.16. Thermostatting, barostatting, and computing temperature</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#walls">6.17. Walls</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#elastic-constants">6.18. Elastic constants</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#library-interface-to-lammps">6.19. Library interface to LAMMPS</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#calculating-thermal-conductivity">6.20. Calculating thermal conductivity</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#calculating-viscosity">6.21. Calculating viscosity</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#calculating-a-diffusion-coefficient">6.22. Calculating a diffusion coefficient</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#using-chunks-to-calculate-system-properties">6.23. Using chunks to calculate system properties</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#setting-parameters-for-the-kspace-style-pppm-disp-command">6.24. Setting parameters for the <code class="docutils literal"><span class="pre">kspace_style</span> <span class="pre">pppm/disp</span></code> command</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#polarizable-models">6.25. Polarizable models</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#adiabatic-core-shell-model">6.26. Adiabatic core/shell model</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_howto.html#drude-induced-dipoles">6.27. Drude induced dipoles</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_example.html">7. Example problems</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_example.html#lowercase-directories">7.1. Lowercase directories</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_example.html#uppercase-directories">7.2. Uppercase directories</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_perf.html">8. Performance &amp; scalability</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_tools.html">9. Additional tools</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#amber2lmp-tool">9.1. amber2lmp tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#binary2txt-tool">9.2. binary2txt tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#ch2lmp-tool">9.3. ch2lmp tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#chain-tool">9.4. chain tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#colvars-tools">9.5. colvars tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#createatoms-tool">9.6. createatoms tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#data2xmovie-tool">9.7. data2xmovie tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#eam-database-tool">9.8. eam database tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#eam-generate-tool">9.9. eam generate tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#eff-tool">9.10. eff tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#emacs-tool">9.11. emacs tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#fep-tool">9.12. fep tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#i-pi-tool">9.13. i-pi tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#ipp-tool">9.14. ipp tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#kate-tool">9.15. kate tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#lmp2arc-tool">9.16. lmp2arc tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#lmp2cfg-tool">9.17. lmp2cfg tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#lmp2vmd-tool">9.18. lmp2vmd tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#matlab-tool">9.19. matlab tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#micelle2d-tool">9.20. micelle2d tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#moltemplate-tool">9.21. moltemplate tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#msi2lmp-tool">9.22. msi2lmp tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#phonon-tool">9.23. phonon tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#polymer-bonding-tool">9.24. polymer bonding tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#pymol-asphere-tool">9.25. pymol_asphere tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#python-tool">9.26. python tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#reax-tool">9.27. reax tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#restart2data-tool">9.28. restart2data tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#vim-tool">9.29. vim tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#xmgrace-tool">9.30. xmgrace tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_tools.html#xmovie-tool">9.31. xmovie tool</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_modify.html">10. Modifying &amp; extending LAMMPS</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#atom-styles">10.1. Atom styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#bond-angle-dihedral-improper-potentials">10.2. Bond, angle, dihedral, improper potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#compute-styles">10.3. Compute styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#dump-styles">10.4. Dump styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#dump-custom-output-options">10.5. Dump custom output options</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#fix-styles">10.6. Fix styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#input-script-commands">10.7. Input script commands</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#kspace-computations">10.8. Kspace computations</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#minimization-styles">10.9. Minimization styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#pairwise-potentials">10.10. Pairwise potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#region-styles">10.11. Region styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#body-styles">10.12. Body styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#thermodynamic-output-options">10.13. Thermodynamic output options</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#variable-options">10.14. Variable options</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_modify.html#submitting-new-features-for-inclusion-in-lammps">10.15. Submitting new features for inclusion in LAMMPS</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_python.html">11. Python interface to LAMMPS</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_python.html#overview-of-running-lammps-from-python">11.1. Overview of running LAMMPS from Python</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_python.html#overview-of-using-python-from-a-lammps-script">11.2. Overview of using Python from a LAMMPS script</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_python.html#building-lammps-as-a-shared-library">11.3. Building LAMMPS as a shared library</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_python.html#installing-the-python-wrapper-into-python">11.4. Installing the Python wrapper into Python</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_python.html#extending-python-with-mpi-to-run-in-parallel">11.5. Extending Python with MPI to run in parallel</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_python.html#testing-the-python-lammps-interface">11.6. Testing the Python-LAMMPS interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_python.html#using-lammps-from-python">11.7. Using LAMMPS from Python</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_python.html#example-python-scripts-that-use-lammps">11.8. Example Python scripts that use LAMMPS</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_errors.html">12. Errors</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_errors.html#common-problems">12.1. Common problems</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_errors.html#reporting-bugs">12.2. Reporting bugs</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_errors.html#error-warning-messages">12.3. Error &amp; warning messages</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_errors.html#error">12.4. Errors:</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_errors.html#warnings">12.5. Warnings:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_history.html">13. Future and history</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Section_history.html#coming-attractions">13.1. Coming attractions</a></li>
<li class="toctree-l2"><a class="reference internal" href="Section_history.html#past-versions">13.2. Past versions</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div class="section" id="indices-and-tables">
<h1>Indices and tables</h1>
<ul class="simple">
<li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li>
<li><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></li>
</ul>
</BODY></div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="Section_intro.html" class="btn btn-neutral float-right" title="1. Introduction" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2013 Sandia Corporation.
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./',
VERSION:'',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/lightbox.min.js"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2-customize/jquery-noconflict.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>
\ No newline at end of file
diff --git a/doc/html/Section_commands.html b/doc/html/Section_commands.html
index b1cf39721..88bc54ce5 100644
--- a/doc/html/Section_commands.html
+++ b/doc/html/Section_commands.html
@@ -1,1585 +1,1592 @@
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>3. Commands &mdash; LAMMPS documentation</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/sphinxcontrib-images/LightBox2/lightbox2/css/lightbox.css" type="text/css" />
<link rel="top" title="LAMMPS documentation" href="index.html"/>
<link rel="next" title="4. Packages" href="Section_packages.html"/>
<link rel="prev" title="2. Getting Started" href="Section_start.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-nav-search">
<a href="Manual.html" class="icon icon-home"> LAMMPS
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="Section_intro.html">1. Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_start.html">2. Getting Started</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">3. Commands</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#lammps-input-script">3.1. LAMMPS input script</a></li>
<li class="toctree-l2"><a class="reference internal" href="#parsing-rules">3.2. Parsing rules</a></li>
<li class="toctree-l2"><a class="reference internal" href="#input-script-structure">3.3. Input script structure</a></li>
<li class="toctree-l2"><a class="reference internal" href="#commands-listed-by-category">3.4. Commands listed by category</a></li>
<li class="toctree-l2"><a class="reference internal" href="#individual-commands">3.5. Individual commands</a></li>
<li class="toctree-l2"><a class="reference internal" href="#fix-styles">3.6. Fix styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="#compute-styles">3.7. Compute styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="#pair-style-potentials">3.8. Pair_style potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="#bond-style-potentials">3.9. Bond_style potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="#angle-style-potentials">3.10. Angle_style potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="#dihedral-style-potentials">3.11. Dihedral_style potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="#improper-style-potentials">3.12. Improper_style potentials</a></li>
<li class="toctree-l2"><a class="reference internal" href="#kspace-solvers">3.13. Kspace solvers</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_packages.html">4. Packages</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_accelerate.html">5. Accelerating LAMMPS performance</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_howto.html">6. How-to discussions</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_example.html">7. Example problems</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_perf.html">8. Performance &amp; scalability</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_tools.html">9. Additional tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_modify.html">10. Modifying &amp; extending LAMMPS</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_python.html">11. Python interface to LAMMPS</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_errors.html">12. Errors</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_history.html">13. Future and history</a></li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="Manual.html">LAMMPS</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="Manual.html">Docs</a> &raquo;</li>
<li>3. Commands</li>
<li class="wy-breadcrumbs-aside">
<a href="http://lammps.sandia.gov">Website</a>
<a href="Section_commands.html#comm">Commands</a>
</li>
</ul>
<hr/>
<div class="rst-footer-buttons" style="margin-bottom: 1em" role="navigation" aria-label="footer navigation">
<a href="Section_packages.html" class="btn btn-neutral float-right" title="4. Packages" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="Section_start.html" class="btn btn-neutral" title="2. Getting Started" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="commands">
<h1>3. Commands</h1>
<p>This section describes how a LAMMPS input script is formatted and the
input script commands used to define a LAMMPS simulation.</p>
<div class="line-block">
<div class="line">3.1 <a class="reference internal" href="#cmd-1"><span class="std std-ref">LAMMPS input script</span></a></div>
<div class="line">3.2 <a class="reference internal" href="#cmd-2"><span class="std std-ref">Parsing rules</span></a></div>
<div class="line">3.3 <a class="reference internal" href="#cmd-3"><span class="std std-ref">Input script structure</span></a></div>
<div class="line">3.4 <a class="reference internal" href="#cmd-4"><span class="std std-ref">Commands listed by category</span></a></div>
<div class="line">3.5 <a class="reference internal" href="#cmd-5"><span class="std std-ref">Commands listed alphabetically</span></a></div>
<div class="line"><br /></div>
</div>
<div class="section" id="lammps-input-script">
<span id="cmd-1"></span><h2>3.1. LAMMPS input script</h2>
<p>LAMMPS executes by reading commands from a input script (text file),
one line at a time. When the input script ends, LAMMPS exits. Each
command causes LAMMPS to take some action. It may set an internal
variable, read in a file, or run a simulation. Most commands have
default settings, which means you only need to use the command if you
wish to change the default.</p>
<p>In many cases, the ordering of commands in an input script is not
important. However the following rules apply:</p>
<p>(1) LAMMPS does not read your entire input script and then perform a
simulation with all the settings. Rather, the input script is read
one line at a time and each command takes effect when it is read.
Thus this sequence of commands:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">timestep</span> <span class="mf">0.5</span>
<span class="n">run</span> <span class="mi">100</span>
<span class="n">run</span> <span class="mi">100</span>
</pre></div>
</div>
<p>does something different than this sequence:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">run</span> <span class="mi">100</span>
<span class="n">timestep</span> <span class="mf">0.5</span>
<span class="n">run</span> <span class="mi">100</span>
</pre></div>
</div>
<p>In the first case, the specified timestep (0.5 fmsec) is used for two
simulations of 100 timesteps each. In the 2nd case, the default
timestep (1.0 fmsec) is used for the 1st 100 step simulation and a 0.5
fmsec timestep is used for the 2nd one.</p>
<p>(2) Some commands are only valid when they follow other commands. For
example you cannot set the temperature of a group of atoms until atoms
have been defined and a group command is used to define which atoms
belong to the group.</p>
<p>(3) Sometimes command B will use values that can be set by command A.
This means command A must precede command B in the input script if it
is to have the desired effect. For example, the
<a class="reference internal" href="read_data.html"><span class="doc">read_data</span></a> command initializes the system by setting
up the simulation box and assigning atoms to processors. If default
values are not desired, the <a class="reference internal" href="processors.html"><span class="doc">processors</span></a> and
<a class="reference internal" href="boundary.html"><span class="doc">boundary</span></a> commands need to be used before read_data to
tell LAMMPS how to map processors to the simulation box.</p>
<p>Many input script errors are detected by LAMMPS and an ERROR or
WARNING message is printed. <a class="reference internal" href="Section_errors.html"><span class="doc">This section</span></a> gives
more information on what errors mean. The documentation for each
command lists restrictions on how the command can be used.</p>
<hr class="docutils" />
</div>
<div class="section" id="parsing-rules">
<span id="cmd-2"></span><h2>3.2. Parsing rules</h2>
<p>Each non-blank line in the input script is treated as a command.
LAMMPS commands are case sensitive. Command names are lower-case, as
are specified command arguments. Upper case letters may be used in
file names or user-chosen ID strings.</p>
<p>Here is how each line in the input script is parsed by LAMMPS:</p>
<p>(1) If the last printable character on the line is a &#8220;&amp;&#8221; character,
the command is assumed to continue on the next line. The next line is
concatenated to the previous line by removing the &#8220;&amp;&#8221; character and
line break. This allows long commands to be continued across two or
more lines. See the discussion of triple quotes in (6) for how to
continue a command across multiple line without using &#8220;&amp;&#8221; characters.</p>
<p>(2) All characters from the first &#8220;#&#8221; character onward are treated as
comment and discarded. See an exception in (6). Note that a
comment after a trailing &#8220;&amp;&#8221; character will prevent the command from
continuing on the next line. Also note that for multi-line commands a
single leading &#8220;#&#8221; will comment out the entire command.</p>
<p>(3) The line is searched repeatedly for $ characters, which indicate
variables that are replaced with a text string. See an exception in
(6).</p>
<p>If the $ is followed by curly brackets, then the variable name is the
text inside the curly brackets. If no curly brackets follow the $,
then the variable name is the single character immediately following
the $. Thus ${myTemp} and $x refer to variable names &#8220;myTemp&#8221; and
&#8220;x&#8221;.</p>
<p>How the variable is converted to a text string depends on what style
of variable it is; see the <a class="reference external" href="variable">variable</a> doc page for details.
It can be a variable that stores multiple text strings, and return one
of them. The returned text string can be multiple &#8220;words&#8221; (space
separated) which will then be interpreted as multiple arguments in the
input command. The variable can also store a numeric formula which
will be evaluated and its numeric result returned as a string.</p>
<p>As a special case, if the $ is followed by parenthesis, then the text
inside the parenthesis is treated as an &#8220;immediate&#8221; variable and
evaluated as an <a class="reference internal" href="variable.html"><span class="doc">equal-style variable</span></a>. This is a way
to use numeric formulas in an input script without having to assign
them to variable names. For example, these 3 input script lines:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>variable X equal (xlo+xhi)/2+sqrt(v_area)
region 1 block $X 2 INF INF EDGE EDGE
variable X delete
</pre></div>
</div>
<p>can be replaced by</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>region 1 block $((xlo+xhi)/2+sqrt(v_area)) 2 INF INF EDGE EDGE
</pre></div>
</div>
<p>so that you do not have to define (or discard) a temporary variable X.</p>
<p>Note that neither the curly-bracket or immediate form of variables can
contain nested $ characters for other variables to substitute for.
Thus you cannot do this:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">variable</span> <span class="n">a</span> <span class="n">equal</span> <span class="mi">2</span>
<span class="n">variable</span> <span class="n">b2</span> <span class="n">equal</span> <span class="mi">4</span>
<span class="nb">print</span> <span class="s2">&quot;B2 = ${b$a}&quot;</span>
</pre></div>
</div>
<p>Nor can you specify this $($x-1.0) for an immediate variable, but
you could use $(v_x-1.0), since the latter is valid syntax for an
<a class="reference internal" href="variable.html"><span class="doc">equal-style variable</span></a>.</p>
<p>See the <a class="reference internal" href="variable.html"><span class="doc">variable</span></a> command for more details of how
strings are assigned to variables and evaluated, and how they can be
used in input script commands.</p>
<p>(4) The line is broken into &#8220;words&#8221; separated by whitespace (tabs,
spaces). Note that words can thus contain letters, digits,
underscores, or punctuation characters.</p>
<p>(5) The first word is the command name. All successive words in the
line are arguments.</p>
<p>(6) If you want text with spaces to be treated as a single argument,
it can be enclosed in either single or double or triple quotes. A
long single argument enclosed in single or double quotes can span
multiple lines if the &#8220;&amp;&#8221; character is used, as described above. When
the lines are concatenated together (and the &#8220;&amp;&#8221; characters and line
breaks removed), the text will become a single line. If you want
multiple lines of an argument to retain their line breaks, the text
can be enclosed in triple quotes, in which case &#8220;&amp;&#8221; characters are not
needed. For example:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="nb">print</span> <span class="s2">&quot;Volume = $v&quot;</span>
<span class="nb">print</span> <span class="s1">&#39;Volume = $v&#39;</span>
<span class="k">if</span> <span class="s2">&quot;$</span><span class="si">{steps}</span><span class="s2"> &gt; 1000&quot;</span> <span class="n">then</span> <span class="n">quit</span>
<span class="n">variable</span> <span class="n">a</span> <span class="n">string</span> <span class="s2">&quot;red green blue &amp;</span>
<span class="n">purple</span> <span class="n">orange</span> <span class="n">cyan</span><span class="s2">&quot;</span>
<span class="nb">print</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">System volume = $v</span>
<span class="s2">System temperature = $t</span>
<span class="s2">&quot;&quot;&quot;</span>
</pre></div>
</div>
<p>In each case, the single, double, or triple quotes are removed when
the single argument they enclose is stored internally.</p>
<p>See the <a class="reference internal" href="dump_modify.html"><span class="doc">dump modify format</span></a>, <a class="reference internal" href="print.html"><span class="doc">print</span></a>,
<a class="reference internal" href="if.html"><span class="doc">if</span></a>, and <a class="reference internal" href="python.html"><span class="doc">python</span></a> commands for examples.</p>
<p>A &#8220;#&#8221; or &#8220;$&#8221; character that is between quotes will not be treated as a
comment indicator in (2) or substituted for as a variable in (3).</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">If the argument is itself a command that requires a quoted
argument (e.g. using a <a class="reference internal" href="print.html"><span class="doc">print</span></a> command as part of an
<a class="reference internal" href="if.html"><span class="doc">if</span></a> or <a class="reference internal" href="run.html"><span class="doc">run every</span></a> command), then single, double, or
triple quotes can be nested in the usual manner. See the doc pages
for those commands for examples. Only one of level of nesting is
allowed, but that should be sufficient for most use cases.</p>
</div>
<hr class="docutils" />
</div>
<div class="section" id="input-script-structure">
<span id="cmd-3"></span><h2>3.3. Input script structure</h2>
<p>This section describes the structure of a typical LAMMPS input script.
The &#8220;examples&#8221; directory in the LAMMPS distribution contains many
sample input scripts; the corresponding problems are discussed in
<a class="reference internal" href="Section_example.html"><span class="doc">Section_example</span></a>, and animated on the <a class="reference external" href="http://lammps.sandia.gov">LAMMPS WWW Site</a>.</p>
<p>A LAMMPS input script typically has 4 parts:</p>
<ol class="arabic simple">
<li>Initialization</li>
<li>Atom definition</li>
<li>Settings</li>
<li>Run a simulation</li>
</ol>
<p>The last 2 parts can be repeated as many times as desired. I.e. run a
simulation, change some settings, run some more, etc. Each of the 4
parts is now described in more detail. Remember that almost all the
commands need only be used if a non-default value is desired.</p>
<ol class="arabic simple">
<li>Initialization</li>
</ol>
<p>Set parameters that need to be defined before atoms are created or
read-in from a file.</p>
<p>The relevant commands are <a class="reference internal" href="units.html"><span class="doc">units</span></a>,
<a class="reference internal" href="dimension.html"><span class="doc">dimension</span></a>, <a class="reference internal" href="newton.html"><span class="doc">newton</span></a>,
<a class="reference internal" href="processors.html"><span class="doc">processors</span></a>, <a class="reference internal" href="boundary.html"><span class="doc">boundary</span></a>,
<a class="reference internal" href="atom_style.html"><span class="doc">atom_style</span></a>, <a class="reference internal" href="atom_modify.html"><span class="doc">atom_modify</span></a>.</p>
<p>If force-field parameters appear in the files that will be read, these
commands tell LAMMPS what kinds of force fields are being used:
<a class="reference internal" href="pair_style.html"><span class="doc">pair_style</span></a>, <a class="reference internal" href="bond_style.html"><span class="doc">bond_style</span></a>,
<a class="reference internal" href="angle_style.html"><span class="doc">angle_style</span></a>, <a class="reference internal" href="dihedral_style.html"><span class="doc">dihedral_style</span></a>,
<a class="reference internal" href="improper_style.html"><span class="doc">improper_style</span></a>.</p>
<ol class="arabic simple" start="2">
<li>Atom definition</li>
</ol>
<p>There are 3 ways to define atoms in LAMMPS. Read them in from a data
or restart file via the <a class="reference internal" href="read_data.html"><span class="doc">read_data</span></a> or
<a class="reference internal" href="read_restart.html"><span class="doc">read_restart</span></a> commands. These files can contain
molecular topology information. Or create atoms on a lattice (with no
molecular topology), using these commands: <a class="reference internal" href="lattice.html"><span class="doc">lattice</span></a>,
<a class="reference internal" href="region.html"><span class="doc">region</span></a>, <a class="reference internal" href="create_box.html"><span class="doc">create_box</span></a>,
<a class="reference internal" href="create_atoms.html"><span class="doc">create_atoms</span></a>. The entire set of atoms can be
duplicated to make a larger simulation using the
<a class="reference internal" href="replicate.html"><span class="doc">replicate</span></a> command.</p>
<ol class="arabic simple" start="3">
<li>Settings</li>
</ol>
<p>Once atoms and molecular topology are defined, a variety of settings
can be specified: force field coefficients, simulation parameters,
output options, etc.</p>
<p>Force field coefficients are set by these commands (they can also be
set in the read-in files): <a class="reference internal" href="pair_coeff.html"><span class="doc">pair_coeff</span></a>,
<a class="reference internal" href="bond_coeff.html"><span class="doc">bond_coeff</span></a>, <a class="reference internal" href="angle_coeff.html"><span class="doc">angle_coeff</span></a>,
<a class="reference internal" href="dihedral_coeff.html"><span class="doc">dihedral_coeff</span></a>,
<a class="reference internal" href="improper_coeff.html"><span class="doc">improper_coeff</span></a>,
<a class="reference internal" href="kspace_style.html"><span class="doc">kspace_style</span></a>, <a class="reference internal" href="dielectric.html"><span class="doc">dielectric</span></a>,
<a class="reference internal" href="special_bonds.html"><span class="doc">special_bonds</span></a>.</p>
<p>Various simulation parameters are set by these commands:
<a class="reference internal" href="neighbor.html"><span class="doc">neighbor</span></a>, <a class="reference internal" href="neigh_modify.html"><span class="doc">neigh_modify</span></a>,
<a class="reference internal" href="group.html"><span class="doc">group</span></a>, <a class="reference internal" href="timestep.html"><span class="doc">timestep</span></a>,
<a class="reference internal" href="reset_timestep.html"><span class="doc">reset_timestep</span></a>, <a class="reference internal" href="run_style.html"><span class="doc">run_style</span></a>,
<a class="reference internal" href="min_style.html"><span class="doc">min_style</span></a>, <a class="reference internal" href="min_modify.html"><span class="doc">min_modify</span></a>.</p>
<p>Fixes impose a variety of boundary conditions, time integration, and
diagnostic options. The <a class="reference internal" href="fix.html"><span class="doc">fix</span></a> command comes in many flavors.</p>
<p>Various computations can be specified for execution during a
simulation using the <a class="reference internal" href="compute.html"><span class="doc">compute</span></a>,
<a class="reference internal" href="compute_modify.html"><span class="doc">compute_modify</span></a>, and <a class="reference internal" href="variable.html"><span class="doc">variable</span></a>
commands.</p>
<p>Output options are set by the <a class="reference internal" href="thermo.html"><span class="doc">thermo</span></a>, <a class="reference internal" href="dump.html"><span class="doc">dump</span></a>,
and <a class="reference internal" href="restart.html"><span class="doc">restart</span></a> commands.</p>
<ol class="arabic simple" start="4">
<li>Run a simulation</li>
</ol>
<p>A molecular dynamics simulation is run using the <a class="reference internal" href="run.html"><span class="doc">run</span></a>
command. Energy minimization (molecular statics) is performed using
the <a class="reference internal" href="minimize.html"><span class="doc">minimize</span></a> command. A parallel tempering
(replica-exchange) simulation can be run using the
<a class="reference internal" href="temper.html"><span class="doc">temper</span></a> command.</p>
<hr class="docutils" />
</div>
<div class="section" id="commands-listed-by-category">
<span id="cmd-4"></span><h2>3.4. Commands listed by category</h2>
<p>This section lists all LAMMPS commands, grouped by category. The
<a class="reference internal" href="#cmd-5"><span class="std std-ref">next section</span></a> lists the same commands alphabetically. Note
that some style options for some commands are part of specific LAMMPS
packages, which means they cannot be used unless the package was
included when LAMMPS was built. Not all packages are included in a
default LAMMPS build. These dependencies are listed as Restrictions
in the command&#8217;s documentation.</p>
<p>Initialization:</p>
<p><a class="reference internal" href="atom_modify.html"><span class="doc">atom_modify</span></a>, <a class="reference internal" href="atom_style.html"><span class="doc">atom_style</span></a>,
<a class="reference internal" href="boundary.html"><span class="doc">boundary</span></a>, <a class="reference internal" href="dimension.html"><span class="doc">dimension</span></a>,
<a class="reference internal" href="newton.html"><span class="doc">newton</span></a>, <a class="reference internal" href="processors.html"><span class="doc">processors</span></a>, <a class="reference internal" href="units.html"><span class="doc">units</span></a></p>
<p>Atom definition:</p>
<p><a class="reference internal" href="create_atoms.html"><span class="doc">create_atoms</span></a>, <a class="reference internal" href="create_box.html"><span class="doc">create_box</span></a>,
<a class="reference internal" href="lattice.html"><span class="doc">lattice</span></a>, <a class="reference internal" href="read_data.html"><span class="doc">read_data</span></a>,
<a class="reference internal" href="read_dump.html"><span class="doc">read_dump</span></a>, <a class="reference internal" href="read_restart.html"><span class="doc">read_restart</span></a>,
<a class="reference internal" href="region.html"><span class="doc">region</span></a>, <a class="reference internal" href="replicate.html"><span class="doc">replicate</span></a></p>
<p>Force fields:</p>
<p><a class="reference internal" href="angle_coeff.html"><span class="doc">angle_coeff</span></a>, <a class="reference internal" href="angle_style.html"><span class="doc">angle_style</span></a>,
<a class="reference internal" href="bond_coeff.html"><span class="doc">bond_coeff</span></a>, <a class="reference internal" href="bond_style.html"><span class="doc">bond_style</span></a>,
<a class="reference internal" href="dielectric.html"><span class="doc">dielectric</span></a>, <a class="reference internal" href="dihedral_coeff.html"><span class="doc">dihedral_coeff</span></a>,
<a class="reference internal" href="dihedral_style.html"><span class="doc">dihedral_style</span></a>,
<a class="reference internal" href="improper_coeff.html"><span class="doc">improper_coeff</span></a>,
<a class="reference internal" href="improper_style.html"><span class="doc">improper_style</span></a>,
<a class="reference internal" href="kspace_modify.html"><span class="doc">kspace_modify</span></a>, <a class="reference internal" href="kspace_style.html"><span class="doc">kspace_style</span></a>,
<a class="reference internal" href="pair_coeff.html"><span class="doc">pair_coeff</span></a>, <a class="reference internal" href="pair_modify.html"><span class="doc">pair_modify</span></a>,
<a class="reference internal" href="pair_style.html"><span class="doc">pair_style</span></a>, <a class="reference internal" href="pair_write.html"><span class="doc">pair_write</span></a>,
<a class="reference internal" href="special_bonds.html"><span class="doc">special_bonds</span></a></p>
<p>Settings:</p>
<p><a class="reference internal" href="comm_style.html"><span class="doc">comm_style</span></a>, <a class="reference internal" href="group.html"><span class="doc">group</span></a>, <a class="reference internal" href="mass.html"><span class="doc">mass</span></a>,
<a class="reference internal" href="min_modify.html"><span class="doc">min_modify</span></a>, <a class="reference internal" href="min_style.html"><span class="doc">min_style</span></a>,
<a class="reference internal" href="neigh_modify.html"><span class="doc">neigh_modify</span></a>, <a class="reference internal" href="neighbor.html"><span class="doc">neighbor</span></a>,
<a class="reference internal" href="reset_timestep.html"><span class="doc">reset_timestep</span></a>, <a class="reference internal" href="run_style.html"><span class="doc">run_style</span></a>,
<a class="reference internal" href="set.html"><span class="doc">set</span></a>, <a class="reference internal" href="timestep.html"><span class="doc">timestep</span></a>, <a class="reference internal" href="velocity.html"><span class="doc">velocity</span></a></p>
<p>Fixes:</p>
<p><a class="reference internal" href="fix.html"><span class="doc">fix</span></a>, <a class="reference internal" href="fix_modify.html"><span class="doc">fix_modify</span></a>, <a class="reference internal" href="unfix.html"><span class="doc">unfix</span></a></p>
<p>Computes:</p>
<p><a class="reference internal" href="compute.html"><span class="doc">compute</span></a>, <a class="reference internal" href="compute_modify.html"><span class="doc">compute_modify</span></a>,
<a class="reference internal" href="uncompute.html"><span class="doc">uncompute</span></a></p>
<p>Output:</p>
<p><a class="reference internal" href="dump.html"><span class="doc">dump</span></a>, <a class="reference internal" href="dump_image.html"><span class="doc">dump image</span></a>,
<a class="reference internal" href="dump_modify.html"><span class="doc">dump_modify</span></a>, <a class="reference internal" href="dump_image.html"><span class="doc">dump movie</span></a>,
<a class="reference internal" href="restart.html"><span class="doc">restart</span></a>, <a class="reference internal" href="thermo.html"><span class="doc">thermo</span></a>,
<a class="reference internal" href="thermo_modify.html"><span class="doc">thermo_modify</span></a>, <a class="reference internal" href="thermo_style.html"><span class="doc">thermo_style</span></a>,
<a class="reference internal" href="undump.html"><span class="doc">undump</span></a>, <a class="reference internal" href="write_data.html"><span class="doc">write_data</span></a>,
<a class="reference internal" href="write_dump.html"><span class="doc">write_dump</span></a>, <a class="reference internal" href="write_restart.html"><span class="doc">write_restart</span></a></p>
<p>Actions:</p>
<p><a class="reference internal" href="delete_atoms.html"><span class="doc">delete_atoms</span></a>, <a class="reference internal" href="delete_bonds.html"><span class="doc">delete_bonds</span></a>,
<a class="reference internal" href="displace_atoms.html"><span class="doc">displace_atoms</span></a>, <a class="reference internal" href="change_box.html"><span class="doc">change_box</span></a>,
<a class="reference internal" href="minimize.html"><span class="doc">minimize</span></a>, <a class="reference internal" href="neb.html"><span class="doc">neb</span></a> <a class="reference internal" href="prd.html"><span class="doc">prd</span></a>,
<a class="reference internal" href="rerun.html"><span class="doc">rerun</span></a>, <a class="reference internal" href="run.html"><span class="doc">run</span></a>, <a class="reference internal" href="temper.html"><span class="doc">temper</span></a></p>
<p>Miscellaneous:</p>
<p><a class="reference internal" href="clear.html"><span class="doc">clear</span></a>, <a class="reference internal" href="echo.html"><span class="doc">echo</span></a>, <a class="reference internal" href="if.html"><span class="doc">if</span></a>,
<a class="reference internal" href="include.html"><span class="doc">include</span></a>, <a class="reference internal" href="jump.html"><span class="doc">jump</span></a>, <a class="reference internal" href="label.html"><span class="doc">label</span></a>,
<a class="reference internal" href="log.html"><span class="doc">log</span></a>, <a class="reference internal" href="next.html"><span class="doc">next</span></a>, <a class="reference internal" href="print.html"><span class="doc">print</span></a>,
<a class="reference internal" href="shell.html"><span class="doc">shell</span></a>, <a class="reference internal" href="variable.html"><span class="doc">variable</span></a></p>
<hr class="docutils" />
</div>
<div class="section" id="individual-commands">
<span id="comm"></span><span id="cmd-5"></span><h2>3.5. Individual commands</h2>
<p>This section lists all LAMMPS commands alphabetically, with a separate
listing below of styles within certain commands. The <a class="reference internal" href="#cmd-4"><span class="std std-ref">previous section</span></a> lists the same commands, grouped by category. Note
that some style options for some commands are part of specific LAMMPS
packages, which means they cannot be used unless the package was
included when LAMMPS was built. Not all packages are included in a
default LAMMPS build. These dependencies are listed as Restrictions
in the command&#8217;s documentation.</p>
<table border="1" class="docutils">
<colgroup>
<col width="17%" />
<col width="17%" />
<col width="15%" />
<col width="17%" />
<col width="17%" />
<col width="17%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="angle_coeff.html"><span class="doc">angle_coeff</span></a></td>
<td><a class="reference internal" href="angle_style.html"><span class="doc">angle_style</span></a></td>
<td><a class="reference internal" href="atom_modify.html"><span class="doc">atom_modify</span></a></td>
<td><a class="reference internal" href="atom_style.html"><span class="doc">atom_style</span></a></td>
<td><a class="reference internal" href="balance.html"><span class="doc">balance</span></a></td>
<td><a class="reference internal" href="bond_coeff.html"><span class="doc">bond_coeff</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="bond_style.html"><span class="doc">bond_style</span></a></td>
<td><a class="reference internal" href="bond_write.html"><span class="doc">bond_write</span></a></td>
<td><a class="reference internal" href="boundary.html"><span class="doc">boundary</span></a></td>
<td><a class="reference internal" href="box.html"><span class="doc">box</span></a></td>
<td><a class="reference internal" href="change_box.html"><span class="doc">change_box</span></a></td>
<td><a class="reference internal" href="clear.html"><span class="doc">clear</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="comm_modify.html"><span class="doc">comm_modify</span></a></td>
<td><a class="reference internal" href="comm_style.html"><span class="doc">comm_style</span></a></td>
<td><a class="reference internal" href="compute.html"><span class="doc">compute</span></a></td>
<td><a class="reference internal" href="compute_modify.html"><span class="doc">compute_modify</span></a></td>
<td><a class="reference internal" href="create_atoms.html"><span class="doc">create_atoms</span></a></td>
<td><a class="reference internal" href="create_bonds.html"><span class="doc">create_bonds</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="create_box.html"><span class="doc">create_box</span></a></td>
<td><a class="reference internal" href="delete_atoms.html"><span class="doc">delete_atoms</span></a></td>
<td><a class="reference internal" href="delete_bonds.html"><span class="doc">delete_bonds</span></a></td>
<td><a class="reference internal" href="dielectric.html"><span class="doc">dielectric</span></a></td>
<td><a class="reference internal" href="dihedral_coeff.html"><span class="doc">dihedral_coeff</span></a></td>
<td><a class="reference internal" href="dihedral_style.html"><span class="doc">dihedral_style</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="dimension.html"><span class="doc">dimension</span></a></td>
<td><a class="reference internal" href="displace_atoms.html"><span class="doc">displace_atoms</span></a></td>
<td><a class="reference internal" href="dump.html"><span class="doc">dump</span></a></td>
<td><a class="reference internal" href="dump_image.html"><span class="doc">dump image</span></a></td>
<td><a class="reference internal" href="dump_modify.html"><span class="doc">dump_modify</span></a></td>
<td><a class="reference internal" href="dump_image.html"><span class="doc">dump movie</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="echo.html"><span class="doc">echo</span></a></td>
<td><a class="reference internal" href="fix.html"><span class="doc">fix</span></a></td>
<td><a class="reference internal" href="fix_modify.html"><span class="doc">fix_modify</span></a></td>
<td><a class="reference internal" href="group.html"><span class="doc">group</span></a></td>
<td><a class="reference internal" href="if.html"><span class="doc">if</span></a></td>
<td><a class="reference internal" href="info.html"><span class="doc">info</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="improper_coeff.html"><span class="doc">improper_coeff</span></a></td>
<td><a class="reference internal" href="improper_style.html"><span class="doc">improper_style</span></a></td>
<td><a class="reference internal" href="include.html"><span class="doc">include</span></a></td>
<td><a class="reference internal" href="jump.html"><span class="doc">jump</span></a></td>
<td><a class="reference internal" href="kspace_modify.html"><span class="doc">kspace_modify</span></a></td>
<td><a class="reference internal" href="kspace_style.html"><span class="doc">kspace_style</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="label.html"><span class="doc">label</span></a></td>
<td><a class="reference internal" href="lattice.html"><span class="doc">lattice</span></a></td>
<td><a class="reference internal" href="log.html"><span class="doc">log</span></a></td>
<td><a class="reference internal" href="mass.html"><span class="doc">mass</span></a></td>
<td><a class="reference internal" href="minimize.html"><span class="doc">minimize</span></a></td>
<td><a class="reference internal" href="min_modify.html"><span class="doc">min_modify</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="min_style.html"><span class="doc">min_style</span></a></td>
<td><a class="reference internal" href="molecule.html"><span class="doc">molecule</span></a></td>
<td><a class="reference internal" href="neb.html"><span class="doc">neb</span></a></td>
<td><a class="reference internal" href="neigh_modify.html"><span class="doc">neigh_modify</span></a></td>
<td><a class="reference internal" href="neighbor.html"><span class="doc">neighbor</span></a></td>
<td><a class="reference internal" href="newton.html"><span class="doc">newton</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="next.html"><span class="doc">next</span></a></td>
<td><a class="reference internal" href="package.html"><span class="doc">package</span></a></td>
<td><a class="reference internal" href="pair_coeff.html"><span class="doc">pair_coeff</span></a></td>
<td><a class="reference internal" href="pair_modify.html"><span class="doc">pair_modify</span></a></td>
<td><a class="reference internal" href="pair_style.html"><span class="doc">pair_style</span></a></td>
<td><a class="reference internal" href="pair_write.html"><span class="doc">pair_write</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="partition.html"><span class="doc">partition</span></a></td>
<td><a class="reference internal" href="prd.html"><span class="doc">prd</span></a></td>
<td><a class="reference internal" href="print.html"><span class="doc">print</span></a></td>
<td><a class="reference internal" href="processors.html"><span class="doc">processors</span></a></td>
<td><a class="reference internal" href="python.html"><span class="doc">python</span></a></td>
<td><a class="reference internal" href="quit.html"><span class="doc">quit</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="read_data.html"><span class="doc">read_data</span></a></td>
<td><a class="reference internal" href="read_dump.html"><span class="doc">read_dump</span></a></td>
<td><a class="reference internal" href="read_restart.html"><span class="doc">read_restart</span></a></td>
<td><a class="reference internal" href="region.html"><span class="doc">region</span></a></td>
<td><a class="reference internal" href="replicate.html"><span class="doc">replicate</span></a></td>
<td><a class="reference internal" href="rerun.html"><span class="doc">rerun</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="reset_timestep.html"><span class="doc">reset_timestep</span></a></td>
<td><a class="reference internal" href="restart.html"><span class="doc">restart</span></a></td>
<td><a class="reference internal" href="run.html"><span class="doc">run</span></a></td>
<td><a class="reference internal" href="run_style.html"><span class="doc">run_style</span></a></td>
<td><a class="reference internal" href="set.html"><span class="doc">set</span></a></td>
<td><a class="reference internal" href="shell.html"><span class="doc">shell</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="special_bonds.html"><span class="doc">special_bonds</span></a></td>
<td><a class="reference internal" href="suffix.html"><span class="doc">suffix</span></a></td>
<td><a class="reference internal" href="tad.html"><span class="doc">tad</span></a></td>
<td><a class="reference internal" href="temper.html"><span class="doc">temper</span></a></td>
<td><a class="reference internal" href="thermo.html"><span class="doc">thermo</span></a></td>
<td><a class="reference internal" href="thermo_modify.html"><span class="doc">thermo_modify</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="thermo_style.html"><span class="doc">thermo_style</span></a></td>
<td><a class="reference internal" href="timer.html"><span class="doc">timer</span></a></td>
<td><a class="reference internal" href="timestep.html"><span class="doc">timestep</span></a></td>
<td><a class="reference internal" href="uncompute.html"><span class="doc">uncompute</span></a></td>
<td><a class="reference internal" href="undump.html"><span class="doc">undump</span></a></td>
<td><a class="reference internal" href="unfix.html"><span class="doc">unfix</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="units.html"><span class="doc">units</span></a></td>
<td><a class="reference internal" href="variable.html"><span class="doc">variable</span></a></td>
<td><a class="reference internal" href="velocity.html"><span class="doc">velocity</span></a></td>
<td><a class="reference internal" href="write_coeff.html"><span class="doc">write_coeff</span></a></td>
<td><a class="reference internal" href="write_data.html"><span class="doc">write_data</span></a></td>
<td><a class="reference internal" href="write_dump.html"><span class="doc">write_dump</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="write_restart.html"><span class="doc">write_restart</span></a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>These are additional commands in USER packages, which can be used if
<a class="reference internal" href="Section_start.html#start-3"><span class="std std-ref">LAMMPS is built with the appropriate package</span></a>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="41%" />
<col width="29%" />
<col width="29%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="dump_custom_vtk.html"><span class="doc">dump custom/vtk</span></a></td>
<td><a class="reference internal" href="group2ndx.html"><span class="doc">group2ndx</span></a></td>
<td><a class="reference internal" href="group2ndx.html"><span class="doc">ndx2group</span></a></td>
</tr>
</tbody>
</table>
</div>
<hr class="docutils" />
<div class="section" id="fix-styles">
<h2>3.6. Fix styles</h2>
<p>See the <a class="reference internal" href="fix.html"><span class="doc">fix</span></a> command for one-line descriptions of each style
or click on the style itself for a full description. Some of the
styles have accelerated versions, which can be used if LAMMPS is built
with the <a class="reference internal" href="Section_accelerate.html"><span class="doc">appropriate accelerated package</span></a>.
This is indicated by additional letters in parenthesis: g = GPU, i =
USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.</p>
<table border="1" class="docutils">
<colgroup>
<col width="15%" />
<col width="15%" />
<col width="11%" />
<col width="13%" />
<col width="11%" />
<col width="11%" />
<col width="12%" />
<col width="11%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="fix_adapt.html"><span class="doc">adapt</span></a></td>
<td><a class="reference internal" href="fix_addforce.html"><span class="doc">addforce</span></a></td>
<td><a class="reference internal" href="fix_append_atoms.html"><span class="doc">append/atoms</span></a></td>
<td><a class="reference internal" href="fix_atom_swap.html"><span class="doc">atom/swap</span></a></td>
<td><a class="reference internal" href="fix_aveforce.html"><span class="doc">aveforce</span></a></td>
<td><a class="reference internal" href="fix_ave_atom.html"><span class="doc">ave/atom</span></a></td>
<td><a class="reference internal" href="fix_ave_chunk.html"><span class="doc">ave/chunk</span></a></td>
<td><a class="reference internal" href="fix_ave_correlate.html"><span class="doc">ave/correlate</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="fix_ave_histo.html"><span class="doc">ave/histo</span></a></td>
<td><a class="reference internal" href="fix_ave_histo.html"><span class="doc">ave/histo/weight</span></a></td>
<td><a class="reference internal" href="fix_ave_time.html"><span class="doc">ave/time</span></a></td>
<td><a class="reference internal" href="fix_balance.html"><span class="doc">balance</span></a></td>
<td><a class="reference internal" href="fix_bond_break.html"><span class="doc">bond/break</span></a></td>
<td><a class="reference internal" href="fix_bond_create.html"><span class="doc">bond/create</span></a></td>
<td><a class="reference internal" href="fix_bond_swap.html"><span class="doc">bond/swap</span></a></td>
<td><a class="reference internal" href="fix_box_relax.html"><span class="doc">box/relax</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="fix_controller.html"><span class="doc">controller</span></a></td>
<td><a class="reference internal" href="fix_deform.html"><span class="doc">deform (k)</span></a></td>
<td><a class="reference internal" href="fix_deposit.html"><span class="doc">deposit</span></a></td>
<td><a class="reference internal" href="fix_drag.html"><span class="doc">drag</span></a></td>
<td><a class="reference internal" href="fix_dt_reset.html"><span class="doc">dt/reset</span></a></td>
<td><a class="reference internal" href="fix_efield.html"><span class="doc">efield</span></a></td>
<td><a class="reference internal" href="fix_ehex.html"><span class="doc">ehex</span></a></td>
<td><a class="reference internal" href="fix_enforce2d.html"><span class="doc">enforce2d</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="fix_evaporate.html"><span class="doc">evaporate</span></a></td>
<td><a class="reference internal" href="fix_external.html"><span class="doc">external</span></a></td>
<td><a class="reference internal" href="fix_freeze.html"><span class="doc">freeze</span></a></td>
<td><a class="reference internal" href="fix_gcmc.html"><span class="doc">gcmc</span></a></td>
<td><a class="reference internal" href="fix_gld.html"><span class="doc">gld</span></a></td>
<td><a class="reference internal" href="fix_gravity.html"><span class="doc">gravity (o)</span></a></td>
<td><a class="reference internal" href="fix_heat.html"><span class="doc">heat</span></a></td>
<td><a class="reference internal" href="fix_indent.html"><span class="doc">indent</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="fix_langevin.html"><span class="doc">langevin (k)</span></a></td>
<td><a class="reference internal" href="fix_lineforce.html"><span class="doc">lineforce</span></a></td>
<td><a class="reference internal" href="fix_momentum.html"><span class="doc">momentum</span></a></td>
<td><a class="reference internal" href="fix_move.html"><span class="doc">move</span></a></td>
<td><a class="reference internal" href="fix_msst.html"><span class="doc">msst</span></a></td>
<td><a class="reference internal" href="fix_neb.html"><span class="doc">neb</span></a></td>
<td><a class="reference internal" href="fix_nh.html"><span class="doc">nph (ko)</span></a></td>
<td><a class="reference internal" href="fix_nphug.html"><span class="doc">nphug (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="fix_nph_asphere.html"><span class="doc">nph/asphere (o)</span></a></td>
<td><a class="reference internal" href="fix_nph_body.html"><span class="doc">nph/body</span></a></td>
<td><a class="reference internal" href="fix_nph_sphere.html"><span class="doc">nph/sphere (o)</span></a></td>
<td><a class="reference internal" href="fix_nh.html"><span class="doc">npt (kio)</span></a></td>
<td><a class="reference internal" href="fix_npt_asphere.html"><span class="doc">npt/asphere (o)</span></a></td>
<td><a class="reference internal" href="fix_npt_body.html"><span class="doc">npt/body</span></a></td>
<td><a class="reference internal" href="fix_npt_sphere.html"><span class="doc">npt/sphere (o)</span></a></td>
<td><a class="reference internal" href="fix_nve.html"><span class="doc">nve (kio)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="fix_nve_asphere.html"><span class="doc">nve/asphere (i)</span></a></td>
<td><a class="reference internal" href="fix_nve_asphere_noforce.html"><span class="doc">nve/asphere/noforce</span></a></td>
<td><a class="reference internal" href="fix_nve_body.html"><span class="doc">nve/body</span></a></td>
<td><a class="reference internal" href="fix_nve_limit.html"><span class="doc">nve/limit</span></a></td>
<td><a class="reference internal" href="fix_nve_line.html"><span class="doc">nve/line</span></a></td>
<td><a class="reference internal" href="fix_nve_noforce.html"><span class="doc">nve/noforce</span></a></td>
<td><a class="reference internal" href="fix_nve_sphere.html"><span class="doc">nve/sphere (o)</span></a></td>
<td><a class="reference internal" href="fix_nve_tri.html"><span class="doc">nve/tri</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="fix_nh.html"><span class="doc">nvt (iko)</span></a></td>
<td><a class="reference internal" href="fix_nvt_asphere.html"><span class="doc">nvt/asphere (o)</span></a></td>
<td><a class="reference internal" href="fix_nvt_body.html"><span class="doc">nvt/body</span></a></td>
<td><a class="reference internal" href="fix_nvt_sllod.html"><span class="doc">nvt/sllod (io)</span></a></td>
<td><a class="reference internal" href="fix_nvt_sphere.html"><span class="doc">nvt/sphere (o)</span></a></td>
<td><a class="reference internal" href="fix_oneway.html"><span class="doc">oneway</span></a></td>
<td><a class="reference internal" href="fix_orient.html"><span class="doc">orient/bcc</span></a></td>
<td><a class="reference internal" href="fix_orient.html"><span class="doc">orient/fcc</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="fix_planeforce.html"><span class="doc">planeforce</span></a></td>
<td><a class="reference internal" href="fix_poems.html"><span class="doc">poems</span></a></td>
<td><a class="reference internal" href="fix_pour.html"><span class="doc">pour</span></a></td>
<td><a class="reference internal" href="fix_press_berendsen.html"><span class="doc">press/berendsen</span></a></td>
<td><a class="reference internal" href="fix_print.html"><span class="doc">print</span></a></td>
<td><a class="reference internal" href="fix_property_atom.html"><span class="doc">property/atom</span></a></td>
<td><a class="reference internal" href="fix_qeq_comb.html"><span class="doc">qeq/comb (o)</span></a></td>
<td><a class="reference internal" href="fix_qeq.html"><span class="doc">qeq/dynamic</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="fix_qeq.html"><span class="doc">qeq/fire</span></a></td>
<td><a class="reference internal" href="fix_qeq.html"><span class="doc">qeq/point</span></a></td>
<td><a class="reference internal" href="fix_qeq.html"><span class="doc">qeq/shielded</span></a></td>
<td><a class="reference internal" href="fix_qeq.html"><span class="doc">qeq/slater</span></a></td>
<td><a class="reference internal" href="fix_shake.html"><span class="doc">rattle</span></a></td>
<td><a class="reference internal" href="fix_reax_bonds.html"><span class="doc">reax/bonds</span></a></td>
<td><a class="reference internal" href="fix_recenter.html"><span class="doc">recenter</span></a></td>
<td><a class="reference internal" href="fix_restrain.html"><span class="doc">restrain</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="fix_rigid.html"><span class="doc">rigid (o)</span></a></td>
<td><a class="reference internal" href="fix_rigid.html"><span class="doc">rigid/nph (o)</span></a></td>
<td><a class="reference internal" href="fix_rigid.html"><span class="doc">rigid/npt (o)</span></a></td>
<td><a class="reference internal" href="fix_rigid.html"><span class="doc">rigid/nve (o)</span></a></td>
<td><a class="reference internal" href="fix_rigid.html"><span class="doc">rigid/nvt (o)</span></a></td>
<td><a class="reference internal" href="fix_rigid.html"><span class="doc">rigid/small (o)</span></a></td>
<td><a class="reference internal" href="fix_rigid.html"><span class="doc">rigid/small/nph</span></a></td>
<td><a class="reference internal" href="fix_rigid.html"><span class="doc">rigid/small/npt</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="fix_rigid.html"><span class="doc">rigid/small/nve</span></a></td>
<td><a class="reference internal" href="fix_rigid.html"><span class="doc">rigid/small/nvt</span></a></td>
<td><a class="reference internal" href="fix_setforce.html"><span class="doc">setforce (k)</span></a></td>
<td><a class="reference internal" href="fix_shake.html"><span class="doc">shake</span></a></td>
<td><a class="reference internal" href="fix_spring.html"><span class="doc">spring</span></a></td>
<td><a class="reference internal" href="fix_spring_chunk.html"><span class="doc">spring/chunk</span></a></td>
<td><a class="reference internal" href="fix_spring_rg.html"><span class="doc">spring/rg</span></a></td>
<td><a class="reference internal" href="fix_spring_self.html"><span class="doc">spring/self</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="fix_srd.html"><span class="doc">srd</span></a></td>
<td><a class="reference internal" href="fix_store_force.html"><span class="doc">store/force</span></a></td>
<td><a class="reference internal" href="fix_store_state.html"><span class="doc">store/state</span></a></td>
<td><a class="reference internal" href="fix_temp_berendsen.html"><span class="doc">temp/berendsen</span></a></td>
<td><a class="reference internal" href="fix_temp_csvr.html"><span class="doc">temp/csld</span></a></td>
<td><a class="reference internal" href="fix_temp_csvr.html"><span class="doc">temp/csvr</span></a></td>
<td><a class="reference internal" href="fix_temp_rescale.html"><span class="doc">temp/rescale</span></a></td>
<td><a class="reference internal" href="fix_tfmc.html"><span class="doc">tfmc</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="fix_thermal_conductivity.html"><span class="doc">thermal/conductivity</span></a></td>
<td><a class="reference internal" href="fix_tmd.html"><span class="doc">tmd</span></a></td>
<td><a class="reference internal" href="fix_ttm.html"><span class="doc">ttm</span></a></td>
<td><a class="reference internal" href="fix_tune_kspace.html"><span class="doc">tune/kspace</span></a></td>
<td><a class="reference internal" href="fix_vector.html"><span class="doc">vector</span></a></td>
<td><a class="reference internal" href="fix_viscosity.html"><span class="doc">viscosity</span></a></td>
<td><a class="reference internal" href="fix_viscous.html"><span class="doc">viscous</span></a></td>
<td><a class="reference internal" href="fix_wall.html"><span class="doc">wall/colloid</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="fix_wall_gran.html"><span class="doc">wall/gran</span></a></td>
<td><a class="reference internal" href="fix_wall.html"><span class="doc">wall/harmonic</span></a></td>
<td><a class="reference internal" href="fix_wall.html"><span class="doc">wall/lj1043</span></a></td>
<td><a class="reference internal" href="fix_wall.html"><span class="doc">wall/lj126</span></a></td>
<td><a class="reference internal" href="fix_wall.html"><span class="doc">wall/lj93</span></a></td>
<td><a class="reference internal" href="fix_wall_piston.html"><span class="doc">wall/piston</span></a></td>
<td><a class="reference internal" href="fix_wall_reflect.html"><span class="doc">wall/reflect (k)</span></a></td>
<td><a class="reference internal" href="fix_wall_region.html"><span class="doc">wall/region</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="fix_wall_srd.html"><span class="doc">wall/srd</span></a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>These are additional fix styles in USER packages, which can be used if
<a class="reference internal" href="Section_start.html#start-3"><span class="std std-ref">LAMMPS is built with the appropriate package</span></a>.</p>
<table border="1" class="docutils">
<colgroup>
-<col width="23%" />
+<col width="14%" />
+<col width="22%" />
<col width="15%" />
<col width="15%" />
<col width="15%" />
<col width="20%" />
-<col width="13%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="fix_adapt_fep.html"><span class="doc">adapt/fep</span></a></td>
<td><a class="reference internal" href="fix_addtorque.html"><span class="doc">addtorque</span></a></td>
<td><a class="reference internal" href="fix_atc.html"><span class="doc">atc</span></a></td>
<td><a class="reference internal" href="fix_ave_correlate_long.html"><span class="doc">ave/correlate/long</span></a></td>
<td><a class="reference internal" href="fix_colvars.html"><span class="doc">colvars</span></a></td>
<td><a class="reference internal" href="fix_drude.html"><span class="doc">drude</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="fix_drude_transform.html"><span class="doc">drude/transform/direct</span></a></td>
<td><a class="reference internal" href="fix_drude_transform.html"><span class="doc">drude/transform/reverse</span></a></td>
<td><a class="reference internal" href="fix_eos_cv.html"><span class="doc">eos/cv</span></a></td>
<td><a class="reference internal" href="fix_eos_table.html"><span class="doc">eos/table</span></a></td>
<td><a class="reference internal" href="fix_eos_table_rx.html"><span class="doc">eos/table/rx</span></a></td>
-<td><a class="reference internal" href="fix_gle.html"><span class="doc">gle</span></a></td>
+<td><a class="reference internal" href="fix_flow_gauss.html"><span class="doc">flow/gauss</span></a></td>
</tr>
-<tr class="row-odd"><td><a class="reference internal" href="fix_imd.html"><span class="doc">imd</span></a></td>
+<tr class="row-odd"><td><a class="reference internal" href="fix_gle.html"><span class="doc">gle</span></a></td>
+<td><a class="reference internal" href="fix_imd.html"><span class="doc">imd</span></a></td>
<td><a class="reference internal" href="fix_ipi.html"><span class="doc">ipi</span></a></td>
<td><a class="reference internal" href="fix_langevin_drude.html"><span class="doc">langevin/drude</span></a></td>
<td><a class="reference internal" href="fix_langevin_eff.html"><span class="doc">langevin/eff</span></a></td>
<td><a class="reference internal" href="fix_lb_fluid.html"><span class="doc">lb/fluid</span></a></td>
-<td><a class="reference internal" href="fix_lb_momentum.html"><span class="doc">lb/momentum</span></a></td>
</tr>
-<tr class="row-even"><td><a class="reference internal" href="fix_lb_pc.html"><span class="doc">lb/pc</span></a></td>
+<tr class="row-even"><td><a class="reference internal" href="fix_lb_momentum.html"><span class="doc">lb/momentum</span></a></td>
+<td><a class="reference internal" href="fix_lb_pc.html"><span class="doc">lb/pc</span></a></td>
<td><a class="reference internal" href="fix_lb_rigid_pc_sphere.html"><span class="doc">lb/rigid/pc/sphere</span></a></td>
<td><a class="reference internal" href="fix_lb_viscous.html"><span class="doc">lb/viscous</span></a></td>
<td><a class="reference internal" href="fix_meso.html"><span class="doc">meso</span></a></td>
<td><a class="reference internal" href="fix_manifoldforce.html"><span class="doc">manifoldforce</span></a></td>
-<td><a class="reference internal" href="fix_meso_stationary.html"><span class="doc">meso/stationary</span></a></td>
</tr>
-<tr class="row-odd"><td><a class="reference internal" href="fix_nve_manifold_rattle.html"><span class="doc">nve/manifold/rattle</span></a></td>
+<tr class="row-odd"><td><a class="reference internal" href="fix_meso_stationary.html"><span class="doc">meso/stationary</span></a></td>
+<td><a class="reference internal" href="fix_nve_manifold_rattle.html"><span class="doc">nve/manifold/rattle</span></a></td>
<td><a class="reference internal" href="fix_nvt_manifold_rattle.html"><span class="doc">nvt/manifold/rattle</span></a></td>
<td><a class="reference internal" href="fix_nh_eff.html"><span class="doc">nph/eff</span></a></td>
<td><a class="reference internal" href="fix_nh_eff.html"><span class="doc">npt/eff</span></a></td>
<td><a class="reference internal" href="fix_nve_eff.html"><span class="doc">nve/eff</span></a></td>
-<td><a class="reference internal" href="fix_nh_eff.html"><span class="doc">nvt/eff</span></a></td>
</tr>
-<tr class="row-even"><td><a class="reference internal" href="fix_nvt_sllod_eff.html"><span class="doc">nvt/sllod/eff</span></a></td>
+<tr class="row-even"><td><a class="reference internal" href="fix_nh_eff.html"><span class="doc">nvt/eff</span></a></td>
+<td><a class="reference internal" href="fix_nvt_sllod_eff.html"><span class="doc">nvt/sllod/eff</span></a></td>
<td><a class="reference internal" href="fix_phonon.html"><span class="doc">phonon</span></a></td>
<td><a class="reference internal" href="fix_pimd.html"><span class="doc">pimd</span></a></td>
<td><a class="reference internal" href="fix_qbmsst.html"><span class="doc">qbmsst</span></a></td>
<td><a class="reference internal" href="fix_qeq_reax.html"><span class="doc">qeq/reax</span></a></td>
-<td><a class="reference internal" href="fix_qmmm.html"><span class="doc">qmmm</span></a></td>
</tr>
-<tr class="row-odd"><td><a class="reference internal" href="fix_qtb.html"><span class="doc">qtb</span></a></td>
+<tr class="row-odd"><td><a class="reference internal" href="fix_qmmm.html"><span class="doc">qmmm</span></a></td>
+<td><a class="reference internal" href="fix_qtb.html"><span class="doc">qtb</span></a></td>
<td><a class="reference internal" href="fix_reax_bonds.html"><span class="doc">reax/c/bonds</span></a></td>
<td><a class="reference internal" href="fix_reaxc_species.html"><span class="doc">reax/c/species</span></a></td>
<td><a class="reference internal" href="fix_rx.html"><span class="doc">rx</span></a></td>
<td><a class="reference internal" href="fix_saed_vtk.html"><span class="doc">saed/vtk</span></a></td>
-<td><a class="reference internal" href="fix_shardlow.html"><span class="doc">shardlow</span></a></td>
</tr>
-<tr class="row-even"><td><a class="reference internal" href="fix_smd.html"><span class="doc">smd</span></a></td>
+<tr class="row-even"><td><a class="reference internal" href="fix_shardlow.html"><span class="doc">shardlow</span></a></td>
+<td><a class="reference internal" href="fix_smd.html"><span class="doc">smd</span></a></td>
<td><a class="reference internal" href="fix_smd_adjust_dt.html"><span class="doc">smd/adjust/dt</span></a></td>
<td><a class="reference internal" href="fix_smd_integrate_tlsph.html"><span class="doc">smd/integrate/tlsph</span></a></td>
<td><a class="reference internal" href="fix_smd_integrate_ulsph.html"><span class="doc">smd/integrate/ulsph</span></a></td>
<td><a class="reference internal" href="fix_smd_move_triangulated_surface.html"><span class="doc">smd/move/triangulated/surface</span></a></td>
-<td><a class="reference internal" href="fix_smd_setvel.html"><span class="doc">smd/setvel</span></a></td>
</tr>
-<tr class="row-odd"><td><a class="reference internal" href="fix_smd_tlsph_reference_configuration.html"><span class="doc">smd/tlsph/reference/configuration</span></a></td>
+<tr class="row-odd"><td><a class="reference internal" href="fix_smd_setvel.html"><span class="doc">smd/setvel</span></a></td>
+<td><a class="reference internal" href="fix_smd_tlsph_reference_configuration.html"><span class="doc">smd/tlsph/reference/configuration</span></a></td>
<td><a class="reference internal" href="fix_smd_wall_surface.html"><span class="doc">smd/wall/surface</span></a></td>
<td><a class="reference internal" href="fix_temp_rescale_eff.html"><span class="doc">temp/rescale/eff</span></a></td>
<td><a class="reference internal" href="fix_ti_rs.html"><span class="doc">ti/rs</span></a></td>
<td><a class="reference internal" href="fix_ti_spring.html"><span class="doc">ti/spring</span></a></td>
-<td><a class="reference internal" href="fix_ttm.html"><span class="doc">ttm/mod</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="fix_ttm.html"><span class="doc">ttm/mod</span></a></td>
+<td>&nbsp;</td>
+<td>&nbsp;</td>
+<td>&nbsp;</td>
+<td>&nbsp;</td>
+<td>&nbsp;</td>
</tr>
</tbody>
</table>
</div>
<hr class="docutils" />
<div class="section" id="compute-styles">
<h2>3.7. Compute styles</h2>
<p>See the <a class="reference internal" href="compute.html"><span class="doc">compute</span></a> command for one-line descriptions of
each style or click on the style itself for a full description. Some
of the styles have accelerated versions, which can be used if LAMMPS
is built with the <a class="reference internal" href="Section_accelerate.html"><span class="doc">appropriate accelerated package</span></a>. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k =
KOKKOS, o = USER-OMP, t = OPT.</p>
<table border="1" class="docutils">
<colgroup>
<col width="16%" />
<col width="16%" />
<col width="16%" />
<col width="16%" />
<col width="17%" />
<col width="19%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="compute_angle.html"><span class="doc">angle</span></a></td>
<td><a class="reference internal" href="compute_angle_local.html"><span class="doc">angle/local</span></a></td>
<td><a class="reference internal" href="compute_angmom_chunk.html"><span class="doc">angmom/chunk</span></a></td>
<td><a class="reference internal" href="compute_body_local.html"><span class="doc">body/local</span></a></td>
<td><a class="reference internal" href="compute_bond.html"><span class="doc">bond</span></a></td>
<td><a class="reference internal" href="compute_bond_local.html"><span class="doc">bond/local</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="compute_centro_atom.html"><span class="doc">centro/atom</span></a></td>
<td><a class="reference internal" href="compute_chunk_atom.html"><span class="doc">chunk/atom</span></a></td>
<td><a class="reference internal" href="compute_cluster_atom.html"><span class="doc">cluster/atom</span></a></td>
<td><a class="reference internal" href="compute_cna_atom.html"><span class="doc">cna/atom</span></a></td>
<td><a class="reference internal" href="compute_com.html"><span class="doc">com</span></a></td>
<td><a class="reference internal" href="compute_com_chunk.html"><span class="doc">com/chunk</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="compute_contact_atom.html"><span class="doc">contact/atom</span></a></td>
<td><a class="reference internal" href="compute_coord_atom.html"><span class="doc">coord/atom</span></a></td>
<td><a class="reference internal" href="compute_damage_atom.html"><span class="doc">damage/atom</span></a></td>
<td><a class="reference internal" href="compute_dihedral.html"><span class="doc">dihedral</span></a></td>
<td><a class="reference internal" href="compute_dihedral_local.html"><span class="doc">dihedral/local</span></a></td>
<td><a class="reference internal" href="compute_dilatation_atom.html"><span class="doc">dilatation/atom</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="compute_dipole_chunk.html"><span class="doc">dipole/chunk</span></a></td>
<td><a class="reference internal" href="compute_displace_atom.html"><span class="doc">displace/atom</span></a></td>
<td><a class="reference internal" href="compute_erotate_asphere.html"><span class="doc">erotate/asphere</span></a></td>
<td><a class="reference internal" href="compute_erotate_rigid.html"><span class="doc">erotate/rigid</span></a></td>
<td><a class="reference internal" href="compute_erotate_sphere.html"><span class="doc">erotate/sphere</span></a></td>
<td><a class="reference internal" href="compute_erotate_sphere_atom.html"><span class="doc">erotate/sphere/atom</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="compute_event_displace.html"><span class="doc">event/displace</span></a></td>
<td><a class="reference internal" href="compute_group_group.html"><span class="doc">group/group</span></a></td>
<td><a class="reference internal" href="compute_gyration.html"><span class="doc">gyration</span></a></td>
<td><a class="reference internal" href="compute_gyration_chunk.html"><span class="doc">gyration/chunk</span></a></td>
<td><a class="reference internal" href="compute_heat_flux.html"><span class="doc">heat/flux</span></a></td>
<td><a class="reference internal" href="compute_hexorder_atom.html"><span class="doc">hexorder/atom</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="compute_improper.html"><span class="doc">improper</span></a></td>
<td><a class="reference internal" href="compute_improper_local.html"><span class="doc">improper/local</span></a></td>
<td><a class="reference internal" href="compute_inertia_chunk.html"><span class="doc">inertia/chunk</span></a></td>
<td><a class="reference internal" href="compute_ke.html"><span class="doc">ke</span></a></td>
<td><a class="reference internal" href="compute_ke_atom.html"><span class="doc">ke/atom</span></a></td>
<td><a class="reference internal" href="compute_ke_rigid.html"><span class="doc">ke/rigid</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="compute_msd.html"><span class="doc">msd</span></a></td>
<td><a class="reference internal" href="compute_msd_chunk.html"><span class="doc">msd/chunk</span></a></td>
<td><a class="reference internal" href="compute_msd_nongauss.html"><span class="doc">msd/nongauss</span></a></td>
<td><a class="reference internal" href="compute_omega_chunk.html"><span class="doc">omega/chunk</span></a></td>
<td><a class="reference internal" href="compute_orientorder_atom.html"><span class="doc">orientorder/atom</span></a></td>
<td><a class="reference internal" href="compute_pair.html"><span class="doc">pair</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="compute_pair_local.html"><span class="doc">pair/local</span></a></td>
<td><a class="reference internal" href="compute_pe.html"><span class="doc">pe</span></a></td>
<td><a class="reference internal" href="compute_pe_atom.html"><span class="doc">pe/atom</span></a></td>
<td><a class="reference internal" href="compute_plasticity_atom.html"><span class="doc">plasticity/atom</span></a></td>
<td><a class="reference internal" href="compute_pressure.html"><span class="doc">pressure</span></a></td>
<td><a class="reference internal" href="compute_property_atom.html"><span class="doc">property/atom</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="compute_property_local.html"><span class="doc">property/local</span></a></td>
<td><a class="reference internal" href="compute_property_chunk.html"><span class="doc">property/chunk</span></a></td>
<td><a class="reference internal" href="compute_rdf.html"><span class="doc">rdf</span></a></td>
<td><a class="reference internal" href="compute_reduce.html"><span class="doc">reduce</span></a></td>
<td><a class="reference internal" href="compute_reduce.html"><span class="doc">reduce/region</span></a></td>
<td><a class="reference internal" href="compute_rigid_local.html"><span class="doc">rigid/local</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="compute_slice.html"><span class="doc">slice</span></a></td>
<td><a class="reference internal" href="compute_sna_atom.html"><span class="doc">sna/atom</span></a></td>
<td><a class="reference internal" href="compute_sna_atom.html"><span class="doc">snad/atom</span></a></td>
<td><a class="reference internal" href="compute_sna_atom.html"><span class="doc">snav/atom</span></a></td>
<td><a class="reference internal" href="compute_stress_atom.html"><span class="doc">stress/atom</span></a></td>
<td><a class="reference internal" href="compute_temp.html"><span class="doc">temp (k)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="compute_temp_asphere.html"><span class="doc">temp/asphere</span></a></td>
<td><a class="reference internal" href="compute_temp_body.html"><span class="doc">temp/body</span></a></td>
<td><a class="reference internal" href="compute_temp_chunk.html"><span class="doc">temp/chunk</span></a></td>
<td><a class="reference internal" href="compute_temp_com.html"><span class="doc">temp/com</span></a></td>
<td><a class="reference internal" href="compute_temp_deform.html"><span class="doc">temp/deform</span></a></td>
<td><a class="reference internal" href="compute_temp_partial.html"><span class="doc">temp/partial</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="compute_temp_profile.html"><span class="doc">temp/profile</span></a></td>
<td><a class="reference internal" href="compute_temp_ramp.html"><span class="doc">temp/ramp</span></a></td>
<td><a class="reference internal" href="compute_temp_region.html"><span class="doc">temp/region</span></a></td>
<td><a class="reference internal" href="compute_temp_sphere.html"><span class="doc">temp/sphere</span></a></td>
<td><a class="reference internal" href="compute_ti.html"><span class="doc">ti</span></a></td>
<td><a class="reference internal" href="compute_torque_chunk.html"><span class="doc">torque/chunk</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="compute_vacf.html"><span class="doc">vacf</span></a></td>
<td><a class="reference internal" href="compute_vcm_chunk.html"><span class="doc">vcm/chunk</span></a></td>
<td><a class="reference internal" href="compute_voronoi_atom.html"><span class="doc">voronoi/atom</span></a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>These are additional compute styles in USER packages, which can be
used if <a class="reference internal" href="Section_start.html#start-3"><span class="std std-ref">LAMMPS is built with the appropriate package</span></a>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="16%" />
<col width="15%" />
<col width="18%" />
<col width="17%" />
<col width="15%" />
<col width="19%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="compute_ackland_atom.html"><span class="doc">ackland/atom</span></a></td>
<td><a class="reference internal" href="compute_basal_atom.html"><span class="doc">basal/atom</span></a></td>
<td><a class="reference internal" href="compute_dpd.html"><span class="doc">dpd</span></a></td>
<td><a class="reference internal" href="compute_dpd_atom.html"><span class="doc">dpd/atom</span></a></td>
<td><a class="reference internal" href="compute_fep.html"><span class="doc">fep</span></a></td>
<td><a class="reference internal" href="compute_tally.html"><span class="doc">force/tally</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="compute_tally.html"><span class="doc">heat/flux/tally</span></a></td>
<td><a class="reference internal" href="compute_ke_eff.html"><span class="doc">ke/eff</span></a></td>
<td><a class="reference internal" href="compute_ke_atom_eff.html"><span class="doc">ke/atom/eff</span></a></td>
<td><a class="reference internal" href="compute_meso_e_atom.html"><span class="doc">meso/e/atom</span></a></td>
<td><a class="reference internal" href="compute_meso_rho_atom.html"><span class="doc">meso/rho/atom</span></a></td>
<td><a class="reference internal" href="compute_meso_t_atom.html"><span class="doc">meso/t/atom</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="compute_tally.html"><span class="doc">pe/tally</span></a></td>
<td><a class="reference internal" href="compute_tally.html"><span class="doc">pe/mol/tally</span></a></td>
<td><a class="reference internal" href="compute_saed.html"><span class="doc">saed</span></a></td>
<td><a class="reference internal" href="compute_smd_contact_radius.html"><span class="doc">smd/contact/radius</span></a></td>
<td><a class="reference internal" href="compute_smd_damage.html"><span class="doc">smd/damage</span></a></td>
<td><a class="reference internal" href="compute_smd_hourglass_error.html"><span class="doc">smd/hourglass/error</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="compute_smd_internal_energy.html"><span class="doc">smd/internal/energy</span></a></td>
<td><a class="reference internal" href="compute_smd_plastic_strain.html"><span class="doc">smd/plastic/strain</span></a></td>
<td><a class="reference internal" href="compute_smd_plastic_strain_rate.html"><span class="doc">smd/plastic/strain/rate</span></a></td>
<td><a class="reference internal" href="compute_smd_rho.html"><span class="doc">smd/rho</span></a></td>
<td><a class="reference internal" href="compute_smd_tlsph_defgrad.html"><span class="doc">smd/tlsph/defgrad</span></a></td>
<td><a class="reference internal" href="compute_smd_tlsph_dt.html"><span class="doc">smd/tlsph/dt</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="compute_smd_tlsph_num_neighs.html"><span class="doc">smd/tlsph/num/neighs</span></a></td>
<td><a class="reference internal" href="compute_smd_tlsph_shape.html"><span class="doc">smd/tlsph/shape</span></a></td>
<td><a class="reference internal" href="compute_smd_tlsph_strain.html"><span class="doc">smd/tlsph/strain</span></a></td>
<td><a class="reference internal" href="compute_smd_tlsph_strain_rate.html"><span class="doc">smd/tlsph/strain/rate</span></a></td>
<td><a class="reference internal" href="compute_smd_tlsph_stress.html"><span class="doc">smd/tlsph/stress</span></a></td>
<td><a class="reference internal" href="compute_smd_triangle_mesh_vertices.html"><span class="doc">smd/triangle/mesh/vertices</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="compute_smd_ulsph_num_neighs.html"><span class="doc">smd/ulsph/num/neighs</span></a></td>
<td><a class="reference internal" href="compute_smd_ulsph_strain.html"><span class="doc">smd/ulsph/strain</span></a></td>
<td><a class="reference internal" href="compute_smd_ulsph_strain_rate.html"><span class="doc">smd/ulsph/strain/rate</span></a></td>
<td><a class="reference internal" href="compute_smd_ulsph_stress.html"><span class="doc">smd/ulsph/stress</span></a></td>
<td><a class="reference internal" href="compute_smd_vol.html"><span class="doc">smd/vol</span></a></td>
<td><a class="reference internal" href="compute_tally.html"><span class="doc">stress/tally</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="compute_temp_drude.html"><span class="doc">temp/drude</span></a></td>
<td><a class="reference internal" href="compute_temp_eff.html"><span class="doc">temp/eff</span></a></td>
<td><a class="reference internal" href="compute_temp_deform_eff.html"><span class="doc">temp/deform/eff</span></a></td>
<td><a class="reference internal" href="compute_temp_region_eff.html"><span class="doc">temp/region/eff</span></a></td>
<td><a class="reference internal" href="compute_temp_rotate.html"><span class="doc">temp/rotate</span></a></td>
<td><a class="reference internal" href="compute_xrd.html"><span class="doc">xrd</span></a></td>
</tr>
</tbody>
</table>
</div>
<hr class="docutils" />
<div class="section" id="pair-style-potentials">
<h2>3.8. Pair_style potentials</h2>
<p>See the <a class="reference internal" href="pair_style.html"><span class="doc">pair_style</span></a> command for an overview of pair
potentials. Click on the style itself for a full description. Many
of the styles have accelerated versions, which can be used if LAMMPS
is built with the <a class="reference internal" href="Section_accelerate.html"><span class="doc">appropriate accelerated package</span></a>. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k =
KOKKOS, o = USER-OMP, t = OPT.</p>
<table border="1" class="docutils">
<colgroup>
<col width="27%" />
<col width="24%" />
<col width="24%" />
<col width="25%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="pair_none.html"><span class="doc">none</span></a></td>
<td><a class="reference internal" href="pair_zero.html"><span class="doc">zero</span></a></td>
<td><a class="reference internal" href="pair_hybrid.html"><span class="doc">hybrid</span></a></td>
<td><a class="reference internal" href="pair_hybrid.html"><span class="doc">hybrid/overlay</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_adp.html"><span class="doc">adp (o)</span></a></td>
<td><a class="reference internal" href="pair_airebo.html"><span class="doc">airebo (o)</span></a></td>
<td><a class="reference internal" href="pair_airebo.html"><span class="doc">airebo/morse (o)</span></a></td>
<td><a class="reference internal" href="pair_beck.html"><span class="doc">beck (go)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_body.html"><span class="doc">body</span></a></td>
<td><a class="reference internal" href="pair_bop.html"><span class="doc">bop</span></a></td>
<td><a class="reference internal" href="pair_born.html"><span class="doc">born (go)</span></a></td>
<td><a class="reference internal" href="pair_born.html"><span class="doc">born/coul/long (go)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_born.html"><span class="doc">born/coul/long/cs</span></a></td>
<td><a class="reference internal" href="pair_born.html"><span class="doc">born/coul/msm (o)</span></a></td>
<td><a class="reference internal" href="pair_born.html"><span class="doc">born/coul/wolf (go)</span></a></td>
<td><a class="reference internal" href="pair_brownian.html"><span class="doc">brownian (o)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_brownian.html"><span class="doc">brownian/poly (o)</span></a></td>
<td><a class="reference internal" href="pair_buck.html"><span class="doc">buck (gkio)</span></a></td>
<td><a class="reference internal" href="pair_buck.html"><span class="doc">buck/coul/cut (gkio)</span></a></td>
<td><a class="reference internal" href="pair_buck.html"><span class="doc">buck/coul/long (gkio)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_buck.html"><span class="doc">buck/coul/long/cs</span></a></td>
<td><a class="reference internal" href="pair_buck.html"><span class="doc">buck/coul/msm (o)</span></a></td>
<td><a class="reference internal" href="pair_buck_long.html"><span class="doc">buck/long/coul/long (o)</span></a></td>
<td><a class="reference internal" href="pair_colloid.html"><span class="doc">colloid (go)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_comb.html"><span class="doc">comb (o)</span></a></td>
<td><a class="reference internal" href="pair_comb.html"><span class="doc">comb3</span></a></td>
<td><a class="reference internal" href="pair_coul.html"><span class="doc">coul/cut (gko)</span></a></td>
<td><a class="reference internal" href="pair_coul.html"><span class="doc">coul/debye (gko)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_coul.html"><span class="doc">coul/dsf (gko)</span></a></td>
<td><a class="reference internal" href="pair_coul.html"><span class="doc">coul/long (gko)</span></a></td>
<td><a class="reference internal" href="pair_coul.html"><span class="doc">coul/long/cs</span></a></td>
<td><a class="reference internal" href="pair_coul.html"><span class="doc">coul/msm</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_coul.html"><span class="doc">coul/streitz</span></a></td>
<td><a class="reference internal" href="pair_coul.html"><span class="doc">coul/wolf (ko)</span></a></td>
<td><a class="reference internal" href="pair_dpd.html"><span class="doc">dpd (o)</span></a></td>
<td><a class="reference internal" href="pair_dpd.html"><span class="doc">dpd/tstat (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_dsmc.html"><span class="doc">dsmc</span></a></td>
<td><a class="reference internal" href="pair_eam.html"><span class="doc">eam (gkot)</span></a></td>
<td><a class="reference internal" href="pair_eam.html"><span class="doc">eam/alloy (gkot)</span></a></td>
<td><a class="reference internal" href="pair_eam.html"><span class="doc">eam/fs (gkot)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_eim.html"><span class="doc">eim (o)</span></a></td>
<td><a class="reference internal" href="pair_gauss.html"><span class="doc">gauss (go)</span></a></td>
<td><a class="reference internal" href="pair_gayberne.html"><span class="doc">gayberne (gio)</span></a></td>
<td><a class="reference internal" href="pair_gran.html"><span class="doc">gran/hertz/history (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_gran.html"><span class="doc">gran/hooke (o)</span></a></td>
<td><a class="reference internal" href="pair_gran.html"><span class="doc">gran/hooke/history (o)</span></a></td>
<td><a class="reference internal" href="pair_hbond_dreiding.html"><span class="doc">hbond/dreiding/lj (o)</span></a></td>
<td><a class="reference internal" href="pair_hbond_dreiding.html"><span class="doc">hbond/dreiding/morse (o)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_kim.html"><span class="doc">kim</span></a></td>
<td><a class="reference internal" href="pair_lcbop.html"><span class="doc">lcbop</span></a></td>
<td><a class="reference internal" href="pair_line_lj.html"><span class="doc">line/lj</span></a></td>
<td><a class="reference internal" href="pair_charmm.html"><span class="doc">lj/charmm/coul/charmm (ko)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_charmm.html"><span class="doc">lj/charmm/coul/charmm/implicit (ko)</span></a></td>
<td><a class="reference internal" href="pair_charmm.html"><span class="doc">lj/charmm/coul/long (giko)</span></a></td>
<td><a class="reference internal" href="pair_charmm.html"><span class="doc">lj/charmm/coul/msm</span></a></td>
<td><a class="reference internal" href="pair_class2.html"><span class="doc">lj/class2 (gko)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_class2.html"><span class="doc">lj/class2/coul/cut (ko)</span></a></td>
<td><a class="reference internal" href="pair_class2.html"><span class="doc">lj/class2/coul/long (gko)</span></a></td>
<td><a class="reference internal" href="pair_lj_cubic.html"><span class="doc">lj/cubic (go)</span></a></td>
<td><a class="reference internal" href="pair_lj.html"><span class="doc">lj/cut (gikot)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_lj.html"><span class="doc">lj/cut/coul/cut (gko)</span></a></td>
<td><a class="reference internal" href="pair_lj.html"><span class="doc">lj/cut/coul/debye (gko)</span></a></td>
<td><a class="reference internal" href="pair_lj.html"><span class="doc">lj/cut/coul/dsf (gko)</span></a></td>
<td><a class="reference internal" href="pair_lj.html"><span class="doc">lj/cut/coul/long (gikot)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_lj.html"><span class="doc">lj/cut/coul/long/cs</span></a></td>
<td><a class="reference internal" href="pair_lj.html"><span class="doc">lj/cut/coul/msm (go)</span></a></td>
<td><a class="reference internal" href="pair_dipole.html"><span class="doc">lj/cut/dipole/cut (go)</span></a></td>
<td><a class="reference internal" href="pair_dipole.html"><span class="doc">lj/cut/dipole/long</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_lj.html"><span class="doc">lj/cut/tip4p/cut (o)</span></a></td>
<td><a class="reference internal" href="pair_lj.html"><span class="doc">lj/cut/tip4p/long (ot)</span></a></td>
<td><a class="reference internal" href="pair_lj_expand.html"><span class="doc">lj/expand (gko)</span></a></td>
<td><a class="reference internal" href="pair_gromacs.html"><span class="doc">lj/gromacs (gko)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_gromacs.html"><span class="doc">lj/gromacs/coul/gromacs (ko)</span></a></td>
<td><a class="reference internal" href="pair_lj_long.html"><span class="doc">lj/long/coul/long (o)</span></a></td>
<td><a class="reference internal" href="pair_dipole.html"><span class="doc">lj/long/dipole/long</span></a></td>
<td><a class="reference internal" href="pair_lj_long.html"><span class="doc">lj/long/tip4p/long</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_lj_smooth.html"><span class="doc">lj/smooth (o)</span></a></td>
<td><a class="reference internal" href="pair_lj_smooth_linear.html"><span class="doc">lj/smooth/linear (o)</span></a></td>
<td><a class="reference internal" href="pair_lj96.html"><span class="doc">lj96/cut (go)</span></a></td>
<td><a class="reference internal" href="pair_lubricate.html"><span class="doc">lubricate (o)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_lubricate.html"><span class="doc">lubricate/poly (o)</span></a></td>
<td><a class="reference internal" href="pair_lubricateU.html"><span class="doc">lubricateU</span></a></td>
<td><a class="reference internal" href="pair_lubricateU.html"><span class="doc">lubricateU/poly</span></a></td>
<td><a class="reference internal" href="pair_meam.html"><span class="doc">meam (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_mie.html"><span class="doc">mie/cut (o)</span></a></td>
<td><a class="reference internal" href="pair_morse.html"><span class="doc">morse (got)</span></a></td>
<td><a class="reference internal" href="pair_nb3b_harmonic.html"><span class="doc">nb3b/harmonic (o)</span></a></td>
<td><a class="reference internal" href="pair_nm.html"><span class="doc">nm/cut (o)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_nm.html"><span class="doc">nm/cut/coul/cut (o)</span></a></td>
<td><a class="reference internal" href="pair_nm.html"><span class="doc">nm/cut/coul/long (o)</span></a></td>
<td><a class="reference internal" href="pair_peri.html"><span class="doc">peri/eps</span></a></td>
<td><a class="reference internal" href="pair_peri.html"><span class="doc">peri/lps (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_peri.html"><span class="doc">peri/pmb (o)</span></a></td>
<td><a class="reference internal" href="pair_peri.html"><span class="doc">peri/ves</span></a></td>
<td><a class="reference internal" href="pair_polymorphic.html"><span class="doc">polymorphic</span></a></td>
<td><a class="reference internal" href="pair_reax.html"><span class="doc">reax</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_airebo.html"><span class="doc">rebo (o)</span></a></td>
<td><a class="reference internal" href="pair_resquared.html"><span class="doc">resquared (go)</span></a></td>
<td><a class="reference internal" href="pair_snap.html"><span class="doc">snap</span></a></td>
<td><a class="reference internal" href="pair_soft.html"><span class="doc">soft (go)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_sw.html"><span class="doc">sw (gkio)</span></a></td>
<td><a class="reference internal" href="pair_table.html"><span class="doc">table (gko)</span></a></td>
<td><a class="reference internal" href="pair_tersoff.html"><span class="doc">tersoff (gkio)</span></a></td>
<td><a class="reference internal" href="pair_tersoff_mod.html"><span class="doc">tersoff/mod (gko)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_tersoff_zbl.html"><span class="doc">tersoff/zbl (gko)</span></a></td>
<td><a class="reference internal" href="pair_coul.html"><span class="doc">tip4p/cut (o)</span></a></td>
<td><a class="reference internal" href="pair_coul.html"><span class="doc">tip4p/long (o)</span></a></td>
<td><a class="reference internal" href="pair_tri_lj.html"><span class="doc">tri/lj</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_vashishta.html"><span class="doc">vashishta (o)</span></a></td>
<td><a class="reference internal" href="pair_yukawa.html"><span class="doc">yukawa (go)</span></a></td>
<td><a class="reference internal" href="pair_yukawa_colloid.html"><span class="doc">yukawa/colloid (go)</span></a></td>
<td><a class="reference internal" href="pair_zbl.html"><span class="doc">zbl (go)</span></a></td>
</tr>
</tbody>
</table>
<p>These are additional pair styles in USER packages, which can be used
if <a class="reference internal" href="Section_start.html#start-3"><span class="std std-ref">LAMMPS is built with the appropriate package</span></a>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="24%" />
<col width="30%" />
<col width="24%" />
<col width="22%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="pair_awpmd.html"><span class="doc">awpmd/cut</span></a></td>
<td><a class="reference internal" href="pair_mdf.html"><span class="doc">buck/mdf</span></a></td>
<td><a class="reference internal" href="pair_lj_soft.html"><span class="doc">coul/cut/soft (o)</span></a></td>
<td><a class="reference internal" href="pair_coul_diel.html"><span class="doc">coul/diel (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_lj_soft.html"><span class="doc">coul/long/soft (o)</span></a></td>
<td><a class="reference internal" href="pair_dpd_fdt.html"><span class="doc">dpd/fdt</span></a></td>
<td><a class="reference internal" href="pair_dpd_fdt.html"><span class="doc">dpd/fdt/energy</span></a></td>
<td><a class="reference internal" href="pair_eam.html"><span class="doc">eam/cd (o)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_edip.html"><span class="doc">edip (o)</span></a></td>
<td><a class="reference internal" href="pair_eff.html"><span class="doc">eff/cut</span></a></td>
<td><a class="reference internal" href="pair_exp6_rx.html"><span class="doc">exp6/rx</span></a></td>
<td><a class="reference internal" href="pair_gauss.html"><span class="doc">gauss/cut</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_mdf.html"><span class="doc">lennard/mdf</span></a></td>
<td><a class="reference internal" href="pair_list.html"><span class="doc">list</span></a></td>
<td><a class="reference internal" href="pair_charmm.html"><span class="doc">lj/charmm/coul/long/soft (o)</span></a></td>
<td><a class="reference internal" href="pair_lj_soft.html"><span class="doc">lj/cut/coul/cut/soft (o)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_lj_soft.html"><span class="doc">lj/cut/coul/long/soft (o)</span></a></td>
<td><a class="reference internal" href="pair_dipole.html"><span class="doc">lj/cut/dipole/sf (go)</span></a></td>
<td><a class="reference internal" href="pair_lj_soft.html"><span class="doc">lj/cut/soft (o)</span></a></td>
<td><a class="reference internal" href="pair_thole.html"><span class="doc">lj/cut/thole/long (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_lj_soft.html"><span class="doc">lj/cut/tip4p/long/soft (o)</span></a></td>
<td><a class="reference internal" href="pair_mdf.html"><span class="doc">lj/mdf</span></a></td>
<td><a class="reference internal" href="pair_sdk.html"><span class="doc">lj/sdk (gko)</span></a></td>
<td><a class="reference internal" href="pair_sdk.html"><span class="doc">lj/sdk/coul/long (go)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_sdk.html"><span class="doc">lj/sdk/coul/msm (o)</span></a></td>
<td><a class="reference internal" href="pair_lj_sf.html"><span class="doc">lj/sf (o)</span></a></td>
<td><a class="reference internal" href="pair_meam_spline.html"><span class="doc">meam/spline</span></a></td>
<td><a class="reference internal" href="pair_meam_sw_spline.html"><span class="doc">meam/sw/spline</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_mgpt.html"><span class="doc">mgpt</span></a></td>
<td><a class="reference internal" href="pair_morse.html"><span class="doc">morse/smooth/linear</span></a></td>
<td><a class="reference internal" href="pair_morse.html"><span class="doc">morse/soft</span></a></td>
<td><a class="reference internal" href="pair_multi_lucy.html"><span class="doc">multi/lucy</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_multi_lucy_rx.html"><span class="doc">multi/lucy/rx</span></a></td>
<td><a class="reference internal" href="pair_quip.html"><span class="doc">quip</span></a></td>
<td><a class="reference internal" href="pair_reax_c.html"><span class="doc">reax/c (k)</span></a></td>
<td><a class="reference internal" href="pair_smd_hertz.html"><span class="doc">smd/hertz</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_smd_tlsph.html"><span class="doc">smd/tlsph</span></a></td>
<td><a class="reference internal" href="pair_smd_triangulated_surface.html"><span class="doc">smd/triangulated/surface</span></a></td>
<td><a class="reference internal" href="pair_smd_ulsph.html"><span class="doc">smd/ulsph</span></a></td>
<td><a class="reference internal" href="pair_smtbq.html"><span class="doc">smtbq</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_sph_heatconduction.html"><span class="doc">sph/heatconduction</span></a></td>
<td><a class="reference internal" href="pair_sph_idealgas.html"><span class="doc">sph/idealgas</span></a></td>
<td><a class="reference internal" href="pair_sph_lj.html"><span class="doc">sph/lj</span></a></td>
<td><a class="reference internal" href="pair_sph_rhosum.html"><span class="doc">sph/rhosum</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="pair_sph_taitwater.html"><span class="doc">sph/taitwater</span></a></td>
<td><a class="reference internal" href="pair_sph_taitwater_morris.html"><span class="doc">sph/taitwater/morris</span></a></td>
<td><a class="reference internal" href="pair_srp.html"><span class="doc">srp</span></a></td>
<td><a class="reference internal" href="pair_table_rx.html"><span class="doc">table/rx</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="pair_tersoff.html"><span class="doc">tersoff/table (o)</span></a></td>
<td><a class="reference internal" href="pair_thole.html"><span class="doc">thole</span></a></td>
<td><a class="reference internal" href="pair_lj_soft.html"><span class="doc">tip4p/long/soft (o)</span></a></td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</div>
<hr class="docutils" />
<div class="section" id="bond-style-potentials">
<h2>3.9. Bond_style potentials</h2>
<p>See the <a class="reference internal" href="bond_style.html"><span class="doc">bond_style</span></a> command for an overview of bond
potentials. Click on the style itself for a full description. Some
of the styles have accelerated versions, which can be used if LAMMPS
is built with the <a class="reference internal" href="Section_accelerate.html"><span class="doc">appropriate accelerated package</span></a>. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k =
KOKKOS, o = USER-OMP, t = OPT.</p>
<table border="1" class="docutils">
<colgroup>
<col width="25%" />
<col width="28%" />
<col width="25%" />
<col width="22%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="bond_none.html"><span class="doc">none</span></a></td>
<td><a class="reference internal" href="bond_zero.html"><span class="doc">zero</span></a></td>
<td><a class="reference internal" href="bond_hybrid.html"><span class="doc">hybrid</span></a></td>
<td><a class="reference internal" href="bond_class2.html"><span class="doc">class2 (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="bond_fene.html"><span class="doc">fene (iko)</span></a></td>
<td><a class="reference internal" href="bond_fene_expand.html"><span class="doc">fene/expand (o)</span></a></td>
<td><a class="reference internal" href="bond_harmonic.html"><span class="doc">harmonic (ko)</span></a></td>
<td><a class="reference internal" href="bond_morse.html"><span class="doc">morse (o)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="bond_nonlinear.html"><span class="doc">nonlinear (o)</span></a></td>
<td><a class="reference internal" href="bond_quartic.html"><span class="doc">quartic (o)</span></a></td>
<td><a class="reference internal" href="bond_table.html"><span class="doc">table (o)</span></a></td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>These are additional bond styles in USER packages, which can be used
if <a class="reference internal" href="Section_start.html#start-3"><span class="std std-ref">LAMMPS is built with the appropriate package</span></a>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="46%" />
<col width="54%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="bond_harmonic_shift.html"><span class="doc">harmonic/shift (o)</span></a></td>
<td><a class="reference internal" href="bond_harmonic_shift_cut.html"><span class="doc">harmonic/shift/cut (o)</span></a></td>
</tr>
</tbody>
</table>
</div>
<hr class="docutils" />
<div class="section" id="angle-style-potentials">
<h2>3.10. Angle_style potentials</h2>
<p>See the <a class="reference internal" href="angle_style.html"><span class="doc">angle_style</span></a> command for an overview of
angle potentials. Click on the style itself for a full description.
Some of the styles have accelerated versions, which can be used if
LAMMPS is built with the <a class="reference internal" href="Section_accelerate.html"><span class="doc">appropriate accelerated package</span></a>. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
USER-OMP, t = OPT.</p>
<table border="1" class="docutils">
<colgroup>
<col width="27%" />
<col width="21%" />
<col width="24%" />
<col width="28%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="angle_none.html"><span class="doc">none</span></a></td>
<td><a class="reference internal" href="angle_zero.html"><span class="doc">zero</span></a></td>
<td><a class="reference internal" href="angle_hybrid.html"><span class="doc">hybrid</span></a></td>
<td><a class="reference internal" href="angle_charmm.html"><span class="doc">charmm (ko)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="angle_class2.html"><span class="doc">class2 (o)</span></a></td>
<td><a class="reference internal" href="angle_cosine.html"><span class="doc">cosine (o)</span></a></td>
<td><a class="reference internal" href="angle_cosine_delta.html"><span class="doc">cosine/delta (o)</span></a></td>
<td><a class="reference internal" href="angle_cosine_periodic.html"><span class="doc">cosine/periodic (o)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="angle_cosine_squared.html"><span class="doc">cosine/squared (o)</span></a></td>
<td><a class="reference internal" href="angle_harmonic.html"><span class="doc">harmonic (iko)</span></a></td>
<td><a class="reference internal" href="angle_table.html"><span class="doc">table (o)</span></a></td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>These are additional angle styles in USER packages, which can be used
if <a class="reference internal" href="Section_start.html#start-3"><span class="std std-ref">LAMMPS is built with the appropriate package</span></a>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="29%" />
<col width="31%" />
<col width="20%" />
<col width="21%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="angle_cosine_shift.html"><span class="doc">cosine/shift (o)</span></a></td>
<td><a class="reference internal" href="angle_cosine_shift_exp.html"><span class="doc">cosine/shift/exp (o)</span></a></td>
<td><a class="reference internal" href="angle_dipole.html"><span class="doc">dipole (o)</span></a></td>
<td><a class="reference internal" href="angle_fourier.html"><span class="doc">fourier (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="angle_fourier_simple.html"><span class="doc">fourier/simple (o)</span></a></td>
<td><a class="reference internal" href="angle_quartic.html"><span class="doc">quartic (o)</span></a></td>
<td><a class="reference internal" href="angle_sdk.html"><span class="doc">sdk</span></a></td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</div>
<hr class="docutils" />
<div class="section" id="dihedral-style-potentials">
<h2>3.11. Dihedral_style potentials</h2>
<p>See the <a class="reference internal" href="dihedral_style.html"><span class="doc">dihedral_style</span></a> command for an overview
of dihedral potentials. Click on the style itself for a full
description. Some of the styles have accelerated versions, which can
be used if LAMMPS is built with the <a class="reference internal" href="Section_accelerate.html"><span class="doc">appropriate accelerated package</span></a>. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
USER-OMP, t = OPT.</p>
<table border="1" class="docutils">
<colgroup>
<col width="22%" />
<col width="25%" />
<col width="21%" />
<col width="32%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="dihedral_none.html"><span class="doc">none</span></a></td>
<td><a class="reference internal" href="dihedral_zero.html"><span class="doc">zero</span></a></td>
<td><a class="reference internal" href="dihedral_hybrid.html"><span class="doc">hybrid</span></a></td>
<td><a class="reference internal" href="dihedral_charmm.html"><span class="doc">charmm (ko)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="dihedral_class2.html"><span class="doc">class2 (o)</span></a></td>
<td><a class="reference internal" href="dihedral_harmonic.html"><span class="doc">harmonic (io)</span></a></td>
<td><a class="reference internal" href="dihedral_helix.html"><span class="doc">helix (o)</span></a></td>
<td><a class="reference internal" href="dihedral_multi_harmonic.html"><span class="doc">multi/harmonic (o)</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="dihedral_opls.html"><span class="doc">opls (iko)</span></a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>These are additional dihedral styles in USER packages, which can be
used if <a class="reference internal" href="Section_start.html#start-3"><span class="std std-ref">LAMMPS is built with the appropriate package</span></a>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="31%" />
<col width="21%" />
<col width="24%" />
<col width="24%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="dihedral_cosine_shift_exp.html"><span class="doc">cosine/shift/exp (o)</span></a></td>
<td><a class="reference internal" href="dihedral_fourier.html"><span class="doc">fourier (o)</span></a></td>
<td><a class="reference internal" href="dihedral_nharmonic.html"><span class="doc">nharmonic (o)</span></a></td>
<td><a class="reference internal" href="dihedral_quadratic.html"><span class="doc">quadratic (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="dihedral_spherical.html"><span class="doc">spherical (o)</span></a></td>
<td><a class="reference internal" href="dihedral_table.html"><span class="doc">table (o)</span></a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</div>
<hr class="docutils" />
<div class="section" id="improper-style-potentials">
<h2>3.12. Improper_style potentials</h2>
<p>See the <a class="reference internal" href="improper_style.html"><span class="doc">improper_style</span></a> command for an overview
of improper potentials. Click on the style itself for a full
description. Some of the styles have accelerated versions, which can
be used if LAMMPS is built with the <a class="reference internal" href="Section_accelerate.html"><span class="doc">appropriate accelerated package</span></a>. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
USER-OMP, t = OPT.</p>
<table border="1" class="docutils">
<colgroup>
<col width="22%" />
<col width="27%" />
<col width="27%" />
<col width="24%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="improper_none.html"><span class="doc">none</span></a></td>
<td><a class="reference internal" href="improper_zero.html"><span class="doc">zero</span></a></td>
<td><a class="reference internal" href="improper_hybrid.html"><span class="doc">hybrid</span></a></td>
<td><a class="reference internal" href="improper_class2.html"><span class="doc">class2 (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="improper_cvff.html"><span class="doc">cvff (io)</span></a></td>
<td><a class="reference internal" href="improper_harmonic.html"><span class="doc">harmonic (ko)</span></a></td>
<td><a class="reference internal" href="improper_umbrella.html"><span class="doc">umbrella (o)</span></a></td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>These are additional improper styles in USER packages, which can be
used if <a class="reference internal" href="Section_start.html#start-3"><span class="std std-ref">LAMMPS is built with the appropriate package</span></a>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="24%" />
<col width="26%" />
<col width="27%" />
<col width="23%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="improper_cossq.html"><span class="doc">cossq (o)</span></a></td>
<td><a class="reference internal" href="improper_distance.html"><span class="doc">distance</span></a></td>
<td><a class="reference internal" href="improper_fourier.html"><span class="doc">fourier (o)</span></a></td>
<td><a class="reference internal" href="improper_ring.html"><span class="doc">ring (o)</span></a></td>
</tr>
</tbody>
</table>
</div>
<hr class="docutils" />
<div class="section" id="kspace-solvers">
<h2>3.13. Kspace solvers</h2>
<p>See the <a class="reference internal" href="kspace_style.html"><span class="doc">kspace_style</span></a> command for an overview of
Kspace solvers. Click on the style itself for a full description.
Some of the styles have accelerated versions, which can be used if
LAMMPS is built with the <a class="reference internal" href="Section_accelerate.html"><span class="doc">appropriate accelerated package</span></a>. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
USER-OMP, t = OPT.</p>
<table border="1" class="docutils">
<colgroup>
<col width="25%" />
<col width="26%" />
<col width="23%" />
<col width="27%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="kspace_style.html"><span class="doc">ewald (o)</span></a></td>
<td><a class="reference internal" href="kspace_style.html"><span class="doc">ewald/disp</span></a></td>
<td><a class="reference internal" href="kspace_style.html"><span class="doc">msm (o)</span></a></td>
<td><a class="reference internal" href="kspace_style.html"><span class="doc">msm/cg (o)</span></a></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="kspace_style.html"><span class="doc">pppm (go)</span></a></td>
<td><a class="reference internal" href="kspace_style.html"><span class="doc">pppm/cg (o)</span></a></td>
<td><a class="reference internal" href="kspace_style.html"><span class="doc">pppm/disp</span></a></td>
<td><a class="reference internal" href="kspace_style.html"><span class="doc">pppm/disp/tip4p</span></a></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="kspace_style.html"><span class="doc">pppm/stagger</span></a></td>
<td><a class="reference internal" href="kspace_style.html"><span class="doc">pppm/tip4p (o)</span></a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="Section_packages.html" class="btn btn-neutral float-right" title="4. Packages" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="Section_start.html" class="btn btn-neutral" title="2. Getting Started" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2013 Sandia Corporation.
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./',
VERSION:'',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/lightbox.min.js"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2-customize/jquery-noconflict.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>
\ No newline at end of file
diff --git a/doc/html/Section_start.html b/doc/html/Section_start.html
index 3612f18a9..c6462223d 100644
--- a/doc/html/Section_start.html
+++ b/doc/html/Section_start.html
@@ -1,1942 +1,1944 @@
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>2. Getting Started &mdash; LAMMPS documentation</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/sphinxcontrib-images/LightBox2/lightbox2/css/lightbox.css" type="text/css" />
<link rel="top" title="LAMMPS documentation" href="index.html"/>
<link rel="next" title="3. Commands" href="Section_commands.html"/>
<link rel="prev" title="1. Introduction" href="Section_intro.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-nav-search">
<a href="Manual.html" class="icon icon-home"> LAMMPS
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="Section_intro.html">1. Introduction</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">2. Getting Started</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#what-s-in-the-lammps-distribution">2.1. What&#8217;s in the LAMMPS distribution</a></li>
<li class="toctree-l2"><a class="reference internal" href="#making-lammps">2.2. Making LAMMPS</a></li>
<li class="toctree-l2"><a class="reference internal" href="#making-lammps-with-optional-packages">2.3. Making LAMMPS with optional packages</a></li>
<li class="toctree-l2"><a class="reference internal" href="#building-lammps-via-the-make-py-tool">2.4. Building LAMMPS via the Make.py tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="#building-lammps-as-a-library">2.5. Building LAMMPS as a library</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#static-library">2.5.1. <strong>Static library:</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#shared-library">2.5.2. <strong>Shared library:</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#additional-requirement-for-using-a-shared-library">2.5.3. <strong>Additional requirement for using a shared library:</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#calling-the-lammps-library">2.5.4. <strong>Calling the LAMMPS library:</strong></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#running-lammps">2.6. Running LAMMPS</a></li>
<li class="toctree-l2"><a class="reference internal" href="#command-line-options">2.7. Command-line options</a></li>
<li class="toctree-l2"><a class="reference internal" href="#lammps-screen-output">2.8. LAMMPS screen output</a></li>
<li class="toctree-l2"><a class="reference internal" href="#tips-for-users-of-previous-lammps-versions">2.9. Tips for users of previous LAMMPS versions</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Section_commands.html">3. Commands</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_packages.html">4. Packages</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_accelerate.html">5. Accelerating LAMMPS performance</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_howto.html">6. How-to discussions</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_example.html">7. Example problems</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_perf.html">8. Performance &amp; scalability</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_tools.html">9. Additional tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_modify.html">10. Modifying &amp; extending LAMMPS</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_python.html">11. Python interface to LAMMPS</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_errors.html">12. Errors</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_history.html">13. Future and history</a></li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="Manual.html">LAMMPS</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="Manual.html">Docs</a> &raquo;</li>
<li>2. Getting Started</li>
<li class="wy-breadcrumbs-aside">
<a href="http://lammps.sandia.gov">Website</a>
<a href="Section_commands.html#comm">Commands</a>
</li>
</ul>
<hr/>
<div class="rst-footer-buttons" style="margin-bottom: 1em" role="navigation" aria-label="footer navigation">
<a href="Section_commands.html" class="btn btn-neutral float-right" title="3. Commands" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="Section_intro.html" class="btn btn-neutral" title="1. Introduction" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="getting-started">
<h1>2. Getting Started</h1>
<p>This section describes how to build and run LAMMPS, for both new and
experienced users.</p>
<div class="line-block">
<div class="line">2.1 <a class="reference internal" href="#start-1"><span class="std std-ref">What&#8217;s in the LAMMPS distribution</span></a></div>
<div class="line">2.2 <a class="reference internal" href="#start-2"><span class="std std-ref">Making LAMMPS</span></a></div>
<div class="line">2.3 <a class="reference internal" href="#start-3"><span class="std std-ref">Making LAMMPS with optional packages</span></a></div>
<div class="line">2.4 <a class="reference internal" href="#start-4"><span class="std std-ref">Building LAMMPS via the Make.py script</span></a></div>
<div class="line">2.5 <a class="reference internal" href="#start-5"><span class="std std-ref">Building LAMMPS as a library</span></a></div>
<div class="line">2.6 <a class="reference internal" href="#start-6"><span class="std std-ref">Running LAMMPS</span></a></div>
<div class="line">2.7 <a class="reference internal" href="#start-7"><span class="std std-ref">Command-line options</span></a></div>
<div class="line">2.8 <a class="reference internal" href="#start-8"><span class="std std-ref">Screen output</span></a></div>
<div class="line">2.9 <a class="reference internal" href="#start-9"><span class="std std-ref">Tips for users of previous versions</span></a></div>
<div class="line"><br /></div>
</div>
<div class="section" id="what-s-in-the-lammps-distribution">
<span id="start-1"></span><h2>2.1. What&#8217;s in the LAMMPS distribution</h2>
<p>When you download a LAMMPS tarball you will need to unzip and untar
the downloaded file with the following commands, after placing the
tarball in an appropriate directory.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">gunzip</span> <span class="n">lammps</span><span class="o">*.</span><span class="n">tar</span><span class="o">.</span><span class="n">gz</span>
<span class="n">tar</span> <span class="n">xvf</span> <span class="n">lammps</span><span class="o">*.</span><span class="n">tar</span>
</pre></div>
</div>
<p>This will create a LAMMPS directory containing two files and several
sub-directories:</p>
<table border="1" class="docutils">
<colgroup>
<col width="21%" />
<col width="79%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td>README</td>
<td>text file</td>
</tr>
<tr class="row-even"><td>LICENSE</td>
<td>the GNU General Public License (GPL)</td>
</tr>
<tr class="row-odd"><td>bench</td>
<td>benchmark problems</td>
</tr>
<tr class="row-even"><td>doc</td>
<td>documentation</td>
</tr>
<tr class="row-odd"><td>examples</td>
<td>simple test problems</td>
</tr>
<tr class="row-even"><td>potentials</td>
<td>embedded atom method (EAM) potential files</td>
</tr>
<tr class="row-odd"><td>src</td>
<td>source files</td>
</tr>
<tr class="row-even"><td>tools</td>
<td>pre- and post-processing tools</td>
</tr>
</tbody>
</table>
<p>Note that the <a class="reference external" href="http://lammps.sandia.gov/download.html">download page</a> also has links to download
Windows exectubles and installers, as well as pre-built executables
for a few specific Linux distributions. It also has instructions for
how to download/install LAMMPS for Macs (via Homebrew), and to
download and update LAMMPS from SVN and Git repositories, which gives
you the same files that are in the download tarball.</p>
<p>The Windows and Linux executables for serial or parallel only include
certain packages and bug-fixes/upgrades listed on <a class="reference external" href="http://lammps.sandia.gov/bug.html">this page</a> up to a certain date, as
stated on the download page. If you want an executable with
non-included packages or that is more current, then you&#8217;ll need to
build LAMMPS yourself, as discussed in the next section.</p>
<p>Skip to the <a class="reference internal" href="#start-6"><span class="std std-ref">Running LAMMPS</span></a> sections for info on how to
launch a LAMMPS Windows executable on a Windows box.</p>
<hr class="docutils" />
</div>
<div class="section" id="making-lammps">
<span id="start-2"></span><h2>2.2. Making LAMMPS</h2>
<p>This section has the following sub-sections:</p>
<ul class="simple">
<li><a class="reference internal" href="#start-2-1"><span class="std std-ref">Read this first</span></a></li>
<li><a class="reference internal" href="#start-2-2"><span class="std std-ref">Steps to build a LAMMPS executable</span></a></li>
<li><a class="reference internal" href="#start-2-3"><span class="std std-ref">Common errors that can occur when making LAMMPS</span></a></li>
<li><a class="reference internal" href="#start-2-4"><span class="std std-ref">Additional build tips</span></a></li>
<li><a class="reference internal" href="#start-2-5"><span class="std std-ref">Building for a Mac</span></a></li>
<li><a class="reference internal" href="#start-2-6"><span class="std std-ref">Building for Windows</span></a></li>
</ul>
<hr class="docutils" />
<p id="start-2-1"><a href="#id1"><span class="problematic" id="id2">**</span></a><em>Read this first:</em>**</p>
<p>If you want to avoid building LAMMPS yourself, read the preceeding
section about options available for downloading and installing
executables. Details are discussed on the <a class="reference external" href="http://lammps.sandia.gov/download.html">download</a> page.</p>
<p>Building LAMMPS can be simple or not-so-simple. If all you need are
the default packages installed in LAMMPS, and MPI is already installed
on your machine, or you just want to run LAMMPS in serial, then you
can typically use the Makefile.mpi or Makefile.serial files in
src/MAKE by typing one of these lines (from the src dir):</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">make</span> <span class="n">mpi</span>
<span class="n">make</span> <span class="n">serial</span>
</pre></div>
</div>
<p>Note that on a facility supercomputer, there are often &#8220;modules&#8221;
loaded in your environment that provide the compilers and MPI you
should use. In this case, the &#8220;mpicxx&#8221; compile/link command in
Makefile.mpi should just work by accessing those modules.</p>
<p>It may be the case that one of the other Makefile.machine files in the
src/MAKE sub-directories is a better match to your system (type &#8220;make&#8221;
to see a list), you can use it as-is by typing (for example):</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">make</span> <span class="n">stampede</span>
</pre></div>
</div>
<p>If any of these builds (with an existing Makefile.machine) works on
your system, then you&#8217;re done!</p>
<p>If you want to do one of the following:</p>
<ul class="simple">
<li>use optional LAMMPS features that require additional libraries</li>
<li>use optional packages that require additional libraries</li>
<li>use optional accelerator packages that require special compiler/linker settings</li>
<li>run on a specialized platform that has its own compilers, settings, or other libs to use</li>
</ul>
<p>then building LAMMPS is more complicated. You may need to find where
auxiliary libraries exist on your machine or install them if they
don&#8217;t. You may need to build additional libraries that are part of
the LAMMPS package, before building LAMMPS. You may need to edit a
Makefile.machine file to make it compatible with your system.</p>
<p>Note that there is a Make.py tool in the src directory that automates
several of these steps, but you still have to know what you are doing.
<a class="reference internal" href="#start-4"><span class="std std-ref">Section 2.4</span></a> below describes the tool. It is a convenient
way to work with installing/un-installing various packages, the
Makefile.machine changes required by some packages, and the auxiliary
libraries some of them use.</p>
<p>Please read the following sections carefully. If you are not
comfortable with makefiles, or building codes on a Unix platform, or
running an MPI job on your machine, please find a local expert to help
you. Many compilation, linking, and run problems that users have are
often not really LAMMPS issues - they are peculiar to the user&#8217;s
system, compilers, libraries, etc. Such questions are better answered
by a local expert.</p>
<p>If you have a build problem that you are convinced is a LAMMPS issue
(e.g. the compiler complains about a line of LAMMPS source code), then
please post the issue to the <a class="reference external" href="http://lammps.sandia.gov/mail.html">LAMMPS mail list</a>.</p>
<p>If you succeed in building LAMMPS on a new kind of machine, for which
there isn&#8217;t a similar machine Makefile included in the
src/MAKE/MACHINES directory, then send it to the developers and we can
include it in the LAMMPS distribution.</p>
<hr class="docutils" />
<p id="start-2-2"><a href="#id3"><span class="problematic" id="id4">**</span></a><em>Steps to build a LAMMPS executable:</em>**</p>
<p><strong>Step 0</strong></p>
<p>The src directory contains the C++ source and header files for LAMMPS.
It also contains a top-level Makefile and a MAKE sub-directory with
low-level Makefile.* files for many systems and machines. See the
src/MAKE/README file for a quick overview of what files are available
and what sub-directories they are in.</p>
<p>The src/MAKE dir has a few files that should work as-is on many
platforms. The src/MAKE/OPTIONS dir has more that invoke additional
compiler, MPI, and other setting options commonly used by LAMMPS, to
illustrate their syntax. The src/MAKE/MACHINES dir has many more that
have been tweaked or optimized for specific machines. These files are
all good starting points if you find you need to change them for your
machine. Put any file you edit into the src/MAKE/MINE directory and
it will be never be touched by any LAMMPS updates.</p>
<p>&gt;From within the src directory, type &#8220;make&#8221; or &#8220;gmake&#8221;. You should see
a list of available choices from src/MAKE and all of its
sub-directories. If one of those has the options you want or is the
machine you want, you can type a command like:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">make</span> <span class="n">mpi</span>
<span class="ow">or</span>
<span class="n">make</span> <span class="n">serial_icc</span>
<span class="ow">or</span>
<span class="n">gmake</span> <span class="n">mac</span>
</pre></div>
</div>
<p>Note that the corresponding Makefile.machine can exist in src/MAKE or
any of its sub-directories. If a file with the same name appears in
multiple places (not a good idea), the order they are used is as
follows: src/MAKE/MINE, src/MAKE, src/MAKE/OPTIONS, src/MAKE/MACHINES.
This gives preference to a file you have created/edited and put in
src/MAKE/MINE.</p>
<p>Note that on a multi-processor or multi-core platform you can launch a
parallel make, by using the &#8220;-j&#8221; switch with the make command, which
will build LAMMPS more quickly.</p>
<p>If you get no errors and an executable like lmp_mpi or lmp_g++_serial
or lmp_mac is produced, then you&#8217;re done; it&#8217;s your lucky day.</p>
<p>Note that by default only a few of LAMMPS optional packages are
installed. To build LAMMPS with optional packages, see <a class="reference internal" href="#start-3"><span class="std std-ref">this section</span></a> below.</p>
<p><strong>Step 1</strong></p>
<p>If Step 0 did not work, you will need to create a low-level Makefile
for your machine, like Makefile.foo. You should make a copy of an
existing Makefile.* in src/MAKE or one of its sub-directories as a
starting point. The only portions of the file you need to edit are
the first line, the &#8220;compiler/linker settings&#8221; section, and the
&#8220;LAMMPS-specific settings&#8221; section. When it works, put the edited
file in src/MAKE/MINE and it will not be altered by any future LAMMPS
updates.</p>
<p><strong>Step 2</strong></p>
<p>Change the first line of Makefile.foo to list the word &#8220;foo&#8221; after the
&#8220;#&#8221;, and whatever other options it will set. This is the line you
will see if you just type &#8220;make&#8221;.</p>
<p><strong>Step 3</strong></p>
<p>The &#8220;compiler/linker settings&#8221; section lists compiler and linker
settings for your C++ compiler, including optimization flags. You can
use g++, the open-source GNU compiler, which is available on all Unix
systems. You can also use mpicxx which will typically be available if
MPI is installed on your system, though you should check which actual
compiler it wraps. Vendor compilers often produce faster code. On
boxes with Intel CPUs, we suggest using the Intel icc compiler, which
can be downloaded from <a class="reference external" href="http://www.intel.com/software/products/noncom">Intel&#8217;s compiler site</a>.</p>
<p>If building a C++ code on your machine requires additional libraries,
then you should list them as part of the LIB variable. You should
not need to do this if you use mpicxx.</p>
<p>The DEPFLAGS setting is what triggers the C++ compiler to create a
dependency list for a source file. This speeds re-compilation when
source (<em>.cpp) or header (</em>.h) files are edited. Some compilers do
not support dependency file creation, or may use a different switch
than -D. GNU g++ and Intel icc works with -D. If your compiler can&#8217;t
create dependency files, then you&#8217;ll need to create a Makefile.foo
patterned after Makefile.storm, which uses different rules that do not
involve dependency files. Note that when you build LAMMPS for the
first time on a new platform, a long list of <a href="#id5"><span class="problematic" id="id6">*</span></a>.d files will be printed
out rapidly. This is not an error; it is the Makefile doing its
normal creation of dependencies.</p>
<p><strong>Step 4</strong></p>
<p>The &#8220;system-specific settings&#8221; section has several parts. Note that
if you change any -D setting in this section, you should do a full
re-compile, after typing &#8220;make clean&#8221; (which will describe different
clean options).</p>
<p>The LMP_INC variable is used to include options that turn on ifdefs
within the LAMMPS code. The options that are currently recogized are:</p>
<ul class="simple">
<li>-DLAMMPS_GZIP</li>
<li>-DLAMMPS_JPEG</li>
<li>-DLAMMPS_PNG</li>
<li>-DLAMMPS_FFMPEG</li>
<li>-DLAMMPS_MEMALIGN</li>
<li>-DLAMMPS_XDR</li>
<li>-DLAMMPS_SMALLBIG</li>
<li>-DLAMMPS_BIGBIG</li>
<li>-DLAMMPS_SMALLSMALL</li>
<li>-DLAMMPS_LONGLONG_TO_LONG</li>
<li>-DPACK_ARRAY</li>
<li>-DPACK_POINTER</li>
<li>-DPACK_MEMCPY</li>
</ul>
<p>The read_data and dump commands will read/write gzipped files if you
compile with -DLAMMPS_GZIP. It requires that your machine supports
the &#8220;popen()&#8221; function in the standard runtime library and that a gzip
executable can be found by LAMMPS during a run.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">on some clusters with high-speed networks, using the fork()
library calls (required by popen()) can interfere with the fast
communication library and lead to simulations using compressed output
or input to hang or crash. For selected operations, compressed file
I/O is also available using a compression library instead, which are
provided in the COMPRESS package. From more details about compiling
LAMMPS with packages, please see below.</p>
</div>
<p>If you use -DLAMMPS_JPEG, the <a class="reference internal" href="dump_image.html"><span class="doc">dump image</span></a> command
will be able to write out JPEG image files. For JPEG files, you must
also link LAMMPS with a JPEG library, as described below. If you use
-DLAMMPS_PNG, the <a class="reference internal" href="dump.html"><span class="doc">dump image</span></a> command will be able to write
out PNG image files. For PNG files, you must also link LAMMPS with a
PNG library, as described below. If neither of those two defines are
used, LAMMPS will only be able to write out uncompressed PPM image
files.</p>
<p>If you use -DLAMMPS_FFMPEG, the <a class="reference internal" href="dump_image.html"><span class="doc">dump movie</span></a> command
will be available to support on-the-fly generation of rendered movies
the need to store intermediate image files. It requires that your
machines supports the &#8220;popen&#8221; function in the standard runtime library
and that an FFmpeg executable can be found by LAMMPS during the run.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Similar to the note above, this option can conflict with
high-speed networks, because it uses popen().</p>
</div>
<p>Using -DLAMMPS_MEMALIGN=&lt;bytes&gt; enables the use of the
posix_memalign() call instead of malloc() when large chunks or memory
are allocated by LAMMPS. This can help to make more efficient use of
vector instructions of modern CPUS, since dynamically allocated memory
has to be aligned on larger than default byte boundaries (e.g. 16
bytes instead of 8 bytes on x86 type platforms) for optimal
performance.</p>
<p>If you use -DLAMMPS_XDR, the build will include XDR compatibility
files for doing particle dumps in XTC format. This is only necessary
if your platform does have its own XDR files available. See the
Restrictions section of the <a class="reference internal" href="dump.html"><span class="doc">dump</span></a> command for details.</p>
<p>Use at most one of the -DLAMMPS_SMALLBIG, -DLAMMPS_BIGBIG,
-DLAMMPS_SMALLSMALL settings. The default is -DLAMMPS_SMALLBIG. These
settings refer to use of 4-byte (small) vs 8-byte (big) integers
within LAMMPS, as specified in src/lmptype.h. The only reason to use
the BIGBIG setting is to enable simulation of huge molecular systems
(which store bond topology info) with more than 2 billion atoms, or to
track the image flags of moving atoms that wrap around a periodic box
more than 512 times. Normally, the only reason to use SMALLSMALL is
if your machine does not support 64-bit integers, though you can use
SMALLSMALL setting if you are running in serial or on a desktop
machine or small cluster where you will never run large systems or for
long time (more than 2 billion atoms, more than 2 billion timesteps).
See the <a class="reference internal" href="#start-2-4"><span class="std std-ref">Additional build tips</span></a> section below for more
details on these settings.</p>
<p>Note that the USER-ATC package is not currently compatible with
-DLAMMPS_BIGBIG. Also the GPU package requires the lib/gpu library to
be compiled with the same setting, or the link will fail.</p>
<p>The -DLAMMPS_LONGLONG_TO_LONG setting may be needed if your system or
MPI version does not recognize &#8220;long long&#8221; data types. In this case a
&#8220;long&#8221; data type is likely already 64-bits, in which case this setting
will convert to that data type.</p>
<p>Using one of the -DPACK_ARRAY, -DPACK_POINTER, and -DPACK_MEMCPY
options can make for faster parallel FFTs (in the PPPM solver) on some
platforms. The -DPACK_ARRAY setting is the default. See the
<a class="reference internal" href="kspace_style.html"><span class="doc">kspace_style</span></a> command for info about PPPM. See
Step 6 below for info about building LAMMPS with an FFT library.</p>
<p><strong>Step 5</strong></p>
<p>The 3 MPI variables are used to specify an MPI library to build LAMMPS
with. Note that you do not need to set these if you use the MPI
compiler mpicxx for your CC and LINK setting in the section above.
The MPI wrapper knows where to find the needed files.</p>
<p>If you want LAMMPS to run in parallel, you must have an MPI library
installed on your platform. If MPI is installed on your system in the
usual place (under /usr/local), you also may not need to specify these
3 variables, assuming /usr/local is in your path. On some large
parallel machines which use &#8220;modules&#8221; for their compile/link
environements, you may simply need to include the correct module in
your build environment, before building LAMMPS. Or the parallel
machine may have a vendor-provided MPI which the compiler has no
trouble finding.</p>
<p>Failing this, these 3 variables can be used to specify where the mpi.h
file (MPI_INC) and the MPI library file (MPI_PATH) are found and the
name of the library file (MPI_LIB).</p>
<p>If you are installing MPI yourself, we recommend Argonne&#8217;s MPICH2
or OpenMPI. MPICH can be downloaded from the <a class="reference external" href="http://www.mcs.anl.gov/research/projects/mpich2/">Argonne MPI site</a>. OpenMPI can
be downloaded from the <a class="reference external" href="http://www.open-mpi.org">OpenMPI site</a>.
Other MPI packages should also work. If you are running on a big
parallel platform, your system people or the vendor should have
already installed a version of MPI, which is likely to be faster
than a self-installed MPICH or OpenMPI, so find out how to build
and link with it. If you use MPICH or OpenMPI, you will have to
configure and build it for your platform. The MPI configure script
should have compiler options to enable you to use the same compiler
you are using for the LAMMPS build, which can avoid problems that can
arise when linking LAMMPS to the MPI library.</p>
<p>If you just want to run LAMMPS on a single processor, you can use the
dummy MPI library provided in src/STUBS, since you don&#8217;t need a true
MPI library installed on your system. See src/MAKE/Makefile.serial
for how to specify the 3 MPI variables in this case. You will also
need to build the STUBS library for your platform before making LAMMPS
itself. Note that if you are building with src/MAKE/Makefile.serial,
e.g. by typing &#8220;make serial&#8221;, then the STUBS library is built for you.</p>
<p>To build the STUBS library from the src directory, type &#8220;make
mpi-stubs&#8221;, or from the src/STUBS dir, type &#8220;make&#8221;. This should
create a libmpi_stubs.a file suitable for linking to LAMMPS. If the
build fails, you will need to edit the STUBS/Makefile for your
platform.</p>
<p>The file STUBS/mpi.c provides a CPU timer function called MPI_Wtime()
that calls gettimeofday() . If your system doesn&#8217;t support
gettimeofday() , you&#8217;ll need to insert code to call another timer.
Note that the ANSI-standard function clock() rolls over after an hour
or so, and is therefore insufficient for timing long LAMMPS
simulations.</p>
<p><strong>Step 6</strong></p>
<p>The 3 FFT variables allow you to specify an FFT library which LAMMPS
uses (for performing 1d FFTs) when running the particle-particle
particle-mesh (PPPM) option for long-range Coulombics via the
<a class="reference internal" href="kspace_style.html"><span class="doc">kspace_style</span></a> command.</p>
<p>LAMMPS supports various open-source or vendor-supplied FFT libraries
for this purpose. If you leave these 3 variables blank, LAMMPS will
use the open-source <a class="reference external" href="http://kissfft.sf.net">KISS FFT library</a>, which is
included in the LAMMPS distribution. This library is portable to all
platforms and for typical LAMMPS simulations is almost as fast as FFTW
or vendor optimized libraries. If you are not including the KSPACE
package in your build, you can also leave the 3 variables blank.</p>
<p>Otherwise, select which kinds of FFTs to use as part of the FFT_INC
setting by a switch of the form -DFFT_XXX. Recommended values for XXX
are: MKL, SCSL, FFTW2, and FFTW3. Legacy options are: INTEL, SGI,
ACML, and T3E. For backward compatability, using -DFFT_FFTW will use
the FFTW2 library. Using -DFFT_NONE will use the KISS library
described above.</p>
<p>You may also need to set the FFT_INC, FFT_PATH, and FFT_LIB variables,
so the compiler and linker can find the needed FFT header and library
files. Note that on some large parallel machines which use &#8220;modules&#8221;
for their compile/link environements, you may simply need to include
the correct module in your build environment. Or the parallel machine
may have a vendor-provided FFT library which the compiler has no
trouble finding.</p>
<p>FFTW is a fast, portable library that should also work on any
platform. You can download it from
<a class="reference external" href="http://www.fftw.org">www.fftw.org</a>. Both the legacy version 2.1.X and
the newer 3.X versions are supported as -DFFT_FFTW2 or -DFFT_FFTW3.
Building FFTW for your box should be as simple as ./configure; make.
Note that on some platforms FFTW2 has been pre-installed, and uses
renamed files indicating the precision it was compiled with,
e.g. sfftw.h, or dfftw.h instead of fftw.h. In this case, you can
specify an additional define variable for FFT_INC called -DFFTW_SIZE,
which will select the correct include file. In this case, for FFT_LIB
you must also manually specify the correct library, namely -lsfftw or
-ldfftw.</p>
<p>The FFT_INC variable also allows for a -DFFT_SINGLE setting that will
use single-precision FFTs with PPPM, which can speed-up long-range
calulations, particularly in parallel or on GPUs. Fourier transform
and related PPPM operations are somewhat insensitive to floating point
truncation errors and thus do not always need to be performed in
double precision. Using the -DFFT_SINGLE setting trades off a little
accuracy for reduced memory use and parallel communication costs for
transposing 3d FFT data. Note that single precision FFTs have only
been tested with the FFTW3, FFTW2, MKL, and KISS FFT options.</p>
<p><strong>Step 7</strong></p>
<p>The 3 JPG variables allow you to specify a JPEG and/or PNG library
which LAMMPS uses when writing out JPEG or PNG files via the <a class="reference internal" href="dump_image.html"><span class="doc">dump image</span></a> command. These can be left blank if you do not
use the -DLAMMPS_JPEG or -DLAMMPS_PNG switches discussed above in Step
4, since in that case JPEG/PNG output will be disabled.</p>
<p>A standard JPEG library usually goes by the name libjpeg.a or
libjpeg.so and has an associated header file jpeglib.h. Whichever
JPEG library you have on your platform, you&#8217;ll need to set the
appropriate JPG_INC, JPG_PATH, and JPG_LIB variables, so that the
compiler and linker can find it.</p>
<p>A standard PNG library usually goes by the name libpng.a or libpng.so
and has an associated header file png.h. Whichever PNG library you
have on your platform, you&#8217;ll need to set the appropriate JPG_INC,
JPG_PATH, and JPG_LIB variables, so that the compiler and linker can
find it.</p>
<p>As before, if these header and library files are in the usual place on
your machine, you may not need to set these variables.</p>
<p><strong>Step 8</strong></p>
<p>Note that by default only a few of LAMMPS optional packages are
installed. To build LAMMPS with optional packages, see <a class="reference internal" href="#start-3"><span class="std std-ref">this section</span></a> below, before proceeding to Step 9.</p>
<p><strong>Step 9</strong></p>
<p>That&#8217;s it. Once you have a correct Makefile.foo, and you have
pre-built any other needed libraries (e.g. MPI, FFT, etc) all you need
to do from the src directory is type something like this:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">make</span> <span class="n">foo</span>
<span class="n">make</span> <span class="o">-</span><span class="n">j</span> <span class="n">N</span> <span class="n">foo</span>
<span class="n">gmake</span> <span class="n">foo</span>
<span class="n">gmake</span> <span class="o">-</span><span class="n">j</span> <span class="n">N</span> <span class="n">foo</span>
</pre></div>
</div>
<p>The -j or -j N switches perform a parallel build which can be much
faster, depending on how many cores your compilation machine has. N
is the number of cores the build runs on.</p>
<p>You should get the executable lmp_foo when the build is complete.</p>
<hr class="docutils" />
<p id="start-2-3"><a href="#id7"><span class="problematic" id="id8">**</span></a><em>Errors that can occur when making LAMMPS:</em>**</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">If an error occurs when building LAMMPS, the compiler or linker
will state very explicitly what the problem is. The error message
should give you a hint as to which of the steps above has failed, and
what you need to do in order to fix it. Building a code with a
Makefile is a very logical process. The compiler and linker need to
find the appropriate files and those files need to be compatible with
LAMMPS source files. When a make fails, there is usually a very
simple reason, which you or a local expert will need to fix.</p>
</div>
<p>Here are two non-obvious errors that can occur:</p>
<p>(1) If the make command breaks immediately with errors that indicate
it can&#8217;t find files with a &#8220;*&#8221; in their names, this can be because
your machine&#8217;s native make doesn&#8217;t support wildcard expansion in a
makefile. Try gmake instead of make. If that doesn&#8217;t work, try using
a -f switch with your make command to use a pre-generated
Makefile.list which explicitly lists all the needed files, e.g.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">make</span> <span class="n">makelist</span>
<span class="n">make</span> <span class="o">-</span><span class="n">f</span> <span class="n">Makefile</span><span class="o">.</span><span class="n">list</span> <span class="n">linux</span>
<span class="n">gmake</span> <span class="o">-</span><span class="n">f</span> <span class="n">Makefile</span><span class="o">.</span><span class="n">list</span> <span class="n">mac</span>
</pre></div>
</div>
<p>The first &#8220;make&#8221; command will create a current Makefile.list with all
the file names in your src dir. The 2nd &#8220;make&#8221; command (make or
gmake) will use it to build LAMMPS. Note that you should
include/exclude any desired optional packages before using the &#8220;make
makelist&#8221; command.</p>
<p>(2) If you get an error that says something like &#8216;identifier &#8220;atoll&#8221;
is undefined&#8217;, then your machine does not support &#8220;long long&#8221;
integers. Try using the -DLAMMPS_LONGLONG_TO_LONG setting described
above in Step 4.</p>
<hr class="docutils" />
<p id="start-2-4"><a href="#id9"><span class="problematic" id="id10">**</span></a><em>Additional build tips:</em>**</p>
<ol class="arabic simple">
<li>Building LAMMPS for multiple platforms.</li>
</ol>
<p>You can make LAMMPS for multiple platforms from the same src
directory. Each target creates its own object sub-directory called
Obj_target where it stores the system-specific <a href="#id11"><span class="problematic" id="id12">*</span></a>.o files.</p>
<ol class="arabic simple" start="2">
<li>Cleaning up.</li>
</ol>
<p>Typing &#8220;make clean-all&#8221; or &#8220;make clean-machine&#8221; will delete <a href="#id13"><span class="problematic" id="id14">*</span></a>.o object
files created when LAMMPS is built, for either all builds or for a
particular machine.</p>
<p>(3) Changing the LAMMPS size limits via -DLAMMPS_SMALLBIG or
-DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL</p>
<p>As explained above, any of these 3 settings can be specified on the
LMP_INC line in your low-level src/MAKE/Makefile.foo.</p>
<p>The default is -DLAMMPS_SMALLBIG which allows for systems with up to
2^63 atoms and 2^63 timesteps (about 9e18). The atom limit is for
atomic systems which do not store bond topology info and thus do not
require atom IDs. If you use atom IDs for atomic systems (which is
the default) or if you use a molecular model, which stores bond
topology info and thus requires atom IDs, the limit is 2^31 atoms
(about 2 billion). This is because the IDs are stored in 32-bit
integers.</p>
<p>Likewise, with this setting, the 3 image flags for each atom (see the
<a class="reference internal" href="dump.html"><span class="doc">dump</span></a> doc page for a discussion) are stored in a 32-bit
integer, which means the atoms can only wrap around a periodic box (in
each dimension) at most 512 times. If atoms move through the periodic
box more than this many times, the image flags will &#8220;roll over&#8221;,
e.g. from 511 to -512, which can cause diagnostics like the
mean-squared displacement, as calculated by the <a class="reference internal" href="compute_msd.html"><span class="doc">compute msd</span></a> command, to be faulty.</p>
<p>To allow for larger atomic systems with atom IDs or larger molecular
systems or larger image flags, compile with -DLAMMPS_BIGBIG. This
stores atom IDs and image flags in 64-bit integers. This enables
atomic or molecular systems with atom IDS of up to 2^63 atoms (about
9e18). And image flags will not &#8220;roll over&#8221; until they reach 2^20 =
1048576.</p>
<p>If your system does not support 8-byte integers, you will need to
compile with the -DLAMMPS_SMALLSMALL setting. This will restrict the
total number of atoms (for atomic or molecular systems) and timesteps
to 2^31 (about 2 billion). Image flags will roll over at 2^9 = 512.</p>
<p>Note that in src/lmptype.h there are definitions of all these data
types as well as the MPI data types associated with them. The MPI
types need to be consistent with the associated C data types, or else
LAMMPS will generate a run-time error. As far as we know, the
settings defined in src/lmptype.h are portable and work on every
current system.</p>
<p>In all cases, the size of problem that can be run on a per-processor
basis is limited by 4-byte integer storage to 2^31 atoms per processor
(about 2 billion). This should not normally be a limitation since such
a problem would have a huge per-processor memory footprint due to
neighbor lists and would run very slowly in terms of CPU secs/timestep.</p>
<hr class="docutils" />
<p id="start-2-5"><a href="#id15"><span class="problematic" id="id16">**</span></a><em>Building for a Mac:</em>**</p>
<p>OS X is BSD Unix, so it should just work. See the
src/MAKE/MACHINES/Makefile.mac and Makefile.mac_mpi files.</p>
<hr class="docutils" />
<p id="start-2-6"><a href="#id17"><span class="problematic" id="id18">**</span></a><em>Building for Windows:</em>**</p>
<p>The LAMMPS download page has an option to download both a serial and
parallel pre-built Windows executable. See the <a class="reference internal" href="#start-6"><span class="std std-ref">Running LAMMPS</span></a> section for instructions on running these executables
on a Windows box.</p>
<p>The pre-built executables hosted on the <a class="reference external" href="http://lammps.sandia.gov/download.html">LAMMPS download page</a> are built with a subset
of the available packages; see the download page for the list. These
are single executable files. No examples or documentation in
included. You will need to download the full source code package to
obtain those.</p>
<p>As an alternative, you can download &#8220;daily builds&#8221; (and some older
versions) of the installer packages from
<a class="reference external" href="http://rpm.lammps.org/windows.html">rpm.lammps.org/windows.html</a>.
These executables are built with most optional packages and the
download includes documentation, some tools and most examples.</p>
<p>If you want a Windows version with specific packages included and
excluded, you can build it yourself.</p>
<p>One way to do this is install and use cygwin to build LAMMPS with a
standard unix style make program, just as you would on a Linux box;
see src/MAKE/MACHINES/Makefile.cygwin.</p>
<hr class="docutils" />
</div>
<div class="section" id="making-lammps-with-optional-packages">
<span id="start-3"></span><h2>2.3. Making LAMMPS with optional packages</h2>
<p>This section has the following sub-sections:</p>
<ul class="simple">
<li><a class="reference internal" href="#start-3-1"><span class="std std-ref">Package basics</span></a></li>
<li><a class="reference internal" href="#start-3-2"><span class="std std-ref">Including/excluding packages</span></a></li>
<li><a class="reference internal" href="#start-3-3"><span class="std std-ref">Packages that require extra libraries</span></a></li>
<li><a class="reference internal" href="#start-3-4"><span class="std std-ref">Packages that require Makefile.machine settings</span></a></li>
</ul>
<p>Note that the following <a class="reference internal" href="#start-4"><span class="std std-ref">Section 2.4</span></a> describes the Make.py
tool which can be used to install/un-install packages and build the
auxiliary libraries which some of them use. It can also auto-edit a
Makefile.machine to add settings needed by some packages.</p>
<hr class="docutils" />
<p id="start-3-1"><a href="#id19"><span class="problematic" id="id20">**</span></a><em>Package basics:</em>**</p>
<p>The source code for LAMMPS is structured as a set of core files which
are always included, plus optional packages. Packages are groups of
files that enable a specific set of features. For example, force
fields for molecular systems or granular systems are in packages.</p>
<p><a class="reference internal" href="Section_packages.html"><span class="doc">Section packages</span></a> in the manual has details
about all the packages, including specific instructions for building
LAMMPS with each package, which are covered in a more general manner
below.</p>
<p>You can see the list of all packages by typing &#8220;make package&#8221; from
within the src directory of the LAMMPS distribution. This also lists
various make commands that can be used to manipulate packages.</p>
<p>If you use a command in a LAMMPS input script that is part of a
package, you must have built LAMMPS with that package, else you will
get an error that the style is invalid or the command is unknown.
Every command&#8217;s doc page specfies if it is part of a package. You can
also type</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">lmp_machine</span> <span class="o">-</span><span class="n">h</span>
</pre></div>
</div>
<p>to run your executable with the optional <a class="reference internal" href="#start-7"><span class="std std-ref">-h command-line switch</span></a> for &#8220;help&#8221;, which will simply list the styles and
commands known to your executable, and immediately exit.</p>
<p>There are two kinds of packages in LAMMPS, standard and user packages.
More information about the contents of standard and user packages is
given in <a class="reference internal" href="Section_packages.html"><span class="doc">Section_packages</span></a> of the manual. The
difference between standard and user packages is as follows:</p>
<p>Standard packages, such as molecule or kspace, are supported by the
LAMMPS developers and are written in a syntax and style consistent
with the rest of LAMMPS. This means we will answer questions about
them, debug and fix them if necessary, and keep them compatible with
future changes to LAMMPS.</p>
<p>User packages, such as user-atc or user-omp, have been contributed by
users, and always begin with the user prefix. If they are a single
command (single file), they are typically in the user-misc package.
Otherwise, they are a a set of files grouped together which add a
specific functionality to the code.</p>
<p>User packages don&#8217;t necessarily meet the requirements of the standard
packages. If you have problems using a feature provided in a user
package, you may need to contact the contributor directly to get help.
Information on how to submit additions you make to LAMMPS as single
files or either a standard or user-contributed package are given in
<a class="reference internal" href="Section_modify.html#mod-15"><span class="std std-ref">this section</span></a> of the documentation.</p>
<hr class="docutils" />
<p id="start-3-2"><a href="#id21"><span class="problematic" id="id22">**</span></a><em>Including/excluding packages:</em>**</p>
<p>To use (or not use) a package you must include it (or exclude it)
before building LAMMPS. From the src directory, this is typically as
simple as:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">make</span> <span class="n">yes</span><span class="o">-</span><span class="n">colloid</span>
<span class="n">make</span> <span class="n">g</span><span class="o">++</span>
</pre></div>
</div>
<p>or</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">make</span> <span class="n">no</span><span class="o">-</span><span class="n">manybody</span>
<span class="n">make</span> <span class="n">g</span><span class="o">++</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">You should NOT include/exclude packages and build LAMMPS in a
single make command using multiple targets, e.g. make yes-colloid g++.
This is because the make procedure creates a list of source files that
will be out-of-date for the build if the package configuration changes
within the same command.</p>
</div>
<p>Some packages have individual files that depend on other packages
being included. LAMMPS checks for this and does the right thing.
I.e. individual files are only included if their dependencies are
already included. Likewise, if a package is excluded, other files
dependent on that package are also excluded.</p>
<p>If you will never run simulations that use the features in a
particular packages, there is no reason to include it in your build.
For some packages, this will keep you from having to build auxiliary
libraries (see below), and will also produce a smaller executable
which may run a bit faster.</p>
<p>When you download a LAMMPS tarball, these packages are pre-installed
in the src directory: KSPACE, MANYBODY,MOLECULE, because they are so
commonly used. When you download LAMMPS source files from the SVN or
Git repositories, no packages are pre-installed.</p>
<p>Packages are included or excluded by typing &#8220;make yes-name&#8221; or &#8220;make
no-name&#8221;, where &#8220;name&#8221; is the name of the package in lower-case, e.g.
name = kspace for the KSPACE package or name = user-atc for the
USER-ATC package. You can also type &#8220;make yes-standard&#8221;, &#8220;make
no-standard&#8221;, &#8220;make yes-std&#8221;, &#8220;make no-std&#8221;, &#8220;make yes-user&#8221;, &#8220;make
no-user&#8221;, &#8220;make yes-lib&#8221;, &#8220;make no-lib&#8221;, &#8220;make yes-all&#8221;, or &#8220;make
no-all&#8221; to include/exclude various sets of packages. Type &#8220;make
package&#8221; to see all of the package-related make options.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Inclusion/exclusion of a package works by simply moving files
back and forth between the main src directory and sub-directories with
the package name (e.g. src/KSPACE, src/USER-ATC), so that the files
are seen or not seen when LAMMPS is built. After you have included or
excluded a package, you must re-build LAMMPS.</p>
</div>
<p>Additional package-related make options exist to help manage LAMMPS
files that exist in both the src directory and in package
sub-directories. You do not normally need to use these commands
unless you are editing LAMMPS files or have downloaded a patch from
the LAMMPS WWW site.</p>
<p>Typing &#8220;make package-update&#8221; or &#8220;make pu&#8221; will overwrite src files
with files from the package sub-directories if the package has been
included. It should be used after a patch is installed, since patches
only update the files in the package sub-directory, but not the src
files. Typing &#8220;make package-overwrite&#8221; will overwrite files in the
package sub-directories with src files.</p>
<p>Typing &#8220;make package-status&#8221; or &#8220;make ps&#8221; will show which packages are
currently included. For those that are included, it will list any
files that are different in the src directory and package
sub-directory. Typing &#8220;make package-diff&#8221; lists all differences
between these files. Again, type &#8220;make package&#8221; to see all of the
package-related make options.</p>
<hr class="docutils" />
<p id="start-3-3"><a href="#id23"><span class="problematic" id="id24">**</span></a><em>Packages that require extra libraries:</em>**</p>
<p>A few of the standard and user packages require additional auxiliary
libraries. Many of them are provided with LAMMPS, in which case they
must be compiled first, before LAMMPS is built, if you wish to include
that package. If you get a LAMMPS build error about a missing
library, this is likely the reason. See the
<a class="reference internal" href="Section_packages.html"><span class="doc">Section_packages</span></a> doc page for a list of
packages that have these kinds of auxiliary libraries.</p>
<p>The lib directory in the distribution has sub-directories with package
names that correspond to the needed auxiliary libs, e.g. lib/gpu.
Each sub-directory has a README file that gives more details. Code
for most of the auxiliary libraries is included in that directory.
Examples are the USER-ATC and MEAM packages.</p>
<p>A few of the lib sub-directories do not include code, but do include
instructions (and sometimes scripts) that automate the process of
downloading the auxiliary library and installing it so LAMMPS can link
to it. Examples are the KIM, VORONOI, USER-MOLFILE, and USER-SMD
packages.</p>
<p>The lib/python directory (for the PYTHON package) contains only a
choice of Makefile.lammps.* files. This is because no auxiliary code
or libraries are needed, only the Python library and other system libs
that should already available on your system. However, the
Makefile.lammps file is needed to tell LAMMPS which libs to use and
where to find them.</p>
<p>For libraries with provided code, the sub-directory README file
(e.g. lib/atc/README) has instructions on how to build that library.
This information is also summarized in <a class="reference internal" href="Section_packages.html"><span class="doc">Section packages</span></a>. Typically this is done by typing
something like:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">make</span> <span class="o">-</span><span class="n">f</span> <span class="n">Makefile</span><span class="o">.</span><span class="n">g</span><span class="o">++</span>
</pre></div>
</div>
<p>If one of the provided Makefiles is not appropriate for your system
you will need to edit or add one. Note that all the Makefiles have a
setting for EXTRAMAKE at the top that specifies a Makefile.lammps.*
file.</p>
<p>If the library build is successful, it will produce 2 files in the lib
directory:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">libpackage</span><span class="o">.</span><span class="n">a</span>
<span class="n">Makefile</span><span class="o">.</span><span class="n">lammps</span>
</pre></div>
</div>
<p>The Makefile.lammps file will typically be a copy of one of the
Makefile.lammps.* files in the library directory.</p>
<p>Note that you must insure that the settings in Makefile.lammps are
appropriate for your system. If they are not, the LAMMPS build may
fail. To fix this, you can edit or create a new Makefile.lammps.*
file for your system, and copy it to Makefile.lammps.</p>
<p>As explained in the lib/package/README files, the settings in
Makefile.lammps are used to specify additional system libraries and
their locations so that LAMMPS can build with the auxiliary library.
For example, if the MEAM package is used, the auxiliary library
consists of F90 code, built with a Fortran complier. To link that
library with LAMMPS (a C++ code) via whatever C++ compiler LAMMPS is
built with, typically requires additional Fortran-to-C libraries be
included in the link. Another example are the BLAS and LAPACK
libraries needed to use the USER-ATC or USER-AWPMD packages.</p>
<p>For libraries without provided code, the sub-directory README file has
information on where to download the library and how to build it,
e.g. lib/voronoi/README and lib/smd/README. The README files also
describe how you must either (a) create soft links, via the &#8220;ln&#8221;
command, in those directories to point to where you built or installed
the packages, or (b) check or edit the Makefile.lammps file in the
same directory to provide that information.</p>
<p>Some of the sub-directories, e.g. lib/voronoi, also have an install.py
script which can be used to automate the process of
downloading/building/installing the auxiliary library, and setting the
needed soft links. Type &#8220;python install.py&#8221; for further instructions.</p>
<p>As with the sub-directories containing library code, if the soft links
or settings in the lib/package/Makefile.lammps files are not correct,
the LAMMPS build will typically fail.</p>
<hr class="docutils" />
<p id="start-3-4"><a href="#id25"><span class="problematic" id="id26">**</span></a><em>Packages that require Makefile.machine settings</em>**</p>
<p>A few packages require specific settings in Makefile.machine, to
either build or use the package effectively. These are the
USER-INTEL, KOKKOS, USER-OMP, and OPT packages, used for accelerating
code performance on CPUs or other hardware, as discussed in <a class="reference internal" href="Section_accelerate.html"><span class="doc">Section acclerate</span></a>.</p>
<p>A summary of what Makefile.machine changes are needed for each of
these packages is given in <a class="reference internal" href="Section_packages.html"><span class="doc">Section packages</span></a>.
The details are given on the doc pages that describe each of these
accelerator packages in detail:</p>
<ul class="simple">
<li><a class="reference internal" href="accelerate_intel.html"><span class="doc">USER-INTEL package</span></a></li>
<li><a class="reference internal" href="accelerate_kokkos.html"><span class="doc">KOKKOS package</span></a></li>
<li><a class="reference internal" href="accelerate_omp.html"><span class="doc">USER-OMP package</span></a></li>
<li><a class="reference internal" href="accelerate_opt.html"><span class="doc">OPT package</span></a></li>
</ul>
<p>You can also look at the following machine Makefiles in
src/MAKE/OPTIONS, which include the changes. Note that the USER-INTEL
and KOKKOS packages allow for settings that build LAMMPS for different
hardware. The USER-INTEL package builds for CPU and the Xeon Phi, the
KOKKOS package builds for OpenMP, GPUs (Cuda), and the Xeon Phi.</p>
<ul class="simple">
<li>Makefile.intel_cpu</li>
<li>Makefile.intel_phi</li>
<li>Makefile.kokkos_omp</li>
<li>Makefile.kokkos_cuda</li>
<li>Makefile.kokkos_phi</li>
<li>Makefile.omp</li>
<li>Makefile.opt</li>
</ul>
<p>Also note that the Make.py tool, described in the next <a class="reference internal" href="#start-4"><span class="std std-ref">Section 2.4</span></a> can automatically add the needed info to an existing
machine Makefile, using simple command-line arguments.</p>
<hr class="docutils" />
</div>
<div class="section" id="building-lammps-via-the-make-py-tool">
<span id="start-4"></span><h2>2.4. Building LAMMPS via the Make.py tool</h2>
<p>The src directory includes a Make.py script, written in Python, which
can be used to automate various steps of the build process. It is
particularly useful for working with the accelerator packages, as well
as other packages which require auxiliary libraries to be built.</p>
<p>The goal of the Make.py tool is to allow any complex multi-step LAMMPS
build to be performed as a single Make.py command. And you can
archive the commands, so they can be re-invoked later via the -r
(redo) switch. If you find some LAMMPS build procedure that can&#8217;t be
done in a single Make.py command, let the developers know, and we&#8217;ll
see if we can augment the tool.</p>
<p>You can run Make.py from the src directory by typing either:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Make</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">h</span>
<span class="n">python</span> <span class="n">Make</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">h</span>
</pre></div>
</div>
<p>which will give you help info about the tool. For the former to work,
you may need to edit the first line of Make.py to point to your local
Python. And you may need to insure the script is executable:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">chmod</span> <span class="o">+</span><span class="n">x</span> <span class="n">Make</span><span class="o">.</span><span class="n">py</span>
</pre></div>
</div>
<p>Here are examples of build tasks you can perform with Make.py:</p>
<table border="1" class="docutils">
<colgroup>
<col width="58%" />
<col width="42%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td>Install/uninstall packages</td>
<td>Make.py -p no-lib kokkos omp intel</td>
</tr>
<tr class="row-even"><td>Build specific auxiliary libs</td>
<td>Make.py -a lib-atc lib-meam</td>
</tr>
<tr class="row-odd"><td>Build libs for all installed packages</td>
<td>Make.py -p cuda gpu -gpu mode=double arch=31 -a lib-all</td>
</tr>
<tr class="row-even"><td>Create a Makefile from scratch with compiler and MPI settings</td>
<td>Make.py -m none -cc g++ -mpi mpich -a file</td>
</tr>
<tr class="row-odd"><td>Augment Makefile.serial with settings for installed packages</td>
<td>Make.py -p intel -intel cpu -m serial -a file</td>
</tr>
<tr class="row-even"><td>Add JPG and FFTW support to Makefile.mpi</td>
<td>Make.py -m mpi -jpg -fft fftw -a file</td>
</tr>
<tr class="row-odd"><td>Build LAMMPS with a parallel make using Makefile.mpi</td>
<td>Make.py -j 16 -m mpi -a exe</td>
</tr>
<tr class="row-even"><td>Build LAMMPS and libs it needs using Makefile.serial with accelerator settings</td>
<td>Make.py -p gpu intel -intel cpu -a lib-all file serial</td>
</tr>
</tbody>
</table>
<p>The bench and examples directories give Make.py commands that can be
used to build LAMMPS with the various packages and options needed to
run all the benchmark and example input scripts. See these files for
more details:</p>
<ul class="simple">
<li>bench/README</li>
<li>bench/FERMI/README</li>
<li>bench/KEPLER/README</li>
<li>bench/PHI/README</li>
<li>examples/README</li>
<li>examples/accelerate/README</li>
<li>examples/accelerate/make.list</li>
</ul>
<p>All of the Make.py options and syntax help can be accessed by using
the &#8220;-h&#8221; switch.</p>
<p>E.g. typing &#8220;Make.py -h&#8221; gives</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Syntax</span><span class="p">:</span> <span class="n">Make</span><span class="o">.</span><span class="n">py</span> <span class="n">switch</span> <span class="n">args</span> <span class="o">...</span>
<span class="n">switches</span> <span class="n">can</span> <span class="n">be</span> <span class="n">listed</span> <span class="ow">in</span> <span class="nb">any</span> <span class="n">order</span>
<span class="n">help</span> <span class="n">switch</span><span class="p">:</span>
<span class="o">-</span><span class="n">h</span> <span class="n">prints</span> <span class="n">help</span> <span class="ow">and</span> <span class="n">syntax</span> <span class="k">for</span> <span class="nb">all</span> <span class="n">other</span> <span class="n">specified</span> <span class="n">switches</span>
<span class="n">switch</span> <span class="k">for</span> <span class="n">actions</span><span class="p">:</span>
<span class="o">-</span><span class="n">a</span> <span class="n">lib</span><span class="o">-</span><span class="nb">all</span><span class="p">,</span> <span class="n">lib</span><span class="o">-</span><span class="nb">dir</span><span class="p">,</span> <span class="n">clean</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">exe</span> <span class="ow">or</span> <span class="n">machine</span>
<span class="nb">list</span> <span class="n">one</span> <span class="ow">or</span> <span class="n">more</span> <span class="n">actions</span><span class="p">,</span> <span class="ow">in</span> <span class="nb">any</span> <span class="n">order</span>
<span class="n">machine</span> <span class="ow">is</span> <span class="n">a</span> <span class="n">Makefile</span><span class="o">.</span><span class="n">machine</span> <span class="n">suffix</span><span class="p">,</span> <span class="n">must</span> <span class="n">be</span> <span class="n">last</span> <span class="k">if</span> <span class="n">used</span>
<span class="n">one</span><span class="o">-</span><span class="n">letter</span> <span class="n">switches</span><span class="p">:</span>
<span class="o">-</span><span class="n">d</span> <span class="p">(</span><span class="nb">dir</span><span class="p">),</span> <span class="o">-</span><span class="n">j</span> <span class="p">(</span><span class="n">jmake</span><span class="p">),</span> <span class="o">-</span><span class="n">m</span> <span class="p">(</span><span class="n">makefile</span><span class="p">),</span> <span class="o">-</span><span class="n">o</span> <span class="p">(</span><span class="n">output</span><span class="p">),</span>
<span class="o">-</span><span class="n">p</span> <span class="p">(</span><span class="n">packages</span><span class="p">),</span> <span class="o">-</span><span class="n">r</span> <span class="p">(</span><span class="n">redo</span><span class="p">),</span> <span class="o">-</span><span class="n">s</span> <span class="p">(</span><span class="n">settings</span><span class="p">),</span> <span class="o">-</span><span class="n">v</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
<span class="n">switches</span> <span class="k">for</span> <span class="n">libs</span><span class="p">:</span>
<span class="o">-</span><span class="n">atc</span><span class="p">,</span> <span class="o">-</span><span class="n">awpmd</span><span class="p">,</span> <span class="o">-</span><span class="n">colvars</span><span class="p">,</span> <span class="o">-</span><span class="n">cuda</span>
<span class="o">-</span><span class="n">gpu</span><span class="p">,</span> <span class="o">-</span><span class="n">meam</span><span class="p">,</span> <span class="o">-</span><span class="n">poems</span><span class="p">,</span> <span class="o">-</span><span class="n">qmmm</span><span class="p">,</span> <span class="o">-</span><span class="n">reax</span>
<span class="n">switches</span> <span class="k">for</span> <span class="n">build</span> <span class="ow">and</span> <span class="n">makefile</span> <span class="n">options</span><span class="p">:</span>
<span class="o">-</span><span class="n">intel</span><span class="p">,</span> <span class="o">-</span><span class="n">kokkos</span><span class="p">,</span> <span class="o">-</span><span class="n">cc</span><span class="p">,</span> <span class="o">-</span><span class="n">mpi</span><span class="p">,</span> <span class="o">-</span><span class="n">fft</span><span class="p">,</span> <span class="o">-</span><span class="n">jpg</span><span class="p">,</span> <span class="o">-</span><span class="n">png</span>
</pre></div>
</div>
<p>Using the &#8220;-h&#8221; switch with other switches and actions gives additional
info on all the other specified switches or actions. The &#8220;-h&#8221; can be
anywhere in the command-line and the other switches do not need their
arguments. E.g. type &#8220;Make.py -h -d -atc -intel&#8221; will print:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">d</span> <span class="nb">dir</span>
<span class="nb">dir</span> <span class="o">=</span> <span class="n">LAMMPS</span> <span class="n">home</span> <span class="nb">dir</span>
<span class="k">if</span> <span class="o">-</span><span class="n">d</span> <span class="ow">not</span> <span class="n">specified</span><span class="p">,</span> <span class="n">working</span> <span class="nb">dir</span> <span class="n">must</span> <span class="n">be</span> <span class="n">lammps</span><span class="o">/</span><span class="n">src</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span>-atc make=suffix lammps=suffix2
all args are optional and can be in any order
make = use Makefile.suffix (def = g++)
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span>-intel mode
mode = cpu or phi (def = cpu)
build Intel package for CPU or Xeon Phi
</pre></div>
</div>
<p>Note that Make.py never overwrites an existing Makefile.machine.
Instead, it creates src/MAKE/MINE/Makefile.auto, which you can save or
rename if desired. Likewise it creates an executable named
src/lmp_auto, which you can rename using the -o switch if desired.</p>
<p>The most recently executed Make.py commmand is saved in
src/Make.py.last. You can use the &#8220;-r&#8221; switch (for redo) to re-invoke
the last command, or you can save a sequence of one or more Make.py
commands to a file and invoke the file of commands using &#8220;-r&#8221;. You
can also label the commands in the file and invoke one or more of them
by name.</p>
<p>A typical use of Make.py is to start with a valid Makefile.machine for
your system, that works for a vanilla LAMMPS build, i.e. when optional
packages are not installed. You can then use Make.py to add various
settings (FFT, JPG, PNG) to the Makefile.machine as well as change its
compiler and MPI options. You can also add additional packages to the
build, as well as build the needed supporting libraries.</p>
<p>You can also use Make.py to create a new Makefile.machine from
scratch, using the &#8220;-m none&#8221; switch, if you also specify what compiler
and MPI options to use, via the &#8220;-cc&#8221; and &#8220;-mpi&#8221; switches.</p>
<hr class="docutils" />
</div>
<div class="section" id="building-lammps-as-a-library">
<span id="start-5"></span><h2>2.5. Building LAMMPS as a library</h2>
<p>LAMMPS can be built as either a static or shared library, which can
then be called from another application or a scripting language. See
<a class="reference internal" href="Section_howto.html#howto-10"><span class="std std-ref">this section</span></a> for more info on coupling
LAMMPS to other codes. See <a class="reference internal" href="Section_python.html"><span class="doc">this section</span></a> for
more info on wrapping and running LAMMPS from Python.</p>
<div class="section" id="static-library">
<h3>2.5.1. <strong>Static library:</strong></h3>
<p>To build LAMMPS as a static library (<a href="#id27"><span class="problematic" id="id28">*</span></a>.a file on Linux), type</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">make</span> <span class="n">foo</span> <span class="n">mode</span><span class="o">=</span><span class="n">lib</span>
</pre></div>
</div>
<p>where foo is the machine name. This kind of library is typically used
to statically link a driver application to LAMMPS, so that you can
insure all dependencies are satisfied at compile time. This will use
the ARCHIVE and ARFLAGS settings in src/MAKE/Makefile.foo. The build
will create the file liblammps_foo.a which another application can
link to. It will also create a soft link liblammps.a, which will
point to the most recently built static library.</p>
</div>
<div class="section" id="shared-library">
<h3>2.5.2. <strong>Shared library:</strong></h3>
<p>To build LAMMPS as a shared library (<a href="#id29"><span class="problematic" id="id30">*</span></a>.so file on Linux), which can be
dynamically loaded, e.g. from Python, type</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">make</span> <span class="n">foo</span> <span class="n">mode</span><span class="o">=</span><span class="n">shlib</span>
</pre></div>
</div>
<p>where foo is the machine name. This kind of library is required when
wrapping LAMMPS with Python; see <a class="reference internal" href="Section_python.html"><span class="doc">Section_python</span></a>
for details. This will use the SHFLAGS and SHLIBFLAGS settings in
src/MAKE/Makefile.foo and perform the build in the directory
Obj_shared_foo. This is so that each file can be compiled with the
-fPIC flag which is required for inclusion in a shared library. The
build will create the file liblammps_foo.so which another application
can link to dyamically. It will also create a soft link liblammps.so,
which will point to the most recently built shared library. This is
the file the Python wrapper loads by default.</p>
<p>Note that for a shared library to be usable by a calling program, all
the auxiliary libraries it depends on must also exist as shared
libraries. This will be the case for libraries included with LAMMPS,
such as the dummy MPI library in src/STUBS or any package libraries in
lib/packages, since they are always built as shared libraries using
the -fPIC switch. However, if a library like MPI or FFTW does not
exist as a shared library, the shared library build will generate an
error. This means you will need to install a shared library version
of the auxiliary library. The build instructions for the library
should tell you how to do this.</p>
<p>Here is an example of such errors when the system FFTW or provided
lib/colvars library have not been built as shared libraries:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>/usr/bin/ld: /usr/local/lib/libfftw3.a(mapflags.o): relocation
R_X86_64_32 against `.rodata&#39; can not be used when making a shared
object; recompile with -fPIC
/usr/local/lib/libfftw3.a: could not read symbols: Bad value
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span>/usr/bin/ld: ../../lib/colvars/libcolvars.a(colvarmodule.o):
relocation R_X86_64_32 against `__pthread_key_create&#39; can not be used
when making a shared object; recompile with -fPIC
../../lib/colvars/libcolvars.a: error adding symbols: Bad value
</pre></div>
</div>
<p>As an example, here is how to build and install the <a class="reference external" href="http://www-unix.mcs.anl.gov/mpi">MPICH library</a>, a popular open-source version of MPI, distributed by
Argonne National Labs, as a shared library in the default
/usr/local/lib location:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">./</span><span class="n">configure</span> <span class="o">--</span><span class="n">enable</span><span class="o">-</span><span class="n">shared</span>
<span class="n">make</span>
<span class="n">make</span> <span class="n">install</span>
</pre></div>
</div>
<p>You may need to use &#8220;sudo make install&#8221; in place of the last line if
you do not have write privileges for /usr/local/lib. The end result
should be the file /usr/local/lib/libmpich.so.</p>
</div>
<div class="section" id="additional-requirement-for-using-a-shared-library">
<h3>2.5.3. <strong>Additional requirement for using a shared library:</strong></h3>
<p>The operating system finds shared libraries to load at run-time using
the environment variable LD_LIBRARY_PATH. So you may wish to copy the
file src/liblammps.so or src/liblammps_g++.so (for example) to a place
the system can find it by default, such as /usr/local/lib, or you may
wish to add the LAMMPS src directory to LD_LIBRARY_PATH, so that the
current version of the shared library is always available to programs
that use it.</p>
<p>For the csh or tcsh shells, you would add something like this to your
~/.cshrc file:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/src
</pre></div>
</div>
</div>
<div class="section" id="calling-the-lammps-library">
<h3>2.5.4. <strong>Calling the LAMMPS library:</strong></h3>
<p>Either flavor of library (static or shared) allows one or more LAMMPS
objects to be instantiated from the calling program.</p>
<p>When used from a C++ program, all of LAMMPS is wrapped in a LAMMPS_NS
namespace; you can safely use any of its classes and methods from
within the calling code, as needed.</p>
<p>When used from a C or Fortran program or a scripting language like
Python, the library has a simple function-style interface, provided in
src/library.cpp and src/library.h.</p>
<p>See the sample codes in examples/COUPLE/simple for examples of C++ and
C and Fortran codes that invoke LAMMPS thru its library interface.
There are other examples as well in the COUPLE directory which are
discussed in <a class="reference internal" href="Section_howto.html#howto-10"><span class="std std-ref">Section_howto 10</span></a> of the
manual. See <a class="reference internal" href="Section_python.html"><span class="doc">Section_python</span></a> of the manual for a
description of the Python wrapper provided with LAMMPS that operates
through the LAMMPS library interface.</p>
<p>The files src/library.cpp and library.h define the C-style API for
using LAMMPS as a library. See <a class="reference internal" href="Section_howto.html#howto-19"><span class="std std-ref">Section_howto 19</span></a> of the manual for a description of the
interface and how to extend it for your needs.</p>
<hr class="docutils" />
</div>
</div>
<div class="section" id="running-lammps">
<span id="start-6"></span><h2>2.6. Running LAMMPS</h2>
<p>By default, LAMMPS runs by reading commands from standard input. Thus
if you run the LAMMPS executable by itself, e.g.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">lmp_linux</span>
</pre></div>
</div>
<p>it will simply wait, expecting commands from the keyboard. Typically
you should put commands in an input script and use I/O redirection,
e.g.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">lmp_linux</span> <span class="o">&lt;</span> <span class="ow">in</span><span class="o">.</span><span class="n">file</span>
</pre></div>
</div>
<p>For parallel environments this should also work. If it does not, use
the &#8216;-in&#8217; command-line switch, e.g.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">lmp_linux</span> <span class="o">-</span><span class="ow">in</span> <span class="ow">in</span><span class="o">.</span><span class="n">file</span>
</pre></div>
</div>
<p><a class="reference internal" href="Section_commands.html"><span class="doc">This section</span></a> describes how input scripts are
structured and what commands they contain.</p>
<p>You can test LAMMPS on any of the sample inputs provided in the
examples or bench directory. Input scripts are named in.* and sample
outputs are named log.*.name.P where name is a machine and P is the
number of processors it was run on.</p>
<p>Here is how you might run a standard Lennard-Jones benchmark on a
Linux box, using mpirun to launch a parallel job:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">cd</span> <span class="n">src</span>
<span class="n">make</span> <span class="n">linux</span>
<span class="n">cp</span> <span class="n">lmp_linux</span> <span class="o">../</span><span class="n">bench</span>
<span class="n">cd</span> <span class="o">../</span><span class="n">bench</span>
<span class="n">mpirun</span> <span class="o">-</span><span class="n">np</span> <span class="mi">4</span> <span class="n">lmp_linux</span> <span class="o">-</span><span class="ow">in</span> <span class="ow">in</span><span class="o">.</span><span class="n">lj</span>
</pre></div>
</div>
<p>See <a class="reference external" href="http://lammps.sandia.gov/bench.html">this page</a> for timings for this and the other benchmarks on
various platforms. Note that some of the example scripts require
LAMMPS to be built with one or more of its optional packages.</p>
<hr class="docutils" />
<p>On a Windows box, you can skip making LAMMPS and simply download an
executable, as described above, though the pre-packaged executables
include only certain packages.</p>
<p>To run a LAMMPS executable on a Windows machine, first decide whether
you want to download the non-MPI (serial) or the MPI (parallel)
version of the executable. Download and save the version you have
chosen.</p>
<p>For the non-MPI version, follow these steps:</p>
<ul class="simple">
<li>Get a command prompt by going to Start-&gt;Run... ,
then typing &#8220;cmd&#8221;.</li>
<li>Move to the directory where you have saved lmp_win_no-mpi.exe
(e.g. by typing: cd &#8220;Documents&#8221;).</li>
<li>At the command prompt, type &#8220;lmp_win_no-mpi -in in.lj&#8221;, replacing in.lj
with the name of your LAMMPS input script.</li>
</ul>
<p>For the MPI version, which allows you to run LAMMPS under Windows on
multiple processors, follow these steps:</p>
<ul class="simple">
<li>Download and install
<a class="reference external" href="http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads">MPICH2</a>
for Windows.</li>
<li>You&#8217;ll need to use the mpiexec.exe and smpd.exe files from the MPICH2
package. Put them in same directory (or path) as the LAMMPS Windows
executable.</li>
<li>Get a command prompt by going to Start-&gt;Run... ,
then typing &#8220;cmd&#8221;.</li>
<li>Move to the directory where you have saved lmp_win_mpi.exe
(e.g. by typing: cd &#8220;Documents&#8221;).</li>
<li>Then type something like this: &#8220;mpiexec -localonly 4 lmp_win_mpi -in
in.lj&#8221;, replacing in.lj with the name of your LAMMPS input script.</li>
<li>Note that you may need to provide smpd with a passphrase (it doesn&#8217;t
matter what you type).</li>
<li>In this mode, output may not immediately show up on the screen, so if
your input script takes a long time to execute, you may need to be
patient before the output shows up. :l Alternatively, you can still
use this executable to run on a single processor by typing something
like: &#8220;lmp_win_mpi -in in.lj&#8221;.</li>
</ul>
<hr class="docutils" />
<p>The screen output from LAMMPS is described in a section below. As it
runs, LAMMPS also writes a log.lammps file with the same information.</p>
<p>Note that this sequence of commands copies the LAMMPS executable
(lmp_linux) to the directory with the input files. This may not be
necessary, but some versions of MPI reset the working directory to
where the executable is, rather than leave it as the directory where
you launch mpirun from (if you launch lmp_linux on its own and not
under mpirun). If that happens, LAMMPS will look for additional input
files and write its output files to the executable directory, rather
than your working directory, which is probably not what you want.</p>
<p>If LAMMPS encounters errors in the input script or while running a
simulation it will print an ERROR message and stop or a WARNING
message and continue. See <a class="reference internal" href="Section_errors.html"><span class="doc">Section_errors</span></a> for a
discussion of the various kinds of errors LAMMPS can or can&#8217;t detect,
a list of all ERROR and WARNING messages, and what to do about them.</p>
<p>LAMMPS can run a problem on any number of processors, including a
single processor. In theory you should get identical answers on any
number of processors and on any machine. In practice, numerical
round-off can cause slight differences and eventual divergence of
molecular dynamics phase space trajectories.</p>
<p>LAMMPS can run as large a problem as will fit in the physical memory
of one or more processors. If you run out of memory, you must run on
more processors or setup a smaller problem.</p>
<hr class="docutils" />
</div>
<div class="section" id="command-line-options">
<span id="start-7"></span><h2>2.7. Command-line options</h2>
<p>At run time, LAMMPS recognizes several optional command-line switches
which may be used in any order. Either the full word or a one-or-two
letter abbreviation can be used:</p>
<ul class="simple">
<li>-e or -echo</li>
<li>-h or -help</li>
<li>-i or -in</li>
<li>-k or -kokkos</li>
<li>-l or -log</li>
<li>-nc or -nocite</li>
<li>-pk or -package</li>
<li>-p or -partition</li>
<li>-pl or -plog</li>
<li>-ps or -pscreen</li>
<li>-r or -restart</li>
<li>-ro or -reorder</li>
<li>-sc or -screen</li>
<li>-sf or -suffix</li>
<li>-v or -var</li>
</ul>
<p>For example, lmp_ibm might be launched as follows:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">mpirun</span> <span class="o">-</span><span class="n">np</span> <span class="mi">16</span> <span class="n">lmp_ibm</span> <span class="o">-</span><span class="n">v</span> <span class="n">f</span> <span class="n">tmp</span><span class="o">.</span><span class="n">out</span> <span class="o">-</span><span class="n">l</span> <span class="n">my</span><span class="o">.</span><span class="n">log</span> <span class="o">-</span><span class="n">sc</span> <span class="n">none</span> <span class="o">-</span><span class="ow">in</span> <span class="ow">in</span><span class="o">.</span><span class="n">alloy</span>
<span class="n">mpirun</span> <span class="o">-</span><span class="n">np</span> <span class="mi">16</span> <span class="n">lmp_ibm</span> <span class="o">-</span><span class="n">var</span> <span class="n">f</span> <span class="n">tmp</span><span class="o">.</span><span class="n">out</span> <span class="o">-</span><span class="n">log</span> <span class="n">my</span><span class="o">.</span><span class="n">log</span> <span class="o">-</span><span class="n">screen</span> <span class="n">none</span> <span class="o">-</span><span class="ow">in</span> <span class="ow">in</span><span class="o">.</span><span class="n">alloy</span>
</pre></div>
</div>
<p>Here are the details on the options:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">echo</span> <span class="n">style</span>
</pre></div>
</div>
<p>Set the style of command echoing. The style can be <em>none</em> or <em>screen</em>
or <em>log</em> or <em>both</em>. Depending on the style, each command read from
the input script will be echoed to the screen and/or logfile. This
can be useful to figure out which line of your script is causing an
input error. The default value is <em>log</em>. The echo style can also be
set by using the <a class="reference internal" href="echo.html"><span class="doc">echo</span></a> command in the input script itself.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">help</span>
</pre></div>
</div>
<p>Print a brief help summary and a list of options compiled into this
executable for each LAMMPS style (atom_style, fix, compute,
pair_style, bond_style, etc). This can tell you if the command you
want to use was included via the appropriate package at compile time.
LAMMPS will print the info and immediately exit if this switch is
used.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="ow">in</span> <span class="n">file</span>
</pre></div>
</div>
<p>Specify a file to use as an input script. This is an optional switch
when running LAMMPS in one-partition mode. If it is not specified,
LAMMPS reads its script from standard input, typically from a script
via I/O redirection; e.g. lmp_linux &lt; in.run. I/O redirection should
also work in parallel, but if it does not (in the unlikely case that
an MPI implementation does not support it), then use the -in flag.
Note that this is a required switch when running LAMMPS in
multi-partition mode, since multiple processors cannot all read from
stdin.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">kokkos</span> <span class="n">on</span><span class="o">/</span><span class="n">off</span> <span class="n">keyword</span><span class="o">/</span><span class="n">value</span> <span class="o">...</span>
</pre></div>
</div>
<p>Explicitly enable or disable KOKKOS support, as provided by the KOKKOS
package. Even if LAMMPS is built with this package, as described
above in <a class="reference internal" href="#start-3"><span class="std std-ref">Section 2.3</span></a>, this switch must be set to enable
running with the KOKKOS-enabled styles the package provides. If the
switch is not set (the default), LAMMPS will operate as if the KOKKOS
package were not installed; i.e. you can run standard LAMMPS or with
the GPU or USER-OMP packages, for testing or benchmarking purposes.</p>
<p>Additional optional keyword/value pairs can be specified which
determine how Kokkos will use the underlying hardware on your
platform. These settings apply to each MPI task you launch via the
&#8220;mpirun&#8221; or &#8220;mpiexec&#8221; command. You may choose to run one or more MPI
tasks per physical node. Note that if you are running on a desktop
machine, you typically have one physical node. On a cluster or
supercomputer there may be dozens or 1000s of physical nodes.</p>
<p>Either the full word or an abbreviation can be used for the keywords.
Note that the keywords do not use a leading minus sign. I.e. the
keyword is &#8220;t&#8221;, not &#8220;-t&#8221;. Also note that each of the keywords has a
default setting. Example of when to use these options and what
settings to use on different platforms is given in <span class="xref std std-ref">Section 5.8</span>.</p>
<ul class="simple">
<li>d or device</li>
<li>g or gpus</li>
<li>t or threads</li>
<li>n or numa</li>
</ul>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">device</span> <span class="n">Nd</span>
</pre></div>
</div>
<p>This option is only relevant if you built LAMMPS with CUDA=yes, you
have more than one GPU per node, and if you are running with only one
MPI task per node. The Nd setting is the ID of the GPU on the node to
run on. By default Nd = 0. If you have multiple GPUs per node, they
have consecutive IDs numbered as 0,1,2,etc. This setting allows you
to launch multiple independent jobs on the node, each with a single
MPI task per node, and assign each job to run on a different GPU.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">gpus</span> <span class="n">Ng</span> <span class="n">Ns</span>
</pre></div>
</div>
<p>This option is only relevant if you built LAMMPS with CUDA=yes, you
have more than one GPU per node, and you are running with multiple MPI
tasks per node (up to one per GPU). The Ng setting is how many GPUs
you will use. The Ns setting is optional. If set, it is the ID of a
GPU to skip when assigning MPI tasks to GPUs. This may be useful if
your desktop system reserves one GPU to drive the screen and the rest
are intended for computational work like running LAMMPS. By default
Ng = 1 and Ns is not set.</p>
<p>Depending on which flavor of MPI you are running, LAMMPS will look for
one of these 3 environment variables</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">SLURM_LOCALID</span> <span class="p">(</span><span class="n">various</span> <span class="n">MPI</span> <span class="n">variants</span> <span class="n">compiled</span> <span class="k">with</span> <span class="n">SLURM</span> <span class="n">support</span><span class="p">)</span>
<span class="n">MV2_COMM_WORLD_LOCAL_RANK</span> <span class="p">(</span><span class="n">Mvapich</span><span class="p">)</span>
<span class="n">OMPI_COMM_WORLD_LOCAL_RANK</span> <span class="p">(</span><span class="n">OpenMPI</span><span class="p">)</span>
</pre></div>
</div>
<p>which are initialized by the &#8220;srun&#8221;, &#8220;mpirun&#8221; or &#8220;mpiexec&#8221; commands.
The environment variable setting for each MPI rank is used to assign a
unique GPU ID to the MPI task.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">threads</span> <span class="n">Nt</span>
</pre></div>
</div>
<p>This option assigns Nt number of threads to each MPI task for
performing work when Kokkos is executing in OpenMP or pthreads mode.
The default is Nt = 1, which essentially runs in MPI-only mode. If
there are Np MPI tasks per physical node, you generally want Np*Nt =
the number of physical cores per node, to use your available hardware
optimally. This also sets the number of threads used by the host when
LAMMPS is compiled with CUDA=yes.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">numa</span> <span class="n">Nm</span>
</pre></div>
</div>
<p>This option is only relevant when using pthreads with hwloc support.
In this case Nm defines the number of NUMA regions (typicaly sockets)
on a node which will be utilizied by a single MPI rank. By default Nm
= 1. If this option is used the total number of worker-threads per
MPI rank is threads*numa. Currently it is always almost better to
assign at least one MPI rank per NUMA region, and leave numa set to
its default value of 1. This is because letting a single process span
multiple NUMA regions induces a significant amount of cross NUMA data
traffic which is slow.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">log</span> <span class="n">file</span>
</pre></div>
</div>
<p>Specify a log file for LAMMPS to write status information to. In
one-partition mode, if the switch is not used, LAMMPS writes to the
file log.lammps. If this switch is used, LAMMPS writes to the
specified file. In multi-partition mode, if the switch is not used, a
log.lammps file is created with hi-level status information. Each
partition also writes to a log.lammps.N file where N is the partition
ID. If the switch is specified in multi-partition mode, the hi-level
logfile is named &#8220;file&#8221; and each partition also logs information to a
file.N. For both one-partition and multi-partition mode, if the
specified file is &#8220;none&#8221;, then no log files are created. Using a
<a class="reference internal" href="log.html"><span class="doc">log</span></a> command in the input script will override this setting.
Option -plog will override the name of the partition log files file.N.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">nocite</span>
</pre></div>
</div>
<p>Disable writing the log.cite file which is normally written to list
references for specific cite-able features used during a LAMMPS run.
See the <a class="reference external" href="http://lammps.sandia.gov/cite.html">citation page</a> for more
details.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">package</span> <span class="n">style</span> <span class="n">args</span> <span class="o">....</span>
</pre></div>
</div>
<p>Invoke the <a class="reference internal" href="package.html"><span class="doc">package</span></a> command with style and args. The
syntax is the same as if the command appeared at the top of the input
script. For example &#8220;-package gpu 2&#8221; or &#8220;-pk gpu 2&#8221; is the same as
<a class="reference internal" href="package.html"><span class="doc">package gpu 2</span></a> in the input script. The possible styles
and args are documented on the <a class="reference internal" href="package.html"><span class="doc">package</span></a> doc page. This
switch can be used multiple times, e.g. to set options for the
USER-INTEL and USER-OMP packages which can be used together.</p>
<p>Along with the &#8220;-suffix&#8221; command-line switch, this is a convenient
mechanism for invoking accelerator packages and their options without
having to edit an input script.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">partition</span> <span class="mi">8</span><span class="n">x2</span> <span class="mi">4</span> <span class="mi">5</span> <span class="o">...</span>
</pre></div>
</div>
<p>Invoke LAMMPS in multi-partition mode. When LAMMPS is run on P
processors and this switch is not used, LAMMPS runs in one partition,
i.e. all P processors run a single simulation. If this switch is
used, the P processors are split into separate partitions and each
partition runs its own simulation. The arguments to the switch
specify the number of processors in each partition. Arguments of the
form MxN mean M partitions, each with N processors. Arguments of the
form N mean a single partition with N processors. The sum of
processors in all partitions must equal P. Thus the command
&#8220;-partition 8x2 4 5&#8221; has 10 partitions and runs on a total of 25
processors.</p>
<p>Running with multiple partitions can e useful for running
<a class="reference internal" href="Section_howto.html#howto-5"><span class="std std-ref">multi-replica simulations</span></a>, where each
replica runs on on one or a few processors. Note that with MPI
installed on a machine (e.g. your desktop), you can run on more
(virtual) processors than you have physical processors.</p>
<p>To run multiple independent simulatoins from one input script, using
multiple partitions, see <a class="reference internal" href="Section_howto.html#howto-4"><span class="std std-ref">Section_howto 4</span></a>
of the manual. World- and universe-style <a class="reference internal" href="variable.html"><span class="doc">variables</span></a>
are useful in this context.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">plog</span> <span class="n">file</span>
</pre></div>
</div>
<p>Specify the base name for the partition log files, so partition N
writes log information to file.N. If file is none, then no partition
log files are created. This overrides the filename specified in the
-log command-line option. This option is useful when working with
large numbers of partitions, allowing the partition log files to be
suppressed (-plog none) or placed in a sub-directory (-plog
replica_files/log.lammps) If this option is not used the log file for
partition N is log.lammps.N or whatever is specified by the -log
command-line option.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">pscreen</span> <span class="n">file</span>
</pre></div>
</div>
<p>Specify the base name for the partition screen file, so partition N
writes screen information to file.N. If file is none, then no
partition screen files are created. This overrides the filename
specified in the -screen command-line option. This option is useful
when working with large numbers of partitions, allowing the partition
screen files to be suppressed (-pscreen none) or placed in a
sub-directory (-pscreen replica_files/screen). If this option is not
used the screen file for partition N is screen.N or whatever is
specified by the -screen command-line option.</p>
<pre class="literal-block">
-restart restartfile <em>remap</em> datafile keyword value ...
</pre>
<p>Convert the restart file into a data file and immediately exit. This
is the same operation as if the following 2-line input script were
run:</p>
<pre class="literal-block">
read_restart restartfile <em>remap</em>
write_data datafile keyword value ...
</pre>
<p>Note that the specified restartfile and datafile can have wild-card
characters (&#8220;*&#8221;,%&#8221;) as described by the
<a class="reference internal" href="read_restart.html"><span class="doc">read_restart</span></a> and <a class="reference internal" href="write_data.html"><span class="doc">write_data</span></a>
commands. But a filename such as file.* will need to be enclosed in
quotes to avoid shell expansion of the &#8220;*&#8221; character.</p>
<p>Note that following restartfile, the optional flag <em>remap</em> can be
used. This has the same effect as adding it to the
<a class="reference internal" href="read_restart.html"><span class="doc">read_restart</span></a> command, as explained on its doc
page. This is only useful if the reading of the restart file triggers
an error that atoms have been lost. In that case, use of the remap
flag should allow the data file to still be produced.</p>
<p>Also note that following datafile, the same optional keyword/value
pairs can be listed as used by the <a class="reference internal" href="write_data.html"><span class="doc">write_data</span></a>
command.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">reorder</span> <span class="n">nth</span> <span class="n">N</span>
<span class="o">-</span><span class="n">reorder</span> <span class="n">custom</span> <span class="n">filename</span>
</pre></div>
</div>
<p>Reorder the processors in the MPI communicator used to instantiate
LAMMPS, in one of several ways. The original MPI communicator ranks
all P processors from 0 to P-1. The mapping of these ranks to
physical processors is done by MPI before LAMMPS begins. It may be
useful in some cases to alter the rank order. E.g. to insure that
cores within each node are ranked in a desired order. Or when using
the <a class="reference internal" href="run_style.html"><span class="doc">run_style verlet/split</span></a> command with 2 partitions
to insure that a specific Kspace processor (in the 2nd partition) is
matched up with a specific set of processors in the 1st partition.
See the <a class="reference internal" href="Section_accelerate.html"><span class="doc">Section_accelerate</span></a> doc pages for
more details.</p>
<p>If the keyword <em>nth</em> is used with a setting <em>N</em>, then it means every
Nth processor will be moved to the end of the ranking. This is useful
when using the <a class="reference internal" href="run_style.html"><span class="doc">run_style verlet/split</span></a> command with 2
partitions via the -partition command-line switch. The first set of
processors will be in the first partition, the 2nd set in the 2nd
partition. The -reorder command-line switch can alter this so that
the 1st N procs in the 1st partition and one proc in the 2nd partition
will be ordered consecutively, e.g. as the cores on one physical node.
This can boost performance. For example, if you use &#8220;-reorder nth 4&#8221;
and &#8220;-partition 9 3&#8221; and you are running on 12 processors, the
processors will be reordered from</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">0</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span> <span class="mi">5</span> <span class="mi">6</span> <span class="mi">7</span> <span class="mi">8</span> <span class="mi">9</span> <span class="mi">10</span> <span class="mi">11</span>
</pre></div>
</div>
<p>to</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">0</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">4</span> <span class="mi">5</span> <span class="mi">6</span> <span class="mi">8</span> <span class="mi">9</span> <span class="mi">10</span> <span class="mi">3</span> <span class="mi">7</span> <span class="mi">11</span>
</pre></div>
</div>
<p>so that the processors in each partition will be</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">0</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">4</span> <span class="mi">5</span> <span class="mi">6</span> <span class="mi">8</span> <span class="mi">9</span> <span class="mi">10</span>
<span class="mi">3</span> <span class="mi">7</span> <span class="mi">11</span>
</pre></div>
</div>
<p>See the &#8220;processors&#8221; command for how to insure processors from each
partition could then be grouped optimally for quad-core nodes.</p>
<p>If the keyword is <em>custom</em>, then a file that specifies a permutation
of the processor ranks is also specified. The format of the reorder
file is as follows. Any number of initial blank or comment lines
(starting with a &#8220;#&#8221; character) can be present. These should be
followed by P lines of the form:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">I</span> <span class="n">J</span>
</pre></div>
</div>
<p>where P is the number of processors LAMMPS was launched with. Note
that if running in multi-partition mode (see the -partition switch
above) P is the total number of processors in all partitions. The I
and J values describe a permutation of the P processors. Every I and
J should be values from 0 to P-1 inclusive. In the set of P I values,
every proc ID should appear exactly once. Ditto for the set of P J
values. A single I,J pairing means that the physical processor with
rank I in the original MPI communicator will have rank J in the
reordered communicator.</p>
<p>Note that rank ordering can also be specified by many MPI
implementations, either by environment variables that specify how to
order physical processors, or by config files that specify what
physical processors to assign to each MPI rank. The -reorder switch
simply gives you a portable way to do this without relying on MPI
itself. See the <a class="reference external" href="processors">processors out</a> command for how to output
info on the final assignment of physical processors to the LAMMPS
simulation domain.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">screen</span> <span class="n">file</span>
</pre></div>
</div>
<p>Specify a file for LAMMPS to write its screen information to. In
one-partition mode, if the switch is not used, LAMMPS writes to the
screen. If this switch is used, LAMMPS writes to the specified file
instead and you will see no screen output. In multi-partition mode,
if the switch is not used, hi-level status information is written to
the screen. Each partition also writes to a screen.N file where N is
the partition ID. If the switch is specified in multi-partition mode,
the hi-level screen dump is named &#8220;file&#8221; and each partition also
writes screen information to a file.N. For both one-partition and
multi-partition mode, if the specified file is &#8220;none&#8221;, then no screen
output is performed. Option -pscreen will override the name of the
partition screen files file.N.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">suffix</span> <span class="n">style</span> <span class="n">args</span>
</pre></div>
</div>
<p>Use variants of various styles if they exist. The specified style can
be <em>cuda</em>, <em>gpu</em>, <em>intel</em>, <em>kk</em>, <em>omp</em>, <em>opt</em>, or <em>hybrid</em>. These
refer to optional packages that LAMMPS can be built with, as described
above in <a class="reference internal" href="#start-3"><span class="std std-ref">Section 2.3</span></a>. The &#8220;gpu&#8221; style corresponds to the
GPU package, the &#8220;intel&#8221; style to the USER-INTEL package, the &#8220;kk&#8221;
style to the KOKKOS package, the &#8220;opt&#8221; style to the OPT package, and
the &#8220;omp&#8221; style to the USER-OMP package. The hybrid style is the only
style that accepts arguments. It allows for two packages to be
specified. The first package specified is the default and will be used
if it is available. If no style is available for the first package,
the style for the second package will be used if available. For
example, &#8220;-suffix hybrid intel omp&#8221; will use styles from the
USER-INTEL package if they are installed and available, but styles for
the USER-OMP package otherwise.</p>
<p>Along with the &#8220;-package&#8221; command-line switch, this is a convenient
mechanism for invoking accelerator packages and their options without
having to edit an input script.</p>
<p>As an example, all of the packages provide a <a class="reference internal" href="pair_lj.html"><span class="doc">pair_style lj/cut</span></a> variant, with style names lj/cut/gpu,
lj/cut/intel, lj/cut/kk, lj/cut/omp, and lj/cut/opt. A variant style
can be specified explicitly in your input script, e.g. pair_style
lj/cut/gpu. If the -suffix switch is used the specified suffix
(gpu,intel,kk,omp,opt) is automatically appended whenever your input
script command creates a new <a class="reference internal" href="atom_style.html"><span class="doc">atom</span></a>,
<a class="reference internal" href="pair_style.html"><span class="doc">pair</span></a>, <a class="reference internal" href="fix.html"><span class="doc">fix</span></a>, <a class="reference internal" href="compute.html"><span class="doc">compute</span></a>, or
<a class="reference internal" href="run_style.html"><span class="doc">run</span></a> style. If the variant version does not exist,
the standard version is created.</p>
<p>For the GPU package, using this command-line switch also invokes the
default GPU settings, as if the command &#8220;package gpu 1&#8221; were used at
the top of your input script. These settings can be changed by using
the &#8220;-package gpu&#8221; command-line switch or the <a class="reference internal" href="package.html"><span class="doc">package gpu</span></a> command in your script.</p>
<p>For the USER-INTEL package, using this command-line switch also
invokes the default USER-INTEL settings, as if the command &#8220;package
intel 1&#8221; were used at the top of your input script. These settings
can be changed by using the &#8220;-package intel&#8221; command-line switch or
the <a class="reference internal" href="package.html"><span class="doc">package intel</span></a> command in your script. If the
USER-OMP package is also installed, the hybrid style with &#8220;intel omp&#8221;
arguments can be used to make the omp suffix a second choice, if a
requested style is not available in the USER-INTEL package. It will
also invoke the default USER-OMP settings, as if the command &#8220;package
omp 0&#8221; were used at the top of your input script. These settings can
be changed by using the &#8220;-package omp&#8221; command-line switch or the
<a class="reference internal" href="package.html"><span class="doc">package omp</span></a> command in your script.</p>
<p>For the KOKKOS package, using this command-line switch also invokes
the default KOKKOS settings, as if the command &#8220;package kokkos&#8221; were
used at the top of your input script. These settings can be changed
by using the &#8220;-package kokkos&#8221; command-line switch or the <a class="reference internal" href="package.html"><span class="doc">package kokkos</span></a> command in your script.</p>
<p>For the OMP package, using this command-line switch also invokes the
default OMP settings, as if the command &#8220;package omp 0&#8221; were used at
the top of your input script. These settings can be changed by using
the &#8220;-package omp&#8221; command-line switch or the <a class="reference internal" href="package.html"><span class="doc">package omp</span></a> command in your script.</p>
<p>The <a class="reference internal" href="suffix.html"><span class="doc">suffix</span></a> command can also be used within an input
script to set a suffix, or to turn off or back on any suffix setting
made via the command line.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">var</span> <span class="n">name</span> <span class="n">value1</span> <span class="n">value2</span> <span class="o">...</span>
</pre></div>
</div>
<p>Specify a variable that will be defined for substitution purposes when
the input script is read. This switch can be used multiple times to
define multiple variables. &#8220;Name&#8221; is the variable name which can be a
single character (referenced as $x in the input script) or a full
string (referenced as ${abc}). An <a class="reference internal" href="variable.html"><span class="doc">index-style variable</span></a> will be created and populated with the
subsequent values, e.g. a set of filenames. Using this command-line
option is equivalent to putting the line &#8220;variable name index value1
value2 ...&#8221; at the beginning of the input script. Defining an index
variable as a command-line argument overrides any setting for the same
index variable in the input script, since index variables cannot be
re-defined. See the <a class="reference internal" href="variable.html"><span class="doc">variable</span></a> command for more info on
defining index and other kinds of variables and <a class="reference internal" href="Section_commands.html#cmd-2"><span class="std std-ref">this section</span></a> for more info on using variables
in input scripts.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Currently, the command-line parser looks for arguments that
start with &#8220;-&#8221; to indicate new switches. Thus you cannot specify
multiple variable values if any of they start with a &#8220;-&#8221;, e.g. a
negative numeric value. It is OK if the first value1 starts with a
&#8220;-&#8221;, since it is automatically skipped.</p>
</div>
<hr class="docutils" />
</div>
<div class="section" id="lammps-screen-output">
<span id="start-8"></span><h2>2.8. LAMMPS screen output</h2>
<p>As LAMMPS reads an input script, it prints information to both the
screen and a log file about significant actions it takes to setup a
simulation. When the simulation is ready to begin, LAMMPS performs
various initializations and prints the amount of memory (in MBytes per
processor) that the simulation requires. It also prints details of
the initial thermodynamic state of the system. During the run itself,
thermodynamic information is printed periodically, every few
timesteps. When the run concludes, LAMMPS prints the final
thermodynamic state and a total run time for the simulation. It then
appends statistics about the CPU time and storage requirements for the
simulation. An example set of statistics is shown here:</p>
<p>Loop time of 2.81192 on 4 procs for 300 steps with 2004 atoms</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Performance</span><span class="p">:</span> <span class="mf">18.436</span> <span class="n">ns</span><span class="o">/</span><span class="n">day</span> <span class="mf">1.302</span> <span class="n">hours</span><span class="o">/</span><span class="n">ns</span> <span class="mf">106.689</span> <span class="n">timesteps</span><span class="o">/</span><span class="n">s</span>
<span class="mf">97.0</span><span class="o">%</span> <span class="n">CPU</span> <span class="n">use</span> <span class="k">with</span> <span class="mi">4</span> <span class="n">MPI</span> <span class="n">tasks</span> <span class="n">x</span> <span class="n">no</span> <span class="n">OpenMP</span> <span class="n">threads</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">MPI</span> <span class="n">task</span> <span class="n">timings</span> <span class="n">breakdown</span><span class="p">:</span>
<span class="n">Section</span> <span class="o">|</span> <span class="nb">min</span> <span class="n">time</span> <span class="o">|</span> <span class="n">avg</span> <span class="n">time</span> <span class="o">|</span> <span class="nb">max</span> <span class="n">time</span> <span class="o">|%</span><span class="n">varavg</span><span class="o">|</span> <span class="o">%</span><span class="n">total</span>
<span class="o">---------------------------------------------------------------</span>
<span class="n">Pair</span> <span class="o">|</span> <span class="mf">1.9808</span> <span class="o">|</span> <span class="mf">2.0134</span> <span class="o">|</span> <span class="mf">2.0318</span> <span class="o">|</span> <span class="mf">1.4</span> <span class="o">|</span> <span class="mf">71.60</span>
<span class="n">Bond</span> <span class="o">|</span> <span class="mf">0.0021894</span> <span class="o">|</span> <span class="mf">0.0060319</span> <span class="o">|</span> <span class="mf">0.010058</span> <span class="o">|</span> <span class="mf">4.7</span> <span class="o">|</span> <span class="mf">0.21</span>
<span class="n">Kspace</span> <span class="o">|</span> <span class="mf">0.3207</span> <span class="o">|</span> <span class="mf">0.3366</span> <span class="o">|</span> <span class="mf">0.36616</span> <span class="o">|</span> <span class="mf">3.1</span> <span class="o">|</span> <span class="mf">11.97</span>
<span class="n">Neigh</span> <span class="o">|</span> <span class="mf">0.28411</span> <span class="o">|</span> <span class="mf">0.28464</span> <span class="o">|</span> <span class="mf">0.28516</span> <span class="o">|</span> <span class="mf">0.1</span> <span class="o">|</span> <span class="mf">10.12</span>
<span class="n">Comm</span> <span class="o">|</span> <span class="mf">0.075732</span> <span class="o">|</span> <span class="mf">0.077018</span> <span class="o">|</span> <span class="mf">0.07883</span> <span class="o">|</span> <span class="mf">0.4</span> <span class="o">|</span> <span class="mf">2.74</span>
<span class="n">Output</span> <span class="o">|</span> <span class="mf">0.00030518</span> <span class="o">|</span> <span class="mf">0.00042665</span> <span class="o">|</span> <span class="mf">0.00078821</span> <span class="o">|</span> <span class="mf">1.0</span> <span class="o">|</span> <span class="mf">0.02</span>
<span class="n">Modify</span> <span class="o">|</span> <span class="mf">0.086606</span> <span class="o">|</span> <span class="mf">0.086631</span> <span class="o">|</span> <span class="mf">0.086668</span> <span class="o">|</span> <span class="mf">0.0</span> <span class="o">|</span> <span class="mf">3.08</span>
<span class="n">Other</span> <span class="o">|</span> <span class="o">|</span> <span class="mf">0.007178</span> <span class="o">|</span> <span class="o">|</span> <span class="o">|</span> <span class="mf">0.26</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Nlocal</span><span class="p">:</span> <span class="mi">501</span> <span class="n">ave</span> <span class="mi">508</span> <span class="nb">max</span> <span class="mi">490</span> <span class="nb">min</span>
<span class="n">Histogram</span><span class="p">:</span> <span class="mi">1</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">1</span> <span class="mi">1</span> <span class="mi">0</span> <span class="mi">1</span>
<span class="n">Nghost</span><span class="p">:</span> <span class="mf">6586.25</span> <span class="n">ave</span> <span class="mi">6628</span> <span class="nb">max</span> <span class="mi">6548</span> <span class="nb">min</span>
<span class="n">Histogram</span><span class="p">:</span> <span class="mi">1</span> <span class="mi">0</span> <span class="mi">1</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">1</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">1</span>
<span class="n">Neighs</span><span class="p">:</span> <span class="mi">177007</span> <span class="n">ave</span> <span class="mi">180562</span> <span class="nb">max</span> <span class="mi">170212</span> <span class="nb">min</span>
<span class="n">Histogram</span><span class="p">:</span> <span class="mi">1</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">1</span> <span class="mi">1</span> <span class="mi">1</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Total</span> <span class="c1"># of neighbors = 708028</span>
<span class="n">Ave</span> <span class="n">neighs</span><span class="o">/</span><span class="n">atom</span> <span class="o">=</span> <span class="mf">353.307</span>
<span class="n">Ave</span> <span class="n">special</span> <span class="n">neighs</span><span class="o">/</span><span class="n">atom</span> <span class="o">=</span> <span class="mf">2.34032</span>
<span class="n">Neighbor</span> <span class="nb">list</span> <span class="n">builds</span> <span class="o">=</span> <span class="mi">26</span>
<span class="n">Dangerous</span> <span class="n">builds</span> <span class="o">=</span> <span class="mi">0</span>
</pre></div>
</div>
<p>The first section provides a global loop timing summary. The loop time
is the total wall time for the section. The <em>Performance</em> line is
provided for convenience to help predicting the number of loop
continuations required and for comparing performance with other
similar MD codes. The CPU use line provides the CPU utilzation per
MPI task; it should be close to 100% times the number of OpenMP
threads (or 1). Lower numbers correspond to delays due to file I/O or
insufficient thread utilization.</p>
<p>The MPI task section gives the breakdown of the CPU run time (in
seconds) into major categories:</p>
<ul class="simple">
<li><em>Pair</em> stands for all non-bonded force computation</li>
<li><em>Bond</em> stands for bonded interactions: bonds, angles, dihedrals, impropers</li>
<li><em>Kspace</em> stands for reciprocal space interactions: Ewald, PPPM, MSM</li>
<li><em>Neigh</em> stands for neighbor list construction</li>
<li><em>Comm</em> stands for communicating atoms and their properties</li>
<li><em>Output</em> stands for writing dumps and thermo output</li>
<li><em>Modify</em> stands for fixes and computes called by them</li>
<li><em>Other</em> is the remaining time</li>
</ul>
<p>For each category, there is a breakdown of the least, average and most
amount of wall time a processor spent on this section. Also you have the
variation from the average time. Together these numbers allow to gauge
the amount of load imbalance in this segment of the calculation. Ideally
the difference between minimum, maximum and average is small and thus
the variation from the average close to zero. The final column shows
the percentage of the total loop time is spent in this section.</p>
<p>When using the <a class="reference internal" href="timer.html"><span class="doc">timer full</span></a> setting, an additional column
is present that also prints the CPU utilization in percent. In
addition, when using <em>timer full</em> and the <a class="reference internal" href="package.html"><span class="doc">package omp</span></a>
command are active, a similar timing summary of time spent in threaded
regions to monitor thread utilization and load balance is provided. A
new entry is the <em>Reduce</em> section, which lists the time spend in
reducing the per-thread data elements to the storage for non-threaded
computation. These thread timings are taking from the first MPI rank
only and and thus, as the breakdown for MPI tasks can change from MPI
rank to MPI rank, this breakdown can be very different for individual
ranks. Here is an example output for this section:</p>
-<p>Thread timings breakdown (MPI rank 0):
-Total threaded time 0.6846 / 90.6%
-Section | min time | avg time | max time <a href="#id37"><span class="problematic" id="id38">|%varavg|</span></a> %total
-&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
-Pair | 0.5127 | 0.5147 | 0.5167 | 0.3 | 75.18
-Bond | 0.0043139 | 0.0046779 | 0.0050418 | 0.5 | 0.68
-Kspace | 0.070572 | 0.074541 | 0.07851 | 1.5 | 10.89
-Neigh | 0.084778 | 0.086969 | 0.089161 | 0.7 | 12.70
-Reduce | 0.0036485 | 0.003737 | 0.0038254 | 0.1 | 0.55</p>
+<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Thread</span> <span class="n">timings</span> <span class="n">breakdown</span> <span class="p">(</span><span class="n">MPI</span> <span class="n">rank</span> <span class="mi">0</span><span class="p">):</span>
+<span class="n">Total</span> <span class="n">threaded</span> <span class="n">time</span> <span class="mf">0.6846</span> <span class="o">/</span> <span class="mf">90.6</span><span class="o">%</span>
+<span class="n">Section</span> <span class="o">|</span> <span class="nb">min</span> <span class="n">time</span> <span class="o">|</span> <span class="n">avg</span> <span class="n">time</span> <span class="o">|</span> <span class="nb">max</span> <span class="n">time</span> <span class="o">|%</span><span class="n">varavg</span><span class="o">|</span> <span class="o">%</span><span class="n">total</span>
+<span class="o">---------------------------------------------------------------</span>
+<span class="n">Pair</span> <span class="o">|</span> <span class="mf">0.5127</span> <span class="o">|</span> <span class="mf">0.5147</span> <span class="o">|</span> <span class="mf">0.5167</span> <span class="o">|</span> <span class="mf">0.3</span> <span class="o">|</span> <span class="mf">75.18</span>
+<span class="n">Bond</span> <span class="o">|</span> <span class="mf">0.0043139</span> <span class="o">|</span> <span class="mf">0.0046779</span> <span class="o">|</span> <span class="mf">0.0050418</span> <span class="o">|</span> <span class="mf">0.5</span> <span class="o">|</span> <span class="mf">0.68</span>
+<span class="n">Kspace</span> <span class="o">|</span> <span class="mf">0.070572</span> <span class="o">|</span> <span class="mf">0.074541</span> <span class="o">|</span> <span class="mf">0.07851</span> <span class="o">|</span> <span class="mf">1.5</span> <span class="o">|</span> <span class="mf">10.89</span>
+<span class="n">Neigh</span> <span class="o">|</span> <span class="mf">0.084778</span> <span class="o">|</span> <span class="mf">0.086969</span> <span class="o">|</span> <span class="mf">0.089161</span> <span class="o">|</span> <span class="mf">0.7</span> <span class="o">|</span> <span class="mf">12.70</span>
+<span class="n">Reduce</span> <span class="o">|</span> <span class="mf">0.0036485</span> <span class="o">|</span> <span class="mf">0.003737</span> <span class="o">|</span> <span class="mf">0.0038254</span> <span class="o">|</span> <span class="mf">0.1</span> <span class="o">|</span> <span class="mf">0.55</span>
+</pre></div>
+</div>
<p>The third section lists the number of owned atoms (Nlocal), ghost atoms
(Nghost), and pair-wise neighbors stored per processor. The max and min
values give the spread of these values across processors with a 10-bin
histogram showing the distribution. The total number of histogram counts
is equal to the number of processors.</p>
<p>The last section gives aggregate statistics for pair-wise neighbors
and special neighbors that LAMMPS keeps track of (see the
<a class="reference internal" href="special_bonds.html"><span class="doc">special_bonds</span></a> command). The number of times
neighbor lists were rebuilt during the run is given as well as the
number of potentially &#8220;dangerous&#8221; rebuilds. If atom movement
triggered neighbor list rebuilding (see the
<a class="reference internal" href="neigh_modify.html"><span class="doc">neigh_modify</span></a> command), then dangerous
reneighborings are those that were triggered on the first timestep
atom movement was checked for. If this count is non-zero you may wish
to reduce the delay factor to insure no force interactions are missed
by atoms moving beyond the neighbor skin distance before a rebuild
takes place.</p>
<p>If an energy minimization was performed via the
<a class="reference internal" href="minimize.html"><span class="doc">minimize</span></a> command, additional information is printed,
e.g.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Minimization</span> <span class="n">stats</span><span class="p">:</span>
<span class="n">Stopping</span> <span class="n">criterion</span> <span class="o">=</span> <span class="n">linesearch</span> <span class="n">alpha</span> <span class="ow">is</span> <span class="n">zero</span>
<span class="n">Energy</span> <span class="n">initial</span><span class="p">,</span> <span class="nb">next</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">last</span><span class="p">,</span> <span class="n">final</span> <span class="o">=</span>
<span class="o">-</span><span class="mf">6372.3765206</span> <span class="o">-</span><span class="mf">8328.46998942</span> <span class="o">-</span><span class="mf">8328.46998942</span>
<span class="n">Force</span> <span class="n">two</span><span class="o">-</span><span class="n">norm</span> <span class="n">initial</span><span class="p">,</span> <span class="n">final</span> <span class="o">=</span> <span class="mf">1059.36</span> <span class="mf">5.36874</span>
<span class="n">Force</span> <span class="nb">max</span> <span class="n">component</span> <span class="n">initial</span><span class="p">,</span> <span class="n">final</span> <span class="o">=</span> <span class="mf">58.6026</span> <span class="mf">1.46872</span>
<span class="n">Final</span> <span class="n">line</span> <span class="n">search</span> <span class="n">alpha</span><span class="p">,</span> <span class="nb">max</span> <span class="n">atom</span> <span class="n">move</span> <span class="o">=</span> <span class="mf">2.7842e-10</span> <span class="mf">4.0892e-10</span>
<span class="n">Iterations</span><span class="p">,</span> <span class="n">force</span> <span class="n">evaluations</span> <span class="o">=</span> <span class="mi">701</span> <span class="mi">1516</span>
</pre></div>
</div>
<p>The first line prints the criterion that determined the minimization
to be completed. The third line lists the initial and final energy,
as well as the energy on the next-to-last iteration. The next 2 lines
give a measure of the gradient of the energy (force on all atoms).
The 2-norm is the &#8220;length&#8221; of this force vector; the inf-norm is the
largest component. Then some information about the line search and
statistics on how many iterations and force-evaluations the minimizer
required. Multiple force evaluations are typically done at each
iteration to perform a 1d line minimization in the search direction.</p>
<p>If a <a class="reference internal" href="kspace_style.html"><span class="doc">kspace_style</span></a> long-range Coulombics solve was
performed during the run (PPPM, Ewald), then additional information is
printed, e.g.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">FFT</span> <span class="n">time</span> <span class="p">(</span><span class="o">%</span> <span class="n">of</span> <span class="n">Kspce</span><span class="p">)</span> <span class="o">=</span> <span class="mf">0.200313</span> <span class="p">(</span><span class="mf">8.34477</span><span class="p">)</span>
<span class="n">FFT</span> <span class="n">Gflps</span> <span class="mi">3</span><span class="n">d</span> <span class="mi">1</span><span class="n">d</span><span class="o">-</span><span class="n">only</span> <span class="o">=</span> <span class="mf">2.31074</span> <span class="mf">9.19989</span>
</pre></div>
</div>
<p>The first line gives the time spent doing 3d FFTs (4 per timestep) and
the fraction it represents of the total KSpace time (listed above).
Each 3d FFT requires computation (3 sets of 1d FFTs) and communication
(transposes). The total flops performed is 5Nlog_2(N), where N is the
number of points in the 3d grid. The FFTs are timed with and without
the communication and a Gflop rate is computed. The 3d rate is with
communication; the 1d rate is without (just the 1d FFTs). Thus you
can estimate what fraction of your FFT time was spent in
communication, roughly 75% in the example above.</p>
<hr class="docutils" />
</div>
<div class="section" id="tips-for-users-of-previous-lammps-versions">
<span id="start-9"></span><h2>2.9. Tips for users of previous LAMMPS versions</h2>
<p>The current C++ began with a complete rewrite of LAMMPS 2001, which
was written in F90. Features of earlier versions of LAMMPS are listed
in <a class="reference internal" href="Section_history.html"><span class="doc">Section_history</span></a>. The F90 and F77 versions
(2001 and 99) are also freely distributed as open-source codes; check
the <a class="reference external" href="http://lammps.sandia.gov">LAMMPS WWW Site</a> for distribution information if you prefer
those versions. The 99 and 2001 versions are no longer under active
development; they do not have all the features of C++ LAMMPS.</p>
<p>If you are a previous user of LAMMPS 2001, these are the most
significant changes you will notice in C++ LAMMPS:</p>
<p>(1) The names and arguments of many input script commands have
changed. All commands are now a single word (e.g. read_data instead
of read data).</p>
<p>(2) All the functionality of LAMMPS 2001 is included in C++ LAMMPS,
but you may need to specify the relevant commands in different ways.</p>
<p>(3) The format of the data file can be streamlined for some problems.
See the <a class="reference internal" href="read_data.html"><span class="doc">read_data</span></a> command for details. The data file
section &#8220;Nonbond Coeff&#8221; has been renamed to &#8220;Pair Coeff&#8221; in C++ LAMMPS.</p>
<p>(4) Binary restart files written by LAMMPS 2001 cannot be read by C++
LAMMPS with a <a class="reference internal" href="read_restart.html"><span class="doc">read_restart</span></a> command. This is
because they were output by F90 which writes in a different binary
format than C or C++ writes or reads. Use the <em>restart2data</em> tool
provided with LAMMPS 2001 to convert the 2001 restart file to a text
data file. Then edit the data file as necessary before using the C++
LAMMPS <a class="reference internal" href="read_data.html"><span class="doc">read_data</span></a> command to read it in.</p>
<p>(5) There are numerous small numerical changes in C++ LAMMPS that mean
you will not get identical answers when comparing to a 2001 run.
However, your initial thermodynamic energy and MD trajectory should be
close if you have setup the problem for both codes the same.</p>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="Section_commands.html" class="btn btn-neutral float-right" title="3. Commands" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="Section_intro.html" class="btn btn-neutral" title="1. Introduction" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2013 Sandia Corporation.
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./',
VERSION:'',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/lightbox.min.js"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2-customize/jquery-noconflict.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>
\ No newline at end of file
diff --git a/doc/html/_sources/Manual.txt b/doc/html/_sources/Manual.txt
deleted file mode 100644
index 7d0992b42..000000000
--- a/doc/html/_sources/Manual.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-.. raw:: html
-
- <H1></H1>
-
-LAMMPS Documentation
-====================
-
-20 Aug 2016 version
--------------------
-
-Version info:
--------------
-
-The LAMMPS "version" is the date when it was released, such as 1 May
-2010. LAMMPS is updated continuously. Whenever we fix a bug or add a
-feature, we release it immediately, and post a notice on `this page of the WWW site <bug_>`_. Each dated copy of LAMMPS contains all the
-features and bug-fixes up to and including that version date. The
-version date is printed to the screen and logfile every time you run
-LAMMPS. It is also in the file src/version.h and in the LAMMPS
-directory name created when you unpack a tarball, and at the top of
-the first page of the manual (this page).
-
-* If you browse the HTML doc pages on the LAMMPS WWW site, they always
- describe the most current version of LAMMPS.
-* If you browse the HTML doc pages included in your tarball, they
- describe the version you have.
-* The `PDF file <Manual.pdf>`_ on the WWW site or in the tarball is updated
- about once per month. This is because it is large, and we don't want
- it to be part of every patch.
-* There is also a `Developer.pdf <Developer.pdf>`_ file in the doc
- directory, which describes the internal structure and algorithms of
- LAMMPS.
-
-LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel
-Simulator.
-
-LAMMPS is a classical molecular dynamics simulation code designed to
-run efficiently on parallel computers. It was developed at Sandia
-National Laboratories, a US Department of Energy facility, with
-funding from the DOE. It is an open-source code, distributed freely
-under the terms of the GNU Public License (GPL).
-
-The primary developers of LAMMPS are `Steve Plimpton <sjp_>`_, Aidan
-Thompson, and Paul Crozier who can be contacted at
-sjplimp,athomps,pscrozi at sandia.gov. The `LAMMPS WWW Site <lws_>`_ at
-http://lammps.sandia.gov has more information about the code and its
-uses.
-
-.. _bug: http://lammps.sandia.gov/bug.html
-
-
-
-.. _sjp: http://www.sandia.gov/~sjplimp
-
-
-
-
-----------
-
-
-The LAMMPS documentation is organized into the following sections. If
-you find errors or omissions in this manual or have suggestions for
-useful information to add, please send an email to the developers so
-we can improve the LAMMPS documentation.
-
-Once you are familiar with LAMMPS, you may want to bookmark :ref:`this page <comm>` at Section_commands.html#comm since
-it gives quick access to documentation for all LAMMPS commands.
-
-`PDF file <Manual.pdf>`_ of the entire manual, generated by
-`htmldoc <http://freecode.com/projects/htmldoc>`_
-
-
-.. toctree::
- :maxdepth: 2
- :numbered:
-
- Section_intro
- Section_start
- Section_commands
- Section_packages
- Section_accelerate
- Section_howto
- Section_example
- Section_perf
- Section_tools
- Section_modify
- Section_python
- Section_errors
- Section_history
-
-
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`search`
-
-.. raw:: html
-
- </BODY>
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_accelerate.txt b/doc/html/_sources/Section_accelerate.txt
deleted file mode 100644
index e426b591b..000000000
--- a/doc/html/_sources/Section_accelerate.txt
+++ /dev/null
@@ -1,398 +0,0 @@
-Accelerating LAMMPS performance
-===============================
-
-This section describes various methods for improving LAMMPS
-performance for different classes of problems running on different
-kinds of machines.
-
-There are two thrusts to the discussion that follows. The
-first is using code options that implement alternate algorithms
-that can speed-up a simulation. The second is to use one
-of the several accelerator packages provided with LAMMPS that
-contain code optimized for certain kinds of hardware, including
-multi-core CPUs, GPUs, and Intel Xeon Phi coprocessors.
-
-* 5.1 :ref:`Measuring performance <acc_1>`
-* 5.2 :ref:`Algorithms and code options to boost performace <acc_2>`
-* 5.3 :ref:`Accelerator packages with optimized styles <acc_3>`
-* 5.3.1 :doc:`GPU package <accelerate_gpu>`
-* 5.3.2 :doc:`USER-INTEL package <accelerate_intel>`
-* 5.3.3 :doc:`KOKKOS package <accelerate_kokkos>`
-* 5.3.4 :doc:`USER-OMP package <accelerate_omp>`
-* 5.3.5 :doc:`OPT package <accelerate_opt>`
-* 5.4 :ref:`Comparison of various accelerator packages <acc_4>`
-The `Benchmark page <http://lammps.sandia.gov/bench.html>`_ of the LAMMPS
-web site gives performance results for the various accelerator
-packages discussed in Section 5.2, for several of the standard LAMMPS
-benchmark problems, as a function of problem size and number of
-compute nodes, on different hardware platforms.
-
-
-
-
-
-.. _acc_1:
-
-Measuring performance
----------------------------------
-
-Before trying to make your simulation run faster, you should
-understand how it currently performs and where the bottlenecks are.
-
-The best way to do this is run the your system (actual number of
-atoms) for a modest number of timesteps (say 100 steps) on several
-different processor counts, including a single processor if possible.
-Do this for an equilibrium version of your system, so that the
-100-step timings are representative of a much longer run. There is
-typically no need to run for 1000s of timesteps to get accurate
-timings; you can simply extrapolate from short runs.
-
-For the set of runs, look at the timing data printed to the screen and
-log file at the end of each LAMMPS run. :ref:`This section <start_8>` of the manual has an overview.
-
-Running on one (or a few processors) should give a good estimate of
-the serial performance and what portions of the timestep are taking
-the most time. Running the same problem on a few different processor
-counts should give an estimate of parallel scalability. I.e. if the
-simulation runs 16x faster on 16 processors, its 100% parallel
-efficient; if it runs 8x faster on 16 processors, it's 50% efficient.
-
-The most important data to look at in the timing info is the timing
-breakdown and relative percentages. For example, trying different
-options for speeding up the long-range solvers will have little impact
-if they only consume 10% of the run time. If the pairwise time is
-dominating, you may want to look at GPU or OMP versions of the pair
-style, as discussed below. Comparing how the percentages change as
-you increase the processor count gives you a sense of how different
-operations within the timestep are scaling. Note that if you are
-running with a Kspace solver, there is additional output on the
-breakdown of the Kspace time. For PPPM, this includes the fraction
-spent on FFTs, which can be communication intensive.
-
-Another important detail in the timing info are the histograms of
-atoms counts and neighbor counts. If these vary widely across
-processors, you have a load-imbalance issue. This often results in
-inaccurate relative timing data, because processors have to wait when
-communication occurs for other processors to catch up. Thus the
-reported times for "Communication" or "Other" may be higher than they
-really are, due to load-imbalance. If this is an issue, you can
-uncomment the MPI_Barrier() lines in src/timer.cpp, and recompile
-LAMMPS, to obtain synchronized timings.
-
-
-----------
-
-
-.. _acc_2:
-
-General strategies
-------------------------------
-
-.. note::
-
- this section 5.2 is still a work in progress
-
-Here is a list of general ideas for improving simulation performance.
-Most of them are only applicable to certain models and certain
-bottlenecks in the current performance, so let the timing data you
-generate be your guide. It is hard, if not impossible, to predict how
-much difference these options will make, since it is a function of
-problem size, number of processors used, and your machine. There is
-no substitute for identifying performance bottlenecks, and trying out
-various options.
-
-* rRESPA
-* 2-FFT PPPM
-* Staggered PPPM
-* single vs double PPPM
-* partial charge PPPM
-* verlet/split run style
-* processor command for proc layout and numa layout
-* load-balancing: balance and fix balance
-
-2-FFT PPPM, also called *analytic differentiation* or *ad* PPPM, uses
-2 FFTs instead of the 4 FFTs used by the default *ik differentiation*
-PPPM. However, 2-FFT PPPM also requires a slightly larger mesh size to
-achieve the same accuracy as 4-FFT PPPM. For problems where the FFT
-cost is the performance bottleneck (typically large problems running
-on many processors), 2-FFT PPPM may be faster than 4-FFT PPPM.
-
-Staggered PPPM performs calculations using two different meshes, one
-shifted slightly with respect to the other. This can reduce force
-aliasing errors and increase the accuracy of the method, but also
-doubles the amount of work required. For high relative accuracy, using
-staggered PPPM allows one to half the mesh size in each dimension as
-compared to regular PPPM, which can give around a 4x speedup in the
-kspace time. However, for low relative accuracy, using staggered PPPM
-gives little benefit and can be up to 2x slower in the kspace
-time. For example, the rhodopsin benchmark was run on a single
-processor, and results for kspace time vs. relative accuracy for the
-different methods are shown in the figure below. For this system,
-staggered PPPM (using ik differentiation) becomes useful when using a
-relative accuracy of slightly greater than 1e-5 and above.
-
-.. image:: JPG/rhodo_staggered.jpg
- :align: center
-
-.. note::
-
- Using staggered PPPM may not give the same increase in accuracy
- of energy and pressure as it does in forces, so some caution must be
- used if energy and/or pressure are quantities of interest, such as
- when using a barostat.
-
-
-----------
-
-
-.. _acc_3:
-
-Packages with optimized styles
-------------------------------------------
-
-Accelerated versions of various :doc:`pair_style <pair_style>`,
-:doc:`fixes <fix>`, :doc:`computes <compute>`, and other commands have
-been added to LAMMPS, which will typically run faster than the
-standard non-accelerated versions. Some require appropriate hardware
-to be present on your system, e.g. GPUs or Intel Xeon Phi
-coprocessors.
-
-All of these commands are in packages provided with LAMMPS. An
-overview of packages is give in :doc:`Section packages <Section_packages>`.
-
-These are the accelerator packages
-currently in LAMMPS, either as standard or user packages:
-
-+--------------------------------------+------------------------------------------------+
-| :doc:`GPU <accelerate_gpu>` | for NVIDIA GPUs as well as OpenCL support |
-+--------------------------------------+------------------------------------------------+
-| :doc:`USER-INTEL <accelerate_intel>` | for Intel CPUs and Intel Xeon Phi |
-+--------------------------------------+------------------------------------------------+
-| :doc:`KOKKOS <accelerate_kokkos>` | for GPUs, Intel Xeon Phi, and OpenMP threading |
-+--------------------------------------+------------------------------------------------+
-| :doc:`USER-OMP <accelerate_omp>` | for OpenMP threading |
-+--------------------------------------+------------------------------------------------+
-| :doc:`OPT <accelerate_opt>` | generic CPU optimizations |
-+--------------------------------------+------------------------------------------------+
-
-Inverting this list, LAMMPS currently has acceleration support for
-three kinds of hardware, via the listed packages:
-
-+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
-| Many-core CPUs | :doc:`USER-INTEL <accelerate_intel>`, :doc:`KOKKOS <accelerate_kokkos>`, :doc:`USER-OMP <accelerate_omp>`, :doc:`OPT <accelerate_opt>` packages |
-+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
-| NVIDIA GPUs | :doc:`GPU <accelerate_gpu>`, :doc:`KOKKOS <accelerate_kokkos>` packages |
-+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
-| Intel Phi | :doc:`USER-INTEL <accelerate_intel>`, :doc:`KOKKOS <accelerate_kokkos>` packages |
-+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
-
-Which package is fastest for your hardware may depend on the size
-problem you are running and what commands (accelerated and
-non-accelerated) are invoked by your input script. While these doc
-pages include performance guidelines, there is no substitute for
-trying out the different packages appropriate to your hardware.
-
-Any accelerated style has the same name as the corresponding standard
-style, except that a suffix is appended. Otherwise, the syntax for
-the command that uses the style is identical, their functionality is
-the same, and the numerical results it produces should also be the
-same, except for precision and round-off effects.
-
-For example, all of these styles are accelerated variants of the
-Lennard-Jones :doc:`pair_style lj/cut <pair_lj>`:
-
-* :doc:`pair_style lj/cut/gpu <pair_lj>`
-* :doc:`pair_style lj/cut/intel <pair_lj>`
-* :doc:`pair_style lj/cut/kk <pair_lj>`
-* :doc:`pair_style lj/cut/omp <pair_lj>`
-* :doc:`pair_style lj/cut/opt <pair_lj>`
-
-To see what accelerate styles are currently available, see
-:ref:`Section_commands 5 <cmd_5>` of the manual. The
-doc pages for individual commands (e.g. :doc:`pair lj/cut <pair_lj>` or
-:doc:`fix nve <fix_nve>`) also list any accelerated variants available
-for that style.
-
-To use an accelerator package in LAMMPS, and one or more of the styles
-it provides, follow these general steps. Details vary from package to
-package and are explained in the individual accelerator doc pages,
-listed above:
-
-+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
-| build the accelerator library | only for GPU package |
-+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
-| install the accelerator package | make yes-opt, make yes-user-intel, etc |
-+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
-| add compile/link flags to Makefile.machine | in src/MAKE, <br>
- only for USER-INTEL, KOKKOS, USER-OMP, OPT packages |
-+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
-| re-build LAMMPS | make machine |
-+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
-| run a LAMMPS simulation | lmp_machine < in.script <br>
- mpirun -np 32 lmp_machine -in in.script |
-+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
-| enable the accelerator package | via "-c on" and "-k on" :ref:`command-line switches <start_7>`, <br>
- only for KOKKOS package |
-+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
-| set any needed options for the package | via "-pk" :ref:`command-line switch <start_7>` or
- :doc:`package <package>` command, <br>
- only if defaults need to be changed |
-+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
-| use accelerated styles in your input script | via "-sf" :ref:`command-line switch <start_7>` or
- :doc:`suffix <suffix>` command |
-+---------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+
-
-Note that the first 4 steps can be done as a single command, using the
-src/Make.py tool. This tool is discussed in :ref:`Section 2.4 <start_4>` of the manual, and its use is
-illustrated in the individual accelerator sections. Typically these
-steps only need to be done once, to create an executable that uses one
-or more accelerator packages.
-
-The last 4 steps can all be done from the command-line when LAMMPS is
-launched, without changing your input script, as illustrated in the
-individual accelerator sections. Or you can add
-:doc:`package <package>` and :doc:`suffix <suffix>` commands to your input
-script.
-
-.. note::
-
- With a few exceptions, you can build a single LAMMPS executable
- with all its accelerator packages installed. Note however that the
- USER-INTEL and KOKKOS packages require you to choose one of their
- hardware options when building for a specific platform. I.e. CPU or
- Phi option for the USER-INTEL package. Or the OpenMP, Cuda, or Phi
- option for the KOKKOS package.
-
-These are the exceptions. You cannot build a single executable with:
-
-* both the USER-INTEL Phi and KOKKOS Phi options
-* the USER-INTEL Phi or Kokkos Phi option, and the GPU package
-
-See the examples/accelerate/README and make.list files for sample
-Make.py commands that build LAMMPS with any or all of the accelerator
-packages. As an example, here is a command that builds with all the
-GPU related packages installed (GPU, KOKKOS with Cuda), including
-settings to build the needed auxiliary GPU libraries for Kepler GPUs:
-
-.. parsed-literal::
-
- Make.py -j 16 -p omp gpu kokkos -cc nvcc wrap=mpi -gpu mode=double arch=35 -kokkos cuda arch=35 lib-all file mpi
-
-The examples/accelerate directory also has input scripts that can be
-used with all of the accelerator packages. See its README file for
-details.
-
-Likewise, the bench directory has FERMI and KEPLER and PHI
-sub-directories with Make.py commands and input scripts for using all
-the accelerator packages on various machines. See the README files in
-those dirs.
-
-As mentioned above, the `Benchmark page <http://lammps.sandia.gov/bench.html>`_ of the LAMMPS web site gives
-performance results for the various accelerator packages for several
-of the standard LAMMPS benchmark problems, as a function of problem
-size and number of compute nodes, on different hardware platforms.
-
-Here is a brief summary of what the various packages provide. Details
-are in the individual accelerator sections.
-
-* Styles with a "gpu" suffix are part of the GPU package, and can be run
- on NVIDIA GPUs. The speed-up on a GPU depends on a variety of
- factors, discussed in the accelerator sections.
-* Styles with an "intel" suffix are part of the USER-INTEL
- package. These styles support vectorized single and mixed precision
- calculations, in addition to full double precision. In extreme cases,
- this can provide speedups over 3.5x on CPUs. The package also
- supports acceleration in "offload" mode to Intel(R) Xeon Phi(TM)
- coprocessors. This can result in additional speedup over 2x depending
- on the hardware configuration.
-* Styles with a "kk" suffix are part of the KOKKOS package, and can be
- run using OpenMP on multicore CPUs, on an NVIDIA GPU, or on an Intel
- Xeon Phi in "native" mode. The speed-up depends on a variety of
- factors, as discussed on the KOKKOS accelerator page.
-* Styles with an "omp" suffix are part of the USER-OMP package and allow
- a pair-style to be run in multi-threaded mode using OpenMP. This can
- be useful on nodes with high-core counts when using less MPI processes
- than cores is advantageous, e.g. when running with PPPM so that FFTs
- are run on fewer MPI processors or when the many MPI tasks would
- overload the available bandwidth for communication.
-* Styles with an "opt" suffix are part of the OPT package and typically
- speed-up the pairwise calculations of your simulation by 5-25% on a
- CPU.
-The individual accelerator package doc pages explain:
-
-* what hardware and software the accelerated package requires
-* how to build LAMMPS with the accelerated package
-* how to run with the accelerated package either via command-line switches or modifying the input script
-* speed-ups to expect
-* guidelines for best performance
-* restrictions
-
-
-----------
-
-
-.. _acc_4:
-
-Comparison of various accelerator packages
-------------------------------------------------------
-
-.. note::
-
- this section still needs to be re-worked with additional KOKKOS
- and USER-INTEL information.
-
-The next section compares and contrasts the various accelerator
-options, since there are multiple ways to perform OpenMP threading,
-run on GPUs, and run on Intel Xeon Phi coprocessors.
-
-All 3 of these packages accelerate a LAMMPS calculation using NVIDIA
-hardware, but they do it in different ways.
-
-As a consequence, for a particular simulation on specific hardware,
-one package may be faster than the other. We give guidelines below,
-but the best way to determine which package is faster for your input
-script is to try both of them on your machine. See the benchmarking
-section below for examples where this has been done.
-
-**Guidelines for using each package optimally:**
-
-* The GPU package allows you to assign multiple CPUs (cores) to a single
- GPU (a common configuration for "hybrid" nodes that contain multicore
- CPU(s) and GPU(s)) and works effectively in this mode.
-* The GPU package moves per-atom data (coordinates, forces)
- back-and-forth between the CPU and GPU every timestep. The
- KOKKOS/CUDA package only does this on timesteps when a CPU calculation
- is required (e.g. to invoke a fix or compute that is non-GPU-ized).
- Hence, if you can formulate your input script to only use GPU-ized
- fixes and computes, and avoid doing I/O too often (thermo output, dump
- file snapshots, restart files), then the data transfer cost of the
- KOKKOS/CUDA package can be very low, causing it to run faster than the
- GPU package.
-* The GPU package is often faster than the KOKKOS/CUDA package, if the
- number of atoms per GPU is smaller. The crossover point, in terms of
- atoms/GPU at which the KOKKOS/CUDA package becomes faster depends
- strongly on the pair style. For example, for a simple Lennard Jones
- system the crossover (in single precision) is often about 50K-100K
- atoms per GPU. When performing double precision calculations the
- crossover point can be significantly smaller.
-* Both packages compute bonded interactions (bonds, angles, etc) on the
- CPU. If the GPU package is running with several MPI processes
- assigned to one GPU, the cost of computing the bonded interactions is
- spread across more CPUs and hence the GPU package can run faster.
-* When using the GPU package with multiple CPUs assigned to one GPU, its
- performance depends to some extent on high bandwidth between the CPUs
- and the GPU. Hence its performance is affected if full 16 PCIe lanes
- are not available for each GPU. In HPC environments this can be the
- case if S2050/70 servers are used, where two devices generally share
- one PCIe 2.0 16x slot. Also many multi-GPU mainboards do not provide
- full 16 lanes to each of the PCIe 2.0 16x slots.
-**Differences between the two packages:**
-
-* The GPU package accelerates only pair force, neighbor list, and PPPM
- calculations.
-* The GPU package requires neighbor lists to be built on the CPU when using
- exclusion lists or a triclinic simulation box.
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_commands.txt b/doc/html/_sources/Section_commands.txt
deleted file mode 100644
index a91b18f20..000000000
--- a/doc/html/_sources/Section_commands.txt
+++ /dev/null
@@ -1,824 +0,0 @@
-Commands
-========
-
-This section describes how a LAMMPS input script is formatted and the
-input script commands used to define a LAMMPS simulation.
-
-| 3.1 :ref:`LAMMPS input script <cmd_1>`
-| 3.2 :ref:`Parsing rules <cmd_2>`
-| 3.3 :ref:`Input script structure <cmd_3>`
-| 3.4 :ref:`Commands listed by category <cmd_4>`
-| 3.5 :ref:`Commands listed alphabetically <cmd_5>`
-|
-
-
-
-
-
-.. _cmd_1:
-
-LAMMPS input script
--------------------
-
-LAMMPS executes by reading commands from a input script (text file),
-one line at a time. When the input script ends, LAMMPS exits. Each
-command causes LAMMPS to take some action. It may set an internal
-variable, read in a file, or run a simulation. Most commands have
-default settings, which means you only need to use the command if you
-wish to change the default.
-
-In many cases, the ordering of commands in an input script is not
-important. However the following rules apply:
-
-(1) LAMMPS does not read your entire input script and then perform a
-simulation with all the settings. Rather, the input script is read
-one line at a time and each command takes effect when it is read.
-Thus this sequence of commands:
-
-.. parsed-literal::
-
- timestep 0.5
- run 100
- run 100
-
-does something different than this sequence:
-
-.. parsed-literal::
-
- run 100
- timestep 0.5
- run 100
-
-In the first case, the specified timestep (0.5 fmsec) is used for two
-simulations of 100 timesteps each. In the 2nd case, the default
-timestep (1.0 fmsec) is used for the 1st 100 step simulation and a 0.5
-fmsec timestep is used for the 2nd one.
-
-(2) Some commands are only valid when they follow other commands. For
-example you cannot set the temperature of a group of atoms until atoms
-have been defined and a group command is used to define which atoms
-belong to the group.
-
-(3) Sometimes command B will use values that can be set by command A.
-This means command A must precede command B in the input script if it
-is to have the desired effect. For example, the
-:doc:`read_data <read_data>` command initializes the system by setting
-up the simulation box and assigning atoms to processors. If default
-values are not desired, the :doc:`processors <processors>` and
-:doc:`boundary <boundary>` commands need to be used before read_data to
-tell LAMMPS how to map processors to the simulation box.
-
-Many input script errors are detected by LAMMPS and an ERROR or
-WARNING message is printed. :doc:`This section <Section_errors>` gives
-more information on what errors mean. The documentation for each
-command lists restrictions on how the command can be used.
-
-
-----------
-
-
-.. _cmd_2:
-
-Parsing rules
--------------
-
-Each non-blank line in the input script is treated as a command.
-LAMMPS commands are case sensitive. Command names are lower-case, as
-are specified command arguments. Upper case letters may be used in
-file names or user-chosen ID strings.
-
-Here is how each line in the input script is parsed by LAMMPS:
-
-(1) If the last printable character on the line is a "&" character,
-the command is assumed to continue on the next line. The next line is
-concatenated to the previous line by removing the "&" character and
-line break. This allows long commands to be continued across two or
-more lines. See the discussion of triple quotes in (6) for how to
-continue a command across multiple line without using "&" characters.
-
-(2) All characters from the first "#" character onward are treated as
-comment and discarded. See an exception in (6). Note that a
-comment after a trailing "&" character will prevent the command from
-continuing on the next line. Also note that for multi-line commands a
-single leading "#" will comment out the entire command.
-
-(3) The line is searched repeatedly for $ characters, which indicate
-variables that are replaced with a text string. See an exception in
-(6).
-
-If the $ is followed by curly brackets, then the variable name is the
-text inside the curly brackets. If no curly brackets follow the $,
-then the variable name is the single character immediately following
-the $. Thus ${myTemp} and $x refer to variable names "myTemp" and
-"x".
-
-How the variable is converted to a text string depends on what style
-of variable it is; see the `variable <variable>`_ doc page for details.
-It can be a variable that stores multiple text strings, and return one
-of them. The returned text string can be multiple "words" (space
-separated) which will then be interpreted as multiple arguments in the
-input command. The variable can also store a numeric formula which
-will be evaluated and its numeric result returned as a string.
-
-As a special case, if the $ is followed by parenthesis, then the text
-inside the parenthesis is treated as an "immediate" variable and
-evaluated as an :doc:`equal-style variable <variable>`. This is a way
-to use numeric formulas in an input script without having to assign
-them to variable names. For example, these 3 input script lines:
-
-.. parsed-literal::
-
- variable X equal (xlo+xhi)/2+sqrt(v_area)
- region 1 block $X 2 INF INF EDGE EDGE
- variable X delete
-
-can be replaced by
-
-.. parsed-literal::
-
- region 1 block $((xlo+xhi)/2+sqrt(v_area)) 2 INF INF EDGE EDGE
-
-so that you do not have to define (or discard) a temporary variable X.
-
-Note that neither the curly-bracket or immediate form of variables can
-contain nested $ characters for other variables to substitute for.
-Thus you cannot do this:
-
-.. parsed-literal::
-
- variable a equal 2
- variable b2 equal 4
- print "B2 = ${b$a}"
-
-Nor can you specify this $($x-1.0) for an immediate variable, but
-you could use $(v_x-1.0), since the latter is valid syntax for an
-:doc:`equal-style variable <variable>`.
-
-See the :doc:`variable <variable>` command for more details of how
-strings are assigned to variables and evaluated, and how they can be
-used in input script commands.
-
-(4) The line is broken into "words" separated by whitespace (tabs,
-spaces). Note that words can thus contain letters, digits,
-underscores, or punctuation characters.
-
-(5) The first word is the command name. All successive words in the
-line are arguments.
-
-(6) If you want text with spaces to be treated as a single argument,
-it can be enclosed in either single or double or triple quotes. A
-long single argument enclosed in single or double quotes can span
-multiple lines if the "&" character is used, as described above. When
-the lines are concatenated together (and the "&" characters and line
-breaks removed), the text will become a single line. If you want
-multiple lines of an argument to retain their line breaks, the text
-can be enclosed in triple quotes, in which case "&" characters are not
-needed. For example:
-
-.. parsed-literal::
-
- print "Volume = $v"
- print 'Volume = $v'
- if "${steps} > 1000" then quit
- variable a string "red green blue &
- purple orange cyan"
- print """
- System volume = $v
- System temperature = $t
- """
-
-In each case, the single, double, or triple quotes are removed when
-the single argument they enclose is stored internally.
-
-See the :doc:`dump modify format <dump_modify>`, :doc:`print <print>`,
-:doc:`if <if>`, and :doc:`python <python>` commands for examples.
-
-A "#" or "$" character that is between quotes will not be treated as a
-comment indicator in (2) or substituted for as a variable in (3).
-
-.. note::
-
- If the argument is itself a command that requires a quoted
- argument (e.g. using a :doc:`print <print>` command as part of an
- :doc:`if <if>` or :doc:`run every <run>` command), then single, double, or
- triple quotes can be nested in the usual manner. See the doc pages
- for those commands for examples. Only one of level of nesting is
- allowed, but that should be sufficient for most use cases.
-
-
-----------
-
-
-.. _cmd_3:
-
-Input script structure
-----------------------------------
-
-This section describes the structure of a typical LAMMPS input script.
-The "examples" directory in the LAMMPS distribution contains many
-sample input scripts; the corresponding problems are discussed in
-:doc:`Section_example <Section_example>`, and animated on the `LAMMPS WWW Site <lws_>`_.
-
-A LAMMPS input script typically has 4 parts:
-
-1. Initialization
-2. Atom definition
-3. Settings
-4. Run a simulation
-
-The last 2 parts can be repeated as many times as desired. I.e. run a
-simulation, change some settings, run some more, etc. Each of the 4
-parts is now described in more detail. Remember that almost all the
-commands need only be used if a non-default value is desired.
-
-(1) Initialization
-
-Set parameters that need to be defined before atoms are created or
-read-in from a file.
-
-The relevant commands are :doc:`units <units>`,
-:doc:`dimension <dimension>`, :doc:`newton <newton>`,
-:doc:`processors <processors>`, :doc:`boundary <boundary>`,
-:doc:`atom_style <atom_style>`, :doc:`atom_modify <atom_modify>`.
-
-If force-field parameters appear in the files that will be read, these
-commands tell LAMMPS what kinds of force fields are being used:
-:doc:`pair_style <pair_style>`, :doc:`bond_style <bond_style>`,
-:doc:`angle_style <angle_style>`, :doc:`dihedral_style <dihedral_style>`,
-:doc:`improper_style <improper_style>`.
-
-(2) Atom definition
-
-There are 3 ways to define atoms in LAMMPS. Read them in from a data
-or restart file via the :doc:`read_data <read_data>` or
-:doc:`read_restart <read_restart>` commands. These files can contain
-molecular topology information. Or create atoms on a lattice (with no
-molecular topology), using these commands: :doc:`lattice <lattice>`,
-:doc:`region <region>`, :doc:`create_box <create_box>`,
-:doc:`create_atoms <create_atoms>`. The entire set of atoms can be
-duplicated to make a larger simulation using the
-:doc:`replicate <replicate>` command.
-
-(3) Settings
-
-Once atoms and molecular topology are defined, a variety of settings
-can be specified: force field coefficients, simulation parameters,
-output options, etc.
-
-Force field coefficients are set by these commands (they can also be
-set in the read-in files): :doc:`pair_coeff <pair_coeff>`,
-:doc:`bond_coeff <bond_coeff>`, :doc:`angle_coeff <angle_coeff>`,
-:doc:`dihedral_coeff <dihedral_coeff>`,
-:doc:`improper_coeff <improper_coeff>`,
-:doc:`kspace_style <kspace_style>`, :doc:`dielectric <dielectric>`,
-:doc:`special_bonds <special_bonds>`.
-
-Various simulation parameters are set by these commands:
-:doc:`neighbor <neighbor>`, :doc:`neigh_modify <neigh_modify>`,
-:doc:`group <group>`, :doc:`timestep <timestep>`,
-:doc:`reset_timestep <reset_timestep>`, :doc:`run_style <run_style>`,
-:doc:`min_style <min_style>`, :doc:`min_modify <min_modify>`.
-
-Fixes impose a variety of boundary conditions, time integration, and
-diagnostic options. The :doc:`fix <fix>` command comes in many flavors.
-
-Various computations can be specified for execution during a
-simulation using the :doc:`compute <compute>`,
-:doc:`compute_modify <compute_modify>`, and :doc:`variable <variable>`
-commands.
-
-Output options are set by the :doc:`thermo <thermo>`, :doc:`dump <dump>`,
-and :doc:`restart <restart>` commands.
-
-(4) Run a simulation
-
-A molecular dynamics simulation is run using the :doc:`run <run>`
-command. Energy minimization (molecular statics) is performed using
-the :doc:`minimize <minimize>` command. A parallel tempering
-(replica-exchange) simulation can be run using the
-:doc:`temper <temper>` command.
-
-
-----------
-
-
-.. _cmd_4:
-
-Commands listed by category
----------------------------
-
-This section lists all LAMMPS commands, grouped by category. The
-:ref:`next section <cmd_5>` lists the same commands alphabetically. Note
-that some style options for some commands are part of specific LAMMPS
-packages, which means they cannot be used unless the package was
-included when LAMMPS was built. Not all packages are included in a
-default LAMMPS build. These dependencies are listed as Restrictions
-in the command's documentation.
-
-Initialization:
-
-:doc:`atom_modify <atom_modify>`, :doc:`atom_style <atom_style>`,
-:doc:`boundary <boundary>`, :doc:`dimension <dimension>`,
-:doc:`newton <newton>`, :doc:`processors <processors>`, :doc:`units <units>`
-
-Atom definition:
-
-:doc:`create_atoms <create_atoms>`, :doc:`create_box <create_box>`,
-:doc:`lattice <lattice>`, :doc:`read_data <read_data>`,
-:doc:`read_dump <read_dump>`, :doc:`read_restart <read_restart>`,
-:doc:`region <region>`, :doc:`replicate <replicate>`
-
-Force fields:
-
-:doc:`angle_coeff <angle_coeff>`, :doc:`angle_style <angle_style>`,
-:doc:`bond_coeff <bond_coeff>`, :doc:`bond_style <bond_style>`,
-:doc:`dielectric <dielectric>`, :doc:`dihedral_coeff <dihedral_coeff>`,
-:doc:`dihedral_style <dihedral_style>`,
-:doc:`improper_coeff <improper_coeff>`,
-:doc:`improper_style <improper_style>`,
-:doc:`kspace_modify <kspace_modify>`, :doc:`kspace_style <kspace_style>`,
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_modify <pair_modify>`,
-:doc:`pair_style <pair_style>`, :doc:`pair_write <pair_write>`,
-:doc:`special_bonds <special_bonds>`
-
-Settings:
-
-:doc:`comm_style <comm_style>`, :doc:`group <group>`, :doc:`mass <mass>`,
-:doc:`min_modify <min_modify>`, :doc:`min_style <min_style>`,
-:doc:`neigh_modify <neigh_modify>`, :doc:`neighbor <neighbor>`,
-:doc:`reset_timestep <reset_timestep>`, :doc:`run_style <run_style>`,
-:doc:`set <set>`, :doc:`timestep <timestep>`, :doc:`velocity <velocity>`
-
-Fixes:
-
-:doc:`fix <fix>`, :doc:`fix_modify <fix_modify>`, :doc:`unfix <unfix>`
-
-Computes:
-
-:doc:`compute <compute>`, :doc:`compute_modify <compute_modify>`,
-:doc:`uncompute <uncompute>`
-
-Output:
-
-:doc:`dump <dump>`, :doc:`dump image <dump_image>`,
-:doc:`dump_modify <dump_modify>`, :doc:`dump movie <dump_image>`,
-:doc:`restart <restart>`, :doc:`thermo <thermo>`,
-:doc:`thermo_modify <thermo_modify>`, :doc:`thermo_style <thermo_style>`,
-:doc:`undump <undump>`, :doc:`write_data <write_data>`,
-:doc:`write_dump <write_dump>`, :doc:`write_restart <write_restart>`
-
-Actions:
-
-:doc:`delete_atoms <delete_atoms>`, :doc:`delete_bonds <delete_bonds>`,
-:doc:`displace_atoms <displace_atoms>`, :doc:`change_box <change_box>`,
-:doc:`minimize <minimize>`, :doc:`neb <neb>` :doc:`prd <prd>`,
-:doc:`rerun <rerun>`, :doc:`run <run>`, :doc:`temper <temper>`
-
-Miscellaneous:
-
-:doc:`clear <clear>`, :doc:`echo <echo>`, :doc:`if <if>`,
-:doc:`include <include>`, :doc:`jump <jump>`, :doc:`label <label>`,
-:doc:`log <log>`, :doc:`next <next>`, :doc:`print <print>`,
-:doc:`shell <shell>`, :doc:`variable <variable>`
-
-
-----------
-
-
-.. _cmd_5:
-
-.. _comm:
-
-Individual commands
-------------------------------------------
-
-This section lists all LAMMPS commands alphabetically, with a separate
-listing below of styles within certain commands. The :ref:`previous section <cmd_4>` lists the same commands, grouped by category. Note
-that some style options for some commands are part of specific LAMMPS
-packages, which means they cannot be used unless the package was
-included when LAMMPS was built. Not all packages are included in a
-default LAMMPS build. These dependencies are listed as Restrictions
-in the command's documentation.
-
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`angle_coeff <angle_coeff>` | :doc:`angle_style <angle_style>` | :doc:`atom_modify <atom_modify>` | :doc:`atom_style <atom_style>` | :doc:`balance <balance>` | :doc:`bond_coeff <bond_coeff>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`bond_style <bond_style>` | :doc:`bond_write <bond_write>` | :doc:`boundary <boundary>` | :doc:`box <box>` | :doc:`change_box <change_box>` | :doc:`clear <clear>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`comm_modify <comm_modify>` | :doc:`comm_style <comm_style>` | :doc:`compute <compute>` | :doc:`compute_modify <compute_modify>` | :doc:`create_atoms <create_atoms>` | :doc:`create_bonds <create_bonds>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`create_box <create_box>` | :doc:`delete_atoms <delete_atoms>` | :doc:`delete_bonds <delete_bonds>` | :doc:`dielectric <dielectric>` | :doc:`dihedral_coeff <dihedral_coeff>` | :doc:`dihedral_style <dihedral_style>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`dimension <dimension>` | :doc:`displace_atoms <displace_atoms>` | :doc:`dump <dump>` | :doc:`dump image <dump_image>` | :doc:`dump_modify <dump_modify>` | :doc:`dump movie <dump_image>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`echo <echo>` | :doc:`fix <fix>` | :doc:`fix_modify <fix_modify>` | :doc:`group <group>` | :doc:`if <if>` | :doc:`info <info>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`improper_coeff <improper_coeff>` | :doc:`improper_style <improper_style>` | :doc:`include <include>` | :doc:`jump <jump>` | :doc:`kspace_modify <kspace_modify>` | :doc:`kspace_style <kspace_style>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`label <label>` | :doc:`lattice <lattice>` | :doc:`log <log>` | :doc:`mass <mass>` | :doc:`minimize <minimize>` | :doc:`min_modify <min_modify>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`min_style <min_style>` | :doc:`molecule <molecule>` | :doc:`neb <neb>` | :doc:`neigh_modify <neigh_modify>` | :doc:`neighbor <neighbor>` | :doc:`newton <newton>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`next <next>` | :doc:`package <package>` | :doc:`pair_coeff <pair_coeff>` | :doc:`pair_modify <pair_modify>` | :doc:`pair_style <pair_style>` | :doc:`pair_write <pair_write>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`partition <partition>` | :doc:`prd <prd>` | :doc:`print <print>` | :doc:`processors <processors>` | :doc:`python <python>` | :doc:`quit <quit>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`read_data <read_data>` | :doc:`read_dump <read_dump>` | :doc:`read_restart <read_restart>` | :doc:`region <region>` | :doc:`replicate <replicate>` | :doc:`rerun <rerun>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`reset_timestep <reset_timestep>` | :doc:`restart <restart>` | :doc:`run <run>` | :doc:`run_style <run_style>` | :doc:`set <set>` | :doc:`shell <shell>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`special_bonds <special_bonds>` | :doc:`suffix <suffix>` | :doc:`tad <tad>` | :doc:`temper <temper>` | :doc:`thermo <thermo>` | :doc:`thermo_modify <thermo_modify>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`thermo_style <thermo_style>` | :doc:`timer <timer>` | :doc:`timestep <timestep>` | :doc:`uncompute <uncompute>` | :doc:`undump <undump>` | :doc:`unfix <unfix>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`units <units>` | :doc:`variable <variable>` | :doc:`velocity <velocity>` | :doc:`write_coeff <write_coeff>` | :doc:`write_data <write_data>` | :doc:`write_dump <write_dump>` |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-| :doc:`write_restart <write_restart>` | | | | | |
-+----------------------------------------+----------------------------------------+------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
-
-These are additional commands in USER packages, which can be used if
-:ref:`LAMMPS is built with the appropriate package <start_3>`.
-
-+------------------------------------------+------------------------------+------------------------------+
-| :doc:`dump custom/vtk <dump_custom_vtk>` | :doc:`group2ndx <group2ndx>` | :doc:`ndx2group <group2ndx>` |
-+------------------------------------------+------------------------------+------------------------------+
-
-
-----------
-
-
-Fix styles
-----------
-
-See the :doc:`fix <fix>` command for one-line descriptions of each style
-or click on the style itself for a full description. Some of the
-styles have accelerated versions, which can be used if LAMMPS is built
-with the :doc:`appropriate accelerated package <Section_accelerate>`.
-This is indicated by additional letters in parenthesis: g = GPU, i =
-USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.
-
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`adapt <fix_adapt>` | :doc:`addforce <fix_addforce>` | :doc:`append/atoms <fix_append_atoms>` | :doc:`atom/swap <fix_atom_swap>` | :doc:`aveforce <fix_aveforce>` | :doc:`ave/atom <fix_ave_atom>` | :doc:`ave/chunk <fix_ave_chunk>` | :doc:`ave/correlate <fix_ave_correlate>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`ave/histo <fix_ave_histo>` | :doc:`ave/histo/weight <fix_ave_histo>` | :doc:`ave/time <fix_ave_time>` | :doc:`balance <fix_balance>` | :doc:`bond/break <fix_bond_break>` | :doc:`bond/create <fix_bond_create>` | :doc:`bond/swap <fix_bond_swap>` | :doc:`box/relax <fix_box_relax>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`controller <fix_controller>` | :doc:`deform (k) <fix_deform>` | :doc:`deposit <fix_deposit>` | :doc:`drag <fix_drag>` | :doc:`dt/reset <fix_dt_reset>` | :doc:`efield <fix_efield>` | :doc:`ehex <fix_ehex>` | :doc:`enforce2d <fix_enforce2d>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`evaporate <fix_evaporate>` | :doc:`external <fix_external>` | :doc:`freeze <fix_freeze>` | :doc:`gcmc <fix_gcmc>` | :doc:`gld <fix_gld>` | :doc:`gravity (o) <fix_gravity>` | :doc:`heat <fix_heat>` | :doc:`indent <fix_indent>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`langevin (k) <fix_langevin>` | :doc:`lineforce <fix_lineforce>` | :doc:`momentum <fix_momentum>` | :doc:`move <fix_move>` | :doc:`msst <fix_msst>` | :doc:`neb <fix_neb>` | :doc:`nph (ko) <fix_nh>` | :doc:`nphug (o) <fix_nphug>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`nph/asphere (o) <fix_nph_asphere>` | :doc:`nph/body <fix_nph_body>` | :doc:`nph/sphere (o) <fix_nph_sphere>` | :doc:`npt (kio) <fix_nh>` | :doc:`npt/asphere (o) <fix_npt_asphere>` | :doc:`npt/body <fix_npt_body>` | :doc:`npt/sphere (o) <fix_npt_sphere>` | :doc:`nve (kio) <fix_nve>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`nve/asphere (i) <fix_nve_asphere>` | :doc:`nve/asphere/noforce <fix_nve_asphere_noforce>` | :doc:`nve/body <fix_nve_body>` | :doc:`nve/limit <fix_nve_limit>` | :doc:`nve/line <fix_nve_line>` | :doc:`nve/noforce <fix_nve_noforce>` | :doc:`nve/sphere (o) <fix_nve_sphere>` | :doc:`nve/tri <fix_nve_tri>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`nvt (iko) <fix_nh>` | :doc:`nvt/asphere (o) <fix_nvt_asphere>` | :doc:`nvt/body <fix_nvt_body>` | :doc:`nvt/sllod (io) <fix_nvt_sllod>` | :doc:`nvt/sphere (o) <fix_nvt_sphere>` | :doc:`oneway <fix_oneway>` | :doc:`orient/bcc <fix_orient>` | :doc:`orient/fcc <fix_orient>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`planeforce <fix_planeforce>` | :doc:`poems <fix_poems>` | :doc:`pour <fix_pour>` | :doc:`press/berendsen <fix_press_berendsen>` | :doc:`print <fix_print>` | :doc:`property/atom <fix_property_atom>` | :doc:`qeq/comb (o) <fix_qeq_comb>` | :doc:`qeq/dynamic <fix_qeq>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`qeq/fire <fix_qeq>` | :doc:`qeq/point <fix_qeq>` | :doc:`qeq/shielded <fix_qeq>` | :doc:`qeq/slater <fix_qeq>` | :doc:`rattle <fix_shake>` | :doc:`reax/bonds <fix_reax_bonds>` | :doc:`recenter <fix_recenter>` | :doc:`restrain <fix_restrain>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`rigid (o) <fix_rigid>` | :doc:`rigid/nph (o) <fix_rigid>` | :doc:`rigid/npt (o) <fix_rigid>` | :doc:`rigid/nve (o) <fix_rigid>` | :doc:`rigid/nvt (o) <fix_rigid>` | :doc:`rigid/small (o) <fix_rigid>` | :doc:`rigid/small/nph <fix_rigid>` | :doc:`rigid/small/npt <fix_rigid>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`rigid/small/nve <fix_rigid>` | :doc:`rigid/small/nvt <fix_rigid>` | :doc:`setforce (k) <fix_setforce>` | :doc:`shake <fix_shake>` | :doc:`spring <fix_spring>` | :doc:`spring/chunk <fix_spring_chunk>` | :doc:`spring/rg <fix_spring_rg>` | :doc:`spring/self <fix_spring_self>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`srd <fix_srd>` | :doc:`store/force <fix_store_force>` | :doc:`store/state <fix_store_state>` | :doc:`temp/berendsen <fix_temp_berendsen>` | :doc:`temp/csld <fix_temp_csvr>` | :doc:`temp/csvr <fix_temp_csvr>` | :doc:`temp/rescale <fix_temp_rescale>` | :doc:`tfmc <fix_tfmc>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`thermal/conductivity <fix_thermal_conductivity>` | :doc:`tmd <fix_tmd>` | :doc:`ttm <fix_ttm>` | :doc:`tune/kspace <fix_tune_kspace>` | :doc:`vector <fix_vector>` | :doc:`viscosity <fix_viscosity>` | :doc:`viscous <fix_viscous>` | :doc:`wall/colloid <fix_wall>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`wall/gran <fix_wall_gran>` | :doc:`wall/harmonic <fix_wall>` | :doc:`wall/lj1043 <fix_wall>` | :doc:`wall/lj126 <fix_wall>` | :doc:`wall/lj93 <fix_wall>` | :doc:`wall/piston <fix_wall_piston>` | :doc:`wall/reflect (k) <fix_wall_reflect>` | :doc:`wall/region <fix_wall_region>` |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-| :doc:`wall/srd <fix_wall_srd>` | | | | | | | |
-+--------------------------------------------------------+------------------------------------------------------+----------------------------------------+----------------------------------------------+------------------------------------------+------------------------------------------+--------------------------------------------+------------------------------------------+
-
-These are additional fix styles in USER packages, which can be used if
-:ref:`LAMMPS is built with the appropriate package <start_3>`.
-
-+----------------------------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------+
-| :doc:`adapt/fep <fix_adapt_fep>` | :doc:`addtorque <fix_addtorque>` | :doc:`atc <fix_atc>` | :doc:`ave/correlate/long <fix_ave_correlate_long>` | :doc:`colvars <fix_colvars>` | :doc:`drude <fix_drude>` |
-+----------------------------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------+
-| :doc:`drude/transform/direct <fix_drude_transform>` | :doc:`drude/transform/reverse <fix_drude_transform>` | :doc:`eos/cv <fix_eos_cv>` | :doc:`eos/table <fix_eos_table>` | :doc:`eos/table/rx <fix_eos_table_rx>` | :doc:`gle <fix_gle>` |
-+----------------------------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------+
-| :doc:`imd <fix_imd>` | :doc:`ipi <fix_ipi>` | :doc:`langevin/drude <fix_langevin_drude>` | :doc:`langevin/eff <fix_langevin_eff>` | :doc:`lb/fluid <fix_lb_fluid>` | :doc:`lb/momentum <fix_lb_momentum>` |
-+----------------------------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------+
-| :doc:`lb/pc <fix_lb_pc>` | :doc:`lb/rigid/pc/sphere <fix_lb_rigid_pc_sphere>` | :doc:`lb/viscous <fix_lb_viscous>` | :doc:`meso <fix_meso>` | :doc:`manifoldforce <fix_manifoldforce>` | :doc:`meso/stationary <fix_meso_stationary>` |
-+----------------------------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------+
-| :doc:`nve/manifold/rattle <fix_nve_manifold_rattle>` | :doc:`nvt/manifold/rattle <fix_nvt_manifold_rattle>` | :doc:`nph/eff <fix_nh_eff>` | :doc:`npt/eff <fix_nh_eff>` | :doc:`nve/eff <fix_nve_eff>` | :doc:`nvt/eff <fix_nh_eff>` |
-+----------------------------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------+
-| :doc:`nvt/sllod/eff <fix_nvt_sllod_eff>` | :doc:`phonon <fix_phonon>` | :doc:`pimd <fix_pimd>` | :doc:`qbmsst <fix_qbmsst>` | :doc:`qeq/reax <fix_qeq_reax>` | :doc:`qmmm <fix_qmmm>` |
-+----------------------------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------+
-| :doc:`qtb <fix_qtb>` | :doc:`reax/c/bonds <fix_reax_bonds>` | :doc:`reax/c/species <fix_reaxc_species>` | :doc:`rx <fix_rx>` | :doc:`saed/vtk <fix_saed_vtk>` | :doc:`shardlow <fix_shardlow>` |
-+----------------------------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------+
-| :doc:`smd <fix_smd>` | :doc:`smd/adjust/dt <fix_smd_adjust_dt>` | :doc:`smd/integrate/tlsph <fix_smd_integrate_tlsph>` | :doc:`smd/integrate/ulsph <fix_smd_integrate_ulsph>` | :doc:`smd/move/triangulated/surface <fix_smd_move_triangulated_surface>` | :doc:`smd/setvel <fix_smd_setvel>` |
-+----------------------------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------+
-| :doc:`smd/tlsph/reference/configuration <fix_smd_tlsph_reference_configuration>` | :doc:`smd/wall/surface <fix_smd_wall_surface>` | :doc:`temp/rescale/eff <fix_temp_rescale_eff>` | :doc:`ti/rs <fix_ti_rs>` | :doc:`ti/spring <fix_ti_spring>` | :doc:`ttm/mod <fix_ttm>` |
-+----------------------------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+------------------------------------------------------+--------------------------------------------------------------------------+----------------------------------------------+
-
-
-----------
-
-
-Compute styles
---------------
-
-See the :doc:`compute <compute>` command for one-line descriptions of
-each style or click on the style itself for a full description. Some
-of the styles have accelerated versions, which can be used if LAMMPS
-is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
-letters in parenthesis: g = GPU, i = USER-INTEL, k =
-KOKKOS, o = USER-OMP, t = OPT.
-
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`angle <compute_angle>` | :doc:`angle/local <compute_angle_local>` | :doc:`angmom/chunk <compute_angmom_chunk>` | :doc:`body/local <compute_body_local>` | :doc:`bond <compute_bond>` | :doc:`bond/local <compute_bond_local>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`centro/atom <compute_centro_atom>` | :doc:`chunk/atom <compute_chunk_atom>` | :doc:`cluster/atom <compute_cluster_atom>` | :doc:`cna/atom <compute_cna_atom>` | :doc:`com <compute_com>` | :doc:`com/chunk <compute_com_chunk>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`contact/atom <compute_contact_atom>` | :doc:`coord/atom <compute_coord_atom>` | :doc:`damage/atom <compute_damage_atom>` | :doc:`dihedral <compute_dihedral>` | :doc:`dihedral/local <compute_dihedral_local>` | :doc:`dilatation/atom <compute_dilatation_atom>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`dipole/chunk <compute_dipole_chunk>` | :doc:`displace/atom <compute_displace_atom>` | :doc:`erotate/asphere <compute_erotate_asphere>` | :doc:`erotate/rigid <compute_erotate_rigid>` | :doc:`erotate/sphere <compute_erotate_sphere>` | :doc:`erotate/sphere/atom <compute_erotate_sphere_atom>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`event/displace <compute_event_displace>` | :doc:`group/group <compute_group_group>` | :doc:`gyration <compute_gyration>` | :doc:`gyration/chunk <compute_gyration_chunk>` | :doc:`heat/flux <compute_heat_flux>` | :doc:`hexorder/atom <compute_hexorder_atom>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`improper <compute_improper>` | :doc:`improper/local <compute_improper_local>` | :doc:`inertia/chunk <compute_inertia_chunk>` | :doc:`ke <compute_ke>` | :doc:`ke/atom <compute_ke_atom>` | :doc:`ke/rigid <compute_ke_rigid>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`msd <compute_msd>` | :doc:`msd/chunk <compute_msd_chunk>` | :doc:`msd/nongauss <compute_msd_nongauss>` | :doc:`omega/chunk <compute_omega_chunk>` | :doc:`orientorder/atom <compute_orientorder_atom>` | :doc:`pair <compute_pair>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`pair/local <compute_pair_local>` | :doc:`pe <compute_pe>` | :doc:`pe/atom <compute_pe_atom>` | :doc:`plasticity/atom <compute_plasticity_atom>` | :doc:`pressure <compute_pressure>` | :doc:`property/atom <compute_property_atom>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`property/local <compute_property_local>` | :doc:`property/chunk <compute_property_chunk>` | :doc:`rdf <compute_rdf>` | :doc:`reduce <compute_reduce>` | :doc:`reduce/region <compute_reduce>` | :doc:`rigid/local <compute_rigid_local>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`slice <compute_slice>` | :doc:`sna/atom <compute_sna_atom>` | :doc:`snad/atom <compute_sna_atom>` | :doc:`snav/atom <compute_sna_atom>` | :doc:`stress/atom <compute_stress_atom>` | :doc:`temp (k) <compute_temp>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`temp/asphere <compute_temp_asphere>` | :doc:`temp/body <compute_temp_body>` | :doc:`temp/chunk <compute_temp_chunk>` | :doc:`temp/com <compute_temp_com>` | :doc:`temp/deform <compute_temp_deform>` | :doc:`temp/partial <compute_temp_partial>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`temp/profile <compute_temp_profile>` | :doc:`temp/ramp <compute_temp_ramp>` | :doc:`temp/region <compute_temp_region>` | :doc:`temp/sphere <compute_temp_sphere>` | :doc:`ti <compute_ti>` | :doc:`torque/chunk <compute_torque_chunk>` |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-| :doc:`vacf <compute_vacf>` | :doc:`vcm/chunk <compute_vcm_chunk>` | :doc:`voronoi/atom <compute_voronoi_atom>` | | | |
-+------------------------------------------------+------------------------------------------------+--------------------------------------------------+--------------------------------------------------+----------------------------------------------------+----------------------------------------------------------+
-
-These are additional compute styles in USER packages, which can be
-used if :ref:`LAMMPS is built with the appropriate package <start_3>`.
-
-+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+
-| :doc:`ackland/atom <compute_ackland_atom>` | :doc:`basal/atom <compute_basal_atom>` | :doc:`dpd <compute_dpd>` | :doc:`dpd/atom <compute_dpd_atom>` | :doc:`fep <compute_fep>` | :doc:`force/tally <compute_tally>` |
-+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+
-| :doc:`heat/flux/tally <compute_tally>` | :doc:`ke/eff <compute_ke_eff>` | :doc:`ke/atom/eff <compute_ke_atom_eff>` | :doc:`meso/e/atom <compute_meso_e_atom>` | :doc:`meso/rho/atom <compute_meso_rho_atom>` | :doc:`meso/t/atom <compute_meso_t_atom>` |
-+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+
-| :doc:`pe/tally <compute_tally>` | :doc:`pe/mol/tally <compute_tally>` | :doc:`saed <compute_saed>` | :doc:`smd/contact/radius <compute_smd_contact_radius>` | :doc:`smd/damage <compute_smd_damage>` | :doc:`smd/hourglass/error <compute_smd_hourglass_error>` |
-+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+
-| :doc:`smd/internal/energy <compute_smd_internal_energy>` | :doc:`smd/plastic/strain <compute_smd_plastic_strain>` | :doc:`smd/plastic/strain/rate <compute_smd_plastic_strain_rate>` | :doc:`smd/rho <compute_smd_rho>` | :doc:`smd/tlsph/defgrad <compute_smd_tlsph_defgrad>` | :doc:`smd/tlsph/dt <compute_smd_tlsph_dt>` |
-+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+
-| :doc:`smd/tlsph/num/neighs <compute_smd_tlsph_num_neighs>` | :doc:`smd/tlsph/shape <compute_smd_tlsph_shape>` | :doc:`smd/tlsph/strain <compute_smd_tlsph_strain>` | :doc:`smd/tlsph/strain/rate <compute_smd_tlsph_strain_rate>` | :doc:`smd/tlsph/stress <compute_smd_tlsph_stress>` | :doc:`smd/triangle/mesh/vertices <compute_smd_triangle_mesh_vertices>` |
-+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+
-| :doc:`smd/ulsph/num/neighs <compute_smd_ulsph_num_neighs>` | :doc:`smd/ulsph/strain <compute_smd_ulsph_strain>` | :doc:`smd/ulsph/strain/rate <compute_smd_ulsph_strain_rate>` | :doc:`smd/ulsph/stress <compute_smd_ulsph_stress>` | :doc:`smd/vol <compute_smd_vol>` | :doc:`stress/tally <compute_tally>` |
-+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+
-| :doc:`temp/drude <compute_temp_drude>` | :doc:`temp/eff <compute_temp_eff>` | :doc:`temp/deform/eff <compute_temp_deform_eff>` | :doc:`temp/region/eff <compute_temp_region_eff>` | :doc:`temp/rotate <compute_temp_rotate>` | :doc:`xrd <compute_xrd>` |
-+------------------------------------------------------------+--------------------------------------------------------+------------------------------------------------------------------+--------------------------------------------------------------+------------------------------------------------------+------------------------------------------------------------------------+
-
-
-----------
-
-
-Pair_style potentials
----------------------
-
-See the :doc:`pair_style <pair_style>` command for an overview of pair
-potentials. Click on the style itself for a full description. Many
-of the styles have accelerated versions, which can be used if LAMMPS
-is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
-letters in parenthesis: g = GPU, i = USER-INTEL, k =
-KOKKOS, o = USER-OMP, t = OPT.
-
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`none <pair_none>` | :doc:`zero <pair_zero>` | :doc:`hybrid <pair_hybrid>` | :doc:`hybrid/overlay <pair_hybrid>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`adp (o) <pair_adp>` | :doc:`airebo (o) <pair_airebo>` | :doc:`airebo/morse (o) <pair_airebo>` | :doc:`beck (go) <pair_beck>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`body <pair_body>` | :doc:`bop <pair_bop>` | :doc:`born (go) <pair_born>` | :doc:`born/coul/long (go) <pair_born>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`born/coul/long/cs <pair_born>` | :doc:`born/coul/msm (o) <pair_born>` | :doc:`born/coul/wolf (go) <pair_born>` | :doc:`brownian (o) <pair_brownian>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`brownian/poly (o) <pair_brownian>` | :doc:`buck (gkio) <pair_buck>` | :doc:`buck/coul/cut (gkio) <pair_buck>` | :doc:`buck/coul/long (gkio) <pair_buck>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`buck/coul/long/cs <pair_buck>` | :doc:`buck/coul/msm (o) <pair_buck>` | :doc:`buck/long/coul/long (o) <pair_buck_long>` | :doc:`colloid (go) <pair_colloid>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`comb (o) <pair_comb>` | :doc:`comb3 <pair_comb>` | :doc:`coul/cut (gko) <pair_coul>` | :doc:`coul/debye (gko) <pair_coul>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`coul/dsf (gko) <pair_coul>` | :doc:`coul/long (gko) <pair_coul>` | :doc:`coul/long/cs <pair_coul>` | :doc:`coul/msm <pair_coul>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`coul/streitz <pair_coul>` | :doc:`coul/wolf (ko) <pair_coul>` | :doc:`dpd (o) <pair_dpd>` | :doc:`dpd/tstat (o) <pair_dpd>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`dsmc <pair_dsmc>` | :doc:`eam (gkot) <pair_eam>` | :doc:`eam/alloy (gkot) <pair_eam>` | :doc:`eam/fs (gkot) <pair_eam>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`eim (o) <pair_eim>` | :doc:`gauss (go) <pair_gauss>` | :doc:`gayberne (gio) <pair_gayberne>` | :doc:`gran/hertz/history (o) <pair_gran>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`gran/hooke (o) <pair_gran>` | :doc:`gran/hooke/history (o) <pair_gran>` | :doc:`hbond/dreiding/lj (o) <pair_hbond_dreiding>` | :doc:`hbond/dreiding/morse (o) <pair_hbond_dreiding>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`kim <pair_kim>` | :doc:`lcbop <pair_lcbop>` | :doc:`line/lj <pair_line_lj>` | :doc:`lj/charmm/coul/charmm (ko) <pair_charmm>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`lj/charmm/coul/charmm/implicit (ko) <pair_charmm>` | :doc:`lj/charmm/coul/long (giko) <pair_charmm>` | :doc:`lj/charmm/coul/msm <pair_charmm>` | :doc:`lj/class2 (gko) <pair_class2>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`lj/class2/coul/cut (ko) <pair_class2>` | :doc:`lj/class2/coul/long (gko) <pair_class2>` | :doc:`lj/cubic (go) <pair_lj_cubic>` | :doc:`lj/cut (gikot) <pair_lj>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`lj/cut/coul/cut (gko) <pair_lj>` | :doc:`lj/cut/coul/debye (gko) <pair_lj>` | :doc:`lj/cut/coul/dsf (gko) <pair_lj>` | :doc:`lj/cut/coul/long (gikot) <pair_lj>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`lj/cut/coul/long/cs <pair_lj>` | :doc:`lj/cut/coul/msm (go) <pair_lj>` | :doc:`lj/cut/dipole/cut (go) <pair_dipole>` | :doc:`lj/cut/dipole/long <pair_dipole>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`lj/cut/tip4p/cut (o) <pair_lj>` | :doc:`lj/cut/tip4p/long (ot) <pair_lj>` | :doc:`lj/expand (gko) <pair_lj_expand>` | :doc:`lj/gromacs (gko) <pair_gromacs>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`lj/gromacs/coul/gromacs (ko) <pair_gromacs>` | :doc:`lj/long/coul/long (o) <pair_lj_long>` | :doc:`lj/long/dipole/long <pair_dipole>` | :doc:`lj/long/tip4p/long <pair_lj_long>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`lj/smooth (o) <pair_lj_smooth>` | :doc:`lj/smooth/linear (o) <pair_lj_smooth_linear>` | :doc:`lj96/cut (go) <pair_lj96>` | :doc:`lubricate (o) <pair_lubricate>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`lubricate/poly (o) <pair_lubricate>` | :doc:`lubricateU <pair_lubricateU>` | :doc:`lubricateU/poly <pair_lubricateU>` | :doc:`meam (o) <pair_meam>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`mie/cut (o) <pair_mie>` | :doc:`morse (got) <pair_morse>` | :doc:`nb3b/harmonic (o) <pair_nb3b_harmonic>` | :doc:`nm/cut (o) <pair_nm>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`nm/cut/coul/cut (o) <pair_nm>` | :doc:`nm/cut/coul/long (o) <pair_nm>` | :doc:`peri/eps <pair_peri>` | :doc:`peri/lps (o) <pair_peri>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`peri/pmb (o) <pair_peri>` | :doc:`peri/ves <pair_peri>` | :doc:`polymorphic <pair_polymorphic>` | :doc:`reax <pair_reax>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`rebo (o) <pair_airebo>` | :doc:`resquared (go) <pair_resquared>` | :doc:`snap <pair_snap>` | :doc:`soft (go) <pair_soft>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`sw (gkio) <pair_sw>` | :doc:`table (gko) <pair_table>` | :doc:`tersoff (gkio) <pair_tersoff>` | :doc:`tersoff/mod (gko) <pair_tersoff_mod>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`tersoff/zbl (gko) <pair_tersoff_zbl>` | :doc:`tip4p/cut (o) <pair_coul>` | :doc:`tip4p/long (o) <pair_coul>` | :doc:`tri/lj <pair_tri_lj>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-| :doc:`vashishta (o) <pair_vashishta>` | :doc:`yukawa (go) <pair_yukawa>` | :doc:`yukawa/colloid (go) <pair_yukawa_colloid>` | :doc:`zbl (go) <pair_zbl>` |
-+----------------------------------------------------------+-----------------------------------------------------+----------------------------------------------------+-------------------------------------------------------+
-
-These are additional pair styles in USER packages, which can be used
-if :ref:`LAMMPS is built with the appropriate package <start_3>`.
-
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`awpmd/cut <pair_awpmd>` | :doc:`buck/mdf <pair_mdf>` | :doc:`coul/cut/soft (o) <pair_lj_soft>` | :doc:`coul/diel (o) <pair_coul_diel>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`coul/long/soft (o) <pair_lj_soft>` | :doc:`dpd/fdt <pair_dpd_fdt>` | :doc:`dpd/fdt/energy <pair_dpd_fdt>` | :doc:`eam/cd (o) <pair_eam>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`edip (o) <pair_edip>` | :doc:`eff/cut <pair_eff>` | :doc:`exp6/rx <pair_exp6_rx>` | :doc:`gauss/cut <pair_gauss>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`lennard/mdf <pair_mdf>` | :doc:`list <pair_list>` | :doc:`lj/charmm/coul/long/soft (o) <pair_charmm>` | :doc:`lj/cut/coul/cut/soft (o) <pair_lj_soft>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`lj/cut/coul/long/soft (o) <pair_lj_soft>` | :doc:`lj/cut/dipole/sf (go) <pair_dipole>` | :doc:`lj/cut/soft (o) <pair_lj_soft>` | :doc:`lj/cut/thole/long (o) <pair_thole>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`lj/cut/tip4p/long/soft (o) <pair_lj_soft>` | :doc:`lj/mdf <pair_mdf>` | :doc:`lj/sdk (gko) <pair_sdk>` | :doc:`lj/sdk/coul/long (go) <pair_sdk>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`lj/sdk/coul/msm (o) <pair_sdk>` | :doc:`lj/sf (o) <pair_lj_sf>` | :doc:`meam/spline <pair_meam_spline>` | :doc:`meam/sw/spline <pair_meam_sw_spline>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`mgpt <pair_mgpt>` | :doc:`morse/smooth/linear <pair_morse>` | :doc:`morse/soft <pair_morse>` | :doc:`multi/lucy <pair_multi_lucy>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`multi/lucy/rx <pair_multi_lucy_rx>` | :doc:`quip <pair_quip>` | :doc:`reax/c (k) <pair_reax_c>` | :doc:`smd/hertz <pair_smd_hertz>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`smd/tlsph <pair_smd_tlsph>` | :doc:`smd/triangulated/surface <pair_smd_triangulated_surface>` | :doc:`smd/ulsph <pair_smd_ulsph>` | :doc:`smtbq <pair_smtbq>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`sph/heatconduction <pair_sph_heatconduction>` | :doc:`sph/idealgas <pair_sph_idealgas>` | :doc:`sph/lj <pair_sph_lj>` | :doc:`sph/rhosum <pair_sph_rhosum>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`sph/taitwater <pair_sph_taitwater>` | :doc:`sph/taitwater/morris <pair_sph_taitwater_morris>` | :doc:`srp <pair_srp>` | :doc:`table/rx <pair_table_rx>` |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-| :doc:`tersoff/table (o) <pair_tersoff>` | :doc:`thole <pair_thole>` | :doc:`tip4p/long/soft (o) <pair_lj_soft>` | |
-+-----------------------------------------------------+-----------------------------------------------------------------+---------------------------------------------------+------------------------------------------------+
-
-
-----------
-
-
-Bond_style potentials
----------------------
-
-See the :doc:`bond_style <bond_style>` command for an overview of bond
-potentials. Click on the style itself for a full description. Some
-of the styles have accelerated versions, which can be used if LAMMPS
-is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
-letters in parenthesis: g = GPU, i = USER-INTEL, k =
-KOKKOS, o = USER-OMP, t = OPT.
-
-+---------------------------------------+-------------------------------------------+--------------------------------------+---------------------------------+
-| :doc:`none <bond_none>` | :doc:`zero <bond_zero>` | :doc:`hybrid <bond_hybrid>` | :doc:`class2 (o) <bond_class2>` |
-+---------------------------------------+-------------------------------------------+--------------------------------------+---------------------------------+
-| :doc:`fene (iko) <bond_fene>` | :doc:`fene/expand (o) <bond_fene_expand>` | :doc:`harmonic (ko) <bond_harmonic>` | :doc:`morse (o) <bond_morse>` |
-+---------------------------------------+-------------------------------------------+--------------------------------------+---------------------------------+
-| :doc:`nonlinear (o) <bond_nonlinear>` | :doc:`quartic (o) <bond_quartic>` | :doc:`table (o) <bond_table>` | |
-+---------------------------------------+-------------------------------------------+--------------------------------------+---------------------------------+
-
-These are additional bond styles in USER packages, which can be used
-if :ref:`LAMMPS is built with the appropriate package <start_3>`.
-
-+-------------------------------------------------+---------------------------------------------------------+
-| :doc:`harmonic/shift (o) <bond_harmonic_shift>` | :doc:`harmonic/shift/cut (o) <bond_harmonic_shift_cut>` |
-+-------------------------------------------------+---------------------------------------------------------+
-
-
-----------
-
-
-Angle_style potentials
-----------------------
-
-See the :doc:`angle_style <angle_style>` command for an overview of
-angle potentials. Click on the style itself for a full description.
-Some of the styles have accelerated versions, which can be used if
-LAMMPS is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
-letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
-USER-OMP, t = OPT.
-
-+--------------------------------------------------+----------------------------------------+----------------------------------------------+----------------------------------------------------+
-| :doc:`none <angle_none>` | :doc:`zero <angle_zero>` | :doc:`hybrid <angle_hybrid>` | :doc:`charmm (ko) <angle_charmm>` |
-+--------------------------------------------------+----------------------------------------+----------------------------------------------+----------------------------------------------------+
-| :doc:`class2 (o) <angle_class2>` | :doc:`cosine (o) <angle_cosine>` | :doc:`cosine/delta (o) <angle_cosine_delta>` | :doc:`cosine/periodic (o) <angle_cosine_periodic>` |
-+--------------------------------------------------+----------------------------------------+----------------------------------------------+----------------------------------------------------+
-| :doc:`cosine/squared (o) <angle_cosine_squared>` | :doc:`harmonic (iko) <angle_harmonic>` | :doc:`table (o) <angle_table>` | |
-+--------------------------------------------------+----------------------------------------+----------------------------------------------+----------------------------------------------------+
-
-These are additional angle styles in USER packages, which can be used
-if :ref:`LAMMPS is built with the appropriate package <start_3>`.
-
-+--------------------------------------------------+------------------------------------------------------+----------------------------------+------------------------------------+
-| :doc:`cosine/shift (o) <angle_cosine_shift>` | :doc:`cosine/shift/exp (o) <angle_cosine_shift_exp>` | :doc:`dipole (o) <angle_dipole>` | :doc:`fourier (o) <angle_fourier>` |
-+--------------------------------------------------+------------------------------------------------------+----------------------------------+------------------------------------+
-| :doc:`fourier/simple (o) <angle_fourier_simple>` | :doc:`quartic (o) <angle_quartic>` | :doc:`sdk <angle_sdk>` | |
-+--------------------------------------------------+------------------------------------------------------+----------------------------------+------------------------------------+
-
-
-----------
-
-
-Dihedral_style potentials
--------------------------
-
-See the :doc:`dihedral_style <dihedral_style>` command for an overview
-of dihedral potentials. Click on the style itself for a full
-description. Some of the styles have accelerated versions, which can
-be used if LAMMPS is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
-letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
-USER-OMP, t = OPT.
-
-+-------------------------------------+------------------------------------------+-----------------------------------+-----------------------------------------------------+
-| :doc:`none <dihedral_none>` | :doc:`zero <dihedral_zero>` | :doc:`hybrid <dihedral_hybrid>` | :doc:`charmm (ko) <dihedral_charmm>` |
-+-------------------------------------+------------------------------------------+-----------------------------------+-----------------------------------------------------+
-| :doc:`class2 (o) <dihedral_class2>` | :doc:`harmonic (io) <dihedral_harmonic>` | :doc:`helix (o) <dihedral_helix>` | :doc:`multi/harmonic (o) <dihedral_multi_harmonic>` |
-+-------------------------------------+------------------------------------------+-----------------------------------+-----------------------------------------------------+
-| :doc:`opls (iko) <dihedral_opls>` | | | |
-+-------------------------------------+------------------------------------------+-----------------------------------+-----------------------------------------------------+
-
-These are additional dihedral styles in USER packages, which can be
-used if :ref:`LAMMPS is built with the appropriate package <start_3>`.
-
-+---------------------------------------------------------+---------------------------------------+-------------------------------------------+-------------------------------------------+
-| :doc:`cosine/shift/exp (o) <dihedral_cosine_shift_exp>` | :doc:`fourier (o) <dihedral_fourier>` | :doc:`nharmonic (o) <dihedral_nharmonic>` | :doc:`quadratic (o) <dihedral_quadratic>` |
-+---------------------------------------------------------+---------------------------------------+-------------------------------------------+-------------------------------------------+
-| :doc:`spherical (o) <dihedral_spherical>` | :doc:`table (o) <dihedral_table>` | | |
-+---------------------------------------------------------+---------------------------------------+-------------------------------------------+-------------------------------------------+
-
-
-----------
-
-
-Improper_style potentials
--------------------------
-
-See the :doc:`improper_style <improper_style>` command for an overview
-of improper potentials. Click on the style itself for a full
-description. Some of the styles have accelerated versions, which can
-be used if LAMMPS is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
-letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
-USER-OMP, t = OPT.
-
-+----------------------------------+------------------------------------------+-----------------------------------------+-------------------------------------+
-| :doc:`none <improper_none>` | :doc:`zero <improper_zero>` | :doc:`hybrid <improper_hybrid>` | :doc:`class2 (o) <improper_class2>` |
-+----------------------------------+------------------------------------------+-----------------------------------------+-------------------------------------+
-| :doc:`cvff (io) <improper_cvff>` | :doc:`harmonic (ko) <improper_harmonic>` | :doc:`umbrella (o) <improper_umbrella>` | |
-+----------------------------------+------------------------------------------+-----------------------------------------+-------------------------------------+
-
-These are additional improper styles in USER packages, which can be
-used if :ref:`LAMMPS is built with the appropriate package <start_3>`.
-
-+-----------------------------------+-------------------------------------+---------------------------------------+---------------------------------+
-| :doc:`cossq (o) <improper_cossq>` | :doc:`distance <improper_distance>` | :doc:`fourier (o) <improper_fourier>` | :doc:`ring (o) <improper_ring>` |
-+-----------------------------------+-------------------------------------+---------------------------------------+---------------------------------+
-
-
-----------
-
-
-Kspace solvers
---------------
-
-See the :doc:`kspace_style <kspace_style>` command for an overview of
-Kspace solvers. Click on the style itself for a full description.
-Some of the styles have accelerated versions, which can be used if
-LAMMPS is built with the :doc:`appropriate accelerated package <Section_accelerate>`. This is indicated by additional
-letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
-USER-OMP, t = OPT.
-
-+------------------------------------+--------------------------------------+---------------------------------+---------------------------------------+
-| :doc:`ewald (o) <kspace_style>` | :doc:`ewald/disp <kspace_style>` | :doc:`msm (o) <kspace_style>` | :doc:`msm/cg (o) <kspace_style>` |
-+------------------------------------+--------------------------------------+---------------------------------+---------------------------------------+
-| :doc:`pppm (go) <kspace_style>` | :doc:`pppm/cg (o) <kspace_style>` | :doc:`pppm/disp <kspace_style>` | :doc:`pppm/disp/tip4p <kspace_style>` |
-+------------------------------------+--------------------------------------+---------------------------------+---------------------------------------+
-| :doc:`pppm/stagger <kspace_style>` | :doc:`pppm/tip4p (o) <kspace_style>` | | |
-+------------------------------------+--------------------------------------+---------------------------------+---------------------------------------+
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_errors.txt b/doc/html/_sources/Section_errors.txt
deleted file mode 100644
index e4901c70d..000000000
--- a/doc/html/_sources/Section_errors.txt
+++ /dev/null
@@ -1,9259 +0,0 @@
-Errors
-======
-
-This section describes the errors you can encounter when using LAMMPS,
-either conceptually, or as printed out by the program.
-
-| 12.1 :ref:`Common problems <err_1>`
-| 12.2 :ref:`Reporting bugs <err_2>`
-| 12.3 :ref:`Error & warning messages <err_3>`
-|
-
-
-
-
-
-.. _err_1:
-
-Common problems
----------------
-
-If two LAMMPS runs do not produce the same answer on different
-machines or different numbers of processors, this is typically not a
-bug. In theory you should get identical answers on any number of
-processors and on any machine. In practice, numerical round-off can
-cause slight differences and eventual divergence of molecular dynamics
-phase space trajectories within a few 100s or few 1000s of timesteps.
-However, the statistical properties of the two runs (e.g. average
-energy or temperature) should still be the same.
-
-If the :doc:`velocity <velocity>` command is used to set initial atom
-velocities, a particular atom can be assigned a different velocity
-when the problem is run on a different number of processors or on
-different machines. If this happens, the phase space trajectories of
-the two simulations will rapidly diverge. See the discussion of the
-*loop* option in the :doc:`velocity <velocity>` command for details and
-options that avoid this issue.
-
-Similarly, the :doc:`create_atoms <create_atoms>` command generates a
-lattice of atoms. For the same physical system, the ordering and
-numbering of atoms by atom ID may be different depending on the number
-of processors.
-
-Some commands use random number generators which may be setup to
-produce different random number streams on each processor and hence
-will produce different effects when run on different numbers of
-processors. A commonly-used example is the :doc:`fix langevin <fix_langevin>` command for thermostatting.
-
-A LAMMPS simulation typically has two stages, setup and run. Most
-LAMMPS errors are detected at setup time; others like a bond
-stretching too far may not occur until the middle of a run.
-
-LAMMPS tries to flag errors and print informative error messages so
-you can fix the problem. Of course, LAMMPS cannot figure out your
-physics or numerical mistakes, like choosing too big a timestep,
-specifying erroneous force field coefficients, or putting 2 atoms on
-top of each other! If you run into errors that LAMMPS doesn't catch
-that you think it should flag, please send an email to the
-`developers <http://lammps.sandia.gov/authors.html>`_.
-
-If you get an error message about an invalid command in your input
-script, you can determine what command is causing the problem by
-looking in the log.lammps file or using the :doc:`echo command <echo>`
-to see it on the screen. If you get an error like "Invalid ...
-style", with ... being fix, compute, pair, etc, it means that you
-mistyped the style name or that the command is part of an optional
-package which was not compiled into your executable. The list of
-available styles in your executable can be listed by using :ref:`the -h command-line argument <start_7>`. The installation
-and compilation of optional packages is explained in the :ref:`installation instructions <start_3>`.
-
-For a given command, LAMMPS expects certain arguments in a specified
-order. If you mess this up, LAMMPS will often flag the error, but it
-may also simply read a bogus argument and assign a value that is
-valid, but not what you wanted. E.g. trying to read the string "abc"
-as an integer value of 0. Careful reading of the associated doc page
-for the command should allow you to fix these problems. Note that
-some commands allow for variables to be specified in place of numeric
-constants so that the value can be evaluated and change over the
-course of a run. This is typically done with the syntax *v_name* for
-a parameter, where name is the name of the variable. This is only
-allowed if the command documentation says it is.
-
-Generally, LAMMPS will print a message to the screen and logfile and
-exit gracefully when it encounters a fatal error. Sometimes it will
-print a WARNING to the screen and logfile and continue on; you can
-decide if the WARNING is important or not. A WARNING message that is
-generated in the middle of a run is only printed to the screen, not to
-the logfile, to avoid cluttering up thermodynamic output. If LAMMPS
-crashes or hangs without spitting out an error message first then it
-could be a bug (see :ref:`this section <err_2>`) or one of the following
-cases:
-
-LAMMPS runs in the available memory a processor allows to be
-allocated. Most reasonable MD runs are compute limited, not memory
-limited, so this shouldn't be a bottleneck on most platforms. Almost
-all large memory allocations in the code are done via C-style malloc's
-which will generate an error message if you run out of memory.
-Smaller chunks of memory are allocated via C++ "new" statements. If
-you are unlucky you could run out of memory just when one of these
-small requests is made, in which case the code will crash or hang (in
-parallel), since LAMMPS doesn't trap on those errors.
-
-Illegal arithmetic can cause LAMMPS to run slow or crash. This is
-typically due to invalid physics and numerics that your simulation is
-computing. If you see wild thermodynamic values or NaN values in your
-LAMMPS output, something is wrong with your simulation. If you
-suspect this is happening, it is a good idea to print out
-thermodynamic info frequently (e.g. every timestep) via the
-:doc:`thermo <thermo>` so you can monitor what is happening.
-Visualizing the atom movement is also a good idea to insure your model
-is behaving as you expect.
-
-In parallel, one way LAMMPS can hang is due to how different MPI
-implementations handle buffering of messages. If the code hangs
-without an error message, it may be that you need to specify an MPI
-setting or two (usually via an environment variable) to enable
-buffering or boost the sizes of messages that can be buffered.
-
-
-----------
-
-
-.. _err_2:
-
-Reporting bugs
---------------
-
-If you are confident that you have found a bug in LAMMPS, follow these
-steps.
-
-Check the `New features and bug fixes <http://lammps.sandia.gov/bug.html>`_ section of the `LAMMPS WWW site <lws_>`_ to see if the bug has already been reported or fixed or the
-`Unfixed bug <http://lammps.sandia.gov/unbug.html>`_ to see if a fix is
-pending.
-
-Check the `mailing list <http://lammps.sandia.gov/mail.html>`_
-to see if it has been discussed before.
-
-If not, send an email to the mailing list describing the problem with
-any ideas you have as to what is causing it or where in the code the
-problem might be. The developers will ask for more info if needed,
-such as an input script or data files.
-
-The most useful thing you can do to help us fix the bug is to isolate
-the problem. Run it on the smallest number of atoms and fewest number
-of processors and with the simplest input script that reproduces the
-bug and try to identify what command or combination of commands is
-causing the problem.
-
-As a last resort, you can send an email directly to the
-`developers <http://lammps.sandia.gov/authors.html>`_.
-
-
-----------
-
-
-.. _err_3:
-
-Error & warning messages
-------------------------------------
-
-These are two alphabetic lists of the :ref:`ERROR <error>` and
-:ref:`WARNING <warn>` messages LAMMPS prints out and the reason why. If the
-explanation here is not sufficient, the documentation for the
-offending command may help.
-Error and warning messages also list the source file and line number
-where the error was generated. For example, this message
-
-ERROR: Illegal velocity command (velocity.cpp:78)
-
-means that line #78 in the file src/velocity.cpp generated the error.
-Looking in the source code may help you figure out what went wrong.
-
-Note that error messages from :ref:`user-contributed packages <start_3>` are not listed here. If such an
-error occurs and is not self-explanatory, you'll need to look in the
-source code or contact the author of the package.
-
-.. _error:
-
-Errors:
--------------------
-
-
-
-*1-3 bond count is inconsistent*
- An inconsistency was detected when computing the number of 1-3
- neighbors for each atom. This likely means something is wrong with
- the bond topologies you have defined.
-
-*1-4 bond count is inconsistent*
- An inconsistency was detected when computing the number of 1-4
- neighbors for each atom. This likely means something is wrong with
- the bond topologies you have defined.
-
-*Accelerator sharing is not currently supported on system*
- Multiple MPI processes cannot share the accelerator on your
- system. For NVIDIA GPUs, see the nvidia-smi command to change this
- setting.
-
-*All angle coeffs are not set*
- All angle coefficients must be set in the data file or by the
- angle_coeff command before running a simulation.
-
-*All atom IDs = 0 but atom_modify id = yes*
- Self-explanatory.
-
-*All atoms of a swapped type must have same charge.*
- Self-explanatory.
-
-*All atoms of a swapped type must have the same charge.*
- Self-explanatory.
-
-*All bond coeffs are not set*
- All bond coefficients must be set in the data file or by the
- bond_coeff command before running a simulation.
-
-*All dihedral coeffs are not set*
- All dihedral coefficients must be set in the data file or by the
- dihedral_coeff command before running a simulation.
-
-*All improper coeffs are not set*
- All improper coefficients must be set in the data file or by the
- improper_coeff command before running a simulation.
-
-*All masses are not set*
- For atom styles that define masses for each atom type, all masses must
- be set in the data file or by the mass command before running a
- simulation. They must also be set before using the velocity
- command.
-
-*All mol IDs should be set for fix gcmc group atoms*
- The molecule flag is on, yet not all molecule ids in the fix group
- have been set to non-zero positive values by the user. This is an
- error since all atoms in the fix gcmc group are eligible for deletion,
- rotation, and translation and therefore must have valid molecule ids.
-
-*All pair coeffs are not set*
- All pair coefficients must be set in the data file or by the
- pair_coeff command before running a simulation.
-
-*All read_dump x,y,z fields must be specified for scaled, triclinic coords*
- For triclinic boxes and scaled coordinates you must specify all 3 of
- the x,y,z fields, else LAMMPS cannot reconstruct the unscaled
- coordinates.
-
-*All universe/uloop variables must have same # of values*
- Self-explanatory.
-
-*All variables in next command must be same style*
- Self-explanatory.
-
-*Angle atom missing in delete_bonds*
- The delete_bonds command cannot find one or more atoms in a particular
- angle on a particular processor. The pairwise cutoff is too short or
- the atoms are too far apart to make a valid angle.
-
-*Angle atom missing in set command*
- The set command cannot find one or more atoms in a particular angle on
- a particular processor. The pairwise cutoff is too short or the atoms
- are too far apart to make a valid angle.
-
-*Angle atoms %d %d %d missing on proc %d at step %ld*
- One or more of 3 atoms needed to compute a particular angle are
- missing on this processor. Typically this is because the pairwise
- cutoff is set too short or the angle has blown apart and an atom is
- too far away.
-
-*Angle atoms missing on proc %d at step %ld*
- One or more of 3 atoms needed to compute a particular angle are
- missing on this processor. Typically this is because the pairwise
- cutoff is set too short or the angle has blown apart and an atom is
- too far away.
-
-*Angle coeff for hybrid has invalid style*
- Angle style hybrid uses another angle style as one of its
- coefficients. The angle style used in the angle_coeff command or read
- from a restart file is not recognized.
-
-*Angle coeffs are not set*
- No angle coefficients have been assigned in the data file or via the
- angle_coeff command.
-
-*Angle extent > half of periodic box length*
- This error was detected by the neigh_modify check yes setting. It is
- an error because the angle atoms are so far apart it is ambiguous how
- it should be defined.
-
-*Angle potential must be defined for SHAKE*
- When shaking angles, an angle_style potential must be used.
-
-*Angle style hybrid cannot have hybrid as an argument*
- Self-explanatory.
-
-*Angle style hybrid cannot have none as an argument*
- Self-explanatory.
-
-*Angle style hybrid cannot use same angle style twice*
- Self-explanatory.
-
-*Angle table must range from 0 to 180 degrees*
- Self-explanatory.
-
-*Angle table parameters did not set N*
- List of angle table parameters must include N setting.
-
-*Angle_coeff command before angle_style is defined*
- Coefficients cannot be set in the data file or via the angle_coeff
- command until an angle_style has been assigned.
-
-*Angle_coeff command before simulation box is defined*
- The angle_coeff command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*Angle_coeff command when no angles allowed*
- The chosen atom style does not allow for angles to be defined.
-
-*Angle_style command when no angles allowed*
- The chosen atom style does not allow for angles to be defined.
-
-*Angles assigned incorrectly*
- Angles read in from the data file were not assigned correctly to
- atoms. This means there is something invalid about the topology
- definitions.
-
-*Angles defined but no angle types*
- The data file header lists angles but no angle types.
-
-*Append boundary must be shrink/minimum*
- The boundary style of the face where atoms are added
- must be of type m (shrink/minimum).
-
-*Arccos of invalid value in variable formula*
- Argument of arccos() must be between -1 and 1.
-
-*Arcsin of invalid value in variable formula*
- Argument of arcsin() must be between -1 and 1.
-
-*Assigning body parameters to non-body atom*
- Self-explanatory.
-
-*Assigning ellipsoid parameters to non-ellipsoid atom*
- Self-explanatory.
-
-*Assigning line parameters to non-line atom*
- Self-explanatory.
-
-*Assigning quat to non-body atom*
- Self-explanatory.
-
-*Assigning tri parameters to non-tri atom*
- Self-explanatory.
-
-*At least one atom of each swapped type must be present to define charges.*
- Self-explanatory.
-
-*Atom IDs must be consecutive for velocity create loop all*
- Self-explanatory.
-
-*Atom IDs must be used for molecular systems*
- Atom IDs are used to identify and find partner atoms in bonds.
-
-*Atom count changed in fix neb*
- This is not allowed in a NEB calculation.
-
-*Atom count is inconsistent, cannot write data file*
- The sum of atoms across processors does not equal the global number
- of atoms. Probably some atoms have been lost.
-
-*Atom count is inconsistent, cannot write restart file*
- Sum of atoms across processors does not equal initial total count.
- This is probably because you have lost some atoms.
-
-*Atom in too many rigid bodies - boost MAXBODY*
- Fix poems has a parameter MAXBODY (in fix_poems.cpp) which determines
- the maximum number of rigid bodies a single atom can belong to (i.e. a
- multibody joint). The bodies you have defined exceed this limit.
-
-*Atom sort did not operate correctly*
- This is an internal LAMMPS error. Please report it to the
- developers.
-
-*Atom sorting has bin size = 0.0*
- The neighbor cutoff is being used as the bin size, but it is zero.
- Thus you must explicitly list a bin size in the atom_modify sort
- command or turn off sorting.
-
-*Atom style hybrid cannot have hybrid as an argument*
- Self-explanatory.
-
-*Atom style hybrid cannot use same atom style twice*
- Self-explanatory.
-
-*Atom style template molecule must have atom types*
- The defined molecule(s) does not specify atom types.
-
-*Atom style was redefined after using fix property/atom*
- This is not allowed.
-
-*Atom type must be zero in fix gcmc mol command*
- Self-explanatory.
-
-*Atom vector in equal-style variable formula*
- Atom vectors generate one value per atom which is not allowed
- in an equal-style variable.
-
-*Atom-style variable in equal-style variable formula*
- Atom-style variables generate one value per atom which is not allowed
- in an equal-style variable.
-
-*Atom_modify id command after simulation box is defined*
- The atom_modify id command cannot be used after a read_data,
- read_restart, or create_box command.
-
-*Atom_modify map command after simulation box is defined*
- The atom_modify map command cannot be used after a read_data,
- read_restart, or create_box command.
-
-*Atom_modify sort and first options cannot be used together*
- Self-explanatory.
-
-*Atom_style command after simulation box is defined*
- The atom_style command cannot be used after a read_data,
- read_restart, or create_box command.
-
-*Atom_style line can only be used in 2d simulations*
- Self-explanatory.
-
-*Atom_style tri can only be used in 3d simulations*
- Self-explanatory.
-
-*Atomfile variable could not read values*
- Check the file assigned to the variable.
-
-*Atomfile variable in equal-style variable formula*
- Self-explanatory.
-
-*Atomfile-style variable in equal-style variable formula*
- Self-explanatory.
-
-*Attempt to pop empty stack in fix box/relax*
- Internal LAMMPS error. Please report it to the developers.
-
-*Attempt to push beyond stack limit in fix box/relax*
- Internal LAMMPS error. Please report it to the developers.
-
-*Attempting to rescale a 0.0 temperature*
- Cannot rescale a temperature that is already 0.0.
-
-*Bad FENE bond*
- Two atoms in a FENE bond have become so far apart that the bond cannot
- be computed.
-
-*Bad TIP4P angle type for PPPM/TIP4P*
- Specified angle type is not valid.
-
-*Bad TIP4P angle type for PPPMDisp/TIP4P*
- Specified angle type is not valid.
-
-*Bad TIP4P bond type for PPPM/TIP4P*
- Specified bond type is not valid.
-
-*Bad TIP4P bond type for PPPMDisp/TIP4P*
- Specified bond type is not valid.
-
-*Bad fix ID in fix append/atoms command*
- The value of the fix_id for keyword spatial must start with the suffix
- f_.
-
-*Bad grid of processors*
- The 3d grid of processors defined by the processors command does not
- match the number of processors LAMMPS is being run on.
-
-*Bad kspace_modify kmax/ewald parameter*
- Kspace_modify values for the kmax/ewald keyword must be integers > 0
-
-*Bad kspace_modify slab parameter*
- Kspace_modify value for the slab/volume keyword must be >= 2.0.
-
-*Bad matrix inversion in mldivide3*
- This error should not occur unless the matrix is badly formed.
-
-*Bad principal moments*
- Fix rigid did not compute the principal moments of inertia of a rigid
- group of atoms correctly.
-
-*Bad quadratic solve for particle/line collision*
- This is an internal error. It should nornally not occur.
-
-*Bad quadratic solve for particle/tri collision*
- This is an internal error. It should nornally not occur.
-
-*Bad real space Coulomb cutoff in fix tune/kspace*
- Fix tune/kspace tried to find the optimal real space Coulomb cutoff using
- the Newton-Rhaphson method, but found a non-positive or NaN cutoff
-
-*Balance command before simulation box is defined*
- The balance command cannot be used before a read_data, read_restart,
- or create_box command.
-
-*Balance produced bad splits*
- This should not occur. It means two or more cutting plane locations
- are on top of each other or out of order. Report the problem to the
- developers.
-
-*Balance rcb cannot be used with comm_style brick*
- Comm_style tiled must be used instead.
-
-*Balance shift string is invalid*
- The string can only contain the characters "x", "y", or "z".
-
-*Bias compute does not calculate a velocity bias*
- The specified compute must compute a bias for temperature.
-
-*Bias compute does not calculate temperature*
- The specified compute must compute temperature.
-
-*Bias compute group does not match compute group*
- The specified compute must operate on the same group as the parent
- compute.
-
-*Big particle in fix srd cannot be point particle*
- Big particles must be extended spheriods or ellipsoids.
-
-*Bigint setting in lmptype.h is invalid*
- Size of bigint is less than size of tagint.
-
-*Bigint setting in lmptype.h is not compatible*
- Format of bigint stored in restart file is not consistent with LAMMPS
- version you are running. See the settings in src/lmptype.h
-
-*Bitmapped lookup tables require int/float be same size*
- Cannot use pair tables on this machine, because of word sizes. Use
- the pair_modify command with table 0 instead.
-
-*Bitmapped table in file does not match requested table*
- Setting for bitmapped table in pair_coeff command must match table
- in file exactly.
-
-*Bitmapped table is incorrect length in table file*
- Number of table entries is not a correct power of 2.
-
-*Bond and angle potentials must be defined for TIP4P*
- Cannot use TIP4P pair potential unless bond and angle potentials
- are defined.
-
-*Bond atom missing in box size check*
- The 2nd atoms needed to compute a particular bond is missing on this
- processor. Typically this is because the pairwise cutoff is set too
- short or the bond has blown apart and an atom is too far away.
-
-*Bond atom missing in delete_bonds*
- The delete_bonds command cannot find one or more atoms in a particular
- bond on a particular processor. The pairwise cutoff is too short or
- the atoms are too far apart to make a valid bond.
-
-*Bond atom missing in image check*
- The 2nd atom in a particular bond is missing on this processor.
- Typically this is because the pairwise cutoff is set too short or the
- bond has blown apart and an atom is too far away.
-
-*Bond atom missing in set command*
- The set command cannot find one or more atoms in a particular bond on
- a particular processor. The pairwise cutoff is too short or the atoms
- are too far apart to make a valid bond.
-
-*Bond atoms %d %d missing on proc %d at step %ld*
- The 2nd atom needed to compute a particular bond is missing on this
- processor. Typically this is because the pairwise cutoff is set too
- short or the bond has blown apart and an atom is too far away.
-
-*Bond atoms missing on proc %d at step %ld*
- The 2nd atom needed to compute a particular bond is missing on this
- processor. Typically this is because the pairwise cutoff is set too
- short or the bond has blown apart and an atom is too far away.
-
-*Bond coeff for hybrid has invalid style*
- Bond style hybrid uses another bond style as one of its coefficients.
- The bond style used in the bond_coeff command or read from a restart
- file is not recognized.
-
-*Bond coeffs are not set*
- No bond coefficients have been assigned in the data file or via the
- bond_coeff command.
-
-*Bond extent > half of periodic box length*
- This error was detected by the neigh_modify check yes setting. It is
- an error because the bond atoms are so far apart it is ambiguous how
- it should be defined.
-
-*Bond potential must be defined for SHAKE*
- Cannot use fix shake unless bond potential is defined.
-
-*Bond style hybrid cannot have hybrid as an argument*
- Self-explanatory.
-
-*Bond style hybrid cannot have none as an argument*
- Self-explanatory.
-
-*Bond style hybrid cannot use same bond style twice*
- Self-explanatory.
-
-*Bond style quartic cannot be used with 3,4-body interactions*
- No angle, dihedral, or improper styles can be defined when using
- bond style quartic.
-
-*Bond style quartic cannot be used with atom style template*
- This bond style can change the bond topology which is not
- allowed with this atom style.
-
-*Bond style quartic requires special_bonds = 1,1,1*
- This is a restriction of the current bond quartic implementation.
-
-*Bond table parameters did not set N*
- List of bond table parameters must include N setting.
-
-*Bond table values are not increasing*
- The values in the tabulated file must be monotonically increasing.
-
-*BondAngle coeff for hybrid angle has invalid format*
- No "ba" field should appear in data file entry.
-
-*BondBond coeff for hybrid angle has invalid format*
- No "bb" field should appear in data file entry.
-
-*Bond_coeff command before bond_style is defined*
- Coefficients cannot be set in the data file or via the bond_coeff
- command until an bond_style has been assigned.
-
-*Bond_coeff command before simulation box is defined*
- The bond_coeff command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*Bond_coeff command when no bonds allowed*
- The chosen atom style does not allow for bonds to be defined.
-
-*Bond_style command when no bonds allowed*
- The chosen atom style does not allow for bonds to be defined.
-
-*Bonds assigned incorrectly*
- Bonds read in from the data file were not assigned correctly to atoms.
- This means there is something invalid about the topology definitions.
-
-*Bonds defined but no bond types*
- The data file header lists bonds but no bond types.
-
-*Both restart files must use % or neither*
- Self-explanatory.
-
-*Both restart files must use MPI-IO or neither*
- Self-explanatory.
-
-*Both sides of boundary must be periodic*
- Cannot specify a boundary as periodic only on the lo or hi side. Must
- be periodic on both sides.
-
-*Boundary command after simulation box is defined*
- The boundary command cannot be used after a read_data, read_restart,
- or create_box command.
-
-*Box bounds are invalid*
- The box boundaries specified in the read_data file are invalid. The
- lo value must be less than the hi value for all 3 dimensions.
-
-*Box command after simulation box is defined*
- The box command cannot be used after a read_data, read_restart, or
- create_box command.
-
-*CPU neighbor lists must be used for ellipsoid/sphere mix.*
- When using Gay-Berne or RE-squared pair styles with both ellipsoidal and
- spherical particles, the neighbor list must be built on the CPU
-
-*Can not specify Pxy/Pxz/Pyz in fix box/relax with non-triclinic box*
- Only triclinic boxes can be used with off-diagonal pressure components.
- See the region prism command for details.
-
-*Can not specify Pxy/Pxz/Pyz in fix nvt/npt/nph with non-triclinic box*
- Only triclinic boxes can be used with off-diagonal pressure components.
- See the region prism command for details.
-
-*Can only use -plog with multiple partitions*
- Self-explanatory. See doc page discussion of command-line switches.
-
-*Can only use -pscreen with multiple partitions*
- Self-explanatory. See doc page discussion of command-line switches.
-
-*Can only use Kokkos supported regions with Kokkos package*
- Self-explanatory.
-
-*Can only use NEB with 1-processor replicas*
- This is current restriction for NEB as implemented in LAMMPS.
-
-*Can only use TAD with 1-processor replicas for NEB*
- This is current restriction for NEB as implemented in LAMMPS.
-
-*Cannot (yet) do analytic differentiation with pppm/gpu*
- This is a current restriction of this command.
-
-*Cannot (yet) request ghost atoms with Kokkos half neighbor list*
- This feature is not yet supported.
-
-*Cannot (yet) use 'electron' units with dipoles*
- This feature is not yet supported.
-
-*Cannot (yet) use Ewald with triclinic box and slab correction*
- This feature is not yet supported.
-
-*Cannot (yet) use K-space slab correction with compute group/group for triclinic systems*
- This option is not yet supported.
-
-*Cannot (yet) use MSM with 2d simulation*
- This feature is not yet supported.
-
-*Cannot (yet) use PPPM with triclinic box and TIP4P*
- This feature is not yet supported.
-
-*Cannot (yet) use PPPM with triclinic box and kspace_modify diff ad*
- This feature is not yet supported.
-
-*Cannot (yet) use PPPM with triclinic box and slab correction*
- This feature is not yet supported.
-
-*Cannot (yet) use kspace slab correction with long-range dipoles and non-neutral systems or per-atom energy*
- This feature is not yet supported.
-
-*Cannot (yet) use kspace_modify diff ad with compute group/group*
- This option is not yet supported.
-
-*Cannot (yet) use kspace_style pppm/stagger with triclinic systems*
- This feature is not yet supported.
-
-*Cannot (yet) use molecular templates with Kokkos*
- Self-explanatory.
-
-*Cannot (yet) use respa with Kokkos*
- Self-explanatory.
-
-*Cannot (yet) use rigid bodies with fix deform and Kokkos*
- Self-explanatory.
-
-*Cannot (yet) use rigid bodies with fix nh and Kokkos*
- Self-explanatory.
-
-*Cannot (yet) use single precision with MSM (remove -DFFT_SINGLE from Makefile and recompile)*
- Single precision cannot be used with MSM.
-
-*Cannot add atoms to fix move variable*
- Atoms can not be added afterwards to this fix option.
-
-*Cannot append atoms to a triclinic box*
- The simulation box must be defined with edges alligned with the
- Cartesian axes.
-
-*Cannot balance in z dimension for 2d simulation*
- Self-explanatory.
-
-*Cannot change box ortho/triclinic with certain fixes defined*
- This is because those fixes store the shape of the box. You need to
- use unfix to discard the fix, change the box, then redefine a new
- fix.
-
-*Cannot change box ortho/triclinic with dumps defined*
- This is because some dumps store the shape of the box. You need to
- use undump to discard the dump, change the box, then redefine a new
- dump.
-
-*Cannot change box tilt factors for orthogonal box*
- Cannot use tilt factors unless the simulation box is non-orthogonal.
-
-*Cannot change box to orthogonal when tilt is non-zero*
- Self-explanatory.
-
-*Cannot change box z boundary to nonperiodic for a 2d simulation*
- Self-explanatory.
-
-*Cannot change dump_modify every for dump dcd*
- The frequency of writing dump dcd snapshots cannot be changed.
-
-*Cannot change dump_modify every for dump xtc*
- The frequency of writing dump xtc snapshots cannot be changed.
-
-*Cannot change timestep once fix srd is setup*
- This is because various SRD properties depend on the timestep
- size.
-
-*Cannot change timestep with fix pour*
- This is because fix pour pre-computes the time delay for particles to
- fall out of the insertion volume due to gravity.
-
-*Cannot change to comm_style brick from tiled layout*
- Self-explanatory.
-
-*Cannot change_box after reading restart file with per-atom info*
- This is because the restart file info cannot be migrated with the
- atoms. You can get around this by performing a 0-timestep run which
- will assign the restart file info to actual atoms.
-
-*Cannot change_box in xz or yz for 2d simulation*
- Self-explanatory.
-
-*Cannot change_box in z dimension for 2d simulation*
- Self-explanatory.
-
-*Cannot clear group all*
- This operation is not allowed.
-
-*Cannot close restart file - MPI error: %s*
- This error was generated by MPI when reading/writing an MPI-IO restart
- file.
-
-*Cannot compute initial g_ewald_disp*
- LAMMPS failed to compute an initial guess for the PPPM_disp g_ewald_6
- factor that partitions the computation between real space and k-space
- for Disptersion interactions.
-
-*Cannot create an atom map unless atoms have IDs*
- The simulation requires a mapping from global atom IDs to local atoms,
- but the atoms that have been defined have no IDs.
-
-*Cannot create atoms with undefined lattice*
- Must use the lattice command before using the create_atoms
- command.
-
-*Cannot create/grow a vector/array of pointers for %s*
- LAMMPS code is making an illegal call to the templated memory
- allocaters, to create a vector or array of pointers.
-
-*Cannot create_atoms after reading restart file with per-atom info*
- The per-atom info was stored to be used when by a fix that you may
- re-define. If you add atoms before re-defining the fix, then there
- will not be a correct amount of per-atom info.
-
-*Cannot create_box after simulation box is defined*
- A simulation box can only be defined once.
-
-*Cannot currently use pair reax with pair hybrid*
- This is not yet supported.
-
-*Cannot currently use pppm/gpu with fix balance.*
- Self-explanatory.
-
-*Cannot delete group all*
- Self-explanatory.
-
-*Cannot delete group currently used by a compute*
- Self-explanatory.
-
-*Cannot delete group currently used by a dump*
- Self-explanatory.
-
-*Cannot delete group currently used by a fix*
- Self-explanatory.
-
-*Cannot delete group currently used by atom_modify first*
- Self-explanatory.
-
-*Cannot delete_atoms bond yes for non-molecular systems*
- Self-explanatory.
-
-*Cannot displace_atoms after reading restart file with per-atom info*
- This is because the restart file info cannot be migrated with the
- atoms. You can get around this by performing a 0-timestep run which
- will assign the restart file info to actual atoms.
-
-*Cannot do GCMC on atoms in atom_modify first group*
- This is a restriction due to the way atoms are organized in a list to
- enable the atom_modify first command.
-
-*Cannot do atom/swap on atoms in atom_modify first group*
- This is a restriction due to the way atoms are organized in a list to
- enable the atom_modify first command.
-
-*Cannot dump sort on atom IDs with no atom IDs defined*
- Self-explanatory.
-
-*Cannot dump sort when multiple dump files are written*
- In this mode, each processor dumps its atoms to a file, so
- no sorting is allowed.
-
-*Cannot embed Python when also extending Python with LAMMPS*
- When running LAMMPS via Python through the LAMMPS library interface
- you cannot also user the input script python command.
-
-*Cannot evaporate atoms in atom_modify first group*
- This is a restriction due to the way atoms are organized in
- a list to enable the atom_modify first command.
-
-*Cannot find create_bonds group ID*
- Self-explanatory.
-
-*Cannot find delete_bonds group ID*
- Group ID used in the delete_bonds command does not exist.
-
-*Cannot find specified group ID for core particles*
- Self-explanatory.
-
-*Cannot find specified group ID for shell particles*
- Self-explanatory.
-
-*Cannot have both pair_modify shift and tail set to yes*
- These 2 options are contradictory.
-
-*Cannot intersect groups using a dynamic group*
- This operation is not allowed.
-
-*Cannot mix molecular and molecule template atom styles*
- Self-explanatory.
-
-*Cannot open -reorder file*
- Self-explanatory.
-
-*Cannot open ADP potential file %s*
- The specified ADP potential file cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open AIREBO potential file %s*
- The specified AIREBO potential file cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open BOP potential file %s*
- The specified BOP potential file cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open COMB potential file %s*
- The specified COMB potential file cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open COMB3 lib.comb3 file*
- The COMB3 library file cannot be opened. Check that the path and name
- are correct.
-
-*Cannot open COMB3 potential file %s*
- The specified COMB3 potential file cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open EAM potential file %s*
- The specified EAM potential file cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open EIM potential file %s*
- The specified EIM potential file cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open LCBOP potential file %s*
- The specified LCBOP potential file cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open MEAM potential file %s*
- The specified MEAM potential file cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open SNAP coefficient file %s*
- The specified SNAP coefficient file cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open SNAP parameter file %s*
- The specified SNAP parameter file cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open Stillinger-Weber potential file %s*
- The specified SW potential file cannot be opened. Check that the path
- and name are correct.
-
-*Cannot open Tersoff potential file %s*
- The specified potential file cannot be opened. Check that the path
- and name are correct.
-
-*Cannot open Vashishta potential file %s*
- The specified Vashishta potential file cannot be opened. Check that the path
- and name are correct.
-
-*Cannot open balance output file*
- Self-explanatory.
-
-*Cannot open coul/streitz potential file %s*
- The specified coul/streitz potential file cannot be opened. Check
- that the path and name are correct.
-
-*Cannot open custom file*
- Self-explanatory.
-
-*Cannot open data file %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open dir to search for restart file*
- Using a "*" in the name of the restart file will open the current
- directory to search for matching file names.
-
-*Cannot open dump file*
- Self-explanatory.
-
-*Cannot open dump file %s*
- The output file for the dump command cannot be opened. Check that the
- path and name are correct.
-
-*Cannot open file %s*
- The specified file cannot be opened. Check that the path and name are
- correct. If the file is a compressed file, also check that the gzip
- executable can be found and run.
-
-*Cannot open file variable file %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open fix ave/chunk file %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open fix ave/correlate file %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open fix ave/histo file %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open fix ave/spatial file %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open fix ave/time file %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open fix balance output file*
- Self-explanatory.
-
-*Cannot open fix poems file %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open fix print file %s*
- The output file generated by the fix print command cannot be opened
-
-*Cannot open fix qeq parameter file %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open fix qeq/comb file %s*
- The output file for the fix qeq/combs command cannot be opened.
- Check that the path and name are correct.
-
-*Cannot open fix reax/bonds file %s*
- The output file for the fix reax/bonds command cannot be opened.
- Check that the path and name are correct.
-
-*Cannot open fix rigid infile %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open fix rigid restart file %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open fix rigid/small infile %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open fix tmd file %s*
- The output file for the fix tmd command cannot be opened. Check that
- the path and name are correct.
-
-*Cannot open fix ttm file %s*
- The output file for the fix ttm command cannot be opened. Check that
- the path and name are correct.
-
-*Cannot open gzipped file*
- LAMMPS was compiled without support for reading and writing gzipped
- files through a pipeline to the gzip program with -DLAMMPS_GZIP.
-
-*Cannot open input script %s*
- Self-explanatory.
-
-*Cannot open log.cite file*
- This file is created when you use some LAMMPS features, to indicate
- what paper you should cite on behalf of those who implemented
- the feature. Check that you have write priveleges into the directory
- you are running in.
-
-*Cannot open log.lammps for writing*
- The default LAMMPS log file cannot be opened. Check that the
- directory you are running in allows for files to be created.
-
-*Cannot open logfile*
- The LAMMPS log file named in a command-line argument cannot be opened.
- Check that the path and name are correct.
-
-*Cannot open logfile %s*
- The LAMMPS log file specified in the input script cannot be opened.
- Check that the path and name are correct.
-
-*Cannot open molecule file %s*
- The specified file cannot be opened. Check that the path and name are
- correct.
-
-*Cannot open nb3b/harmonic potential file %s*
- The specified potential file cannot be opened. Check that the path
- and name are correct.
-
-*Cannot open pair_write file*
- The specified output file for pair energies and forces cannot be
- opened. Check that the path and name are correct.
-
-*Cannot open polymorphic potential file %s*
- The specified polymorphic potential file cannot be opened. Check that
- the path and name are correct.
-
-*Cannot open print file %s*
- Self-explanatory.
-
-*Cannot open processors output file*
- Self-explanatory.
-
-*Cannot open restart file %s*
- Self-explanatory.
-
-*Cannot open restart file for reading - MPI error: %s*
- This error was generated by MPI when reading/writing an MPI-IO restart
- file.
-
-*Cannot open restart file for writing - MPI error: %s*
- This error was generated by MPI when reading/writing an MPI-IO restart
- file.
-
-*Cannot open screen file*
- The screen file specified as a command-line argument cannot be
- opened. Check that the directory you are running in allows for files
- to be created.
-
-*Cannot open temporary file for world counter.*
- Self-explanatory.
-
-*Cannot open universe log file*
- For a multi-partition run, the master log file cannot be opened.
- Check that the directory you are running in allows for files to be
- created.
-
-*Cannot open universe screen file*
- For a multi-partition run, the master screen file cannot be opened.
- Check that the directory you are running in allows for files to be
- created.
-
-*Cannot read from restart file - MPI error: %s*
- This error was generated by MPI when reading/writing an MPI-IO restart
- file.
-
-*Cannot read_data without add keyword after simulation box is defined*
- Self-explanatory.
-
-*Cannot read_restart after simulation box is defined*
- The read_restart command cannot be used after a read_data,
- read_restart, or create_box command.
-
-*Cannot redefine variable as a different style*
- An equal-style variable can be re-defined but only if it was
- originally an equal-style variable.
-
-*Cannot replicate 2d simulation in z dimension*
- The replicate command cannot replicate a 2d simulation in the z
- dimension.
-
-*Cannot replicate with fixes that store atom quantities*
- Either fixes are defined that create and store atom-based vectors or a
- restart file was read which included atom-based vectors for fixes.
- The replicate command cannot duplicate that information for new atoms.
- You should use the replicate command before fixes are applied to the
- system.
-
-*Cannot reset timestep with a dynamic region defined*
- Dynamic regions (see the region command) have a time dependence.
- Thus you cannot change the timestep when one or more of these
- are defined.
-
-*Cannot reset timestep with a time-dependent fix defined*
- You cannot reset the timestep when a fix that keeps track of elapsed
- time is in place.
-
-*Cannot run 2d simulation with nonperiodic Z dimension*
- Use the boundary command to make the z dimension periodic in order to
- run a 2d simulation.
-
-*Cannot set bond topology types for atom style template*
- The bond, angle, etc types cannot be changed for this atom style since
- they are static settings in the molecule template files.
-
-*Cannot set both respa pair and inner/middle/outer*
- In the rRESPA integrator, you must compute pairwise potentials either
- all together (pair), or in pieces (inner/middle/outer). You can't do
- both.
-
-*Cannot set cutoff/multi before simulation box is defined*
- Self-explanatory.
-
-*Cannot set dpd/theta for this atom style*
- Self-explanatory.
-
-*Cannot set dump_modify flush for dump xtc*
- Self-explanatory.
-
-*Cannot set mass for this atom style*
- This atom style does not support mass settings for each atom type.
- Instead they are defined on a per-atom basis in the data file.
-
-*Cannot set meso/cv for this atom style*
- Self-explanatory.
-
-*Cannot set meso/e for this atom style*
- Self-explanatory.
-
-*Cannot set meso/rho for this atom style*
- Self-explanatory.
-
-*Cannot set non-zero image flag for non-periodic dimension*
- Self-explanatory.
-
-*Cannot set non-zero z velocity for 2d simulation*
- Self-explanatory.
-
-*Cannot set quaternion for atom that has none*
- Self-explanatory.
-
-*Cannot set quaternion with xy components for 2d system*
- Self-explanatory.
-
-*Cannot set respa hybrid and any of pair/inner/middle/outer*
- In the rRESPA integrator, you must compute pairwise potentials either
- all together (pair), with different cutoff regions (inner/middle/outer),
- or per hybrid sub-style (hybrid). You cannot mix those.
-
-*Cannot set respa middle without inner/outer*
- In the rRESPA integrator, you must define both a inner and outer
- setting in order to use a middle setting.
-
-*Cannot set restart file size - MPI error: %s*
- This error was generated by MPI when reading/writing an MPI-IO restart
- file.
-
-*Cannot set smd/contact/radius for this atom style*
- Self-explanatory.
-
-*Cannot set smd/mass/density for this atom style*
- Self-explanatory.
-
-*Cannot set temperature for fix rigid/nph*
- The temp keyword cannot be specified.
-
-*Cannot set theta for atom that is not a line*
- Self-explanatory.
-
-*Cannot set this attribute for this atom style*
- The attribute being set does not exist for the defined atom style.
-
-*Cannot set variable z velocity for 2d simulation*
- Self-explanatory.
-
-*Cannot skew triclinic box in z for 2d simulation*
- Self-explanatory.
-
-*Cannot subtract groups using a dynamic group*
- This operation is not allowed.
-
-*Cannot union groups using a dynamic group*
- This operation is not allowed.
-
-*Cannot use -cuda on and -kokkos on together*
- This is not allowed since both packages can use GPUs.
-
-*Cannot use -cuda on without USER-CUDA installed*
- The USER-CUDA package must be installed via "make yes-user-cuda"
- before LAMMPS is built.
-
-*Cannot use -kokkos on without KOKKOS installed*
- Self-explanatory.
-
-*Cannot use -reorder after -partition*
- Self-explanatory. See doc page discussion of command-line switches.
-
-*Cannot use Ewald with 2d simulation*
- The kspace style ewald cannot be used in 2d simulations. You can use
- 2d Ewald in a 3d simulation; see the kspace_modify command.
-
-*Cannot use Ewald/disp solver on system with no charge, dipole, or LJ particles*
- No atoms in system have a non-zero charge or dipole, or are LJ
- particles. Change charges/dipoles or change options of the kspace
- solver/pair style.
-
-*Cannot use EwaldDisp with 2d simulation*
- This is a current restriction of this command.
-
-*Cannot use GPU package with USER-CUDA package enabled*
- You cannot use both the GPU and USER-CUDA packages
- together. Use one or the other.
-
-*Cannot use Kokkos pair style with rRESPA inner/middle*
- Self-explanatory.
-
-*Cannot use NEB unless atom map exists*
- Use the atom_modify command to create an atom map.
-
-*Cannot use NEB with a single replica*
- Self-explanatory.
-
-*Cannot use NEB with atom_modify sort enabled*
- This is current restriction for NEB implemented in LAMMPS.
-
-*Cannot use PPPM with 2d simulation*
- The kspace style pppm cannot be used in 2d simulations. You can use
- 2d PPPM in a 3d simulation; see the kspace_modify command.
-
-*Cannot use PPPMDisp with 2d simulation*
- The kspace style pppm/disp cannot be used in 2d simulations. You can
- use 2d pppm/disp in a 3d simulation; see the kspace_modify command.
-
-*Cannot use PRD with a changing box*
- The current box dimensions are not copied between replicas
-
-*Cannot use PRD with a time-dependent fix defined*
- PRD alters the timestep in ways that will mess up these fixes.
-
-*Cannot use PRD with a time-dependent region defined*
- PRD alters the timestep in ways that will mess up these regions.
-
-*Cannot use PRD with atom_modify sort enabled*
- This is a current restriction of PRD. You must turn off sorting,
- which is enabled by default, via the atom_modify command.
-
-*Cannot use PRD with multi-processor replicas unless atom map exists*
- Use the atom_modify command to create an atom map.
-
-*Cannot use TAD unless atom map exists for NEB*
- See atom_modify map command to set this.
-
-*Cannot use TAD with a single replica for NEB*
- NEB requires multiple replicas.
-
-*Cannot use TAD with atom_modify sort enabled for NEB*
- This is a current restriction of NEB.
-
-*Cannot use a damped dynamics min style with fix box/relax*
- This is a current restriction in LAMMPS. Use another minimizer
- style.
-
-*Cannot use a damped dynamics min style with per-atom DOF*
- This is a current restriction in LAMMPS. Use another minimizer
- style.
-
-*Cannot use append/atoms in periodic dimension*
- The boundary style of the face where atoms are added can not be of
- type p (periodic).
-
-*Cannot use atomfile-style variable unless atom map exists*
- Self-explanatory. See the atom_modify command to create a map.
-
-*Cannot use both com and bias with compute temp/chunk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with buck/coul/cut/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with buck/coul/long/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with buck/kk*
- That style is not supported by Kokkos.
-
-*Cannot use chosen neighbor list style with coul/cut/kk*
- That style is not supported by Kokkos.
-
-*Cannot use chosen neighbor list style with coul/debye/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with coul/dsf/kk*
- That style is not supported by Kokkos.
-
-*Cannot use chosen neighbor list style with coul/wolf/kk*
- That style is not supported by Kokkos.
-
-*Cannot use chosen neighbor list style with lj/charmm/coul/charmm/implicit/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with lj/charmm/coul/charmm/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with lj/charmm/coul/long/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with lj/class2/coul/cut/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with lj/class2/coul/long/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with lj/class2/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with lj/cut/coul/cut/kk*
- That style is not supported by Kokkos.
-
-*Cannot use chosen neighbor list style with lj/cut/coul/debye/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with lj/cut/coul/long/kk*
- That style is not supported by Kokkos.
-
-*Cannot use chosen neighbor list style with lj/cut/kk*
- That style is not supported by Kokkos.
-
-*Cannot use chosen neighbor list style with lj/expand/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with lj/gromacs/coul/gromacs/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with lj/gromacs/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with lj/sdk/kk*
- That style is not supported by Kokkos.
-
-*Cannot use chosen neighbor list style with pair eam/kk*
- That style is not supported by Kokkos.
-
-*Cannot use chosen neighbor list style with pair eam/kk/alloy*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with pair eam/kk/fs*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with pair sw/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with tersoff/kk*
- Self-explanatory.
-
-*Cannot use chosen neighbor list style with tersoff/zbl/kk*
- Self-explanatory.
-
-*Cannot use compute chunk/atom bin z for 2d model*
- Self-explanatory.
-
-*Cannot use compute cluster/atom unless atoms have IDs*
- Atom IDs are used to identify clusters.
-
-*Cannot use create_atoms rotate unless single style*
- Self-explanatory.
-
-*Cannot use create_bonds unless atoms have IDs*
- This command requires a mapping from global atom IDs to local atoms,
- but the atoms that have been defined have no IDs.
-
-*Cannot use create_bonds with non-molecular system*
- Self-explanatory.
-
-*Cannot use cwiggle in variable formula between runs*
- This is a function of elapsed time.
-
-*Cannot use delete_atoms bond yes with atom_style template*
- This is because the bonds for that atom style are hardwired in the
- molecule template.
-
-*Cannot use delete_atoms unless atoms have IDs*
- Your atoms do not have IDs, so the delete_atoms command cannot be
- used.
-
-*Cannot use delete_bonds with non-molecular system*
- Your choice of atom style does not have bonds.
-
-*Cannot use dump_modify fileper without % in dump file name*
- Self-explanatory.
-
-*Cannot use dump_modify nfile without % in dump file name*
- Self-explanatory.
-
-*Cannot use dynamic group with fix adapt atom*
- This is not yet supported.
-
-*Cannot use fix TMD unless atom map exists*
- Using this fix requires the ability to lookup an atom index, which is
- provided by an atom map. An atom map does not exist (by default) for
- non-molecular problems. Using the atom_modify map command will force
- an atom map to be created.
-
-*Cannot use fix ave/spatial z for 2 dimensional model*
- Self-explanatory.
-
-*Cannot use fix bond/break with non-molecular systems*
- Only systems with bonds that can be changed can be used. Atom_style
- template does not qualify.
-
-*Cannot use fix bond/create with non-molecular systems*
- Only systems with bonds that can be changed can be used. Atom_style
- template does not qualify.
-
-*Cannot use fix bond/swap with non-molecular systems*
- Only systems with bonds that can be changed can be used. Atom_style
- template does not qualify.
-
-*Cannot use fix box/relax on a 2nd non-periodic dimension*
- When specifying an off-diagonal pressure component, the 2nd of the two
- dimensions must be periodic. E.g. if the xy component is specified,
- then the y dimension must be periodic.
-
-*Cannot use fix box/relax on a non-periodic dimension*
- When specifying a diagonal pressure component, the dimension must be
- periodic.
-
-*Cannot use fix box/relax with both relaxation and scaling on a tilt factor*
- When specifying scaling on a tilt factor component, that component can not
- also be controlled by the barostat. E.g. if scalexy yes is specified and
- also keyword tri or xy, this is wrong.
-
-*Cannot use fix box/relax with tilt factor scaling on a 2nd non-periodic dimension*
- When specifying scaling on a tilt factor component, the 2nd of the two
- dimensions must be periodic. E.g. if the xy component is specified,
- then the y dimension must be periodic.
-
-*Cannot use fix deform on a shrink-wrapped boundary*
- The x, y, z options cannot be applied to shrink-wrapped
- dimensions.
-
-*Cannot use fix deform tilt on a shrink-wrapped 2nd dim*
- This is because the shrink-wrapping will change the value
- of the strain implied by the tilt factor.
-
-*Cannot use fix deform trate on a box with zero tilt*
- The trate style alters the current strain.
-
-*Cannot use fix deposit rigid and not molecule*
- Self-explanatory.
-
-*Cannot use fix deposit rigid and shake*
- These two attributes are conflicting.
-
-*Cannot use fix deposit shake and not molecule*
- Self-explanatory.
-
-*Cannot use fix enforce2d with 3d simulation*
- Self-explanatory.
-
-*Cannot use fix gcmc in a 2d simulation*
- Fix gcmc is set up to run in 3d only. No 2d simulations with fix gcmc
- are allowed.
-
-*Cannot use fix gcmc shake and not molecule*
- Self-explanatory.
-
-*Cannot use fix msst without per-type mass defined*
- Self-explanatory.
-
-*Cannot use fix npt and fix deform on same component of stress tensor*
- This would be changing the same box dimension twice.
-
-*Cannot use fix nvt/npt/nph on a 2nd non-periodic dimension*
- When specifying an off-diagonal pressure component, the 2nd of the two
- dimensions must be periodic. E.g. if the xy component is specified,
- then the y dimension must be periodic.
-
-*Cannot use fix nvt/npt/nph on a non-periodic dimension*
- When specifying a diagonal pressure component, the dimension must be
- periodic.
-
-*Cannot use fix nvt/npt/nph with both xy dynamics and xy scaling*
- Self-explanatory.
-
-*Cannot use fix nvt/npt/nph with both xz dynamics and xz scaling*
- Self-explanatory.
-
-*Cannot use fix nvt/npt/nph with both yz dynamics and yz scaling*
- Self-explanatory.
-
-*Cannot use fix nvt/npt/nph with xy scaling when y is non-periodic dimension*
- The 2nd dimension in the barostatted tilt factor must be periodic.
-
-*Cannot use fix nvt/npt/nph with xz scaling when z is non-periodic dimension*
- The 2nd dimension in the barostatted tilt factor must be periodic.
-
-*Cannot use fix nvt/npt/nph with yz scaling when z is non-periodic dimension*
- The 2nd dimension in the barostatted tilt factor must be periodic.
-
-*Cannot use fix pour rigid and not molecule*
- Self-explanatory.
-
-*Cannot use fix pour rigid and shake*
- These two attributes are conflicting.
-
-*Cannot use fix pour shake and not molecule*
- Self-explanatory.
-
-*Cannot use fix pour with triclinic box*
- This option is not yet supported.
-
-*Cannot use fix press/berendsen and fix deform on same component of stress tensor*
- These commands both change the box size/shape, so you cannot use both
- together.
-
-*Cannot use fix press/berendsen on a non-periodic dimension*
- Self-explanatory.
-
-*Cannot use fix press/berendsen with triclinic box*
- Self-explanatory.
-
-*Cannot use fix reax/bonds without pair_style reax*
- Self-explantory.
-
-*Cannot use fix rigid npt/nph and fix deform on same component of stress tensor*
- This would be changing the same box dimension twice.
-
-*Cannot use fix rigid npt/nph on a non-periodic dimension*
- When specifying a diagonal pressure component, the dimension must be
- periodic.
-
-*Cannot use fix rigid/small npt/nph on a non-periodic dimension*
- When specifying a diagonal pressure component, the dimension must be
- periodic.
-
-*Cannot use fix shake with non-molecular system*
- Your choice of atom style does not have bonds.
-
-*Cannot use fix ttm with 2d simulation*
- This is a current restriction of this fix due to the grid it creates.
-
-*Cannot use fix ttm with triclinic box*
- This is a current restriction of this fix due to the grid it creates.
-
-*Cannot use fix tune/kspace without a kspace style*
- Self-explanatory.
-
-*Cannot use fix tune/kspace without a pair style*
- This fix (tune/kspace) can only be used when a pair style has been specified.
-
-*Cannot use fix wall in periodic dimension*
- Self-explanatory.
-
-*Cannot use fix wall zlo/zhi for a 2d simulation*
- Self-explanatory.
-
-*Cannot use fix wall/reflect in periodic dimension*
- Self-explanatory.
-
-*Cannot use fix wall/reflect zlo/zhi for a 2d simulation*
- Self-explanatory.
-
-*Cannot use fix wall/srd in periodic dimension*
- Self-explanatory.
-
-*Cannot use fix wall/srd more than once*
- Nor is their a need to since multiple walls can be specified
- in one command.
-
-*Cannot use fix wall/srd without fix srd*
- Self-explanatory.
-
-*Cannot use fix wall/srd zlo/zhi for a 2d simulation*
- Self-explanatory.
-
-*Cannot use fix_deposit unless atoms have IDs*
- Self-explanatory.
-
-*Cannot use fix_pour unless atoms have IDs*
- Self-explanatory.
-
-*Cannot use include command within an if command*
- Self-explanatory.
-
-*Cannot use lines with fix srd unless overlap is set*
- This is because line segements are connected to each other.
-
-*Cannot use multiple fix wall commands with pair brownian*
- Self-explanatory.
-
-*Cannot use multiple fix wall commands with pair lubricate*
- Self-explanatory.
-
-*Cannot use multiple fix wall commands with pair lubricate/poly*
- Self-explanatory.
-
-*Cannot use multiple fix wall commands with pair lubricateU*
- Self-explanatory.
-
-*Cannot use neigh_modify exclude with GPU neighbor builds*
- This is a current limitation of the GPU implementation
- in LAMMPS.
-
-*Cannot use neighbor bins - box size << cutoff*
- Too many neighbor bins will be created. This typically happens when
- the simulation box is very small in some dimension, compared to the
- neighbor cutoff. Use the "nsq" style instead of "bin" style.
-
-*Cannot use newton pair with beck/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with born/coul/long/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with born/coul/wolf/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with born/gpu pair style*
- Self-explantory.
-
-*Cannot use newton pair with buck/coul/cut/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with buck/coul/long/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with buck/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with colloid/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with coul/cut/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with coul/debye/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with coul/dsf/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with coul/long/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with dipole/cut/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with dipole/sf/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with dpd/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with dpd/tstat/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with eam/alloy/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with eam/fs/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with eam/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with gauss/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with gayberne/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/charmm/coul/long/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/class2/coul/long/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/class2/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/cubic/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/cut/coul/cut/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/cut/coul/debye/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/cut/coul/dsf/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/cut/coul/long/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/cut/coul/msm/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/cut/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/expand/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/gromacs/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/sdk/coul/long/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj/sdk/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with lj96/cut/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with mie/cut/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with morse/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with resquared/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with soft/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with table/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with yukawa/colloid/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with yukawa/gpu pair style*
- Self-explanatory.
-
-*Cannot use newton pair with zbl/gpu pair style*
- Self-explantory.
-
-*Cannot use non-zero forces in an energy minimization*
- Fix setforce cannot be used in this manner. Use fix addforce
- instead.
-
-*Cannot use nonperiodic boundares with fix ttm*
- This fix requires a fully periodic simulation box.
-
-*Cannot use nonperiodic boundaries with Ewald*
- For kspace style ewald, all 3 dimensions must have periodic boundaries
- unless you use the kspace_modify command to define a 2d slab with a
- non-periodic z dimension.
-
-*Cannot use nonperiodic boundaries with EwaldDisp*
- For kspace style ewald/disp, all 3 dimensions must have periodic
- boundaries unless you use the kspace_modify command to define a 2d
- slab with a non-periodic z dimension.
-
-*Cannot use nonperiodic boundaries with PPPM*
- For kspace style pppm, all 3 dimensions must have periodic boundaries
- unless you use the kspace_modify command to define a 2d slab with a
- non-periodic z dimension.
-
-*Cannot use nonperiodic boundaries with PPPMDisp*
- For kspace style pppm/disp, all 3 dimensions must have periodic
- boundaries unless you use the kspace_modify command to define a 2d
- slab with a non-periodic z dimension.
-
-*Cannot use order greater than 8 with pppm/gpu.*
- Self-explanatory.
-
-*Cannot use package gpu neigh yes with triclinic box*
- This is a current restriction in LAMMPS.
-
-*Cannot use pair hybrid with GPU neighbor list builds*
- Neighbor list builds must be done on the CPU for this pair style.
-
-*Cannot use pair tail corrections with 2d simulations*
- The correction factors are only currently defined for 3d systems.
-
-*Cannot use processors part command without using partitions*
- See the command-line -partition switch.
-
-*Cannot use ramp in variable formula between runs*
- This is because the ramp() function is time dependent.
-
-*Cannot use read_data add before simulation box is defined*
- Self-explanatory.
-
-*Cannot use read_data extra with add flag*
- Self-explanatory.
-
-*Cannot use read_data offset without add flag*
- Self-explanatory.
-
-*Cannot use read_data shift without add flag*
- Self-explanatory.
-
-*Cannot use region INF or EDGE when box does not exist*
- Regions that extend to the box boundaries can only be used after the
- create_box command has been used.
-
-*Cannot use set atom with no atom IDs defined*
- Atom IDs are not defined, so they cannot be used to identify an atom.
-
-*Cannot use set mol with no molecule IDs defined*
- Self-explanatory.
-
-*Cannot use swiggle in variable formula between runs*
- This is a function of elapsed time.
-
-*Cannot use tris with fix srd unless overlap is set*
- This is because triangles are connected to each other.
-
-*Cannot use variable energy with constant efield in fix efield*
- LAMMPS computes the energy itself when the E-field is constant.
-
-*Cannot use variable energy with constant force in fix addforce*
- This is because for constant force, LAMMPS can compute the change
- in energy directly.
-
-*Cannot use variable every setting for dump dcd*
- The format of DCD dump files requires snapshots be output
- at a constant frequency.
-
-*Cannot use variable every setting for dump xtc*
- The format of this file requires snapshots at regular intervals.
-
-*Cannot use vdisplace in variable formula between runs*
- This is a function of elapsed time.
-
-*Cannot use velocity bias command without temp keyword*
- Self-explanatory.
-
-*Cannot use velocity create loop all unless atoms have IDs*
- Atoms in the simulation to do not have IDs, so this style
- of velocity creation cannot be performed.
-
-*Cannot use wall in periodic dimension*
- Self-explanatory.
-
-*Cannot use write_restart fileper without % in restart file name*
- Self-explanatory.
-
-*Cannot use write_restart nfile without % in restart file name*
- Self-explanatory.
-
-*Cannot wiggle and shear fix wall/gran*
- Cannot specify both options at the same time.
-
-*Cannot write to restart file - MPI error: %s*
- This error was generated by MPI when reading/writing an MPI-IO restart
- file.
-
-*Cannot yet use KSpace solver with grid with comm style tiled*
- This is current restriction in LAMMPS.
-
-*Cannot yet use comm_style tiled with multi-mode comm*
- Self-explanatory.
-
-*Cannot yet use comm_style tiled with triclinic box*
- Self-explanatory.
-
-*Cannot yet use compute tally with Kokkos*
- This feature is not yet supported.
-
-*Cannot yet use fix bond/break with this improper style*
- This is a current restriction in LAMMPS.
-
-*Cannot yet use fix bond/create with this improper style*
- This is a current restriction in LAMMPS.
-
-*Cannot yet use minimize with Kokkos*
- This feature is not yet supported.
-
-*Cannot yet use pair hybrid with Kokkos*
- This feature is not yet supported.
-
-*Cannot zero Langevin force of 0 atoms*
- The group has zero atoms, so you cannot request its force
- be zeroed.
-
-*Cannot zero gld force for zero atoms*
- There are no atoms currently in the group.
-
-*Cannot zero momentum of no atoms*
- Self-explanatory.
-
-*Change_box command before simulation box is defined*
- Self-explanatory.
-
-*Change_box volume used incorrectly*
- The "dim volume" option must be used immediately following one or two
- settings for "dim1 ..." (and optionally "dim2 ...") and must be for a
- different dimension, i.e. dim != dim1 and dim != dim2.
-
-*Chunk/atom compute does not exist for compute angmom/chunk*
- Self-explanatory.
-
-*Chunk/atom compute does not exist for compute com/chunk*
- Self-explanatory.
-
-*Chunk/atom compute does not exist for compute gyration/chunk*
- Self-explanatory.
-
-*Chunk/atom compute does not exist for compute inertia/chunk*
- Self-explanatory.
-
-*Chunk/atom compute does not exist for compute msd/chunk*
- Self-explanatory.
-
-*Chunk/atom compute does not exist for compute omega/chunk*
- Self-explanatory.
-
-*Chunk/atom compute does not exist for compute property/chunk*
- Self-explanatory.
-
-*Chunk/atom compute does not exist for compute temp/chunk*
- Self-explanatory.
-
-*Chunk/atom compute does not exist for compute torque/chunk*
- Self-explanatory.
-
-*Chunk/atom compute does not exist for compute vcm/chunk*
- Self-explanatory.
-
-*Chunk/atom compute does not exist for fix ave/chunk*
- Self-explanatory.
-
-*Comm tiled invalid index in box drop brick*
- Internal error check in comm_style tiled which should not occur.
- Contact the developers.
-
-*Comm tiled mis-match in box drop brick*
- Internal error check in comm_style tiled which should not occur.
- Contact the developers.
-
-*Comm_modify group != atom_modify first group*
- Self-explanatory.
-
-*Communication cutoff for comm_style tiled cannot exceed periodic box length*
- Self-explanatory.
-
-*Communication cutoff too small for SNAP micro load balancing*
- This can happen if you change the neighbor skin after your pair_style
- command or if your box dimensions grow during a run. You can set the
- cutoff explicitly via the comm_modify cutoff command.
-
-*Compute %s does not allow use of dynamic group*
- Dynamic groups have not yet been enabled for this compute.
-
-*Compute ID for compute chunk /atom does not exist*
- Self-explanatory.
-
-*Compute ID for compute chunk/atom does not exist*
- Self-explanatory.
-
-*Compute ID for compute reduce does not exist*
- Self-explanatory.
-
-*Compute ID for compute slice does not exist*
- Self-explanatory.
-
-*Compute ID for fix ave/atom does not exist*
- Self-explanatory.
-
-*Compute ID for fix ave/chunk does not exist*
- Self-explanatory.
-
-*Compute ID for fix ave/correlate does not exist*
- Self-explanatory.
-
-*Compute ID for fix ave/histo does not exist*
- Self-explanatory.
-
-*Compute ID for fix ave/spatial does not exist*
- Self-explanatory.
-
-*Compute ID for fix ave/time does not exist*
- Self-explanatory.
-
-*Compute ID for fix store/state does not exist*
- Self-explanatory.
-
-*Compute ID for fix vector does not exist*
- Self-explanatory.
-
-*Compute ID must be alphanumeric or underscore characters*
- Self-explanatory.
-
-*Compute angle/local used when angles are not allowed*
- The atom style does not support angles.
-
-*Compute angmom/chunk does not use chunk/atom compute*
- The style of the specified compute is not chunk/atom.
-
-*Compute body/local requires atom style body*
- Self-explanatory.
-
-*Compute bond/local used when bonds are not allowed*
- The atom style does not support bonds.
-
-*Compute centro/atom requires a pair style be defined*
- This is because the computation of the centro-symmetry values
- uses a pairwise neighbor list.
-
-*Compute chunk/atom bin/cylinder radius is too large for periodic box*
- Radius cannot be bigger than 1/2 of a non-axis periodic dimention.
-
-*Compute chunk/atom bin/sphere radius is too large for periodic box*
- Radius cannot be bigger than 1/2 of any periodic dimention.
-
-*Compute chunk/atom compute array is accessed out-of-range*
- The index for the array is out of bounds.
-
-*Compute chunk/atom compute does not calculate a per-atom array*
- Self-explanatory.
-
-*Compute chunk/atom compute does not calculate a per-atom vector*
- Self-explanatory.
-
-*Compute chunk/atom compute does not calculate per-atom values*
- Self-explanatory.
-
-*Compute chunk/atom cylinder axis must be z for 2d*
- Self-explanatory.
-
-*Compute chunk/atom fix array is accessed out-of-range*
- the index for the array is out of bounds.
-
-*Compute chunk/atom fix does not calculate a per-atom array*
- Self-explanatory.
-
-*Compute chunk/atom fix does not calculate a per-atom vector*
- Self-explanatory.
-
-*Compute chunk/atom fix does not calculate per-atom values*
- Self-explanatory.
-
-*Compute chunk/atom for triclinic boxes requires units reduced*
- Self-explanatory.
-
-*Compute chunk/atom ids once but nchunk is not once*
- You cannot assign chunks IDs to atom permanently if the number of
- chunks may change.
-
-*Compute chunk/atom molecule for non-molecular system*
- Self-explanatory.
-
-*Compute chunk/atom sphere z origin must be 0.0 for 2d*
- Self-explanatory.
-
-*Compute chunk/atom stores no IDs for compute property/chunk*
- It will only store IDs if its compress option is enabled.
-
-*Compute chunk/atom stores no coord1 for compute property/chunk*
- Only certain binning options for comptue chunk/atom store coordinates.
-
-*Compute chunk/atom stores no coord2 for compute property/chunk*
- Only certain binning options for comptue chunk/atom store coordinates.
-
-*Compute chunk/atom stores no coord3 for compute property/chunk*
- Only certain binning options for comptue chunk/atom store coordinates.
-
-*Compute chunk/atom variable is not atom-style variable*
- Self-explanatory.
-
-*Compute chunk/atom without bins cannot use discard mixed*
- That discard option only applies to the binning styles.
-
-*Compute cluster/atom cutoff is longer than pairwise cutoff*
- Cannot identify clusters beyond cutoff.
-
-*Compute cluster/atom requires a pair style be defined*
- This is so that the pair style defines a cutoff distance which
- is used to find clusters.
-
-*Compute cna/atom cutoff is longer than pairwise cutoff*
- Self-explantory.
-
-*Compute cna/atom requires a pair style be defined*
- Self-explantory.
-
-*Compute com/chunk does not use chunk/atom compute*
- The style of the specified compute is not chunk/atom.
-
-*Compute contact/atom requires a pair style be defined*
- Self-explantory.
-
-*Compute contact/atom requires atom style sphere*
- Self-explanatory.
-
-*Compute coord/atom cutoff is longer than pairwise cutoff*
- Cannot compute coordination at distances longer than the pair cutoff,
- since those atoms are not in the neighbor list.
-
-*Compute coord/atom requires a pair style be defined*
- Self-explantory.
-
-*Compute damage/atom requires peridynamic potential*
- Damage is a Peridynamic-specific metric. It requires you
- to be running a Peridynamics simulation.
-
-*Compute dihedral/local used when dihedrals are not allowed*
- The atom style does not support dihedrals.
-
-*Compute dilatation/atom cannot be used with this pair style*
- Self-explanatory.
-
-*Compute dilatation/atom requires Peridynamic pair style*
- Self-explanatory.
-
-*Compute does not allow an extra compute or fix to be reset*
- This is an internal LAMMPS error. Please report it to the
- developers.
-
-*Compute erotate/asphere requires atom style ellipsoid or line or tri*
- Self-explanatory.
-
-*Compute erotate/asphere requires extended particles*
- This compute cannot be used with point paritlces.
-
-*Compute erotate/rigid with non-rigid fix-ID*
- Self-explanatory.
-
-*Compute erotate/sphere requires atom style sphere*
- Self-explanatory.
-
-*Compute erotate/sphere/atom requires atom style sphere*
- Self-explanatory.
-
-*Compute event/displace has invalid fix event assigned*
- This is an internal LAMMPS error. Please report it to the
- developers.
-
-*Compute group/group group ID does not exist*
- Self-explanatory.
-
-*Compute gyration/chunk does not use chunk/atom compute*
- The style of the specified compute is not chunk/atom.
-
-*Compute heat/flux compute ID does not compute ke/atom*
- Self-explanatory.
-
-*Compute heat/flux compute ID does not compute pe/atom*
- Self-explanatory.
-
-*Compute heat/flux compute ID does not compute stress/atom*
- Self-explanatory.
-
-*Compute hexorder/atom cutoff is longer than pairwise cutoff*
- Cannot compute order parameter beyond cutoff.
-
-*Compute hexorder/atom requires a pair style be defined*
- Self-explantory.
-
-*Compute improper/local used when impropers are not allowed*
- The atom style does not support impropers.
-
-*Compute inertia/chunk does not use chunk/atom compute*
- The style of the specified compute is not chunk/atom.
-
-*Compute ke/rigid with non-rigid fix-ID*
- Self-explanatory.
-
-*Compute msd/chunk does not use chunk/atom compute*
- The style of the specified compute is not chunk/atom.
-
-*Compute msd/chunk nchunk is not static*
- This is required because the MSD cannot be computed consistently if
- the number of chunks is changing. Compute chunk/atom allows setting
- nchunk to be static.
-
-*Compute nve/asphere requires atom style ellipsoid*
- Self-explanatory.
-
-*Compute nvt/nph/npt asphere requires atom style ellipsoid*
- Self-explanatory.
-
-*Compute nvt/nph/npt body requires atom style body*
- Self-explanatory.
-
-*Compute omega/chunk does not use chunk/atom compute*
- The style of the specified compute is not chunk/atom.
-
-*Compute orientorder/atom cutoff is longer than pairwise cutoff*
- Cannot compute order parameter beyond cutoff.
-
-*Compute orientorder/atom requires a pair style be defined*
- Self-explantory.
-
-*Compute pair must use group all*
- Pair styles accumlate energy on all atoms.
-
-*Compute pe must use group all*
- Energies computed by potentials (pair, bond, etc) are computed on all
- atoms.
-
-*Compute plasticity/atom cannot be used with this pair style*
- Self-explanatory.
-
-*Compute plasticity/atom requires Peridynamic pair style*
- Self-explanatory.
-
-*Compute pressure must use group all*
- Virial contributions computed by potentials (pair, bond, etc) are
- computed on all atoms.
-
-*Compute pressure requires temperature ID to include kinetic energy*
- The keflag cannot be used unless a temperature compute is provided.
-
-*Compute pressure temperature ID does not compute temperature*
- The compute ID assigned to a pressure computation must compute
- temperature.
-
-*Compute property/atom floating point vector does not exist*
- The command is accessing a vector added by the fix property/atom
- command, that does not exist.
-
-*Compute property/atom for atom property that isn't allocated*
- Self-explanatory.
-
-*Compute property/atom integer vector does not exist*
- The command is accessing a vector added by the fix property/atom
- command, that does not exist.
-
-*Compute property/chunk does not use chunk/atom compute*
- The style of the specified compute is not chunk/atom.
-
-*Compute property/local cannot use these inputs together*
- Only inputs that generate the same number of datums can be used
- togther. E.g. bond and angle quantities cannot be mixed.
-
-*Compute property/local does not (yet) work with atom_style template*
- Self-explanatory.
-
-*Compute property/local for property that isn't allocated*
- Self-explanatory.
-
-*Compute rdf requires a pair style be defined*
- Self-explanatory.
-
-*Compute reduce compute array is accessed out-of-range*
- An index for the array is out of bounds.
-
-*Compute reduce compute calculates global values*
- A compute that calculates peratom or local values is required.
-
-*Compute reduce compute does not calculate a local array*
- Self-explanatory.
-
-*Compute reduce compute does not calculate a local vector*
- Self-explanatory.
-
-*Compute reduce compute does not calculate a per-atom array*
- Self-explanatory.
-
-*Compute reduce compute does not calculate a per-atom vector*
- Self-explanatory.
-
-*Compute reduce fix array is accessed out-of-range*
- An index for the array is out of bounds.
-
-*Compute reduce fix calculates global values*
- A fix that calculates peratom or local values is required.
-
-*Compute reduce fix does not calculate a local array*
- Self-explanatory.
-
-*Compute reduce fix does not calculate a local vector*
- Self-explanatory.
-
-*Compute reduce fix does not calculate a per-atom array*
- Self-explanatory.
-
-*Compute reduce fix does not calculate a per-atom vector*
- Self-explanatory.
-
-*Compute reduce replace requires min or max mode*
- Self-explanatory.
-
-*Compute reduce variable is not atom-style variable*
- Self-explanatory.
-
-*Compute slice compute array is accessed out-of-range*
- An index for the array is out of bounds.
-
-*Compute slice compute does not calculate a global array*
- Self-explanatory.
-
-*Compute slice compute does not calculate a global vector*
- Self-explanatory.
-
-*Compute slice compute does not calculate global vector or array*
- Self-explanatory.
-
-*Compute slice compute vector is accessed out-of-range*
- The index for the vector is out of bounds.
-
-*Compute slice fix array is accessed out-of-range*
- An index for the array is out of bounds.
-
-*Compute slice fix does not calculate a global array*
- Self-explanatory.
-
-*Compute slice fix does not calculate a global vector*
- Self-explanatory.
-
-*Compute slice fix does not calculate global vector or array*
- Self-explanatory.
-
-*Compute slice fix vector is accessed out-of-range*
- The index for the vector is out of bounds.
-
-*Compute sna/atom cutoff is longer than pairwise cutoff*
- Self-explanatory.
-
-*Compute sna/atom requires a pair style be defined*
- Self-explanatory.
-
-*Compute snad/atom cutoff is longer than pairwise cutoff*
- Self-explanatory.
-
-*Compute snad/atom requires a pair style be defined*
- Self-explanatory.
-
-*Compute snav/atom cutoff is longer than pairwise cutoff*
- Self-explanatory.
-
-*Compute snav/atom requires a pair style be defined*
- Self-explanatory.
-
-*Compute stress/atom temperature ID does not compute temperature*
- The specified compute must compute temperature.
-
-*Compute temp/asphere requires atom style ellipsoid*
- Self-explanatory.
-
-*Compute temp/asphere requires extended particles*
- This compute cannot be used with point paritlces.
-
-*Compute temp/body requires atom style body*
- Self-explanatory.
-
-*Compute temp/body requires bodies*
- This compute can only be applied to body particles.
-
-*Compute temp/chunk does not use chunk/atom compute*
- The style of the specified compute is not chunk/atom.
-
-*Compute temp/cs requires ghost atoms store velocity*
- Use the comm_modify vel yes command to enable this.
-
-*Compute temp/cs used when bonds are not allowed*
- This compute only works on pairs of bonded particles.
-
-*Compute temp/partial cannot use vz for 2d systemx*
- Self-explanatory.
-
-*Compute temp/profile cannot bin z for 2d systems*
- Self-explanatory.
-
-*Compute temp/profile cannot use vz for 2d systemx*
- Self-explanatory.
-
-*Compute temp/sphere requires atom style sphere*
- Self-explanatory.
-
-*Compute ti kspace style does not exist*
- Self-explanatory.
-
-*Compute ti pair style does not exist*
- Self-explanatory.
-
-*Compute ti tail when pair style does not compute tail corrections*
- Self-explanatory.
-
-*Compute torque/chunk does not use chunk/atom compute*
- The style of the specified compute is not chunk/atom.
-
-*Compute used in dump between runs is not current*
- The compute was not invoked on the current timestep, therefore it
- cannot be used in a dump between runs.
-
-*Compute used in variable between runs is not current*
- Computes cannot be invoked by a variable in between runs. Thus they
- must have been evaluated on the last timestep of the previous run in
- order for their value(s) to be accessed. See the doc page for the
- variable command for more info.
-
-*Compute used in variable thermo keyword between runs is not current*
- Some thermo keywords rely on a compute to calculate their value(s).
- Computes cannot be invoked by a variable in between runs. Thus they
- must have been evaluated on the last timestep of the previous run in
- order for their value(s) to be accessed. See the doc page for the
- variable command for more info.
-
-*Compute vcm/chunk does not use chunk/atom compute*
- The style of the specified compute is not chunk/atom.
-
-*Computed temperature for fix temp/berendsen cannot be 0.0*
- Self-explanatory.
-
-*Computed temperature for fix temp/rescale cannot be 0.0*
- Cannot rescale the temperature to a new value if the current
- temperature is 0.0.
-
-*Core/shell partner atom not found*
- Could not find one of the atoms in the bond pair.
-
-*Core/shell partners were not all found*
- Could not find or more atoms in the bond pairs.
-
-*Could not adjust g_ewald_6*
- The Newton-Raphson solver failed to converge to a good value for
- g_ewald. This error should not occur for typical problems. Please
- send an email to the developers.
-
-*Could not compute g_ewald*
- The Newton-Raphson solver failed to converge to a good value for
- g_ewald. This error should not occur for typical problems. Please
- send an email to the developers.
-
-*Could not compute grid size*
- The code is unable to compute a grid size consistent with the desired
- accuracy. This error should not occur for typical problems. Please
- send an email to the developers.
-
-*Could not compute grid size for Coulomb interaction*
- The code is unable to compute a grid size consistent with the desired
- accuracy. This error should not occur for typical problems. Please
- send an email to the developers.
-
-*Could not compute grid size for Dispersion*
- The code is unable to compute a grid size consistent with the desired
- accuracy. This error should not occur for typical problems. Please
- send an email to the developers.
-
-*Could not create 3d FFT plan*
- The FFT setup for the PPPM solver failed, typically due
- to lack of memory. This is an unusual error. Check the
- size of the FFT grid you are requesting.
-
-*Could not create 3d grid of processors*
- The specified constraints did not allow a Px by Py by Pz grid to be
- created where Px * Py * Pz = P = total number of processors.
-
-*Could not create 3d remap plan*
- The FFT setup in pppm failed.
-
-*Could not create Python function arguments*
- This is an internal Python error, possibly because the number
- of inputs to the function is too large.
-
-*Could not create numa grid of processors*
- The specified constraints did not allow this style of grid to be
- created. Usually this is because the total processor count is not a
- multiple of the cores/node or the user specified processor count is >
- 1 in one of the dimensions.
-
-*Could not create twolevel 3d grid of processors*
- The specified constraints did not allow this style of grid to be
- created.
-
-*Could not evaluate Python function input variable*
- Self-explanatory.
-
-*Could not find Python function*
- The provided Python code was run successfully, but it not
- define a callable function with the required name.
-
-*Could not find atom_modify first group ID*
- Self-explanatory.
-
-*Could not find change_box group ID*
- Group ID used in the change_box command does not exist.
-
-*Could not find compute ID for PRD*
- Self-explanatory.
-
-*Could not find compute ID for TAD*
- Self-explanatory.
-
-*Could not find compute ID for temperature bias*
- Self-explanatory.
-
-*Could not find compute ID to delete*
- Self-explanatory.
-
-*Could not find compute displace/atom fix ID*
- Self-explanatory.
-
-*Could not find compute event/displace fix ID*
- Self-explanatory.
-
-*Could not find compute group ID*
- Self-explanatory.
-
-*Could not find compute heat/flux compute ID*
- Self-explanatory.
-
-*Could not find compute msd fix ID*
- Self-explanatory.
-
-*Could not find compute msd/chunk fix ID*
- The compute creates an internal fix, which has been deleted.
-
-*Could not find compute pressure temperature ID*
- The compute ID for calculating temperature does not exist.
-
-*Could not find compute stress/atom temperature ID*
- Self-explanatory.
-
-*Could not find compute vacf fix ID*
- Self-explanatory.
-
-*Could not find compute/voronoi surface group ID*
- Self-explanatory.
-
-*Could not find compute_modify ID*
- Self-explanatory.
-
-*Could not find custom per-atom property ID*
- Self-explanatory.
-
-*Could not find delete_atoms group ID*
- Group ID used in the delete_atoms command does not exist.
-
-*Could not find delete_atoms region ID*
- Region ID used in the delete_atoms command does not exist.
-
-*Could not find displace_atoms group ID*
- Group ID used in the displace_atoms command does not exist.
-
-*Could not find dump custom compute ID*
- Self-explanatory.
-
-*Could not find dump custom fix ID*
- Self-explanatory.
-
-*Could not find dump custom variable name*
- Self-explanatory.
-
-*Could not find dump group ID*
- A group ID used in the dump command does not exist.
-
-*Could not find dump local compute ID*
- Self-explanatory.
-
-*Could not find dump local fix ID*
- Self-explanatory.
-
-*Could not find dump modify compute ID*
- Self-explanatory.
-
-*Could not find dump modify custom atom floating point property ID*
- Self-explanatory.
-
-*Could not find dump modify custom atom integer property ID*
- Self-explanatory.
-
-*Could not find dump modify fix ID*
- Self-explanatory.
-
-*Could not find dump modify variable name*
- Self-explanatory.
-
-*Could not find fix ID to delete*
- Self-explanatory.
-
-*Could not find fix adapt storage fix ID*
- This should not happen unless you explicitly deleted
- a secondary fix that fix adapt created internally.
-
-*Could not find fix gcmc exclusion group ID*
- Self-explanatory.
-
-*Could not find fix gcmc rotation group ID*
- Self-explanatory.
-
-*Could not find fix group ID*
- A group ID used in the fix command does not exist.
-
-*Could not find fix msst compute ID*
- Self-explanatory.
-
-*Could not find fix poems group ID*
- A group ID used in the fix poems command does not exist.
-
-*Could not find fix recenter group ID*
- A group ID used in the fix recenter command does not exist.
-
-*Could not find fix rigid group ID*
- A group ID used in the fix rigid command does not exist.
-
-*Could not find fix srd group ID*
- Self-explanatory.
-
-*Could not find fix_modify ID*
- A fix ID used in the fix_modify command does not exist.
-
-*Could not find fix_modify pressure ID*
- The compute ID for computing pressure does not exist.
-
-*Could not find fix_modify temperature ID*
- The compute ID for computing temperature does not exist.
-
-*Could not find group clear group ID*
- Self-explanatory.
-
-*Could not find group delete group ID*
- Self-explanatory.
-
-*Could not find pair fix ID*
- A fix is created internally by the pair style to store shear
- history information. You cannot delete it.
-
-*Could not find set group ID*
- Group ID specified in set command does not exist.
-
-*Could not find specified fix gcmc group ID*
- Self-explanatory.
-
-*Could not find thermo compute ID*
- Compute ID specified in thermo_style command does not exist.
-
-*Could not find thermo custom compute ID*
- The compute ID needed by thermo style custom to compute a requested
- quantity does not exist.
-
-*Could not find thermo custom fix ID*
- The fix ID needed by thermo style custom to compute a requested
- quantity does not exist.
-
-*Could not find thermo custom variable name*
- Self-explanatory.
-
-*Could not find thermo fix ID*
- Fix ID specified in thermo_style command does not exist.
-
-*Could not find thermo variable name*
- Self-explanatory.
-
-*Could not find thermo_modify pressure ID*
- The compute ID needed by thermo style custom to compute pressure does
- not exist.
-
-*Could not find thermo_modify temperature ID*
- The compute ID needed by thermo style custom to compute temperature does
- not exist.
-
-*Could not find undump ID*
- A dump ID used in the undump command does not exist.
-
-*Could not find velocity group ID*
- A group ID used in the velocity command does not exist.
-
-*Could not find velocity temperature ID*
- The compute ID needed by the velocity command to compute temperature
- does not exist.
-
-*Could not find/initialize a specified accelerator device*
- Could not initialize at least one of the devices specified for the gpu
- package
-
-*Could not grab element entry from EIM potential file*
- Self-explanatory
-
-*Could not grab global entry from EIM potential file*
- Self-explanatory.
-
-*Could not grab pair entry from EIM potential file*
- Self-explanatory.
-
-*Could not initialize embedded Python*
- The main module in Python was not accessible.
-
-*Could not open Python file*
- The specified file of Python code cannot be opened. Check that the
- path and name are correct.
-
-*Could not process Python file*
- The Python code in the specified file was not run sucessfully by
- Python, probably due to errors in the Python code.
-
-*Could not process Python string*
- The Python code in the here string was not run sucessfully by Python,
- probably due to errors in the Python code.
-
-*Coulomb PPPMDisp order has been reduced below minorder*
- The default minimum order is 2. This can be reset by the
- kspace_modify minorder command.
-
-*Coulomb cut not supported in pair_style buck/long/coul/coul*
- Must use long-range Coulombic interactions.
-
-*Coulomb cut not supported in pair_style lj/long/coul/long*
- Must use long-range Coulombic interactions.
-
-*Coulomb cut not supported in pair_style lj/long/tip4p/long*
- Must use long-range Coulombic interactions.
-
-*Coulomb cutoffs of pair hybrid sub-styles do not match*
- If using a Kspace solver, all Coulomb cutoffs of long pair styles must
- be the same.
-
-*Coulombic cut not supported in pair_style lj/long/dipole/long*
- Must use long-range Coulombic interactions.
-
-*Cound not find dump_modify ID*
- Self-explanatory.
-
-*Create_atoms command before simulation box is defined*
- The create_atoms command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*Create_atoms molecule has atom IDs, but system does not*
- The atom_style id command can be used to force atom IDs to be stored.
-
-*Create_atoms molecule must have atom types*
- The defined molecule does not specify atom types.
-
-*Create_atoms molecule must have coordinates*
- The defined molecule does not specify coordinates.
-
-*Create_atoms region ID does not exist*
- A region ID used in the create_atoms command does not exist.
-
-*Create_bonds command before simulation box is defined*
- Self-explanatory.
-
-*Create_bonds command requires no kspace_style be defined*
- This is so that atom pairs that are already bonded to not appear
- in the neighbor list.
-
-*Create_bonds command requires special_bonds 1-2 weights be 0.0*
- This is so that atom pairs that are already bonded to not appear in
- the neighbor list.
-
-*Create_bonds max distance > neighbor cutoff*
- Can only create bonds for atom pairs that will be in neighbor list.
-
-*Create_bonds requires a pair style be defined*
- Self-explanatory.
-
-*Create_box region ID does not exist*
- Self-explanatory.
-
-*Create_box region does not support a bounding box*
- Not all regions represent bounded volumes. You cannot use
- such a region with the create_box command.
-
-*Custom floating point vector for fix store/state does not exist*
- The command is accessing a vector added by the fix property/atom
- command, that does not exist.
-
-*Custom integer vector for fix store/state does not exist*
- The command is accessing a vector added by the fix property/atom
- command, that does not exist.
-
-*Custom per-atom property ID is not floating point*
- Self-explanatory.
-
-*Custom per-atom property ID is not integer*
- Self-explanatory.
-
-*Cut-offs missing in pair_style lj/long/dipole/long*
- Self-explanatory.
-
-*Cutoffs missing in pair_style buck/long/coul/long*
- Self-exlanatory.
-
-*Cutoffs missing in pair_style lj/long/coul/long*
- Self-explanatory.
-
-*Cyclic loop in joint connections*
- Fix poems cannot (yet) work with coupled bodies whose joints connect
- the bodies in a ring (or cycle).
-
-*Degenerate lattice primitive vectors*
- Invalid set of 3 lattice vectors for lattice command.
-
-*Delete region ID does not exist*
- Self-explanatory.
-
-*Delete_atoms command before simulation box is defined*
- The delete_atoms command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*Delete_atoms cutoff > max neighbor cutoff*
- Can only delete atoms in atom pairs that will be in neighbor list.
-
-*Delete_atoms mol yes requires atom attribute molecule*
- Cannot use this option with a non-molecular system.
-
-*Delete_atoms requires a pair style be defined*
- This is because atom deletion within a cutoff uses a pairwise
- neighbor list.
-
-*Delete_bonds command before simulation box is defined*
- The delete_bonds command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*Delete_bonds command with no atoms existing*
- No atoms are yet defined so the delete_bonds command cannot be used.
-
-*Deposition region extends outside simulation box*
- Self-explanatory.
-
-*Did not assign all atoms correctly*
- Atoms read in from a data file were not assigned correctly to
- processors. This is likely due to some atom coordinates being
- outside a non-periodic simulation box.
-
-*Did not assign all restart atoms correctly*
- Atoms read in from the restart file were not assigned correctly to
- processors. This is likely due to some atom coordinates being outside
- a non-periodic simulation box. Normally this should not happen. You
- may wish to use the "remap" option on the read_restart command to see
- if this helps.
-
-*Did not find all elements in MEAM library file*
- The requested elements were not found in the MEAM file.
-
-*Did not find fix shake partner info*
- Could not find bond partners implied by fix shake command. This error
- can be triggered if the delete_bonds command was used before fix
- shake, and it removed bonds without resetting the 1-2, 1-3, 1-4
- weighting list via the special keyword.
-
-*Did not find keyword in table file*
- Keyword used in pair_coeff command was not found in table file.
-
-*Did not set pressure for fix rigid/nph*
- The press keyword must be specified.
-
-*Did not set temp for fix rigid/nvt/small*
- Self-explanatory.
-
-*Did not set temp or press for fix rigid/npt/small*
- Self-explanatory.
-
-*Did not set temperature for fix rigid/nvt*
- The temp keyword must be specified.
-
-*Did not set temperature or pressure for fix rigid/npt*
- The temp and press keywords must be specified.
-
-*Dihedral atom missing in delete_bonds*
- The delete_bonds command cannot find one or more atoms in a particular
- dihedral on a particular processor. The pairwise cutoff is too short
- or the atoms are too far apart to make a valid dihedral.
-
-*Dihedral atom missing in set command*
- The set command cannot find one or more atoms in a particular dihedral
- on a particular processor. The pairwise cutoff is too short or the
- atoms are too far apart to make a valid dihedral.
-
-*Dihedral atoms %d %d %d %d missing on proc %d at step %ld*
- One or more of 4 atoms needed to compute a particular dihedral are
- missing on this processor. Typically this is because the pairwise
- cutoff is set too short or the dihedral has blown apart and an atom is
- too far away.
-
-*Dihedral atoms missing on proc %d at step %ld*
- One or more of 4 atoms needed to compute a particular dihedral are
- missing on this processor. Typically this is because the pairwise
- cutoff is set too short or the dihedral has blown apart and an atom is
- too far away.
-
-*Dihedral charmm is incompatible with Pair style*
- Dihedral style charmm must be used with a pair style charmm
- in order for the 1-4 epsilon/sigma parameters to be defined.
-
-*Dihedral coeff for hybrid has invalid style*
- Dihedral style hybrid uses another dihedral style as one of its
- coefficients. The dihedral style used in the dihedral_coeff command
- or read from a restart file is not recognized.
-
-*Dihedral coeffs are not set*
- No dihedral coefficients have been assigned in the data file or via
- the dihedral_coeff command.
-
-*Dihedral style hybrid cannot have hybrid as an argument*
- Self-explanatory.
-
-*Dihedral style hybrid cannot have none as an argument*
- Self-explanatory.
-
-*Dihedral style hybrid cannot use same dihedral style twice*
- Self-explanatory.
-
-*Dihedral/improper extent > half of periodic box length*
- This error was detected by the neigh_modify check yes setting. It is
- an error because the dihedral atoms are so far apart it is ambiguous
- how it should be defined.
-
-*Dihedral_coeff command before dihedral_style is defined*
- Coefficients cannot be set in the data file or via the dihedral_coeff
- command until an dihedral_style has been assigned.
-
-*Dihedral_coeff command before simulation box is defined*
- The dihedral_coeff command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*Dihedral_coeff command when no dihedrals allowed*
- The chosen atom style does not allow for dihedrals to be defined.
-
-*Dihedral_style command when no dihedrals allowed*
- The chosen atom style does not allow for dihedrals to be defined.
-
-*Dihedrals assigned incorrectly*
- Dihedrals read in from the data file were not assigned correctly to
- atoms. This means there is something invalid about the topology
- definitions.
-
-*Dihedrals defined but no dihedral types*
- The data file header lists dihedrals but no dihedral types.
-
-*Dimension command after simulation box is defined*
- The dimension command cannot be used after a read_data,
- read_restart, or create_box command.
-
-*Dispersion PPPMDisp order has been reduced below minorder*
- The default minimum order is 2. This can be reset by the
- kspace_modify minorder command.
-
-*Displace_atoms command before simulation box is defined*
- The displace_atoms command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*Distance must be > 0 for compute event/displace*
- Self-explanatory.
-
-*Divide by 0 in influence function*
- This should not normally occur. It is likely a problem with your
- model.
-
-*Divide by 0 in influence function of pair peri/lps*
- This should not normally occur. It is likely a problem with your
- model.
-
-*Divide by 0 in variable formula*
- Self-explanatory.
-
-*Domain too large for neighbor bins*
- The domain has become extremely large so that neighbor bins cannot be
- used. Most likely, one or more atoms have been blown out of the
- simulation box to a great distance.
-
-*Double precision is not supported on this accelerator*
- Self-explanatory
-
-*Dump atom/gz only writes compressed files*
- The dump atom/gz output file name must have a .gz suffix.
-
-*Dump cfg arguments can not mix xs|ys|zs with xsu|ysu|zsu*
- Self-explanatory.
-
-*Dump cfg arguments must start with 'mass type xs ys zs' or 'mass type xsu ysu zsu'*
- This is a requirement of the CFG output format. See the dump cfg doc
- page for more details.
-
-*Dump cfg requires one snapshot per file*
- Use the wildcard "*" character in the filename.
-
-*Dump cfg/gz only writes compressed files*
- The dump cfg/gz output file name must have a .gz suffix.
-
-*Dump custom and fix not computed at compatible times*
- The fix must produce per-atom quantities on timesteps that dump custom
- needs them.
-
-*Dump custom compute does not calculate per-atom array*
- Self-explanatory.
-
-*Dump custom compute does not calculate per-atom vector*
- Self-explanatory.
-
-*Dump custom compute does not compute per-atom info*
- Self-explanatory.
-
-*Dump custom compute vector is accessed out-of-range*
- Self-explanatory.
-
-*Dump custom fix does not compute per-atom array*
- Self-explanatory.
-
-*Dump custom fix does not compute per-atom info*
- Self-explanatory.
-
-*Dump custom fix does not compute per-atom vector*
- Self-explanatory.
-
-*Dump custom fix vector is accessed out-of-range*
- Self-explanatory.
-
-*Dump custom variable is not atom-style variable*
- Only atom-style variables generate per-atom quantities, needed for
- dump output.
-
-*Dump custom/gz only writes compressed files*
- The dump custom/gz output file name must have a .gz suffix.
-
-*Dump dcd of non-matching # of atoms*
- Every snapshot written by dump dcd must contain the same # of atoms.
-
-*Dump dcd requires sorting by atom ID*
- Use the dump_modify sort command to enable this.
-
-*Dump every variable returned a bad timestep*
- The variable must return a timestep greater than the current timestep.
-
-*Dump file MPI-IO output not allowed with % in filename*
- This is because a % signifies one file per processor and MPI-IO
- creates one large file for all processors.
-
-*Dump file does not contain requested snapshot*
- Self-explanatory.
-
-*Dump file is incorrectly formatted*
- Self-explanatory.
-
-*Dump image body yes requires atom style body*
- Self-explanatory.
-
-*Dump image bond not allowed with no bond types*
- Self-explanatory.
-
-*Dump image cannot perform sorting*
- Self-explanatory.
-
-*Dump image line requires atom style line*
- Self-explanatory.
-
-*Dump image persp option is not yet supported*
- Self-explanatory.
-
-*Dump image requires one snapshot per file*
- Use a "*" in the filename.
-
-*Dump image tri requires atom style tri*
- Self-explanatory.
-
-*Dump local and fix not computed at compatible times*
- The fix must produce per-atom quantities on timesteps that dump local
- needs them.
-
-*Dump local attributes contain no compute or fix*
- Self-explanatory.
-
-*Dump local cannot sort by atom ID*
- This is because dump local does not really dump per-atom info.
-
-*Dump local compute does not calculate local array*
- Self-explanatory.
-
-*Dump local compute does not calculate local vector*
- Self-explanatory.
-
-*Dump local compute does not compute local info*
- Self-explanatory.
-
-*Dump local compute vector is accessed out-of-range*
- Self-explanatory.
-
-*Dump local count is not consistent across input fields*
- Every column of output must be the same length.
-
-*Dump local fix does not compute local array*
- Self-explanatory.
-
-*Dump local fix does not compute local info*
- Self-explanatory.
-
-*Dump local fix does not compute local vector*
- Self-explanatory.
-
-*Dump local fix vector is accessed out-of-range*
- Self-explanatory.
-
-*Dump modify bcolor not allowed with no bond types*
- Self-explanatory.
-
-*Dump modify bdiam not allowed with no bond types*
- Self-explanatory.
-
-*Dump modify compute ID does not compute per-atom array*
- Self-explanatory.
-
-*Dump modify compute ID does not compute per-atom info*
- Self-explanatory.
-
-*Dump modify compute ID does not compute per-atom vector*
- Self-explanatory.
-
-*Dump modify compute ID vector is not large enough*
- Self-explanatory.
-
-*Dump modify element names do not match atom types*
- Number of element names must equal number of atom types.
-
-*Dump modify fix ID does not compute per-atom array*
- Self-explanatory.
-
-*Dump modify fix ID does not compute per-atom info*
- Self-explanatory.
-
-*Dump modify fix ID does not compute per-atom vector*
- Self-explanatory.
-
-*Dump modify fix ID vector is not large enough*
- Self-explanatory.
-
-*Dump modify variable is not atom-style variable*
- Self-explanatory.
-
-*Dump sort column is invalid*
- Self-explanatory.
-
-*Dump xtc requires sorting by atom ID*
- Use the dump_modify sort command to enable this.
-
-*Dump xyz/gz only writes compressed files*
- The dump xyz/gz output file name must have a .gz suffix.
-
-*Dump_modify buffer yes not allowed for this style*
- Self-explanatory.
-
-*Dump_modify format string is too short*
- There are more fields to be dumped in a line of output than your
- format string specifies.
-
-*Dump_modify region ID does not exist*
- Self-explanatory.
-
-*Dumping an atom property that isn't allocated*
- The chosen atom style does not define the per-atom quantity being
- dumped.
-
-*Duplicate atom IDs exist*
- Self-explanatory.
-
-*Duplicate fields in read_dump command*
- Self-explanatory.
-
-*Duplicate particle in PeriDynamic bond - simulation box is too small*
- This is likely because your box length is shorter than 2 times
- the bond length.
-
-*Electronic temperature dropped below zero*
- Something has gone wrong with the fix ttm electron temperature model.
-
-*Element not defined in potential file*
- The specified element is not in the potential file.
-
-*Empty brackets in variable*
- There is no variable syntax that uses empty brackets. Check
- the variable doc page.
-
-*Energy was not tallied on needed timestep*
- You are using a thermo keyword that requires potentials to
- have tallied energy, but they didn't on this timestep. See the
- variable doc page for ideas on how to make this work.
-
-*Epsilon or sigma reference not set by pair style in PPPMDisp*
- Self-explanatory.
-
-*Epsilon or sigma reference not set by pair style in ewald/n*
- The pair style is not providing the needed epsilon or sigma values.
-
-*Error in vdw spline: inner radius > outer radius*
- A pre-tabulated spline is invalid. Likely a problem with the
- potential parameters.
-
-*Error writing averaged chunk data*
- Something in the output to the file triggered an error.
-
-*Error writing file header*
- Something in the output to the file triggered an error.
-
-*Error writing out correlation data*
- Something in the output to the file triggered an error.
-
-*Error writing out histogram data*
- Something in the output to the file triggered an error.
-
-*Error writing out time averaged data*
- Something in the output to the file triggered an error.
-
-*Failed to allocate %ld bytes for array %s*
- Your LAMMPS simulation has run out of memory. You need to run a
- smaller simulation or on more processors.
-
-*Failed to open FFmpeg pipeline to file %s*
- The specified file cannot be opened. Check that the path and name are
- correct and writable and that the FFmpeg executable can be found and run.
-
-*Failed to reallocate %ld bytes for array %s*
- Your LAMMPS simulation has run out of memory. You need to run a
- smaller simulation or on more processors.
-
-*Fewer SRD bins than processors in some dimension*
- This is not allowed. Make your SRD bin size smaller.
-
-*File variable could not read value*
- Check the file assigned to the variable.
-
-*Final box dimension due to fix deform is < 0.0*
- Self-explanatory.
-
-*Fix %s does not allow use of dynamic group*
- Dynamic groups have not yet been enabled for this fix.
-
-*Fix ID for compute chunk/atom does not exist*
- Self-explanatory.
-
-*Fix ID for compute erotate/rigid does not exist*
- Self-explanatory.
-
-*Fix ID for compute ke/rigid does not exist*
- Self-explanatory.
-
-*Fix ID for compute reduce does not exist*
- Self-explanatory.
-
-*Fix ID for compute slice does not exist*
- Self-explanatory.
-
-*Fix ID for fix ave/atom does not exist*
- Self-explanatory.
-
-*Fix ID for fix ave/chunk does not exist*
- Self-explanatory.
-
-*Fix ID for fix ave/correlate does not exist*
- Self-explanatory.
-
-*Fix ID for fix ave/histo does not exist*
- Self-explanatory.
-
-*Fix ID for fix ave/spatial does not exist*
- Self-explanatory.
-
-*Fix ID for fix ave/time does not exist*
- Self-explanatory.
-
-*Fix ID for fix store/state does not exist*
- Self-explanatory
-
-*Fix ID for fix vector does not exist*
- Self-explanatory.
-
-*Fix ID for read_data does not exist*
- Self-explanatory.
-
-*Fix ID for velocity does not exist*
- Self-explanatory.
-
-*Fix ID must be alphanumeric or underscore characters*
- Self-explanatory.
-
-*Fix SRD: bad bin assignment for SRD advection*
- Something has gone wrong in your SRD model; try using more
- conservative settings.
-
-*Fix SRD: bad search bin assignment*
- Something has gone wrong in your SRD model; try using more
- conservative settings.
-
-*Fix SRD: bad stencil bin for big particle*
- Something has gone wrong in your SRD model; try using more
- conservative settings.
-
-*Fix SRD: too many big particles in bin*
- Reset the ATOMPERBIN parameter at the top of fix_srd.cpp
- to a larger value, and re-compile the code.
-
-*Fix SRD: too many walls in bin*
- This should not happen unless your system has been setup incorrectly.
-
-*Fix adapt interface to this pair style not supported*
- New coding for the pair style would need to be done.
-
-*Fix adapt kspace style does not exist*
- Self-explanatory.
-
-*Fix adapt pair style does not exist*
- Self-explanatory
-
-*Fix adapt pair style param not supported*
- The pair style does not know about the parameter you specified.
-
-*Fix adapt requires atom attribute charge*
- The atom style being used does not specify an atom charge.
-
-*Fix adapt requires atom attribute diameter*
- The atom style being used does not specify an atom diameter.
-
-*Fix adapt type pair range is not valid for pair hybrid sub-style*
- Self-explanatory.
-
-*Fix append/atoms requires a lattice be defined*
- Use the lattice command for this purpose.
-
-*Fix ave/atom compute array is accessed out-of-range*
- Self-explanatory.
-
-*Fix ave/atom compute does not calculate a per-atom array*
- Self-explanatory.
-
-*Fix ave/atom compute does not calculate a per-atom vector*
- A compute used by fix ave/atom must generate per-atom values.
-
-*Fix ave/atom compute does not calculate per-atom values*
- A compute used by fix ave/atom must generate per-atom values.
-
-*Fix ave/atom fix array is accessed out-of-range*
- Self-explanatory.
-
-*Fix ave/atom fix does not calculate a per-atom array*
- Self-explanatory.
-
-*Fix ave/atom fix does not calculate a per-atom vector*
- A fix used by fix ave/atom must generate per-atom values.
-
-*Fix ave/atom fix does not calculate per-atom values*
- A fix used by fix ave/atom must generate per-atom values.
-
-*Fix ave/atom variable is not atom-style variable*
- A variable used by fix ave/atom must generate per-atom values.
-
-*Fix ave/chunk compute does not calculate a per-atom array*
- Self-explanatory.
-
-*Fix ave/chunk compute does not calculate a per-atom vector*
- Self-explanatory.
-
-*Fix ave/chunk compute does not calculate per-atom values*
- Self-explanatory.
-
-*Fix ave/chunk compute vector is accessed out-of-range*
- Self-explanatory.
-
-*Fix ave/chunk does not use chunk/atom compute*
- The specified conpute is not for a compute chunk/atom command.
-
-*Fix ave/chunk fix does not calculate a per-atom array*
- Self-explanatory.
-
-*Fix ave/chunk fix does not calculate a per-atom vector*
- Self-explanatory.
-
-*Fix ave/chunk fix does not calculate per-atom values*
- Self-explanatory.
-
-*Fix ave/chunk fix vector is accessed out-of-range*
- Self-explanatory.
-
-*Fix ave/chunk variable is not atom-style variable*
- Self-explanatory.
-
-*Fix ave/correlate compute does not calculate a scalar*
- Self-explanatory.
-
-*Fix ave/correlate compute does not calculate a vector*
- Self-explanatory.
-
-*Fix ave/correlate compute vector is accessed out-of-range*
- The index for the vector is out of bounds.
-
-*Fix ave/correlate fix does not calculate a scalar*
- Self-explanatory.
-
-*Fix ave/correlate fix does not calculate a vector*
- Self-explanatory.
-
-*Fix ave/correlate fix vector is accessed out-of-range*
- The index for the vector is out of bounds.
-
-*Fix ave/correlate variable is not equal-style variable*
- Self-explanatory.
-
-*Fix ave/histo cannot input local values in scalar mode*
- Self-explanatory.
-
-*Fix ave/histo cannot input per-atom values in scalar mode*
- Self-explanatory.
-
-*Fix ave/histo compute array is accessed out-of-range*
- Self-explanatory.
-
-*Fix ave/histo compute does not calculate a global array*
- Self-explanatory.
-
-*Fix ave/histo compute does not calculate a global scalar*
- Self-explanatory.
-
-*Fix ave/histo compute does not calculate a global vector*
- Self-explanatory.
-
-*Fix ave/histo compute does not calculate a local array*
- Self-explanatory.
-
-*Fix ave/histo compute does not calculate a local vector*
- Self-explanatory.
-
-*Fix ave/histo compute does not calculate a per-atom array*
- Self-explanatory.
-
-*Fix ave/histo compute does not calculate a per-atom vector*
- Self-explanatory.
-
-*Fix ave/histo compute does not calculate local values*
- Self-explanatory.
-
-*Fix ave/histo compute does not calculate per-atom values*
- Self-explanatory.
-
-*Fix ave/histo compute vector is accessed out-of-range*
- Self-explanatory.
-
-*Fix ave/histo fix array is accessed out-of-range*
- Self-explanatory.
-
-*Fix ave/histo fix does not calculate a global array*
- Self-explanatory.
-
-*Fix ave/histo fix does not calculate a global scalar*
- Self-explanatory.
-
-*Fix ave/histo fix does not calculate a global vector*
- Self-explanatory.
-
-*Fix ave/histo fix does not calculate a local array*
- Self-explanatory.
-
-*Fix ave/histo fix does not calculate a local vector*
- Self-explanatory.
-
-*Fix ave/histo fix does not calculate a per-atom array*
- Self-explanatory.
-
-*Fix ave/histo fix does not calculate a per-atom vector*
- Self-explanatory.
-
-*Fix ave/histo fix does not calculate local values*
- Self-explanatory.
-
-*Fix ave/histo fix does not calculate per-atom values*
- Self-explanatory.
-
-*Fix ave/histo fix vector is accessed out-of-range*
- Self-explanatory.
-
-*Fix ave/histo input is invalid compute*
- Self-explanatory.
-
-*Fix ave/histo input is invalid fix*
- Self-explanatory.
-
-*Fix ave/histo input is invalid variable*
- Self-explanatory.
-
-*Fix ave/histo inputs are not all global, peratom, or local*
- All inputs in a single fix ave/histo command must be of the
- same style.
-
-*Fix ave/histo/weight value and weight vector lengths do not match*
- Self-explanatory.
-
-*Fix ave/spatial compute does not calculate a per-atom array*
- Self-explanatory.
-
-*Fix ave/spatial compute does not calculate a per-atom vector*
- A compute used by fix ave/spatial must generate per-atom values.
-
-*Fix ave/spatial compute does not calculate per-atom values*
- A compute used by fix ave/spatial must generate per-atom values.
-
-*Fix ave/spatial compute vector is accessed out-of-range*
- The index for the vector is out of bounds.
-
-*Fix ave/spatial fix does not calculate a per-atom array*
- Self-explanatory.
-
-*Fix ave/spatial fix does not calculate a per-atom vector*
- A fix used by fix ave/spatial must generate per-atom values.
-
-*Fix ave/spatial fix does not calculate per-atom values*
- A fix used by fix ave/spatial must generate per-atom values.
-
-*Fix ave/spatial fix vector is accessed out-of-range*
- The index for the vector is out of bounds.
-
-*Fix ave/spatial for triclinic boxes requires units reduced*
- Self-explanatory.
-
-*Fix ave/spatial settings invalid with changing box size*
- If the box size changes, only the units reduced option can be
- used.
-
-*Fix ave/spatial variable is not atom-style variable*
- A variable used by fix ave/spatial must generate per-atom values.
-
-*Fix ave/time cannot set output array intensive/extensive from these inputs*
- One of more of the vector inputs has individual elements which are
- flagged as intensive or extensive. Such an input cannot be flagged as
- all intensive/extensive when turned into an array by fix ave/time.
-
-*Fix ave/time cannot use variable with vector mode*
- Variables produce scalar values.
-
-*Fix ave/time columns are inconsistent lengths*
- Self-explanatory.
-
-*Fix ave/time compute array is accessed out-of-range*
- An index for the array is out of bounds.
-
-*Fix ave/time compute does not calculate a scalar*
- Self-explantory.
-
-*Fix ave/time compute does not calculate a vector*
- Self-explantory.
-
-*Fix ave/time compute does not calculate an array*
- Self-explanatory.
-
-*Fix ave/time compute vector is accessed out-of-range*
- The index for the vector is out of bounds.
-
-*Fix ave/time fix array cannot be variable length*
- Self-explanatory.
-
-*Fix ave/time fix array is accessed out-of-range*
- An index for the array is out of bounds.
-
-*Fix ave/time fix does not calculate a scalar*
- Self-explanatory.
-
-*Fix ave/time fix does not calculate a vector*
- Self-explanatory.
-
-*Fix ave/time fix does not calculate an array*
- Self-explanatory.
-
-*Fix ave/time fix vector cannot be variable length*
- Self-explanatory.
-
-*Fix ave/time fix vector is accessed out-of-range*
- The index for the vector is out of bounds.
-
-*Fix ave/time variable is not equal-style variable*
- Self-explanatory.
-
-*Fix balance rcb cannot be used with comm_style brick*
- Comm_style tiled must be used instead.
-
-*Fix balance shift string is invalid*
- The string can only contain the characters "x", "y", or "z".
-
-*Fix bond/break needs ghost atoms from further away*
- This is because the fix needs to walk bonds to a certain distance to
- acquire needed info, The comm_modify cutoff command can be used to
- extend the communication range.
-
-*Fix bond/create angle type is invalid*
- Self-explanatory.
-
-*Fix bond/create cutoff is longer than pairwise cutoff*
- This is not allowed because bond creation is done using the
- pairwise neighbor list.
-
-*Fix bond/create dihedral type is invalid*
- Self-explanatory.
-
-*Fix bond/create improper type is invalid*
- Self-explanatory.
-
-*Fix bond/create induced too many angles/dihedrals/impropers per atom*
- See the read_data command for info on setting the "extra angle per
- atom", etc header values to allow for additional angles, etc to be
- formed.
-
-*Fix bond/create needs ghost atoms from further away*
- This is because the fix needs to walk bonds to a certain distance to
- acquire needed info, The comm_modify cutoff command can be used to
- extend the communication range.
-
-*Fix bond/swap cannot use dihedral or improper styles*
- These styles cannot be defined when using this fix.
-
-*Fix bond/swap requires pair and bond styles*
- Self-explanatory.
-
-*Fix bond/swap requires special_bonds = 0,1,1*
- Self-explanatory.
-
-*Fix box/relax generated negative box length*
- The pressure being applied is likely too large. Try applying
- it incrementally, to build to the high pressure.
-
-*Fix command before simulation box is defined*
- The fix command cannot be used before a read_data, read_restart, or
- create_box command.
-
-*Fix deform cannot use yz variable with xy*
- The yz setting cannot be a variable if xy deformation is also
- specified. This is because LAMMPS cannot determine if the yz setting
- will induce a box flip which would be invalid if xy is also changing.
-
-*Fix deform is changing yz too much with xy*
- When both yz and xy are changing, it induces changes in xz if the
- box must flip from one tilt extreme to another. Thus it is not
- allowed for yz to grow so much that a flip is induced.
-
-*Fix deform tilt factors require triclinic box*
- Cannot deform the tilt factors of a simulation box unless it
- is a triclinic (non-orthogonal) box.
-
-*Fix deform volume setting is invalid*
- Cannot use volume style unless other dimensions are being controlled.
-
-*Fix deposit and fix rigid/small not using same molecule template ID*
- Self-explanatory.
-
-*Fix deposit and fix shake not using same molecule template ID*
- Self-explanatory.
-
-*Fix deposit molecule must have atom types*
- The defined molecule does not specify atom types.
-
-*Fix deposit molecule must have coordinates*
- The defined molecule does not specify coordinates.
-
-*Fix deposit molecule template ID must be same as atom_style template ID*
- When using atom_style template, you cannot deposit molecules that are
- not in that template.
-
-*Fix deposit region cannot be dynamic*
- Only static regions can be used with fix deposit.
-
-*Fix deposit region does not support a bounding box*
- Not all regions represent bounded volumes. You cannot use
- such a region with the fix deposit command.
-
-*Fix deposit shake fix does not exist*
- Self-explanatory.
-
-*Fix efield requires atom attribute q or mu*
- The atom style defined does not have this attribute.
-
-*Fix efield with dipoles cannot use atom-style variables*
- This option is not supported.
-
-*Fix evaporate molecule requires atom attribute molecule*
- The atom style being used does not define a molecule ID.
-
-*Fix external callback function not set*
- This must be done by an external program in order to use this fix.
-
-*Fix for fix ave/atom not computed at compatible time*
- Fixes generate their values on specific timesteps. Fix ave/atom is
- requesting a value on a non-allowed timestep.
-
-*Fix for fix ave/chunk not computed at compatible time*
- Fixes generate their values on specific timesteps. Fix ave/chunk is
- requesting a value on a non-allowed timestep.
-
-*Fix for fix ave/correlate not computed at compatible time*
- Fixes generate their values on specific timesteps. Fix ave/correlate
- is requesting a value on a non-allowed timestep.
-
-*Fix for fix ave/histo not computed at compatible time*
- Fixes generate their values on specific timesteps. Fix ave/histo is
- requesting a value on a non-allowed timestep.
-
-*Fix for fix ave/spatial not computed at compatible time*
- Fixes generate their values on specific timesteps. Fix ave/spatial is
- requesting a value on a non-allowed timestep.
-
-*Fix for fix ave/time not computed at compatible time*
- Fixes generate their values on specific timesteps. Fix ave/time
- is requesting a value on a non-allowed timestep.
-
-*Fix for fix store/state not computed at compatible time*
- Fixes generate their values on specific timesteps. Fix store/state
- is requesting a value on a non-allowed timestep.
-
-*Fix for fix vector not computed at compatible time*
- Fixes generate their values on specific timesteps. Fix vector is
- requesting a value on a non-allowed timestep.
-
-*Fix freeze requires atom attribute torque*
- The atom style defined does not have this attribute.
-
-*Fix gcmc and fix shake not using same molecule template ID*
- Self-explanatory.
-
-*Fix gcmc atom has charge, but atom style does not*
- Self-explanatory.
-
-*Fix gcmc cannot exchange individual atoms belonging to a molecule*
- This is an error since you should not delete only one atom of a
- molecule. The user has specified atomic (non-molecular) gas
- exchanges, but an atom belonging to a molecule could be deleted.
-
-*Fix gcmc does not (yet) work with atom_style template*
- Self-explanatory.
-
-*Fix gcmc molecule command requires that atoms have molecule attributes*
- Should not choose the gcmc molecule feature if no molecules are being
- simulated. The general molecule flag is off, but gcmc's molecule flag
- is on.
-
-*Fix gcmc molecule has charges, but atom style does not*
- Self-explanatory.
-
-*Fix gcmc molecule must have atom types*
- The defined molecule does not specify atom types.
-
-*Fix gcmc molecule must have coordinates*
- The defined molecule does not specify coordinates.
-
-*Fix gcmc molecule template ID must be same as atom_style template ID*
- When using atom_style template, you cannot insert molecules that are
- not in that template.
-
-*Fix gcmc put atom outside box*
- This should not normally happen. Contact the developers.
-
-*Fix gcmc ran out of available atom IDs*
- See the setting for tagint in the src/lmptype.h file.
-
-*Fix gcmc ran out of available molecule IDs*
- See the setting for tagint in the src/lmptype.h file.
-
-*Fix gcmc region cannot be dynamic*
- Only static regions can be used with fix gcmc.
-
-*Fix gcmc region does not support a bounding box*
- Not all regions represent bounded volumes. You cannot use
- such a region with the fix gcmc command.
-
-*Fix gcmc region extends outside simulation box*
- Self-explanatory.
-
-*Fix gcmc shake fix does not exist*
- Self-explanatory.
-
-*Fix gld c coefficients must be >= 0*
- Self-explanatory.
-
-*Fix gld needs more prony series coefficients*
- Self-explanatory.
-
-*Fix gld prony terms must be > 0*
- Self-explanatory.
-
-*Fix gld series type must be pprony for now*
- Self-explanatory.
-
-*Fix gld start temperature must be >= 0*
- Self-explanatory.
-
-*Fix gld stop temperature must be >= 0*
- Self-explanatory.
-
-*Fix gld tau coefficients must be > 0*
- Self-explanatory.
-
-*Fix heat group has no atoms*
- Self-explanatory.
-
-*Fix heat kinetic energy of an atom went negative*
- This will cause the velocity rescaling about to be performed by fix
- heat to be invalid.
-
-*Fix heat kinetic energy went negative*
- This will cause the velocity rescaling about to be performed by fix
- heat to be invalid.
-
-*Fix in variable not computed at compatible time*
- Fixes generate their values on specific timesteps. The variable is
- requesting the values on a non-allowed timestep.
-
-*Fix langevin angmom is not yet implemented with kokkos*
- This option is not yet available.
-
-*Fix langevin angmom requires atom style ellipsoid*
- Self-explanatory.
-
-*Fix langevin angmom requires extended particles*
- This fix option cannot be used with point paritlces.
-
-*Fix langevin omega is not yet implemented with kokkos*
- This option is not yet available.
-
-*Fix langevin omega requires atom style sphere*
- Self-explanatory.
-
-*Fix langevin omega requires extended particles*
- One of the particles has radius 0.0.
-
-*Fix langevin period must be > 0.0*
- The time window for temperature relaxation must be > 0
-
-*Fix langevin variable returned negative temperature*
- Self-explanatory.
-
-*Fix momentum group has no atoms*
- Self-explanatory.
-
-*Fix move cannot define z or vz variable for 2d problem*
- Self-explanatory.
-
-*Fix move cannot rotate aroung non z-axis for 2d problem*
- Self-explanatory.
-
-*Fix move cannot set linear z motion for 2d problem*
- Self-explanatory.
-
-*Fix move cannot set wiggle z motion for 2d problem*
- Self-explanatory.
-
-*Fix msst compute ID does not compute potential energy*
- Self-explanatory.
-
-*Fix msst compute ID does not compute pressure*
- Self-explanatory.
-
-*Fix msst compute ID does not compute temperature*
- Self-explanatory.
-
-*Fix msst requires a periodic box*
- Self-explanatory.
-
-*Fix msst tscale must satisfy 0 <= tscale < 1*
- Self-explanatory.
-
-*Fix npt/nph has tilted box too far in one step - periodic cell is too far from equilibrium state*
- Self-explanatory. The change in the box tilt is too extreme
- on a short timescale.
-
-*Fix nve/asphere requires extended particles*
- This fix can only be used for particles with a shape setting.
-
-*Fix nve/asphere/noforce requires atom style ellipsoid*
- Self-explanatory.
-
-*Fix nve/asphere/noforce requires extended particles*
- One of the particles is not an ellipsoid.
-
-*Fix nve/body requires atom style body*
- Self-explanatory.
-
-*Fix nve/body requires bodies*
- This fix can only be used for particles that are bodies.
-
-*Fix nve/line can only be used for 2d simulations*
- Self-explanatory.
-
-*Fix nve/line requires atom style line*
- Self-explanatory.
-
-*Fix nve/line requires line particles*
- Self-explanatory.
-
-*Fix nve/sphere dipole requires atom attribute mu*
- An atom style with this attribute is needed.
-
-*Fix nve/sphere requires atom style sphere*
- Self-explanatory.
-
-*Fix nve/sphere requires extended particles*
- This fix can only be used for particles of a finite size.
-
-*Fix nve/tri can only be used for 3d simulations*
- Self-explanatory.
-
-*Fix nve/tri requires atom style tri*
- Self-explanatory.
-
-*Fix nve/tri requires tri particles*
- Self-explanatory.
-
-*Fix nvt/nph/npt asphere requires extended particles*
- The shape setting for a particle in the fix group has shape = 0.0,
- which means it is a point particle.
-
-*Fix nvt/nph/npt body requires bodies*
- Self-explanatory.
-
-*Fix nvt/nph/npt sphere requires atom style sphere*
- Self-explanatory.
-
-*Fix nvt/npt/nph damping parameters must be > 0.0*
- Self-explanatory.
-
-*Fix nvt/npt/nph dilate group ID does not exist*
- Self-explanatory.
-
-*Fix nvt/sphere requires extended particles*
- This fix can only be used for particles of a finite size.
-
-*Fix orient/fcc file open failed*
- The fix orient/fcc command could not open a specified file.
-
-*Fix orient/fcc file read failed*
- The fix orient/fcc command could not read the needed parameters from a
- specified file.
-
-*Fix orient/fcc found self twice*
- The neighbor lists used by fix orient/fcc are messed up. If this
- error occurs, it is likely a bug, so send an email to the
- `developers <http://lammps.sandia.gov/authors.html>`_.
-
-*Fix peri neigh does not exist*
- Somehow a fix that the pair style defines has been deleted.
-
-*Fix pour and fix rigid/small not using same molecule template ID*
- Self-explanatory.
-
-*Fix pour and fix shake not using same molecule template ID*
- Self-explanatory.
-
-*Fix pour insertion count per timestep is 0*
- Self-explanatory.
-
-*Fix pour molecule must have atom types*
- The defined molecule does not specify atom types.
-
-*Fix pour molecule must have coordinates*
- The defined molecule does not specify coordinates.
-
-*Fix pour molecule template ID must be same as atom style template ID*
- When using atom_style template, you cannot pour molecules that are
- not in that template.
-
-*Fix pour polydisperse fractions do not sum to 1.0*
- Self-explanatory.
-
-*Fix pour region ID does not exist*
- Self-explanatory.
-
-*Fix pour region cannot be dynamic*
- Only static regions can be used with fix pour.
-
-*Fix pour region does not support a bounding box*
- Not all regions represent bounded volumes. You cannot use
- such a region with the fix pour command.
-
-*Fix pour requires atom attributes radius, rmass*
- The atom style defined does not have these attributes.
-
-*Fix pour rigid fix does not exist*
- Self-explanatory.
-
-*Fix pour shake fix does not exist*
- Self-explanatory.
-
-*Fix press/berendsen damping parameters must be > 0.0*
- Self-explanatory.
-
-*Fix property/atom cannot specify mol twice*
- Self-explanatory.
-
-*Fix property/atom cannot specify q twice*
- Self-explanatory.
-
-*Fix property/atom mol when atom_style already has molecule attribute*
- Self-explanatory.
-
-*Fix property/atom q when atom_style already has charge attribute*
- Self-explanatory.
-
-*Fix property/atom vector name already exists*
- The name for an integer or floating-point vector must be unique.
-
-*Fix qeq has negative upper Taper radius cutoff*
- Self-explanatory.
-
-*Fix qeq/comb group has no atoms*
- Self-explanatory.
-
-*Fix qeq/comb requires atom attribute q*
- An atom style with charge must be used to perform charge equilibration.
-
-*Fix qeq/dynamic group has no atoms*
- Self-explanatory.
-
-*Fix qeq/dynamic requires atom attribute q*
- Self-explanatory.
-
-*Fix qeq/fire group has no atoms*
- Self-explanatory.
-
-*Fix qeq/fire requires atom attribute q*
- Self-explanatory.
-
-*Fix qeq/point group has no atoms*
- Self-explanatory.
-
-*Fix qeq/point has insufficient QEq matrix size*
- Occurs when number of neighbor atoms for an atom increased too much
- during a run. Increase SAFE_ZONE and MIN_CAP in fix_qeq.h and
- recompile.
-
-*Fix qeq/point requires atom attribute q*
- Self-explanatory.
-
-*Fix qeq/shielded group has no atoms*
- Self-explanatory.
-
-*Fix qeq/shielded has insufficient QEq matrix size*
- Occurs when number of neighbor atoms for an atom increased too much
- during a run. Increase SAFE_ZONE and MIN_CAP in fix_qeq.h and
- recompile.
-
-*Fix qeq/shielded requires atom attribute q*
- Self-explanatory.
-
-*Fix qeq/slater could not extract params from pair coul/streitz*
- This should not happen unless pair coul/streitz has been altered.
-
-*Fix qeq/slater group has no atoms*
- Self-explanatory.
-
-*Fix qeq/slater has insufficient QEq matrix size*
- Occurs when number of neighbor atoms for an atom increased too much
- during a run. Increase SAFE_ZONE and MIN_CAP in fix_qeq.h and
- recompile.
-
-*Fix qeq/slater requires atom attribute q*
- Self-explanatory.
-
-*Fix reax/bonds numbonds > nsbmax_most*
- The limit of the number of bonds expected by the ReaxFF force field
- was exceeded.
-
-*Fix recenter group has no atoms*
- Self-explanatory.
-
-*Fix restrain requires an atom map, see atom_modify*
- Self-explanatory.
-
-*Fix rigid atom has non-zero image flag in a non-periodic dimension*
- Image flags for non-periodic dimensions should not be set.
-
-*Fix rigid file has no lines*
- Self-explanatory.
-
-*Fix rigid langevin period must be > 0.0*
- Self-explanatory.
-
-*Fix rigid molecule requires atom attribute molecule*
- Self-explanatory.
-
-*Fix rigid npt/nph dilate group ID does not exist*
- Self-explanatory.
-
-*Fix rigid npt/nph does not yet allow triclinic box*
- This is a current restriction in LAMMPS.
-
-*Fix rigid npt/nph period must be > 0.0*
- Self-explanatory.
-
-*Fix rigid npt/small t_chain should not be less than 1*
- Self-explanatory.
-
-*Fix rigid npt/small t_order must be 3 or 5*
- Self-explanatory.
-
-*Fix rigid nvt/npt/nph damping parameters must be > 0.0*
- Self-explanatory.
-
-*Fix rigid nvt/small t_chain should not be less than 1*
- Self-explanatory.
-
-*Fix rigid nvt/small t_iter should not be less than 1*
- Self-explanatory.
-
-*Fix rigid nvt/small t_order must be 3 or 5*
- Self-explanatory.
-
-*Fix rigid xy torque cannot be on for 2d simulation*
- Self-explanatory.
-
-*Fix rigid z force cannot be on for 2d simulation*
- Self-explanatory.
-
-*Fix rigid/npt period must be > 0.0*
- Self-explanatory.
-
-*Fix rigid/npt temperature order must be 3 or 5*
- Self-explanatory.
-
-*Fix rigid/npt/small period must be > 0.0*
- Self-explanatory.
-
-*Fix rigid/nvt period must be > 0.0*
- Self-explanatory.
-
-*Fix rigid/nvt temperature order must be 3 or 5*
- Self-explanatory.
-
-*Fix rigid/nvt/small period must be > 0.0*
- Self-explanatory.
-
-*Fix rigid/small atom has non-zero image flag in a non-periodic dimension*
- Image flags for non-periodic dimensions should not be set.
-
-*Fix rigid/small langevin period must be > 0.0*
- Self-explanatory.
-
-*Fix rigid/small molecule must have atom types*
- The defined molecule does not specify atom types.
-
-*Fix rigid/small molecule must have coordinates*
- The defined molecule does not specify coordinates.
-
-*Fix rigid/small npt/nph period must be > 0.0*
- Self-explanatory.
-
-*Fix rigid/small nvt/npt/nph damping parameters must be > 0.0*
- Self-explanatory.
-
-*Fix rigid/small nvt/npt/nph dilate group ID does not exist*
- Self-explanatory.
-
-*Fix rigid/small requires an atom map, see atom_modify*
- Self-explanatory.
-
-*Fix rigid/small requires atom attribute molecule*
- Self-explanatory.
-
-*Fix rigid: Bad principal moments*
- The principal moments of inertia computed for a rigid body
- are not within the required tolerances.
-
-*Fix shake cannot be used with minimization*
- Cannot use fix shake while doing an energy minimization since
- it turns off bonds that should contribute to the energy.
-
-*Fix shake molecule template must have shake info*
- The defined molecule does not specify SHAKE information.
-
-*Fix spring couple group ID does not exist*
- Self-explanatory.
-
-*Fix srd can only currently be used with comm_style brick*
- This is a current restriction in LAMMPS.
-
-*Fix srd lamda must be >= 0.6 of SRD grid size*
- This is a requirement for accuracy reasons.
-
-*Fix srd no-slip requires atom attribute torque*
- This is because the SRD collisions will impart torque to the solute
- particles.
-
-*Fix srd requires SRD particles all have same mass*
- Self-explanatory.
-
-*Fix srd requires ghost atoms store velocity*
- Use the comm_modify vel yes command to enable this.
-
-*Fix srd requires newton pair on*
- Self-explanatory.
-
-*Fix store/state compute array is accessed out-of-range*
- Self-explanatory.
-
-*Fix store/state compute does not calculate a per-atom array*
- The compute calculates a per-atom vector.
-
-*Fix store/state compute does not calculate a per-atom vector*
- The compute calculates a per-atom vector.
-
-*Fix store/state compute does not calculate per-atom values*
- Computes that calculate global or local quantities cannot be used
- with fix store/state.
-
-*Fix store/state fix array is accessed out-of-range*
- Self-explanatory.
-
-*Fix store/state fix does not calculate a per-atom array*
- The fix calculates a per-atom vector.
-
-*Fix store/state fix does not calculate a per-atom vector*
- The fix calculates a per-atom array.
-
-*Fix store/state fix does not calculate per-atom values*
- Fixes that calculate global or local quantities cannot be used with
- fix store/state.
-
-*Fix store/state for atom property that isn't allocated*
- Self-explanatory.
-
-*Fix store/state variable is not atom-style variable*
- Only atom-style variables calculate per-atom quantities.
-
-*Fix temp/berendsen period must be > 0.0*
- Self-explanatory.
-
-*Fix temp/berendsen variable returned negative temperature*
- Self-explanatory.
-
-*Fix temp/csld is not compatible with fix rattle or fix shake*
- These two commands cannot currently be used together with fix temp/csld.
-
-*Fix temp/csld variable returned negative temperature*
- Self-explanatory.
-
-*Fix temp/csvr variable returned negative temperature*
- Self-explanatory.
-
-*Fix temp/rescale variable returned negative temperature*
- Self-explanatory.
-
-*Fix tfmc displacement length must be > 0*
- Self-explanatory.
-
-*Fix tfmc is not compatible with fix shake*
- These two commands cannot currently be used together.
-
-*Fix tfmc temperature must be > 0*
- Self-explanatory.
-
-*Fix thermal/conductivity swap value must be positive*
- Self-explanatory.
-
-*Fix tmd must come after integration fixes*
- Any fix tmd command must appear in the input script after all time
- integration fixes (nve, nvt, npt). See the fix tmd documentation for
- details.
-
-*Fix ttm electron temperatures must be > 0.0*
- Self-explanatory.
-
-*Fix ttm electronic_density must be > 0.0*
- Self-explanatory.
-
-*Fix ttm electronic_specific_heat must be > 0.0*
- Self-explanatory.
-
-*Fix ttm electronic_thermal_conductivity must be >= 0.0*
- Self-explanatory.
-
-*Fix ttm gamma_p must be > 0.0*
- Self-explanatory.
-
-*Fix ttm gamma_s must be >= 0.0*
- Self-explanatory.
-
-*Fix ttm number of nodes must be > 0*
- Self-explanatory.
-
-*Fix ttm v_0 must be >= 0.0*
- Self-explanatory.
-
-*Fix used in compute chunk/atom not computed at compatible time*
- The chunk/atom compute cannot query the output of the fix on a timestep
- it is needed.
-
-*Fix used in compute reduce not computed at compatible time*
- Fixes generate their values on specific timesteps. Compute reduce is
- requesting a value on a non-allowed timestep.
-
-*Fix used in compute slice not computed at compatible time*
- Fixes generate their values on specific timesteps. Compute slice is
- requesting a value on a non-allowed timestep.
-
-*Fix vector cannot set output array intensive/extensive from these inputs*
- The inputs to the command have conflicting intensive/extensive attributes.
- You need to use more than one fix vector command.
-
-*Fix vector compute does not calculate a scalar*
- Self-explanatory.
-
-*Fix vector compute does not calculate a vector*
- Self-explanatory.
-
-*Fix vector compute vector is accessed out-of-range*
- Self-explanatory.
-
-*Fix vector fix does not calculate a scalar*
- Self-explanatory.
-
-*Fix vector fix does not calculate a vector*
- Self-explanatory.
-
-*Fix vector fix vector is accessed out-of-range*
- Self-explanatory.
-
-*Fix vector variable is not equal-style variable*
- Self-explanatory.
-
-*Fix viscosity swap value must be positive*
- Self-explanatory.
-
-*Fix viscosity vtarget value must be positive*
- Self-explanatory.
-
-*Fix wall cutoff <= 0.0*
- Self-explanatory.
-
-*Fix wall/colloid requires atom style sphere*
- Self-explanatory.
-
-*Fix wall/colloid requires extended particles*
- One of the particles has radius 0.0.
-
-*Fix wall/gran is incompatible with Pair style*
- Must use a granular pair style to define the parameters needed for
- this fix.
-
-*Fix wall/gran requires atom style sphere*
- Self-explanatory.
-
-*Fix wall/piston command only available at zlo*
- The face keyword must be zlo.
-
-*Fix wall/region colloid requires atom style sphere*
- Self-explanatory.
-
-*Fix wall/region colloid requires extended particles*
- One of the particles has radius 0.0.
-
-*Fix wall/region cutoff <= 0.0*
- Self-explanatory.
-
-*Fix_modify pressure ID does not compute pressure*
- The compute ID assigned to the fix must compute pressure.
-
-*Fix_modify temperature ID does not compute temperature*
- The compute ID assigned to the fix must compute temperature.
-
-*For triclinic deformation, specified target stress must be hydrostatic*
- Triclinic pressure control is allowed using the tri keyword, but
- non-hydrostatic pressure control can not be used in this case.
-
-*Found no restart file matching pattern*
- When using a "*" in the restart file name, no matching file was found.
-
-*GPU library not compiled for this accelerator*
- Self-explanatory.
-
-*GPU package does not (yet) work with atom_style template*
- Self-explanatory.
-
-*GPU particle split must be set to 1 for this pair style.*
- For this pair style, you cannot run part of the force calculation on
- the host. See the package command.
-
-*GPU split param must be positive for hybrid pair styles*
- See the package gpu command.
-
-*GPUs are requested but Kokkos has not been compiled for CUDA*
- Recompile Kokkos with CUDA support to use GPUs.
-
-*Ghost velocity forward comm not yet implemented with Kokkos*
- This is a current restriction.
-
-*Gmask function in equal-style variable formula*
- Gmask is per-atom operation.
-
-*Gravity changed since fix pour was created*
- The gravity vector defined by fix gravity must be static.
-
-*Gravity must point in -y to use with fix pour in 2d*
- Self-explanatory.
-
-*Gravity must point in -z to use with fix pour in 3d*
- Self-explanatory.
-
-*Grmask function in equal-style variable formula*
- Grmask is per-atom operation.
-
-*Group ID does not exist*
- A group ID used in the group command does not exist.
-
-*Group ID in variable formula does not exist*
- Self-explanatory.
-
-*Group all cannot be made dynamic*
- This operation is not allowed.
-
-*Group command before simulation box is defined*
- The group command cannot be used before a read_data, read_restart, or
- create_box command.
-
-*Group dynamic cannot reference itself*
- Self-explanatory.
-
-*Group dynamic parent group cannot be dynamic*
- Self-explanatory.
-
-*Group dynamic parent group does not exist*
- Self-explanatory.
-
-*Group region ID does not exist*
- A region ID used in the group command does not exist.
-
-*If read_dump purges it cannot replace or trim*
- These operations are not compatible. See the read_dump doc
- page for details.
-
-*Illegal ... command*
- Self-explanatory. Check the input script syntax and compare to the
- documentation for the command. You can use -echo screen as a
- command-line option when running LAMMPS to see the offending line.
-
-*Illegal COMB parameter*
- One or more of the coefficients defined in the potential file is
- invalid.
-
-*Illegal COMB3 parameter*
- One or more of the coefficients defined in the potential file is
- invalid.
-
-*Illegal Stillinger-Weber parameter*
- One or more of the coefficients defined in the potential file is
- invalid.
-
-*Illegal Tersoff parameter*
- One or more of the coefficients defined in the potential file is
- invalid.
-
-*Illegal Vashishta parameter*
- One or more of the coefficients defined in the potential file is
- invalid.
-
-*Illegal compute voronoi/atom command (occupation and (surface or edges))*
- Self-explanatory.
-
-*Illegal coul/streitz parameter*
- One or more of the coefficients defined in the potential file is
- invalid.
-
-*Illegal dump_modify sfactor value (must be > 0.0)*
- Self-explanatory.
-
-*Illegal dump_modify tfactor value (must be > 0.0)*
- Self-explanatory.
-
-*Illegal fix gcmc gas mass <= 0*
- The computed mass of the designated gas molecule or atom type was less
- than or equal to zero.
-
-*Illegal fix tfmc random seed*
- Seeds can only be nonzero positive integers.
-
-*Illegal fix wall/piston velocity*
- The piston velocity must be positive.
-
-*Illegal integrate style*
- Self-explanatory.
-
-*Illegal nb3b/harmonic parameter*
- One or more of the coefficients defined in the potential file is
- invalid.
-
-*Illegal number of angle table entries*
- There must be at least 2 table entries.
-
-*Illegal number of bond table entries*
- There must be at least 2 table entries.
-
-*Illegal number of pair table entries*
- There must be at least 2 table entries.
-
-*Illegal or unset periodicity in restart*
- This error should not normally occur unless the restart file is invalid.
-
-*Illegal range increment value*
- The increment must be >= 1.
-
-*Illegal simulation box*
- The lower bound of the simulation box is greater than the upper bound.
-
-*Illegal size double vector read requested*
- This error should not normally occur unless the restart file is invalid.
-
-*Illegal size integer vector read requested*
- This error should not normally occur unless the restart file is invalid.
-
-*Illegal size string or corrupt restart*
- This error should not normally occur unless the restart file is invalid.
-
-*Imageint setting in lmptype.h is invalid*
- Imageint must be as large or larger than smallint.
-
-*Imageint setting in lmptype.h is not compatible*
- Format of imageint stored in restart file is not consistent with
- LAMMPS version you are running. See the settings in src/lmptype.h
-
-*Improper atom missing in delete_bonds*
- The delete_bonds command cannot find one or more atoms in a particular
- improper on a particular processor. The pairwise cutoff is too short
- or the atoms are too far apart to make a valid improper.
-
-*Improper atom missing in set command*
- The set command cannot find one or more atoms in a particular improper
- on a particular processor. The pairwise cutoff is too short or the
- atoms are too far apart to make a valid improper.
-
-*Improper atoms %d %d %d %d missing on proc %d at step %ld*
- One or more of 4 atoms needed to compute a particular improper are
- missing on this processor. Typically this is because the pairwise
- cutoff is set too short or the improper has blown apart and an atom is
- too far away.
-
-*Improper atoms missing on proc %d at step %ld*
- One or more of 4 atoms needed to compute a particular improper are
- missing on this processor. Typically this is because the pairwise
- cutoff is set too short or the improper has blown apart and an atom is
- too far away.
-
-*Improper coeff for hybrid has invalid style*
- Improper style hybrid uses another improper style as one of its
- coefficients. The improper style used in the improper_coeff command
- or read from a restart file is not recognized.
-
-*Improper coeffs are not set*
- No improper coefficients have been assigned in the data file or via
- the improper_coeff command.
-
-*Improper style hybrid cannot have hybrid as an argument*
- Self-explanatory.
-
-*Improper style hybrid cannot have none as an argument*
- Self-explanatory.
-
-*Improper style hybrid cannot use same improper style twice*
- Self-explanatory.
-
-*Improper_coeff command before improper_style is defined*
- Coefficients cannot be set in the data file or via the improper_coeff
- command until an improper_style has been assigned.
-
-*Improper_coeff command before simulation box is defined*
- The improper_coeff command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*Improper_coeff command when no impropers allowed*
- The chosen atom style does not allow for impropers to be defined.
-
-*Improper_style command when no impropers allowed*
- The chosen atom style does not allow for impropers to be defined.
-
-*Impropers assigned incorrectly*
- Impropers read in from the data file were not assigned correctly to
- atoms. This means there is something invalid about the topology
- definitions.
-
-*Impropers defined but no improper types*
- The data file header lists improper but no improper types.
-
-*Incomplete use of variables in create_atoms command*
- The var and set options must be used together.
-
-*Inconsistent iparam/jparam values in fix bond/create command*
- If itype and jtype are the same, then their maxbond and newtype
- settings must also be the same.
-
-*Inconsistent line segment in data file*
- The end points of the line segment are not equal distances from the
- center point which is the atom coordinate.
-
-*Inconsistent triangle in data file*
- The centroid of the triangle as defined by the corner points is not
- the atom coordinate.
-
-*Inconsistent use of finite-size particles by molecule template molecules*
- Not all of the molecules define a radius for their constituent
- particles.
-
-*Incorrect # of floating-point values in Bodies section of data file*
- See doc page for body style.
-
-*Incorrect # of integer values in Bodies section of data file*
- See doc page for body style.
-
-*Incorrect %s format in data file*
- A section of the data file being read by fix property/atom does
- not have the correct number of values per line.
-
-*Incorrect SNAP parameter file*
- The file cannot be parsed correctly, check its internal syntax.
-
-*Incorrect args for angle coefficients*
- Self-explanatory. Check the input script or data file.
-
-*Incorrect args for bond coefficients*
- Self-explanatory. Check the input script or data file.
-
-*Incorrect args for dihedral coefficients*
- Self-explanatory. Check the input script or data file.
-
-*Incorrect args for improper coefficients*
- Self-explanatory. Check the input script or data file.
-
-*Incorrect args for pair coefficients*
- Self-explanatory. Check the input script or data file.
-
-*Incorrect args in pair_style command*
- Self-explanatory.
-
-*Incorrect atom format in data file*
- Number of values per atom line in the data file is not consistent with
- the atom style.
-
-*Incorrect atom format in neb file*
- The number of fields per line is not what expected.
-
-*Incorrect bonus data format in data file*
- See the read_data doc page for a description of how various kinds of
- bonus data must be formatted for certain atom styles.
-
-*Incorrect boundaries with slab Ewald*
- Must have periodic x,y dimensions and non-periodic z dimension to use
- 2d slab option with Ewald.
-
-*Incorrect boundaries with slab EwaldDisp*
- Must have periodic x,y dimensions and non-periodic z dimension to use
- 2d slab option with Ewald.
-
-*Incorrect boundaries with slab PPPM*
- Must have periodic x,y dimensions and non-periodic z dimension to use
- 2d slab option with PPPM.
-
-*Incorrect boundaries with slab PPPMDisp*
- Must have periodic x,y dimensions and non-periodic z dimension to use
- 2d slab option with pppm/disp.
-
-*Incorrect element names in ADP potential file*
- The element names in the ADP file do not match those requested.
-
-*Incorrect element names in EAM potential file*
- The element names in the EAM file do not match those requested.
-
-*Incorrect format in COMB potential file*
- Incorrect number of words per line in the potential file.
-
-*Incorrect format in COMB3 potential file*
- Incorrect number of words per line in the potential file.
-
-*Incorrect format in MEAM potential file*
- Incorrect number of words per line in the potential file.
-
-*Incorrect format in SNAP coefficient file*
- Incorrect number of words per line in the coefficient file.
-
-*Incorrect format in SNAP parameter file*
- Incorrect number of words per line in the parameter file.
-
-*Incorrect format in Stillinger-Weber potential file*
- Incorrect number of words per line in the potential file.
-
-*Incorrect format in TMD target file*
- Format of file read by fix tmd command is incorrect.
-
-*Incorrect format in Tersoff potential file*
- Incorrect number of words per line in the potential file.
-
-*Incorrect format in Vashishta potential file*
- Incorrect number of words per line in the potential file.
-
-*Incorrect format in coul/streitz potential file*
- Incorrect number of words per line in the potential file.
-
-*Incorrect format in nb3b/harmonic potential file*
- Incorrect number of words per line in the potential file.
-
-*Incorrect integer value in Bodies section of data file*
- See doc page for body style.
-
-*Incorrect multiplicity arg for dihedral coefficients*
- Self-explanatory. Check the input script or data file.
-
-*Incorrect number of elements in potential file*
- Self-explanatory.
-
-*Incorrect rigid body format in fix rigid file*
- The number of fields per line is not what expected.
-
-*Incorrect rigid body format in fix rigid/small file*
- The number of fields per line is not what expected.
-
-*Incorrect sign arg for dihedral coefficients*
- Self-explanatory. Check the input script or data file.
-
-*Incorrect table format check for element types*
- Self-explanatory.
-
-*Incorrect velocity format in data file*
- Each atom style defines a format for the Velocity section
- of the data file. The read-in lines do not match.
-
-*Incorrect weight arg for dihedral coefficients*
- Self-explanatory. Check the input script or data file.
-
-*Index between variable brackets must be positive*
- Self-explanatory.
-
-*Indexed per-atom vector in variable formula without atom map*
- Accessing a value from an atom vector requires the ability to lookup
- an atom index, which is provided by an atom map. An atom map does not
- exist (by default) for non-molecular problems. Using the atom_modify
- map command will force an atom map to be created.
-
-*Initial temperatures not all set in fix ttm*
- Self-explantory.
-
-*Input line quote not followed by whitespace*
- An end quote must be followed by whitespace.
-
-*Insertion region extends outside simulation box*
- Self-explanatory.
-
-*Insufficient Jacobi rotations for POEMS body*
- Eigensolve for rigid body was not sufficiently accurate.
-
-*Insufficient Jacobi rotations for body nparticle*
- Eigensolve for rigid body was not sufficiently accurate.
-
-*Insufficient Jacobi rotations for rigid body*
- Eigensolve for rigid body was not sufficiently accurate.
-
-*Insufficient Jacobi rotations for rigid molecule*
- Eigensolve for rigid body was not sufficiently accurate.
-
-*Insufficient Jacobi rotations for triangle*
- The calculation of the intertia tensor of the triangle failed. This
- should not happen if it is a reasonably shaped triangle.
-
-*Insufficient memory on accelerator*
- There is insufficient memory on one of the devices specified for the gpu
- package
-
-*Internal error in atom_style body*
- This error should not occur. Contact the developers.
-
-*Invalid -reorder N value*
- Self-explanatory.
-
-*Invalid Angles section in molecule file*
- Self-explanatory.
-
-*Invalid Bonds section in molecule file*
- Self-explanatory.
-
-*Invalid Boolean syntax in if command*
- Self-explanatory.
-
-*Invalid Charges section in molecule file*
- Self-explanatory.
-
-*Invalid Coords section in molecule file*
- Self-explanatory.
-
-*Invalid Diameters section in molecule file*
- Self-explanatory.
-
-*Invalid Dihedrals section in molecule file*
- Self-explanatory.
-
-*Invalid Impropers section in molecule file*
- Self-explanatory.
-
-*Invalid Kokkos command-line args*
- Self-explanatory. See Section 2.7 of the manual for details.
-
-*Invalid LAMMPS restart file*
- The file does not appear to be a LAMMPS restart file since
- it doesn't contain the correct magic string at the beginning.
-
-*Invalid Masses section in molecule file*
- Self-explanatory.
-
-*Invalid REAX atom type*
- There is a mis-match between LAMMPS atom types and the elements
- listed in the ReaxFF force field file.
-
-*Invalid Special Bond Counts section in molecule file*
- Self-explanatory.
-
-*Invalid Types section in molecule file*
- Self-explanatory.
-
-*Invalid angle count in molecule file*
- Self-explanatory.
-
-*Invalid angle table length*
- Length must be 2 or greater.
-
-*Invalid angle type in Angles section of data file*
- Angle type must be positive integer and within range of specified angle
- types.
-
-*Invalid angle type in Angles section of molecule file*
- Self-explanatory.
-
-*Invalid angle type index for fix shake*
- Self-explanatory.
-
-*Invalid args for non-hybrid pair coefficients*
- "NULL" is only supported in pair_coeff calls when using pair hybrid
-
-*Invalid argument to factorial %d*
- N must be >= 0 and <= 167, otherwise the factorial result is too
- large.
-
-*Invalid atom ID in %s section of data file*
- An atom in a section of the data file being read by fix property/atom
- has an invalid atom ID that is <= 0 or > the maximum existing atom ID.
-
-*Invalid atom ID in Angles section of data file*
- Atom IDs must be positive integers and within range of defined
- atoms.
-
-*Invalid atom ID in Angles section of molecule file*
- Self-explanatory.
-
-*Invalid atom ID in Atoms section of data file*
- Atom IDs must be positive integers.
-
-*Invalid atom ID in Bodies section of data file*
- Atom IDs must be positive integers and within range of defined
- atoms.
-
-*Invalid atom ID in Bonds section of data file*
- Atom IDs must be positive integers and within range of defined
- atoms.
-
-*Invalid atom ID in Bonds section of molecule file*
- Self-explanatory.
-
-*Invalid atom ID in Bonus section of data file*
- Atom IDs must be positive integers and within range of defined
- atoms.
-
-*Invalid atom ID in Dihedrals section of data file*
- Atom IDs must be positive integers and within range of defined
- atoms.
-
-*Invalid atom ID in Impropers section of data file*
- Atom IDs must be positive integers and within range of defined
- atoms.
-
-*Invalid atom ID in Velocities section of data file*
- Atom IDs must be positive integers and within range of defined
- atoms.
-
-*Invalid atom ID in dihedrals section of molecule file*
- Self-explanatory.
-
-*Invalid atom ID in impropers section of molecule file*
- Self-explanatory.
-
-*Invalid atom ID in variable file*
- Self-explanatory.
-
-*Invalid atom IDs in neb file*
- An ID in the file was not found in the system.
-
-*Invalid atom diameter in molecule file*
- Diameters must be >= 0.0.
-
-*Invalid atom mass for fix shake*
- Mass specified in fix shake command must be > 0.0.
-
-*Invalid atom mass in molecule file*
- Masses must be > 0.0.
-
-*Invalid atom type in Atoms section of data file*
- Atom types must range from 1 to specified # of types.
-
-*Invalid atom type in create_atoms command*
- The create_box command specified the range of valid atom types.
- An invalid type is being requested.
-
-*Invalid atom type in create_atoms mol command*
- The atom types in the defined molecule are added to the value
- specified in the create_atoms command, as an offset. The final value
- for each atom must be between 1 to N, where N is the number of atom
- types.
-
-*Invalid atom type in fix atom/swap command*
- The atom type specified in the atom/swap command does not exist.
-
-*Invalid atom type in fix bond/create command*
- Self-explanatory.
-
-*Invalid atom type in fix deposit command*
- Self-explanatory.
-
-*Invalid atom type in fix deposit mol command*
- The atom types in the defined molecule are added to the value
- specified in the create_atoms command, as an offset. The final value
- for each atom must be between 1 to N, where N is the number of atom
- types.
-
-*Invalid atom type in fix gcmc command*
- The atom type specified in the gcmc command does not exist.
-
-*Invalid atom type in fix pour command*
- Self-explanatory.
-
-*Invalid atom type in fix pour mol command*
- The atom types in the defined molecule are added to the value
- specified in the create_atoms command, as an offset. The final value
- for each atom must be between 1 to N, where N is the number of atom
- types.
-
-*Invalid atom type in molecule file*
- Atom types must range from 1 to specified # of types.
-
-*Invalid atom type in neighbor exclusion list*
- Atom types must range from 1 to Ntypes inclusive.
-
-*Invalid atom type index for fix shake*
- Atom types must range from 1 to Ntypes inclusive.
-
-*Invalid atom types in pair_write command*
- Atom types must range from 1 to Ntypes inclusive.
-
-*Invalid atom vector in variable formula*
- The atom vector is not recognized.
-
-*Invalid atom_style body command*
- No body style argument was provided.
-
-*Invalid atom_style command*
- Self-explanatory.
-
-*Invalid attribute in dump custom command*
- Self-explantory.
-
-*Invalid attribute in dump local command*
- Self-explantory.
-
-*Invalid attribute in dump modify command*
- Self-explantory.
-
-*Invalid basis setting in create_atoms command*
- The basis index must be between 1 to N where N is the number of basis
- atoms in the lattice. The type index must be between 1 to N where N
- is the number of atom types.
-
-*Invalid basis setting in fix append/atoms command*
- The basis index must be between 1 to N where N is the number of basis
- atoms in the lattice. The type index must be between 1 to N where N
- is the number of atom types.
-
-*Invalid bin bounds in compute chunk/atom*
- The lo/hi values are inconsistent.
-
-*Invalid bin bounds in fix ave/spatial*
- The lo/hi values are inconsistent.
-
-*Invalid body nparticle command*
- Arguments in atom-style command are not correct.
-
-*Invalid bond count in molecule file*
- Self-explanatory.
-
-*Invalid bond table length*
- Length must be 2 or greater.
-
-*Invalid bond type in Bonds section of data file*
- Bond type must be positive integer and within range of specified bond
- types.
-
-*Invalid bond type in Bonds section of molecule file*
- Self-explanatory.
-
-*Invalid bond type in create_bonds command*
- Self-explanatory.
-
-*Invalid bond type in fix bond/break command*
- Self-explanatory.
-
-*Invalid bond type in fix bond/create command*
- Self-explanatory.
-
-*Invalid bond type index for fix shake*
- Self-explanatory. Check the fix shake command in the input script.
-
-*Invalid coeffs for this dihedral style*
- Cannot set class 2 coeffs in data file for this dihedral style.
-
-*Invalid color in dump_modify command*
- The specified color name was not in the list of recognized colors.
- See the dump_modify doc page.
-
-*Invalid color map min/max values*
- The min/max values are not consistent with either each other or
- with values in the color map.
-
-*Invalid command-line argument*
- One or more command-line arguments is invalid. Check the syntax of
- the command you are using to launch LAMMPS.
-
-*Invalid compute ID in variable formula*
- The compute is not recognized.
-
-*Invalid create_atoms rotation vector for 2d model*
- The rotation vector can only have a z component.
-
-*Invalid custom OpenCL parameter string.*
- There are not enough or too many parameters in the custom string for package
- GPU.
-
-*Invalid cutoff in comm_modify command*
- Specified cutoff must be >= 0.0.
-
-*Invalid cutoffs in pair_write command*
- Inner cutoff must be larger than 0.0 and less than outer cutoff.
-
-*Invalid d1 or d2 value for pair colloid coeff*
- Neither d1 or d2 can be < 0.
-
-*Invalid data file section: Angle Coeffs*
- Atom style does not allow angles.
-
-*Invalid data file section: AngleAngle Coeffs*
- Atom style does not allow impropers.
-
-*Invalid data file section: AngleAngleTorsion Coeffs*
- Atom style does not allow dihedrals.
-
-*Invalid data file section: AngleTorsion Coeffs*
- Atom style does not allow dihedrals.
-
-*Invalid data file section: Angles*
- Atom style does not allow angles.
-
-*Invalid data file section: Bodies*
- Atom style does not allow bodies.
-
-*Invalid data file section: Bond Coeffs*
- Atom style does not allow bonds.
-
-*Invalid data file section: BondAngle Coeffs*
- Atom style does not allow angles.
-
-*Invalid data file section: BondBond Coeffs*
- Atom style does not allow angles.
-
-*Invalid data file section: BondBond13 Coeffs*
- Atom style does not allow dihedrals.
-
-*Invalid data file section: Bonds*
- Atom style does not allow bonds.
-
-*Invalid data file section: Dihedral Coeffs*
- Atom style does not allow dihedrals.
-
-*Invalid data file section: Dihedrals*
- Atom style does not allow dihedrals.
-
-*Invalid data file section: Ellipsoids*
- Atom style does not allow ellipsoids.
-
-*Invalid data file section: EndBondTorsion Coeffs*
- Atom style does not allow dihedrals.
-
-*Invalid data file section: Improper Coeffs*
- Atom style does not allow impropers.
-
-*Invalid data file section: Impropers*
- Atom style does not allow impropers.
-
-*Invalid data file section: Lines*
- Atom style does not allow lines.
-
-*Invalid data file section: MiddleBondTorsion Coeffs*
- Atom style does not allow dihedrals.
-
-*Invalid data file section: Triangles*
- Atom style does not allow triangles.
-
-*Invalid delta_conf in tad command*
- The value must be between 0 and 1 inclusive.
-
-*Invalid density in Atoms section of data file*
- Density value cannot be <= 0.0.
-
-*Invalid density in set command*
- Density must be > 0.0.
-
-*Invalid diameter in set command*
- Self-explanatory.
-
-*Invalid dihedral count in molecule file*
- Self-explanatory.
-
-*Invalid dihedral type in Dihedrals section of data file*
- Dihedral type must be positive integer and within range of specified
- dihedral types.
-
-*Invalid dihedral type in dihedrals section of molecule file*
- Self-explanatory.
-
-*Invalid dipole length in set command*
- Self-explanatory.
-
-*Invalid displace_atoms rotate axis for 2d*
- Axis must be in z direction.
-
-*Invalid dump dcd filename*
- Filenames used with the dump dcd style cannot be binary or compressed
- or cause multiple files to be written.
-
-*Invalid dump frequency*
- Dump frequency must be 1 or greater.
-
-*Invalid dump image element name*
- The specified element name was not in the standard list of elements.
- See the dump_modify doc page.
-
-*Invalid dump image filename*
- The file produced by dump image cannot be binary and must
- be for a single processor.
-
-*Invalid dump image persp value*
- Persp value must be >= 0.0.
-
-*Invalid dump image theta value*
- Theta must be between 0.0 and 180.0 inclusive.
-
-*Invalid dump image zoom value*
- Zoom value must be > 0.0.
-
-*Invalid dump movie filename*
- The file produced by dump movie cannot be binary or compressed
- and must be a single file for a single processor.
-
-*Invalid dump xtc filename*
- Filenames used with the dump xtc style cannot be binary or compressed
- or cause multiple files to be written.
-
-*Invalid dump xyz filename*
- Filenames used with the dump xyz style cannot be binary or cause files
- to be written by each processor.
-
-*Invalid dump_modify threshhold operator*
- Operator keyword used for threshold specification in not recognized.
-
-*Invalid entry in -reorder file*
- Self-explanatory.
-
-*Invalid fix ID in variable formula*
- The fix is not recognized.
-
-*Invalid fix ave/time off column*
- Self-explantory.
-
-*Invalid fix box/relax command for a 2d simulation*
- Fix box/relax styles involving the z dimension cannot be used in
- a 2d simulation.
-
-*Invalid fix box/relax command pressure settings*
- If multiple dimensions are coupled, those dimensions must be specified.
-
-*Invalid fix box/relax pressure settings*
- Settings for coupled dimensions must be the same.
-
-*Invalid fix nvt/npt/nph command for a 2d simulation*
- Cannot control z dimension in a 2d model.
-
-*Invalid fix nvt/npt/nph command pressure settings*
- If multiple dimensions are coupled, those dimensions must be
- specified.
-
-*Invalid fix nvt/npt/nph pressure settings*
- Settings for coupled dimensions must be the same.
-
-*Invalid fix press/berendsen for a 2d simulation*
- The z component of pressure cannot be controlled for a 2d model.
-
-*Invalid fix press/berendsen pressure settings*
- Settings for coupled dimensions must be the same.
-
-*Invalid fix qeq parameter file*
- Element index > number of atom types.
-
-*Invalid fix rigid npt/nph command for a 2d simulation*
- Cannot control z dimension in a 2d model.
-
-*Invalid fix rigid npt/nph command pressure settings*
- If multiple dimensions are coupled, those dimensions must be
- specified.
-
-*Invalid fix rigid/small npt/nph command for a 2d simulation*
- Cannot control z dimension in a 2d model.
-
-*Invalid fix rigid/small npt/nph command pressure settings*
- If multiple dimensions are coupled, those dimensions must be
- specified.
-
-*Invalid flag in force field section of restart file*
- Unrecognized entry in restart file.
-
-*Invalid flag in header section of restart file*
- Unrecognized entry in restart file.
-
-*Invalid flag in peratom section of restart file*
- The format of this section of the file is not correct.
-
-*Invalid flag in type arrays section of restart file*
- Unrecognized entry in restart file.
-
-*Invalid frequency in temper command*
- Nevery must be > 0.
-
-*Invalid group ID in neigh_modify command*
- A group ID used in the neigh_modify command does not exist.
-
-*Invalid group function in variable formula*
- Group function is not recognized.
-
-*Invalid group in comm_modify command*
- Self-explanatory.
-
-*Invalid image up vector*
- Up vector cannot be (0,0,0).
-
-*Invalid immediate variable*
- Syntax of immediate value is incorrect.
-
-*Invalid improper count in molecule file*
- Self-explanatory.
-
-*Invalid improper type in Impropers section of data file*
- Improper type must be positive integer and within range of specified
- improper types.
-
-*Invalid improper type in impropers section of molecule file*
- Self-explanatory.
-
-*Invalid index for non-body particles in compute body/local command*
- Only indices 1,2,3 can be used for non-body particles.
-
-*Invalid index in compute body/local command*
- Self-explanatory.
-
-*Invalid is_active() function in variable formula*
- Self-explanatory.
-
-*Invalid is_available() function in variable formula*
- Self-explanatory.
-
-*Invalid is_defined() function in variable formula*
- Self-explanatory.
-
-*Invalid keyword in angle table parameters*
- Self-explanatory.
-
-*Invalid keyword in bond table parameters*
- Self-explanatory.
-
-*Invalid keyword in compute angle/local command*
- Self-explanatory.
-
-*Invalid keyword in compute bond/local command*
- Self-explanatory.
-
-*Invalid keyword in compute dihedral/local command*
- Self-explanatory.
-
-*Invalid keyword in compute improper/local command*
- Self-explanatory.
-
-*Invalid keyword in compute pair/local command*
- Self-explanatory.
-
-*Invalid keyword in compute property/atom command*
- Self-explanatory.
-
-*Invalid keyword in compute property/chunk command*
- Self-explanatory.
-
-*Invalid keyword in compute property/local command*
- Self-explanatory.
-
-*Invalid keyword in dump cfg command*
- Self-explanatory.
-
-*Invalid keyword in pair table parameters*
- Keyword used in list of table parameters is not recognized.
-
-*Invalid length in set command*
- Self-explanatory.
-
-*Invalid mass in set command*
- Self-explanatory.
-
-*Invalid mass line in data file*
- Self-explanatory.
-
-*Invalid mass value*
- Self-explanatory.
-
-*Invalid math function in variable formula*
- Self-explanatory.
-
-*Invalid math/group/special function in variable formula*
- Self-explanatory.
-
-*Invalid option in lattice command for non-custom style*
- Certain lattice keywords are not supported unless the
- lattice style is "custom".
-
-*Invalid order of forces within respa levels*
- For respa, ordering of force computations within respa levels must
- obey certain rules. E.g. bonds cannot be compute less frequently than
- angles, pairwise forces cannot be computed less frequently than
- kspace, etc.
-
-*Invalid pair table cutoff*
- Cutoffs in pair_coeff command are not valid with read-in pair table.
-
-*Invalid pair table length*
- Length of read-in pair table is invalid
-
-*Invalid param file for fix qeq/shielded*
- Invalid value of gamma.
-
-*Invalid param file for fix qeq/slater*
- Zeta value is 0.0.
-
-*Invalid partitions in processors part command*
- Valid partitions are numbered 1 to N and the sender and receiver
- cannot be the same partition.
-
-*Invalid python command*
- Self-explanatory. Check the input script syntax and compare to the
- documentation for the command. You can use -echo screen as a
- command-line option when running LAMMPS to see the offending line.
-
-*Invalid radius in Atoms section of data file*
- Radius must be >= 0.0.
-
-*Invalid random number seed in fix ttm command*
- Random number seed must be > 0.
-
-*Invalid random number seed in set command*
- Random number seed must be > 0.
-
-*Invalid replace values in compute reduce*
- Self-explanatory.
-
-*Invalid rigid body ID in fix rigid file*
- The ID does not match the number of an existing ID of rigid bodies
- that are defined by the fix rigid command.
-
-*Invalid rigid body ID in fix rigid/small file*
- The ID does not match the number of an existing ID of rigid bodies
- that are defined by the fix rigid/small command.
-
-*Invalid run command N value*
- The number of timesteps must fit in a 32-bit integer. If you want to
- run for more steps than this, perform multiple shorter runs.
-
-*Invalid run command start/stop value*
- Self-explanatory.
-
-*Invalid run command upto value*
- Self-explanatory.
-
-*Invalid seed for Marsaglia random # generator*
- The initial seed for this random number generator must be a positive
- integer less than or equal to 900 million.
-
-*Invalid seed for Park random # generator*
- The initial seed for this random number generator must be a positive
- integer.
-
-*Invalid shake angle type in molecule file*
- Self-explanatory.
-
-*Invalid shake atom in molecule file*
- Self-explanatory.
-
-*Invalid shake bond type in molecule file*
- Self-explanatory.
-
-*Invalid shake flag in molecule file*
- Self-explanatory.
-
-*Invalid shape in Ellipsoids section of data file*
- Self-explanatory.
-
-*Invalid shape in Triangles section of data file*
- Two or more of the triangle corners are duplicate points.
-
-*Invalid shape in set command*
- Self-explanatory.
-
-*Invalid shear direction for fix wall/gran*
- Self-explanatory.
-
-*Invalid special atom index in molecule file*
- Self-explanatory.
-
-*Invalid special function in variable formula*
- Self-explanatory.
-
-*Invalid style in pair_write command*
- Self-explanatory. Check the input script.
-
-*Invalid syntax in variable formula*
- Self-explanatory.
-
-*Invalid t_event in prd command*
- Self-explanatory.
-
-*Invalid t_event in tad command*
- The value must be greater than 0.
-
-*Invalid template atom in Atoms section of data file*
- The atom indices must be between 1 to N, where N is the number of
- atoms in the template molecule the atom belongs to.
-
-*Invalid template index in Atoms section of data file*
- The template indices must be between 1 to N, where N is the number of
- molecules in the template.
-
-*Invalid thermo keyword in variable formula*
- The keyword is not recognized.
-
-*Invalid threads_per_atom specified.*
- For 3-body potentials on the GPU, the threads_per_atom setting cannot be
- greater than 4 for NVIDIA GPUs.
-
-*Invalid timestep reset for fix ave/atom*
- Resetting the timestep has invalidated the sequence of timesteps this
- fix needs to process.
-
-*Invalid timestep reset for fix ave/chunk*
- Resetting the timestep has invalidated the sequence of timesteps this
- fix needs to process.
-
-*Invalid timestep reset for fix ave/correlate*
- Resetting the timestep has invalidated the sequence of timesteps this
- fix needs to process.
-
-*Invalid timestep reset for fix ave/histo*
- Resetting the timestep has invalidated the sequence of timesteps this
- fix needs to process.
-
-*Invalid timestep reset for fix ave/spatial*
- Resetting the timestep has invalidated the sequence of timesteps this
- fix needs to process.
-
-*Invalid timestep reset for fix ave/time*
- Resetting the timestep has invalidated the sequence of timesteps this
- fix needs to process.
-
-*Invalid tmax in tad command*
- The value must be greater than 0.0.
-
-*Invalid type for mass set*
- Mass command must set a type from 1-N where N is the number of atom
- types.
-
-*Invalid use of library file() function*
- This function is called thru the library interface. This
- error should not occur. Contact the developers if it does.
-
-*Invalid value in set command*
- The value specified for the setting is invalid, likely because it is
- too small or too large.
-
-*Invalid variable evaluation in variable formula*
- A variable used in a formula could not be evaluated.
-
-*Invalid variable in next command*
- Self-explanatory.
-
-*Invalid variable name*
- Variable name used in an input script line is invalid.
-
-*Invalid variable name in variable formula*
- Variable name is not recognized.
-
-*Invalid variable style in special function next*
- Only file-style or atomfile-style variables can be used with next().
-
-*Invalid variable style with next command*
- Variable styles *equal* and *world* cannot be used in a next
- command.
-
-*Invalid volume in set command*
- Volume must be > 0.0.
-
-*Invalid wiggle direction for fix wall/gran*
- Self-explanatory.
-
-*Invoked angle equil angle on angle style none*
- Self-explanatory.
-
-*Invoked angle single on angle style none*
- Self-explanatory.
-
-*Invoked bond equil distance on bond style none*
- Self-explanatory.
-
-*Invoked bond single on bond style none*
- Self-explanatory.
-
-*Invoked pair single on pair style none*
- A command (e.g. a dump) attempted to invoke the single() function on a
- pair style none, which is illegal. You are probably attempting to
- compute per-atom quantities with an undefined pair style.
-
-*Invoking coulombic in pair style lj/coul requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Invoking coulombic in pair style lj/long/dipole/long requires atom attribute q*
- The atom style defined does not have these attributes.
-
-*KIM neighbor iterator exceeded range*
- This should not happen. It likely indicates a bug
- in the KIM implementation of the interatomic potential
- where it is requesting neighbors incorrectly.
-
-*KOKKOS package does not yet support comm_style tiled*
- Self-explanatory.
-
-*KOKKOS package requires a kokkos enabled atom_style*
- Self-explanatory.
-
-*KSpace accuracy must be > 0*
- The kspace accuracy designated in the input must be greater than zero.
-
-*KSpace accuracy too large to estimate G vector*
- Reduce the accuracy request or specify gwald explicitly
- via the kspace_modify command.
-
-*KSpace accuracy too low*
- Requested accuracy must be less than 1.0.
-
-*KSpace solver requires a pair style*
- No pair style is defined.
-
-*KSpace style does not yet support triclinic geometries*
- The specified kspace style does not allow for non-orthogonal
- simulation boxes.
-
-*KSpace style has not yet been set*
- Cannot use kspace_modify command until a kspace style is set.
-
-*KSpace style is incompatible with Pair style*
- Setting a kspace style requires that a pair style with matching
- long-range Coulombic or dispersion components be used.
-
-*Keyword %s in MEAM parameter file not recognized*
- Self-explanatory.
-
-*Kokkos has been compiled for CUDA but no GPUs are requested*
- One or more GPUs must be used when Kokkos is compiled for CUDA.
-
-*Kspace style does not support compute group/group*
- Self-explanatory.
-
-*Kspace style pppm/disp/tip4p requires newton on*
- Self-explanatory.
-
-*Kspace style pppm/tip4p requires newton on*
- Self-explanatory.
-
-*Kspace style requires atom attribute q*
- The atom style defined does not have these attributes.
-
-*Kspace_modify eigtol must be smaller than one*
- Self-explanatory.
-
-*LAMMPS is not built with Python embedded*
- This is done by including the PYTHON package before LAMMPS is built.
- This is required to use python-style variables.
-
-*LAMMPS unit_style lj not supported by KIM models*
- Self-explanatory. Check the input script or data file.
-
-*LJ6 off not supported in pair_style buck/long/coul/long*
- Self-exlanatory.
-
-*Label wasn't found in input script*
- Self-explanatory.
-
-*Lattice orient vectors are not orthogonal*
- The three specified lattice orientation vectors must be mutually
- orthogonal.
-
-*Lattice orient vectors are not right-handed*
- The three specified lattice orientation vectors must create a
- right-handed coordinate system such that a1 cross a2 = a3.
-
-*Lattice primitive vectors are collinear*
- The specified lattice primitive vectors do not for a unit cell with
- non-zero volume.
-
-*Lattice settings are not compatible with 2d simulation*
- One or more of the specified lattice vectors has a non-zero z
- component.
-
-*Lattice spacings are invalid*
- Each x,y,z spacing must be > 0.
-
-*Lattice style incompatible with simulation dimension*
- 2d simulation can use sq, sq2, or hex lattice. 3d simulation can use
- sc, bcc, or fcc lattice.
-
-*Log of zero/negative value in variable formula*
- Self-explanatory.
-
-*Lost atoms via balance: original %ld current %ld*
- This should not occur. Report the problem to the developers.
-
-*Lost atoms: original %ld current %ld*
- Lost atoms are checked for each time thermo output is done. See the
- thermo_modify lost command for options. Lost atoms usually indicate
- bad dynamics, e.g. atoms have been blown far out of the simulation
- box, or moved futher than one processor's sub-domain away before
- reneighboring.
-
-*MEAM library error %d*
- A call to the MEAM Fortran library returned an error.
-
-*MPI_LMP_BIGINT and bigint in lmptype.h are not compatible*
- The size of the MPI datatype does not match the size of a bigint.
-
-*MPI_LMP_TAGINT and tagint in lmptype.h are not compatible*
- The size of the MPI datatype does not match the size of a tagint.
-
-*MSM can only currently be used with comm_style brick*
- This is a current restriction in LAMMPS.
-
-*MSM grid is too large*
- The global MSM grid is larger than OFFSET in one or more dimensions.
- OFFSET is currently set to 16384. You likely need to decrease the
- requested accuracy.
-
-*MSM order must be 4, 6, 8, or 10*
- This is a limitation of the MSM implementation in LAMMPS:
- the MSM order can only be 4, 6, 8, or 10.
-
-*Mass command before simulation box is defined*
- The mass command cannot be used before a read_data, read_restart, or
- create_box command.
-
-*Matrix factorization to split dispersion coefficients failed*
- This should not normally happen. Contact the developers.
-
-*Min_style command before simulation box is defined*
- The min_style command cannot be used before a read_data, read_restart,
- or create_box command.
-
-*Minimization could not find thermo_pe compute*
- This compute is created by the thermo command. It must have been
- explicitly deleted by a uncompute command.
-
-*Minimize command before simulation box is defined*
- The minimize command cannot be used before a read_data, read_restart,
- or create_box command.
-
-*Mismatched brackets in variable*
- Self-explanatory.
-
-*Mismatched compute in variable formula*
- A compute is referenced incorrectly or a compute that produces per-atom
- values is used in an equal-style variable formula.
-
-*Mismatched fix in variable formula*
- A fix is referenced incorrectly or a fix that produces per-atom
- values is used in an equal-style variable formula.
-
-*Mismatched variable in variable formula*
- A variable is referenced incorrectly or an atom-style variable that
- produces per-atom values is used in an equal-style variable
- formula.
-
-*Modulo 0 in variable formula*
- Self-explanatory.
-
-*Molecule IDs too large for compute chunk/atom*
- The IDs must not be larger than can be stored in a 32-bit integer
- since chunk IDs are 32-bit integers.
-
-*Molecule auto special bond generation overflow*
- Counts exceed maxspecial setting for other atoms in system.
-
-*Molecule file has angles but no nangles setting*
- Self-explanatory.
-
-*Molecule file has body params but no setting for them*
- Self-explanatory.
-
-*Molecule file has bonds but no nbonds setting*
- Self-explanatory.
-
-*Molecule file has dihedrals but no ndihedrals setting*
- Self-explanatory.
-
-*Molecule file has impropers but no nimpropers setting*
- Self-explanatory.
-
-*Molecule file has no Body Doubles section*
- Self-explanatory.
-
-*Molecule file has no Body Integers section*
- Self-explanatory.
-
-*Molecule file has special flags but no bonds*
- Self-explanatory.
-
-*Molecule file needs both Special Bond sections*
- Self-explanatory.
-
-*Molecule file requires atom style body*
- Self-explanatory.
-
-*Molecule file shake flags not before shake atoms*
- The order of the two sections is important.
-
-*Molecule file shake flags not before shake bonds*
- The order of the two sections is important.
-
-*Molecule file shake info is incomplete*
- All 3 SHAKE sections are needed.
-
-*Molecule file special list does not match special count*
- The number of values in an atom's special list does not match count.
-
-*Molecule file z center-of-mass must be 0.0 for 2d*
- Self-explanatory.
-
-*Molecule file z coord must be 0.0 for 2d*
- Self-explanatory.
-
-*Molecule natoms must be 1 for body particle*
- Self-explanatory.
-
-*Molecule sizescale must be 1.0 for body particle*
- Self-explanatory.
-
-*Molecule template ID for atom_style template does not exist*
- Self-explanatory.
-
-*Molecule template ID for create_atoms does not exist*
- Self-explantory.
-
-*Molecule template ID for fix deposit does not exist*
- Self-explanatory.
-
-*Molecule template ID for fix gcmc does not exist*
- Self-explanatory.
-
-*Molecule template ID for fix pour does not exist*
- Self-explanatory.
-
-*Molecule template ID for fix rigid/small does not exist*
- Self-explanatory.
-
-*Molecule template ID for fix shake does not exist*
- Self-explanatory.
-
-*Molecule template ID must be alphanumeric or underscore characters*
- Self-explanatory.
-
-*Molecule toplogy/atom exceeds system topology/atom*
- The number of bonds, angles, etc per-atom in the molecule exceeds the
- system setting. See the create_box command for how to specify these
- values.
-
-*Molecule topology type exceeds system topology type*
- The number of bond, angle, etc types in the molecule exceeds the
- system setting. See the create_box command for how to specify these
- values.
-
-*More than one fix deform*
- Only one fix deform can be defined at a time.
-
-*More than one fix freeze*
- Only one of these fixes can be defined, since the granular pair
- potentials access it.
-
-*More than one fix shake*
- Only one fix shake can be defined.
-
-*Mu not allowed when not using semi-grand in fix atom/swap command*
- Self-explanatory.
-
-*Must define angle_style before Angle Coeffs*
- Must use an angle_style command before reading a data file that
- defines Angle Coeffs.
-
-*Must define angle_style before BondAngle Coeffs*
- Must use an angle_style command before reading a data file that
- defines Angle Coeffs.
-
-*Must define angle_style before BondBond Coeffs*
- Must use an angle_style command before reading a data file that
- defines Angle Coeffs.
-
-*Must define bond_style before Bond Coeffs*
- Must use a bond_style command before reading a data file that
- defines Bond Coeffs.
-
-*Must define dihedral_style before AngleAngleTorsion Coeffs*
- Must use a dihedral_style command before reading a data file that
- defines AngleAngleTorsion Coeffs.
-
-*Must define dihedral_style before AngleTorsion Coeffs*
- Must use a dihedral_style command before reading a data file that
- defines AngleTorsion Coeffs.
-
-*Must define dihedral_style before BondBond13 Coeffs*
- Must use a dihedral_style command before reading a data file that
- defines BondBond13 Coeffs.
-
-*Must define dihedral_style before Dihedral Coeffs*
- Must use a dihedral_style command before reading a data file that
- defines Dihedral Coeffs.
-
-*Must define dihedral_style before EndBondTorsion Coeffs*
- Must use a dihedral_style command before reading a data file that
- defines EndBondTorsion Coeffs.
-
-*Must define dihedral_style before MiddleBondTorsion Coeffs*
- Must use a dihedral_style command before reading a data file that
- defines MiddleBondTorsion Coeffs.
-
-*Must define improper_style before AngleAngle Coeffs*
- Must use an improper_style command before reading a data file that
- defines AngleAngle Coeffs.
-
-*Must define improper_style before Improper Coeffs*
- Must use an improper_style command before reading a data file that
- defines Improper Coeffs.
-
-*Must define pair_style before Pair Coeffs*
- Must use a pair_style command before reading a data file that defines
- Pair Coeffs.
-
-*Must define pair_style before PairIJ Coeffs*
- Must use a pair_style command before reading a data file that defines
- PairIJ Coeffs.
-
-*Must have more than one processor partition to temper*
- Cannot use the temper command with only one processor partition. Use
- the -partition command-line option.
-
-*Must read Atoms before Angles*
- The Atoms section of a data file must come before an Angles section.
-
-*Must read Atoms before Bodies*
- The Atoms section of a data file must come before a Bodies section.
-
-*Must read Atoms before Bonds*
- The Atoms section of a data file must come before a Bonds section.
-
-*Must read Atoms before Dihedrals*
- The Atoms section of a data file must come before a Dihedrals section.
-
-*Must read Atoms before Ellipsoids*
- The Atoms section of a data file must come before a Ellipsoids
- section.
-
-*Must read Atoms before Impropers*
- The Atoms section of a data file must come before an Impropers
- section.
-
-*Must read Atoms before Lines*
- The Atoms section of a data file must come before a Lines section.
-
-*Must read Atoms before Triangles*
- The Atoms section of a data file must come before a Triangles section.
-
-*Must read Atoms before Velocities*
- The Atoms section of a data file must come before a Velocities
- section.
-
-*Must set both respa inner and outer*
- Cannot use just the inner or outer option with respa without using the
- other.
-
-*Must set number of threads via package omp command*
- Because you are using the USER-OMP package, set the number of threads
- via its settings, not by the pair_style snap nthreads setting.
-
-*Must shrink-wrap piston boundary*
- The boundary style of the face where the piston is applied must be of
- type s (shrink-wrapped).
-
-*Must specify a region in fix deposit*
- The region keyword must be specified with this fix.
-
-*Must specify a region in fix pour*
- Self-explanatory.
-
-*Must specify at least 2 types in fix atom/swap command*
- Self-explanatory.
-
-*Must use 'kspace_modify pressure/scalar no' for rRESPA with kspace_style MSM*
- The kspace scalar pressure option cannot (yet) be used with rRESPA.
-
-*Must use 'kspace_modify pressure/scalar no' for tensor components with kspace_style msm*
- Otherwise MSM will compute only a scalar pressure. See the kspace_modify
- command for details on this setting.
-
-*Must use 'kspace_modify pressure/scalar no' to obtain per-atom virial with kspace_style MSM*
- The kspace scalar pressure option cannot be used to obtain per-atom virial.
-
-*Must use 'kspace_modify pressure/scalar no' with GPU MSM Pair styles*
- The kspace scalar pressure option is not (yet) compatible with GPU MSM Pair styles.
-
-*Must use 'kspace_modify pressure/scalar no' with kspace_style msm/cg*
- The kspace scalar pressure option is not compatible with kspace_style msm/cg.
-
-*Must use -in switch with multiple partitions*
- A multi-partition simulation cannot read the input script from stdin.
- The -in command-line option must be used to specify a file.
-
-*Must use Kokkos half/thread or full neighbor list with threads or GPUs*
- Using Kokkos half-neighbor lists with threading is not allowed.
-
-*Must use a block or cylinder region with fix pour*
- Self-explanatory.
-
-*Must use a block region with fix pour for 2d simulations*
- Self-explanatory.
-
-*Must use a bond style with TIP4P potential*
- TIP4P potentials assume bond lengths in water are constrained
- by a fix shake command.
-
-*Must use a molecular atom style with fix poems molecule*
- Self-explanatory.
-
-*Must use a z-axis cylinder region with fix pour*
- Self-explanatory.
-
-*Must use an angle style with TIP4P potential*
- TIP4P potentials assume angles in water are constrained by a fix shake
- command.
-
-*Must use atom map style array with Kokkos*
- See the atom_modify map command.
-
-*Must use atom style with molecule IDs with fix bond/swap*
- Self-explanatory.
-
-*Must use pair_style comb or comb3 with fix qeq/comb*
- Self-explanatory.
-
-*Must use variable energy with fix addforce*
- Must define an energy vartiable when applyting a dynamic
- force during minimization.
-
-*Must use variable energy with fix efield*
- You must define an energy when performing a minimization with a
- variable E-field.
-
-*NEB command before simulation box is defined*
- Self-explanatory.
-
-*NEB requires damped dynamics minimizer*
- Use a different minimization style.
-
-*NEB requires use of fix neb*
- Self-explanatory.
-
-*NL ramp in wall/piston only implemented in zlo for now*
- The ramp keyword can only be used for piston applied to face zlo.
-
-*Need nswaptypes mu values in fix atom/swap command*
- Self-explanatory.
-
-*Needed bonus data not in data file*
- Some atom styles require bonus data. See the read_data doc page for
- details.
-
-*Needed molecular topology not in data file*
- The header of the data file indicated bonds, angles, etc would be
- included, but they are not present.
-
-*Neigh_modify exclude molecule requires atom attribute molecule*
- Self-explanatory.
-
-*Neigh_modify include group != atom_modify first group*
- Self-explanatory.
-
-*Neighbor delay must be 0 or multiple of every setting*
- The delay and every parameters set via the neigh_modify command are
- inconsistent. If the delay setting is non-zero, then it must be a
- multiple of the every setting.
-
-*Neighbor include group not allowed with ghost neighbors*
- This is a current restriction within LAMMPS.
-
-*Neighbor list overflow, boost neigh_modify one*
- There are too many neighbors of a single atom. Use the neigh_modify
- command to increase the max number of neighbors allowed for one atom.
- You may also want to boost the page size.
-
-*Neighbor multi not yet enabled for ghost neighbors*
- This is a current restriction within LAMMPS.
-
-*Neighbor multi not yet enabled for granular*
- Self-explanatory.
-
-*Neighbor multi not yet enabled for rRESPA*
- Self-explanatory.
-
-*Neighbor page size must be >= 10x the one atom setting*
- This is required to prevent wasting too much memory.
-
-*New atom IDs exceed maximum allowed ID*
- See the setting for tagint in the src/lmptype.h file.
-
-*New bond exceeded bonds per atom in create_bonds*
- See the read_data command for info on setting the "extra bond per
- atom" header value to allow for additional bonds to be formed.
-
-*New bond exceeded bonds per atom in fix bond/create*
- See the read_data command for info on setting the "extra bond per
- atom" header value to allow for additional bonds to be formed.
-
-*New bond exceeded special list size in fix bond/create*
- See the special_bonds extra command for info on how to leave space in
- the special bonds list to allow for additional bonds to be formed.
-
-*Newton bond change after simulation box is defined*
- The newton command cannot be used to change the newton bond value
- after a read_data, read_restart, or create_box command.
-
-*Next command must list all universe and uloop variables*
- This is to insure they stay in sync.
-
-*No Kspace style defined for compute group/group*
- Self-explanatory.
-
-*No OpenMP support compiled in*
- An OpenMP flag is set, but LAMMPS was not built with
- OpenMP support.
-
-*No angle style is defined for compute angle/local*
- Self-explanatory.
-
-*No angles allowed with this atom style*
- Self-explanatory.
-
-*No atoms in data file*
- The header of the data file indicated that atoms would be included,
- but they are not present.
-
-*No basis atoms in lattice*
- Basis atoms must be defined for lattice style user.
-
-*No bodies allowed with this atom style*
- Self-explanatory. Check data file.
-
-*No bond style is defined for compute bond/local*
- Self-explanatory.
-
-*No bonds allowed with this atom style*
- Self-explanatory.
-
-*No box information in dump. You have to use 'box no'*
- Self-explanatory.
-
-*No count or invalid atom count in molecule file*
- The number of atoms must be specified.
-
-*No dihedral style is defined for compute dihedral/local*
- Self-explanatory.
-
-*No dihedrals allowed with this atom style*
- Self-explanatory.
-
-*No dump custom arguments specified*
- The dump custom command requires that atom quantities be specified to
- output to dump file.
-
-*No dump local arguments specified*
- Self-explanatory.
-
-*No ellipsoids allowed with this atom style*
- Self-explanatory. Check data file.
-
-*No fix gravity defined for fix pour*
- Gravity is required to use fix pour.
-
-*No improper style is defined for compute improper/local*
- Self-explanatory.
-
-*No impropers allowed with this atom style*
- Self-explanatory.
-
-*No input values for fix ave/spatial*
- Self-explanatory.
-
-*No lines allowed with this atom style*
- Self-explanatory. Check data file.
-
-*No matching element in ADP potential file*
- The ADP potential file does not contain elements that match the
- requested elements.
-
-*No matching element in EAM potential file*
- The EAM potential file does not contain elements that match the
- requested elements.
-
-*No molecule topology allowed with atom style template*
- The data file cannot specify the number of bonds, angles, etc,
- because this info if inferred from the molecule templates.
-
-*No overlap of box and region for create_atoms*
- Self-explanatory.
-
-*No pair coul/streitz for fix qeq/slater*
- These commands must be used together.
-
-*No pair hbond/dreiding coefficients set*
- Self-explanatory.
-
-*No pair style defined for compute group/group*
- Cannot calculate group interactions without a pair style defined.
-
-*No pair style is defined for compute pair/local*
- Self-explanatory.
-
-*No pair style is defined for compute property/local*
- Self-explanatory.
-
-*No rigid bodies defined*
- The fix specification did not end up defining any rigid bodies.
-
-*No triangles allowed with this atom style*
- Self-explanatory. Check data file.
-
-*No values in fix ave/chunk command*
- Self-explanatory.
-
-*No values in fix ave/time command*
- Self-explanatory.
-
-*Non digit character between brackets in variable*
- Self-explantory.
-
-*Non integer # of swaps in temper command*
- Swap frequency in temper command must evenly divide the total # of
- timesteps.
-
-*Non-numeric box dimensions - simulation unstable*
- The box size has apparently blown up.
-
-*Non-zero atom IDs with atom_modify id = no*
- Self-explanatory.
-
-*Non-zero read_data shift z value for 2d simulation*
- Self-explanatory.
-
-*Nprocs not a multiple of N for -reorder*
- Self-explanatory.
-
-*Number of core atoms != number of shell atoms*
- There must be a one-to-one pairing of core and shell atoms.
-
-*Numeric index is out of bounds*
- A command with an argument that specifies an integer or range of
- integers is using a value that is less than 1 or greater than the
- maximum allowed limit.
-
-*One or more Atom IDs is negative*
- Atom IDs must be positive integers.
-
-*One or more atom IDs is too big*
- The limit on atom IDs is set by the SMALLBIG, BIGBIG, SMALLSMALL
- setting in your Makefile. See Section_start 2.2 of the manual for
- more details.
-
-*One or more atom IDs is zero*
- Either all atoms IDs must be zero or none of them.
-
-*One or more atoms belong to multiple rigid bodies*
- Two or more rigid bodies defined by the fix rigid command cannot
- contain the same atom.
-
-*One or more rigid bodies are a single particle*
- Self-explanatory.
-
-*One or zero atoms in rigid body*
- Any rigid body defined by the fix rigid command must contain 2 or more
- atoms.
-
-*Only 2 types allowed when not using semi-grand in fix atom/swap command*
- Self-explanatory.
-
-*Only one cut-off allowed when requesting all long*
- Self-explanatory.
-
-*Only one cutoff allowed when requesting all long*
- Self-explanatory.
-
-*Only zhi currently implemented for fix append/atoms*
- Self-explanatory.
-
-*Out of range atoms - cannot compute MSM*
- One or more atoms are attempting to map their charge to a MSM grid point
- that is not owned by a processor. This is likely for one of two
- reasons, both of them bad. First, it may mean that an atom near the
- boundary of a processor's sub-domain has moved more than 1/2 the
- :doc:`neighbor skin distance <neighbor>` without neighbor lists being
- rebuilt and atoms being migrated to new processors. This also means
- you may be missing pairwise interactions that need to be computed.
- The solution is to change the re-neighboring criteria via the
- `neigh_modify <neigh_modify>`_ command. The safest settings are "delay 0
- every 1 check yes". Second, it may mean that an atom has moved far
- outside a processor's sub-domain or even the entire simulation box.
- This indicates bad physics, e.g. due to highly overlapping atoms, too
- large a timestep, etc.
-
-*Out of range atoms - cannot compute PPPM*
- One or more atoms are attempting to map their charge to a PPPM grid
- point that is not owned by a processor. This is likely for one of two
- reasons, both of them bad. First, it may mean that an atom near the
- boundary of a processor's sub-domain has moved more than 1/2 the
- :doc:`neighbor skin distance <neighbor>` without neighbor lists being
- rebuilt and atoms being migrated to new processors. This also means
- you may be missing pairwise interactions that need to be computed.
- The solution is to change the re-neighboring criteria via the
- `neigh_modify <neigh_modify>`_ command. The safest settings are "delay 0
- every 1 check yes". Second, it may mean that an atom has moved far
- outside a processor's sub-domain or even the entire simulation box.
- This indicates bad physics, e.g. due to highly overlapping atoms, too
- large a timestep, etc.
-
-*Out of range atoms - cannot compute PPPMDisp*
- One or more atoms are attempting to map their charge to a PPPM grid
- point that is not owned by a processor. This is likely for one of two
- reasons, both of them bad. First, it may mean that an atom near the
- boundary of a processor's sub-domain has moved more than 1/2 the
- :doc:`neighbor skin distance <neighbor>` without neighbor lists being
- rebuilt and atoms being migrated to new processors. This also means
- you may be missing pairwise interactions that need to be computed.
- The solution is to change the re-neighboring criteria via the
- `neigh_modify <neigh_modify>`_ command. The safest settings are "delay 0
- every 1 check yes". Second, it may mean that an atom has moved far
- outside a processor's sub-domain or even the entire simulation box.
- This indicates bad physics, e.g. due to highly overlapping atoms, too
- large a timestep, etc.
-
-*Overflow of allocated fix vector storage*
- This should not normally happen if the fix correctly calculated
- how long the vector will grow to. Contact the developers.
-
-*Overlapping large/large in pair colloid*
- This potential is infinite when there is an overlap.
-
-*Overlapping small/large in pair colloid*
- This potential is infinite when there is an overlap.
-
-*POEMS fix must come before NPT/NPH fix*
- NPT/NPH fix must be defined in input script after all poems fixes,
- else the fix contribution to the pressure virial is incorrect.
-
-*PPPM can only currently be used with comm_style brick*
- This is a current restriction in LAMMPS.
-
-*PPPM grid is too large*
- The global PPPM grid is larger than OFFSET in one or more dimensions.
- OFFSET is currently set to 4096. You likely need to decrease the
- requested accuracy.
-
-*PPPM grid stencil extends beyond nearest neighbor processor*
- This is not allowed if the kspace_modify overlap setting is no.
-
-*PPPM order < minimum allowed order*
- The default minimum order is 2. This can be reset by the
- kspace_modify minorder command.
-
-*PPPM order cannot be < 2 or > than %d*
- This is a limitation of the PPPM implementation in LAMMPS.
-
-*PPPMDisp Coulomb grid is too large*
- The global PPPM grid is larger than OFFSET in one or more dimensions.
- OFFSET is currently set to 4096. You likely need to decrease the
- requested accuracy.
-
-*PPPMDisp Dispersion grid is too large*
- The global PPPM grid is larger than OFFSET in one or more dimensions.
- OFFSET is currently set to 4096. You likely need to decrease the
- requested accuracy.
-
-*PPPMDisp can only currently be used with comm_style brick*
- This is a current restriction in LAMMPS.
-
-*PPPMDisp coulomb order cannot be greater than %d*
- This is a limitation of the PPPM implementation in LAMMPS.
-
-*PPPMDisp used but no parameters set, for further information please see the pppm/disp documentation*
- An efficient and accurate usage of the pppm/disp requires settings via the kspace_modify command. Please see the pppm/disp documentation for further instructions.
-
-*PRD command before simulation box is defined*
- The prd command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*PRD nsteps must be multiple of t_event*
- Self-explanatory.
-
-*PRD t_corr must be multiple of t_event*
- Self-explanatory.
-
-*Package command after simulation box is defined*
- The package command cannot be used afer a read_data, read_restart, or
- create_box command.
-
-*Package cuda command without USER-CUDA package enabled*
- The USER-CUDA package must be installed via "make yes-user-cuda"
- before LAMMPS is built, and the "-c on" must be used to enable the
- package.
-
-*Package gpu command without GPU package installed*
- The GPU package must be installed via "make yes-gpu" before LAMMPS is
- built.
-
-*Package intel command without USER-INTEL package installed*
- The USER-INTEL package must be installed via "make yes-user-intel"
- before LAMMPS is built.
-
-*Package kokkos command without KOKKOS package enabled*
- The KOKKOS package must be installed via "make yes-kokkos" before
- LAMMPS is built, and the "-k on" must be used to enable the package.
-
-*Package omp command without USER-OMP package installed*
- The USER-OMP package must be installed via "make yes-user-omp" before
- LAMMPS is built.
-
-*Pair body requires atom style body*
- Self-explanatory.
-
-*Pair body requires body style nparticle*
- This pair style is specific to the nparticle body style.
-
-*Pair brownian requires atom style sphere*
- Self-explanatory.
-
-*Pair brownian requires extended particles*
- One of the particles has radius 0.0.
-
-*Pair brownian requires monodisperse particles*
- All particles must be the same finite size.
-
-*Pair brownian/poly requires atom style sphere*
- Self-explanatory.
-
-*Pair brownian/poly requires extended particles*
- One of the particles has radius 0.0.
-
-*Pair brownian/poly requires newton pair off*
- Self-explanatory.
-
-*Pair coeff for hybrid has invalid style*
- Style in pair coeff must have been listed in pair_style command.
-
-*Pair coul/wolf requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair cutoff < Respa interior cutoff*
- One or more pairwise cutoffs are too short to use with the specified
- rRESPA cutoffs.
-
-*Pair dipole/cut requires atom attributes q, mu, torque*
- The atom style defined does not have these attributes.
-
-*Pair dipole/cut/gpu requires atom attributes q, mu, torque*
- The atom style defined does not have this attribute.
-
-*Pair dipole/long requires atom attributes q, mu, torque*
- The atom style defined does not have these attributes.
-
-*Pair dipole/sf/gpu requires atom attributes q, mu, torque*
- The atom style defined does not one or more of these attributes.
-
-*Pair distance < table inner cutoff*
- Two atoms are closer together than the pairwise table allows.
-
-*Pair distance > table outer cutoff*
- Two atoms are further apart than the pairwise table allows.
-
-*Pair dpd requires ghost atoms store velocity*
- Use the comm_modify vel yes command to enable this.
-
-*Pair gayberne epsilon a,b,c coeffs are not all set*
- Each atom type involved in pair_style gayberne must
- have these 3 coefficients set at least once.
-
-*Pair gayberne requires atom style ellipsoid*
- Self-explanatory.
-
-*Pair gayberne requires atoms with same type have same shape*
- Self-explanatory.
-
-*Pair gayberne/gpu requires atom style ellipsoid*
- Self-explanatory.
-
-*Pair gayberne/gpu requires atoms with same type have same shape*
- Self-explanatory.
-
-*Pair granular requires atom attributes radius, rmass*
- The atom style defined does not have these attributes.
-
-*Pair granular requires ghost atoms store velocity*
- Use the comm_modify vel yes command to enable this.
-
-*Pair granular with shear history requires newton pair off*
- This is a current restriction of the implementation of pair
- granular styles with history.
-
-*Pair hybrid single calls do not support per sub-style special bond values*
- Self-explanatory.
-
-*Pair hybrid sub-style does not support single call*
- You are attempting to invoke a single() call on a pair style
- that doesn't support it.
-
-*Pair hybrid sub-style is not used*
- No pair_coeff command used a sub-style specified in the pair_style
- command.
-
-*Pair inner cutoff < Respa interior cutoff*
- One or more pairwise cutoffs are too short to use with the specified
- rRESPA cutoffs.
-
-*Pair inner cutoff >= Pair outer cutoff*
- The specified cutoffs for the pair style are inconsistent.
-
-*Pair line/lj requires atom style line*
- Self-explanatory.
-
-*Pair lj/long/dipole/long requires atom attributes mu, torque*
- The atom style defined does not have these attributes.
-
-*Pair lubricate requires atom style sphere*
- Self-explanatory.
-
-*Pair lubricate requires ghost atoms store velocity*
- Use the comm_modify vel yes command to enable this.
-
-*Pair lubricate requires monodisperse particles*
- All particles must be the same finite size.
-
-*Pair lubricate/poly requires atom style sphere*
- Self-explanatory.
-
-*Pair lubricate/poly requires extended particles*
- One of the particles has radius 0.0.
-
-*Pair lubricate/poly requires ghost atoms store velocity*
- Use the comm_modify vel yes command to enable this.
-
-*Pair lubricate/poly requires newton pair off*
- Self-explanatory.
-
-*Pair lubricateU requires atom style sphere*
- Self-explanatory.
-
-*Pair lubricateU requires ghost atoms store velocity*
- Use the comm_modify vel yes command to enable this.
-
-*Pair lubricateU requires monodisperse particles*
- All particles must be the same finite size.
-
-*Pair lubricateU/poly requires ghost atoms store velocity*
- Use the comm_modify vel yes command to enable this.
-
-*Pair lubricateU/poly requires newton pair off*
- Self-explanatory.
-
-*Pair peri lattice is not identical in x, y, and z*
- The lattice defined by the lattice command must be cubic.
-
-*Pair peri requires a lattice be defined*
- Use the lattice command for this purpose.
-
-*Pair peri requires an atom map, see atom_modify*
- Even for atomic systems, an atom map is required to find Peridynamic
- bonds. Use the atom_modify command to define one.
-
-*Pair resquared epsilon a,b,c coeffs are not all set*
- Self-explanatory.
-
-*Pair resquared epsilon and sigma coeffs are not all set*
- Self-explanatory.
-
-*Pair resquared requires atom style ellipsoid*
- Self-explanatory.
-
-*Pair resquared requires atoms with same type have same shape*
- Self-explanatory.
-
-*Pair resquared/gpu requires atom style ellipsoid*
- Self-explanatory.
-
-*Pair resquared/gpu requires atoms with same type have same shape*
- Self-explanatory.
-
-*Pair style AIREBO requires atom IDs*
- This is a requirement to use the AIREBO potential.
-
-*Pair style AIREBO requires newton pair on*
- See the newton command. This is a restriction to use the AIREBO
- potential.
-
-*Pair style BOP requires atom IDs*
- This is a requirement to use the BOP potential.
-
-*Pair style BOP requires newton pair on*
- See the newton command. This is a restriction to use the BOP
- potential.
-
-*Pair style COMB requires atom IDs*
- This is a requirement to use the AIREBO potential.
-
-*Pair style COMB requires atom attribute q*
- Self-explanatory.
-
-*Pair style COMB requires newton pair on*
- See the newton command. This is a restriction to use the COMB
- potential.
-
-*Pair style COMB3 requires atom IDs*
- This is a requirement to use the COMB3 potential.
-
-*Pair style COMB3 requires atom attribute q*
- Self-explanatory.
-
-*Pair style COMB3 requires newton pair on*
- See the newton command. This is a restriction to use the COMB3
- potential.
-
-*Pair style LCBOP requires atom IDs*
- This is a requirement to use the LCBOP potential.
-
-*Pair style LCBOP requires newton pair on*
- See the newton command. This is a restriction to use the Tersoff
- potential.
-
-*Pair style MEAM requires newton pair on*
- See the newton command. This is a restriction to use the MEAM
- potential.
-
-*Pair style SNAP requires newton pair on*
- See the newton command. This is a restriction to use the SNAP
- potential.
-
-*Pair style Stillinger-Weber requires atom IDs*
- This is a requirement to use the SW potential.
-
-*Pair style Stillinger-Weber requires newton pair on*
- See the newton command. This is a restriction to use the SW
- potential.
-
-*Pair style Tersoff requires atom IDs*
- This is a requirement to use the Tersoff potential.
-
-*Pair style Tersoff requires newton pair on*
- See the newton command. This is a restriction to use the Tersoff
- potential.
-
-*Pair style Vashishta requires atom IDs*
- This is a requirement to use the Vashishta potential.
-
-*Pair style Vashishta requires newton pair on*
- See the newton command. This is a restriction to use the Vashishta
- potential.
-
-*Pair style bop requires comm ghost cutoff at least 3x larger than %g*
- Use the communicate ghost command to set this. See the pair bop
- doc page for more details.
-
-*Pair style born/coul/long requires atom attribute q*
- An atom style that defines this attribute must be used.
-
-*Pair style born/coul/long/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style born/coul/wolf requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style buck/coul/cut requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style buck/coul/long requires atom attribute q*
- The atom style defined does not have these attributes.
-
-*Pair style buck/coul/long/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style buck/long/coul/long requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style coul/cut requires atom attribute q*
- The atom style defined does not have these attributes.
-
-*Pair style coul/cut/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style coul/debye/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style coul/dsf requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style coul/dsf/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style coul/long/gpu requires atom attribute q*
- The atom style defined does not have these attributes.
-
-*Pair style coul/streitz requires atom attribute q*
- Self-explanatory.
-
-*Pair style does not have extra field requested by compute pair/local*
- The pair style does not support the pN value requested by the compute
- pair/local command.
-
-*Pair style does not support bond_style quartic*
- The pair style does not have a single() function, so it can
- not be invoked by bond_style quartic.
-
-*Pair style does not support compute group/group*
- The pair_style does not have a single() function, so it cannot be
- invokded by the compute group/group command.
-
-*Pair style does not support compute pair/local*
- The pair style does not have a single() function, so it can
- not be invoked by compute pair/local.
-
-*Pair style does not support compute property/local*
- The pair style does not have a single() function, so it can
- not be invoked by fix bond/swap.
-
-*Pair style does not support fix bond/swap*
- The pair style does not have a single() function, so it can
- not be invoked by fix bond/swap.
-
-*Pair style does not support pair_write*
- The pair style does not have a single() function, so it can
- not be invoked by pair write.
-
-*Pair style does not support rRESPA inner/middle/outer*
- You are attempting to use rRESPA options with a pair style that
- does not support them.
-
-*Pair style granular with history requires atoms have IDs*
- Atoms in the simulation do not have IDs, so history effects
- cannot be tracked by the granular pair potential.
-
-*Pair style hbond/dreiding requires an atom map, see atom_modify*
- Self-explanatory.
-
-*Pair style hbond/dreiding requires atom IDs*
- Self-explanatory.
-
-*Pair style hbond/dreiding requires molecular system*
- Self-explanatory.
-
-*Pair style hbond/dreiding requires newton pair on*
- See the newton command for details.
-
-*Pair style hybrid cannot have hybrid as an argument*
- Self-explanatory.
-
-*Pair style hybrid cannot have none as an argument*
- Self-explanatory.
-
-*Pair style is incompatible with KSpace style*
- If a pair style with a long-range Coulombic component is selected,
- then a kspace style must also be used.
-
-*Pair style is incompatible with TIP4P KSpace style*
- The pair style does not have the requires TIP4P settings.
-
-*Pair style lj/charmm/coul/charmm requires atom attribute q*
- The atom style defined does not have these attributes.
-
-*Pair style lj/charmm/coul/long requires atom attribute q*
- The atom style defined does not have these attributes.
-
-*Pair style lj/charmm/coul/long/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style lj/class2/coul/cut requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style lj/class2/coul/long requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style lj/class2/coul/long/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style lj/cut/coul/cut requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style lj/cut/coul/cut/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style lj/cut/coul/debye/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style lj/cut/coul/dsf requires atom attribute q*
- The atom style defined does not have these attributes.
-
-*Pair style lj/cut/coul/dsf/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style lj/cut/coul/long requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style lj/cut/coul/long/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style lj/cut/tip4p/cut requires atom IDs*
- This is a requirement to use this potential.
-
-*Pair style lj/cut/tip4p/cut requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style lj/cut/tip4p/cut requires newton pair on*
- See the newton command. This is a restriction to use this
- potential.
-
-*Pair style lj/cut/tip4p/long requires atom IDs*
- There are no atom IDs defined in the system and the TIP4P potential
- requires them to find O,H atoms with a water molecule.
-
-*Pair style lj/cut/tip4p/long requires atom attribute q*
- The atom style defined does not have these attributes.
-
-*Pair style lj/cut/tip4p/long requires newton pair on*
- This is because the computation of constraint forces within a water
- molecule adds forces to atoms owned by other processors.
-
-*Pair style lj/gromacs/coul/gromacs requires atom attribute q*
- An atom_style with this attribute is needed.
-
-*Pair style lj/long/dipole/long does not currently support respa*
- This feature is not yet supported.
-
-*Pair style lj/long/tip4p/long requires atom IDs*
- There are no atom IDs defined in the system and the TIP4P potential
- requires them to find O,H atoms with a water molecule.
-
-*Pair style lj/long/tip4p/long requires atom attribute q*
- The atom style defined does not have these attributes.
-
-*Pair style lj/long/tip4p/long requires newton pair on*
- This is because the computation of constraint forces within a water
- molecule adds forces to atoms owned by other processors.
-
-*Pair style lj/sdk/coul/long/gpu requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style nb3b/harmonic requires atom IDs*
- This is a requirement to use this potential.
-
-*Pair style nb3b/harmonic requires newton pair on*
- See the newton command. This is a restriction to use this potential.
-
-*Pair style nm/cut/coul/cut requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style nm/cut/coul/long requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style peri requires atom style peri*
- Self-explanatory.
-
-*Pair style polymorphic requires atom IDs*
- This is a requirement to use the polymorphic potential.
-
-*Pair style polymorphic requires newton pair on*
- See the newton command. This is a restriction to use the polymorphic
- potential.
-
-*Pair style reax requires atom IDs*
- This is a requirement to use the ReaxFF potential.
-
-*Pair style reax requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style reax requires newton pair on*
- This is a requirement to use the ReaxFF potential.
-
-*Pair style requires a KSpace style*
- No kspace style is defined.
-
-*Pair style requires use of kspace_style ewald/disp*
- Self-explanatory.
-
-*Pair style sw/gpu requires atom IDs*
- This is a requirement to use this potential.
-
-*Pair style sw/gpu requires newton pair off*
- See the newton command. This is a restriction to use this potential.
-
-*Pair style tersoff/gpu requires atom IDs*
- This is a requirement to use the tersoff/gpu potential.
-
-*Pair style tersoff/gpu requires newton pair off*
- See the newton command. This is a restriction to use this pair style.
-
-*Pair style tip4p/cut requires atom IDs*
- This is a requirement to use this potential.
-
-*Pair style tip4p/cut requires atom attribute q*
- The atom style defined does not have this attribute.
-
-*Pair style tip4p/cut requires newton pair on*
- See the newton command. This is a restriction to use this potential.
-
-*Pair style tip4p/long requires atom IDs*
- There are no atom IDs defined in the system and the TIP4P potential
- requires them to find O,H atoms with a water molecule.
-
-*Pair style tip4p/long requires atom attribute q*
- The atom style defined does not have these attributes.
-
-*Pair style tip4p/long requires newton pair on*
- This is because the computation of constraint forces within a water
- molecule adds forces to atoms owned by other processors.
-
-*Pair table cutoffs must all be equal to use with KSpace*
- When using pair style table with a long-range KSpace solver, the
- cutoffs for all atom type pairs must all be the same, since the
- long-range solver starts at that cutoff.
-
-*Pair table parameters did not set N*
- List of pair table parameters must include N setting.
-
-*Pair tersoff/zbl requires metal or real units*
- This is a current restriction of this pair potential.
-
-*Pair tersoff/zbl/kk requires metal or real units*
- This is a current restriction of this pair potential.
-
-*Pair tri/lj requires atom style tri*
- Self-explanatory.
-
-*Pair yukawa/colloid requires atom style sphere*
- Self-explantory.
-
-*Pair yukawa/colloid requires atoms with same type have same radius*
- Self-explantory.
-
-*Pair yukawa/colloid/gpu requires atom style sphere*
- Self-explanatory.
-
-*PairKIM only works with 3D problems*
- This is a current limitation.
-
-*Pair_coeff command before pair_style is defined*
- Self-explanatory.
-
-*Pair_coeff command before simulation box is defined*
- The pair_coeff command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*Pair_modify command before pair_style is defined*
- Self-explanatory.
-
-*Pair_modify special setting for pair hybrid incompatible with global special_bonds setting*
- Cannot override a setting of 0.0 or 1.0 or change a setting between
- 0.0 and 1.0.
-
-*Pair_write command before pair_style is defined*
- Self-explanatory.
-
-*Particle on or inside fix wall surface*
- Particles must be "exterior" to the wall in order for energy/force to
- be calculated.
-
-*Particle outside surface of region used in fix wall/region*
- Particles must be inside the region for energy/force to be calculated.
- A particle outside the region generates an error.
-
-*Per-atom compute in equal-style variable formula*
- Equal-style variables cannot use per-atom quantities.
-
-*Per-atom energy was not tallied on needed timestep*
- You are using a thermo keyword that requires potentials to
- have tallied energy, but they didn't on this timestep. See the
- variable doc page for ideas on how to make this work.
-
-*Per-atom fix in equal-style variable formula*
- Equal-style variables cannot use per-atom quantities.
-
-*Per-atom virial was not tallied on needed timestep*
- You are using a thermo keyword that requires potentials to have
- tallied the virial, but they didn't on this timestep. See the
- variable doc page for ideas on how to make this work.
-
-*Per-processor system is too big*
- The number of owned atoms plus ghost atoms on a single
- processor must fit in 32-bit integer.
-
-*Potential energy ID for fix neb does not exist*
- Self-explanatory.
-
-*Potential energy ID for fix nvt/nph/npt does not exist*
- A compute for potential energy must be defined.
-
-*Potential file has duplicate entry*
- The potential file has more than one entry for the same element.
-
-*Potential file is missing an entry*
- The potential file does not have a needed entry.
-
-*Power by 0 in variable formula*
- Self-explanatory.
-
-*Pressure ID for fix box/relax does not exist*
- The compute ID needed to compute pressure for the fix does not
- exist.
-
-*Pressure ID for fix modify does not exist*
- Self-explanatory.
-
-*Pressure ID for fix npt/nph does not exist*
- Self-explanatory.
-
-*Pressure ID for fix press/berendsen does not exist*
- The compute ID needed to compute pressure for the fix does not
- exist.
-
-*Pressure ID for fix rigid npt/nph does not exist*
- Self-explanatory.
-
-*Pressure ID for thermo does not exist*
- The compute ID needed to compute pressure for thermodynamics does not
- exist.
-
-*Pressure control can not be used with fix nvt*
- Self-explanatory.
-
-*Pressure control can not be used with fix nvt/asphere*
- Self-explanatory.
-
-*Pressure control can not be used with fix nvt/body*
- Self-explanatory.
-
-*Pressure control can not be used with fix nvt/sllod*
- Self-explanatory.
-
-*Pressure control can not be used with fix nvt/sphere*
- Self-explanatory.
-
-*Pressure control must be used with fix nph*
- Self-explanatory.
-
-*Pressure control must be used with fix nph/asphere*
- Self-explanatory.
-
-*Pressure control must be used with fix nph/body*
- Self-explanatory.
-
-*Pressure control must be used with fix nph/small*
- Self-explanatory.
-
-*Pressure control must be used with fix nph/sphere*
- Self-explanatory.
-
-*Pressure control must be used with fix nphug*
- A pressure control keyword (iso, aniso, tri, x, y, or z) must be
- provided.
-
-*Pressure control must be used with fix npt*
- Self-explanatory.
-
-*Pressure control must be used with fix npt/asphere*
- Self-explanatory.
-
-*Pressure control must be used with fix npt/body*
- Self-explanatory.
-
-*Pressure control must be used with fix npt/sphere*
- Self-explanatory.
-
-*Processor count in z must be 1 for 2d simulation*
- Self-explanatory.
-
-*Processor partitions do not match number of allocated processors*
- The total number of processors in all partitions must match the number
- of processors LAMMPS is running on.
-
-*Processors command after simulation box is defined*
- The processors command cannot be used after a read_data, read_restart,
- or create_box command.
-
-*Processors custom grid file is inconsistent*
- The vales in the custom file are not consistent with the number of
- processors you are running on or the Px,Py,Pz settings of the
- processors command. Or there was not a setting for every processor.
-
-*Processors grid numa and map style are incompatible*
- Using numa for gstyle in the processors command requires using
- cart for the map option.
-
-*Processors part option and grid style are incompatible*
- Cannot use gstyle numa or custom with the part option.
-
-*Processors twogrid requires proc count be a multiple of core count*
- Self-explanatory.
-
-*Pstart and Pstop must have the same value*
- Self-explanatory.
-
-*Python function evaluation failed*
- The Python function did not run succesfully and/or did not return a
- value (if it is supposed to return a value). This is probably due to
- some error condition in the function.
-
-*Python function is not callable*
- The provided Python code was run successfully, but it not
- define a callable function with the required name.
-
-*Python invoke of undefined function*
- Cannot invoke a function that has not been previously defined.
-
-*Python variable does not match Python function*
- This matching is defined by the python-style variable and the python
- command.
-
-*Python variable has no function*
- No python command was used to define the function associated with the
- python-style variable.
-
-*QEQ with 'newton pair off' not supported*
- See the newton command. This is a restriction to use the QEQ fixes.
-
-*R0 < 0 for fix spring command*
- Equilibrium spring length is invalid.
-
-*RATTLE coordinate constraints are not satisfied up to desired tolerance*
- Self-explanatory.
-
-*RATTLE determinant = 0.0*
- The determinant of the matrix being solved for a single cluster
- specified by the fix rattle command is numerically invalid.
-
-*RATTLE failed*
- Certain constraints were not satisfied.
-
-*RATTLE velocity constraints are not satisfied up to desired tolerance*
- Self-explanatory.
-
-*Read data add offset is too big*
- It cannot be larger than the size of atom IDs, e.g. the maximum 32-bit
- integer.
-
-*Read dump of atom property that isn't allocated*
- Self-explanatory.
-
-*Read rerun dump file timestep > specified stop*
- Self-explanatory.
-
-*Read restart MPI-IO input not allowed with % in filename*
- This is because a % signifies one file per processor and MPI-IO
- creates one large file for all processors.
-
-*Read_data shrink wrap did not assign all atoms correctly*
- This is typically because the box-size specified in the data file is
- large compared to the actual extent of atoms in a shrink-wrapped
- dimension. When LAMMPS shrink-wraps the box atoms will be lost if the
- processor they are re-assigned to is too far away. Choose a box
- size closer to the actual extent of the atoms.
-
-*Read_dump command before simulation box is defined*
- The read_dump command cannot be used before a read_data, read_restart,
- or create_box command.
-
-*Read_dump field not found in dump file*
- Self-explanatory.
-
-*Read_dump triclinic status does not match simulation*
- Both the dump snapshot and the current LAMMPS simulation must
- be using either an orthogonal or triclinic box.
-
-*Read_dump xyz fields do not have consistent scaling/wrapping*
- Self-explanatory.
-
-*Reading from MPI-IO filename when MPIIO package is not installed*
- Self-explanatory.
-
-*Reax_defs.h setting for NATDEF is too small*
- Edit the setting in the ReaxFF library and re-compile the
- library and re-build LAMMPS.
-
-*Reax_defs.h setting for NNEIGHMAXDEF is too small*
- Edit the setting in the ReaxFF library and re-compile the
- library and re-build LAMMPS.
-
-*Receiving partition in processors part command is already a receiver*
- Cannot specify a partition to be a receiver twice.
-
-*Region ID for compute chunk/atom does not exist*
- Self-explanatory.
-
-*Region ID for compute reduce/region does not exist*
- Self-explanatory.
-
-*Region ID for compute temp/region does not exist*
- Self-explanatory.
-
-*Region ID for dump custom does not exist*
- Self-explanatory.
-
-*Region ID for fix addforce does not exist*
- Self-explanatory.
-
-*Region ID for fix atom/swap does not exist*
- Self-explanatory.
-
-*Region ID for fix ave/spatial does not exist*
- Self-explanatory.
-
-*Region ID for fix aveforce does not exist*
- Self-explanatory.
-
-*Region ID for fix deposit does not exist*
- Self-explanatory.
-
-*Region ID for fix efield does not exist*
- Self-explanatory.
-
-*Region ID for fix evaporate does not exist*
- Self-explanatory.
-
-*Region ID for fix gcmc does not exist*
- Self-explanatory.
-
-*Region ID for fix heat does not exist*
- Self-explanatory.
-
-*Region ID for fix setforce does not exist*
- Self-explanatory.
-
-*Region ID for fix wall/region does not exist*
- Self-explanatory.
-
-*Region ID for group dynamic does not exist*
- Self-explanatory.
-
-*Region ID in variable formula does not exist*
- Self-explanatory.
-
-*Region cannot have 0 length rotation vector*
- Self-explanatory.
-
-*Region for fix oneway does not exist*
- Self-explanatory.
-
-*Region intersect region ID does not exist*
- Self-explanatory.
-
-*Region union or intersect cannot be dynamic*
- The sub-regions can be dynamic, but not the combined region.
-
-*Region union region ID does not exist*
- One or more of the region IDs specified by the region union command
- does not exist.
-
-*Replacing a fix, but new style != old style*
- A fix ID can be used a 2nd time, but only if the style matches the
- previous fix. In this case it is assumed you with to reset a fix's
- parameters. This error may mean you are mistakenly re-using a fix ID
- when you do not intend to.
-
-*Replicate command before simulation box is defined*
- The replicate command cannot be used before a read_data, read_restart,
- or create_box command.
-
-*Replicate did not assign all atoms correctly*
- Atoms replicated by the replicate command were not assigned correctly
- to processors. This is likely due to some atom coordinates being
- outside a non-periodic simulation box.
-
-*Replicated system atom IDs are too big*
- See the setting for tagint in the src/lmptype.h file.
-
-*Replicated system is too big*
- See the setting for bigint in the src/lmptype.h file.
-
-*Required border comm not yet implemented with Kokkos*
- There are various limitations in the communication options supported
- by Kokkos.
-
-*Rerun command before simulation box is defined*
- The rerun command cannot be used before a read_data, read_restart, or
- create_box command.
-
-*Rerun dump file does not contain requested snapshot*
- Self-explanatory.
-
-*Resetting timestep size is not allowed with fix move*
- This is because fix move is moving atoms based on elapsed time.
-
-*Respa inner cutoffs are invalid*
- The first cutoff must be <= the second cutoff.
-
-*Respa levels must be >= 1*
- Self-explanatory.
-
-*Respa middle cutoffs are invalid*
- The first cutoff must be <= the second cutoff.
-
-*Restart file MPI-IO output not allowed with % in filename*
- This is because a % signifies one file per processor and MPI-IO
- creates one large file for all processors.
-
-*Restart file byte ordering is not recognized*
- The file does not appear to be a LAMMPS restart file since it doesn't
- contain a recognized byte-orderomg flag at the beginning.
-
-*Restart file byte ordering is swapped*
- The file was written on a machine with different byte-ordering than
- the machine you are reading it on. Convert it to a text data file
- instead, on the machine you wrote it on.
-
-*Restart file incompatible with current version*
- This is probably because you are trying to read a file created with a
- version of LAMMPS that is too old compared to the current version.
- Use your older version of LAMMPS and convert the restart file
- to a data file.
-
-*Restart file is a MPI-IO file*
- The file is inconsistent with the filename you specified for it.
-
-*Restart file is a multi-proc file*
- The file is inconsistent with the filename you specified for it.
-
-*Restart file is not a MPI-IO file*
- The file is inconsistent with the filename you specified for it.
-
-*Restart file is not a multi-proc file*
- The file is inconsistent with the filename you specified for it.
-
-*Restart variable returned a bad timestep*
- The variable must return a timestep greater than the current timestep.
-
-*Restrain atoms %d %d %d %d missing on proc %d at step %ld*
- The 4 atoms in a restrain dihedral specified by the fix restrain
- command are not all accessible to a processor. This probably means an
- atom has moved too far.
-
-*Restrain atoms %d %d %d missing on proc %d at step %ld*
- The 3 atoms in a restrain angle specified by the fix restrain
- command are not all accessible to a processor. This probably means an
- atom has moved too far.
-
-*Restrain atoms %d %d missing on proc %d at step %ld*
- The 2 atoms in a restrain bond specified by the fix restrain
- command are not all accessible to a processor. This probably means an
- atom has moved too far.
-
-*Reuse of compute ID*
- A compute ID cannot be used twice.
-
-*Reuse of dump ID*
- A dump ID cannot be used twice.
-
-*Reuse of molecule template ID*
- The template IDs must be unique.
-
-*Reuse of region ID*
- A region ID cannot be used twice.
-
-*Rigid body atoms %d %d missing on proc %d at step %ld*
- This means that an atom cannot find the atom that owns the rigid body
- it is part of, or vice versa. The solution is to use the communicate
- cutoff command to insure ghost atoms are acquired from far enough away
- to encompass the max distance printed when the fix rigid/small command
- was invoked.
-
-*Rigid body has degenerate moment of inertia*
- Fix poems will only work with bodies (collections of atoms) that have
- non-zero principal moments of inertia. This means they must be 3 or
- more non-collinear atoms, even with joint atoms removed.
-
-*Rigid fix must come before NPT/NPH fix*
- NPT/NPH fix must be defined in input script after all rigid fixes,
- else the rigid fix contribution to the pressure virial is
- incorrect.
-
-*Rmask function in equal-style variable formula*
- Rmask is per-atom operation.
-
-*Run command before simulation box is defined*
- The run command cannot be used before a read_data, read_restart, or
- create_box command.
-
-*Run command start value is after start of run*
- Self-explanatory.
-
-*Run command stop value is before end of run*
- Self-explanatory.
-
-*Run_style command before simulation box is defined*
- The run_style command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*SRD bin size for fix srd differs from user request*
- Fix SRD had to adjust the bin size to fit the simulation box. See the
- cubic keyword if you want this message to be an error vs warning.
-
-*SRD bins for fix srd are not cubic enough*
- The bin shape is not within tolerance of cubic. See the cubic
- keyword if you want this message to be an error vs warning.
-
-*SRD particle %d started inside big particle %d on step %ld bounce %d*
- See the inside keyword if you want this message to be an error vs
- warning.
-
-*SRD particle %d started inside wall %d on step %ld bounce %d*
- See the inside keyword if you want this message to be an error vs
- warning.
-
-*Same dimension twice in fix ave/spatial*
- Self-explanatory.
-
-*Sending partition in processors part command is already a sender*
- Cannot specify a partition to be a sender twice.
-
-*Set command before simulation box is defined*
- The set command cannot be used before a read_data, read_restart,
- or create_box command.
-
-*Set command floating point vector does not exist*
- Self-explanatory.
-
-*Set command integer vector does not exist*
- Self-explanatory.
-
-*Set command with no atoms existing*
- No atoms are yet defined so the set command cannot be used.
-
-*Set region ID does not exist*
- Region ID specified in set command does not exist.
-
-*Shake angles have different bond types*
- All 3-atom angle-constrained SHAKE clusters specified by the fix shake
- command that are the same angle type, must also have the same bond
- types for the 2 bonds in the angle.
-
-*Shake atoms %d %d %d %d missing on proc %d at step %ld*
- The 4 atoms in a single shake cluster specified by the fix shake
- command are not all accessible to a processor. This probably means
- an atom has moved too far.
-
-*Shake atoms %d %d %d missing on proc %d at step %ld*
- The 3 atoms in a single shake cluster specified by the fix shake
- command are not all accessible to a processor. This probably means
- an atom has moved too far.
-
-*Shake atoms %d %d missing on proc %d at step %ld*
- The 2 atoms in a single shake cluster specified by the fix shake
- command are not all accessible to a processor. This probably means
- an atom has moved too far.
-
-*Shake cluster of more than 4 atoms*
- A single cluster specified by the fix shake command can have no more
- than 4 atoms.
-
-*Shake clusters are connected*
- A single cluster specified by the fix shake command must have a single
- central atom with up to 3 other atoms bonded to it.
-
-*Shake determinant = 0.0*
- The determinant of the matrix being solved for a single cluster
- specified by the fix shake command is numerically invalid.
-
-*Shake fix must come before NPT/NPH fix*
- NPT fix must be defined in input script after SHAKE fix, else the
- SHAKE fix contribution to the pressure virial is incorrect.
-
-*Shear history overflow, boost neigh_modify one*
- There are too many neighbors of a single atom. Use the neigh_modify
- command to increase the max number of neighbors allowed for one atom.
- You may also want to boost the page size.
-
-*Small to big integers are not sized correctly*
- This error occurs whenthe sizes of smallint, imageint, tagint, bigint,
- as defined in src/lmptype.h are not what is expected. Contact
- the developers if this occurs.
-
-*Smallint setting in lmptype.h is invalid*
- It has to be the size of an integer.
-
-*Smallint setting in lmptype.h is not compatible*
- Smallint stored in restart file is not consistent with LAMMPS version
- you are running.
-
-*Special list size exceeded in fix bond/create*
- See the read_data command for info on setting the "extra special per
- atom" header value to allow for additional special values to be
- stored.
-
-*Specified processors != physical processors*
- The 3d grid of processors defined by the processors command does not
- match the number of processors LAMMPS is being run on.
-
-*Specified target stress must be uniaxial or hydrostatic*
- Self-explanatory.
-
-*Sqrt of negative value in variable formula*
- Self-explanatory.
-
-*Subsequent read data induced too many angles per atom*
- See the create_box extra/angle/per/atom or read_data "extra angle per
- atom" header value to set this limit larger.
-
-*Subsequent read data induced too many bonds per atom*
- See the create_box extra/bond/per/atom or read_data "extra bond per
- atom" header value to set this limit larger.
-
-*Subsequent read data induced too many dihedrals per atom*
- See the create_box extra/dihedral/per/atom or read_data "extra
- dihedral per atom" header value to set this limit larger.
-
-*Subsequent read data induced too many impropers per atom*
- See the create_box extra/improper/per/atom or read_data "extra
- improper per atom" header value to set this limit larger.
-
-*Substitution for illegal variable*
- Input script line contained a variable that could not be substituted
- for.
-
-*Support for writing images in JPEG format not included*
- LAMMPS was not built with the -DLAMMPS_JPEG switch in the Makefile.
-
-*Support for writing images in PNG format not included*
- LAMMPS was not built with the -DLAMMPS_PNG switch in the Makefile.
-
-*Support for writing movies not included*
- LAMMPS was not built with the -DLAMMPS_FFMPEG switch in the Makefile
-
-*System in data file is too big*
- See the setting for bigint in the src/lmptype.h file.
-
-*System is not charge neutral, net charge = %g*
- The total charge on all atoms on the system is not 0.0.
- For some KSpace solvers this is an error.
-
-*TAD nsteps must be multiple of t_event*
- Self-explanatory.
-
-*TIP4P hydrogen has incorrect atom type*
- The TIP4P pairwise computation found an H atom whose type does not
- agree with the specified H type.
-
-*TIP4P hydrogen is missing*
- The TIP4P pairwise computation failed to find the correct H atom
- within a water molecule.
-
-*TMD target file did not list all group atoms*
- The target file for the fix tmd command did not list all atoms in the
- fix group.
-
-*Tad command before simulation box is defined*
- Self-explanatory.
-
-*Tagint setting in lmptype.h is invalid*
- Tagint must be as large or larger than smallint.
-
-*Tagint setting in lmptype.h is not compatible*
- Format of tagint stored in restart file is not consistent with LAMMPS
- version you are running. See the settings in src/lmptype.h
-
-*Target pressure for fix rigid/nph cannot be < 0.0*
- Self-explanatory.
-
-*Target pressure for fix rigid/npt/small cannot be < 0.0*
- Self-explanatory.
-
-*Target temperature for fix nvt/npt/nph cannot be 0.0*
- Self-explanatory.
-
-*Target temperature for fix rigid/npt cannot be 0.0*
- Self-explanatory.
-
-*Target temperature for fix rigid/npt/small cannot be 0.0*
- Self-explanatory.
-
-*Target temperature for fix rigid/nvt cannot be 0.0*
- Self-explanatory.
-
-*Target temperature for fix rigid/nvt/small cannot be 0.0*
- Self-explanatory.
-
-*Temper command before simulation box is defined*
- The temper command cannot be used before a read_data, read_restart, or
- create_box command.
-
-*Temperature ID for fix bond/swap does not exist*
- Self-explanatory.
-
-*Temperature ID for fix box/relax does not exist*
- Self-explanatory.
-
-*Temperature ID for fix nvt/npt does not exist*
- Self-explanatory.
-
-*Temperature ID for fix press/berendsen does not exist*
- Self-explanatory.
-
-*Temperature ID for fix rigid nvt/npt/nph does not exist*
- Self-explanatory.
-
-*Temperature ID for fix temp/berendsen does not exist*
- Self-explanatory.
-
-*Temperature ID for fix temp/csld does not exist*
- Self-explanatory.
-
-*Temperature ID for fix temp/csvr does not exist*
- Self-explanatory.
-
-*Temperature ID for fix temp/rescale does not exist*
- Self-explanatory.
-
-*Temperature compute degrees of freedom < 0*
- This should not happen if you are calculating the temperature
- on a valid set of atoms.
-
-*Temperature control can not be used with fix nph*
- Self-explanatory.
-
-*Temperature control can not be used with fix nph/asphere*
- Self-explanatory.
-
-*Temperature control can not be used with fix nph/body*
- Self-explanatory.
-
-*Temperature control can not be used with fix nph/sphere*
- Self-explanatory.
-
-*Temperature control must be used with fix nphug*
- The temp keyword must be provided.
-
-*Temperature control must be used with fix npt*
- Self-explanatory.
-
-*Temperature control must be used with fix npt/asphere*
- Self-explanatory.
-
-*Temperature control must be used with fix npt/body*
- Self-explanatory.
-
-*Temperature control must be used with fix npt/sphere*
- Self-explanatory.
-
-*Temperature control must be used with fix nvt*
- Self-explanatory.
-
-*Temperature control must be used with fix nvt/asphere*
- Self-explanatory.
-
-*Temperature control must be used with fix nvt/body*
- Self-explanatory.
-
-*Temperature control must be used with fix nvt/sllod*
- Self-explanatory.
-
-*Temperature control must be used with fix nvt/sphere*
- Self-explanatory.
-
-*Temperature control must not be used with fix nph/small*
- Self-explanatory.
-
-*Temperature for fix nvt/sllod does not have a bias*
- The specified compute must compute temperature with a bias.
-
-*Tempering could not find thermo_pe compute*
- This compute is created by the thermo command. It must have been
- explicitly deleted by a uncompute command.
-
-*Tempering fix ID is not defined*
- The fix ID specified by the temper command does not exist.
-
-*Tempering temperature fix is not valid*
- The fix specified by the temper command is not one that controls
- temperature (nvt or langevin).
-
-*Test_descriptor_string already allocated*
- This is an internal error. Contact the developers.
-
-*The package gpu command is required for gpu styles*
- Self-explanatory.
-
-*Thermo and fix not computed at compatible times*
- Fixes generate values on specific timesteps. The thermo output
- does not match these timesteps.
-
-*Thermo compute array is accessed out-of-range*
- Self-explanatory.
-
-*Thermo compute does not compute array*
- Self-explanatory.
-
-*Thermo compute does not compute scalar*
- Self-explanatory.
-
-*Thermo compute does not compute vector*
- Self-explanatory.
-
-*Thermo compute vector is accessed out-of-range*
- Self-explanatory.
-
-*Thermo custom variable cannot be indexed*
- Self-explanatory.
-
-*Thermo custom variable is not equal-style variable*
- Only equal-style variables can be output with thermodynamics, not
- atom-style variables.
-
-*Thermo every variable returned a bad timestep*
- The variable must return a timestep greater than the current timestep.
-
-*Thermo fix array is accessed out-of-range*
- Self-explanatory.
-
-*Thermo fix does not compute array*
- Self-explanatory.
-
-*Thermo fix does not compute scalar*
- Self-explanatory.
-
-*Thermo fix does not compute vector*
- Self-explanatory.
-
-*Thermo fix vector is accessed out-of-range*
- Self-explanatory.
-
-*Thermo keyword in variable requires thermo to use/init pe*
- You are using a thermo keyword in a variable that requires
- potential energy to be calculated, but your thermo output
- does not use it. Add it to your thermo output.
-
-*Thermo keyword in variable requires thermo to use/init press*
- You are using a thermo keyword in a variable that requires pressure to
- be calculated, but your thermo output does not use it. Add it to your
- thermo output.
-
-*Thermo keyword in variable requires thermo to use/init temp*
- You are using a thermo keyword in a variable that requires temperature
- to be calculated, but your thermo output does not use it. Add it to
- your thermo output.
-
-*Thermo style does not use press*
- Cannot use thermo_modify to set this parameter since the thermo_style
- is not computing this quantity.
-
-*Thermo style does not use temp*
- Cannot use thermo_modify to set this parameter since the thermo_style
- is not computing this quantity.
-
-*Thermo_modify every variable returned a bad timestep*
- The returned timestep is less than or equal to the current timestep.
-
-*Thermo_modify int format does not contain d character*
- Self-explanatory.
-
-*Thermo_modify pressure ID does not compute pressure*
- The specified compute ID does not compute pressure.
-
-*Thermo_modify temperature ID does not compute temperature*
- The specified compute ID does not compute temperature.
-
-*Thermo_style command before simulation box is defined*
- The thermo_style command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*This variable thermo keyword cannot be used between runs*
- Keywords that refer to time (such as cpu, elapsed) do not
- make sense in between runs.
-
-*Threshhold for an atom property that isn't allocated*
- A dump threshhold has been requested on a quantity that is
- not defined by the atom style used in this simulation.
-
-*Timestep must be >= 0*
- Specified timestep is invalid.
-
-*Too big a problem to use velocity create loop all*
- The system size must fit in a 32-bit integer to use this option.
-
-*Too big a timestep for dump dcd*
- The timestep must fit in a 32-bit integer to use this dump style.
-
-*Too big a timestep for dump xtc*
- The timestep must fit in a 32-bit integer to use this dump style.
-
-*Too few bits for lookup table*
- Table size specified via pair_modify command does not work with your
- machine's floating point representation.
-
-*Too few lines in %s section of data file*
- Self-explanatory.
-
-*Too few values in body lines in data file*
- Self-explanatory.
-
-*Too few values in body section of molecule file*
- Self-explanatory.
-
-*Too many -pk arguments in command line*
- The string formed by concatenating the arguments is too long. Use a
- package command in the input script instead.
-
-*Too many MSM grid levels*
- The max number of MSM grid levels is hardwired to 10.
-
-*Too many args in variable function*
- More args are used than any variable function allows.
-
-*Too many atom pairs for pair bop*
- The number of atomic pairs exceeds the expected number. Check your
- atomic structure to ensure that it is realistic.
-
-*Too many atom sorting bins*
- This is likely due to an immense simulation box that has blown up
- to a large size.
-
-*Too many atom triplets for pair bop*
- The number of three atom groups for angle determinations exceeds the
- expected number. Check your atomic structrure to ensure that it is
- realistic.
-
-*Too many atoms for dump dcd*
- The system size must fit in a 32-bit integer to use this dump
- style.
-
-*Too many atoms for dump xtc*
- The system size must fit in a 32-bit integer to use this dump
- style.
-
-*Too many atoms to dump sort*
- Cannot sort when running with more than 2^31 atoms.
-
-*Too many exponent bits for lookup table*
- Table size specified via pair_modify command does not work with your
- machine's floating point representation.
-
-*Too many groups*
- The maximum number of atom groups (including the "all" group) is
- given by MAX_GROUP in group.cpp and is 32.
-
-*Too many iterations*
- You must use a number of iterations that fit in a 32-bit integer
- for minimization.
-
-*Too many lines in one body in data file - boost MAXBODY*
- MAXBODY is a setting at the top of the src/read_data.cpp file.
- Set it larger and re-compile the code.
-
-*Too many local+ghost atoms for neighbor list*
- The number of nlocal + nghost atoms on a processor
- is limited by the size of a 32-bit integer with 2 bits
- removed for masking 1-2, 1-3, 1-4 neighbors.
-
-*Too many mantissa bits for lookup table*
- Table size specified via pair_modify command does not work with your
- machine's floating point representation.
-
-*Too many masses for fix shake*
- The fix shake command cannot list more masses than there are atom
- types.
-
-*Too many molecules for fix poems*
- The limit is 2^31 = ~2 billion molecules.
-
-*Too many molecules for fix rigid*
- The limit is 2^31 = ~2 billion molecules.
-
-*Too many neighbor bins*
- This is likely due to an immense simulation box that has blown up
- to a large size.
-
-*Too many timesteps*
- The cummulative timesteps must fit in a 64-bit integer.
-
-*Too many timesteps for NEB*
- You must use a number of timesteps that fit in a 32-bit integer
- for NEB.
-
-*Too many total atoms*
- See the setting for bigint in the src/lmptype.h file.
-
-*Too many total bits for bitmapped lookup table*
- Table size specified via pair_modify command is too large. Note that
- a value of N generates a 2^N size table.
-
-*Too many values in body lines in data file*
- Self-explanatory.
-
-*Too many values in body section of molecule file*
- Self-explanatory.
-
-*Too much buffered per-proc info for dump*
- The size of the buffered string must fit in a 32-bit integer for a
- dump.
-
-*Too much per-proc info for dump*
- Number of local atoms times number of columns must fit in a 32-bit
- integer for dump.
-
-*Tree structure in joint connections*
- Fix poems cannot (yet) work with coupled bodies whose joints connect
- the bodies in a tree structure.
-
-*Triclinic box skew is too large*
- The displacement in a skewed direction must be less than half the box
- length in that dimension. E.g. the xy tilt must be between -half and
- +half of the x box length. This constraint can be relaxed by using
- the box tilt command.
-
-*Tried to convert a double to int, but input_double > INT_MAX*
- Self-explanatory.
-
-*Trying to build an occasional neighbor list before initialization completed*
- This is not allowed. Source code caller needs to be modified.
-
-*Two fix ave commands using same compute chunk/atom command in incompatible ways*
- They are both attempting to "lock" the chunk/atom command so that the
- chunk assignments persist for some number of timesteps, but are doing
- it in different ways.
-
-*Two groups cannot be the same in fix spring couple*
- Self-explanatory.
-
-*USER-CUDA mode requires CUDA variant of min style*
- CUDA mode is enabled, so the min style must include a cuda suffix.
-
-*USER-CUDA mode requires CUDA variant of run style*
- CUDA mode is enabled, so the run style must include a cuda suffix.
-
-*USER-CUDA package does not yet support comm_style tiled*
- Self-explanatory.
-
-*USER-CUDA package requires a cuda enabled atom_style*
- Self-explanatory.
-
-*Unable to initialize accelerator for use*
- There was a problem initializing an accelerator for the gpu package
-
-*Unbalanced quotes in input line*
- No matching end double quote was found following a leading double
- quote.
-
-*Unexpected end of -reorder file*
- Self-explanatory.
-
-*Unexpected end of AngleCoeffs section*
- Read a blank line.
-
-*Unexpected end of BondCoeffs section*
- Read a blank line.
-
-*Unexpected end of DihedralCoeffs section*
- Read a blank line.
-
-*Unexpected end of ImproperCoeffs section*
- Read a blank line.
-
-*Unexpected end of PairCoeffs section*
- Read a blank line.
-
-*Unexpected end of custom file*
- Self-explanatory.
-
-*Unexpected end of data file*
- LAMMPS hit the end of the data file while attempting to read a
- section. Something is wrong with the format of the data file.
-
-*Unexpected end of dump file*
- A read operation from the file failed.
-
-*Unexpected end of fix rigid file*
- A read operation from the file failed.
-
-*Unexpected end of fix rigid/small file*
- A read operation from the file failed.
-
-*Unexpected end of molecule file*
- Self-explanatory.
-
-*Unexpected end of neb file*
- A read operation from the file failed.
-
-*Units command after simulation box is defined*
- The units command cannot be used after a read_data, read_restart, or
- create_box command.
-
-*Universe/uloop variable count < # of partitions*
- A universe or uloop style variable must specify a number of values >= to the
- number of processor partitions.
-
-*Unknown angle style*
- The choice of angle style is unknown.
-
-*Unknown atom style*
- The choice of atom style is unknown.
-
-*Unknown body style*
- The choice of body style is unknown.
-
-*Unknown bond style*
- The choice of bond style is unknown.
-
-*Unknown category for info is_active()*
- Self-explanatory.
-
-*Unknown category for info is_available()*
- Self-explanatory.
-
-*Unknown category for info is_defined()*
- Self-explanatory.
-
-*Unknown command: %s*
- The command is not known to LAMMPS. Check the input script.
-
-*Unknown compute style*
- The choice of compute style is unknown.
-
-*Unknown dihedral style*
- The choice of dihedral style is unknown.
-
-*Unknown dump reader style*
- The choice of dump reader style via the format keyword is unknown.
-
-*Unknown dump style*
- The choice of dump style is unknown.
-
-*Unknown error in GPU library*
- Self-explanatory.
-
-*Unknown fix style*
- The choice of fix style is unknown.
-
-*Unknown identifier in data file: %s*
- A section of the data file cannot be read by LAMMPS.
-
-*Unknown improper style*
- The choice of improper style is unknown.
-
-*Unknown keyword in thermo_style custom command*
- One or more specified keywords are not recognized.
-
-*Unknown kspace style*
- The choice of kspace style is unknown.
-
-*Unknown name for info newton category*
- Self-explanatory.
-
-*Unknown name for info package category*
- Self-explanatory.
-
-*Unknown name for info pair category*
- Self-explanatory.
-
-*Unknown pair style*
- The choice of pair style is unknown.
-
-*Unknown pair_modify hybrid sub-style*
- The choice of sub-style is unknown.
-
-*Unknown region style*
- The choice of region style is unknown.
-
-*Unknown section in molecule file*
- Self-explanatory.
-
-*Unknown table style in angle style table*
- Self-explanatory.
-
-*Unknown table style in bond style table*
- Self-explanatory.
-
-*Unknown table style in pair_style command*
- Style of table is invalid for use with pair_style table command.
-
-*Unknown unit_style*
- Self-explanatory. Check the input script or data file.
-
-*Unrecognized lattice type in MEAM file 1*
- The lattice type in an entry of the MEAM library file is not
- valid.
-
-*Unrecognized lattice type in MEAM file 2*
- The lattice type in an entry of the MEAM parameter file is not
- valid.
-
-*Unrecognized pair style in compute pair command*
- Self-explanatory.
-
-*Unrecognized virial argument in pair_style command*
- Only two options are supported: LAMMPSvirial and KIMvirial
-
-*Unsupported mixing rule in kspace_style ewald/disp*
- Only geometric mixing is supported.
-
-*Unsupported order in kspace_style ewald/disp*
- Only 1/r^6 dispersion or dipole terms are supported.
-
-*Unsupported order in kspace_style pppm/disp, pair_style %s*
- Only pair styles with 1/r and 1/r^6 dependence are currently supported.
-
-*Use cutoff keyword to set cutoff in single mode*
- Mode is single so cutoff/multi keyword cannot be used.
-
-*Use cutoff/multi keyword to set cutoff in multi mode*
- Mode is multi so cutoff keyword cannot be used.
-
-*Using fix nvt/sllod with inconsistent fix deform remap option*
- Fix nvt/sllod requires that deforming atoms have a velocity profile
- provided by "remap v" as a fix deform option.
-
-*Using fix nvt/sllod with no fix deform defined*
- Self-explanatory.
-
-*Using fix srd with inconsistent fix deform remap option*
- When shearing the box in an SRD simulation, the remap v option for fix
- deform needs to be used.
-
-*Using pair lubricate with inconsistent fix deform remap option*
- Must use remap v option with fix deform with this pair style.
-
-*Using pair lubricate/poly with inconsistent fix deform remap option*
- If fix deform is used, the remap v option is required.
-
-*Using suffix cuda without USER-CUDA package enabled*
- Self-explanatory.
-
-*Using suffix gpu without GPU package installed*
- Self-explanatory.
-
-*Using suffix intel without USER-INTEL package installed*
- Self-explanatory.
-
-*Using suffix kk without KOKKOS package enabled*
- Self-explanatory.
-
-*Using suffix omp without USER-OMP package installed*
- Self-explanatory.
-
-*Using update dipole flag requires atom attribute mu*
- Self-explanatory.
-
-*Using update dipole flag requires atom style sphere*
- Self-explanatory.
-
-*Variable ID in variable formula does not exist*
- Self-explanatory.
-
-*Variable atom ID is too large*
- Specified ID is larger than the maximum allowed atom ID.
-
-*Variable evaluation before simulation box is defined*
- Cannot evaluate a compute or fix or atom-based value in a variable
- before the simulation has been setup.
-
-*Variable evaluation in fix wall gave bad value*
- The returned value for epsilon or sigma < 0.0.
-
-*Variable evaluation in region gave bad value*
- Variable returned a radius < 0.0.
-
-*Variable for compute ti is invalid style*
- Self-explanatory.
-
-*Variable for create_atoms is invalid style*
- The variables must be equal-style variables.
-
-*Variable for displace_atoms is invalid style*
- It must be an equal-style or atom-style variable.
-
-*Variable for dump every is invalid style*
- Only equal-style variables can be used.
-
-*Variable for dump image center is invalid style*
- Must be an equal-style variable.
-
-*Variable for dump image persp is invalid style*
- Must be an equal-style variable.
-
-*Variable for dump image phi is invalid style*
- Must be an equal-style variable.
-
-*Variable for dump image theta is invalid style*
- Must be an equal-style variable.
-
-*Variable for dump image zoom is invalid style*
- Must be an equal-style variable.
-
-*Variable for fix adapt is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix addforce is invalid style*
- Self-explanatory.
-
-*Variable for fix aveforce is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix deform is invalid style*
- The variable must be an equal-style variable.
-
-*Variable for fix efield is invalid style*
- The variable must be an equal- or atom-style variable.
-
-*Variable for fix gravity is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix heat is invalid style*
- Only equal-style or atom-style variables can be used.
-
-*Variable for fix indent is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix indent is not equal style*
- Only equal-style variables can be used.
-
-*Variable for fix langevin is invalid style*
- It must be an equal-style variable.
-
-*Variable for fix move is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix setforce is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix temp/berendsen is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix temp/csld is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix temp/csvr is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix temp/rescale is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix wall is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix wall/reflect is invalid style*
- Only equal-style variables can be used.
-
-*Variable for fix wall/srd is invalid style*
- Only equal-style variables can be used.
-
-*Variable for group dynamic is invalid style*
- The variable must be an atom-style variable.
-
-*Variable for group is invalid style*
- Only atom-style variables can be used.
-
-*Variable for region cylinder is invalid style*
- Only equal-style varaibles are allowed.
-
-*Variable for region is invalid style*
- Only equal-style variables can be used.
-
-*Variable for region is not equal style*
- Self-explanatory.
-
-*Variable for region sphere is invalid style*
- Only equal-style varaibles are allowed.
-
-*Variable for restart is invalid style*
- Only equal-style variables can be used.
-
-*Variable for set command is invalid style*
- Only atom-style variables can be used.
-
-*Variable for thermo every is invalid style*
- Only equal-style variables can be used.
-
-*Variable for velocity set is invalid style*
- Only atom-style variables can be used.
-
-*Variable for voronoi radius is not atom style*
- Self-explanatory.
-
-*Variable formula compute array is accessed out-of-range*
- Self-explanatory.
-
-*Variable formula compute vector is accessed out-of-range*
- Self-explanatory.
-
-*Variable formula fix array is accessed out-of-range*
- Self-explanatory.
-
-*Variable formula fix vector is accessed out-of-range*
- Self-explanatory.
-
-*Variable has circular dependency*
- A circular dependency is when variable "a" in used by variable "b" and
- variable "b" is also used by varaible "a". Circular dependencies with
- longer chains of dependence are also not allowed.
-
-*Variable name between brackets must be alphanumeric or underscore characters*
- Self-explanatory.
-
-*Variable name for compute chunk/atom does not exist*
- Self-explanatory.
-
-*Variable name for compute reduce does not exist*
- Self-explanatory.
-
-*Variable name for compute ti does not exist*
- Self-explanatory.
-
-*Variable name for create_atoms does not exist*
- Self-explanatory.
-
-*Variable name for displace_atoms does not exist*
- Self-explanatory.
-
-*Variable name for dump every does not exist*
- Self-explanatory.
-
-*Variable name for dump image center does not exist*
- Self-explanatory.
-
-*Variable name for dump image persp does not exist*
- Self-explanatory.
-
-*Variable name for dump image phi does not exist*
- Self-explanatory.
-
-*Variable name for dump image theta does not exist*
- Self-explanatory.
-
-*Variable name for dump image zoom does not exist*
- Self-explanatory.
-
-*Variable name for fix adapt does not exist*
- Self-explanatory.
-
-*Variable name for fix addforce does not exist*
- Self-explanatory.
-
-*Variable name for fix ave/atom does not exist*
- Self-explanatory.
-
-*Variable name for fix ave/chunk does not exist*
- Self-explanatory.
-
-*Variable name for fix ave/correlate does not exist*
- Self-explanatory.
-
-*Variable name for fix ave/histo does not exist*
- Self-explanatory.
-
-*Variable name for fix ave/spatial does not exist*
- Self-explanatory.
-
-*Variable name for fix ave/time does not exist*
- Self-explanatory.
-
-*Variable name for fix aveforce does not exist*
- Self-explanatory.
-
-*Variable name for fix deform does not exist*
- Self-explantory.
-
-*Variable name for fix efield does not exist*
- Self-explanatory.
-
-*Variable name for fix gravity does not exist*
- Self-explanatory.
-
-*Variable name for fix heat does not exist*
- Self-explanatory.
-
-*Variable name for fix indent does not exist*
- Self-explanatory.
-
-*Variable name for fix langevin does not exist*
- Self-explanatory.
-
-*Variable name for fix move does not exist*
- Self-explanatory.
-
-*Variable name for fix setforce does not exist*
- Self-explanatory.
-
-*Variable name for fix store/state does not exist*
- Self-explanatory.
-
-*Variable name for fix temp/berendsen does not exist*
- Self-explanatory.
-
-*Variable name for fix temp/csld does not exist*
- Self-explanatory.
-
-*Variable name for fix temp/csvr does not exist*
- Self-explanatory.
-
-*Variable name for fix temp/rescale does not exist*
- Self-explanatory.
-
-*Variable name for fix vector does not exist*
- Self-explanatory.
-
-*Variable name for fix wall does not exist*
- Self-explanatory.
-
-*Variable name for fix wall/reflect does not exist*
- Self-explanatory.
-
-*Variable name for fix wall/srd does not exist*
- Self-explanatory.
-
-*Variable name for group does not exist*
- Self-explanatory.
-
-*Variable name for group dynamic does not exist*
- Self-explanatory.
-
-*Variable name for region cylinder does not exist*
- Self-explanatory.
-
-*Variable name for region does not exist*
- Self-explanatory.
-
-*Variable name for region sphere does not exist*
- Self-explanatory.
-
-*Variable name for restart does not exist*
- Self-explanatory.
-
-*Variable name for set command does not exist*
- Self-explanatory.
-
-*Variable name for thermo every does not exist*
- Self-explanatory.
-
-*Variable name for velocity set does not exist*
- Self-explanatory.
-
-*Variable name for voronoi radius does not exist*
- Self-explanatory.
-
-*Variable name must be alphanumeric or underscore characters*
- Self-explanatory.
-
-*Variable uses atom property that isn't allocated*
- Self-explanatory.
-
-*Velocity command before simulation box is defined*
- The velocity command cannot be used before a read_data, read_restart,
- or create_box command.
-
-*Velocity command with no atoms existing*
- A velocity command has been used, but no atoms yet exist.
-
-*Velocity ramp in z for a 2d problem*
- Self-explanatory.
-
-*Velocity rigid used with non-rigid fix-ID*
- Self-explanatory.
-
-*Velocity temperature ID does calculate a velocity bias*
- The specified compute must compute a bias for temperature.
-
-*Velocity temperature ID does not compute temperature*
- The compute ID given to the velocity command must compute
- temperature.
-
-*Verlet/split can only currently be used with comm_style brick*
- This is a current restriction in LAMMPS.
-
-*Verlet/split does not yet support TIP4P*
- This is a current limitation.
-
-*Verlet/split requires 2 partitions*
- See the -partition command-line switch.
-
-*Verlet/split requires Rspace partition layout be multiple of Kspace partition layout in each dim*
- This is controlled by the processors command.
-
-*Verlet/split requires Rspace partition size be multiple of Kspace partition size*
- This is so there is an equal number of Rspace processors for every
- Kspace processor.
-
-*Virial was not tallied on needed timestep*
- You are using a thermo keyword that requires potentials to
- have tallied the virial, but they didn't on this timestep. See the
- variable doc page for ideas on how to make this work.
-
-*Voro++ error: narea and neigh have a different size*
- This error is returned by the Voro++ library.
-
-*Wall defined twice in fix wall command*
- Self-explanatory.
-
-*Wall defined twice in fix wall/reflect command*
- Self-explanatory.
-
-*Wall defined twice in fix wall/srd command*
- Self-explanatory.
-
-*Water H epsilon must be 0.0 for pair style lj/cut/tip4p/cut*
- This is because LAMMPS does not compute the Lennard-Jones interactions
- with these particles for efficiency reasons.
-
-*Water H epsilon must be 0.0 for pair style lj/cut/tip4p/long*
- This is because LAMMPS does not compute the Lennard-Jones interactions
- with these particles for efficiency reasons.
-
-*Water H epsilon must be 0.0 for pair style lj/long/tip4p/long*
- This is because LAMMPS does not compute the Lennard-Jones interactions
- with these particles for efficiency reasons.
-
-*World variable count doesn't match # of partitions*
- A world-style variable must specify a number of values equal to the
- number of processor partitions.
-
-*Write_data command before simulation box is defined*
- Self-explanatory.
-
-*Write_restart command before simulation box is defined*
- The write_restart command cannot be used before a read_data,
- read_restart, or create_box command.
-
-*Writing to MPI-IO filename when MPIIO package is not installed*
- Self-explanatory.
-
-*Zero length rotation vector with displace_atoms*
- Self-explanatory.
-
-*Zero length rotation vector with fix move*
- Self-explanatory.
-
-*Zero-length lattice orient vector*
- Self-explanatory.
-
-
-
-.. _warn:
-
-Warnings:
---------------------
-
-
-
-*Adjusting Coulombic cutoff for MSM, new cutoff = %g*
- The adjust/cutoff command is turned on and the Coulombic cutoff has been
- adjusted to match the user-specified accuracy.
-
-*Angle atoms missing at step %ld*
- One or more of 3 atoms needed to compute a particular angle are
- missing on this processor. Typically this is because the pairwise
- cutoff is set too short or the angle has blown apart and an atom is
- too far away.
-
-*Angle style in data file differs from currently defined angle style*
- Self-explanatory.
-
-*Atom style in data file differs from currently defined atom style*
- Self-explanatory.
-
-*Bond atom missing in box size check*
- The 2nd atoms needed to compute a particular bond is missing on this
- processor. Typically this is because the pairwise cutoff is set too
- short or the bond has blown apart and an atom is too far away.
-
-*Bond atom missing in image check*
- The 2nd atom in a particular bond is missing on this processor.
- Typically this is because the pairwise cutoff is set too short or the
- bond has blown apart and an atom is too far away.
-
-*Bond atoms missing at step %ld*
- The 2nd atom needed to compute a particular bond is missing on this
- processor. Typically this is because the pairwise cutoff is set too
- short or the bond has blown apart and an atom is too far away.
-
-*Bond style in data file differs from currently defined bond style*
- Self-explanatory.
-
-*Bond/angle/dihedral extent > half of periodic box length*
- This is a restriction because LAMMPS can be confused about which image
- of an atom in the bonded interaction is the correct one to use.
- "Extent" in this context means the maximum end-to-end length of the
- bond/angle/dihedral. LAMMPS computes this by taking the maximum bond
- length, multiplying by the number of bonds in the interaction (e.g. 3
- for a dihedral) and adding a small amount of stretch.
-
-*Both groups in compute group/group have a net charge; the Kspace boundary correction to energy will be non-zero*
- Self-explantory.
-
-*Calling write_dump before a full system init.*
- The write_dump command is used before the system has been fully
- initialized as part of a 'run' or 'minimize' command. Not all dump
- styles and features are fully supported at this point and thus the
- command may fail or produce incomplete or incorrect output. Insert
- a "run 0" command, if a full system init is required.
-
-*Cannot count rigid body degrees-of-freedom before bodies are fully initialized*
- This means the temperature associated with the rigid bodies may be
- incorrect on this timestep.
-
-*Cannot count rigid body degrees-of-freedom before bodies are initialized*
- This means the temperature associated with the rigid bodies may be
- incorrect on this timestep.
-
-*Cannot include log terms without 1/r terms; setting flagHI to 1*
- Self-explanatory.
-
-*Cannot include log terms without 1/r terms; setting flagHI to 1.*
- Self-explanatory.
-
-*Charges are set, but coulombic solver is not used*
- Self-explanatory.
-
-*Charges did not converge at step %ld: %lg*
- Self-explanatory.
-
-*Communication cutoff is too small for SNAP micro load balancing, increased to %lf*
- Self-explanatory.
-
-*Compute cna/atom cutoff may be too large to find ghost atom neighbors*
- The neighbor cutoff used may not encompass enough ghost atoms
- to perform this operation correctly.
-
-*Computing temperature of portions of rigid bodies*
- The group defined by the temperature compute does not encompass all
- the atoms in one or more rigid bodies, so the change in
- degrees-of-freedom for the atoms in those partial rigid bodies will
- not be accounted for.
-
-*Create_bonds max distance > minimum neighbor cutoff*
- This means atom pairs for some atom types may not be in the neighbor
- list and thus no bond can be created between them.
-
-*Delete_atoms cutoff > minimum neighbor cutoff*
- This means atom pairs for some atom types may not be in the neighbor
- list and thus an atom in that pair cannot be deleted.
-
-*Dihedral atoms missing at step %ld*
- One or more of 4 atoms needed to compute a particular dihedral are
- missing on this processor. Typically this is because the pairwise
- cutoff is set too short or the dihedral has blown apart and an atom is
- too far away.
-
-*Dihedral problem*
- Conformation of the 4 listed dihedral atoms is extreme; you may want
- to check your simulation geometry.
-
-*Dihedral problem: %d %ld %d %d %d %d*
- Conformation of the 4 listed dihedral atoms is extreme; you may want
- to check your simulation geometry.
-
-*Dihedral style in data file differs from currently defined dihedral style*
- Self-explanatory.
-
-*Dump dcd/xtc timestamp may be wrong with fix dt/reset*
- If the fix changes the timestep, the dump dcd file will not
- reflect the change.
-
-*Energy tally does not account for 'zero yes'*
- The energy removed by using the 'zero yes' flag is not accounted
- for in the energy tally and thus energy conservation cannot be
- monitored in this case.
-
-*Estimated error in splitting of dispersion coeffs is %g*
- Error is greater than 0.0001 percent.
-
-*Ewald/disp Newton solver failed, using old method to estimate g_ewald*
- Self-explanatory. Choosing a different cutoff value may help.
-
-*FENE bond too long*
- A FENE bond has stretched dangerously far. It's interaction strength
- will be truncated to attempt to prevent the bond from blowing up.
-
-*FENE bond too long: %ld %d %d %g*
- A FENE bond has stretched dangerously far. It's interaction strength
- will be truncated to attempt to prevent the bond from blowing up.
-
-*FENE bond too long: %ld %g*
- A FENE bond has stretched dangerously far. It's interaction strength
- will be truncated to attempt to prevent the bond from blowing up.
-
-*Fix SRD walls overlap but fix srd overlap not set*
- You likely want to set this in your input script.
-
-*Fix bond/swap will ignore defined angles*
- See the doc page for fix bond/swap for more info on this
- restriction.
-
-*Fix deposit near setting < possible overlap separation %g*
- This test is performed for finite size particles with a diameter, not
- for point particles. The near setting is smaller than the particle
- diameter which can lead to overlaps.
-
-*Fix evaporate may delete atom with non-zero molecule ID*
- This is probably an error, since you should not delete only one atom
- of a molecule.
-
-*Fix gcmc using full_energy option*
- Fix gcmc has automatically turned on the full_energy option since it
- is required for systems like the one specified by the user. User input
- included one or more of the following: kspace, triclinic, a hybrid
- pair style, an eam pair style, or no "single" function for the pair
- style.
-
-*Fix property/atom mol or charge w/out ghost communication*
- A model typically needs these properties defined for ghost atoms.
-
-*Fix qeq CG convergence failed (%g) after %d iterations at %ld step*
- Self-explanatory.
-
-*Fix qeq has non-zero lower Taper radius cutoff*
- Absolute value must be <= 0.01.
-
-*Fix qeq has very low Taper radius cutoff*
- Value should typically be >= 5.0.
-
-*Fix qeq/dynamic tolerance may be too small for damped dynamics*
- Self-explanatory.
-
-*Fix qeq/fire tolerance may be too small for damped fires*
- Self-explanatory.
-
-*Fix rattle should come after all other integration fixes*
- This fix is designed to work after all other integration fixes change
- atom positions. Thus it should be the last integration fix specified.
- If not, it will not satisfy the desired constraints as well as it
- otherwise would.
-
-*Fix recenter should come after all other integration fixes*
- Other fixes may change the position of the center-of-mass, so
- fix recenter should come last.
-
-*Fix srd SRD moves may trigger frequent reneighboring*
- This is because the SRD particles may move long distances.
-
-*Fix srd grid size > 1/4 of big particle diameter*
- This may cause accuracy problems.
-
-*Fix srd particle moved outside valid domain*
- This may indicate a problem with your simulation parameters.
-
-*Fix srd particles may move > big particle diameter*
- This may cause accuracy problems.
-
-*Fix srd viscosity < 0.0 due to low SRD density*
- This may cause accuracy problems.
-
-*Fix thermal/conductivity comes before fix ave/spatial*
- The order of these 2 fixes in your input script is such that fix
- thermal/conductivity comes first. If you are using fix ave/spatial to
- measure the temperature profile induced by fix viscosity, then this
- may cause a glitch in the profile since you are averaging immediately
- after swaps have occurred. Flipping the order of the 2 fixes
- typically helps.
-
-*Fix viscosity comes before fix ave/spatial*
- The order of these 2 fixes in your input script is such that
- fix viscosity comes first. If you are using fix ave/spatial
- to measure the velocity profile induced by fix viscosity, then
- this may cause a glitch in the profile since you are averaging
- immediately after swaps have occurred. Flipping the order
- of the 2 fixes typically helps.
-
-*Fixes cannot send data in Kokkos communication, switching to classic communication*
- This is current restriction with Kokkos.
-
-*For better accuracy use 'pair_modify table 0'*
- The user-specified force accuracy cannot be achieved unless the table
- feature is disabled by using 'pair_modify table 0'.
-
-*Geometric mixing assumed for 1/r^6 coefficients*
- Self-explanatory.
-
-*Group for fix_modify temp != fix group*
- The fix_modify command is specifying a temperature computation that
- computes a temperature on a different group of atoms than the fix
- itself operates on. This is probably not what you want to do.
-
-*H matrix size has been exceeded: m_fill=%d H.m=%d\n*
- This is the size of the matrix.
-
-*Ignoring unknown or incorrect info command flag*
- Self-explanatory. An unknown argument was given to the info command.
- Compare your input with the documentation.
-
-*Improper atoms missing at step %ld*
- One or more of 4 atoms needed to compute a particular improper are
- missing on this processor. Typically this is because the pairwise
- cutoff is set too short or the improper has blown apart and an atom is
- too far away.
-
-*Improper problem: %d %ld %d %d %d %d*
- Conformation of the 4 listed improper atoms is extreme; you may want
- to check your simulation geometry.
-
-*Improper style in data file differs from currently defined improper style*
- Self-explanatory.
-
-*Inconsistent image flags*
- The image flags for a pair on bonded atoms appear to be inconsistent.
- Inconsistent means that when the coordinates of the two atoms are
- unwrapped using the image flags, the two atoms are far apart.
- Specifically they are further apart than half a periodic box length.
- Or they are more than a box length apart in a non-periodic dimension.
- This is usually due to the initial data file not having correct image
- flags for the 2 atoms in a bond that straddles a periodic boundary.
- They should be different by 1 in that case. This is a warning because
- inconsistent image flags will not cause problems for dynamics or most
- LAMMPS simulations. However they can cause problems when such atoms
- are used with the fix rigid or replicate commands. Note that if you
- have an infinite periodic crystal with bonds then it is impossible to
- have fully consistent image flags, since some bonds will cross
- periodic boundaries and connect two atoms with the same image
- flag.
-
-*KIM Model does not provide `energy'; Potential energy will be zero*
- Self-explanatory.
-
-*KIM Model does not provide `forces'; Forces will be zero*
- Self-explanatory.
-
-*KIM Model does not provide `particleEnergy'; energy per atom will be zero*
- Self-explanatory.
-
-*KIM Model does not provide `particleVirial'; virial per atom will be zero*
- Self-explanatory.
-
-*Kspace_modify slab param < 2.0 may cause unphysical behavior*
- The kspace_modify slab parameter should be larger to insure periodic
- grids padded with empty space do not overlap.
-
-*Less insertions than requested*
- The fix pour command was unsuccessful at finding open space
- for as many particles as it tried to insert.
-
-*Library error in lammps_gather_atoms*
- This library function cannot be used if atom IDs are not defined
- or are not consecutively numbered.
-
-*Library error in lammps_scatter_atoms*
- This library function cannot be used if atom IDs are not defined or
- are not consecutively numbered, or if no atom map is defined. See the
- atom_modify command for details about atom maps.
-
-*Lost atoms via change_box: original %ld current %ld*
- The command options you have used caused atoms to be lost.
-
-*Lost atoms via displace_atoms: original %ld current %ld*
- The command options you have used caused atoms to be lost.
-
-*Lost atoms: original %ld current %ld*
- Lost atoms are checked for each time thermo output is done. See the
- thermo_modify lost command for options. Lost atoms usually indicate
- bad dynamics, e.g. atoms have been blown far out of the simulation
- box, or moved futher than one processor's sub-domain away before
- reneighboring.
-
-*MSM mesh too small, increasing to 2 points in each direction*
- Self-explanatory.
-
-*Mismatch between velocity and compute groups*
- The temperature computation used by the velocity command will not be
- on the same group of atoms that velocities are being set for.
-
-*Mixing forced for lj coefficients*
- Self-explanatory.
-
-*Molecule attributes do not match system attributes*
- An attribute is specified (e.g. diameter, charge) that is
- not defined for the specified atom style.
-
-*Molecule has bond topology but no special bond settings*
- This means the bonded atoms will not be excluded in pair-wise
- interactions.
-
-*Molecule template for create_atoms has multiple molecules*
- The create_atoms command will only create molecules of a single type,
- i.e. the first molecule in the template.
-
-*Molecule template for fix gcmc has multiple molecules*
- The fix gcmc command will only create molecules of a single type,
- i.e. the first molecule in the template.
-
-*Molecule template for fix shake has multiple molecules*
- The fix shake command will only recoginze molecules of a single
- type, i.e. the first molecule in the template.
-
-*More than one compute centro/atom*
- It is not efficient to use compute centro/atom more than once.
-
-*More than one compute cluster/atom*
- It is not efficient to use compute cluster/atom more than once.
-
-*More than one compute cna/atom defined*
- It is not efficient to use compute cna/atom more than once.
-
-*More than one compute contact/atom*
- It is not efficient to use compute contact/atom more than once.
-
-*More than one compute coord/atom*
- It is not efficient to use compute coord/atom more than once.
-
-*More than one compute damage/atom*
- It is not efficient to use compute ke/atom more than once.
-
-*More than one compute dilatation/atom*
- Self-explanatory.
-
-*More than one compute erotate/sphere/atom*
- It is not efficient to use compute erorate/sphere/atom more than once.
-
-*More than one compute hexorder/atom*
- It is not efficient to use compute hexorder/atom more than once.
-
-*More than one compute ke/atom*
- It is not efficient to use compute ke/atom more than once.
-
-*More than one compute orientorder/atom*
- It is not efficient to use compute orientorder/atom more than once.
-
-*More than one compute plasticity/atom*
- Self-explanatory.
-
-*More than one compute sna/atom*
- Self-explanatory.
-
-*More than one compute snad/atom*
- Self-explanatory.
-
-*More than one compute snav/atom*
- Self-explanatory.
-
-*More than one fix poems*
- It is not efficient to use fix poems more than once.
-
-*More than one fix rigid*
- It is not efficient to use fix rigid more than once.
-
-*Neighbor exclusions used with KSpace solver may give inconsistent Coulombic energies*
- This is because excluding specific pair interactions also excludes
- them from long-range interactions which may not be the desired effect.
- The special_bonds command handles this consistently by insuring
- excluded (or weighted) 1-2, 1-3, 1-4 interactions are treated
- consistently by both the short-range pair style and the long-range
- solver. This is not done for exclusions of charged atom pairs via the
- neigh_modify exclude command.
-
-*New thermo_style command, previous thermo_modify settings will be lost*
- If a thermo_style command is used after a thermo_modify command, the
- settings changed by the thermo_modify command will be reset to their
- default values. This is because the thermo_modify commmand acts on
- the currently defined thermo style, and a thermo_style command creates
- a new style.
-
-*No Kspace calculation with verlet/split*
- The 2nd partition performs a kspace calculation so the kspace_style
- command must be used.
-
-*No automatic unit conversion to XTC file format conventions possible for units lj*
- This means no scaling will be performed.
-
-*No fixes defined, atoms won't move*
- If you are not using a fix like nve, nvt, npt then atom velocities and
- coordinates will not be updated during timestepping.
-
-*No joints between rigid bodies, use fix rigid instead*
- The bodies defined by fix poems are not connected by joints. POEMS
- will integrate the body motion, but it would be more efficient to use
- fix rigid.
-
-*Not using real units with pair reax*
- This is most likely an error, unless you have created your own ReaxFF
- parameter file in a different set of units.
-
-*Number of MSM mesh points changed to be a multiple of 2*
- MSM requires that the number of grid points in each direction be a multiple
- of two and the number of grid points in one or more directions have been
- adjusted to meet this requirement.
-
-*OMP_NUM_THREADS environment is not set.*
- This environment variable must be set appropriately to use the
- USER-OMP package.
-
-*One or more atoms are time integrated more than once*
- This is probably an error since you typically do not want to
- advance the positions or velocities of an atom more than once
- per timestep.
-
-*One or more chunks do not contain all atoms in molecule*
- This may not be what you intended.
-
-*One or more dynamic groups may not be updated at correct point in timestep*
- If there are other fixes that act immediately after the intitial stage
- of time integration within a timestep (i.e. after atoms move), then
- the command that sets up the dynamic group should appear after those
- fixes. This will insure that dynamic group assignements are made
- after all atoms have moved.
-
-*One or more respa levels compute no forces*
- This is computationally inefficient.
-
-*Pair COMB charge %.10f with force %.10f hit max barrier*
- Something is possibly wrong with your model.
-
-*Pair COMB charge %.10f with force %.10f hit min barrier*
- Something is possibly wrong with your model.
-
-*Pair brownian needs newton pair on for momentum conservation*
- Self-explanatory.
-
-*Pair dpd needs newton pair on for momentum conservation*
- Self-explanatory.
-
-*Pair dsmc: num_of_collisions > number_of_A*
- Collision model in DSMC is breaking down.
-
-*Pair dsmc: num_of_collisions > number_of_B*
- Collision model in DSMC is breaking down.
-
-*Pair style in data file differs from currently defined pair style*
- Self-explanatory.
-
-*Particle deposition was unsuccessful*
- The fix deposit command was not able to insert as many atoms as
- needed. The requested volume fraction may be too high, or other atoms
- may be in the insertion region.
-
-*Proc sub-domain size < neighbor skin, could lead to lost atoms*
- The decomposition of the physical domain (likely due to load
- balancing) has led to a processor's sub-domain being smaller than the
- neighbor skin in one or more dimensions. Since reneighboring is
- triggered by atoms moving the skin distance, this may lead to lost
- atoms, if an atom moves all the way across a neighboring processor's
- sub-domain before reneighboring is triggered.
-
-*Reducing PPPM order b/c stencil extends beyond nearest neighbor processor*
- This may lead to a larger grid than desired. See the kspace_modify overlap
- command to prevent changing of the PPPM order.
-
-*Reducing PPPMDisp Coulomb order b/c stencil extends beyond neighbor processor*
- This may lead to a larger grid than desired. See the kspace_modify overlap
- command to prevent changing of the PPPM order.
-
-*Reducing PPPMDisp dispersion order b/c stencil extends beyond neighbor processor*
- This may lead to a larger grid than desired. See the kspace_modify overlap
- command to prevent changing of the PPPM order.
-
-*Replacing a fix, but new group != old group*
- The ID and style of a fix match for a fix you are changing with a fix
- command, but the new group you are specifying does not match the old
- group.
-
-*Replicating in a non-periodic dimension*
- The parameters for a replicate command will cause a non-periodic
- dimension to be replicated; this may cause unwanted behavior.
-
-*Resetting reneighboring criteria during PRD*
- A PRD simulation requires that neigh_modify settings be delay = 0,
- every = 1, check = yes. Since these settings were not in place,
- LAMMPS changed them and will restore them to their original values
- after the PRD simulation.
-
-*Resetting reneighboring criteria during TAD*
- A TAD simulation requires that neigh_modify settings be delay = 0,
- every = 1, check = yes. Since these settings were not in place,
- LAMMPS changed them and will restore them to their original values
- after the PRD simulation.
-
-*Resetting reneighboring criteria during minimization*
- Minimization requires that neigh_modify settings be delay = 0, every =
- 1, check = yes. Since these settings were not in place, LAMMPS
- changed them and will restore them to their original values after the
- minimization.
-
-*Restart file used different # of processors*
- The restart file was written out by a LAMMPS simulation running on a
- different number of processors. Due to round-off, the trajectories of
- your restarted simulation may diverge a little more quickly than if
- you ran on the same # of processors.
-
-*Restart file used different 3d processor grid*
- The restart file was written out by a LAMMPS simulation running on a
- different 3d grid of processors. Due to round-off, the trajectories
- of your restarted simulation may diverge a little more quickly than if
- you ran on the same # of processors.
-
-*Restart file used different boundary settings, using restart file values*
- Your input script cannot change these restart file settings.
-
-*Restart file used different newton bond setting, using restart file value*
- The restart file value will override the setting in the input script.
-
-*Restart file used different newton pair setting, using input script value*
- The input script value will override the setting in the restart file.
-
-*Restrain problem: %d %ld %d %d %d %d*
- Conformation of the 4 listed dihedral atoms is extreme; you may want
- to check your simulation geometry.
-
-*Running PRD with only one replica*
- This is allowed, but you will get no parallel speed-up.
-
-*SRD bin shifting turned on due to small lamda*
- This is done to try to preserve accuracy.
-
-*SRD bin size for fix srd differs from user request*
- Fix SRD had to adjust the bin size to fit the simulation box. See the
- cubic keyword if you want this message to be an error vs warning.
-
-*SRD bins for fix srd are not cubic enough*
- The bin shape is not within tolerance of cubic. See the cubic
- keyword if you want this message to be an error vs warning.
-
-*SRD particle %d started inside big particle %d on step %ld bounce %d*
- See the inside keyword if you want this message to be an error vs
- warning.
-
-*SRD particle %d started inside wall %d on step %ld bounce %d*
- See the inside keyword if you want this message to be an error vs
- warning.
-
-*Shake determinant < 0.0*
- The determinant of the quadratic equation being solved for a single
- cluster specified by the fix shake command is numerically suspect. LAMMPS
- will set it to 0.0 and continue.
-
-*Shell command '%s' failed with error '%s'*
- Self-explanatory.
-
-*Shell command returned with non-zero status*
- This may indicate the shell command did not operate as expected.
-
-*Should not allow rigid bodies to bounce off relecting walls*
- LAMMPS allows this, but their dynamics are not computed correctly.
-
-*Should not use fix nve/limit with fix shake or fix rattle*
- This will lead to invalid constraint forces in the SHAKE/RATTLE
- computation.
-
-*Simulations might be very slow because of large number of structure factors*
- Self-explanatory.
-
-*Slab correction not needed for MSM*
- Slab correction is intended to be used with Ewald or PPPM and is not needed by MSM.
-
-*System is not charge neutral, net charge = %g*
- The total charge on all atoms on the system is not 0.0.
- For some KSpace solvers this is only a warning.
-
-*Table inner cutoff >= outer cutoff*
- You specified an inner cutoff for a Coulombic table that is longer
- than the global cutoff. Probably not what you wanted.
-
-*Temperature for MSST is not for group all*
- User-assigned temperature to MSST fix does not compute temperature for
- all atoms. Since MSST computes a global pressure, the kinetic energy
- contribution from the temperature is assumed to also be for all atoms.
- Thus the pressure used by MSST could be inaccurate.
-
-*Temperature for NPT is not for group all*
- User-assigned temperature to NPT fix does not compute temperature for
- all atoms. Since NPT computes a global pressure, the kinetic energy
- contribution from the temperature is assumed to also be for all atoms.
- Thus the pressure used by NPT could be inaccurate.
-
-*Temperature for fix modify is not for group all*
- The temperature compute is being used with a pressure calculation
- which does operate on group all, so this may be inconsistent.
-
-*Temperature for thermo pressure is not for group all*
- User-assigned temperature to thermo via the thermo_modify command does
- not compute temperature for all atoms. Since thermo computes a global
- pressure, the kinetic energy contribution from the temperature is
- assumed to also be for all atoms. Thus the pressure printed by thermo
- could be inaccurate.
-
-*The fix ave/spatial command has been replaced by the more flexible fix ave/chunk and compute chunk/atom commands -- fix ave/spatial will be removed in the summer of 2015*
- Self-explanatory.
-
-*The minimizer does not re-orient dipoles when using fix efield*
- This means that only the atom coordinates will be minimized,
- not the orientation of the dipoles.
-
-*Too many common neighbors in CNA %d times*
- More than the maximum # of neighbors was found multiple times. This
- was unexpected.
-
-*Too many inner timesteps in fix ttm*
- Self-explanatory.
-
-*Too many neighbors in CNA for %d atoms*
- More than the maximum # of neighbors was found multiple times. This
- was unexpected.
-
-*Triclinic box skew is large*
- The displacement in a skewed direction is normally required to be less
- than half the box length in that dimension. E.g. the xy tilt must be
- between -half and +half of the x box length. You have relaxed the
- constraint using the box tilt command, but the warning means that a
- LAMMPS simulation may be inefficient as a result.
-
-*Use special bonds = 0,1,1 with bond style fene*
- Most FENE models need this setting for the special_bonds command.
-
-*Use special bonds = 0,1,1 with bond style fene/expand*
- Most FENE models need this setting for the special_bonds command.
-
-*Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions*
- This is likely not what you want to do. The exclusion settings will
- eliminate neighbors in the neighbor list, which the manybody potential
- needs to calculated its terms correctly.
-
-*Using compute temp/deform with inconsistent fix deform remap option*
- Fix nvt/sllod assumes deforming atoms have a velocity profile provided
- by "remap v" or "remap none" as a fix deform option.
-
-*Using compute temp/deform with no fix deform defined*
- This is probably an error, since it makes little sense to use
- compute temp/deform in this case.
-
-*Using fix srd with box deformation but no SRD thermostat*
- The deformation will heat the SRD particles so this can
- be dangerous.
-
-*Using kspace solver on system with no charge*
- Self-explanatory.
-
-*Using largest cut-off for lj/long/dipole/long long long*
- Self-explanatory.
-
-*Using largest cutoff for buck/long/coul/long*
- Self-exlanatory.
-
-*Using largest cutoff for lj/long/coul/long*
- Self-explanatory.
-
-*Using largest cutoff for pair_style lj/long/tip4p/long*
- Self-explanatory.
-
-*Using package gpu without any pair style defined*
- Self-explanatory.
-
-*Using pair potential shift with pair_modify compute no*
- The shift effects will thus not be computed.
-
-*Using pair tail corrections with nonperiodic system*
- This is probably a bogus thing to do, since tail corrections are
- computed by integrating the density of a periodic system out to
- infinity.
-
-*Using pair tail corrections with pair_modify compute no*
- The tail corrections will thus not be computed.
-
-*pair style reax is now deprecated and will soon be retired. Users should switch to pair_style reax/c*
- Self-explanatory.
-
-
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_example.txt b/doc/html/_sources/Section_example.txt
deleted file mode 100644
index 903841d6a..000000000
--- a/doc/html/_sources/Section_example.txt
+++ /dev/null
@@ -1,197 +0,0 @@
-Example problems
-================
-
-The LAMMPS distribution includes an examples sub-directory with many
-sample problems. Many are 2d models that run quickly are are
-straightforward to visualize, requiring at most a couple of minutes to
-run on a desktop machine. Each problem has an input script (in.*) and
-produces a log file (log.*) when it runs. Some use a data file
-(data.*) of initial coordinates as additional input. A few sample log
-file run on different machines and different numbers of processors are
-included in the directories to compare your answers to. E.g. a log
-file like log.date.crack.foo.P means the "crack" example was run on P
-processors of machine "foo" on that date (i.e. with that version of
-LAMMPS).
-
-Many of the input files have commented-out lines for creating dump
-files and image files.
-
-If you uncomment the :doc:`dump <dump>` command in the input script, a
-text dump file will be produced, which can be animated by various
-`visualization programs <http://lammps.sandia.gov/viz.html>`_. It can
-also be animated using the xmovie tool described in the :doc:`Additional Tools <Section_tools>` section of the LAMMPS documentation.
-
-If you uncomment the :doc:`dump image <dump>` command in the input
-script, and assuming you have built LAMMPS with a JPG library, JPG
-snapshot images will be produced when the simulation runs. They can
-be quickly post-processed into a movie using commands described on the
-:doc:`dump image <dump_image>` doc page.
-
-Animations of many of the examples can be viewed on the Movies section
-of the `LAMMPS web site <lws_>`_.
-
-There are two kinds of sub-directories in the examples dir. Lowercase
-dirs contain one or a few simple, quick-to-run problems. Uppercase
-dirs contain up to several complex scripts that illustrate a
-particular kind of simulation method or model. Some of these run for
-longer times, e.g. to measure a particular quantity.
-
-Lists of both kinds of directories are given below.
-
-
-----------
-
-
-Lowercase directories
----------------------
-
-+-------------+------------------------------------------------------------------+
-| accelerate | run with various acceleration options (OpenMP, GPU, Phi) |
-+-------------+------------------------------------------------------------------+
-| balance | dynamic load balancing, 2d system |
-+-------------+------------------------------------------------------------------+
-| body | body particles, 2d system |
-+-------------+------------------------------------------------------------------+
-| colloid | big colloid particles in a small particle solvent, 2d system |
-+-------------+------------------------------------------------------------------+
-| comb | models using the COMB potential |
-+-------------+------------------------------------------------------------------+
-| coreshell | core/shell model using CORESHELL package |
-+-------------+------------------------------------------------------------------+
-| crack | crack propagation in a 2d solid |
-+-------------+------------------------------------------------------------------+
-| deposit | deposit atoms and molecules on a surface |
-+-------------+------------------------------------------------------------------+
-| dipole | point dipolar particles, 2d system |
-+-------------+------------------------------------------------------------------+
-| dreiding | methanol via Dreiding FF |
-+-------------+------------------------------------------------------------------+
-| eim | NaCl using the EIM potential |
-+-------------+------------------------------------------------------------------+
-| ellipse | ellipsoidal particles in spherical solvent, 2d system |
-+-------------+------------------------------------------------------------------+
-| flow | Couette and Poiseuille flow in a 2d channel |
-+-------------+------------------------------------------------------------------+
-| friction | frictional contact of spherical asperities between 2d surfaces |
-+-------------+------------------------------------------------------------------+
-| hugoniostat | Hugoniostat shock dynamics |
-+-------------+------------------------------------------------------------------+
-| indent | spherical indenter into a 2d solid |
-+-------------+------------------------------------------------------------------+
-| kim | use of potentials in Knowledge Base for Interatomic Models (KIM) |
-+-------------+------------------------------------------------------------------+
-| meam | MEAM test for SiC and shear (same as shear examples) |
-+-------------+------------------------------------------------------------------+
-| melt | rapid melt of 3d LJ system |
-+-------------+------------------------------------------------------------------+
-| micelle | self-assembly of small lipid-like molecules into 2d bilayers |
-+-------------+------------------------------------------------------------------+
-| min | energy minimization of 2d LJ melt |
-+-------------+------------------------------------------------------------------+
-| msst | MSST shock dynamics |
-+-------------+------------------------------------------------------------------+
-| nb3b | use of nonbonded 3-body harmonic pair style |
-+-------------+------------------------------------------------------------------+
-| neb | nudged elastic band (NEB) calculation for barrier finding |
-+-------------+------------------------------------------------------------------+
-| nemd | non-equilibrium MD of 2d sheared system |
-+-------------+------------------------------------------------------------------+
-| obstacle | flow around two voids in a 2d channel |
-+-------------+------------------------------------------------------------------+
-| peptide | dynamics of a small solvated peptide chain (5-mer) |
-+-------------+------------------------------------------------------------------+
-| peri | Peridynamic model of cylinder impacted by indenter |
-+-------------+------------------------------------------------------------------+
-| pour | pouring of granular particles into a 3d box, then chute flow |
-+-------------+------------------------------------------------------------------+
-| prd | parallel replica dynamics of vacancy diffusion in bulk Si |
-+-------------+------------------------------------------------------------------+
-| python | using embedded Python in a LAMMPS input script |
-+-------------+------------------------------------------------------------------+
-| qeq | use of the QEQ package for charge equilibration |
-+-------------+------------------------------------------------------------------+
-| reax | RDX and TATB models using the ReaxFF |
-+-------------+------------------------------------------------------------------+
-| rigid | rigid bodies modeled as independent or coupled |
-+-------------+------------------------------------------------------------------+
-| shear | sideways shear applied to 2d solid, with and without a void |
-+-------------+------------------------------------------------------------------+
-| snap | NVE dynamics for BCC tantalum crystal using SNAP potential |
-+-------------+------------------------------------------------------------------+
-| srd | stochastic rotation dynamics (SRD) particles as solvent |
-+-------------+------------------------------------------------------------------+
-| streitz | use of Streitz/Mintmire potential with charge equilibration |
-+-------------+------------------------------------------------------------------+
-| tad | temperature-accelerated dynamics of vacancy diffusion in bulk Si |
-+-------------+------------------------------------------------------------------+
-| vashishta | use of the Vashishta potential |
-+-------------+------------------------------------------------------------------+
-
-Here is how you can run and visualize one of the sample problems:
-
-.. parsed-literal::
-
- cd indent
- cp ../../src/lmp_linux . # copy LAMMPS executable to this dir
- lmp_linux -in in.indent # run the problem
-
-Running the simulation produces the files *dump.indent* and
-*log.lammps*\ . You can visualize the dump file of snapshots with a
-variety of 3rd-party tools highlighted on the
-`Visualization <http://lammps.sandia.gov/viz.html>`_ page of the LAMMPS
-web site.
-
-If you uncomment the :doc:`dump image <dump_image>` line(s) in the input
-script a series of JPG images will be produced by the run (assuming
-you built LAMMPS with JPG support; see :doc:`Section start 2.2 <Section_start>` for details). These can be viewed
-individually or turned into a movie or animated by tools like
-ImageMagick or QuickTime or various Windows-based tools. See the
-:doc:`dump image <dump_image>` doc page for more details. E.g. this
-Imagemagick command would create a GIF file suitable for viewing in a
-browser.
-
-.. parsed-literal::
-
- % convert -loop 1 *.jpg foo.gif
-
-
-----------
-
-
-Uppercase directories
----------------------
-
-+-----------+--------------------------------------------------------------------------------------------------+
-| ASPHERE | various aspherical particle models, using ellipsoids, rigid bodies, line/triangle particles, etc |
-+-----------+--------------------------------------------------------------------------------------------------+
-| COUPLE | examples of how to use LAMMPS as a library |
-+-----------+--------------------------------------------------------------------------------------------------+
-| DIFFUSE | compute diffusion coefficients via several methods |
-+-----------+--------------------------------------------------------------------------------------------------+
-| ELASTIC | compute elastic constants at zero temperature |
-+-----------+--------------------------------------------------------------------------------------------------+
-| ELASTIC_T | compute elastic constants at finite temperature |
-+-----------+--------------------------------------------------------------------------------------------------+
-| KAPPA | compute thermal conductivity via several methods |
-+-----------+--------------------------------------------------------------------------------------------------+
-| MC | using LAMMPS in a Monte Carlo mode to relax the energy of a system |
-+-----------+--------------------------------------------------------------------------------------------------+
-| USER | examples for USER packages and USER-contributed commands |
-+-----------+--------------------------------------------------------------------------------------------------+
-| VISCOSITY | compute viscosity via several methods |
-+-----------+--------------------------------------------------------------------------------------------------+
-
-Nearly all of these directories have README files which give more
-details on how to understand and use their contents.
-
-The USER directory has a large number of sub-directories which
-correspond by name to a USER package. They contain scripts that
-illustrate how to use the command(s) provided in that package. Many
-of the sub-directories have their own README files which give further
-instructions. See the :doc:`Section packages <Section_packages>` doc
-page for more info on specific USER packages.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_history.txt b/doc/html/_sources/Section_history.txt
deleted file mode 100644
index 29fc2d422..000000000
--- a/doc/html/_sources/Section_history.txt
+++ /dev/null
@@ -1,127 +0,0 @@
-Future and history
-==================
-
-This section lists features we plan to add to LAMMPS, features of
-previous versions of LAMMPS, and features of other parallel molecular
-dynamics codes our group has distributed.
-
-| 13.1 :ref:`Coming attractions <hist_1>`
-| 13.2 :ref:`Past versions <hist_2>`
-|
-
-
-
-
-
-.. _hist_1:
-
-Coming attractions
--------------------------------
-
-The `Wish list link <http://lammps.sandia.gov/future.html>`_ on the
-LAMMPS WWW page gives a list of features we are hoping to add to
-LAMMPS in the future, including contact names of individuals you can
-email if you are interested in contributing to the developement or
-would be a future user of that feature.
-
-You can also send `email to the developers <http://lammps.sandia.gov/authors.html>`_ if you want to add
-your wish to the list.
-
-
-----------
-
-
-.. _hist_2:
-
-Past versions
---------------------------
-
-LAMMPS development began in the mid 1990s under a cooperative research
-& development agreement (CRADA) between two DOE labs (Sandia and LLNL)
-and 3 companies (Cray, Bristol Myers Squibb, and Dupont). The goal was
-to develop a large-scale parallel classical MD code; the coding effort
-was led by Steve Plimpton at Sandia.
-
-After the CRADA ended, a final F77 version, LAMMPS 99, was
-released. As development of LAMMPS continued at Sandia, its memory
-management was converted to F90; a final F90 version was released as
-LAMMPS 2001.
-
-The current LAMMPS is a rewrite in C++ and was first publicly released
-as an open source code in 2004. It includes many new features beyond
-those in LAMMPS 99 or 2001. It also includes features from older
-parallel MD codes written at Sandia, namely ParaDyn, Warp, and
-GranFlow (see below).
-
-In late 2006 we began merging new capabilities into LAMMPS that were
-developed by Aidan Thompson at Sandia for his MD code GRASP, which has
-a parallel framework similar to LAMMPS. Most notably, these have
-included many-body potentials - Stillinger-Weber, Tersoff, ReaxFF -
-and the associated charge-equilibration routines needed for ReaxFF.
-
-The `History link <http://lammps.sandia.gov/history.html>`_ on the
-LAMMPS WWW page gives a timeline of features added to the
-C++ open-source version of LAMMPS over the last several years.
-
-These older codes are available for download from the `LAMMPS WWW site <lws_>`_, except for Warp & GranFlow which were primarily used
-internally. A brief listing of their features is given here.
-
-LAMMPS 2001
-
-* F90 + MPI
-* dynamic memory
-* spatial-decomposition parallelism
-* NVE, NVT, NPT, NPH, rRESPA integrators
-* LJ and Coulombic pairwise force fields
-* all-atom, united-atom, bead-spring polymer force fields
-* CHARMM-compatible force fields
-* class 2 force fields
-* 3d/2d Ewald & PPPM
-* various force and temperature constraints
-* SHAKE
-* Hessian-free truncated-Newton minimizer
-* user-defined diagnostics
-
-LAMMPS 99
-
-* F77 + MPI
-* static memory allocation
-* spatial-decomposition parallelism
-* most of the LAMMPS 2001 features with a few exceptions
-* no 2d Ewald & PPPM
-* molecular force fields are missing a few CHARMM terms
-* no SHAKE
-
-Warp
-
-* F90 + MPI
-* spatial-decomposition parallelism
-* embedded atom method (EAM) metal potentials + LJ
-* lattice and grain-boundary atom creation
-* NVE, NVT integrators
-* boundary conditions for applying shear stresses
-* temperature controls for actively sheared systems
-* per-atom energy and centro-symmetry computation and output
-
-ParaDyn
-
-* F77 + MPI
-* atom- and force-decomposition parallelism
-* embedded atom method (EAM) metal potentials
-* lattice atom creation
-* NVE, NVT, NPT integrators
-* all serial DYNAMO features for controls and constraints
-
-GranFlow
-
-* F90 + MPI
-* spatial-decomposition parallelism
-* frictional granular potentials
-* NVE integrator
-* boundary conditions for granular flow and packing and walls
-* particle insertion
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_howto.txt b/doc/html/_sources/Section_howto.txt
deleted file mode 100644
index b0eee3a07..000000000
--- a/doc/html/_sources/Section_howto.txt
+++ /dev/null
@@ -1,3119 +0,0 @@
-How-to discussions
-==================
-
-This section describes how to perform common tasks using LAMMPS.
-
-| 6.1 :ref:`Restarting a simulation <howto_1>`
-| 6.2 :ref:`2d simulations <howto_2>`
-| 6.3 :ref:`CHARMM, AMBER, and DREIDING force fields <howto_3>`
-| 6.4 :ref:`Running multiple simulations from one input script <howto_4>`
-| 6.5 :ref:`Multi-replica simulations <howto_5>`
-| 6.6 :ref:`Granular models <howto_6>`
-| 6.7 :ref:`TIP3P water model <howto_7>`
-| 6.8 :ref:`TIP4P water model <howto_8>`
-| 6.9 :ref:`SPC water model <howto_9>`
-| 6.10 :ref:`Coupling LAMMPS to other codes <howto_10>`
-| 6.11 :ref:`Visualizing LAMMPS snapshots <howto_11>`
-| 6.12 :ref:`Triclinic (non-orthogonal) simulation boxes <howto_12>`
-| 6.13 :ref:`NEMD simulations <howto_13>`
-| 6.14 :ref:`Finite-size spherical and aspherical particles <howto_14>`
-| 6.15 :ref:`Output from LAMMPS (thermo, dumps, computes, fixes, variables) <howto_15>`
-| 6.16 :ref:`Thermostatting, barostatting and computing temperature <howto_16>`
-| 6.17 :ref:`Walls <howto_17>`
-| 6.18 :ref:`Elastic constants <howto_18>`
-| 6.19 :ref:`Library interface to LAMMPS <howto_19>`
-| 6.20 :ref:`Calculating thermal conductivity <howto_20>`
-| 6.21 :ref:`Calculating viscosity <howto_21>`
-| 6.22 :ref:`Calculating a diffusion coefficient <howto_22>`
-| 6.23 :ref:`Using chunks to calculate system properties <howto_23>`
-| 6.24 :ref:`Setting parameters for the kspace_style pppm/disp command <howto_24>`
-| 6.25 :ref:`Polarizable models <howto_25>`
-| 6.26 :ref:`Adiabatic core/shell model <howto_26>`
-| 6.27 :ref:`Drude induced dipoles <howto_27>`
-|
-
-The example input scripts included in the LAMMPS distribution and
-highlighted in :doc:`Section_example <Section_example>` also show how to
-setup and run various kinds of simulations.
-
-
-
-
-
-.. _howto_1:
-
-Restarting a simulation
------------------------
-
-There are 3 ways to continue a long LAMMPS simulation. Multiple
-:doc:`run <run>` commands can be used in the same input script. Each
-run will continue from where the previous run left off. Or binary
-restart files can be saved to disk using the :doc:`restart <restart>`
-command. At a later time, these binary files can be read via a
-:doc:`read_restart <read_restart>` command in a new script. Or they can
-be converted to text data files using the :ref:`-r command-line switch <start_7>` and read by a
-:doc:`read_data <read_data>` command in a new script.
-
-Here we give examples of 2 scripts that read either a binary restart
-file or a converted data file and then issue a new run command to
-continue where the previous run left off. They illustrate what
-settings must be made in the new script. Details are discussed in the
-documentation for the :doc:`read_restart <read_restart>` and
-:doc:`read_data <read_data>` commands.
-
-Look at the *in.chain* input script provided in the *bench* directory
-of the LAMMPS distribution to see the original script that these 2
-scripts are based on. If that script had the line
-
-.. parsed-literal::
-
- restart 50 tmp.restart
-
-added to it, it would produce 2 binary restart files (tmp.restart.50
-and tmp.restart.100) as it ran.
-
-This script could be used to read the 1st restart file and re-run the
-last 50 timesteps:
-
-.. parsed-literal::
-
- read_restart tmp.restart.50
-
-.. parsed-literal::
-
- neighbor 0.4 bin
- neigh_modify every 1 delay 1
-
-.. parsed-literal::
-
- fix 1 all nve
- fix 2 all langevin 1.0 1.0 10.0 904297
-
-.. parsed-literal::
-
- timestep 0.012
-
-.. parsed-literal::
-
- run 50
-
-Note that the following commands do not need to be repeated because
-their settings are included in the restart file: *units, atom_style,
-special_bonds, pair_style, bond_style*\ . However these commands do
-need to be used, since their settings are not in the restart file:
-*neighbor, fix, timestep*\ .
-
-If you actually use this script to perform a restarted run, you will
-notice that the thermodynamic data match at step 50 (if you also put a
-"thermo 50" command in the original script), but do not match at step
-100. This is because the :doc:`fix langevin <fix_langevin>` command
-uses random numbers in a way that does not allow for perfect restarts.
-
-As an alternate approach, the restart file could be converted to a data
-file as follows:
-
-.. parsed-literal::
-
- lmp_g++ -r tmp.restart.50 tmp.restart.data
-
-Then, this script could be used to re-run the last 50 steps:
-
-.. parsed-literal::
-
- units lj
- atom_style bond
- pair_style lj/cut 1.12
- pair_modify shift yes
- bond_style fene
- special_bonds 0.0 1.0 1.0
-
-.. parsed-literal::
-
- read_data tmp.restart.data
-
-.. parsed-literal::
-
- neighbor 0.4 bin
- neigh_modify every 1 delay 1
-
-.. parsed-literal::
-
- fix 1 all nve
- fix 2 all langevin 1.0 1.0 10.0 904297
-
-.. parsed-literal::
-
- timestep 0.012
-
-.. parsed-literal::
-
- reset_timestep 50
- run 50
-
-Note that nearly all the settings specified in the original *in.chain*
-script must be repeated, except the *pair_coeff* and *bond_coeff*
-commands since the new data file lists the force field coefficients.
-Also, the :doc:`reset_timestep <reset_timestep>` command is used to tell
-LAMMPS the current timestep. This value is stored in restart files,
-but not in data files.
-
-
-----------
-
-
-.. _howto_2:
-
-2d simulations
---------------
-
-Use the :doc:`dimension <dimension>` command to specify a 2d simulation.
-
-Make the simulation box periodic in z via the :doc:`boundary <boundary>`
-command. This is the default.
-
-If using the :doc:`create box <create_box>` command to define a
-simulation box, set the z dimensions narrow, but finite, so that the
-create_atoms command will tile the 3d simulation box with a single z
-plane of atoms - e.g.
-
-.. parsed-literal::
-
- :doc:`create box <create_box>` 1 -10 10 -10 10 -0.25 0.25
-
-If using the :doc:`read data <read_data>` command to read in a file of
-atom coordinates, set the "zlo zhi" values to be finite but narrow,
-similar to the create_box command settings just described. For each
-atom in the file, assign a z coordinate so it falls inside the
-z-boundaries of the box - e.g. 0.0.
-
-Use the :doc:`fix enforce2d <fix_enforce2d>` command as the last
-defined fix to insure that the z-components of velocities and forces
-are zeroed out every timestep. The reason to make it the last fix is
-so that any forces induced by other fixes will be zeroed out.
-
-Many of the example input scripts included in the LAMMPS distribution
-are for 2d models.
-
-.. note::
-
- Some models in LAMMPS treat particles as finite-size spheres, as
- opposed to point particles. In 2d, the particles will still be
- spheres, not disks, meaning their moment of inertia will be the same
- as in 3d.
-
-
-----------
-
-
-.. _howto_3:
-
-CHARMM, AMBER, and DREIDING force fields
-----------------------------------------
-
-A force field has 2 parts: the formulas that define it and the
-coefficients used for a particular system. Here we only discuss
-formulas implemented in LAMMPS that correspond to formulas commonly
-used in the CHARMM, AMBER, and DREIDING force fields. Setting
-coefficients is done in the input data file via the
-:doc:`read_data <read_data>` command or in the input script with
-commands like :doc:`pair_coeff <pair_coeff>` or
-:doc:`bond_coeff <bond_coeff>`. See :doc:`Section_tools <Section_tools>`
-for additional tools that can use CHARMM or AMBER to assign force
-field coefficients and convert their output into LAMMPS input.
-
-See :ref:`(MacKerell) <howto-MacKerell>` for a description of the CHARMM force
-field. See :ref:`(Cornell) <howto-Cornell>` for a description of the AMBER force
-field.
-
-.. _charmm: http://www.scripps.edu/brooks
-
-
-
-.. _amber: http://amber.scripps.edu
-
-
-
-These style choices compute force field formulas that are consistent
-with common options in CHARMM or AMBER. See each command's
-documentation for the formula it computes.
-
-* :doc:`bond_style <bond_harmonic>` harmonic
-* :doc:`angle_style <angle_charmm>` charmm
-* :doc:`dihedral_style <dihedral_charmm>` charmm
-* :doc:`pair_style <pair_charmm>` lj/charmm/coul/charmm
-* :doc:`pair_style <pair_charmm>` lj/charmm/coul/charmm/implicit
-* :doc:`pair_style <pair_charmm>` lj/charmm/coul/long
-
-* :doc:`special_bonds <special_bonds>` charmm
-* :doc:`special_bonds <special_bonds>` amber
-
-DREIDING is a generic force field developed by the `Goddard group <http://www.wag.caltech.edu>`_ at Caltech and is useful for
-predicting structures and dynamics of organic, biological and
-main-group inorganic molecules. The philosophy in DREIDING is to use
-general force constants and geometry parameters based on simple
-hybridization considerations, rather than individual force constants
-and geometric parameters that depend on the particular combinations of
-atoms involved in the bond, angle, or torsion terms. DREIDING has an
-:doc:`explicit hydrogen bond term <pair_hbond_dreiding>` to describe
-interactions involving a hydrogen atom on very electronegative atoms
-(N, O, F).
-
-See :ref:`(Mayo) <howto-Mayo>` for a description of the DREIDING force field
-
-These style choices compute force field formulas that are consistent
-with the DREIDING force field. See each command's
-documentation for the formula it computes.
-
-* :doc:`bond_style <bond_harmonic>` harmonic
-* :doc:`bond_style <bond_morse>` morse
-
-* :doc:`angle_style <angle_harmonic>` harmonic
-* :doc:`angle_style <angle_cosine>` cosine
-* :doc:`angle_style <angle_cosine_periodic>` cosine/periodic
-
-* :doc:`dihedral_style <dihedral_charmm>` charmm
-* :doc:`improper_style <improper_umbrella>` umbrella
-
-* :doc:`pair_style <pair_buck>` buck
-* :doc:`pair_style <pair_buck>` buck/coul/cut
-* :doc:`pair_style <pair_buck>` buck/coul/long
-* :doc:`pair_style <pair_lj>` lj/cut
-* :doc:`pair_style <pair_lj>` lj/cut/coul/cut
-* :doc:`pair_style <pair_lj>` lj/cut/coul/long
-
-* :doc:`pair_style <pair_hbond_dreiding>` hbond/dreiding/lj
-* :doc:`pair_style <pair_hbond_dreiding>` hbond/dreiding/morse
-
-* :doc:`special_bonds <special_bonds>` dreiding
-
-
-----------
-
-
-.. _howto_4:
-
-Running multiple simulations from one input script
---------------------------------------------------
-
-This can be done in several ways. See the documentation for
-individual commands for more details on how these examples work.
-
-If "multiple simulations" means continue a previous simulation for
-more timesteps, then you simply use the :doc:`run <run>` command
-multiple times. For example, this script
-
-.. parsed-literal::
-
- units lj
- atom_style atomic
- read_data data.lj
- run 10000
- run 10000
- run 10000
- run 10000
- run 10000
-
-would run 5 successive simulations of the same system for a total of
-50,000 timesteps.
-
-If you wish to run totally different simulations, one after the other,
-the :doc:`clear <clear>` command can be used in between them to
-re-initialize LAMMPS. For example, this script
-
-.. parsed-literal::
-
- units lj
- atom_style atomic
- read_data data.lj
- run 10000
- clear
- units lj
- atom_style atomic
- read_data data.lj.new
- run 10000
-
-would run 2 independent simulations, one after the other.
-
-For large numbers of independent simulations, you can use
-:doc:`variables <variable>` and the :doc:`next <next>` and
-:doc:`jump <jump>` commands to loop over the same input script
-multiple times with different settings. For example, this
-script, named in.polymer
-
-.. parsed-literal::
-
- variable d index run1 run2 run3 run4 run5 run6 run7 run8
- shell cd $d
- read_data data.polymer
- run 10000
- shell cd ..
- clear
- next d
- jump in.polymer
-
-would run 8 simulations in different directories, using a data.polymer
-file in each directory. The same concept could be used to run the
-same system at 8 different temperatures, using a temperature variable
-and storing the output in different log and dump files, for example
-
-.. parsed-literal::
-
- variable a loop 8
- variable t index 0.8 0.85 0.9 0.95 1.0 1.05 1.1 1.15
- log log.$a
- read data.polymer
- velocity all create $t 352839
- fix 1 all nvt $t $t 100.0
- dump 1 all atom 1000 dump.$a
- run 100000
- clear
- next t
- next a
- jump in.polymer
-
-All of the above examples work whether you are running on 1 or
-multiple processors, but assumed you are running LAMMPS on a single
-partition of processors. LAMMPS can be run on multiple partitions via
-the "-partition" command-line switch as described in :ref:`this section <start_7>` of the manual.
-
-In the last 2 examples, if LAMMPS were run on 3 partitions, the same
-scripts could be used if the "index" and "loop" variables were
-replaced with *universe*\ -style variables, as described in the
-:doc:`variable <variable>` command. Also, the "next t" and "next a"
-commands would need to be replaced with a single "next a t" command.
-With these modifications, the 8 simulations of each script would run
-on the 3 partitions one after the other until all were finished.
-Initially, 3 simulations would be started simultaneously, one on each
-partition. When one finished, that partition would then start
-the 4th simulation, and so forth, until all 8 were completed.
-
-
-----------
-
-
-.. _howto_5:
-
-Multi-replica simulations
--------------------------
-
-Several commands in LAMMPS run mutli-replica simulations, meaning
-that multiple instances (replicas) of your simulation are run
-simultaneously, with small amounts of data exchanged between replicas
-periodically.
-
-These are the relevant commands:
-
-* :doc:`neb <neb>` for nudged elastic band calculations
-* :doc:`prd <prd>` for parallel replica dynamics
-* :doc:`tad <tad>` for temperature accelerated dynamics
-* :doc:`temper <temper>` for parallel tempering
-* :doc:`fix pimd <fix_pimd>` for path-integral molecular dynamics (PIMD)
-
-NEB is a method for finding transition states and barrier energies.
-PRD and TAD are methods for performing accelerated dynamics to find
-and perform infrequent events. Parallel tempering or replica exchange
-runs different replicas at a series of temperature to facilitate
-rare-event sampling.
-
-These commands can only be used if LAMMPS was built with the REPLICA
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info on packages.
-
-PIMD runs different replicas whose individual particles are coupled
-together by springs to model a system or ring-polymers.
-
-This commands can only be used if LAMMPS was built with the USER-MISC
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info on packages.
-
-In all these cases, you must run with one or more processors per
-replica. The processors assigned to each replica are determined at
-run-time by using the :ref:`-partition command-line switch <start_7>` to launch LAMMPS on multiple
-partitions, which in this context are the same as replicas. E.g.
-these commands:
-
-.. parsed-literal::
-
- mpirun -np 16 lmp_linux -partition 8x2 -in in.temper
- mpirun -np 8 lmp_linux -partition 8x1 -in in.neb
-
-would each run 8 replicas, on either 16 or 8 processors. Note the use
-of the :ref:`-in command-line switch <start_7>` to specify
-the input script which is required when running in multi-replica mode.
-
-Also note that with MPI installed on a machine (e.g. your desktop),
-you can run on more (virtual) processors than you have physical
-processors. Thus the above commands could be run on a
-single-processor (or few-processor) desktop so that you can run
-a multi-replica simulation on more replicas than you have
-physical processors.
-
-
-----------
-
-
-.. _howto_6:
-
-Granular models
----------------
-
-Granular system are composed of spherical particles with a diameter,
-as opposed to point particles. This means they have an angular
-velocity and torque can be imparted to them to cause them to rotate.
-
-To run a simulation of a granular model, you will want to use
-the following commands:
-
-* :doc:`atom_style sphere <atom_style>`
-* :doc:`fix nve/sphere <fix_nve_sphere>`
-* :doc:`fix gravity <fix_gravity>`
-
-This compute
-
-* :doc:`compute erotate/sphere <compute_erotate_sphere>`
-
-calculates rotational kinetic energy which can be :ref:`output with thermodynamic info <howto_15>`.
-
-Use one of these 3 pair potentials, which compute forces and torques
-between interacting pairs of particles:
-
-* :doc:`pair_style <pair_style>` gran/history
-* :doc:`pair_style <pair_style>` gran/no_history
-* :doc:`pair_style <pair_style>` gran/hertzian
-
-These commands implement fix options specific to granular systems:
-
-* :doc:`fix freeze <fix_freeze>`
-* :doc:`fix pour <fix_pour>`
-* :doc:`fix viscous <fix_viscous>`
-* :doc:`fix wall/gran <fix_wall_gran>`
-
-The fix style *freeze* zeroes both the force and torque of frozen
-atoms, and should be used for granular system instead of the fix style
-*setforce*\ .
-
-For computational efficiency, you can eliminate needless pairwise
-computations between frozen atoms by using this command:
-
-* :doc:`neigh_modify <neigh_modify>` exclude
-
-
-----------
-
-
-.. _howto_7:
-
-TIP3P water model
------------------
-
-The TIP3P water model as implemented in CHARMM
-:ref:`(MacKerell) <howto-MacKerell>` specifies a 3-site rigid water molecule with
-charges and Lennard-Jones parameters assigned to each of the 3 atoms.
-In LAMMPS the :doc:`fix shake <fix_shake>` command can be used to hold
-the two O-H bonds and the H-O-H angle rigid. A bond style of
-*harmonic* and an angle style of *harmonic* or *charmm* should also be
-used.
-
-These are the additional parameters (in real units) to set for O and H
-atoms and the water molecule to run a rigid TIP3P-CHARMM model with a
-cutoff. The K values can be used if a flexible TIP3P model (without
-fix shake) is desired. If the LJ epsilon and sigma for HH and OH are
-set to 0.0, it corresponds to the original 1983 TIP3P model
-:ref:`(Jorgensen) <Jorgensen>`.
-
-| O mass = 15.9994
-| H mass = 1.008
-| O charge = -0.834
-| H charge = 0.417
-| LJ epsilon of OO = 0.1521
-| LJ sigma of OO = 3.1507
-| LJ epsilon of HH = 0.0460
-| LJ sigma of HH = 0.4000
-| LJ epsilon of OH = 0.0836
-| LJ sigma of OH = 1.7753
-| K of OH bond = 450
-| r0 of OH bond = 0.9572
-| K of HOH angle = 55
-| theta of HOH angle = 104.52
-|
-
-These are the parameters to use for TIP3P with a long-range Coulombic
-solver (e.g. Ewald or PPPM in LAMMPS), see :ref:`(Price) <Price>` for
-details:
-
-| O mass = 15.9994
-| H mass = 1.008
-| O charge = -0.830
-| H charge = 0.415
-| LJ epsilon of OO = 0.102
-| LJ sigma of OO = 3.188
-| LJ epsilon, sigma of OH, HH = 0.0
-| K of OH bond = 450
-| r0 of OH bond = 0.9572
-| K of HOH angle = 55
-| theta of HOH angle = 104.52
-|
-
-Wikipedia also has a nice article on `water models <http://en.wikipedia.org/wiki/Water_model>`_.
-
-
-----------
-
-
-.. _howto_8:
-
-TIP4P water model
------------------
-
-The four-point TIP4P rigid water model extends the traditional
-three-point TIP3P model by adding an additional site, usually
-massless, where the charge associated with the oxygen atom is placed.
-This site M is located at a fixed distance away from the oxygen along
-the bisector of the HOH bond angle. A bond style of *harmonic* and an
-angle style of *harmonic* or *charmm* should also be used.
-
-A TIP4P model is run with LAMMPS using either this command
-for a cutoff model:
-
-:doc:`pair_style lj/cut/tip4p/cut <pair_lj>`
-
-or these two commands for a long-range model:
-
-* :doc:`pair_style lj/cut/tip4p/long <pair_lj>`
-* :doc:`kspace_style pppm/tip4p <kspace_style>`
-
-For both models, the bond lengths and bond angles should be held fixed
-using the :doc:`fix shake <fix_shake>` command.
-
-These are the additional parameters (in real units) to set for O and H
-atoms and the water molecule to run a rigid TIP4P model with a cutoff
-:ref:`(Jorgensen) <Jorgensen>`. Note that the OM distance is specified in
-the :doc:`pair_style <pair_style>` command, not as part of the pair
-coefficients.
-
-| O mass = 15.9994
-| H mass = 1.008
-| O charge = -1.040
-| H charge = 0.520
-| r0 of OH bond = 0.9572
-| theta of HOH angle = 104.52
-| OM distance = 0.15
-| LJ epsilon of O-O = 0.1550
-| LJ sigma of O-O = 3.1536
-| LJ epsilon, sigma of OH, HH = 0.0
-| Coulombic cutoff = 8.5
-|
-
-For the TIP4/Ice model (J Chem Phys, 122, 234511 (2005);
-http://dx.doi.org/10.1063/1.1931662) these values can be used:
-
-| O mass = 15.9994
-| H mass = 1.008
-| O charge = -1.1794
-| H charge = 0.5897
-| r0 of OH bond = 0.9572
-| theta of HOH angle = 104.52
-| OM distance = 0.1577
-| LJ epsilon of O-O = 0.21084
-| LJ sigma of O-O = 3.1668
-| LJ epsilon, sigma of OH, HH = 0.0
-| Coulombic cutoff = 8.5
-|
-
-For the TIP4P/2005 model (J Chem Phys, 123, 234505 (2005);
-http://dx.doi.org/10.1063/1.2121687), these values can be used:
-
-| O mass = 15.9994
-| H mass = 1.008
-| O charge = -1.1128
-| H charge = 0.5564
-| r0 of OH bond = 0.9572
-| theta of HOH angle = 104.52
-| OM distance = 0.1546
-| LJ epsilon of O-O = 0.1852
-| LJ sigma of O-O = 3.1589
-| LJ epsilon, sigma of OH, HH = 0.0
-| Coulombic cutoff = 8.5
-|
-
-These are the parameters to use for TIP4P with a long-range Coulombic
-solver (e.g. Ewald or PPPM in LAMMPS):
-
-| O mass = 15.9994
-| H mass = 1.008
-| O charge = -1.0484
-| H charge = 0.5242
-| r0 of OH bond = 0.9572
-| theta of HOH angle = 104.52
-| OM distance = 0.1250
-| LJ epsilon of O-O = 0.16275
-| LJ sigma of O-O = 3.16435
-| LJ epsilon, sigma of OH, HH = 0.0
-|
-
-Note that the when using the TIP4P pair style, the neighobr list
-cutoff for Coulomb interactions is effectively extended by a distance
-2 * (OM distance), to account for the offset distance of the
-fictitious charges on O atoms in water molecules. Thus it is
-typically best in an efficiency sense to use a LJ cutoff >= Coulomb
-cutoff + 2*(OM distance), to shrink the size of the neighbor list.
-This leads to slightly larger cost for the long-range calculation, so
-you can test the trade-off for your model. The OM distance and the LJ
-and Coulombic cutoffs are set in the :doc:`pair_style lj/cut/tip4p/long <pair_lj>` command.
-
-Wikipedia also has a nice article on `water models <http://en.wikipedia.org/wiki/Water_model>`_.
-
-
-----------
-
-
-.. _howto_9:
-
-SPC water model
----------------
-
-The SPC water model specifies a 3-site rigid water molecule with
-charges and Lennard-Jones parameters assigned to each of the 3 atoms.
-In LAMMPS the :doc:`fix shake <fix_shake>` command can be used to hold
-the two O-H bonds and the H-O-H angle rigid. A bond style of
-*harmonic* and an angle style of *harmonic* or *charmm* should also be
-used.
-
-These are the additional parameters (in real units) to set for O and H
-atoms and the water molecule to run a rigid SPC model.
-
-| O mass = 15.9994
-| H mass = 1.008
-| O charge = -0.820
-| H charge = 0.410
-| LJ epsilon of OO = 0.1553
-| LJ sigma of OO = 3.166
-| LJ epsilon, sigma of OH, HH = 0.0
-| r0 of OH bond = 1.0
-| theta of HOH angle = 109.47
-|
-
-Note that as originally proposed, the SPC model was run with a 9
-Angstrom cutoff for both LJ and Coulommbic terms. It can also be used
-with long-range Coulombics (Ewald or PPPM in LAMMPS), without changing
-any of the parameters above, though it becomes a different model in
-that mode of usage.
-
-The SPC/E (extended) water model is the same, except
-the partial charge assignemnts change:
-
-| O charge = -0.8476
-| H charge = 0.4238
-|
-
-See the :ref:`(Berendsen) <howto-Berendsen>` reference for more details on both
-the SPC and SPC/E models.
-
-Wikipedia also has a nice article on `water models <http://en.wikipedia.org/wiki/Water_model>`_.
-
-
-----------
-
-
-.. _howto_10:
-
-Coupling LAMMPS to other codes
-------------------------------
-
-LAMMPS is designed to allow it to be coupled to other codes. For
-example, a quantum mechanics code might compute forces on a subset of
-atoms and pass those forces to LAMMPS. Or a continuum finite element
-(FE) simulation might use atom positions as boundary conditions on FE
-nodal points, compute a FE solution, and return interpolated forces on
-MD atoms.
-
-LAMMPS can be coupled to other codes in at least 3 ways. Each has
-advantages and disadvantages, which you'll have to think about in the
-context of your application.
-
-(1) Define a new :doc:`fix <fix>` command that calls the other code. In
-this scenario, LAMMPS is the driver code. During its timestepping,
-the fix is invoked, and can make library calls to the other code,
-which has been linked to LAMMPS as a library. This is the way the
-`POEMS <poems_>`_ package that performs constrained rigid-body motion on
-groups of atoms is hooked to LAMMPS. See the
-:doc:`fix poems <fix_poems>` command for more details. See :doc:`this section <Section_modify>` of the documentation for info on how to add
-a new fix to LAMMPS.
-
-.. _poems: http://www.rpi.edu/~anderk5/lab
-
-
-
-(2) Define a new LAMMPS command that calls the other code. This is
-conceptually similar to method (1), but in this case LAMMPS and the
-other code are on a more equal footing. Note that now the other code
-is not called during the timestepping of a LAMMPS run, but between
-runs. The LAMMPS input script can be used to alternate LAMMPS runs
-with calls to the other code, invoked via the new command. The
-:doc:`run <run>` command facilitates this with its *every* option, which
-makes it easy to run a few steps, invoke the command, run a few steps,
-invoke the command, etc.
-
-In this scenario, the other code can be called as a library, as in
-(1), or it could be a stand-alone code, invoked by a system() call
-made by the command (assuming your parallel machine allows one or more
-processors to start up another program). In the latter case the
-stand-alone code could communicate with LAMMPS thru files that the
-command writes and reads.
-
-See :doc:`Section_modify <Section_modify>` of the documentation for how
-to add a new command to LAMMPS.
-
-(3) Use LAMMPS as a library called by another code. In this case the
-other code is the driver and calls LAMMPS as needed. Or a wrapper
-code could link and call both LAMMPS and another code as libraries.
-Again, the :doc:`run <run>` command has options that allow it to be
-invoked with minimal overhead (no setup or clean-up) if you wish to do
-multiple short runs, driven by another program.
-
-Examples of driver codes that call LAMMPS as a library are included in
-the examples/COUPLE directory of the LAMMPS distribution; see
-examples/COUPLE/README for more details:
-
-* simple: simple driver programs in C++ and C which invoke LAMMPS as a
- library
-* lammps_quest: coupling of LAMMPS and `Quest <quest_>`_, to run classical
- MD with quantum forces calculated by a density functional code
-* lammps_spparks: coupling of LAMMPS and `SPPARKS <spparks_>`_, to couple
- a kinetic Monte Carlo model for grain growth using MD to calculate
- strain induced across grain boundaries
-.. _quest: http://dft.sandia.gov/Quest
-
-
-
-.. _spparks: http://www.sandia.gov/~sjplimp/spparks.html
-
-
-
-:ref:`This section <start_5>` of the documentation
-describes how to build LAMMPS as a library. Once this is done, you
-can interface with LAMMPS either via C++, C, Fortran, or Python (or
-any other language that supports a vanilla C-like interface). For
-example, from C++ you could create one (or more) "instances" of
-LAMMPS, pass it an input script to process, or execute individual
-commands, all by invoking the correct class methods in LAMMPS. From C
-or Fortran you can make function calls to do the same things. See
-:doc:`Section_python <Section_python>` of the manual for a description
-of the Python wrapper provided with LAMMPS that operates through the
-LAMMPS library interface.
-
-The files src/library.cpp and library.h contain the C-style interface
-to LAMMPS. See :ref:`Section_howto 19 <howto_19>` of the
-manual for a description of the interface and how to extend it for
-your needs.
-
-Note that the lammps_open() function that creates an instance of
-LAMMPS takes an MPI communicator as an argument. This means that
-instance of LAMMPS will run on the set of processors in the
-communicator. Thus the calling code can run LAMMPS on all or a subset
-of processors. For example, a wrapper script might decide to
-alternate between LAMMPS and another code, allowing them both to run
-on all the processors. Or it might allocate half the processors to
-LAMMPS and half to the other code and run both codes simultaneously
-before syncing them up periodically. Or it might instantiate multiple
-instances of LAMMPS to perform different calculations.
-
-
-----------
-
-
-.. _howto_11:
-
-Visualizing LAMMPS snapshots
-----------------------------
-
-LAMMPS itself does not do visualization, but snapshots from LAMMPS
-simulations can be visualized (and analyzed) in a variety of ways.
-
-LAMMPS snapshots are created by the :doc:`dump <dump>` command which can
-create files in several formats. The native LAMMPS dump format is a
-text file (see "dump atom" or "dump custom") which can be visualized
-by the :ref:`xmovie <xmovie>` program, included with the
-LAMMPS package. This produces simple, fast 2d projections of 3d
-systems, and can be useful for rapid debugging of simulation geometry
-and atom trajectories.
-
-Several programs included with LAMMPS as auxiliary tools can convert
-native LAMMPS dump files to other formats. See the
-:doc:`Section_tools <Section_tools>` doc page for details. The first is
-the :ref:`ch2lmp tool <charmm>`, which contains a
-lammps2pdb Perl script which converts LAMMPS dump files into PDB
-files. The second is the :ref:`lmp2arc tool <arc>` which
-converts LAMMPS dump files into Accelrys' Insight MD program files.
-The third is the :ref:`lmp2cfg tool <cfg>` which converts
-LAMMPS dump files into CFG files which can be read into the
-`AtomEye <atomeye_>`_ visualizer.
-
-A Python-based toolkit distributed by our group can read native LAMMPS
-dump files, including custom dump files with additional columns of
-user-specified atom information, and convert them to various formats
-or pipe them into visualization software directly. See the `Pizza.py WWW site <pizza_>`_ for details. Specifically, Pizza.py can convert
-LAMMPS dump files into PDB, XYZ, `Ensight <ensight_>`_, and VTK formats.
-Pizza.py can pipe LAMMPS dump files directly into the Raster3d and
-RasMol visualization programs. Pizza.py has tools that do interactive
-3d OpenGL visualization and one that creates SVG images of dump file
-snapshots.
-
-LAMMPS can create XYZ files directly (via "dump xyz") which is a
-simple text-based file format used by many visualization programs
-including `VMD <vmd_>`_.
-
-LAMMPS can create DCD files directly (via "dump dcd") which can be
-read by `VMD <vmd_>`_ in conjunction with a CHARMM PSF file. Using this
-form of output avoids the need to convert LAMMPS snapshots to PDB
-files. See the :doc:`dump <dump>` command for more information on DCD
-files.
-
-LAMMPS can create XTC files directly (via "dump xtc") which is GROMACS
-file format which can also be read by `VMD <vmd_>`_ for visualization.
-See the :doc:`dump <dump>` command for more information on XTC files.
-
-.. _pizza: http://www.sandia.gov/~sjplimp/pizza.html
-
-
-
-.. _vmd: http://www.ks.uiuc.edu/Research/vmd
-
-
-
-.. _ensight: http://www.ensight.com
-
-
-
-.. _atomeye: http://mt.seas.upenn.edu/Archive/Graphics/A
-
-
-
-
-----------
-
-
-.. _howto_12:
-
-Triclinic (non-orthogonal) simulation boxes
--------------------------------------------
-
-By default, LAMMPS uses an orthogonal simulation box to encompass the
-particles. The :doc:`boundary <boundary>` command sets the boundary
-conditions of the box (periodic, non-periodic, etc). The orthogonal
-box has its "origin" at (xlo,ylo,zlo) and is defined by 3 edge vectors
-starting from the origin given by **a** = (xhi-xlo,0,0); **b** =
-(0,yhi-ylo,0); **c** = (0,0,zhi-zlo). The 6 parameters
-(xlo,xhi,ylo,yhi,zlo,zhi) are defined at the time the simulation box
-is created, e.g. by the :doc:`create_box <create_box>` or
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands. Additionally, LAMMPS defines box size parameters lx,ly,lz
-where lx = xhi-xlo, and similarly in the y and z dimensions. The 6
-parameters, as well as lx,ly,lz, can be output via the :doc:`thermo_style custom <thermo_style>` command.
-
-LAMMPS also allows simulations to be performed in triclinic
-(non-orthogonal) simulation boxes shaped as a parallelepiped with
-triclinic symmetry. The parallelepiped has its "origin" at
-(xlo,ylo,zlo) and is defined by 3 edge vectors starting from the
-origin given by **a** = (xhi-xlo,0,0); **b** = (xy,yhi-ylo,0); **c** =
-(xz,yz,zhi-zlo). *xy,xz,yz* can be 0.0 or positive or negative values
-and are called "tilt factors" because they are the amount of
-displacement applied to faces of an originally orthogonal box to
-transform it into the parallelepiped. In LAMMPS the triclinic
-simulation box edge vectors **a**\ , **b**\ , and **c** cannot be arbitrary
-vectors. As indicated, **a** must lie on the positive x axis. **b** must
-lie in the xy plane, with strictly positive y component. **c** may have
-any orientation with strictly positive z component. The requirement
-that **a**\ , **b**\ , and **c** have strictly positive x, y, and z components,
-respectively, ensures that **a**\ , **b**\ , and **c** form a complete
-right-handed basis. These restrictions impose no loss of generality,
-since it is possible to rotate/invert any set of 3 crystal basis
-vectors so that they conform to the restrictions.
-
-For example, assume that the 3 vectors **A**\ ,\ **B**\ ,\ **C** are the edge
-vectors of a general parallelepiped, where there is no restriction on
-**A**\ ,\ **B**\ ,\ **C** other than they form a complete right-handed basis i.e.
-**A** x **B** . **C** > 0. The equivalent LAMMPS **a**\ ,\ **b**\ ,\ **c** are a linear
-rotation of **A**\ , **B**\ , and **C** and can be computed as follows:
-
-.. image:: Eqs/transform.jpg
- :align: center
-
-where A = |\ **A**\ | indicates the scalar length of **A**\ . The ^ hat symbol
-indicates the corresponding unit vector. *beta* and *gamma* are angles
-between the vectors described below. Note that by construction,
-**a**\ , **b**\ , and **c** have strictly positive x, y, and z components, respectively.
-If it should happen that
-**A**\ , **B**\ , and **C** form a left-handed basis, then the above equations
-are not valid for **c**\ . In this case, it is necessary
-to first apply an inversion. This can be achieved
-by interchanging two basis vectors or by changing the sign of one of them.
-
-For consistency, the same rotation/inversion applied to the basis vectors
-must also be applied to atom positions, velocities,
-and any other vector quantities.
-This can be conveniently achieved by first converting to
-fractional coordinates in the
-old basis and then converting to distance coordinates in the new basis.
-The transformation is given by the following equation:
-
-.. image:: Eqs/rotate.jpg
- :align: center
-
-where *V* is the volume of the box, **X** is the original vector quantity and
-**x** is the vector in the LAMMPS basis.
-
-There is no requirement that a triclinic box be periodic in any
-dimension, though it typically should be in at least the 2nd dimension
-of the tilt (y in xy) if you want to enforce a shift in periodic
-boundary conditions across that boundary. Some commands that work
-with triclinic boxes, e.g. the :doc:`fix deform <fix_deform>` and :doc:`fix npt <fix_nh>` commands, require periodicity or non-shrink-wrap
-boundary conditions in specific dimensions. See the command doc pages
-for details.
-
-The 9 parameters (xlo,xhi,ylo,yhi,zlo,zhi,xy,xz,yz) are defined at the
-time the simluation box is created. This happens in one of 3 ways.
-If the :doc:`create_box <create_box>` command is used with a region of
-style *prism*\ , then a triclinic box is setup. See the
-:doc:`region <region>` command for details. If the
-:doc:`read_data <read_data>` command is used to define the simulation
-box, and the header of the data file contains a line with the "xy xz
-yz" keyword, then a triclinic box is setup. See the
-:doc:`read_data <read_data>` command for details. Finally, if the
-:doc:`read_restart <read_restart>` command reads a restart file which
-was written from a simulation using a triclinic box, then a triclinic
-box will be setup for the restarted simulation.
-
-Note that you can define a triclinic box with all 3 tilt factors =
-0.0, so that it is initially orthogonal. This is necessary if the box
-will become non-orthogonal, e.g. due to the :doc:`fix npt <fix_nh>` or
-:doc:`fix deform <fix_deform>` commands. Alternatively, you can use the
-:doc:`change_box <change_box>` command to convert a simulation box from
-orthogonal to triclinic and vice versa.
-
-As with orthogonal boxes, LAMMPS defines triclinic box size parameters
-lx,ly,lz where lx = xhi-xlo, and similarly in the y and z dimensions.
-The 9 parameters, as well as lx,ly,lz, can be output via the
-:doc:`thermo_style custom <thermo_style>` command.
-
-To avoid extremely tilted boxes (which would be computationally
-inefficient), LAMMPS normally requires that no tilt factor can skew
-the box more than half the distance of the parallel box length, which
-is the 1st dimension in the tilt factor (x for xz). This is required
-both when the simulation box is created, e.g. via the
-:doc:`create_box <create_box>` or :doc:`read_data <read_data>` commands,
-as well as when the box shape changes dynamically during a simulation,
-e.g. via the :doc:`fix deform <fix_deform>` or :doc:`fix npt <fix_nh>`
-commands.
-
-For example, if xlo = 2 and xhi = 12, then the x box length is 10 and
-the xy tilt factor must be between -5 and 5. Similarly, both xz and
-yz must be between -(xhi-xlo)/2 and +(yhi-ylo)/2. Note that this is
-not a limitation, since if the maximum tilt factor is 5 (as in this
-example), then configurations with tilt = ..., -15, -5, 5, 15, 25,
-... are geometrically all equivalent. If the box tilt exceeds this
-limit during a dynamics run (e.g. via the :doc:`fix deform <fix_deform>`
-command), then the box is "flipped" to an equivalent shape with a tilt
-factor within the bounds, so the run can continue. See the :doc:`fix deform <fix_deform>` doc page for further details.
-
-One exception to this rule is if the 1st dimension in the tilt
-factor (x for xy) is non-periodic. In that case, the limits on the
-tilt factor are not enforced, since flipping the box in that dimension
-does not change the atom positions due to non-periodicity. In this
-mode, if you tilt the system to extreme angles, the simulation will
-simply become inefficient, due to the highly skewed simulation box.
-
-The limitation on not creating a simulation box with a tilt factor
-skewing the box more than half the distance of the parallel box length
-can be overridden via the :doc:`box <box>` command. Setting the *tilt*
-keyword to *large* allows any tilt factors to be specified.
-
-Box flips that may occur using the :doc:`fix deform <fix_deform>` or
-:doc:`fix npt <fix_nh>` commands can be turned off using the *flip no*
-option with either of the commands.
-
-Note that if a simulation box has a large tilt factor, LAMMPS will run
-less efficiently, due to the large volume of communication needed to
-acquire ghost atoms around a processor's irregular-shaped sub-domain.
-For extreme values of tilt, LAMMPS may also lose atoms and generate an
-error.
-
-Triclinic crystal structures are often defined using three lattice
-constants *a*\ , *b*\ , and *c*\ , and three angles *alpha*\ , *beta* and
-*gamma*\ . Note that in this nomenclature, the a, b, and c lattice
-constants are the scalar lengths of the edge vectors **a**\ , **b**\ , and **c**
-defined above. The relationship between these 6 quantities
-(a,b,c,alpha,beta,gamma) and the LAMMPS box sizes (lx,ly,lz) =
-(xhi-xlo,yhi-ylo,zhi-zlo) and tilt factors (xy,xz,yz) is as follows:
-
-.. image:: Eqs/box.jpg
- :align: center
-
-The inverse relationship can be written as follows:
-
-.. image:: Eqs/box_inverse.jpg
- :align: center
-
-The values of *a*\ , *b*\ , *c* , *alpha*\ , *beta* , and *gamma* can be printed
-out or accessed by computes using the
-:doc:`thermo_style custom <thermo_style>` keywords
-*cella*\ , *cellb*\ , *cellc*\ , *cellalpha*\ , *cellbeta*\ , *cellgamma*\ ,
-respectively.
-
-As discussed on the :doc:`dump <dump>` command doc page, when the BOX
-BOUNDS for a snapshot is written to a dump file for a triclinic box,
-an orthogonal bounding box which encloses the triclinic simulation box
-is output, along with the 3 tilt factors (xy, xz, yz) of the triclinic
-box, formatted as follows:
-
-.. parsed-literal::
-
- ITEM: BOX BOUNDS xy xz yz
- xlo_bound xhi_bound xy
- ylo_bound yhi_bound xz
- zlo_bound zhi_bound yz
-
-This bounding box is convenient for many visualization programs and is
-calculated from the 9 triclinic box parameters
-(xlo,xhi,ylo,yhi,zlo,zhi,xy,xz,yz) as follows:
-
-.. parsed-literal::
-
- xlo_bound = xlo + MIN(0.0,xy,xz,xy+xz)
- xhi_bound = xhi + MAX(0.0,xy,xz,xy+xz)
- ylo_bound = ylo + MIN(0.0,yz)
- yhi_bound = yhi + MAX(0.0,yz)
- zlo_bound = zlo
- zhi_bound = zhi
-
-These formulas can be inverted if you need to convert the bounding box
-back into the triclinic box parameters, e.g. xlo = xlo_bound -
-MIN(0.0,xy,xz,xy+xz).
-
-One use of triclinic simulation boxes is to model solid-state crystals
-with triclinic symmetry. The :doc:`lattice <lattice>` command can be
-used with non-orthogonal basis vectors to define a lattice that will
-tile a triclinic simulation box via the
-:doc:`create_atoms <create_atoms>` command.
-
-A second use is to run Parinello-Rahman dyanamics via the :doc:`fix npt <fix_nh>` command, which will adjust the xy, xz, yz tilt
-factors to compensate for off-diagonal components of the pressure
-tensor. The analalog for an :doc:`energy minimization <minimize>` is
-the :doc:`fix box/relax <fix_box_relax>` command.
-
-A third use is to shear a bulk solid to study the response of the
-material. The :doc:`fix deform <fix_deform>` command can be used for
-this purpose. It allows dynamic control of the xy, xz, yz tilt
-factors as a simulation runs. This is discussed in the next section
-on non-equilibrium MD (NEMD) simulations.
-
-
-----------
-
-
-.. _howto_13:
-
-NEMD simulations
-----------------
-
-Non-equilibrium molecular dynamics or NEMD simulations are typically
-used to measure a fluid's rheological properties such as viscosity.
-In LAMMPS, such simulations can be performed by first setting up a
-non-orthogonal simulation box (see the preceding Howto section).
-
-A shear strain can be applied to the simulation box at a desired
-strain rate by using the :doc:`fix deform <fix_deform>` command. The
-:doc:`fix nvt/sllod <fix_nvt_sllod>` command can be used to thermostat
-the sheared fluid and integrate the SLLOD equations of motion for the
-system. Fix nvt/sllod uses :doc:`compute temp/deform <compute_temp_deform>` to compute a thermal temperature
-by subtracting out the streaming velocity of the shearing atoms. The
-velocity profile or other properties of the fluid can be monitored via
-the :doc:`fix ave/spatial <fix_ave_spatial>` command.
-
-As discussed in the previous section on non-orthogonal simulation
-boxes, the amount of tilt or skew that can be applied is limited by
-LAMMPS for computational efficiency to be 1/2 of the parallel box
-length. However, :doc:`fix deform <fix_deform>` can continuously strain
-a box by an arbitrary amount. As discussed in the :doc:`fix deform <fix_deform>` command, when the tilt value reaches a limit,
-the box is flipped to the opposite limit which is an equivalent tiling
-of periodic space. The strain rate can then continue to change as
-before. In a long NEMD simulation these box re-shaping events may
-occur many times.
-
-In a NEMD simulation, the "remap" option of :doc:`fix deform <fix_deform>` should be set to "remap v", since that is what
-:doc:`fix nvt/sllod <fix_nvt_sllod>` assumes to generate a velocity
-profile consistent with the applied shear strain rate.
-
-An alternative method for calculating viscosities is provided via the
-:doc:`fix viscosity <fix_viscosity>` command.
-
-
-----------
-
-
-.. _howto_14:
-
-Finite-size spherical and aspherical particles
-----------------------------------------------
-
-Typical MD models treat atoms or particles as point masses. Sometimes
-it is desirable to have a model with finite-size particles such as
-spheroids or ellipsoids or generalized aspherical bodies. The
-difference is that such particles have a moment of inertia, rotational
-energy, and angular momentum. Rotation is induced by torque coming
-from interactions with other particles.
-
-LAMMPS has several options for running simulations with these kinds of
-particles. The following aspects are discussed in turn:
-
-* atom styles
-* pair potentials
-* time integration
-* computes, thermodynamics, and dump output
-* rigid bodies composed of finite-size particles
-
-Example input scripts for these kinds of models are in the body,
-colloid, dipole, ellipse, line, peri, pour, and tri directories of the
-:doc:`examples directory <Section_example>` in the LAMMPS distribution.
-
-Atom styles
-^^^^^^^^^^^
-
-There are several :doc:`atom styles <atom_style>` that allow for
-definition of finite-size particles: sphere, dipole, ellipsoid, line,
-tri, peri, and body.
-
-The sphere style defines particles that are spheriods and each
-particle can have a unique diameter and mass (or density). These
-particles store an angular velocity (omega) and can be acted upon by
-torque. The "set" command can be used to modify the diameter and mass
-of individual particles, after then are created.
-
-The dipole style does not actually define finite-size particles, but
-is often used in conjunction with spherical particles, via a command
-like
-
-.. parsed-literal::
-
- atom_style hybrid sphere dipole
-
-This is because when dipoles interact with each other, they induce
-torques, and a particle must be finite-size (i.e. have a moment of
-inertia) in order to respond and rotate. See the :doc:`atom_style dipole <atom_style>` command for details. The "set" command can be
-used to modify the orientation and length of the dipole moment of
-individual particles, after then are created.
-
-The ellipsoid style defines particles that are ellipsoids and thus can
-be aspherical. Each particle has a shape, specified by 3 diameters,
-and mass (or density). These particles store an angular momentum and
-their orientation (quaternion), and can be acted upon by torque. They
-do not store an angular velocity (omega), which can be in a different
-direction than angular momentum, rather they compute it as needed.
-The "set" command can be used to modify the diameter, orientation, and
-mass of individual particles, after then are created. It also has a
-brief explanation of what quaternions are.
-
-The line style defines line segment particles with two end points and
-a mass (or density). They can be used in 2d simulations, and they can
-be joined together to form rigid bodies which represent arbitrary
-polygons.
-
-The tri style defines triangular particles with three corner points
-and a mass (or density). They can be used in 3d simulations, and they
-can be joined together to form rigid bodies which represent arbitrary
-particles with a triangulated surface.
-
-The peri style is used with :doc:`Peridynamic models <pair_peri>` and
-defines particles as having a volume, that is used internally in the
-:doc:`pair_style peri <pair_peri>` potentials.
-
-The body style allows for definition of particles which can represent
-complex entities, such as surface meshes of discrete points,
-collections of sub-particles, deformable objects, etc. The body style
-is discussed in more detail on the :doc:`body <body>` doc page.
-
-Note that if one of these atom styles is used (or multiple styles via
-the :doc:`atom_style hybrid <atom_style>` command), not all particles in
-the system are required to be finite-size or aspherical.
-
-For example, in the ellipsoid style, if the 3 shape parameters are set
-to the same value, the particle will be a sphere rather than an
-ellipsoid. If the 3 shape parameters are all set to 0.0 or if the
-diameter is set to 0.0, it will be a point particle. In the line or
-tri style, if the lineflag or triflag is specified as 0, then it
-will be a point particle.
-
-Some of the pair styles used to compute pairwise interactions between
-finite-size particles also compute the correct interaction with point
-particles as well, e.g. the interaction between a point particle and a
-finite-size particle or between two point particles. If necessary,
-:doc:`pair_style hybrid <pair_hybrid>` can be used to insure the correct
-interactions are computed for the appropriate style of interactions.
-Likewise, using groups to partition particles (ellipsoids versus
-spheres versus point particles) will allow you to use the appropriate
-time integrators and temperature computations for each class of
-particles. See the doc pages for various commands for details.
-
-Also note that for :doc:`2d simulations <dimension>`, atom styles sphere
-and ellipsoid still use 3d particles, rather than as circular disks or
-ellipses. This means they have the same moment of inertia as the 3d
-object. When temperature is computed, the correct degrees of freedom
-are used for rotation in a 2d versus 3d system.
-
-Pair potentials
-^^^^^^^^^^^^^^^
-
-When a system with finite-size particles is defined, the particles
-will only rotate and experience torque if the force field computes
-such interactions. These are the various :doc:`pair styles <pair_style>` that generate torque:
-
-* :doc:`pair_style gran/history <pair_gran>`
-* :doc:`pair_style gran/hertzian <pair_gran>`
-* :doc:`pair_style gran/no_history <pair_gran>`
-* :doc:`pair_style dipole/cut <pair_dipole>`
-* :doc:`pair_style gayberne <pair_gayberne>`
-* :doc:`pair_style resquared <pair_resquared>`
-* :doc:`pair_style brownian <pair_brownian>`
-* :doc:`pair_style lubricate <pair_lubricate>`
-* :doc:`pair_style line/lj <pair_line_lj>`
-* :doc:`pair_style tri/lj <pair_tri_lj>`
-* :doc:`pair_style body <pair_body>`
-
-The granular pair styles are used with spherical particles. The
-dipole pair style is used with the dipole atom style, which could be
-applied to spherical or ellipsoidal particles. The GayBerne and
-REsquared potentials require ellipsoidal particles, though they will
-also work if the 3 shape parameters are the same (a sphere). The
-Brownian and lubrication potentials are used with spherical particles.
-The line, tri, and body potentials are used with line segment,
-triangular, and body particles respectively.
-
-Time integration
-^^^^^^^^^^^^^^^^
-
-There are several fixes that perform time integration on finite-size
-spherical particles, meaning the integrators update the rotational
-orientation and angular velocity or angular momentum of the particles:
-
-* :doc:`fix nve/sphere <fix_nve_sphere>`
-* :doc:`fix nvt/sphere <fix_nvt_sphere>`
-* :doc:`fix npt/sphere <fix_npt_sphere>`
-
-Likewise, there are 3 fixes that perform time integration on
-ellipsoidal particles:
-
-* :doc:`fix nve/asphere <fix_nve_asphere>`
-* :doc:`fix nvt/asphere <fix_nvt_asphere>`
-* :doc:`fix npt/asphere <fix_npt_asphere>`
-
-The advantage of these fixes is that those which thermostat the
-particles include the rotational degrees of freedom in the temperature
-calculation and thermostatting. The `fix langevin <fix_langevin>`_
-command can also be used with its *omgea* or *angmom* options to
-thermostat the rotational degrees of freedom for spherical or
-ellipsoidal particles. Other thermostatting fixes only operate on the
-translational kinetic energy of finite-size particles.
-
-These fixes perform constant NVE time integration on line segment,
-triangular, and body particles:
-
-* :doc:`fix nve/line <fix_nve_line>`
-* :doc:`fix nve/tri <fix_nve_tri>`
-* :doc:`fix nve/body <fix_nve_body>`
-
-Note that for mixtures of point and finite-size particles, these
-integration fixes can only be used with :doc:`groups <group>` which
-contain finite-size particles.
-
-Computes, thermodynamics, and dump output
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-There are several computes that calculate the temperature or
-rotational energy of spherical or ellipsoidal particles:
-
-* :doc:`compute temp/sphere <compute_temp_sphere>`
-* :doc:`compute temp/asphere <compute_temp_asphere>`
-* :doc:`compute erotate/sphere <compute_erotate_sphere>`
-* :doc:`compute erotate/asphere <compute_erotate_asphere>`
-
-These include rotational degrees of freedom in their computation. If
-you wish the thermodynamic output of temperature or pressure to use
-one of these computes (e.g. for a system entirely composed of
-finite-size particles), then the compute can be defined and the
-:doc:`thermo_modify <thermo_modify>` command used. Note that by default
-thermodynamic quantities will be calculated with a temperature that
-only includes translational degrees of freedom. See the
-:doc:`thermo_style <thermo_style>` command for details.
-
-These commands can be used to output various attributes of finite-size
-particles:
-
-* :doc:`dump custom <dump>`
-* :doc:`compute property/atom <compute_property_atom>`
-* :doc:`dump local <dump>`
-* :doc:`compute body/local <compute_body_local>`
-
-Attributes include the dipole moment, the angular velocity, the
-angular momentum, the quaternion, the torque, the end-point and
-corner-point coordinates (for line and tri particles), and
-sub-particle attributes of body particles.
-
-Rigid bodies composed of finite-size particles
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The :doc:`fix rigid <fix_rigid>` command treats a collection of
-particles as a rigid body, computes its inertia tensor, sums the total
-force and torque on the rigid body each timestep due to forces on its
-constituent particles, and integrates the motion of the rigid body.
-
-If any of the constituent particles of a rigid body are finite-size
-particles (spheres or ellipsoids or line segments or triangles), then
-their contribution to the inertia tensor of the body is different than
-if they were point particles. This means the rotational dynamics of
-the rigid body will be different. Thus a model of a dimer is
-different if the dimer consists of two point masses versus two
-spheroids, even if the two particles have the same mass. Finite-size
-particles that experience torque due to their interaction with other
-particles will also impart that torque to a rigid body they are part
-of.
-
-See the "fix rigid" command for example of complex rigid-body models
-it is possible to define in LAMMPS.
-
-Note that the :doc:`fix shake <fix_shake>` command can also be used to
-treat 2, 3, or 4 particles as a rigid body, but it always assumes the
-particles are point masses.
-
-Also note that body particles cannot be modeled with the :doc:`fix rigid <fix_rigid>` command. Body particles are treated by LAMMPS
-as single particles, though they can store internal state, such as a
-list of sub-particles. Individual body partices are typically treated
-as rigid bodies, and their motion integrated with a command like :doc:`fix nve/body <fix_nve_body>`. Interactions between pairs of body
-particles are computed via a command like :doc:`pair_style body <pair_body>`.
-
-
-----------
-
-
-.. _howto_15:
-
-Output from LAMMPS (thermo, dumps, computes, fixes, variables)
---------------------------------------------------------------
-
-There are four basic kinds of LAMMPS output:
-
-* :doc:`Thermodynamic output <thermo_style>`, which is a list
- of quantities printed every few timesteps to the screen and logfile.
-* :doc:`Dump files <dump>`, which contain snapshots of atoms and various
- per-atom values and are written at a specified frequency.
-* Certain fixes can output user-specified quantities to files: :doc:`fix ave/time <fix_ave_time>` for time averaging, :doc:`fix ave/chunk <fix_ave_chunk>` for spatial or other averaging, and :doc:`fix print <fix_print>` for single-line output of
- :doc:`variables <variable>`. Fix print can also output to the
- screen.
-* :doc:`Restart files <restart>`.
-A simulation prints one set of thermodynamic output and (optionally)
-restart files. It can generate any number of dump files and fix
-output files, depending on what :doc:`dump <dump>` and :doc:`fix <fix>`
-commands you specify.
-
-As discussed below, LAMMPS gives you a variety of ways to determine
-what quantities are computed and printed when the thermodynamics,
-dump, or fix commands listed above perform output. Throughout this
-discussion, note that users can also :doc:`add their own computes and fixes to LAMMPS <Section_modify>` which can then generate values that can
-then be output with these commands.
-
-The following sub-sections discuss different LAMMPS command related
-to output and the kind of data they operate on and produce:
-
-* :ref:`Global/per-atom/local data <global>`
-* :ref:`Scalar/vector/array data <scalar>`
-* :ref:`Thermodynamic output <thermo>`
-* :ref:`Dump file output <dump>`
-* :ref:`Fixes that write output files <fixoutput>`
-* :ref:`Computes that process output quantities <computeoutput>`
-* :ref:`Fixes that process output quantities <fixprocoutput>`
-* :ref:`Computes that generate values to output <compute>`
-* :ref:`Fixes that generate values to output <fix>`
-* :ref:`Variables that generate values to output <variable>`
-* :ref:`Summary table of output options and data flow between commands <table>`
-
-.. _global:
-
-Global/per-atom/local data
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Various output-related commands work with three different styles of
-data: global, per-atom, or local. A global datum is one or more
-system-wide values, e.g. the temperature of the system. A per-atom
-datum is one or more values per atom, e.g. the kinetic energy of each
-atom. Local datums are calculated by each processor based on the
-atoms it owns, but there may be zero or more per atom, e.g. a list of
-bond distances.
-
-.. _scalar:
-
-Scalar/vector/array data
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Global, per-atom, and local datums can each come in three kinds: a
-single scalar value, a vector of values, or a 2d array of values. The
-doc page for a "compute" or "fix" or "variable" that generates data
-will specify both the style and kind of data it produces, e.g. a
-per-atom vector.
-
-When a quantity is accessed, as in many of the output commands
-discussed below, it can be referenced via the following bracket
-notation, where ID in this case is the ID of a compute. The leading
-"c_" would be replaced by "f_" for a fix, or "v_" for a variable:
-
-+------------+--------------------------------------------+
-| c_ID | entire scalar, vector, or array |
-+------------+--------------------------------------------+
-| c_ID[I] | one element of vector, one column of array |
-+------------+--------------------------------------------+
-| c_ID[I][J] | one element of array |
-+------------+--------------------------------------------+
-
-In other words, using one bracket reduces the dimension of the data
-once (vector -> scalar, array -> vector). Using two brackets reduces
-the dimension twice (array -> scalar). Thus a command that uses
-scalar values as input can typically also process elements of a vector
-or array.
-
-.. _thermo:
-
-Thermodynamic output
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The frequency and format of thermodynamic output is set by the
-:doc:`thermo <thermo>`, :doc:`thermo_style <thermo_style>`, and
-:doc:`thermo_modify <thermo_modify>` commands. The
-:doc:`thermo_style <thermo_style>` command also specifies what values
-are calculated and written out. Pre-defined keywords can be specified
-(e.g. press, etotal, etc). Three additional kinds of keywords can
-also be specified (c_ID, f_ID, v_name), where a :doc:`compute <compute>`
-or :doc:`fix <fix>` or :doc:`variable <variable>` provides the value to be
-output. In each case, the compute, fix, or variable must generate
-global values for input to the :doc:`thermo_style custom <dump>`
-command.
-
-Note that thermodynamic output values can be "extensive" or
-"intensive". The former scale with the number of atoms in the system
-(e.g. total energy), the latter do not (e.g. temperature). The
-setting for :doc:`thermo_modify norm <thermo_modify>` determines whether
-extensive quantities are normalized or not. Computes and fixes
-produce either extensive or intensive values; see their individual doc
-pages for details. :doc:`Equal-style variables <variable>` produce only
-intensive values; you can include a division by "natoms" in the
-formula if desired, to make an extensive calculation produce an
-intensive result.
-
-.. _dump:
-
-Dump file output
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Dump file output is specified by the :doc:`dump <dump>` and
-:doc:`dump_modify <dump_modify>` commands. There are several
-pre-defined formats (dump atom, dump xtc, etc).
-
-There is also a :doc:`dump custom <dump>` format where the user
-specifies what values are output with each atom. Pre-defined atom
-attributes can be specified (id, x, fx, etc). Three additional kinds
-of keywords can also be specified (c_ID, f_ID, v_name), where a
-:doc:`compute <compute>` or :doc:`fix <fix>` or :doc:`variable <variable>`
-provides the values to be output. In each case, the compute, fix, or
-variable must generate per-atom values for input to the :doc:`dump custom <dump>` command.
-
-There is also a :doc:`dump local <dump>` format where the user specifies
-what local values to output. A pre-defined index keyword can be
-specified to enumuerate the local values. Two additional kinds of
-keywords can also be specified (c_ID, f_ID), where a
-:doc:`compute <compute>` or :doc:`fix <fix>` or :doc:`variable <variable>`
-provides the values to be output. In each case, the compute or fix
-must generate local values for input to the :doc:`dump local <dump>`
-command.
-
-.. _fixoutput:
-
-Fixes that write output files
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Several fixes take various quantities as input and can write output
-files: :doc:`fix ave/time <fix_ave_time>`, :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/histo <fix_ave_histo>`,
-:doc:`fix ave/correlate <fix_ave_correlate>`, and :doc:`fix print <fix_print>`.
-
-The :doc:`fix ave/time <fix_ave_time>` command enables direct output to
-a file and/or time-averaging of global scalars or vectors. The user
-specifies one or more quantities as input. These can be global
-:doc:`compute <compute>` values, global :doc:`fix <fix>` values, or
-:doc:`variables <variable>` of any style except the atom style which
-produces per-atom values. Since a variable can refer to keywords used
-by the :doc:`thermo_style custom <thermo_style>` command (like temp or
-press) and individual per-atom values, a wide variety of quantities
-can be time averaged and/or output in this way. If the inputs are one
-or more scalar values, then the fix generate a global scalar or vector
-of output. If the inputs are one or more vector values, then the fix
-generates a global vector or array of output. The time-averaged
-output of this fix can also be used as input to other output commands.
-
-The :doc:`fix ave/chunk <fix_ave_chunk>` command enables direct output
-to a file of chunk-averaged per-atom quantities like those output in
-dump files. Chunks can represent spatial bins or other collections of
-atoms, e.g. individual molecules. The per-atom quantities can be atom
-density (mass or number) or atom attributes such as position,
-velocity, force. They can also be per-atom quantities calculated by a
-:doc:`compute <compute>`, by a :doc:`fix <fix>`, or by an atom-style
-:doc:`variable <variable>`. The chunk-averaged output of this fix can
-also be used as input to other output commands.
-
-The :doc:`fix ave/histo <fix_ave_histo>` command enables direct output
-to a file of histogrammed quantities, which can be global or per-atom
-or local quantities. The histogram output of this fix can also be
-used as input to other output commands.
-
-The :doc:`fix ave/correlate <fix_ave_correlate>` command enables direct
-output to a file of time-correlated quantities, which can be global
-values. The correlation matrix output of this fix can also be used as
-input to other output commands.
-
-The :doc:`fix print <fix_print>` command can generate a line of output
-written to the screen and log file or to a separate file, periodically
-during a running simulation. The line can contain one or more
-:doc:`variable <variable>` values for any style variable except the
-vector or atom styles). As explained above, variables themselves can
-contain references to global values generated by :doc:`thermodynamic keywords <thermo_style>`, :doc:`computes <compute>`,
-:doc:`fixes <fix>`, or other :doc:`variables <variable>`, or to per-atom
-values for a specific atom. Thus the :doc:`fix print <fix_print>`
-command is a means to output a wide variety of quantities separate
-from normal thermodynamic or dump file output.
-
-.. _computeoutput:
-
-Computes that process output quantities
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The :doc:`compute reduce <compute_reduce>` and :doc:`compute reduce/region <compute_reduce>` commands take one or more per-atom
-or local vector quantities as inputs and "reduce" them (sum, min, max,
-ave) to scalar quantities. These are produced as output values which
-can be used as input to other output commands.
-
-The :doc:`compute slice <compute_slice>` command take one or more global
-vector or array quantities as inputs and extracts a subset of their
-values to create a new vector or array. These are produced as output
-values which can be used as input to other output commands.
-
-The :doc:`compute property/atom <compute_property_atom>` command takes a
-list of one or more pre-defined atom attributes (id, x, fx, etc) and
-stores the values in a per-atom vector or array. These are produced
-as output values which can be used as input to other output commands.
-The list of atom attributes is the same as for the :doc:`dump custom <dump>` command.
-
-The :doc:`compute property/local <compute_property_local>` command takes
-a list of one or more pre-defined local attributes (bond info, angle
-info, etc) and stores the values in a local vector or array. These
-are produced as output values which can be used as input to other
-output commands.
-
-.. _fixprocoutput:
-
-Fixes that process output quantities
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The :doc:`fix vector <fix_vector>` command can create global vectors as
-output from global scalars as input, accumulating them one element at
-a time.
-
-The :doc:`fix ave/atom <fix_ave_atom>` command performs time-averaging
-of per-atom vectors. The per-atom quantities can be atom attributes
-such as position, velocity, force. They can also be per-atom
-quantities calculated by a :doc:`compute <compute>`, by a
-:doc:`fix <fix>`, or by an atom-style :doc:`variable <variable>`. The
-time-averaged per-atom output of this fix can be used as input to
-other output commands.
-
-The :doc:`fix store/state <fix_store_state>` command can archive one or
-more per-atom attributes at a particular time, so that the old values
-can be used in a future calculation or output. The list of atom
-attributes is the same as for the :doc:`dump custom <dump>` command,
-including per-atom quantities calculated by a :doc:`compute <compute>`,
-by a :doc:`fix <fix>`, or by an atom-style :doc:`variable <variable>`.
-The output of this fix can be used as input to other output commands.
-
-.. _compute:
-
-Computes that generate values to output
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Every :doc:`compute <compute>` in LAMMPS produces either global or
-per-atom or local values. The values can be scalars or vectors or
-arrays of data. These values can be output using the other commands
-described in this section. The doc page for each compute command
-describes what it produces. Computes that produce per-atom or local
-values have the word "atom" or "local" in their style name. Computes
-without the word "atom" or "local" produce global values.
-
-.. _fix:
-
-Fixes that generate values to output
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Some :doc:`fixes <fix>` in LAMMPS produces either global or per-atom or
-local values which can be accessed by other commands. The values can
-be scalars or vectors or arrays of data. These values can be output
-using the other commands described in this section. The doc page for
-each fix command tells whether it produces any output quantities and
-describes them.
-
-.. _variable:
-
-Variables that generate values to output
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-:doc:`Variables <variable>` defined in an input script can store one or
-more strings. But equal-style, vector-style, and atom-style or
-atomfile-style variables generate a global scalar value, global vector
-or values, or a per-atom vector, resepctively, when accessed. The
-formulas used to define these variables can contain references to the
-thermodynamic keywords and to global and per-atom data generated by
-computes, fixes, and other variables. The values generated by
-variables can be used as input to and thus output by the other
-commands described in this section.
-
-.. _table:
-
-Summary table of output options and data flow between commands
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-This table summarizes the various commands that can be used for
-generating output from LAMMPS. Each command produces output data of
-some kind and/or writes data to a file. Most of the commands can take
-data from other commands as input. Thus you can link many of these
-commands together in pipeline form, where data produced by one command
-is used as input to another command and eventually written to the
-screen or to a file. Note that to hook two commands together the
-output and input data types must match, e.g. global/per-atom/local
-data and scalar/vector/array data.
-
-Also note that, as described above, when a command takes a scalar as
-input, that could be an element of a vector or array. Likewise a
-vector input could be a column of an array.
-
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| Command | Input | Output |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`thermo_style custom <thermo_style>` | global scalars | screen, log file |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`dump custom <dump>` | per-atom vectors | dump file |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`dump local <dump>` | local vectors | dump file |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`fix print <fix_print>` | global scalar from variable | screen, file |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`print <print>` | global scalar from variable | screen |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`computes <compute>` | N/A | global/per-atom/local scalar/vector/array |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`fixes <fix>` | N/A | global/per-atom/local scalar/vector/array |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`variables <variable>` | global scalars and vectors, per-atom vectors | global scalar and vector, per-atom vector |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`compute reduce <compute_reduce>` | per-atom/local vectors | global scalar/vector |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`compute slice <compute_slice>` | global vectors/arrays | global vector/array |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`compute property/atom <compute_property_atom>` | per-atom vectors | per-atom vector/array |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`compute property/local <compute_property_local>` | local vectors | local vector/array |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`fix vector <fix_vector>` | global scalars | global vector |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`fix ave/atom <fix_ave_atom>` | per-atom vectors | per-atom vector/array |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`fix ave/time <fix_ave_time>` | global scalars/vectors | global scalar/vector/array, file |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`fix ave/chunk <fix_ave_chunk>` | per-atom vectors | global array, file |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`fix ave/histo <fix_ave_histo>` | global/per-atom/local scalars and vectors | global array, file |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`fix ave/correlate <fix_ave_correlate>` | global scalars | global array, file |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-| :doc:`fix store/state <fix_store_state>` | per-atom vectors | per-atom vector/array |
-+--------------------------------------------------------+----------------------------------------------+-------------------------------------------+
-
-
-----------
-
-
-.. _howto_16:
-
-Thermostatting, barostatting, and computing temperature
--------------------------------------------------------
-
-Thermostatting means controlling the temperature of particles in an MD
-simulation. Barostatting means controlling the pressure. Since the
-pressure includes a kinetic component due to particle velocities, both
-these operations require calculation of the temperature. Typically a
-target temperature (T) and/or pressure (P) is specified by the user,
-and the thermostat or barostat attempts to equilibrate the system to
-the requested T and/or P.
-
-Temperature is computed as kinetic energy divided by some number of
-degrees of freedom (and the Boltzmann constant). Since kinetic energy
-is a function of particle velocity, there is often a need to
-distinguish between a particle's advection velocity (due to some
-aggregate motiion of particles) and its thermal velocity. The sum of
-the two is the particle's total velocity, but the latter is often what
-is wanted to compute a temperature.
-
-LAMMPS has several options for computing temperatures, any of which
-can be used in thermostatting and barostatting. These :doc:`compute commands <compute>` calculate temperature, and the :doc:`compute pressure <compute_pressure>` command calculates pressure.
-
-* :doc:`compute temp <compute_temp>`
-* :doc:`compute temp/sphere <compute_temp_sphere>`
-* :doc:`compute temp/asphere <compute_temp_asphere>`
-* :doc:`compute temp/com <compute_temp_com>`
-* :doc:`compute temp/deform <compute_temp_deform>`
-* :doc:`compute temp/partial <compute_temp_partial>`
-* :doc:`compute temp/profile <compute_temp_profile>`
-* :doc:`compute temp/ramp <compute_temp_ramp>`
-* :doc:`compute temp/region <compute_temp_region>`
-
-All but the first 3 calculate velocity biases directly (e.g. advection
-velocities) that are removed when computing the thermal temperature.
-:doc:`Compute temp/sphere <compute_temp_sphere>` and :doc:`compute temp/asphere <compute_temp_asphere>` compute kinetic energy for
-finite-size particles that includes rotational degrees of freedom.
-They both allow for velocity biases indirectly, via an optional extra
-argument, another temperature compute that subtracts a velocity bias.
-This allows the translational velocity of spherical or aspherical
-particles to be adjusted in prescribed ways.
-
-Thermostatting in LAMMPS is performed by :doc:`fixes <fix>`, or in one
-case by a pair style. Several thermostatting fixes are available:
-Nose-Hoover (nvt), Berendsen, CSVR, Langevin, and direct rescaling
-(temp/rescale). Dissipative particle dynamics (DPD) thermostatting
-can be invoked via the *dpd/tstat* pair style:
-
-* :doc:`fix nvt <fix_nh>`
-* :doc:`fix nvt/sphere <fix_nvt_sphere>`
-* :doc:`fix nvt/asphere <fix_nvt_asphere>`
-* :doc:`fix nvt/sllod <fix_nvt_sllod>`
-* :doc:`fix temp/berendsen <fix_temp_berendsen>`
-* :doc:`fix temp/csvr <fix_temp_csvr>`
-* :doc:`fix langevin <fix_langevin>`
-* :doc:`fix temp/rescale <fix_temp_rescale>`
-* :doc:`pair_style dpd/tstat <pair_dpd>`
-
-:doc:`Fix nvt <fix_nh>` only thermostats the translational velocity of
-particles. :doc:`Fix nvt/sllod <fix_nvt_sllod>` also does this, except
-that it subtracts out a velocity bias due to a deforming box and
-integrates the SLLOD equations of motion. See the :ref:`NEMD simulations <howto_13>` section of this page for further details. :doc:`Fix nvt/sphere <fix_nvt_sphere>` and :doc:`fix nvt/asphere <fix_nvt_asphere>` thermostat not only translation
-velocities but also rotational velocities for spherical and aspherical
-particles.
-
-DPD thermostatting alters pairwise interactions in a manner analagous
-to the per-particle thermostatting of :doc:`fix langevin <fix_langevin>`.
-
-Any of the thermostatting fixes can use temperature computes that
-remove bias which has two effects. First, the current calculated
-temperature, which is compared to the requested target temperature, is
-caluclated with the velocity bias removed. Second, the thermostat
-adjusts only the thermal temperature component of the particle's
-velocities, which are the velocities with the bias removed. The
-removed bias is then added back to the adjusted velocities. See the
-doc pages for the individual fixes and for the
-:doc:`fix_modify <fix_modify>` command for instructions on how to assign
-a temperature compute to a thermostatting fix. For example, you can
-apply a thermostat to only the x and z components of velocity by using
-it in conjunction with :doc:`compute temp/partial <compute_temp_partial>`. Of you could thermostat only
-the thermal temperature of a streaming flow of particles without
-affecting the streaming velocity, by using :doc:`compute temp/profile <compute_temp_profile>`.
-
-.. note::
-
- Only the nvt fixes perform time integration, meaning they update
- the velocities and positions of particles due to forces and velocities
- respectively. The other thermostat fixes only adjust velocities; they
- do NOT perform time integration updates. Thus they should be used in
- conjunction with a constant NVE integration fix such as these:
-
-* :doc:`fix nve <fix_nve>`
-* :doc:`fix nve/sphere <fix_nve_sphere>`
-* :doc:`fix nve/asphere <fix_nve_asphere>`
-
-Barostatting in LAMMPS is also performed by :doc:`fixes <fix>`. Two
-barosttating methods are currently available: Nose-Hoover (npt and
-nph) and Berendsen:
-
-* :doc:`fix npt <fix_nh>`
-* :doc:`fix npt/sphere <fix_npt_sphere>`
-* :doc:`fix npt/asphere <fix_npt_asphere>`
-* :doc:`fix nph <fix_nh>`
-* :doc:`fix press/berendsen <fix_press_berendsen>`
-
-The :doc:`fix npt <fix_nh>` commands include a Nose-Hoover thermostat
-and barostat. :doc:`Fix nph <fix_nh>` is just a Nose/Hoover barostat;
-it does no thermostatting. Both :doc:`fix nph <fix_nh>` and :doc:`fix press/bernendsen <fix_press_berendsen>` can be used in conjunction
-with any of the thermostatting fixes.
-
-As with the thermostats, :doc:`fix npt <fix_nh>` and :doc:`fix nph <fix_nh>` only use translational motion of the particles in
-computing T and P and performing thermo/barostatting. :doc:`Fix npt/sphere <fix_npt_sphere>` and :doc:`fix npt/asphere <fix_npt_asphere>` thermo/barostat using not only
-translation velocities but also rotational velocities for spherical
-and aspherical particles.
-
-All of the barostatting fixes use the :doc:`compute pressure <compute_pressure>` compute to calculate a current
-pressure. By default, this compute is created with a simple :doc:`compute temp <compute_temp>` (see the last argument of the :doc:`compute pressure <compute_pressure>` command), which is used to calculated
-the kinetic componenet of the pressure. The barostatting fixes can
-also use temperature computes that remove bias for the purpose of
-computing the kinetic componenet which contributes to the current
-pressure. See the doc pages for the individual fixes and for the
-:doc:`fix_modify <fix_modify>` command for instructions on how to assign
-a temperature or pressure compute to a barostatting fix.
-
-.. note::
-
- As with the thermostats, the Nose/Hoover methods (:doc:`fix npt <fix_nh>` and :doc:`fix nph <fix_nh>`) perform time integration.
- :doc:`Fix press/berendsen <fix_press_berendsen>` does NOT, so it should
- be used with one of the constant NVE fixes or with one of the NVT
- fixes.
-
-Finally, thermodynamic output, which can be setup via the
-:doc:`thermo_style <thermo_style>` command, often includes temperature
-and pressure values. As explained on the doc page for the
-:doc:`thermo_style <thermo_style>` command, the default T and P are
-setup by the thermo command itself. They are NOT the ones associated
-with any thermostatting or barostatting fix you have defined or with
-any compute that calculates a temperature or pressure. Thus if you
-want to view these values of T and P, you need to specify them
-explicitly via a :doc:`thermo_style custom <thermo_style>` command. Or
-you can use the :doc:`thermo_modify <thermo_modify>` command to
-re-define what temperature or pressure compute is used for default
-thermodynamic output.
-
-
-----------
-
-
-.. _howto_17:
-
-Walls
------
-
-Walls in an MD simulation are typically used to bound particle motion,
-i.e. to serve as a boundary condition.
-
-Walls in LAMMPS can be of rough (made of particles) or idealized
-surfaces. Ideal walls can be smooth, generating forces only in the
-normal direction, or frictional, generating forces also in the
-tangential direction.
-
-Rough walls, built of particles, can be created in various ways. The
-particles themselves can be generated like any other particle, via the
-:doc:`lattice <lattice>` and :doc:`create_atoms <create_atoms>` commands,
-or read in via the :doc:`read_data <read_data>` command.
-
-Their motion can be constrained by many different commands, so that
-they do not move at all, move together as a group at constant velocity
-or in response to a net force acting on them, move in a prescribed
-fashion (e.g. rotate around a point), etc. Note that if a time
-integration fix like :doc:`fix nve <fix_nve>` or :doc:`fix nvt <fix_nh>`
-is not used with the group that contains wall particles, their
-positions and velocities will not be updated.
-
-* :doc:`fix aveforce <fix_aveforce>` - set force on particles to average value, so they move together
-* :doc:`fix setforce <fix_setforce>` - set force on particles to a value, e.g. 0.0
-* :doc:`fix freeze <fix_freeze>` - freeze particles for use as granular walls
-* :doc:`fix nve/noforce <fix_nve_noforce>` - advect particles by their velocity, but without force
-* :doc:`fix move <fix_move>` - prescribe motion of particles by a linear velocity, oscillation, rotation, variable
-
-The :doc:`fix move <fix_move>` command offers the most generality, since
-the motion of individual particles can be specified with
-:doc:`variable <variable>` formula which depends on time and/or the
-particle position.
-
-For rough walls, it may be useful to turn off pairwise interactions
-between wall particles via the :doc:`neigh_modify exclude <neigh_modify>` command.
-
-Rough walls can also be created by specifying frozen particles that do
-not move and do not interact with mobile particles, and then tethering
-other particles to the fixed particles, via a :doc:`bond <bond_style>`.
-The bonded particles do interact with other mobile particles.
-
-Idealized walls can be specified via several fix commands. :doc:`Fix wall/gran <fix_wall_gran>` creates frictional walls for use with
-granular particles; all the other commands create smooth walls.
-
-* :doc:`fix wall/reflect <fix_wall_reflect>` - reflective flat walls
-* :doc:`fix wall/lj93 <fix_wall>` - flat walls, with Lennard-Jones 9/3 potential
-* :doc:`fix wall/lj126 <fix_wall>` - flat walls, with Lennard-Jones 12/6 potential
-* :doc:`fix wall/colloid <fix_wall>` - flat walls, with :doc:`pair_style colloid <pair_colloid>` potential
-* :doc:`fix wall/harmonic <fix_wall>` - flat walls, with repulsive harmonic spring potential
-* :doc:`fix wall/region <fix_wall_region>` - use region surface as wall
-* :doc:`fix wall/gran <fix_wall_gran>` - flat or curved walls with :doc:`pair_style granular <pair_gran>` potential
-
-The *lj93*\ , *lj126*\ , *colloid*\ , and *harmonic* styles all allow the
-flat walls to move with a constant velocity, or oscillate in time.
-The :doc:`fix wall/region <fix_wall_region>` command offers the most
-generality, since the region surface is treated as a wall, and the
-geometry of the region can be a simple primitive volume (e.g. a
-sphere, or cube, or plane), or a complex volume made from the union
-and intersection of primitive volumes. :doc:`Regions <region>` can also
-specify a volume "interior" or "exterior" to the specified primitive
-shape or *union* or *intersection*\ . :doc:`Regions <region>` can also be
-"dynamic" meaning they move with constant velocity, oscillate, or
-rotate.
-
-The only frictional idealized walls currently in LAMMPS are flat or
-curved surfaces specified by the :doc:`fix wall/gran <fix_wall_gran>`
-command. At some point we plan to allow regoin surfaces to be used as
-frictional walls, as well as triangulated surfaces.
-
-
-----------
-
-
-.. _howto_18:
-
-Elastic constants
------------------
-
-Elastic constants characterize the stiffness of a material. The formal
-definition is provided by the linear relation that holds between the
-stress and strain tensors in the limit of infinitesimal deformation.
-In tensor notation, this is expressed as s_ij = C_ijkl * e_kl, where
-the repeated indices imply summation. s_ij are the elements of the
-symmetric stress tensor. e_kl are the elements of the symmetric strain
-tensor. C_ijkl are the elements of the fourth rank tensor of elastic
-constants. In three dimensions, this tensor has 3^4=81 elements. Using
-Voigt notation, the tensor can be written as a 6x6 matrix, where C_ij
-is now the derivative of s_i w.r.t. e_j. Because s_i is itself a
-derivative w.r.t. e_i, it follows that C_ij is also symmetric, with at
-most 7*6/2 = 21 distinct elements.
-
-At zero temperature, it is easy to estimate these derivatives by
-deforming the simulation box in one of the six directions using the
-:doc:`change_box <change_box>` command and measuring the change in the
-stress tensor. A general-purpose script that does this is given in the
-examples/elastic directory described in :doc:`this section <Section_example>`.
-
-Calculating elastic constants at finite temperature is more
-challenging, because it is necessary to run a simulation that perfoms
-time averages of differential properties. One way to do this is to
-measure the change in average stress tensor in an NVT simulations when
-the cell volume undergoes a finite deformation. In order to balance
-the systematic and statistical errors in this method, the magnitude of
-the deformation must be chosen judiciously, and care must be taken to
-fully equilibrate the deformed cell before sampling the stress
-tensor. Another approach is to sample the triclinic cell fluctuations
-that occur in an NPT simulation. This method can also be slow to
-converge and requires careful post-processing :ref:`(Shinoda) <Shinoda>`
-
-
-----------
-
-
-.. _howto_19:
-
-Library interface to LAMMPS
----------------------------
-
-As described in :ref:`Section_start 5 <start_5>`, LAMMPS
-can be built as a library, so that it can be called by another code,
-used in a :ref:`coupled manner <howto_10>` with other
-codes, or driven through a :doc:`Python interface <Section_python>`.
-
-All of these methodologies use a C-style interface to LAMMPS that is
-provided in the files src/library.cpp and src/library.h. The
-functions therein have a C-style argument list, but contain C++ code
-you could write yourself in a C++ application that was invoking LAMMPS
-directly. The C++ code in the functions illustrates how to invoke
-internal LAMMPS operations. Note that LAMMPS classes are defined
-within a LAMMPS namespace (LAMMPS_NS) if you use them from another C++
-application.
-
-Library.cpp contains these 5 basic functions:
-
-.. parsed-literal::
-
- void lammps_open(int, char **, MPI_Comm, void **)
- void lammps_close(void *)
- int lammps_version(void *)
- void lammps_file(void *, char *)
- char *lammps_command(void *, char *)
-
-The lammps_open() function is used to initialize LAMMPS, passing in a
-list of strings as if they were :ref:`command-line arguments <start_7>` when LAMMPS is run in
-stand-alone mode from the command line, and a MPI communicator for
-LAMMPS to run under. It returns a ptr to the LAMMPS object that is
-created, and which is used in subsequent library calls. The
-lammps_open() function can be called multiple times, to create
-multiple instances of LAMMPS.
-
-LAMMPS will run on the set of processors in the communicator. This
-means the calling code can run LAMMPS on all or a subset of
-processors. For example, a wrapper script might decide to alternate
-between LAMMPS and another code, allowing them both to run on all the
-processors. Or it might allocate half the processors to LAMMPS and
-half to the other code and run both codes simultaneously before
-syncing them up periodically. Or it might instantiate multiple
-instances of LAMMPS to perform different calculations.
-
-The lammps_close() function is used to shut down an instance of LAMMPS
-and free all its memory.
-
-The lammps_version() function can be used to determined the specific
-version of the underlying LAMMPS code. This is particularly useful
-when loading LAMMPS as a shared library via dlopen(). The code using
-the library interface can than use this information to adapt to
-changes to the LAMMPS command syntax between versions. The returned
-LAMMPS version code is an integer (e.g. 2 Sep 2015 results in
-20150902) that grows with every new LAMMPS version.
-
-The lammps_file() and lammps_command() functions are used to pass a
-file or string to LAMMPS as if it were an input script or single
-command in an input script. Thus the calling code can read or
-generate a series of LAMMPS commands one line at a time and pass it
-thru the library interface to setup a problem and then run it,
-interleaving the lammps_command() calls with other calls to extract
-information from LAMMPS, perform its own operations, or call another
-code's library.
-
-Other useful functions are also included in library.cpp. For example:
-
-.. parsed-literal::
-
- void *lammps_extract_global(void *, char *)
- void *lammps_extract_atom(void *, char *)
- void *lammps_extract_compute(void *, char *, int, int)
- void *lammps_extract_fix(void *, char *, int, int, int, int)
- void *lammps_extract_variable(void *, char *, char *)
- int lammps_set_variable(void *, char *, char *)
- int lammps_get_natoms(void *)
- void lammps_get_coords(void *, double *)
- void lammps_put_coords(void *, double *)
-
-These can extract various global or per-atom quantities from LAMMPS as
-well as values calculated by a compute, fix, or variable. The
-"set_variable" function can set an existing string-style variable to a
-new value, so that subsequent LAMMPS commands can access the variable.
-The "get" and "put" operations can retrieve and reset atom
-coordinates. See the library.cpp file and its associated header file
-library.h for details.
-
-The key idea of the library interface is that you can write any
-functions you wish to define how your code talks to LAMMPS and add
-them to src/library.cpp and src/library.h, as well as to the :doc:`Python interface <Section_python>`. The routines you add can access or
-change any LAMMPS data you wish. The examples/COUPLE and python
-directories have example C++ and C and Python codes which show how a
-driver code can link to LAMMPS as a library, run LAMMPS on a subset of
-processors, grab data from LAMMPS, change it, and put it back into
-LAMMPS.
-
-
-----------
-
-
-.. _howto_20:
-
-Calculating thermal conductivity
---------------------------------
-
-The thermal conductivity kappa of a material can be measured in at
-least 4 ways using various options in LAMMPS. See the examples/KAPPA
-directory for scripts that implement the 4 methods discussed here for
-a simple Lennard-Jones fluid model. Also, see :ref:`this section <howto_21>` of the manual for an analogous
-discussion for viscosity.
-
-The thermal conducitivity tensor kappa is a measure of the propensity
-of a material to transmit heat energy in a diffusive manner as given
-by Fourier's law
-
-J = -kappa grad(T)
-
-where J is the heat flux in units of energy per area per time and
-grad(T) is the spatial gradient of temperature. The thermal
-conductivity thus has units of energy per distance per time per degree
-K and is often approximated as an isotropic quantity, i.e. as a
-scalar.
-
-The first method is to setup two thermostatted regions at opposite
-ends of a simulation box, or one in the middle and one at the end of a
-periodic box. By holding the two regions at different temperatures
-with a :ref:`thermostatting fix <howto_13>`, the energy
-added to the hot region should equal the energy subtracted from the
-cold region and be proportional to the heat flux moving between the
-regions. See the papers by :ref:`Ikeshoji and Hafskjold <howto-Ikeshoji>`
-and :ref:`Wirnsberger et al <howto-Wirnsberger>` for details of this idea.
-Note that thermostatting fixes such as :doc:`fix nvt <fix_nh>`, :doc:`fix langevin <fix_langevin>`, and :doc:`fix temp/rescale <fix_temp_rescale>` store the cumulative energy they
-add/subtract.
-
-Alternatively, as a second method, the :doc:`fix heat <fix_heat>` or
-:doc:`fix ehex <fix_ehex>` commands can be used in place of thermostats
-on each of two regions to add/subtract specified amounts of energy to
-both regions. In both cases, the resulting temperatures of the two
-regions can be monitored with the "compute temp/region" command and
-the temperature profile of the intermediate region can be monitored
-with the :doc:`fix ave/spatial <fix_ave_spatial>` and :doc:`compute ke/atom <compute_ke_atom>` commands.
-
-The third method is to perform a reverse non-equilibrium MD simulation
-using the :doc:`fix thermal/conductivity <fix_thermal_conductivity>`
-command which implements the rNEMD algorithm of Muller-Plathe.
-Kinetic energy is swapped between atoms in two different layers of the
-simulation box. This induces a temperature gradient between the two
-layers which can be monitored with the :doc:`fix ave/spatial <fix_ave_spatial>` and :doc:`compute ke/atom <compute_ke_atom>` commands. The fix tallies the
-cumulative energy transfer that it performs. See the :doc:`fix thermal/conductivity <fix_thermal_conductivity>` command for
-details.
-
-The fourth method is based on the Green-Kubo (GK) formula which
-relates the ensemble average of the auto-correlation of the heat flux
-to kappa. The heat flux can be calculated from the fluctuations of
-per-atom potential and kinetic energies and per-atom stress tensor in
-a steady-state equilibrated simulation. This is in contrast to the
-two preceding non-equilibrium methods, where energy flows continuously
-between hot and cold regions of the simulation box.
-
-The :doc:`compute heat/flux <compute_heat_flux>` command can calculate
-the needed heat flux and describes how to implement the Green_Kubo
-formalism using additional LAMMPS commands, such as the :doc:`fix ave/correlate <fix_ave_correlate>` command to calculate the needed
-auto-correlation. See the doc page for the :doc:`compute heat/flux <compute_heat_flux>` command for an example input script
-that calculates the thermal conductivity of solid Ar via the GK
-formalism.
-
-
-----------
-
-
-.. _howto_21:
-
-Calculating viscosity
----------------------
-
-The shear viscosity eta of a fluid can be measured in at least 5 ways
-using various options in LAMMPS. See the examples/VISCOSITY directory
-for scripts that implement the 5 methods discussed here for a simple
-Lennard-Jones fluid model. Also, see :ref:`this section <howto_20>` of the manual for an analogous
-discussion for thermal conductivity.
-
-Eta is a measure of the propensity of a fluid to transmit momentum in
-a direction perpendicular to the direction of velocity or momentum
-flow. Alternatively it is the resistance the fluid has to being
-sheared. It is given by
-
-J = -eta grad(Vstream)
-
-where J is the momentum flux in units of momentum per area per time.
-and grad(Vstream) is the spatial gradient of the velocity of the fluid
-moving in another direction, normal to the area through which the
-momentum flows. Viscosity thus has units of pressure-time.
-
-The first method is to perform a non-equlibrium MD (NEMD) simulation
-by shearing the simulation box via the :doc:`fix deform <fix_deform>`
-command, and using the :doc:`fix nvt/sllod <fix_nvt_sllod>` command to
-thermostat the fluid via the SLLOD equations of motion.
-Alternatively, as a second method, one or more moving walls can be
-used to shear the fluid in between them, again with some kind of
-thermostat that modifies only the thermal (non-shearing) components of
-velocity to prevent the fluid from heating up.
-
-In both cases, the velocity profile setup in the fluid by this
-procedure can be monitored by the :doc:`fix ave/spatial <fix_ave_spatial>` command, which determines
-grad(Vstream) in the equation above. E.g. the derivative in the
-y-direction of the Vx component of fluid motion or grad(Vstream) =
-dVx/dy. The Pxy off-diagonal component of the pressure or stress
-tensor, as calculated by the :doc:`compute pressure <compute_pressure>`
-command, can also be monitored, which is the J term in the equation
-above. See :ref:`this section <howto_13>` of the manual
-for details on NEMD simulations.
-
-The third method is to perform a reverse non-equilibrium MD simulation
-using the :doc:`fix viscosity <fix_viscosity>` command which implements
-the rNEMD algorithm of Muller-Plathe. Momentum in one dimension is
-swapped between atoms in two different layers of the simulation box in
-a different dimension. This induces a velocity gradient which can be
-monitored with the :doc:`fix ave/spatial <fix_ave_spatial>` command.
-The fix tallies the cummulative momentum transfer that it performs.
-See the :doc:`fix viscosity <fix_viscosity>` command for details.
-
-The fourth method is based on the Green-Kubo (GK) formula which
-relates the ensemble average of the auto-correlation of the
-stress/pressure tensor to eta. This can be done in a fully
-equilibrated simulation which is in contrast to the two preceding
-non-equilibrium methods, where momentum flows continuously through the
-simulation box.
-
-Here is an example input script that calculates the viscosity of
-liquid Ar via the GK formalism:
-
-.. parsed-literal::
-
- # Sample LAMMPS input script for viscosity of liquid Ar
-
-.. parsed-literal::
-
- units real
- variable T equal 86.4956
- variable V equal vol
- variable dt equal 4.0
- variable p equal 400 # correlation length
- variable s equal 5 # sample interval
- variable d equal $p*$s # dump interval
-
-.. parsed-literal::
-
- # convert from LAMMPS real units to SI
-
-.. parsed-literal::
-
- variable kB equal 1.3806504e-23 # [J/K/** Boltzmann
- variable atm2Pa equal 101325.0
- variable A2m equal 1.0e-10
- variable fs2s equal 1.0e-15
- variable convert equal ${atm2Pa}*${atm2Pa}*${fs2s}*${A2m}*${A2m}*${A2m}
-
-.. parsed-literal::
-
- # setup problem
-
-.. parsed-literal::
-
- dimension 3
- boundary p p p
- lattice fcc 5.376 orient x 1 0 0 orient y 0 1 0 orient z 0 0 1
- region box block 0 4 0 4 0 4
- create_box 1 box
- create_atoms 1 box
- mass 1 39.948
- pair_style lj/cut 13.0
- pair_coeff * * 0.2381 3.405
- timestep ${dt}
- thermo $d
-
-.. parsed-literal::
-
- # equilibration and thermalization
-
-.. parsed-literal::
-
- velocity all create $T 102486 mom yes rot yes dist gaussian
- fix NVT all nvt temp $T $T 10 drag 0.2
- run 8000
-
-.. parsed-literal::
-
- # viscosity calculation, switch to NVE if desired
-
-.. parsed-literal::
-
- #unfix NVT
- #fix NVE all nve
-
-.. parsed-literal::
-
- reset_timestep 0
- variable pxy equal pxy
- variable pxz equal pxz
- variable pyz equal pyz
- fix SS all ave/correlate $s $p $d &
- v_pxy v_pxz v_pyz type auto file S0St.dat ave running
- variable scale equal ${convert}/(${kB}*$T)*$V*$s*${dt}
- variable v11 equal trap(f_SS[3])*${scale}
- variable v22 equal trap(f_SS[4])*${scale}
- variable v33 equal trap(f_SS[5])*${scale}
- thermo_style custom step temp press v_pxy v_pxz v_pyz v_v11 v_v22 v_v33
- run 100000
- variable v equal (v_v11+v_v22+v_v33)/3.0
- variable ndens equal count(all)/vol
- print "average viscosity: $v [Pa.s/** @ $T K, ${ndens} /A^3"
-
-The fifth method is related to the above Green-Kubo method,
-but uses the Einstein formulation, analogous to the Einstein
-mean-square-displacement formulation for self-diffusivity. The
-time-integrated momentum fluxes play the role of Cartesian
-coordinates, whose mean-square displacement increases linearly
-with time at sufficiently long times.
-
-
-----------
-
-
-.. _howto_22:
-
-Calculating a diffusion coefficient
------------------------------------
-
-The diffusion coefficient D of a material can be measured in at least
-2 ways using various options in LAMMPS. See the examples/DIFFUSE
-directory for scripts that implement the 2 methods discussed here for
-a simple Lennard-Jones fluid model.
-
-The first method is to measure the mean-squared displacement (MSD) of
-the system, via the :doc:`compute msd <compute_msd>` command. The slope
-of the MSD versus time is proportional to the diffusion coefficient.
-The instantaneous MSD values can be accumulated in a vector via the
-:doc:`fix vector <fix_vector>` command, and a line fit to the vector to
-compute its slope via the :doc:`variable slope <variable>` function, and
-thus extract D.
-
-The second method is to measure the velocity auto-correlation function
-(VACF) of the system, via the :doc:`compute vacf <compute_vacf>`
-command. The time-integral of the VACF is proportional to the
-diffusion coefficient. The instantaneous VACF values can be
-accumulated in a vector via the :doc:`fix vector <fix_vector>` command,
-and time integrated via the :doc:`variable trap <variable>` function,
-and thus extract D.
-
-
-----------
-
-
-.. _howto_23:
-
-Using chunks to calculate system properties
--------------------------------------------
-
-In LAMMS, "chunks" are collections of atoms, as defined by the
-:doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns
-each atom to a chunk ID (or to no chunk at all). The number of chunks
-and the assignment of chunk IDs to atoms can be static or change over
-time. Examples of "chunks" are molecules or spatial bins or atoms
-with similar values (e.g. coordination number or potential energy).
-
-The per-atom chunk IDs can be used as input to two other kinds of
-commands, to calculate various properties of a system:
-
-* :doc:`fix ave/chunk <fix_ave_chunk>`
-* any of the :doc:`compute */chunk <compute>` commands
-
-Here, each of the 3 kinds of chunk-related commands is briefly
-overviewed. Then some examples are given of how to compute different
-properties with chunk commands.
-
-Compute chunk/atom command:
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-This compute can assign atoms to chunks of various styles. Only atoms
-in the specified group and optional specified region are assigned to a
-chunk. Here are some possible chunk definitions:
-
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
-| atoms in same molecule | chunk ID = molecule ID |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
-| atoms of same atom type | chunk ID = atom type |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
-| all atoms with same atom property (charge, radius, etc) | chunk ID = output of compute property/atom |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
-| atoms in same cluster | chunk ID = output of :doc:`compute cluster/atom <compute_cluster_atom>` command |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
-| atoms in same spatial bin | chunk ID = bin ID |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
-| atoms in same rigid body | chunk ID = molecule ID used to define rigid bodies |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
-| atoms with similar potential energy | chunk ID = output of :doc:`compute pe/atom <compute_pe_atom>` |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
-| atoms with same local defect structure | chunk ID = output of :doc:`compute centro/atom <compute_centro_atom>` or :doc:`compute coord/atom <compute_coord_atom>` command |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
-
-Note that chunk IDs are integer values, so for atom properties or
-computes that produce a floating point value, they will be truncated
-to an integer. You could also use the compute in a variable that
-scales the floating point value to spread it across multiple intergers.
-
-Spatial bins can be of various kinds, e.g. 1d bins = slabs, 2d bins =
-pencils, 3d bins = boxes, spherical bins, cylindrical bins.
-
-This compute also calculates the number of chunks *Nchunk*\ , which is
-used by other commands to tally per-chunk data. *Nchunk* can be a
-static value or change over time (e.g. the number of clusters). The
-chunk ID for an individual atom can also be static (e.g. a molecule
-ID), or dynamic (e.g. what spatial bin an atom is in as it moves).
-
-Note that this compute allows the per-atom output of other
-:doc:`computes <compute>`, :doc:`fixes <fix>`, and
-:doc:`variables <variable>` to be used to define chunk IDs for each
-atom. This means you can write your own compute or fix to output a
-per-atom quantity to use as chunk ID. See
-:doc:`Section_modify <Section_modify>` of the documentation for how to
-do this. You can also define a :doc:`per-atom variable <variable>` in
-the input script that uses a formula to generate a chunk ID for each
-atom.
-
-Fix ave/chunk command:
-^^^^^^^^^^^^^^^^^^^^^^
-
-This fix takes the ID of a :doc:`compute chunk/atom <compute_chunk_atom>` command as input. For each chunk,
-it then sums one or more specified per-atom values over the atoms in
-each chunk. The per-atom values can be any atom property, such as
-velocity, force, charge, potential energy, kinetic energy, stress,
-etc. Additional keywords are defined for per-chunk properties like
-density and temperature. More generally any per-atom value generated
-by other :doc:`computes <compute>`, :doc:`fixes <fix>`, and :doc:`per-atom variables <variable>`, can be summed over atoms in each chunk.
-
-Similar to other averaging fixes, this fix allows the summed per-chunk
-values to be time-averaged in various ways, and output to a file. The
-fix produces a global array as output with one row of values per
-chunk.
-
-Compute */chunk commands:
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Currently the following computes operate on chunks of atoms to produce
-per-chunk values.
-
-* :doc:`compute com/chunk <compute_com_chunk>`
-* :doc:`compute gyration/chunk <compute_gyration_chunk>`
-* :doc:`compute inertia/chunk <compute_inertia_chunk>`
-* :doc:`compute msd/chunk <compute_msd_chunk>`
-* :doc:`compute property/chunk <compute_property_chunk>`
-* :doc:`compute temp/chunk <compute_temp_chunk>`
-* :doc:`compute torque/chunk <compute_vcm_chunk>`
-* :doc:`compute vcm/chunk <compute_vcm_chunk>`
-
-They each take the ID of a :doc:`compute chunk/atom <compute_chunk_atom>` command as input. As their names
-indicate, they calculate the center-of-mass, radius of gyration,
-moments of inertia, mean-squared displacement, temperature, torque,
-and velocity of center-of-mass for each chunk of atoms. The :doc:`compute property/chunk <compute_property_chunk>` command can tally the
-count of atoms in each chunk and extract other per-chunk properties.
-
-The reason these various calculations are not part of the :doc:`fix ave/chunk command <fix_ave_chunk>`, is that each requires a more
-complicated operation than simply summing and averaging over per-atom
-values in each chunk. For example, many of them require calculation
-of a center of mass, which requires summing mass*position over the
-atoms and then dividing by summed mass.
-
-All of these computes produce a global vector or global array as
-output, wih one or more values per chunk. They can be used
-in various ways:
-
-* As input to the :doc:`fix ave/time <fix_ave_time>` command, which can
- write the values to a file and optionally time average them.
-* As input to the :doc:`fix ave/histo <fix_ave_histo>` command to
- histogram values across chunks. E.g. a histogram of cluster sizes or
- molecule diffusion rates.
-* As input to special functions of :doc:`equal-style variables <variable>`, like sum() and max(). E.g. to find the
- largest cluster or fastest diffusing molecule.
-Example calculations with chunks
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Here are eaxmples using chunk commands to calculate various
-properties:
-
-(1) Average velocity in each of 1000 2d spatial bins:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom bin/2d x 0.0 0.1 y lower 0.01 units reduced
- fix 1 all ave/chunk 100 10 1000 cc1 vx vy file tmp.out
-
-(2) Temperature in each spatial bin, after subtracting a flow
-velocity:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom bin/2d x 0.0 0.1 y lower 0.1 units reduced
- compute vbias all temp/profile 1 0 0 y 10
- fix 1 all ave/chunk 100 10 1000 cc1 temp bias vbias file tmp.out
-
-(3) Center of mass of each molecule:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk all com/chunk cc1
- fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
-
-(4) Total force on each molecule and ave/max across all molecules:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- fix 1 all ave/chunk 1000 1 1000 cc1 fx fy fz file tmp.out
- variable xave equal ave(f_1\ **2**\ )
- variable xmax equal max(f_1\ **2**\ )
- thermo 1000
- thermo_style custom step temp v_xave v_xmax
-
-(5) Histogram of cluster sizes:
-
-.. parsed-literal::
-
- compute cluster all cluster/atom 1.0
- compute cc1 all chunk/atom c_cluster compress yes
- compute size all property/chunk cc1 count
- fix 1 all ave/histo 100 1 100 0 20 20 c_size mode vector ave running beyond ignore file tmp.histo
-
-
-----------
-
-
-.. _howto_24:
-
-Setting parameters for the :doc:`kspace_style pppm/disp <kspace_style>` command
--------------------------------------------------------------------------------
-
-The PPPM method computes interactions by splitting the pair potential
-into two parts, one of which is computed in a normal pairwise fashion,
-the so-called real-space part, and one of which is computed using the
-Fourier transform, the so called reciprocal-space or kspace part. For
-both parts, the potential is not computed exactly but is approximated.
-Thus, there is an error in both parts of the computation, the
-real-space and the kspace error. The just mentioned facts are true
-both for the PPPM for Coulomb as well as dispersion interactions. The
-deciding difference - and also the reason why the parameters for
-pppm/disp have to be selected with more care - is the impact of the
-errors on the results: The kspace error of the PPPM for Coulomb and
-dispersion interaction and the real-space error of the PPPM for
-Coulomb interaction have the character of noise. In contrast, the
-real-space error of the PPPM for dispersion has a clear physical
-interpretation: the underprediction of cohesion. As a consequence, the
-real-space error has a much stronger effect than the kspace error on
-simulation results for pppm/disp. Parameters must thus be chosen in a
-way that this error is much smaller than the kspace error.
-
-When using pppm/disp and not making any specifications on the PPPM
-parameters via the kspace modify command, parameters will be tuned
-such that the real-space error and the kspace error are equal. This
-will result in simulations that are either inaccurate or slow, both of
-which is not desirable. For selecting parameters for the pppm/disp
-that provide fast and accurate simulations, there are two approaches,
-which both have their up- and downsides.
-
-The first approach is to set desired real-space an kspace accuracies
-via the *kspace_modify force/disp/real* and *kspace_modify
-force/disp/kspace* commands. Note that the accuracies have to be
-specified in force units and are thus dependend on the chosen unit
-settings. For real units, 0.0001 and 0.002 seem to provide reasonable
-accurate and efficient computations for the real-space and kspace
-accuracies. 0.002 and 0.05 work well for most systems using lj
-units. PPPM parameters will be generated based on the desired
-accuracies. The upside of this approach is that it usually provides a
-good set of parameters and will work for both the *kspace_modify diff
-ad* and *kspace_modify diff ik* options. The downside of the method
-is that setting the PPPM parameters will take some time during the
-initialization of the simulation.
-
-The second approach is to set the parameters for the pppm/disp
-explicitly using the *kspace_modify mesh/disp*\ , *kspace_modify
-order/disp*\ , and *kspace_modify gewald/disp* commands. This approach
-requires a more experienced user who understands well the impact of
-the choice of parameters on the simulation accuracy and
-performance. This approach provides a fast initialization of the
-simulation. However, it is sensitive to errors: A combination of
-parameters that will perform well for one system might result in
-far-from-optimal conditions for other simulations. For example,
-parametes that provide accurate and fast computations for
-all-atomistic force fields can provide insufficient accuracy or
-united-atomistic force fields (which is related to that the latter
-typically have larger dispersion coefficients).
-
-To avoid inaccurate or inefficient simulations, the pppm/disp stops
-simulations with an error message if no action is taken to control the
-PPPM parameters. If the automatic parameter generation is desired and
-real-space and kspace accuracies are desired to be equal, this error
-message can be suppressed using the *kspace_modify disp/auto yes*
-command.
-
-A reasonable approach that combines the upsides of both methods is to
-make the first run using the *kspace_modify force/disp/real* and
-*kspace_modify force/disp/kspace* commands, write down the PPPM
-parameters from the outut, and specify these parameters using the
-second approach in subsequent runs (which have the same composition,
-force field, and approximately the same volume).
-
-Concerning the performance of the pppm/disp there are two more things
-to consider. The first is that when using the pppm/disp, the cutoff
-parameter does no longer affect the accuracy of the simulation
-(subject to that gewald/disp is adjusted when changing the cutoff).
-The performance can thus be increased by examining different values
-for the cutoff parameter. A lower bound for the cutoff is only set by
-the truncation error of the repulsive term of pair potentials.
-
-The second is that the mixing rule of the pair style has an impact on
-the computation time when using the pppm/disp. Fastest computations
-are achieved when using the geometric mixing rule. Using the
-arithmetic mixing rule substantially increases the computational cost.
-The computational overhead can be reduced using the *kspace_modify
-mix/disp geom* and *kspace_modify splittol* commands. The first
-command simply enforces geometric mixing of the dispersion
-coeffiecients in kspace computations. This introduces some error in
-the computations but will also significantly speed-up the
-simulations. The second keyword sets the accuracy with which the
-dispersion coefficients are approximated using a matrix factorization
-approach. This may result in better accuracy then using the first
-command, but will usually also not provide an equally good increase of
-efficiency.
-
-Finally, pppm/disp can also be used when no mixing rules apply.
-This can be achieved using the *kspace_modify mix/disp none* command.
-Note that the code does not check automatically whether any mixing
-rule is fulfilled. If mixing rules do not apply, the user will have
-to specify this command explicitly.
-
-
-----------
-
-
-.. _howto_25:
-
-Polarizable models
-------------------
-
-In polarizable force fields the charge distributions in molecules and
-materials respond to their electrostatic environements. Polarizable
-systems can be simulated in LAMMPS using three methods:
-
-* the fluctuating charge method, implemented in the :doc:`QEQ <fix_qeq>`
- package,
-* the adiabatic core-shell method, implemented in the
- :ref:`CORESHELL <howto_26>` package,
-* the thermalized Drude dipole method, implemented in the
- :ref:`USER-DRUDE <howto_27>` package.
-The fluctuating charge method calculates instantaneous charges on
-interacting atoms based on the electronegativity equalization
-principle. It is implemented in the :doc:`fix qeq <fix_qeq>` which is
-available in several variants. It is a relatively efficient technique
-since no additional particles are introduced. This method allows for
-charge transfer between molecules or atom groups. However, because the
-charges are located at the interaction sites, off-plane components of
-polarization cannot be represented in planar molecules or atom groups.
-
-The two other methods share the same basic idea: polarizable atoms are
-split into one core atom and one satellite particle (called shell or
-Drude particle) attached to it by a harmonic spring. Both atoms bear
-a charge and they represent collectively an induced electric dipole.
-These techniques are computationally more expensive than the QEq
-method because of additional particles and bonds. These two
-charge-on-spring methods differ in certain features, with the
-core-shell model being normally used for ionic/crystalline materials,
-whereas the so-called Drude model is normally used for molecular
-systems and fluid states.
-
-The core-shell model is applicable to crystalline materials where the
-high symmetry around each site leads to stable trajectories of the
-core-shell pairs. However, bonded atoms in molecules can be so close
-that a core would interact too strongly or even capture the Drude
-particle of a neighbor. The Drude dipole model is relatively more
-complex in order to remediate this and other issues. Specifically, the
-Drude model includes specific thermostating of the core-Drude pairs
-and short-range damping of the induced dipoles.
-
-The three polarization methods can be implemented through a
-self-consistent calculation of charges or induced dipoles at each
-timestep. In the fluctuating charge scheme this is done by the matrix
-inversion method in :doc:`fix qeq/point <fix_qeq>`, but for core-shell
-or Drude-dipoles the relaxed-dipoles technique would require an slow
-iterative procedure. These self-consistent solutions yield accurate
-trajectories since the additional degrees of freedom representing
-polarization are massless. An alternative is to attribute a mass to
-the additional degrees of freedom and perform time integration using
-an extended Lagrangian technique. For the fluctuating charge scheme
-this is done by :doc:`fix qeq/dynamic <fix_qeq>`, and for the
-charge-on-spring models by the methods outlined in the next two
-sections. The assignment of masses to the additional degrees of
-freedom can lead to unphysical trajectories if care is not exerted in
-choosing the parameters of the poarizable models and the simulation
-conditions.
-
-In the core-shell model the vibration of the shells is kept faster
-than the ionic vibrations to mimic the fast response of the
-polarizable electrons. But in molecular systems thermalizing the
-core-Drude pairs at temperatures comparable to the rest of the
-simulation leads to several problems (kinetic energy transfer, too
-short a timestep, etc.) In order to avoid these problems the relative
-motion of the Drude particles with respect to their cores is kept
-"cold" so the vibration of the core-Drude pairs is very slow,
-approaching the self-consistent regime. In both models the
-temperature is regulated using the velocities of the center of mass of
-core+shell (or Drude) pairs, but in the Drude model the actual
-relative core-Drude particle motion is thermostated separately as
-well.
-
-
-----------
-
-
-.. _howto_26:
-
-Adiabatic core/shell model
---------------------------
-
-The adiabatic core-shell model by :ref:`Mitchell and Finchham <MitchellFinchham>` is a simple method for adding
-polarizability to a system. In order to mimic the electron shell of
-an ion, a satellite particle is attached to it. This way the ions are
-split into a core and a shell where the latter is meant to react to
-the electrostatic environment inducing polarizability.
-
-Technically, shells are attached to the cores by a spring force f =
-k*r where k is a parametrized spring constant and r is the distance
-between the core and the shell. The charges of the core and the shell
-add up to the ion charge, thus q(ion) = q(core) + q(shell). This
-setup introduces the ion polarizability (alpha) given by
-alpha = q(shell)^2 / k. In a
-similar fashion the mass of the ion is distributed on the core and the
-shell with the core having the larger mass.
-
-To run this model in LAMMPS, :doc:`atom_style <atom_style>` *full* can
-be used since atom charge and bonds are needed. Each kind of
-core/shell pair requires two atom types and a bond type. The core and
-shell of a core/shell pair should be bonded to each other with a
-harmonic bond that provides the spring force. For example, a data file
-for NaCl, as found in examples/coreshell, has this format:
-
-.. parsed-literal::
-
- 432 atoms # core and shell atoms
- 216 bonds # number of core/shell springs
-
-.. parsed-literal::
-
- 4 atom types # 2 cores and 2 shells for Na and Cl
- 2 bond types
-
-.. parsed-literal::
-
- 0.0 24.09597 xlo xhi
- 0.0 24.09597 ylo yhi
- 0.0 24.09597 zlo zhi
-
-.. parsed-literal::
-
- Masses # core/shell mass ratio = 0.1
-
-.. parsed-literal::
-
- 1 20.690784 # Na core
- 2 31.90500 # Cl core
- 3 2.298976 # Na shell
- 4 3.54500 # Cl shell
-
-.. parsed-literal::
-
- Atoms
-
-.. parsed-literal::
-
- 1 1 2 1.5005 0.00000000 0.00000000 0.00000000 # core of core/shell pair 1
- 2 1 4 -2.5005 0.00000000 0.00000000 0.00000000 # shell of core/shell pair 1
- 3 2 1 1.5056 4.01599500 4.01599500 4.01599500 # core of core/shell pair 2
- 4 2 3 -0.5056 4.01599500 4.01599500 4.01599500 # shell of core/shell pair 2
- (...)
-
-.. parsed-literal::
-
- Bonds # Bond topology for spring forces
-
-.. parsed-literal::
-
- 1 2 1 2 # spring for core/shell pair 1
- 2 2 3 4 # spring for core/shell pair 2
- (...)
-
-Non-Coulombic (e.g. Lennard-Jones) pairwise interactions are only
-defined between the shells. Coulombic interactions are defined
-between all cores and shells. If desired, additional bonds can be
-specified between cores.
-
-The :doc:`special_bonds <special_bonds>` command should be used to
-turn-off the Coulombic interaction within core/shell pairs, since that
-interaction is set by the bond spring. This is done using the
-:doc:`special_bonds <special_bonds>` command with a 1-2 weight = 0.0,
-which is the default value. It needs to be considered whether one has
-to adjust the :doc:`special_bonds <special_bonds>` weighting according
-to the molecular topology since the interactions of the shells are
-bypassed over an extra bond.
-
-Note that this core/shell implementation does not require all ions to
-be polarized. One can mix core/shell pairs and ions without a
-satellite particle if desired.
-
-Since the core/shell model permits distances of r = 0.0 between the
-core and shell, a pair style with a "cs" suffix needs to be used to
-implement a valid long-range Coulombic correction. Several such pair
-styles are provided in the CORESHELL package. See :doc:`this doc page <pair_cs>` for details. All of the core/shell enabled pair
-styles require the use of a long-range Coulombic solver, as specified
-by the :doc:`kspace_style <kspace_style>` command. Either the PPPM or
-Ewald solvers can be used.
-
-For the NaCL example problem, these pair style and bond style settings
-are used:
-
-.. parsed-literal::
-
- pair_style born/coul/long/cs 20.0 20.0
- pair_coeff * * 0.0 1.000 0.00 0.00 0.00
- pair_coeff 3 3 487.0 0.23768 0.00 1.05 0.50 #Na-Na
- pair_coeff 3 4 145134.0 0.23768 0.00 6.99 8.70 #Na-Cl
- pair_coeff 4 4 405774.0 0.23768 0.00 72.40 145.40 #Cl-Cl
-
-.. parsed-literal::
-
- bond_style harmonic
- bond_coeff 1 63.014 0.0
- bond_coeff 2 25.724 0.0
-
-When running dynamics with the adiabatic core/shell model, the
-following issues should be considered. Since the relative motion of
-the core and shell particles corresponds to the polarization, typical
-thermostats can alter the polarization behaviour, meaning the shell
-will not react freely to its electrostatic environment. This is
-critical during the equilibration of the system. Therefore
-it's typically desirable to decouple the relative motion of the
-core/shell pair, which is an imaginary degree of freedom, from the
-real physical system. To do that, the :doc:`compute temp/cs <compute_temp_cs>` command can be used, in conjunction with
-any of the thermostat fixes, such as :doc:`fix nvt <fix_nh>` or `fix langevin <fix_langevin>`_. This compute uses the center-of-mass velocity
-of the core/shell pairs to calculate a temperature, and insures that
-velocity is what is rescaled for thermostatting purposes. This
-compute also works for a system with both core/shell pairs and
-non-polarized ions (ions without an attached satellite particle). The
-:doc:`compute temp/cs <compute_temp_cs>` command requires input of two
-groups, one for the core atoms, another for the shell atoms.
-Non-polarized ions which might also be included in the treated system
-should not be included into either of these groups, they are taken
-into account by the *group-ID* (2nd argument) of the compute. The
-groups can be defined using the :doc:`group *type*\ <group>` command.
-Note that to perform thermostatting using this definition of
-temperature, the :doc:`fix modify temp <fix_modify>` command should be
-used to assign the compute to the thermostat fix. Likewise the
-:doc:`thermo_modify temp <thermo_modify>` command can be used to make
-this temperature be output for the overall system.
-
-For the NaCl example, this can be done as follows:
-
-.. parsed-literal::
-
- group cores type 1 2
- group shells type 3 4
- compute CSequ all temp/cs cores shells
- fix thermoberendsen all temp/berendsen 1427 1427 0.4 # thermostat for the true physical system
- fix thermostatequ all nve # integrator as needed for the berendsen thermostat
- fix_modify thermoberendsen temp CSequ
- thermo_modify temp CSequ # output of center-of-mass derived temperature
-
-If :doc:`compute temp/cs <compute_temp_cs>` is used, the decoupled
-relative motion of the core and the shell should in theory be
-stable. However numerical fluctuation can introduce a small
-momentum to the system, which is noticable over long trajectories.
-Therefore it is recomendable to use the :doc:`fix momentum <fix_momentum>` command in combination with :doc:`compute temp/cs <compute_temp_cs>` when equilibrating the system to
-prevent any drift.
-
-When intializing the velocities of a system with core/shell pairs, it
-is also desirable to not introduce energy into the relative motion of
-the core/shell particles, but only assign a center-of-mass velocity to
-the pairs. This can be done by using the *bias* keyword of the
-:doc:`velocity create <velocity>` command and assigning the :doc:`compute temp/cs <compute_temp_cs>` command to the *temp* keyword of the
-:doc:`velocity <velocity>` commmand, e.g.
-
-.. parsed-literal::
-
- velocity all create 1427 134 bias yes temp CSequ
- velocity all scale 1427 temp CSequ
-
-It is important to note that the polarizability of the core/shell
-pairs is based on their relative motion. Therefore the choice of
-spring force and mass ratio need to ensure much faster relative motion
-of the 2 atoms within the core/shell pair than their center-of-mass
-velocity. This allow the shells to effectively react instantaneously
-to the electrostatic environment. This fast movement also limits the
-timestep size that can be used.
-
-The primary literature of the adiabatic core/shell model suggests that
-the fast relative motion of the core/shell pairs only allows negligible
-energy transfer to the environment. Therefore it is not intended to
-decouple the core/shell degree of freedom from the physical system
-during production runs. In other words, the :doc:`compute temp/cs <compute_temp_cs>` command should not be used during
-production runs and is only required during equilibration. This way one
-is consistent with literature (based on the code packages DL_POLY or
-GULP for instance).
-
-The mentioned energy transfer will typically lead to a a small drift
-in total energy over time. This internal energy can be monitored
-using the :doc:`compute chunk/atom <compute_chunk_atom>` and :doc:`compute temp/chunk <compute_temp_chunk>` commands. The internal kinetic
-energies of each core/shell pair can then be summed using the sum()
-special function of the :doc:`variable <variable>` command. Or they can
-be time/averaged and output using the :doc:`fix ave/time <fix_ave_time>`
-command. To use these commands, each core/shell pair must be defined
-as a "chunk". If each core/shell pair is defined as its own molecule,
-the molecule ID can be used to define the chunks. If cores are bonded
-to each other to form larger molecules, the chunks can be identified
-by the :doc:`fix property/atom <fix_property_atom>` via assigning a
-core/shell ID to each atom using a special field in the data file read
-by the :doc:`read_data <read_data>` command. This field can then be
-accessed by the :doc:`compute property/atom <compute_property_atom>`
-command, to use as input to the :doc:`compute chunk/atom <compute_chunk_atom>` command to define the core/shell
-pairs as chunks.
-
-For example,
-
-.. parsed-literal::
-
- fix csinfo all property/atom i_CSID # property/atom command
- read_data NaCl_CS_x0.1_prop.data fix csinfo NULL CS-Info # atom property added in the data-file
- compute prop all property/atom i_CSID
- compute cs_chunk all chunk/atom c_prop
- compute cstherm all temp/chunk cs_chunk temp internal com yes cdof 3.0 # note the chosen degrees of freedom for the core/shell pairs
- fix ave_chunk all ave/time 10 1 10 c_cstherm file chunk.dump mode vector
-
-The additional section in the date file would be formatted like this:
-
-.. parsed-literal::
-
- CS-Info # header of additional section
-
-.. parsed-literal::
-
- 1 1 # column 1 = atom ID, column 2 = core/shell ID
- 2 1
- 3 2
- 4 2
- 5 3
- 6 3
- 7 4
- 8 4
- (...)
-
-
-----------
-
-
-.. _howto_27:
-
-Drude induced dipoles
----------------------
-
-The thermalized Drude model, similarly to the :ref:`core-shell <howto_26>`
-model, representes induced dipoles by a pair of charges (the core atom
-and the Drude particle) connected by a harmonic spring. The Drude
-model has a number of features aimed at its use in molecular systems
-(:ref:`Lamoureux and Roux <howto-Lamoureux>`):
-
-* Thermostating of the additional degrees of freedom associated with the
- induced dipoles at very low temperature, in terms of the reduced
- coordinates of the Drude particles with respect to their cores. This
- makes the trajectory close to that of relaxed induced dipoles.
-* Consistent definition of 1-2 to 1-4 neighbors. A core-Drude particle
- pair represents a single (polarizable) atom, so the special screening
- factors in a covalent structure should be the same for the core and
- the Drude particle. Drude particles have to inherit the 1-2, 1-3, 1-4
- special neighbor relations from their respective cores.
-* Stabilization of the interactions between induced dipoles. Drude
- dipoles on covalently bonded atoms interact too strongly due to the
- short distances, so an atom may capture the Drude particle of a
- neighbor, or the induced dipoles within the same molecule may align
- too much. To avoid this, damping at short range can be done by Thole
- functions (for which there are physical grounds). This Thole damping
- is applied to the point charges composing the induced dipole (the
- charge of the Drude particle and the opposite charge on the core, not
- to the total charge of the core atom).
-A detailed tutorial covering the usage of Drude induced dipoles in
-LAMMPS is :doc:`available here <tutorial_drude>`.
-
-As with the core-shell model, the cores and Drude particles should
-appear in the data file as standard atoms. The same holds for the
-springs between them, which are described by standard harmonic bonds.
-The nature of the atoms (core, Drude particle or non-polarizable) is
-specified via the :doc:`fix drude <fix_drude>` command. The special
-list of neighbors is automatically refactored to account for the
-equivalence of core and Drude particles as regards special 1-2 to 1-4
-screening. It may be necessary to use the *extra* keyword of the
-:doc:`special_bonds <special_bonds>` command. If using :doc:`fix shake <fix_shake>`, make sure no Drude particle is in this fix
-group.
-
-There are two ways to thermostat the Drude particles at a low
-temperature: use either :doc:`fix langevin/drude <fix_langevin_drude>`
-for a Langevin thermostat, or :doc:`fix drude/transform/* <fix_drude_transform>` for a Nose-Hoover
-thermostat. The former requires use of the command :doc:`comm_modify vel yes <comm_modify>`. The latter requires two separate integration
-fixes like *nvt* or *npt*\ . The correct temperatures of the reduced
-degrees of freedom can be calculated using the :doc:`compute temp/drude <compute_temp_drude>`. This requires also to use the
-command *comm_modify vel yes*\ .
-
-Short-range damping of the induced dipole interactions can be achieved
-using Thole functions through the the :doc:`pair style thole <pair_thole>` in :doc:`pair_style hybrid/overlay <pair_hybrid>`
-with a Coulomb pair style. It may be useful to use *coul/long/cs* or
-similar from the CORESHELL package if the core and Drude particle come
-too close, which can cause numerical issues.
-
-
-
-
-
-.. _howto-Berendsen:
-
-
-
-**(Berendsen)** Berendsen, Grigera, Straatsma, J Phys Chem, 91,
-6269-6271 (1987).
-
-.. _howto-Cornell:
-
-
-
-**(Cornell)** Cornell, Cieplak, Bayly, Gould, Merz, Ferguson,
-Spellmeyer, Fox, Caldwell, Kollman, JACS 117, 5179-5197 (1995).
-
-.. _Horn:
-
-
-
-**(Horn)** Horn, Swope, Pitera, Madura, Dick, Hura, and Head-Gordon,
-J Chem Phys, 120, 9665 (2004).
-
-.. _howto-Ikeshoji:
-
-
-
-**(Ikeshoji)** Ikeshoji and Hafskjold, Molecular Physics, 81, 251-261
-(1994).
-
-.. _howto-Wirnsberger:
-
-
-
-**(Wirnsberger)** Wirnsberger, Frenkel, and Dellago, J Chem Phys, 143, 124104
-(2015).
-
-.. _howto-MacKerell:
-
-
-
-**(MacKerell)** MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field,
-Fischer, Gao, Guo, Ha, et al, J Phys Chem, 102, 3586 (1998).
-
-.. _howto-Mayo:
-
-
-
-**(Mayo)** Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909
-(1990).
-
-.. _Jorgensen:
-
-
-
-**(Jorgensen)** Jorgensen, Chandrasekhar, Madura, Impey, Klein, J Chem
-Phys, 79, 926 (1983).
-
-.. _Price:
-
-
-
-**(Price)** Price and Brooks, J Chem Phys, 121, 10096 (2004).
-
-.. _Shinoda:
-
-
-
-**(Shinoda)** Shinoda, Shiga, and Mikami, Phys Rev B, 69, 134103 (2004).
-
-.. _MitchellFinchham:
-
-
-
-**(Mitchell and Finchham)** Mitchell, Finchham, J Phys Condensed Matter,
-5, 1031-1038 (1993).
-
-.. _howto-Lamoureux:
-
-
-
-**(Lamoureux and Roux)** G. Lamoureux, B. Roux, J. Chem. Phys 119, 3025 (2003)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_intro.txt b/doc/html/_sources/Section_intro.txt
deleted file mode 100644
index 2279a01ab..000000000
--- a/doc/html/_sources/Section_intro.txt
+++ /dev/null
@@ -1,594 +0,0 @@
-Introduction
-============
-
-This section provides an overview of what LAMMPS can and can't do,
-describes what it means for LAMMPS to be an open-source code, and
-acknowledges the funding and people who have contributed to LAMMPS
-over the years.
-
-| 1.1 :ref:`What is LAMMPS <intro_1>`
-| 1.2 :ref:`LAMMPS features <intro_2>`
-| 1.3 :ref:`LAMMPS non-features <intro_3>`
-| 1.4 :ref:`Open source distribution <intro_4>`
-| 1.5 :ref:`Acknowledgments and citations <intro_5>`
-|
-
-
-
-
-
-.. _intro_1:
-
-What is LAMMPS
---------------
-
-LAMMPS is a classical molecular dynamics code that models an ensemble
-of particles in a liquid, solid, or gaseous state. It can model
-atomic, polymeric, biological, metallic, granular, and coarse-grained
-systems using a variety of force fields and boundary conditions.
-
-For examples of LAMMPS simulations, see the Publications page of the
-`LAMMPS WWW Site <lws_>`_.
-
-LAMMPS runs efficiently on single-processor desktop or laptop
-machines, but is designed for parallel computers. It will run on any
-parallel machine that compiles C++ and supports the `MPI <mpi_>`_
-message-passing library. This includes distributed- or shared-memory
-parallel machines and Beowulf-style clusters.
-
-.. _mpi: http://www-unix.mcs.anl.gov/mpi
-
-
-
-LAMMPS can model systems with only a few particles up to millions or
-billions. See :doc:`Section_perf <Section_perf>` for information on
-LAMMPS performance and scalability, or the Benchmarks section of the
-`LAMMPS WWW Site <lws_>`_.
-
-LAMMPS is a freely-available open-source code, distributed under the
-terms of the `GNU Public License <gnu_>`_, which means you can use or
-modify the code however you wish. See :ref:`this section <intro_4>` for a
-brief discussion of the open-source philosophy.
-
-.. _gnu: http://www.gnu.org/copyleft/gpl.html
-
-
-
-LAMMPS is designed to be easy to modify or extend with new
-capabilities, such as new force fields, atom types, boundary
-conditions, or diagnostics. See :doc:`Section_modify <Section_modify>`
-for more details.
-
-The current version of LAMMPS is written in C++. Earlier versions
-were written in F77 and F90. See
-:doc:`Section_history <Section_history>` for more information on
-different versions. All versions can be downloaded from the `LAMMPS WWW Site <lws_>`_.
-
-LAMMPS was originally developed under a US Department of Energy CRADA
-(Cooperative Research and Development Agreement) between two DOE labs
-and 3 companies. It is distributed by `Sandia National Labs <snl_>`_.
-See :ref:`this section <intro_5>` for more information on LAMMPS funding and
-individuals who have contributed to LAMMPS.
-
-.. _snl: http://www.sandia.gov
-
-
-
-In the most general sense, LAMMPS integrates Newton's equations of
-motion for collections of atoms, molecules, or macroscopic particles
-that interact via short- or long-range forces with a variety of
-initial and/or boundary conditions. For computational efficiency
-LAMMPS uses neighbor lists to keep track of nearby particles. The
-lists are optimized for systems with particles that are repulsive at
-short distances, so that the local density of particles never becomes
-too large. On parallel machines, LAMMPS uses spatial-decomposition
-techniques to partition the simulation domain into small 3d
-sub-domains, one of which is assigned to each processor. Processors
-communicate and store "ghost" atom information for atoms that border
-their sub-domain. LAMMPS is most efficient (in a parallel sense) for
-systems whose particles fill a 3d rectangular box with roughly uniform
-density. Papers with technical details of the algorithms used in
-LAMMPS are listed in :ref:`this section <intro_5>`.
-
-
-----------
-
-
-.. _intro_2:
-
-LAMMPS features
----------------
-
-This section highlights LAMMPS features, with pointers to specific
-commands which give more details. If LAMMPS doesn't have your
-favorite interatomic potential, boundary condition, or atom type, see
-:doc:`Section_modify <Section_modify>`, which describes how you can add
-it to LAMMPS.
-
-General features
-^^^^^^^^^^^^^^^^
-
-* runs on a single processor or in parallel
-* distributed-memory message-passing parallelism (MPI)
-* spatial-decomposition of simulation domain for parallelism
-* open-source distribution
-* highly portable C++
-* optional libraries used: MPI and single-processor FFT
-* GPU (CUDA and OpenCL), Intel(R) Xeon Phi(TM) coprocessors, and OpenMP support for many code features
-* easy to extend with new features and functionality
-* runs from an input script
-* syntax for defining and using variables and formulas
-* syntax for looping over runs and breaking out of loops
-* run one or multiple simulations simultaneously (in parallel) from one script
-* build as library, invoke LAMMPS thru library interface or provided Python wrapper
-* couple with other codes: LAMMPS calls other code, other code calls LAMMPS, umbrella code calls both
-
-Particle and model types
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-(:doc:`atom style <atom_style>` command)
-
-* atoms
-* coarse-grained particles (e.g. bead-spring polymers)
-* united-atom polymers or organic molecules
-* all-atom polymers, organic molecules, proteins, DNA
-* metals
-* granular materials
-* coarse-grained mesoscale models
-* finite-size spherical and ellipsoidal particles
-* finite-size line segment (2d) and triangle (3d) particles
-* point dipole particles
-* rigid collections of particles
-* hybrid combinations of these
-
-Force fields
-^^^^^^^^^^^^
-
-(:doc:`pair style <pair_style>`, :doc:`bond style <bond_style>`,
-:doc:`angle style <angle_style>`, :doc:`dihedral style <dihedral_style>`,
-:doc:`improper style <improper_style>`, :doc:`kspace style <kspace_style>`
-commands)
-
-* pairwise potentials: Lennard-Jones, Buckingham, Morse, Born-Mayer-Huggins, Yukawa, soft, class 2 (COMPASS), hydrogen bond, tabulated
-* charged pairwise potentials: Coulombic, point-dipole
-* manybody potentials: EAM, Finnis/Sinclair EAM, modified EAM (MEAM), embedded ion method (EIM), EDIP, ADP, Stillinger-Weber, Tersoff, REBO, AIREBO, ReaxFF, COMB, SNAP, Streitz-Mintmire, 3-body polymorphic
-* long-range interactions for charge, point-dipoles, and LJ dispersion: Ewald, Wolf, PPPM (similar to particle-mesh Ewald)
-* polarization models: :doc:`QEq <fix_qeq>`, :ref:`core/shell model <howto_26>`, :ref:`Drude dipole model <howto_27>`
-* charge equilibration (QEq via dynamic, point, shielded, Slater methods)
-* coarse-grained potentials: DPD, GayBerne, REsquared, colloidal, DLVO
-* mesoscopic potentials: granular, Peridynamics, SPH
-* electron force field (eFF, AWPMD)
-* bond potentials: harmonic, FENE, Morse, nonlinear, class 2, quartic (breakable)
-* angle potentials: harmonic, CHARMM, cosine, cosine/squared, cosine/periodic, class 2 (COMPASS)
-* dihedral potentials: harmonic, CHARMM, multi-harmonic, helix, class 2 (COMPASS), OPLS
-* improper potentials: harmonic, cvff, umbrella, class 2 (COMPASS)
-* polymer potentials: all-atom, united-atom, bead-spring, breakable
-* water potentials: TIP3P, TIP4P, SPC
-* implicit solvent potentials: hydrodynamic lubrication, Debye
-* force-field compatibility with common CHARMM, AMBER, DREIDING, OPLS, GROMACS, COMPASS options
-* access to `KIM archive <http://openkim.org>`_ of potentials via :doc:`pair kim <pair_kim>`
-* hybrid potentials: multiple pair, bond, angle, dihedral, improper potentials can be used in one simulation
-* overlaid potentials: superposition of multiple pair potentials
-
-Atom creation
-^^^^^^^^^^^^^
-
-(:doc:`read_data <read_data>`, :doc:`lattice <lattice>`,
-:doc:`create_atoms <create_atoms>`, :doc:`delete_atoms <delete_atoms>`,
-:doc:`displace_atoms <displace_atoms>`, :doc:`replicate <replicate>` commands)
-
-* read in atom coords from files
-* create atoms on one or more lattices (e.g. grain boundaries)
-* delete geometric or logical groups of atoms (e.g. voids)
-* replicate existing atoms multiple times
-* displace atoms
-
-Ensembles, constraints, and boundary conditions
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-(:doc:`fix <fix>` command)
-
-* 2d or 3d systems
-* orthogonal or non-orthogonal (triclinic symmetry) simulation domains
-* constant NVE, NVT, NPT, NPH, Parinello/Rahman integrators
-* thermostatting options for groups and geometric regions of atoms
-* pressure control via Nose/Hoover or Berendsen barostatting in 1 to 3 dimensions
-* simulation box deformation (tensile and shear)
-* harmonic (umbrella) constraint forces
-* rigid body constraints
-* SHAKE bond and angle constraints
-* Monte Carlo bond breaking, formation, swapping
-* atom/molecule insertion and deletion
-* walls of various kinds
-* non-equilibrium molecular dynamics (NEMD)
-* variety of additional boundary conditions and constraints
-
-Integrators
-^^^^^^^^^^^
-
-(:doc:`run <run>`, :doc:`run_style <run_style>`, :doc:`minimize <minimize>` commands)
-
-* velocity-Verlet integrator
-* Brownian dynamics
-* rigid body integration
-* energy minimization via conjugate gradient or steepest descent relaxation
-* rRESPA hierarchical timestepping
-* rerun command for post-processing of dump files
-
-Diagnostics
-^^^^^^^^^^^
-
-* see the various flavors of the :doc:`fix <fix>` and :doc:`compute <compute>` commands
-
-Output
-^^^^^^
-
-(:doc:`dump <dump>`, :doc:`restart <restart>` commands)
-
-* log file of thermodynamic info
-* text dump files of atom coords, velocities, other per-atom quantities
-* binary restart files
-* parallel I/O of dump and restart files
-* per-atom quantities (energy, stress, centro-symmetry parameter, CNA, etc)
-* user-defined system-wide (log file) or per-atom (dump file) calculations
-* spatial and time averaging of per-atom quantities
-* time averaging of system-wide quantities
-* atom snapshots in native, XYZ, XTC, DCD, CFG formats
-
-Multi-replica models
-^^^^^^^^^^^^^^^^^^^^
-
-:doc:`nudged elastic band <neb>`
-:doc:`parallel replica dynamics <prd>`
-:doc:`temperature accelerated dynamics <tad>`
-:doc:`parallel tempering <temper>`
-
-Pre- and post-processing
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-* Various pre- and post-processing serial tools are packaged
- with LAMMPS; see these :doc:`doc pages <Section_tools>`.
-* Our group has also written and released a separate toolkit called
- `Pizza.py <pizza_>`_ which provides tools for doing setup, analysis,
- plotting, and visualization for LAMMPS simulations. Pizza.py is
- written in `Python <python_>`_ and is available for download from `the Pizza.py WWW site <pizza_>`_.
-.. _pizza: http://www.sandia.gov/~sjplimp/pizza.html
-
-
-
-.. _python: http://www.python.org
-
-
-
-Specialized features
-^^^^^^^^^^^^^^^^^^^^
-
-These are LAMMPS capabilities which you may not think of as typical
-molecular dynamics options:
-
-* :doc:`static <balance>` and :doc:`dynamic load-balancing <fix_balance>`
-* :doc:`generalized aspherical particles <body>`
-* :doc:`stochastic rotation dynamics (SRD) <fix_srd>`
-* :doc:`real-time visualization and interactive MD <fix_imd>`
-* calculate :doc:`virtual diffraction patterns <compute_xrd>`
-* :doc:`atom-to-continuum coupling <fix_atc>` with finite elements
-* coupled rigid body integration via the :doc:`POEMS <fix_poems>` library
-* :doc:`QM/MM coupling <fix_qmmm>`
-* :doc:`path-integral molecular dynamics (PIMD) <fix_ipi>` and :doc:`this as well <fix_pimd>`
-* Monte Carlo via :doc:`GCMC <fix_gcmc>` and :doc:`tfMC <fix_tfmc>` and :doc:`atom swapping <fix_swap>`
-* :doc:`Direct Simulation Monte Carlo <pair_dsmc>` for low-density fluids
-* :doc:`Peridynamics mesoscale modeling <pair_peri>`
-* :doc:`Lattice Boltzmann fluid <fix_lb_fluid>`
-* :doc:`targeted <fix_tmd>` and :doc:`steered <fix_smd>` molecular dynamics
-* :doc:`two-temperature electron model <fix_ttm>`
-
-
-----------
-
-
-.. _intro_3:
-
-LAMMPS non-features
--------------------
-
-LAMMPS is designed to efficiently compute Newton's equations of motion
-for a system of interacting particles. Many of the tools needed to
-pre- and post-process the data for such simulations are not included
-in the LAMMPS kernel for several reasons:
-
-* the desire to keep LAMMPS simple
-* they are not parallel operations
-* other codes already do them
-* limited development resources
-
-Specifically, LAMMPS itself does not:
-
-* run thru a GUI
-* build molecular systems
-* assign force-field coefficients automagically
-* perform sophisticated analyses of your MD simulation
-* visualize your MD simulation
-* plot your output data
-
-A few tools for pre- and post-processing tasks are provided as part of
-the LAMMPS package; they are described in :doc:`this section <Section_tools>`. However, many people use other codes or
-write their own tools for these tasks.
-
-As noted above, our group has also written and released a separate
-toolkit called `Pizza.py <pizza_>`_ which addresses some of the listed
-bullets. It provides tools for doing setup, analysis, plotting, and
-visualization for LAMMPS simulations. Pizza.py is written in
-`Python <python_>`_ and is available for download from `the Pizza.py WWW site <pizza_>`_.
-
-LAMMPS requires as input a list of initial atom coordinates and types,
-molecular topology information, and force-field coefficients assigned
-to all atoms and bonds. LAMMPS will not build molecular systems and
-assign force-field parameters for you.
-
-For atomic systems LAMMPS provides a :doc:`create_atoms <create_atoms>`
-command which places atoms on solid-state lattices (fcc, bcc,
-user-defined, etc). Assigning small numbers of force field
-coefficients can be done via the :doc:`pair coeff <pair_coeff>`, :doc:`bond coeff <bond_coeff>`, :doc:`angle coeff <angle_coeff>`, etc commands.
-For molecular systems or more complicated simulation geometries, users
-typically use another code as a builder and convert its output to
-LAMMPS input format, or write their own code to generate atom
-coordinate and molecular topology for LAMMPS to read in.
-
-For complicated molecular systems (e.g. a protein), a multitude of
-topology information and hundreds of force-field coefficients must
-typically be specified. We suggest you use a program like
-`CHARMM <charmm_>`_ or `AMBER <amber_>`_ or other molecular builders to setup
-such problems and dump its information to a file. You can then
-reformat the file as LAMMPS input. Some of the tools in :doc:`this section <Section_tools>` can assist in this process.
-
-Similarly, LAMMPS creates output files in a simple format. Most users
-post-process these files with their own analysis tools or re-format
-them for input into other programs, including visualization packages.
-If you are convinced you need to compute something on-the-fly as
-LAMMPS runs, see :doc:`Section_modify <Section_modify>` for a discussion
-of how you can use the :doc:`dump <dump>` and :doc:`compute <compute>` and
-:doc:`fix <fix>` commands to print out data of your choosing. Keep in
-mind that complicated computations can slow down the molecular
-dynamics timestepping, particularly if the computations are not
-parallel, so it is often better to leave such analysis to
-post-processing codes.
-
-A very simple (yet fast) visualizer is provided with the LAMMPS
-package - see the :ref:`xmovie <xmovie>` tool in :doc:`this section <Section_tools>`. It creates xyz projection views of
-atomic coordinates and animates them. We find it very useful for
-debugging purposes. For high-quality visualization we recommend the
-following packages:
-
-* `VMD <http://www.ks.uiuc.edu/Research/vmd>`_
-* `AtomEye <http://mt.seas.upenn.edu/Archive/Graphics/A>`_
-* `PyMol <http://pymol.sourceforge.net>`_
-* `Raster3d <http://www.bmsc.washington.edu/raster3d/raster3d.html>`_
-* `RasMol <http://www.openrasmol.org>`_
-
-Other features that LAMMPS does not yet (and may never) support are
-discussed in :doc:`Section_history <Section_history>`.
-
-Finally, these are freely-available molecular dynamics codes, most of
-them parallel, which may be well-suited to the problems you want to
-model. They can also be used in conjunction with LAMMPS to perform
-complementary modeling tasks.
-
-* `CHARMM <charmm_>`_
-* `AMBER <amber_>`_
-* `NAMD <namd_>`_
-* `NWCHEM <nwchem_>`_
-* `DL_POLY <dlpoly_>`_
-* `Tinker <tinker_>`_
-
-.. _charmm: http://www.scripps.edu/brooks
-
-
-
-.. _amber: http://amber.scripps.edu
-
-
-
-.. _namd: http://www.ks.uiuc.edu/Research/namd/
-
-
-
-.. _nwchem: http://www.emsl.pnl.gov/docs/nwchem/nwchem.html
-
-
-
-.. _dlpoly: http://www.cse.clrc.ac.uk/msi/software/DL_POLY
-
-
-
-.. _tinker: http://dasher.wustl.edu/tinker
-
-
-
-CHARMM, AMBER, NAMD, NWCHEM, and Tinker are designed primarily for
-modeling biological molecules. CHARMM and AMBER use
-atom-decomposition (replicated-data) strategies for parallelism; NAMD
-and NWCHEM use spatial-decomposition approaches, similar to LAMMPS.
-Tinker is a serial code. DL_POLY includes potentials for a variety of
-biological and non-biological materials; both a replicated-data and
-spatial-decomposition version exist.
-
-
-----------
-
-
-.. _intro_4:
-
-Open source distribution
-------------------------
-
-LAMMPS comes with no warranty of any kind. As each source file states
-in its header, it is a copyrighted code that is distributed free-of-
-charge, under the terms of the `GNU Public License <gnu_>`_ (GPL). This
-is often referred to as open-source distribution - see
-`www.gnu.org <gnuorg_>`_ or `www.opensource.org <opensource_>`_ for more
-details. The legal text of the GPL is in the LICENSE file that is
-included in the LAMMPS distribution.
-
-.. _gnuorg: http://www.gnu.org
-
-
-
-.. _opensource: http://www.opensource.org
-
-
-
-Here is a summary of what the GPL means for LAMMPS users:
-
-(1) Anyone is free to use, modify, or extend LAMMPS in any way they
-choose, including for commercial purposes.
-
-(2) If you distribute a modified version of LAMMPS, it must remain
-open-source, meaning you distribute it under the terms of the GPL.
-You should clearly annotate such a code as a derivative version of
-LAMMPS.
-
-(3) If you release any code that includes LAMMPS source code, then it
-must also be open-sourced, meaning you distribute it under the terms
-of the GPL.
-
-(4) If you give LAMMPS files to someone else, the GPL LICENSE file and
-source file headers (including the copyright and GPL notices) should
-remain part of the code.
-
-In the spirit of an open-source code, these are various ways you can
-contribute to making LAMMPS better. You can send email to the
-`developers <http://lammps.sandia.gov/authors.html>`_ on any of these
-items.
-
-* Point prospective users to the `LAMMPS WWW Site <lws_>`_. Mention it in
- talks or link to it from your WWW site.
-* If you find an error or omission in this manual or on the `LAMMPS WWW Site <lws_>`_, or have a suggestion for something to clarify or include,
- send an email to the
- `developers <http://lammps.sandia.gov/authors.html>`_.
-* If you find a bug, :ref:`Section_errors 2 <err_2>`
- describes how to report it.
-* If you publish a paper using LAMMPS results, send the citation (and
- any cool pictures or movies if you like) to add to the Publications,
- Pictures, and Movies pages of the `LAMMPS WWW Site <lws_>`_, with links
- and attributions back to you.
-* Create a new Makefile.machine that can be added to the src/MAKE
- directory.
-* The tools sub-directory of the LAMMPS distribution has various
- stand-alone codes for pre- and post-processing of LAMMPS data. More
- details are given in :doc:`Section_tools <Section_tools>`. If you write
- a new tool that users will find useful, it can be added to the LAMMPS
- distribution.
-* LAMMPS is designed to be easy to extend with new code for features
- like potentials, boundary conditions, diagnostic computations, etc.
- :doc:`This section <Section_modify>` gives details. If you add a
- feature of general interest, it can be added to the LAMMPS
- distribution.
-* The Benchmark page of the `LAMMPS WWW Site <lws_>`_ lists LAMMPS
- performance on various platforms. The files needed to run the
- benchmarks are part of the LAMMPS distribution. If your machine is
- sufficiently different from those listed, your timing data can be
- added to the page.
-* You can send feedback for the User Comments page of the `LAMMPS WWW Site <lws_>`_. It might be added to the page. No promises.
-* Cash. Small denominations, unmarked bills preferred. Paper sack OK.
- Leave on desk. VISA also accepted. Chocolate chip cookies
- encouraged.
-
-
-----------
-
-
-.. _intro_5:
-
-Acknowledgments and citations
--------------------------------------------
-
-LAMMPS development has been funded by the `US Department of Energy <doe_>`_ (DOE), through its CRADA, LDRD, ASCI, and Genomes-to-Life
-programs and its `OASCR <oascr_>`_ and `OBER <ober_>`_ offices.
-
-Specifically, work on the latest version was funded in part by the US
-Department of Energy's Genomics:GTL program
-(`www.doegenomestolife.org <gtl_>`_) under the `project <ourgtl_>`_, "Carbon
-Sequestration in Synechococcus Sp.: From Molecular Machines to
-Hierarchical Modeling".
-
-.. _doe: http://www.doe.gov
-
-
-
-.. _gtl: http://www.doegenomestolife.org
-
-
-
-.. _ourgtl: http://www.genomes2life.org
-
-
-
-.. _oascr: http://www.sc.doe.gov/ascr/home.html
-
-
-
-.. _ober: http://www.er.doe.gov/production/ober/ober_top.html
-
-
-
-The following paper describe the basic parallel algorithms used in
-LAMMPS. If you use LAMMPS results in your published work, please cite
-this paper and include a pointer to the `LAMMPS WWW Site <lws_>`_
-(http://lammps.sandia.gov):
-
-S. Plimpton, **Fast Parallel Algorithms for Short-Range Molecular
-Dynamics**\ , J Comp Phys, 117, 1-19 (1995).
-
-Other papers describing specific algorithms used in LAMMPS are listed
-under the `Citing LAMMPS link <http://lammps.sandia.gov/cite.html>`_ of
-the LAMMPS WWW page.
-
-The `Publications link <http://lammps.sandia.gov/papers.html>`_ on the
-LAMMPS WWW page lists papers that have cited LAMMPS. If your paper is
-not listed there for some reason, feel free to send us the info. If
-the simulations in your paper produced cool pictures or animations,
-we'll be pleased to add them to the
-`Pictures <http://lammps.sandia.gov/pictures.html>`_ or
-`Movies <http://lammps.sandia.gov/movies.html>`_ pages of the LAMMPS WWW
-site.
-
-The core group of LAMMPS developers is at Sandia National Labs:
-
-* Steve Plimpton, sjplimp at sandia.gov
-* Aidan Thompson, athomps at sandia.gov
-* Paul Crozier, pscrozi at sandia.gov
-
-The following folks are responsible for significant contributions to
-the code, or other aspects of the LAMMPS development effort. Many of
-the packages they have written are somewhat unique to LAMMPS and the
-code would not be as general-purpose as it is without their expertise
-and efforts.
-
-* Axel Kohlmeyer (Temple U), akohlmey at gmail.com, SVN and Git repositories, indefatigable mail list responder, USER-CG-CMM and USER-OMP packages
-* Roy Pollock (LLNL), Ewald and PPPM solvers
-* Mike Brown (ORNL), brownw at ornl.gov, GPU package
-* Greg Wagner (Sandia), gjwagne at sandia.gov, MEAM package for MEAM potential
-* Mike Parks (Sandia), mlparks at sandia.gov, PERI package for Peridynamics
-* Rudra Mukherjee (JPL), Rudranarayan.M.Mukherjee at jpl.nasa.gov, POEMS package for articulated rigid body motion
-* Reese Jones (Sandia) and collaborators, rjones at sandia.gov, USER-ATC package for atom/continuum coupling
-* Ilya Valuev (JIHT), valuev at physik.hu-berlin.de, USER-AWPMD package for wave-packet MD
-* Christian Trott (U Tech Ilmenau), christian.trott at tu-ilmenau.de, USER-CUDA package
-* Andres Jaramillo-Botero (Caltech), ajaramil at wag.caltech.edu, USER-EFF package for electron force field
-* Christoph Kloss (JKU), Christoph.Kloss at jku.at, USER-LIGGGHTS package for granular models and granular/fluid coupling
-* Metin Aktulga (LBL), hmaktulga at lbl.gov, USER-REAXC package for C version of ReaxFF
-* Georg Gunzenmuller (EMI), georg.ganzenmueller at emi.fhg.de, USER-SPH package
-
-As discussed in :doc:`Section_history <Section_history>`, LAMMPS
-originated as a cooperative project between DOE labs and industrial
-partners. Folks involved in the design and testing of the original
-version of LAMMPS were the following:
-
-* John Carpenter (Mayo Clinic, formerly at Cray Research)
-* Terry Stouch (Lexicon Pharmaceuticals, formerly at Bristol Myers Squibb)
-* Steve Lustig (Dupont)
-* Jim Belak (LLNL)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_modify.txt b/doc/html/_sources/Section_modify.txt
deleted file mode 100644
index 1edee2bf2..000000000
--- a/doc/html/_sources/Section_modify.txt
+++ /dev/null
@@ -1,993 +0,0 @@
-Modifying & extending LAMMPS
-============================
-
-This section describes how to customize LAMMPS by modifying
-and extending its source code.
-
-| 10.1 :ref:`Atom styles <mod_1>`
-| 10.2 :ref:`Bond, angle, dihedral, improper potentials <mod_2>`
-| 10.3 :ref:`Compute styles <mod_3>`
-| 10.4 :ref:`Dump styles <mod_4>`
-| 10.5 :ref:`Dump custom output options <mod_5>`
-| 10.6 :ref:`Fix styles <mod_6>` which include integrators, temperature and pressure control, force constraints, boundary conditions, diagnostic output, etc
-| 10.7 :ref:`Input script commands <mod_7>`
-| 10.8 :ref:`Kspace computations <mod_8>`
-| 10.9 :ref:`Minimization styles <mod_9>`
-| 10.10 :ref:`Pairwise potentials <mod_10>`
-| 10.11 :ref:`Region styles <mod_11>`
-| 10.12 :ref:`Body styles <mod_12>`
-| 10.13 :ref:`Thermodynamic output options <mod_13>`
-| 10.14 :ref:`Variable options <mod_14>`
-| 10.15 :ref:`Submitting new features for inclusion in LAMMPS <mod_15>`
-|
-
-LAMMPS is designed in a modular fashion so as to be easy to modify and
-extend with new functionality. In fact, about 75% of its source code
-is files added in this fashion.
-
-In this section, changes and additions users can make are listed along
-with minimal instructions. If you add a new feature to LAMMPS and
-think it will be of interest to general users, we encourage you to
-submit it to the developers for inclusion in the released version of
-LAMMPS. Information about how to do this is provided
-:ref:`below <mod_14>`.
-
-The best way to add a new feature is to find a similar feature in
-LAMMPS and look at the corresponding source and header files to figure
-out what it does. You will need some knowledge of C++ to be able to
-understand the hi-level structure of LAMMPS and its class
-organization, but functions (class methods) that do actual
-computations are written in vanilla C-style code and operate on simple
-C-style data structures (vectors and arrays).
-
-Most of the new features described in this section require you to
-write a new C++ derived class (except for exceptions described below,
-where you can make small edits to existing files). Creating a new
-class requires 2 files, a source code file (*.cpp) and a header file
-(*.h). The derived class must provide certain methods to work as a
-new option. Depending on how different your new feature is compared
-to existing features, you can either derive from the base class
-itself, or from a derived class that already exists. Enabling LAMMPS
-to invoke the new class is as simple as putting the two source
-files in the src dir and re-building LAMMPS.
-
-The advantage of C++ and its object-orientation is that all the code
-and variables needed to define the new feature are in the 2 files you
-write, and thus shouldn't make the rest of LAMMPS more complex or
-cause side-effect bugs.
-
-Here is a concrete example. Suppose you write 2 files pair_foo.cpp
-and pair_foo.h that define a new class PairFoo that computes pairwise
-potentials described in the classic 1997 :ref:`paper <Foo>` by Foo, et al.
-If you wish to invoke those potentials in a LAMMPS input script with a
-command like
-
-.. parsed-literal::
-
- pair_style foo 0.1 3.5
-
-then your pair_foo.h file should be structured as follows:
-
-.. parsed-literal::
-
- #ifdef PAIR_CLASS
- PairStyle(foo,PairFoo)
- #else
- ...
- (class definition for PairFoo)
- ...
- #endif
-
-where "foo" is the style keyword in the pair_style command, and
-PairFoo is the class name defined in your pair_foo.cpp and pair_foo.h
-files.
-
-When you re-build LAMMPS, your new pairwise potential becomes part of
-the executable and can be invoked with a pair_style command like the
-example above. Arguments like 0.1 and 3.5 can be defined and
-processed by your new class.
-
-As illustrated by this pairwise example, many kinds of options are
-referred to in the LAMMPS documentation as the "style" of a particular
-command.
-
-The instructions below give the header file for the base class that
-these styles are derived from. Public variables in that file are ones
-used and set by the derived classes which are also used by the base
-class. Sometimes they are also used by the rest of LAMMPS. Virtual
-functions in the base class header file which are set = 0 are ones you
-must define in your new derived class to give it the functionality
-LAMMPS expects. Virtual functions that are not set to 0 are functions
-you can optionally define.
-
-Additionally, new output options can be added directly to the
-thermo.cpp, dump_custom.cpp, and variable.cpp files as explained
-below.
-
-Here are additional guidelines for modifying LAMMPS and adding new
-functionality:
-
-* Think about whether what you want to do would be better as a pre- or
- post-processing step. Many computations are more easily and more
- quickly done that way.
-* Don't do anything within the timestepping of a run that isn't
- parallel. E.g. don't accumulate a bunch of data on a single processor
- and analyze it. You run the risk of seriously degrading the parallel
- efficiency.
-* If your new feature reads arguments or writes output, make sure you
- follow the unit conventions discussed by the :doc:`units <units>`
- command.
-* If you add something you think is truly useful and doesn't impact
- LAMMPS performance when it isn't used, send an email to the
- `developers <http://lammps.sandia.gov/authors.html>`_. We might be
- interested in adding it to the LAMMPS distribution. See further
- details on this at the bottom of this page.
-
-
-
-
-.. _mod_1:
-
-Atom styles
------------
-
-Classes that define an :doc:`atom style <atom_style>` are derived from
-the AtomVec class and managed by the Atom class. The atom style
-determines what attributes are associated with an atom. A new atom
-style can be created if one of the existing atom styles does not
-define all the attributes you need to store and communicate with
-atoms.
-
-Atom_vec_atomic.cpp is a simple example of an atom style.
-
-Here is a brief description of methods you define in your new derived
-class. See atom_vec.h for details.
-
-+-----------------------+--------------------------------------------------------------------------------+
-| init | one time setup (optional) |
-+-----------------------+--------------------------------------------------------------------------------+
-| grow | re-allocate atom arrays to longer lengths (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| grow_reset | make array pointers in Atom and AtomVec classes consistent (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| copy | copy info for one atom to another atom's array locations (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| pack_comm | store an atom's info in a buffer communicated every timestep (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| pack_comm_vel | add velocity info to communication buffer (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| pack_comm_hybrid | store extra info unique to this atom style (optional) |
-+-----------------------+--------------------------------------------------------------------------------+
-| unpack_comm | retrieve an atom's info from the buffer (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| unpack_comm_vel | also retrieve velocity info (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| unpack_comm_hybrid | retreive extra info unique to this atom style (optional) |
-+-----------------------+--------------------------------------------------------------------------------+
-| pack_reverse | store an atom's info in a buffer communicating partial forces (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| pack_reverse_hybrid | store extra info unique to this atom style (optional) |
-+-----------------------+--------------------------------------------------------------------------------+
-| unpack_reverse | retrieve an atom's info from the buffer (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| unpack_reverse_hybrid | retreive extra info unique to this atom style (optional) |
-+-----------------------+--------------------------------------------------------------------------------+
-| pack_border | store an atom's info in a buffer communicated on neighbor re-builds (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| pack_border_vel | add velocity info to buffer (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| pack_border_hybrid | store extra info unique to this atom style (optional) |
-+-----------------------+--------------------------------------------------------------------------------+
-| unpack_border | retrieve an atom's info from the buffer (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| unpack_border_vel | also retrieve velocity info (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| unpack_border_hybrid | retreive extra info unique to this atom style (optional) |
-+-----------------------+--------------------------------------------------------------------------------+
-| pack_exchange | store all an atom's info to migrate to another processor (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| unpack_exchange | retrieve an atom's info from the buffer (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| size_restart | number of restart quantities associated with proc's atoms (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| pack_restart | pack atom quantities into a buffer (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| unpack_restart | unpack atom quantities from a buffer (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| create_atom | create an individual atom of this style (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| data_atom | parse an atom line from the data file (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-| data_atom_hybrid | parse additional atom info unique to this atom style (optional) |
-+-----------------------+--------------------------------------------------------------------------------+
-| data_vel | parse one line of velocity information from data file (optional) |
-+-----------------------+--------------------------------------------------------------------------------+
-| data_vel_hybrid | parse additional velocity data unique to this atom style (optional) |
-+-----------------------+--------------------------------------------------------------------------------+
-| memory_usage | tally memory allocated by atom arrays (required) |
-+-----------------------+--------------------------------------------------------------------------------+
-
-The constructor of the derived class sets values for several variables
-that you must set when defining a new atom style, which are documented
-in atom_vec.h. New atom arrays are defined in atom.cpp. Search for
-the word "customize" and you will find locations you will need to
-modify.
-
-.. note::
-
- It is possible to add some attributes, such as a molecule ID, to
- atom styles that do not have them via the :doc:`fix property/atom <fix_property_atom>` command. This command also
- allows new custom attributes consisting of extra integer or
- floating-point values to be added to atoms. See the :doc:`fix property/atom <fix_property_atom>` doc page for examples of cases
- where this is useful and details on how to initialize, access, and
- output the custom values.
-
-New :doc:`pair styles <pair_style>`, :doc:`fixes <fix>`, or
-:doc:`computes <compute>` can be added to LAMMPS, as discussed below.
-The code for these classes can use the per-atom properties defined by
-fix property/atom. The Atom class has a find_custom() method that is
-useful in this context:
-
-.. parsed-literal::
-
- int index = atom->find_custom(char *name, int &flag);
-
-The "name" of a custom attribute, as specified in the :doc:`fix property/atom <fix_property_atom>` command, is checked to verify
-that it exists and its index is returned. The method also sets flag =
-0/1 depending on whether it is an integer or floating-point attribute.
-The vector of values associated with the attribute can then be
-accessed using the returned index as
-
-.. parsed-literal::
-
- int *ivector = atom->ivector[index];
- double *dvector = atom->dvector[index];
-
-Ivector or dvector are vectors of length Nlocal = # of owned atoms,
-which store the attributes of individual atoms.
-
-
-----------
-
-
-.. _mod_2:
-
-Bond, angle, dihedral, improper potentials
-------------------------------------------
-
-Classes that compute molecular interactions are derived from the Bond,
-Angle, Dihedral, and Improper classes. New styles can be created to
-add new potentials to LAMMPS.
-
-Bond_harmonic.cpp is the simplest example of a bond style. Ditto for
-the harmonic forms of the angle, dihedral, and improper style
-commands.
-
-Here is a brief description of common methods you define in your
-new derived class. See bond.h, angle.h, dihedral.h, and improper.h
-for details and specific additional methods.
-
-+----------------------+---------------------------------------------------------------------------+
-| init | check if all coefficients are set, calls *init_style* (optional) |
-+----------------------+---------------------------------------------------------------------------+
-| init_style | check if style specific conditions are met (optional) |
-+----------------------+---------------------------------------------------------------------------+
-| compute | compute the molecular interactions (required) |
-+----------------------+---------------------------------------------------------------------------+
-| settings | apply global settings for all types (optional) |
-+----------------------+---------------------------------------------------------------------------+
-| coeff | set coefficients for one type (required) |
-+----------------------+---------------------------------------------------------------------------+
-| equilibrium_distance | length of bond, used by SHAKE (required, bond only) |
-+----------------------+---------------------------------------------------------------------------+
-| equilibrium_angle | opening of angle, used by SHAKE (required, angle only) |
-+----------------------+---------------------------------------------------------------------------+
-| write & read_restart | writes/reads coeffs to restart files (required) |
-+----------------------+---------------------------------------------------------------------------+
-| single | force and energy of a single bond or angle (required, bond or angle only) |
-+----------------------+---------------------------------------------------------------------------+
-| memory_usage | tally memory allocated by the style (optional) |
-+----------------------+---------------------------------------------------------------------------+
-
-
-----------
-
-
-.. _mod_3:
-
-Compute styles
---------------
-
-Classes that compute scalar and vector quantities like temperature
-and the pressure tensor, as well as classes that compute per-atom
-quantities like kinetic energy and the centro-symmetry parameter
-are derived from the Compute class. New styles can be created
-to add new calculations to LAMMPS.
-
-Compute_temp.cpp is a simple example of computing a scalar
-temperature. Compute_ke_atom.cpp is a simple example of computing
-per-atom kinetic energy.
-
-Here is a brief description of methods you define in your new derived
-class. See compute.h for details.
-
-+---------------------+-----------------------------------------------------------------+
-| init | perform one time setup (required) |
-+---------------------+-----------------------------------------------------------------+
-| init_list | neighbor list setup, if needed (optional) |
-+---------------------+-----------------------------------------------------------------+
-| compute_scalar | compute a scalar quantity (optional) |
-+---------------------+-----------------------------------------------------------------+
-| compute_vector | compute a vector of quantities (optional) |
-+---------------------+-----------------------------------------------------------------+
-| compute_peratom | compute one or more quantities per atom (optional) |
-+---------------------+-----------------------------------------------------------------+
-| compute_local | compute one or more quantities per processor (optional) |
-+---------------------+-----------------------------------------------------------------+
-| pack_comm | pack a buffer with items to communicate (optional) |
-+---------------------+-----------------------------------------------------------------+
-| unpack_comm | unpack the buffer (optional) |
-+---------------------+-----------------------------------------------------------------+
-| pack_reverse | pack a buffer with items to reverse communicate (optional) |
-+---------------------+-----------------------------------------------------------------+
-| unpack_reverse | unpack the buffer (optional) |
-+---------------------+-----------------------------------------------------------------+
-| remove_bias | remove velocity bias from one atom (optional) |
-+---------------------+-----------------------------------------------------------------+
-| remove_bias_all | remove velocity bias from all atoms in group (optional) |
-+---------------------+-----------------------------------------------------------------+
-| restore_bias | restore velocity bias for one atom after remove_bias (optional) |
-+---------------------+-----------------------------------------------------------------+
-| restore_bias_all | same as before, but for all atoms in group (optional) |
-+---------------------+-----------------------------------------------------------------+
-| pair_tally_callback | callback function for *tally*\ -style computes (optional). |
-+---------------------+-----------------------------------------------------------------+
-| memory_usage | tally memory usage (optional) |
-+---------------------+-----------------------------------------------------------------+
-
-Tally-style computes are a special case, as their computation is done
-in two stages: the callback function is registered with the pair style
-and then called from the Pair::ev_tally() function, which is called for
-each pair after force and energy has been computed for this pair. Then
-the tallied values are retrieved with the standard compute_scalar or
-compute_vector or compute_peratom methods. The USER-TALLY package
-provides *examples*\ _compute_tally.html for utilizing this mechanism.
-
-
-----------
-
-
-.. _mod_4:
-
-Dump styles
------------
-
-.. _mod_5:
-
-Dump custom output options
---------------------------
-
-Classes that dump per-atom info to files are derived from the Dump
-class. To dump new quantities or in a new format, a new derived dump
-class can be added, but it is typically simpler to modify the
-DumpCustom class contained in the dump_custom.cpp file.
-
-Dump_atom.cpp is a simple example of a derived dump class.
-
-Here is a brief description of methods you define in your new derived
-class. See dump.h for details.
-
-+--------------+---------------------------------------------------+
-| write_header | write the header section of a snapshot of atoms |
-+--------------+---------------------------------------------------+
-| count | count the number of lines a processor will output |
-+--------------+---------------------------------------------------+
-| pack | pack a proc's output data into a buffer |
-+--------------+---------------------------------------------------+
-| write_data | write a proc's data to a file |
-+--------------+---------------------------------------------------+
-
-See the :doc:`dump <dump>` command and its *custom* style for a list of
-keywords for atom information that can already be dumped by
-DumpCustom. It includes options to dump per-atom info from Compute
-classes, so adding a new derived Compute class is one way to calculate
-new quantities to dump.
-
-Alternatively, you can add new keywords to the dump custom command.
-Search for the word "customize" in dump_custom.cpp to see the
-half-dozen or so locations where code will need to be added.
-
-
-----------
-
-
-.. _mod_6:
-
-Fix styles
-----------
-
-In LAMMPS, a "fix" is any operation that is computed during
-timestepping that alters some property of the system. Essentially
-everything that happens during a simulation besides force computation,
-neighbor list construction, and output, is a "fix". This includes
-time integration (update of coordinates and velocities), force
-constraints or boundary conditions (SHAKE or walls), and diagnostics
-(compute a diffusion coefficient). New styles can be created to add
-new options to LAMMPS.
-
-Fix_setforce.cpp is a simple example of setting forces on atoms to
-prescribed values. There are dozens of fix options already in LAMMPS;
-choose one as a template that is similar to what you want to
-implement.
-
-Here is a brief description of methods you can define in your new
-derived class. See fix.h for details.
-
-+-------------------------+-------------------------------------------------------------------------------------------+
-| setmask | determines when the fix is called during the timestep (required) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| init | initialization before a run (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| setup_pre_exchange | called before atom exchange in setup (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| setup_pre_force | called before force computation in setup (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| setup | called immediately before the 1st timestep and after forces are computed (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| min_setup_pre_force | like setup_pre_force, but for minimizations instead of MD runs (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| min_setup | like setup, but for minimizations instead of MD runs (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| initial_integrate | called at very beginning of each timestep (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| pre_exchange | called before atom exchange on re-neighboring steps (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| pre_neighbor | called before neighbor list build (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| pre_force | called before pair & molecular forces are computed (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| post_force | called after pair & molecular forces are computed and communicated (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| final_integrate | called at end of each timestep (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| end_of_step | called at very end of timestep (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| write_restart | dumps fix info to restart file (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| restart | uses info from restart file to re-initialize the fix (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| grow_arrays | allocate memory for atom-based arrays used by fix (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| copy_arrays | copy atom info when an atom migrates to a new processor (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| pack_exchange | store atom's data in a buffer (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| unpack_exchange | retrieve atom's data from a buffer (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| pack_restart | store atom's data for writing to restart file (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| unpack_restart | retrieve atom's data from a restart file buffer (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| size_restart | size of atom's data (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| maxsize_restart | max size of atom's data (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| setup_pre_force_respa | same as setup_pre_force, but for rRESPA (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| initial_integrate_respa | same as initial_integrate, but for rRESPA (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| post_integrate_respa | called after the first half integration step is done in rRESPA (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| pre_force_respa | same as pre_force, but for rRESPA (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| post_force_respa | same as post_force, but for rRESPA (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| final_integrate_respa | same as final_integrate, but for rRESPA (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| min_pre_force | called after pair & molecular forces are computed in minimizer (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| min_post_force | called after pair & molecular forces are computed and communicated in minmizer (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| min_store | store extra data for linesearch based minimization on a LIFO stack (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| min_pushstore | push the minimization LIFO stack one element down (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| min_popstore | pop the minimization LIFO stack one element up (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| min_clearstore | clear minimization LIFO stack (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| min_step | reset or move forward on line search minimization (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| min_dof | report number of degrees of freedom *added* by this fix in minimization (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| max_alpha | report maximum allowed step size during linesearch minimization (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| pack_comm | pack a buffer to communicate a per-atom quantity (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| unpack_comm | unpack a buffer to communicate a per-atom quantity (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| pack_reverse_comm | pack a buffer to reverse communicate a per-atom quantity (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| unpack_reverse_comm | unpack a buffer to reverse communicate a per-atom quantity (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| dof | report number of degrees of freedom *removed* by this fix during MD (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| compute_scalar | return a global scalar property that the fix computes (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| compute_vector | return a component of a vector property that the fix computes (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| compute_array | return a component of an array property that the fix computes (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| deform | called when the box size is changed (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| reset_target | called when a change of the target temperature is requested during a run (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| reset_dt | is called when a change of the time step is requested during a run (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| modify_param | called when a fix_modify request is executed (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| memory_usage | report memory used by fix (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-| thermo | compute quantities for thermodynamic output (optional) |
-+-------------------------+-------------------------------------------------------------------------------------------+
-
-Typically, only a small fraction of these methods are defined for a
-particular fix. Setmask is mandatory, as it determines when the fix
-will be invoked during the timestep. Fixes that perform time
-integration (\ *nve*\ , *nvt*\ , *npt*\ ) implement initial_integrate() and
-final_integrate() to perform velocity Verlet updates. Fixes that
-constrain forces implement post_force().
-
-Fixes that perform diagnostics typically implement end_of_step(). For
-an end_of_step fix, one of your fix arguments must be the variable
-"nevery" which is used to determine when to call the fix and you must
-set this variable in the constructor of your fix. By convention, this
-is the first argument the fix defines (after the ID, group-ID, style).
-
-If the fix needs to store information for each atom that persists from
-timestep to timestep, it can manage that memory and migrate the info
-with the atoms as they move from processors to processor by
-implementing the grow_arrays, copy_arrays, pack_exchange, and
-unpack_exchange methods. Similarly, the pack_restart and
-unpack_restart methods can be implemented to store information about
-the fix in restart files. If you wish an integrator or force
-constraint fix to work with rRESPA (see the :doc:`run_style <run_style>`
-command), the initial_integrate, post_force_integrate, and
-final_integrate_respa methods can be implemented. The thermo method
-enables a fix to contribute values to thermodynamic output, as printed
-quantities and/or to be summed to the potential energy of the system.
-
-
-----------
-
-
-.. _mod_7:
-
-Input script commands
----------------------
-
-New commands can be added to LAMMPS input scripts by adding new
-classes that have a "command" method. For example, the create_atoms,
-read_data, velocity, and run commands are all implemented in this
-fashion. When such a command is encountered in the LAMMPS input
-script, LAMMPS simply creates a class with the corresponding name,
-invokes the "command" method of the class, and passes it the arguments
-from the input script. The command method can perform whatever
-operations it wishes on LAMMPS data structures.
-
-The single method your new class must define is as follows:
-
-+---------+-----------------------------------------+
-| command | operations performed by the new command |
-+---------+-----------------------------------------+
-
-Of course, the new class can define other methods and variables as
-needed.
-
-
-----------
-
-
-.. _mod_8:
-
-Kspace computations
--------------------
-
-Classes that compute long-range Coulombic interactions via K-space
-representations (Ewald, PPPM) are derived from the KSpace class. New
-styles can be created to add new K-space options to LAMMPS.
-
-Ewald.cpp is an example of computing K-space interactions.
-
-Here is a brief description of methods you define in your new derived
-class. See kspace.h for details.
-
-+--------------+----------------------------------------------+
-| init | initialize the calculation before a run |
-+--------------+----------------------------------------------+
-| setup | computation before the 1st timestep of a run |
-+--------------+----------------------------------------------+
-| compute | every-timestep computation |
-+--------------+----------------------------------------------+
-| memory_usage | tally of memory usage |
-+--------------+----------------------------------------------+
-
-
-----------
-
-
-.. _mod_9:
-
-Minimization styles
--------------------
-
-Classes that perform energy minimization derived from the Min class.
-New styles can be created to add new minimization algorithms to
-LAMMPS.
-
-Min_cg.cpp is an example of conjugate gradient minimization.
-
-Here is a brief description of methods you define in your new derived
-class. See min.h for details.
-
-+--------------+------------------------------------------+
-| init | initialize the minimization before a run |
-+--------------+------------------------------------------+
-| run | perform the minimization |
-+--------------+------------------------------------------+
-| memory_usage | tally of memory usage |
-+--------------+------------------------------------------+
-
-
-----------
-
-
-.. _mod_10:
-
-Pairwise potentials
--------------------
-
-Classes that compute pairwise interactions are derived from the Pair
-class. In LAMMPS, pairwise calculation include manybody potentials
-such as EAM or Tersoff where particles interact without a static bond
-topology. New styles can be created to add new pair potentials to
-LAMMPS.
-
-Pair_lj_cut.cpp is a simple example of a Pair class, though it
-includes some optional methods to enable its use with rRESPA.
-
-Here is a brief description of the class methods in pair.h:
-
-+-------------------------------+-------------------------------------------------------------------+
-| compute | workhorse routine that computes pairwise interactions |
-+-------------------------------+-------------------------------------------------------------------+
-| settings | reads the input script line with arguments you define |
-+-------------------------------+-------------------------------------------------------------------+
-| coeff | set coefficients for one i,j type pair |
-+-------------------------------+-------------------------------------------------------------------+
-| init_one | perform initialization for one i,j type pair |
-+-------------------------------+-------------------------------------------------------------------+
-| init_style | initialization specific to this pair style |
-+-------------------------------+-------------------------------------------------------------------+
-| write & read_restart | write/read i,j pair coeffs to restart files |
-+-------------------------------+-------------------------------------------------------------------+
-| write & read_restart_settings | write/read global settings to restart files |
-+-------------------------------+-------------------------------------------------------------------+
-| single | force and energy of a single pairwise interaction between 2 atoms |
-+-------------------------------+-------------------------------------------------------------------+
-| compute_inner/middle/outer | versions of compute used by rRESPA |
-+-------------------------------+-------------------------------------------------------------------+
-
-The inner/middle/outer routines are optional.
-
-
-----------
-
-
-.. _mod_11:
-
-Region styles
--------------
-
-Classes that define geometric regions are derived from the Region
-class. Regions are used elsewhere in LAMMPS to group atoms, delete
-atoms to create a void, insert atoms in a specified region, etc. New
-styles can be created to add new region shapes to LAMMPS.
-
-Region_sphere.cpp is an example of a spherical region.
-
-Here is a brief description of methods you define in your new derived
-class. See region.h for details.
-
-+------------------+------------------------------------------------------------------+
-| inside | determine whether a point is in the region |
-+------------------+------------------------------------------------------------------+
-| surface_interior | determine if a point is within a cutoff distance inside of surc |
-+------------------+------------------------------------------------------------------+
-| surface_exterior | determine if a point is within a cutoff distance outside of surf |
-+------------------+------------------------------------------------------------------+
-| shape_update | change region shape if set by time-depedent variable |
-+------------------+------------------------------------------------------------------+
-
-
-----------
-
-
-.. _mod_12:
-
-Body styles
------------
-
-Classes that define body particles are derived from the Body class.
-Body particles can represent complex entities, such as surface meshes
-of discrete points, collections of sub-particles, deformable objects,
-etc.
-
-See :ref:`Section_howto 14 <howto_14>` of the manual for
-an overview of using body particles and the :doc:`body <body>` doc page
-for details on the various body styles LAMMPS supports. New styles
-can be created to add new kinds of body particles to LAMMPS.
-
-Body_nparticle.cpp is an example of a body particle that is treated as
-a rigid body containing N sub-particles.
-
-Here is a brief description of methods you define in your new derived
-class. See body.h for details.
-
-+--------------------+-----------------------------------------------------------+
-| data_body | process a line from the Bodies section of a data file |
-+--------------------+-----------------------------------------------------------+
-| noutrow | number of sub-particles output is generated for |
-+--------------------+-----------------------------------------------------------+
-| noutcol | number of values per-sub-particle output is generated for |
-+--------------------+-----------------------------------------------------------+
-| output | output values for the Mth sub-particle |
-+--------------------+-----------------------------------------------------------+
-| pack_comm_body | body attributes to communicate every timestep |
-+--------------------+-----------------------------------------------------------+
-| unpack_comm_body | unpacking of those attributes |
-+--------------------+-----------------------------------------------------------+
-| pack_border_body | body attributes to communicate when reneighboring is done |
-+--------------------+-----------------------------------------------------------+
-| unpack_border_body | unpacking of those attributes |
-+--------------------+-----------------------------------------------------------+
-
-
-----------
-
-
-.. _mod_13:
-
-Thermodynamic output options
-----------------------------
-
-There is one class that computes and prints thermodynamic information
-to the screen and log file; see the file thermo.cpp.
-
-There are two styles defined in thermo.cpp: "one" and "multi". There
-is also a flexible "custom" style which allows the user to explicitly
-list keywords for quantities to print when thermodynamic info is
-output. See the :doc:`thermo_style <thermo_style>` command for a list
-of defined quantities.
-
-The thermo styles (one, multi, etc) are simply lists of keywords.
-Adding a new style thus only requires defining a new list of keywords.
-Search for the word "customize" with references to "thermo style" in
-thermo.cpp to see the two locations where code will need to be added.
-
-New keywords can also be added to thermo.cpp to compute new quantities
-for output. Search for the word "customize" with references to
-"keyword" in thermo.cpp to see the several locations where code will
-need to be added.
-
-Note that the :doc:`thermo_style custom <thermo>` command already allows
-for thermo output of quantities calculated by :doc:`fixes <fix>`,
-:doc:`computes <compute>`, and :doc:`variables <variable>`. Thus, it may
-be simpler to compute what you wish via one of those constructs, than
-by adding a new keyword to the thermo command.
-
-
-----------
-
-
-.. _mod_14:
-
-Variable options
-----------------
-
-There is one class that computes and stores :doc:`variable <variable>`
-information in LAMMPS; see the file variable.cpp. The value
-associated with a variable can be periodically printed to the screen
-via the :doc:`print <print>`, :doc:`fix print <fix_print>`, or
-:doc:`thermo_style custom <thermo_style>` commands. Variables of style
-"equal" can compute complex equations that involve the following types
-of arguments:
-
-.. parsed-literal::
-
- thermo keywords = ke, vol, atoms, ...
- other variables = v_a, v_myvar, ...
- math functions = div(x,y), mult(x,y), add(x,y), ...
- group functions = mass(group), xcm(group,x), ...
- atom values = x[123], y[3], vx[34], ...
- compute values = c_mytemp[0], c_thermo_press[3], ...
-
-Adding keywords for the :doc:`thermo_style custom <thermo_style>` command
-(which can then be accessed by variables) was discussed
-:ref:`here <thermo>` on this page.
-
-Adding a new math function of one or two arguments can be done by
-editing one section of the Variable::evaulate() method. Search for
-the word "customize" to find the appropriate location.
-
-Adding a new group function can be done by editing one section of the
-Variable::evaulate() method. Search for the word "customize" to find
-the appropriate location. You may need to add a new method to the
-Group class as well (see the group.cpp file).
-
-Accessing a new atom-based vector can be done by editing one section
-of the Variable::evaulate() method. Search for the word "customize"
-to find the appropriate location.
-
-Adding new :doc:`compute styles <compute>` (whose calculated values can
-then be accessed by variables) was discussed
-:ref:`here <compute>` on this page.
-
-
-
-
-
-.. _mod_15:
-
-Submitting new features for inclusion in LAMMPS
------------------------------------------------
-
-We encourage users to submit new features to `the developers <http://lammps.sandia.gov/authors.html>`_ that they add to
-LAMMPS, especially if you think they will be of interest to other
-users. The preferred way to do this is via GitHub. Once you have
-prepared the content described below, see :doc:`this tutorial <tutorial_github>` for instructions on how to submit
-your changes or new files.
-
-If the new features/files are broadly useful we may add them as core
-files to LAMMPS or as part of a :ref:`standard package <start_3>`. 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 :ref:`Section 1.4 <intro_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 <http://lammps.sandia.gov/authors.html>`_
-of the `LAMMPS WWW site <lws_>`_), 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're 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).
-
-.. note::
-
- If you prefer to actively develop and support your add-on
- feature yourself, then you may wish to make it available for download
- from your own website, as a user package that LAMMPS users can add to
- their copy of LAMMPS. See the `Offsite LAMMPS packages and tools <http://lammps.sandia.gov/offsite.html>`_ page of the LAMMPS web
- site for examples of groups that do this. We are happy to advertise
- your package and web site from that page. Simply email the
- `developers <http://lammps.sandia.gov/authors.html>`_ with info about
- your package and we will post it there.
-
-The previous sections of this doc page describe how to add new "style"
-files of various kinds to LAMMPS. Packages are simply collections of
-one or more new class files which are invoked as a new style within a
-LAMMPS input script. If designed correctly, these additions typically
-do not require changes to the main core of LAMMPS; they are simply
-add-on files. If you think your new feature requires non-trivial
-changes in core LAMMPS files, you'll need to `communicate with the developers <http://lammps.sandia.gov/authors.html>`_, since we may or may
-not want to make those changes. An example of a trivial change is
-making a parent-class method "virtual" when you derive a new child
-class from it.
-
-Here are the 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 src dir for
-examples.
-
-* All source files you provide must compile with the most current
- version of LAMMPS.
-* If you want your file(s) to be added to main LAMMPS or one of its
- standard packages, then it needs to be written in a style compatible
- with other LAMMPS source files. This is so the developers can
- understand it and hopefully maintain it. 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's a single file (actually a *.cpp and *.h file) it can
- rapidly be added to the USER-MISC directory. Send us the one-line
- entry to add to the USER-MISC/README file in that dir, 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 featues, 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 a documentation file for each new command or
- style you are adding to LAMMPS. This will be one file for a
- single-file feature. For a package, it might be several files. These
- are simple text files which we auto-convert to HTML. Thus they must
- be in the same format as other *.txt files in the lammps/doc directory
- for similar commands and styles; use one or more of them as a starting
- point. 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
- txt2html tool we use to convert to HTML can be downloaded from `this site <http://www.sandia.gov/~sjplimp/download.html>`_, so you can perform
- the HTML conversion yourself to proofread your doc page.
-* For a new package (or even a single command) you can include one or
- more example scripts. These should run in no more than 1 minute, 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.
-* 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 doc 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.
-
-
-
-
-
-.. _Foo:
-
-
-
-**(Foo)** Foo, Morefoo, and Maxfoo, J of Classic Potentials, 75, 345 (1997).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_packages.txt b/doc/html/_sources/Section_packages.txt
deleted file mode 100644
index 20c070b79..000000000
--- a/doc/html/_sources/Section_packages.txt
+++ /dev/null
@@ -1,2409 +0,0 @@
-Packages
-========
-
-This section gives an overview of the add-on optional packages that
-extend LAMMPS functionality. Packages are groups of files that enable
-a specific set of features. For example, force fields for molecular
-systems or granular systems are in packages. You can see the list of
-all packages by typing "make package" from within the src directory of
-the LAMMPS distribution.
-
-Here are links for two tables below, which list standard and user
-packages.
-
-| 4.1 :ref:`Standard packages <pkg_1>`
-| 4.2 :ref:`User packages <pkg_2>`
-|
-
-:ref:`Section_start 3 <start_3>` of the manual describes
-the difference between standard packages and user packages. It also
-has general details on how to include/exclude specific packages as
-part of the LAMMPS build process, and on how to build auxiliary
-libraries or modify a machine Makefile if a package requires it.
-
-Following the two tables below, is a sub-section for each package. It
-has a summary of what the package contains. It has specific
-instructions on how to install it, build or obtain any auxiliary
-library it requires, and any Makefile.machine changes it requires. It
-also lists pointers to examples of its use or documentation provided
-in the LAMMPS distribution. If you want to know the complete list of
-commands that a package adds to LAMMPS, simply list the files in its
-directory, e.g. "ls src/GRANULAR". Source files with names that start
-with compute, fix, pair, bond, etc correspond to command styles with
-the same names.
-
-.. note::
-
- The USER package sub-sections below are still being filled in,
- as of March 2016.
-
-Unless otherwise noted below, every package is independent of all the
-others. I.e. any package can be included or excluded in a LAMMPS
-build, independent of all other packages. However, note that some
-packages include commands derived from commands in other packages. If
-the other package is not installed, the derived command from the new
-package will also not be installed when you include the new one.
-E.g. the pair lj/cut/coul/long/omp command from the USER-OMP package
-will not be installed as part of the USER-OMP package if the KSPACE
-package is not also installed, since it contains the pair
-lj/cut/coul/long command. If you later install the KSPACE package and
-the USER-OMP package is already installed, both the pair
-lj/cut/coul/long and lj/cut/coul/long/omp commands will be installed.
-
-
-----------
-
-
-.. _pkg_1:
-
-Standard packages
------------------------------
-
-The current list of standard packages is as follows. Each package
-name links to a sub-section below with more details.
-
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| Package | Description | Author(s) | Doc page | Example | Library |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`ASPHERE <ASPHERE>` | aspherical particles | - | :ref:`Section_howto 6.14 <howto_14>` | ellipse | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`BODY <BODY>` | body-style particles | - | :doc:`body <body>` | body | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`CLASS2 <CLASS2>` | class 2 force fields | - | :doc:`pair_style lj/class2 <pair_class2>` | - | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`COLLOID <COLLOID>` | colloidal particles | Kumar (1) | :doc:`atom_style colloid <atom_style>` | colloid | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`COMPRESS <COMPRESS>` | I/O compression | Axel Kohlmeyer (Temple U) | :doc:`dump */gz <dump>` | - | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`CORESHELL <CORESHELL>` | adiabatic core/shell model | Hendrik Heenen (Technical U of Munich) | :ref:`Section_howto 6.25 <howto_25>` | coreshell | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`DIPOLE <DIPOLE>` | point dipole particles | - | :doc:`pair_style dipole/cut <pair_dipole>` | dipole | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`GPU <GPU>` | GPU-enabled styles | Mike Brown (ORNL) | :doc:`Section accelerate <accelerate_gpu>` | gpu | lib/gpu |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`GRANULAR <GRANULAR>` | granular systems | - | :ref:`Section_howto 6.6 <howto_6>` | pour | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`KIM <KIM>` | openKIM potentials | Smirichinski & Elliot & Tadmor (3) | :doc:`pair_style kim <pair_kim>` | kim | KIM |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`KOKKOS <KOKKOS>` | Kokkos-enabled styles | Trott & Moore (4) | :doc:`Section_accelerate <accelerate_kokkos>` | kokkos | lib/kokkos |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`KSPACE <KSPACE>` | long-range Coulombic solvers | - | :doc:`kspace_style <kspace_style>` | peptide | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`MANYBODY <MANYBODY>` | many-body potentials | - | :doc:`pair_style tersoff <pair_tersoff>` | shear | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`MEAM <MEAM>` | modified EAM potential | Greg Wagner (Sandia) | :doc:`pair_style meam <pair_meam>` | meam | lib/meam |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`MC <MC>` | Monte Carlo options | - | :doc:`fix gcmc <fix_gcmc>` | - | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`MOLECULE <MOLECULE>` | molecular system force fields | - | :ref:`Section_howto 6.3 <howto_3>` | peptide | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`OPT <OPT>` | optimized pair styles | Fischer & Richie & Natoli (2) | :doc:`Section accelerate <accelerate_opt>` | - | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`PERI <PERI>` | Peridynamics models | Mike Parks (Sandia) | :doc:`pair_style peri <pair_peri>` | peri | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`POEMS <POEMS>` | coupled rigid body motion | Rudra Mukherjee (JPL) | :doc:`fix poems <fix_poems>` | rigid | lib/poems |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`PYTHON <PYTHON>` | embed Python code in an input script | - | :doc:`python <python>` | python | lib/python |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`REAX <REAX>` | ReaxFF potential | Aidan Thompson (Sandia) | :doc:`pair_style reax <pair_reax>` | reax | lib/reax |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`REPLICA <REPLICA>` | multi-replica methods | - | :ref:`Section_howto 6.5 <howto_5>` | tad | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`RIGID <RIGID>` | rigid bodies | - | :doc:`fix rigid <fix_rigid>` | rigid | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`SHOCK <SHOCK>` | shock loading methods | - | :doc:`fix msst <fix_msst>` | - | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`SNAP <SNAP>` | quantum-fit potential | Aidan Thompson (Sandia) | :doc:`pair snap <pair_snap>` | snap | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`SRD <SRD>` | stochastic rotation dynamics | - | :doc:`fix srd <fix_srd>` | srd | - |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| :ref:`VORONOI <VORONOI>` | Voronoi tesselations | Daniel Schwen (LANL) | :doc:`compute voronoi/atom <compute_voronoi_atom>` | - | Voro++ |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-| | | | | | |
-+------------------------------+--------------------------------------+----------------------------------------+----------------------------------------------------+-----------+------------+
-
-The "Authors" column lists a name(s) if a specific person is
-responible for creating and maintaining the package.
-
-(1) The COLLOID package includes Fast Lubrication Dynamics pair styles
-which were created by Amit Kumar and Michael Bybee from Jonathan
-Higdon's group at UIUC.
-
-(2) The OPT package was created by James Fischer (High Performance
-Technologies), David Richie, and Vincent Natoli (Stone Ridge
-Technolgy).
-
-(3) The KIM package was created by Valeriu Smirichinski, Ryan Elliott,
-and Ellad Tadmor (U Minn).
-
-(4) The KOKKOS package was created primarily by Christian Trott and
-Stan Moore (Sandia). It uses the Kokkos library which was developed
-by Carter Edwards, Christian Trott, and others at Sandia.
-
-The "Doc page" column links to either a sub-section of the
-:doc:`Section_howto <Section_howto>` of the manual, or an input script
-command implemented as part of the package, or to additional
-documentation provided within the package.
-
-The "Example" column is a sub-directory in the examples directory of
-the distribution which has an input script that uses the package.
-E.g. "peptide" refers to the examples/peptide directory.
-
-The "Library" column lists an external library which must be built
-first and which LAMMPS links to when it is built. If it is listed as
-lib/package, then the code for the library is under the lib directory
-of the LAMMPS distribution. See the lib/package/README file for info
-on how to build the library. If it is not listed as lib/package, then
-it is a third-party library not included in the LAMMPS distribution.
-See details on all of this below for individual packages.
-p.s.: are we ever going to get commit messages from you? ;-)
-
-
-----------
-
-
-.. _ASPHERE:
-
-ASPHERE package
-^^^^^^^^^^^^^^^
-
-Contents: Several computes, time-integration fixes, and pair styles
-for aspherical particle models: ellipsoids, 2d lines, 3d triangles.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-asphere
- make machine
-
-.. parsed-literal::
-
- Make.py -p asphere -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-asphere
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^asphere -a machine
-
-Supporting info: :ref:`Section howto 6.14 <howto_14>`,
-:doc:`pair_style gayberne <pair_gayberne>`, :doc:`pair_style resquared <pair_resquared>`,
-`doc/PDF/pair_gayberne_extra.pdf <PDF/pair_gayberne_extra.pdf>`_,
-`doc/PDF/pair_resquared_extra.pdf <PDF/pair_resquared_extra.pdf>`_,
-examples/ASPHERE, examples/ellipse
-
-
-----------
-
-
-.. _BODY:
-
-BODY package
-^^^^^^^^^^^^
-
-Contents: Support for body-style particles. Computes,
-time-integration fixes, pair styles, as well as the body styles
-themselves. See the :doc:`body <body>` doc page for an overview.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-body
- make machine
-
-.. parsed-literal::
-
- Make.py -p body -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-body
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^body -a machine
-
-Supporting info: :doc:`atom_style body <atom_style>`, :doc:`body <body>`,
-:doc:`pair_style body <pair_body>`, examples/body
-
-
-----------
-
-
-.. _CLASS2:
-
-CLASS2 package
-^^^^^^^^^^^^^^
-
-Contents: Bond, angle, dihedral, improper, and pair styles for the
-COMPASS CLASS2 molecular force field.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-class2
- make machine
-
-.. parsed-literal::
-
- Make.py -p class2 -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-class2
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^class2 -a machine
-
-Supporting info: :doc:`bond_style class2 <bond_class2>`, :doc:`angle_style class2 <angle_class2>`, :doc:`dihedral_style class2 <dihedral_class2>`, :doc:`improper_style class2 <improper_class2>`, :doc:`pair_style lj/class2 <pair_class2>`
-
-
-----------
-
-
-.. _COLLOID:
-
-COLLOID package
-^^^^^^^^^^^^^^^
-
-Contents: Support for coarse-grained colloidal particles. Wall fix
-and pair styles that implement colloidal interaction models for
-finite-size particles. This includes the Fast Lubrication Dynamics
-method for hydrodynamic interactions, which is a simplified
-approximation to Stokesian dynamics.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-colloid
- make machine
-
-.. parsed-literal::
-
- Make.py -p colloid -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-colloid
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^colloid -a machine
-
-Supporting info: :doc:`fix wall/colloid <fix_wall>`, :doc:`pair_style colloid <pair_colloid>`, :doc:`pair_style yukawa/colloid <pair_yukawa_colloid>`, :doc:`pair_style brownian <pair_brownian>`, :doc:`pair_style lubricate <pair_lubricate>`, :doc:`pair_style lubricateU <pair_lubricateU>`, examples/colloid, examples/srd
-
-
-----------
-
-
-.. _COMPRESS:
-
-COMPRESS package
-^^^^^^^^^^^^^^^^
-
-Contents: Support for compressed output of dump files via the zlib
-compression library, using dump styles with a "gz" in their style
-name.
-
-Building with the COMPRESS package assumes you have the zlib
-compression library available on your system. The build uses the
-lib/compress/Makefile.lammps file in the compile/link process. You
-should only need to edit this file if the LAMMPS build cannot find the
-zlib info it specifies.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-compress
- make machine
-
-.. parsed-literal::
-
- Make.py -p compress -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-compress
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^compress -a machine
-
-Supporting info: src/COMPRESS/README, lib/compress/README, :doc:`dump atom/gz <dump>`, :doc:`dump cfg/gz <dump>`, :doc:`dump custom/gz <dump>`, :doc:`dump xyz/gz <dump>`
-
-
-----------
-
-
-.. _CORESHELL:
-
-CORESHELL package
-^^^^^^^^^^^^^^^^^
-
-Contents: Compute and pair styles that implement the adiabatic
-core/shell model for polarizability. The compute temp/cs command
-measures the temperature of a system with core/shell particles. The
-pair styles augment Born, Buckingham, and Lennard-Jones styles with
-core/shell capabilities. See :ref:`Section howto 6.26 <howto_26>` for an overview of how to use the
-package.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-coreshell
- make machine
-
-.. parsed-literal::
-
- Make.py -p coreshell -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-coreshell
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^coreshell -a machine
-
-Supporting info: :ref:`Section howto 6.26 <howto_26>`, :doc:`compute temp/cs <compute_temp_cs>`,
-:doc:`pair_style born/coul/long/cs <pair_cs>`, :doc:`pair_style buck/coul/long/cs <pair_cs>`, pair_style
-lj/cut/coul/long/cs"_pair_lj.html, examples/coreshell
-
-
-----------
-
-
-.. _DIPOLE:
-
-DIPOLE package
-^^^^^^^^^^^^^^
-
-Contents: An atom style and several pair styles to support point
-dipole models with short-range or long-range interactions.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-dipole
- make machine
-
-.. parsed-literal::
-
- Make.py -p dipole -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-dipole
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^dipole -a machine
-
-Supporting info: :doc:`atom_style dipole <atom_style>`, :doc:`pair_style lj/cut/dipole/cut <pair_dipole>`, :doc:`pair_style lj/cut/dipole/long <pair_dipole>`, :doc:`pair_style lj/long/dipole/long <pair_dipole>`, examples/dipole
-
-
-----------
-
-
-.. _GPU:
-
-GPU package
-^^^^^^^^^^^
-
-Contents: Dozens of pair styles and a version of the PPPM long-range
-Coulombic solver for NVIDIA GPUs. All of them have a "gpu" in their
-style name. :doc:`Section accelerate gpu <accelerate_gpu>` gives
-details of what hardware and Cuda software is required on your system,
-and how to build and use this package. See the KOKKOS package, which
-also has GPU-enabled styles.
-
-Building LAMMPS with the GPU package requires first building the GPU
-library itself, which is a set of C and Cuda files in lib/gpu.
-Details of how to do this are in lib/gpu/README. As illustrated
-below, perform a "make" using one of the Makefile.machine files in
-lib/gpu which should create a lib/reax/libgpu.a file.
-Makefile.linux.* and Makefile.xk7 are examples for different
-platforms. There are 3 important settings in the Makefile.machine you
-use:
-
-* CUDA_HOME = where NVIDIA Cuda software is installed on your system
-* CUDA_ARCH = appropriate to your GPU hardware
-* CUDA_PREC = precision (double, mixed, single) you desire
-
-See example Makefile.machine files in lib/gpu for the syntax of these
-settings. See lib/gpu/Makefile.linux.double for ARCH settings for
-various NVIDIA GPUs. The "make" also creates a
-lib/gpu/Makefile.lammps file. This file has settings that enable
-LAMMPS to link with Cuda libraries. If the settings in
-Makefile.lammps for your machine are not correct, the LAMMPS link will
-fail. Note that the Make.py script has a "-gpu" option to allow the
-GPU library (with several of its options) and LAMMPS to be built in
-one step, with Type "python src/Make.py -h -gpu" to see the details.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- cd ~/lammps/lib/gpu
- make -f Makefile.linux.mixed # for example
- cd ~/lammps/src
- make yes-gpu
- make machine
-
-.. parsed-literal::
-
- Make.py -p gpu -gpu mode=mixed arch=35 -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-gpu
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^gpu -a machine
-
-Supporting info: src/GPU/README, lib/gpu/README, :doc:`Section acclerate <Section_accelerate>`, :doc:`Section accelerate gpu <accelerate_gpu>`, Pair Styles section of :ref:`Section commands 3.5 <cmd_5>` for any pair style listed with a (g),
-:doc:`kspace_style <kspace_style>`, :doc:`package gpu <package>`,
-examples/accelerate, bench/FERMI, bench/KEPLER
-
-
-----------
-
-
-.. _GRANULAR:
-
-GRANULAR package
-^^^^^^^^^^^^^^^^
-
-Contents: Fixes and pair styles that support models of finite-size
-granular particles, which interact with each other and boundaries via
-frictional and dissipative potentials.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-granular
- make machine
-
-.. parsed-literal::
-
- Make.py -p granular -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-granular
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^granular -a machine
-
-Supporting info: :ref:`Section howto 6.6 <howto_6>`, :doc:`fix pour <fix_pour>`, :doc:`fix wall/gran <fix_wall_gran>`, :doc:`pair_style gran/hooke <pair_gran>`, :doc:`pair_style gran/hertz/history <pair_gran>`, examples/pour, bench/in.chute
-
-
-----------
-
-
-.. _KIM:
-
-KIM package
-^^^^^^^^^^^
-
-Contents: A pair style that interfaces to the Knowledge Base for
-Interatomic Models (KIM) repository of interatomic potentials, so that
-KIM potentials can be used in a LAMMPS simulation.
-
-To build LAMMPS with the KIM package you must have previously
-installed the KIM API (library) on your system. The lib/kim/README
-file explains how to download and install KIM. Building with the KIM
-package also uses the lib/kim/Makefile.lammps file in the compile/link
-process. You should not need to edit this file.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-kim
- make machine
-
-.. parsed-literal::
-
- Make.py -p kim -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-kim
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^kim -a machine
-
-Supporting info: src/KIM/README, lib/kim/README, :doc:`pair_style kim <pair_kim>`, examples/kim
-
-
-----------
-
-
-.. _KOKKOS:
-
-KOKKOS package
-^^^^^^^^^^^^^^
-
-Contents: Dozens of atom, pair, bond, angle, dihedral, improper styles
-which run with the Kokkos library to provide optimization for
-multicore CPUs (via OpenMP), NVIDIA GPUs, or the Intel Xeon Phi (in
-native mode). All of them have a "kk" in their style name. :doc:`Section accelerate kokkos <accelerate_kokkos>` gives details of what
-hardware and software is required on your system, and how to build and
-use this package. See the GPU, OPT, USER-INTEL, USER-OMP packages,
-which also provide optimizations for the same range of hardware.
-
-Building with the KOKKOS package requires choosing which of 3 hardware
-options you are optimizing for: CPU acceleration via OpenMP, GPU
-acceleration, or Intel Xeon Phi. (You can build multiple times to
-create LAMMPS executables for different hardware.) It also requires a
-C++11 compatible compiler. For GPUs, the NVIDIA "nvcc" compiler is
-used, and an appopriate KOKKOS_ARCH setting should be made in your
-Makefile.machine for your GPU hardware and NVIDIA software.
-
-The simplest way to do this is to use Makefile.kokkos_cuda or
-Makefile.kokkos_omp or Makefile.kokkos_phi in src/MAKE/OPTIONS, via
-"make kokkos_cuda" or "make kokkos_omp" or "make kokkos_phi". (Check
-the KOKKOS_ARCH setting in Makefile.kokkos_cuda), Or, as illustrated
-below, you can use the Make.py script with its "-kokkos" option to
-choose which hardware to build for. Type "python src/Make.py -h
--kokkos" to see the details. If these methods do not work on your
-system, you will need to read the :doc:`Section accelerate kokkos <accelerate_kokkos>` doc page for details of what
-Makefile.machine settings are needed.
-
-To install via make or Make.py for each of 3 hardware options:
-
-.. parsed-literal::
-
- make yes-kokkos
- make kokkos_omp # for CPUs with OpenMP
- make kokkos_cuda # for GPUs, check the KOKKOS_ARCH setting in Makefile.kokkos_cuda
- make kokkos_phi # for Xeon Phis
-
-Make.py -p kokkos -kokkos omp -a machine # for CPUs with OpenMP
-Make.py -p kokkos -kokkos cuda arch=35 -a machine # for GPUs of style arch
-Make.py -p kokkos -kokkos phi -a machine # for Xeon Phis
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-kokkos
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^kokkos -a machine
-
-Supporting info: src/KOKKOS/README, lib/kokkos/README, :doc:`Section acclerate <Section_accelerate>`, :doc:`Section accelerate kokkos <accelerate_kokkos>`, Pair Styles section of :ref:`Section commands 3.5 <cmd_5>` for any pair style listed
-with a (k), :doc:`package kokkos <package>`,
-examples/accelerate, bench/FERMI, bench/KEPLER
-
-
-----------
-
-
-.. _KSPACE:
-
-KSPACE package
-^^^^^^^^^^^^^^
-
-Contents: A variety of long-range Coulombic solvers, and pair styles
-which compute the corresponding short-range portion of the pairwise
-Coulombic interactions. These include Ewald, particle-particle
-particle-mesh (PPPM), and multilevel summation method (MSM) solvers.
-
-Building with the KSPACE package requires a 1d FFT library be present
-on your system for use by the PPPM solvers. This can be the KISS FFT
-library provided with LAMMPS, or 3rd party libraries like FFTW or a
-vendor-supplied FFT library. See step 6 of :ref:`Section start 2.2.2 <start_2_2>` of the manual for details of how
-to select different FFT options in your machine Makefile. The Make.py
-tool has an "-fft" option which can insert these settings into your
-machine Makefile automatically. Type "python src/Make.py -h -fft" to
-see the details.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-kspace
- make machine
-
-.. parsed-literal::
-
- Make.py -p kspace -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-kspace
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^kspace -a machine
-
-Supporting info: :doc:`kspace_style <kspace_style>`,
-`doc/PDF/kspace.pdf <PDF/kspace.pdf>`_, :ref:`Section howto 6.7 <howto_7>`, :ref:`Section howto 6.8 <howto_8>`, :ref:`Section howto 6.9 <howto_9>`, :doc:`pair_style coul <pair_coul>`,
-other pair style command doc pages which have "long" or "msm" in their
-style name, examples/peptide, bench/in.rhodo
-
-
-----------
-
-
-.. _MANYBODY:
-
-MANYBODY package
-^^^^^^^^^^^^^^^^
-
-Contents: A variety of many-body and bond-order potentials. These
-include (AI)REBO, EAM, EIM, BOP, Stillinger-Weber, and Tersoff
-potentials. Do a directory listing, "ls src/MANYBODY", to see
-the full list.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-manybody
- make machine
-
-.. parsed-literal::
-
- Make.py -p manybody -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-manybody
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^manybody -a machine
-
-Supporting info:
-
-Examples: Pair Styles section of :ref:`Section commands 3.5 <cmd_5>`, examples/comb, examples/eim,
-examples/nb3d, examples/vashishta
-
-
-----------
-
-
-.. _MC:
-
-MC package
-^^^^^^^^^^
-
-Contents: Several fixes and a pair style that have Monte Carlo (MC) or
-MC-like attributes. These include fixes for creating, breaking, and
-swapping bonds, and for performing atomic swaps and grand-canonical MC
-in conjuction with dynamics.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-mc
- make machine
-
-.. parsed-literal::
-
- Make.py -p mc -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-mc
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^mc -a machine
-
-Supporting info: :doc:`fix atom/swap <fix_atom_swap>`, :doc:`fix bond/break <fix_bond_break>`, :doc:`fix bond/create <fix_bond_create>`, :doc:`fix bond/swap <fix_bond_swap>`,
-:doc:`fix gcmc <fix_gcmc>`, :doc:`pair_style dsmc <pair_dsmc>`
-
-
-----------
-
-
-.. _MEAM:
-
-MEAM package
-^^^^^^^^^^^^
-
-Contents: A pair style for the modified embedded atom (MEAM)
-potential.
-
-Building LAMMPS with the MEAM package requires first building the MEAM
-library itself, which is a set of Fortran 95 files in lib/meam.
-Details of how to do this are in lib/meam/README. As illustrated
-below, perform a "make" using one of the Makefile.machine files in
-lib/meam which should create a lib/meam/libmeam.a file.
-Makefile.gfortran and Makefile.ifort are examples for the GNU Fortran
-and Intel Fortran compilers. The "make" also copies a
-lib/meam/Makefile.lammps.machine file to lib/meam/Makefile.lammps.
-This file has settings that enable the C++ compiler used to build
-LAMMPS to link with a Fortran library (typically the 2 compilers to be
-consistent e.g. both Intel compilers, or both GNU compilers). If the
-settings in Makefile.lammps for your compilers and machine are not
-correct, the LAMMPS link will fail. Note that the Make.py script has
-a "-meam" option to allow the MEAM library and LAMMPS to be built in
-one step. Type "python src/Make.py -h -meam" to see the details.
-
-.. note::
-
- The MEAM potential can run dramatically faster if built with the
- Intel Fortran compiler, rather than the GNU Fortran compiler.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- cd ~/lammps/lib/meam
- make -f Makefile.gfortran # for example
- cd ~/lammps/src
- make yes-meam
- make machine
-
-.. parsed-literal::
-
- Make.py -p meam -meam make=gfortran -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-meam
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^meam -a machine
-
-Supporting info: lib/meam/README, :doc:`pair_style meam <pair_meam>`,
-examples/meam
-
-
-----------
-
-
-.. _MISC:
-
-MISC package
-^^^^^^^^^^^^
-
-Contents: A variety of computes, fixes, and pair styles that are not
-commonly used, but don't align with other packages. Do a directory
-listing, "ls src/MISC", to see the list of commands.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-misc
- make machine
-
-.. parsed-literal::
-
- Make.py -p misc -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-misc
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^misc -a machine
-
-Supporting info: :doc:`compute ti <compute_ti>`, :doc:`fix evaporate <fix_evaporate>`, :doc:`fix tmm <fix_ttm>`, :doc:`fix viscosity <fix_viscosity>`, examples/misc
-
-
-----------
-
-
-.. _MOLECULE:
-
-MOLECULE package
-^^^^^^^^^^^^^^^^
-
-Contents: A large number of atom, pair, bond, angle, dihedral,
-improper styles that are used to model molecular systems with fixed
-covalent bonds. The pair styles include terms for the Dreiding
-(hydrogen-bonding) and CHARMM force fields, and TIP4P water model.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-molecule
- make machine
-
-.. parsed-literal::
-
- Make.py -p molecule -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-molecule
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^molecule -a machine
-
-Supporting info::doc:`atom_style <atom_style>`,
-:doc:`bond_style <bond_style>`, :doc:`angle_style <angle_style>`,
-:doc:`dihedral_style <dihedral_style>`,
-:doc:`improper_style <improper_style>`, :doc:`pair_style hbond/dreiding/lj <pair_hbond_dreiding>`, :doc:`pair_style lj/charmm/coul/charmm <pair_charmm>`, :ref:`Section howto 6.3 <howto_3>`, examples/micelle, examples/peptide,
-bench/in.chain, bench/in.rhodo
-
-
-----------
-
-
-.. _MPIIO:
-
-MPIIO package
-^^^^^^^^^^^^^
-
-Contents: Support for parallel output/input of dump and restart files
-via the MPIIO library, which is part of the standard message-passing
-interface (MPI) library. It adds :doc:`dump styles <dump>` with a
-"mpiio" in their style name. Restart files with an ".mpiio" suffix
-are also written and read in parallel.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-mpiio
- make machine
-
-.. parsed-literal::
-
- Make.py -p mpiio -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-mpiio
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^mpiio -a machine
-
-Supporting info: :doc:`dump <dump>`, :doc:`restart <restart>`,
-:doc:`write_restart <write_restart>`, :doc:`read_restart <read_restart>`
-
-
-----------
-
-
-.. _OPT:
-
-OPT package
-^^^^^^^^^^^
-
-Contents: A handful of pair styles with an "opt" in their style name
-which are optimized for improved CPU performance on single or multiple
-cores. These include EAM, LJ, CHARMM, and Morse potentials. :doc:`Section accelerate opt <accelerate_opt>` gives details of how to build and
-use this package. See the KOKKOS, USER-INTEL, and USER-OMP packages,
-which also have styles optimized for CPU performance.
-
-Some C++ compilers, like the Intel compiler, require the compile flag
-"-restrict" to build LAMMPS with the OPT package. It should be added
-to the CCFLAGS line of your Makefile.machine. Or use Makefile.opt in
-src/MAKE/OPTIONS, via "make opt". For compilers that use the flag,
-the Make.py command adds it automatically to the Makefile.auto file it
-creates and uses.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-opt
- make machine
-
-.. parsed-literal::
-
- Make.py -p opt -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-opt
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^opt -a machine
-
-Supporting info: :doc:`Section acclerate <Section_accelerate>`, :doc:`Section accelerate opt <accelerate_opt>`, Pair Styles section of :ref:`Section commands 3.5 <cmd_5>` for any pair style listed
-with an (o), examples/accelerate, bench/KEPLER
-
-
-----------
-
-
-.. _PERI:
-
-PERI package
-^^^^^^^^^^^^
-
-Contents: Support for the Peridynamics method, a particle-based
-meshless continuum model. The package includes an atom style, several
-computes which calculate diagnostics, and several Peridynamic pair
-styles which implement different materials models.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-peri
- make machine
-
-.. parsed-literal::
-
- Make.py -p peri -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-peri
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^peri -a machine
-
-Supporting info:
-`doc/PDF/PDLammps_overview.pdf <PDF/PDLammps_overview.pdf>`_,
-`doc/PDF/PDLammps_EPS.pdf <PDF/PDLammps_EPS.pdf>`_,
-`doc/PDF/PDLammps_VES.pdf <PDF/PDLammps_VES.pdf>`_, :doc:`atom_style peri <atom_style>`, :doc:`compute damage <compute_damage>`,
-:doc:`pair_style peri/pmb <pair_peri>`, examples/peri
-
-
-----------
-
-
-.. _POEMS:
-
-POEMS package
-^^^^^^^^^^^^^
-
-Contents: A fix that wraps the Parallelizable Open source Efficient
-Multibody Software (POEMS) librar, which is able to simulate the
-dynamics of articulated body systems. These are systems with multiple
-rigid bodies (collections of atoms or particles) whose motion is
-coupled by connections at hinge points.
-
-Building LAMMPS with the POEMS package requires first building the
-POEMS library itself, which is a set of C++ files in lib/poems.
-Details of how to do this are in lib/poems/README. As illustrated
-below, perform a "make" using one of the Makefile.machine files in
-lib/poems which should create a lib/meam/libpoems.a file.
-Makefile.g++ and Makefile.icc are examples for the GNU and Intel C++
-compilers. The "make" also creates a lib/poems/Makefile.lammps file
-which you should not need to change. Note the Make.py script has a
-"-poems" option to allow the POEMS library and LAMMPS to be built in
-one step. Type "python src/Make.py -h -poems" to see the details.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- cd ~/lammps/lib/poems
- make -f Makefile.g++ # for example
- cd ~/lammps/src
- make yes-poems
- make machine
-
-.. parsed-literal::
-
- Make.py -p poems -poems make=g++ -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-meam
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^meam -a machine
-
-Supporting info: src/POEMS/README, lib/poems/README,
-:doc:`fix poems <fix_poems>`, examples/rigid
-
-
-----------
-
-
-.. _PYTHON:
-
-PYTHON package
-^^^^^^^^^^^^^^
-
-Contents: A :doc:`python <python>` command which allow you to execute
-Python code from a LAMMPS input script. The code can be in a separate
-file or embedded in the input script itself. See :ref:`Section python 11.2 <py_2">` for an overview of using Python from
-LAMMPS and `Section python <Section_python.html">`_ for other ways to use
-LAMMPS and Python together.
-
-Building with the PYTHON package assumes you have a Python shared
-library available on your system, which needs to be a Python 2
-version, 2.6 or later. Python 3 is not supported. The build uses the
-contents of the lib/python/Makefile.lammps file to find all the Python
-files required in the build/link process. See the lib/python/README
-file if the settings in that file do not work on your system. Note
-that the Make.py script has a "-python" option to allow an alternate
-lib/python/Makefile.lammps file to be specified and LAMMPS to be built
-in one step. Type "python src/Make.py -h -python" to see the details.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-python
- make machine
-
-.. parsed-literal::
-
- Make.py -p python -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-python
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^python -a machine
-
-Supporting info: examples/python
-
-
-----------
-
-
-.. _QEQ:
-
-QEQ package
-^^^^^^^^^^^
-
-Contents: Several fixes for performing charge equilibration (QEq) via
-severeal different algorithms. These can be used with pair styles
-that use QEq as part of their formulation.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-qeq
- make machine
-
-.. parsed-literal::
-
- Make.py -p qeq -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-qeq
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^qeq -a machine
-
-Supporting info: :doc:`fix qeq/* <fix_qeq>`, examples/qeq
-
-
-----------
-
-
-.. _REAX:
-
-REAX package
-^^^^^^^^^^^^
-
-Contents: A pair style for the ReaxFF potential, a universal reactive
-force field, as well as a :doc:`fix reax/bonds <fix_reax_bonds>` command
-for monitoring molecules as bonds are created and destroyed.
-
-Building LAMMPS with the REAX package requires first building the REAX
-library itself, which is a set of Fortran 95 files in lib/reax.
-Details of how to do this are in lib/reax/README. As illustrated
-below, perform a "make" using one of the Makefile.machine files in
-lib/reax which should create a lib/reax/libreax.a file.
-Makefile.gfortran and Makefile.ifort are examples for the GNU Fortran
-and Intel Fortran compilers. The "make" also copies a
-lib/reax/Makefile.lammps.machine file to lib/reax/Makefile.lammps.
-This file has settings that enable the C++ compiler used to build
-LAMMPS to link with a Fortran library (typically the 2 compilers to be
-consistent e.g. both Intel compilers, or both GNU compilers). If the
-settings in Makefile.lammps for your compilers and machine are not
-correct, the LAMMPS link will fail. Note that the Make.py script has
-a "-reax" option to allow the REAX library and LAMMPS to be built in
-one step. Type "python src/Make.py -h -reax" to see the details.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- cd ~/lammps/lib/reax
- make -f Makefile.gfortran # for example
- cd ~/lammps/src
- make yes-reax
- make machine
-
-.. parsed-literal::
-
- Make.py -p reax -reax make=gfortran -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-reax
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^reax -a machine
-
-Supporting info: lib/reax/README, :doc:`pair_style reax <pair_reax>`,
-:doc:`fix reax/bonds <fix_reax_bonds>`, examples/reax
-
-
-----------
-
-
-.. _REPLICA:
-
-REPLICA package
-^^^^^^^^^^^^^^^
-
-Contents: A collection of multi-replica methods that are used by
-invoking multiple instances (replicas) of LAMMPS
-simulations. Communication between individual replicas is performed in
-different ways by the different methods. See :ref:`Section howto 6.5 <howto_5>` for an overview of how to run
-multi-replica simulations in LAMMPS. Multi-replica methods included
-in the package are nudged elastic band (NEB), parallel replica
-dynamics (PRD), temperature accelerated dynamics (TAD), parallel
-tempering, and a verlet/split algorithm for performing long-range
-Coulombics on one set of processors, and the remainded of the force
-field calcalation on another set.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-replica
- make machine
-
-.. parsed-literal::
-
- Make.py -p replica -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-replica
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^replica -a machine
-
-Supporting info: :ref:`Section howto 6.5 <howto_5>`,
-:doc:`neb <neb>`, :doc:`prd <prd>`, :doc:`tad <tad>`, :doc:`temper <temper>`,
-:doc:`run_style verlet/split <run_style>`, examples/neb, examples/prd,
-examples/tad
-
-
-----------
-
-
-.. _RIGID:
-
-RIGID package
-^^^^^^^^^^^^^
-
-Contents: A collection of computes and fixes which enforce rigid
-constraints on collections of atoms or particles. This includes SHAKE
-and RATTLE, as well as variants of rigid-body time integrators for a
-few large bodies or many small bodies.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-rigid
- make machine
-
-.. parsed-literal::
-
- Make.py -p rigid -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-rigid
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^rigid -a machine
-
-Supporting info: :doc:`compute erotate/rigid <compute_erotate_rigid>`,
-:doc:`fix shake <fix_shake>`, :doc:`fix rattle <fix_rattle>`, :doc:`fix rigid/* <fix_rigid>`, examples/ASPHERE, examples/rigid
-
-
-----------
-
-
-.. _SHOCK:
-
-SHOCK package
-^^^^^^^^^^^^^
-
-Contents: A small number of fixes useful for running impact
-simulations where a shock-wave passes through a material.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-shock
- make machine
-
-.. parsed-literal::
-
- Make.py -p shock -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-shock
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^shock -a machine
-
-Supporting info: :doc:`fix append/atoms <fix_append_atoms>`, :doc:`fix msst <fix_msst>`, :doc:`fix nphug <fix_nphug>`, :doc:`fix wall/piston <fix_wall_piston>`, examples/hugoniostat, examples/msst
-
-
-----------
-
-
-.. _SNAP:
-
-SNAP package
-^^^^^^^^^^^^
-
-Contents: A pair style for the spectral neighbor analysis potential
-(SNAP), which is an empirical potential which can be quantum accurate
-when fit to an archive of DFT data. Computes useful for analyzing
-properties of the potential are also included.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-snap
- make machine
-
-.. parsed-literal::
-
- Make.py -p snap -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-snap
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^snap -a machine
-
-Supporting info: :doc:`pair snap <pair_snap>`, :doc:`compute sna/atom <compute_sna_atom>`, :doc:`compute snad/atom <compute_sna>`,
-:doc:`compute snav/atom <compute_sna>`, examples/snap
-
-
-----------
-
-
-.. _SRD:
-
-SRD package
-^^^^^^^^^^^
-
-Contents: Two fixes which implement the Stochastic Rotation Dynamics
-(SRD) method for coarse-graining of a solvent, typically around large
-colloidal-scale particles.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-srd
- make machine
-
-.. parsed-literal::
-
- Make.py -p srd -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-srd
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^srd -a machine
-
-Supporting info: :doc:`fix srd <fix_srd>`, :doc:`fix wall/srd <fix_wall_srd>`, examples/srd, examples/ASPHERE
-
-
-----------
-
-
-.. _VORONOI:
-
-VORONOI package
-^^^^^^^^^^^^^^^
-
-Contents: A :doc:`compute voronoi/atom <compute_voronoi_atom>` command
-which computes the Voronoi tesselation of a collection of atoms or
-particles by wrapping the Voro++ lib
-
-To build LAMMPS with the KIM package you must have previously
-installed the KIM API (library) on your system. The lib/kim/README
-file explains how to download and install KIM. Building with the KIM
-package also uses the lib/kim/Makefile.lammps file in the compile/link
-process. You should not need to edit this file.
-
-To build LAMMPS with the VORONOI package you must have previously
-installed the Voro++ library on your system. The lib/voronoi/README
-file explains how to download and install Voro++. There is a
-lib/voronoi/install.py script which automates the process. Type
-"python install.py" to see instructions. The final step is to create
-soft links in the lib/voronoi directory for "includelink" and
-"liblink" which point to installed Voro++ directories. Building with
-the VORONOI package uses the contents of the
-lib/voronoi/Makefile.lammps file in the compile/link process. You
-should not need to edit this file. Note that the Make.py script has a
-"-voronoi" option to allow the Voro++ library to be downloaded and/or
-installed and LAMMPS to be built in one step. Type "python
-src/Make.py -h -voronoi" to see the details.
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- cd ~/lammps/lib/voronoi
- python install.py -g -b -l # download Voro++, build in lib/voronoi, create links
- cd ~/lammps/src
- make yes-voronoi
- make machine
-
-.. parsed-literal::
-
- Make.py -p voronoi -voronoi install="-g -b -l" -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-voronoi
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^voronoi -a machine
-
-Supporting info: src/VORONOI/README, lib/voronoi/README, :doc:`compute voronoi/atom <compute_voronoi_atom>`, examples/voronoi
-
-
-----------
-
-
-.. _pkg_2:
-
-User packages
--------------------------
-
-The current list of user-contributed packages is as follows:
-
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| Package | Description | Author(s) | Doc page | Example | Pic/movie | Library |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-ATC <USER-ATC>` | atom-to-continuum coupling | Jones & Templeton & Zimmerman (1) | :doc:`fix atc <fix_atc>` | USER/atc | `atc <atc_>`_ | lib/atc |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-AWPMD <USER-AWPMD>` | wave-packet MD | Ilya Valuev (JIHT) | :doc:`pair_style awpmd/cut <pair_awpmd>` | USER/awpmd | - | lib/awpmd |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-CG-CMM <USER-CG-CMM>` | coarse-graining model | Axel Kohlmeyer (Temple U) | :doc:`pair_style lj/sdk <pair_sdk>` | USER/cg-cmm | `cg <cg_>`_ | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-COLVARS <USER-COLVARS>` | collective variables | Fiorin & Henin & Kohlmeyer (2) | :doc:`fix colvars <fix_colvars>` | USER/colvars | `colvars <colvars>`_ | lib/colvars |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-DIFFRACTION <USER-DIFFRACTION>` | virutal x-ray and electron diffraction | Shawn Coleman (ARL) | :doc:`compute xrd <compute_xrd>` | USER/diffraction | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-DPD <USER-DPD>` | reactive dissipative particle dynamics (DPD) | Larentzos & Mattox & Brennan (5) | src/USER-DPD/README | USER/dpd | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-DRUDE <USER-DRUDE>` | Drude oscillators | Dequidt & Devemy & Padua (3) | :doc:`tutorial <tutorial_drude>` | USER/drude | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-EFF <USER-EFF>` | electron force field | Andres Jaramillo-Botero (Caltech) | :doc:`pair_style eff/cut <pair_eff>` | USER/eff | `eff <eff_>`_ | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-FEP <USER-FEP>` | free energy perturbation | Agilio Padua (U Blaise Pascal Clermont-Ferrand) | :doc:`compute fep <compute_fep>` | USER/fep | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-H5MD <USER-H5MD>` | dump output via HDF5 | Pierre de Buyl (KU Leuven) | :doc:`dump h5md <dump_h5md>` | - | - | lib/h5md |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-INTEL <USER-INTEL>` | Vectorized CPU and Intel(R) coprocessor styles | W. Michael Brown (Intel) | :doc:`Section accelerate <accelerate_intel>` | examples/intel | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-LB <USER-LB>` | Lattice Boltzmann fluid | Colin Denniston (U Western Ontario) | :doc:`fix lb/fluid <fix_lb_fluid>` | USER/lb | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-MGPT <USER-MGPT>` | fast MGPT multi-ion potentials | Tomas Oppelstrup & John Moriarty (LLNL) | :doc:`pair_style mgpt <pair_mgpt>` | USER/mgpt | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-MISC <USER-MISC>` | single-file contributions | USER-MISC/README | USER-MISC/README | - | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-MANIFOLD <USER-MANIFOLD>` | motion on 2d surface | Stefan Paquay (Eindhoven U of Technology) | :doc:`fix manifoldforce <fix_manifoldforce>` | USER/manifold | `manifold <manifold_>`_ | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-MOLFILE <USER-MOLFILE>` | `VMD <VMD_>`_ molfile plug-ins | Axel Kohlmeyer (Temple U) | :doc:`dump molfile <dump_molfile>` | - | - | VMD-MOLFILE |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-OMP <USER-OMP>` | OpenMP threaded styles | Axel Kohlmeyer (Temple U) | :doc:`Section accelerate <accelerate_omp>` | - | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-PHONON <USER-PHONON>` | phonon dynamical matrix | Ling-Ti Kong (Shanghai Jiao Tong U) | :doc:`fix phonon <fix_phonon>` | USER/phonon | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-QMMM <USER-QMMM>` | QM/MM coupling | Axel Kohlmeyer (Temple U) | :doc:`fix qmmm <fix_qmmm>` | USER/qmmm | - | lib/qmmm |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-QTB <USER-QTB>` | quantum nuclear effects | Yuan Shen (Stanford) | :doc:`fix qtb <fix_qtb>` :doc:`fix qbmsst <fix_qbmsst>` | qtb | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-QUIP <USER-QUIP>` | QUIP/libatoms interface | Albert Bartok-Partay (U Cambridge) | :doc:`pair_style quip <pair_quip>` | USER/quip | - | lib/quip |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-REAXC <USER-REAXC>` | C version of ReaxFF | Metin Aktulga (LBNL) | :doc:`pair_style reaxc <pair_reax_c>` | reax | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-SMD <USER-SMD>` | smoothed Mach dynamics | Georg Ganzenmuller (EMI) | `userguide.pdf <PDF/SMD_LAMMPS_userguide.pdf>`_ | USER/smd | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-SMTBQ <USER-SMTBQ>` | Second Moment Tight Binding - QEq potential | Salles & Maras & Politano & Tetot (4) | :doc:`pair_style smtbq <pair_smtbq>` | USER/smtbq | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-SPH <USER-SPH>` | smoothed particle hydrodynamics | Georg Ganzenmuller (EMI) | `userguide.pdf <PDF/SPH_LAMMPS_userguide.pdf>`_ | USER/sph | `sph <sph_>`_ | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-TALLY <USER-TALLY>` | Pairwise tallied computes | Axel Kohlmeyer (Temple U) | :doc:`compute <...>/tally <compute_tally>` | USER/tally | - | - |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| :ref:`USER-VTK <USER-VTK>` | VTK-style dumps | Berger and Queteschiner (6) | :doc:`compute custom/vtk <compute_custom_vtk>` | - | - | lib/vtk |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-| | | | | | | |
-+--------------------------------------------+------------------------------------------------+-------------------------------------------------+---------------------------------------------------------+------------------+-------------------------+-------------+
-
-.. _atc: http://lammps.sandia.gov/pictures.html#atc
-
-
-
-.. _cg: http://lammps.sandia.gov/pictures.html#cg
-
-
-
-.. _eff: http://lammps.sandia.gov/movies.html#eff
-
-
-
-.. _manifold: http://lammps.sandia.gov/movies.html#manifold
-
-
-
-.. _sph: http://lammps.sandia.gov/movies.html#sph
-
-
-
-.. _VMD: http://www.ks.uiuc.edu/Research/vmd
-
-
-
-The "Authors" column lists a name(s) if a specific person is
-responible for creating and maintaining the package.
-
-(1) The ATC package was created by Reese Jones, Jeremy Templeton, and
-Jon Zimmerman (Sandia).
-
-(2) The COLVARS package was created by Axel Kohlmeyer (Temple U) using
-the colvars module library written by Giacomo Fiorin (Temple U) and
-Jerome Henin (LISM, Marseille, France).
-
-(3) The DRUDE package was created by Alain Dequidt (U Blaise Pascal
-Clermont-Ferrand) and co-authors Julien Devemy (CNRS) and Agilio Padua
-(U Blaise Pascal).
-
-(4) The SMTBQ package was created by Nicolas Salles, Emile Maras,
-Olivier Politano, and Robert Tetot (LAAS-CNRS, France).
-
-(5) The USER-DPD package was created by James Larentzos (ARL), Timothy
-Mattox (Engility), and John Brennan (ARL).
-
-(6) The USER-VTK package was created by Richard Berger (JKU) and
-Daniel Queteschiner (DCS Computing).
-
-The "Doc page" column links to either a sub-section of the
-:doc:`Section_howto <Section_howto>` of the manual, or an input script
-command implemented as part of the package, or to additional
-documentation provided within the package.
-
-The "Example" column is a sub-directory in the examples directory of
-the distribution which has an input script that uses the package.
-E.g. "peptide" refers to the examples/peptide directory.
-
-The "Library" column lists an external library which must be built
-first and which LAMMPS links to when it is built. If it is listed as
-lib/package, then the code for the library is under the lib directory
-of the LAMMPS distribution. See the lib/package/README file for info
-on how to build the library. If it is not listed as lib/package, then
-it is a third-party library not included in the LAMMPS distribution.
-See details on all of this below for individual packages.
-
-
-----------
-
-
-.. _USER-ATC:
-
-USER-ATC package
-^^^^^^^^^^^^^^^^
-
-Contents: ATC stands for atoms-to-continuum. This package implements
-a :doc:`fix atc <fix_atc>` command to either couple MD with continuum
-finite element equations or perform on-the-fly post-processing of
-atomic information to continuum fields. See src/USER-ATC/README for
-more details.
-
-To build LAMMPS with this package ...
-
-To install via make or Make.py:
-
-.. parsed-literal::
-
- make yes-user-atc
- make machine
-
-.. parsed-literal::
-
- Make.py -p atc -a machine
-
-To un-install via make or Make.py:
-
-.. parsed-literal::
-
- make no-user-atc
- make machine
-
-.. parsed-literal::
-
- Make.py -p ^atc -a machine
-
-Supporting info:src/USER-ATC/README, :doc:`fix atc <fix_atc>`,
-examples/USER/atc
-
-Authors: Reese Jones (rjones at sandia.gov), Jeremy Templeton (jatempl
-at sandia.gov) and Jon Zimmerman (jzimmer at sandia.gov) at Sandia.
-Contact them directly if you have questions.
-
-
-----------
-
-
-.. _USER-AWPMD:
-
-USER-AWPMD package
-^^^^^^^^^^^^^^^^^^
-
-Contents: AWPMD stands for Antisymmetrized Wave Packet Molecular
-Dynamics. This package implements an atom, pair, and fix style which
-allows electrons to be treated as explicit particles in an MD
-calculation. See src/USER-AWPMD/README for more details.
-
-To build LAMMPS with this package ...
-
-Supporting info: src/USER-AWPMD/README, :doc:`fix awpmd/cut <pair_awpmd_cut>`, examples/USER/awpmd
-
-Author: Ilya Valuev at the JIHT in Russia (valuev at
-physik.hu-berlin.de). Contact him directly if you have questions.
-
-
-----------
-
-
-.. _USER-CG-CMM:
-
-USER-CG-CMM package
-^^^^^^^^^^^^^^^^^^^
-
-Contents: CG-CMM stands for coarse-grained ??. This package
-implements several pair styles and an angle style using the coarse
-grained parametrization of Shinoda, DeVane, Klein, Mol Sim, 33, 27
-(2007) (SDK), with extensions to simulate ionic liquids, electrolytes,
-lipids and charged amino acids. See src/USER-CG-CMM/README for more
-details.
-
-Supporting info: src/USER-CG-CMM/README, :doc:`pair lj/sdk <pair_sdk>`,
-:doc:`pair lj/sdk/coul/long <pair_sdk>`, :doc:`angle sdk <angle_sdk>`,
-examples/USER/cg-cmm
-
-Author: Axel Kohlmeyer at Temple U (akohlmey at gmail.com). Contact
-him directly if you have questions.
-
-
-----------
-
-
-.. _USER-COLVARS:
-
-USER-COLVARS package
-^^^^^^^^^^^^^^^^^^^^
-
-Contents: COLVARS stands for collective variables which can be used to
-implement Adaptive Biasing Force, Metadynamics, Steered MD, Umbrella
-Sampling and Restraints. This package implements a :doc:`fix colvars <fix_colvars>` command which wraps a COLVARS library which
-can perform those kinds of simulations. See src/USER-COLVARS/README
-for more details.
-
-Supporting info:
-`doc/PDF/colvars-refman-lammps.pdf <PDF/colvars-refman-lammps.pdf>`_,
-src/USER-COLVARS/README, lib/colvars/README, :doc:`fix colvars <fix_colvars>`, examples/USER/colvars
-
-Authors: Axel Kohlmeyer at Temple U (akohlmey at gmail.com) wrote the
-fix. The COLVARS library itself is written and maintained by Giacomo
-Fiorin (ICMS, Temple University, Philadelphia, PA, USA) and Jerome
-Henin (LISM, CNRS, Marseille, France). Contact them directly if you
-have questions.
-
-
-----------
-
-
-.. _USER-DIFFRACTION:
-
-USER-DIFFRACTION package
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-Contents: This packages implements two computes and a fix for
-calculating x-ray and electron diffraction intensities based on
-kinematic diffraction theory. See src/USER-DIFFRACTION/README for
-more details.
-
-Supporting info: :doc:`compute saed <compute_saed>`, :doc:`compute xrd <compute_xrd>`, :doc:`fix saed.vtk <fix_saed_vtk>`,
-examples/USER/diffraction
-
-Author: Shawn P. Coleman (shawn.p.coleman8.ctr at mail.mil) while at
-the University of Arkansas. Contact him directly if you have
-questions.
-
-
-----------
-
-
-.. _USER-DPD:
-
-USER-DPD package
-^^^^^^^^^^^^^^^^
-
-Contents: DPD stands for dissipative particle dynamics, This package
-implements DPD for isothermal, isoenergetic, isobaric and isenthalpic
-conditions. It also has extensions for performing reactive DPD, where
-each particle has internal state for multiple species and a coupled
-set of chemical reaction ODEs are integrated each timestep. The DPD
-equations of motion are integrated efficiently through the Shardlow
-splitting algorithm. See src/USER-DPD/README for more details.
-
-Supporting info: /src/USER-DPD/README, :doc:`compute dpd <compute_dpd>`
-:doc:`compute dpd/atom <compute_dpd_atom>`
-:doc:`fix eos/cv <fix_eos_table>` :doc:`fix eos/table <fix_eos_table>`
-:doc:`fix shardlow <fix_shardlow>`
-:doc:`pair_dpd/conservative <pair_dpd_conservative>`
-:doc:`pair_dpd/fdt <pair_dpd_fdt>`
-:doc:`pair_dpd/fdt/energy <pair_dpd_fdt>`, examples/USER/dpd
-
-Authors: James Larentzos (ARL) (james.p.larentzos.civ at mail.mil),
-Timothy Mattox (Engility Corp) (Timothy.Mattox at engilitycorp.com)
-and John Brennan (ARL) (john.k.brennan.civ at mail.mil). Contact them
-directly if you have questions.
-
-
-----------
-
-
-.. _USER-DRUDE:
-
-USER-DRUDE package
-^^^^^^^^^^^^^^^^^^
-
-Contents: This package contains methods for simulating polarizable
-systems using thermalized Drude oscillators. It has computes, fixes,
-and pair styles for this purpose. See :ref:`Section howto 6.27 <howto_27>` for an overview of how to use the
-package. See src/USER-DRUDE/README for additional details. There are
-auxiliary tools for using this package in tools/drude.
-
-Supporting info: :ref:`Section howto 6.27 <howto_27>`,
-src/USER-DRUDE/README, :doc:`fix drude <fix_drude>`, :doc:`fix drude/transform/* <fix_drude_transform>`, :doc:`compute temp/drude <compute_temp_drude>`, :doc:`pair thole <pair_thole>`,
-:doc:`pair lj/cut/thole/long <pair_thole>`, examples/USER/drude,
-tools/drude
-
-Authors: Alain Dequidt at Universite Blaise Pascal Clermont-Ferrand
-(alain.dequidt at univ-bpclermont.fr); co-authors: Julien Devemy,
-Agilio Padua. Contact them directly if you have questions.
-
-
-----------
-
-
-.. _USER-EFF:
-
-USER-EFF package
-^^^^^^^^^^^^^^^^
-
-Contents: EFF stands for electron force field. This package contains
-atom, pair, fix and compute styles which implement the eFF as
-described in A. Jaramillo-Botero, J. Su, Q. An, and W.A. Goddard III,
-JCC, 2010. The eFF potential was first introduced by Su and Goddard,
-in 2007. See src/USER-EFF/README for more details. There are
-auxiliary tools for using this package in tools/eff; see its README
-file.
-
-Supporting info:
-
-Author: Andres Jaramillo-Botero at CalTech (ajaramil at
-wag.caltech.edu). Contact him directly if you have questions.
-
-
-----------
-
-
-.. _USER-FEP:
-
-USER-FEP package
-^^^^^^^^^^^^^^^^
-
-Contents: FEP stands for free energy perturbation. This package
-provides methods for performing FEP simulations by using a :doc:`fix adapt/fep <fix_adapt_fep>` command with soft-core pair potentials,
-which have a "soft" in their style name. See src/USER-FEP/README for
-more details. There are auxiliary tools for using this package in
-tools/fep; see its README file.
-
-Supporting info: src/USER-FEP/README, :doc:`fix adapt/fep <fix_adapt_fep>`, :doc:`compute fep <compute_fep>`,
-:doc:`pair_style */soft <pair_lj_soft>`, examples/USER/fep
-
-Author: Agilio Padua at Universite Blaise Pascal Clermont-Ferrand
-(agilio.padua at univ-bpclermont.fr). Contact him directly if you have
-questions.
-
-
-----------
-
-
-.. _USER-H5MD:
-
-USER-H5MD package
-^^^^^^^^^^^^^^^^^
-
-Contents: H5MD stands for HDF5 for MD. `HDF5 <HDF5_>`_ is a binary,
-portable, self-describing file format, used by many scientific
-simulations. H5MD is a format for molecular simulations, built on top
-of HDF5. This package implements a :doc:`dump h5md <dump_h5md>` command
-to output LAMMPS snapshots in this format. See src/USER-H5MD/README
-for more details.
-
-.. _HDF5: http://www.hdfgroup.org/HDF5/
-
-
-
-Supporting info: src/USER-H5MD/README, lib/h5md/README, :doc:`dump h5md <dump_h5md>`
-
-Author: Pierre de Buyl at KU Leuven (see http://pdebuyl.be) created
-this package as well as the H5MD format and library. Contact him
-directly if you have questions.
-
-
-----------
-
-
-.. _USER-INTEL:
-
-USER-INTEL package
-^^^^^^^^^^^^^^^^^^
-
-Contents: Dozens of pair, bond, angle, dihedral, and improper styles
-that are optimized for Intel CPUs and the Intel Xeon Phi (in offload
-mode). All of them have an "intel" in their style name. :doc:`Section accelerate intel <accelerate_intel>` gives details of what hardware
-and compilers are required on your system, and how to build and use
-this package. Also see src/USER-INTEL/README for more details. See
-the KOKKOS, OPT, and USER-OMP packages, which also have CPU and
-Phi-enabled styles.
-
-Supporting info: examples/accelerate, src/USER-INTEL/TEST
-
-:ref:`Section_accelerate <acc_9>`
-
-Author: Mike Brown at Intel (michael.w.brown at intel.com). Contact
-him directly if you have questions.
-
-For the USER-INTEL package, you have 2 choices when building. You can
-build with CPU or Phi support. The latter uses Xeon Phi chips in
-"offload" mode. Each of these modes requires additional settings in
-your Makefile.machine for CCFLAGS and LINKFLAGS.
-
-For CPU mode (if using an Intel compiler):
-
-* CCFLAGS: add -fopenmp, -DLAMMPS_MEMALIGN=64, -restrict, -xHost, -fno-alias, -ansi-alias, -override-limits
-* LINKFLAGS: add -fopenmp
-
-For Phi mode add the following in addition to the CPU mode flags:
-
-* CCFLAGS: add -DLMP_INTEL_OFFLOAD and
-* LINKFLAGS: add -offload
-
-And also add this to CCFLAGS:
-
-.. parsed-literal::
-
- -offload-option,mic,compiler,"-fp-model fast=2 -mGLOB_default_function_attrs=\"gather_scatter_loop_unroll=4\""
-
-Examples:
-
-
-----------
-
-
-.. _USER-LB:
-
-USER-LB package
-^^^^^^^^^^^^^^^
-
-Supporting info:
-
-This package contains a LAMMPS implementation of a background
-Lattice-Boltzmann fluid, which can be used to model MD particles
-influenced by hydrodynamic forces.
-
-See this doc page and its related commands to get started:
-
-:doc:`fix lb/fluid <fix_lb_fluid>`
-
-The people who created this package are Frances Mackay (fmackay at
-uwo.ca) and Colin (cdennist at uwo.ca) Denniston, University of
-Western Ontario. Contact them directly if you have questions.
-
-Examples: examples/USER/lb
-
-
-----------
-
-
-.. _USER-MGPT:
-
-USER-MGPT package
-^^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-This package contains a fast implementation for LAMMPS of
-quantum-based MGPT multi-ion potentials. The MGPT or model GPT method
-derives from first-principles DFT-based generalized pseudopotential
-theory (GPT) through a series of systematic approximations valid for
-mid-period transition metals with nearly half-filled d bands. The
-MGPT method was originally developed by John Moriarty at Lawrence
-Livermore National Lab (LLNL).
-
-In the general matrix representation of MGPT, which can also be
-applied to f-band actinide metals, the multi-ion potentials are
-evaluated on the fly during a simulation through d- or f-state matrix
-multiplication, and the forces that move the ions are determined
-analytically. The *mgpt* pair style in this package calculates forces
-and energies using an optimized matrix-MGPT algorithm due to Tomas
-Oppelstrup at LLNL.
-
-See this doc page to get started:
-
-:doc:`pair_style mgpt <pair_mgpt>`
-
-The persons who created the USER-MGPT package are Tomas Oppelstrup
-(oppelstrup2@llnl.gov) and John Moriarty (moriarty2@llnl.gov)
-Contact them directly if you have any questions.
-
-Examples: examples/USER/mgpt
-
-
-----------
-
-
-.. _USER-MISC:
-
-USER-MISC package
-^^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-The files in this package are a potpourri of (mostly) unrelated
-features contributed to LAMMPS by users. Each feature is a single
-pair of files (*.cpp and *.h).
-
-More information about each feature can be found by reading its doc
-page in the LAMMPS doc directory. The doc page which lists all LAMMPS
-input script commands is as follows:
-
-:ref:`Section_commands <cmd_5>`
-
-User-contributed features are listed at the bottom of the fix,
-compute, pair, etc sections.
-
-The list of features and author of each is given in the
-src/USER-MISC/README file.
-
-You should contact the author directly if you have specific questions
-about the feature or its coding.
-
-Examples: examples/USER/misc
-
-
-----------
-
-
-.. _USER-MANIFOLD:
-
-USER-MANIFOLD package
-^^^^^^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-This package contains a dump molfile command which uses molfile
-plugins that are bundled with the
-`VMD <http://www.ks.uiuc.edu/Research/vmd>`_ molecular visualization and
-analysis program, to enable LAMMPS to dump its information in formats
-compatible with various molecular simulation tools.
-
-This package allows LAMMPS to perform MD simulations of particles
-constrained on a manifold (i.e., a 2D subspace of the 3D simulation
-box). It achieves this using the RATTLE constraint algorithm applied
-to single-particle constraint functions g(xi,yi,zi) = 0 and their
-derivative (i.e. the normal of the manifold) n = grad(g).
-
-See this doc page to get started:
-
-:doc:`fix manifoldforce <fix_manifoldforce>`
-
-The person who created this package is Stefan Paquay, at the Eindhoven
-University of Technology (TU/e), The Netherlands (s.paquay at tue.nl).
-Contact him directly if you have questions.
-
-
-----------
-
-
-.. _USER-MOLFILE:
-
-USER-MOLFILE package
-^^^^^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-This package contains a dump molfile command which uses molfile
-plugins that are bundled with the
-`VMD <http://www.ks.uiuc.edu/Research/vmd>`_ molecular visualization and
-analysis program, to enable LAMMPS to dump its information in formats
-compatible with various molecular simulation tools.
-
-The package only provides the interface code, not the plugins. These
-can be obtained from a VMD installation which has to match the
-platform that you are using to compile LAMMPS for. By adding plugins
-to VMD, support for new file formats can be added to LAMMPS (or VMD or
-other programs that use them) without having to recompile the
-application itself.
-
-See this doc page to get started:
-
-:ref:`dump molfile <acc_5>`
-
-The person who created this package is Axel Kohlmeyer at Temple U
-(akohlmey at gmail.com). Contact him directly if you have questions.
-
-
-----------
-
-
-.. _USER-OMP:
-
-USER-OMP package
-^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-This package provides OpenMP multi-threading support and
-other optimizations of various LAMMPS pair styles, dihedral
-styles, and fix styles.
-
-See this section of the manual to get started:
-
-:ref:`Section_accelerate <acc_5>`
-
-The person who created this package is Axel Kohlmeyer at Temple U
-(akohlmey at gmail.com). Contact him directly if you have questions.
-
-For the USER-OMP package, your Makefile.machine needs additional
-settings for CCFLAGS and LINKFLAGS.
-
-* CCFLAGS: add -fopenmp and -restrict
-* LINKFLAGS: add -fopenmp
-
-Examples: examples/accelerate, bench/KEPLER
-
-
-----------
-
-
-.. _USER-PHONON:
-
-USER-PHONON package
-^^^^^^^^^^^^^^^^^^^
-
-This package contains a fix phonon command that calculates dynamical
-matrices, which can then be used to compute phonon dispersion
-relations, directly from molecular dynamics simulations.
-
-See this doc page to get started:
-
-:doc:`fix phonon <fix_phonon>`
-
-The person who created this package is Ling-Ti Kong (konglt at
-sjtu.edu.cn) at Shanghai Jiao Tong University. Contact him directly
-if you have questions.
-
-Examples: examples/USER/phonon
-
-
-----------
-
-
-.. _USER-QMMM:
-
-USER-QMMM package
-^^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-This package provides a fix qmmm command which allows LAMMPS to be
-used in a QM/MM simulation, currently only in combination with pw.x
-code from the `Quantum ESPRESSO <espresso_>`_ package.
-
-.. _espresso: http://www.quantum-espresso.org
-
-
-
-The current implementation only supports an ONIOM style mechanical
-coupling to the Quantum ESPRESSO plane wave DFT package.
-Electrostatic coupling is in preparation and the interface has been
-written in a manner that coupling to other QM codes should be possible
-without changes to LAMMPS itself.
-
-See this doc page to get started:
-
-:doc:`fix qmmm <fix_qmmm>`
-
-as well as the lib/qmmm/README file.
-
-The person who created this package is Axel Kohlmeyer at Temple U
-(akohlmey at gmail.com). Contact him directly if you have questions.
-
-
-----------
-
-
-.. _USER-QTB:
-
-USER-QTB package
-^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-This package provides a self-consistent quantum treatment of the
-vibrational modes in a classical molecular dynamics simulation. By
-coupling the MD simulation to a colored thermostat, it introduces zero
-point energy into the system, alter the energy power spectrum and the
-heat capacity towards their quantum nature. This package could be of
-interest if one wants to model systems at temperatures lower than
-their classical limits or when temperatures ramp up across the
-classical limits in the simulation.
-
-See these two doc pages to get started:
-
-:doc:`fix qtb <fix_qtb>` provides quantum nulcear correction through a
-colored thermostat and can be used with other time integration schemes
-like :doc:`fix nve <fix_nve>` or :doc:`fix nph <fix_nh>`.
-
-:doc:`fix qbmsst <fix_qbmsst>` enables quantum nuclear correction of a
-multi-scale shock technique simulation by coupling the quantum thermal
-bath with the shocked system.
-
-The person who created this package is Yuan Shen (sy0302 at
-stanford.edu) at Stanford University. Contact him directly if you
-have questions.
-
-Examples: examples/USER/qtb
-
-
-----------
-
-
-.. _USER-QUIP:
-
-USER-QUIP package
-^^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-Examples: examples/USER/quip
-
-
-----------
-
-
-.. _USER-REAXC:
-
-USER-REAXC package
-^^^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-This package contains a implementation for LAMMPS of the ReaxFF force
-field. ReaxFF uses distance-dependent bond-order functions to
-represent the contributions of chemical bonding to the potential
-energy. It was originally developed by Adri van Duin and the Goddard
-group at CalTech.
-
-The USER-REAXC version of ReaxFF (pair_style reax/c), implemented in
-C, should give identical or very similar results to pair_style reax,
-which is a ReaxFF implementation on top of a Fortran library, a
-version of which library was originally authored by Adri van Duin.
-
-The reax/c version should be somewhat faster and more scalable,
-particularly with respect to the charge equilibration calculation. It
-should also be easier to build and use since there are no complicating
-issues with Fortran memory allocation or linking to a Fortran library.
-
-For technical details about this implemention of ReaxFF, see
-this paper:
-
-Parallel and Scalable Reactive Molecular Dynamics: Numerical Methods
-and Algorithmic Techniques, H. M. Aktulga, J. C. Fogarty,
-S. A. Pandit, A. Y. Grama, Parallel Computing, in press (2011).
-
-See the doc page for the pair_style reax/c command for details
-of how to use it in LAMMPS.
-
-The person who created this package is Hasan Metin Aktulga (hmaktulga
-at lbl.gov), while at Purdue University. Contact him directly, or
-Aidan Thompson at Sandia (athomps at sandia.gov), if you have
-questions.
-
-Examples: examples/reax
-
-
-----------
-
-
-.. _USER-SMD:
-
-USER-SMD package
-^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-This package implements smoothed Mach dynamics (SMD) in
-LAMMPS. Currently, the package has the following features:
-
-* Does liquids via traditional Smooth Particle Hydrodynamics (SPH)
-
-* Also solves solids mechanics problems via a state of the art
- stabilized meshless method with hourglass control.
-
-* Can specify hydrostatic interactions independently from material
- strength models, i.e. pressure and deviatoric stresses are separated.
-
-* Many material models available (Johnson-Cook, plasticity with
- hardening, Mie-Grueneisen, Polynomial EOS). Easy to add new
- material models.
-
-* Rigid boundary conditions (walls) can be loaded as surface geometries
- from *.STL files.
-
-See the file doc/PDF/SMD_LAMMPS_userguide.pdf to get started.
-
-There are example scripts for using this package in examples/USER/smd.
-
-The person who created this package is Georg Ganzenmuller at the
-Fraunhofer-Institute for High-Speed Dynamics, Ernst Mach Institute in
-Germany (georg.ganzenmueller at emi.fhg.de). Contact him directly if
-you have questions.
-
-Examples: examples/USER/smd
-
-
-----------
-
-
-.. _USER-SMTBQ:
-
-USER-SMTBQ package
-^^^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-This package implements the Second Moment Tight Binding - QEq (SMTB-Q)
-potential for the description of ionocovalent bonds in oxides.
-
-There are example scripts for using this package in
-examples/USER/smtbq.
-
-See this doc page to get started:
-
-:doc:`pair_style smtbq <pair_smtbq>`
-
-The persons who created the USER-SMTBQ package are Nicolas Salles,
-Emile Maras, Olivier Politano, Robert Tetot, who can be contacted at
-these email addreses: lammps@u-bourgogne.fr, nsalles@laas.fr. Contact
-them directly if you have any questions.
-
-Examples: examples/USER/smtbq
-
-
-----------
-
-
-.. _USER-SPH:
-
-USER-SPH package
-^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-This package implements smoothed particle hydrodynamics (SPH) in
-LAMMPS. Currently, the package has the following features:
-
-* Tait, ideal gas, Lennard-Jones equation of states, full support for
- complete (i.e. internal-energy dependent) equations of state
-
-* Plain or Monaghans XSPH integration of the equations of motion
-
-* Density continuity or density summation to propagate the density field
-
-* Commands to set internal energy and density of particles from the
- input script
-
-* Output commands to access internal energy and density for dumping and
- thermo output
-
-See the file doc/PDF/SPH_LAMMPS_userguide.pdf to get started.
-
-There are example scripts for using this package in examples/USER/sph.
-
-The person who created this package is Georg Ganzenmuller at the
-Fraunhofer-Institute for High-Speed Dynamics, Ernst Mach Institute in
-Germany (georg.ganzenmueller at emi.fhg.de). Contact him directly if
-you have questions.
-
-Examples: examples/USER/sph
-
-
-----------
-
-
-.. _USER-TALLY:
-
-USER-TALLY package
-^^^^^^^^^^^^^^^^^^
-
-Supporting info:
-
-Examples: examples/USER/tally
-
-
-----------
-
-
-.. _USER-VTK:
-
-USER-VTK package
-^^^^^^^^^^^^^^^^
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_perf.txt b/doc/html/_sources/Section_perf.txt
deleted file mode 100644
index e398d5245..000000000
--- a/doc/html/_sources/Section_perf.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-Performance & scalability
-=========================
-
-Current LAMMPS performance is discussed on the Benchmarks page of the
-`LAMMPS WWW Site <lws_>`_ where CPU timings and parallel efficiencies are
-listed. The page has several sections, which are briefly described
-below:
-
-* CPU performance on 5 standard problems, strong and weak scaling
-* GPU and Xeon Phi performance on same and related problems
-* Comparison of cost of interatomic potentials
-* Performance of huge, billion-atom problems
-
-The 5 standard problems are as follow:
-
-#. LJ = atomic fluid, Lennard-Jones potential with 2.5 sigma cutoff (55
- neighbors per atom), NVE integration
-#. Chain = bead-spring polymer melt of 100-mer chains, FENE bonds and LJ
- pairwise interactions with a 2^(1/6) sigma cutoff (5 neighbors per
- atom), NVE integration
-#. EAM = metallic solid, Cu EAM potential with 4.95 Angstrom cutoff (45
- neighbors per atom), NVE integration
-#. Chute = granular chute flow, frictional history potential with 1.1
- sigma cutoff (7 neighbors per atom), NVE integration
-#. Rhodo = rhodopsin protein in solvated lipid bilayer, CHARMM force
- field with a 10 Angstrom LJ cutoff (440 neighbors per atom),
- particle-particle particle-mesh (PPPM) for long-range Coulombics, NPT
- integration
-
-Input files for these 5 problems are provided in the bench directory
-of the LAMMPS distribution. Each has 32,000 atoms and runs for 100
-timesteps. The size of the problem (number of atoms) can be varied
-using command-line switches as described in the bench/README file.
-This is an easy way to test performance and either strong or weak
-scalability on your machine.
-
-The bench directory includes a few log.* files that show performance
-of these 5 problems on 1 or 4 cores of Linux desktop. The bench/FERMI
-and bench/KEPLER dirs have input files and scripts and instructions
-for running the same (or similar) problems using OpenMP or GPU or Xeon
-Phi acceleration options. See the README files in those dirs and the
-:doc:`Section accelerate <Section_accelerate>` doc pages for
-instructions on how to build LAMMPS and run on that kind of hardware.
-
-The bench/POTENTIALS directory has input files which correspond to the
-table of results on the
-:ref:`Potentials <potentials>` section of
-the Benchmarks web page. So you can also run those test problems on
-your machine.
-
-The :ref:`billion-atom <billion>` section
-of the Benchmarks web page has performance data for very large
-benchmark runs of simple Lennard-Jones (LJ) models, which use the
-bench/in.lj input script.
-
-
-----------
-
-
-For all the benchmarks, a useful metric is the CPU cost per atom per
-timestep. Since performance scales roughly linearly with problem size
-and timesteps for all LAMMPS models (i.e. inteatomic or coarse-grained
-potentials), the run time of any problem using the same model (atom
-style, force field, cutoff, etc) can then be estimated.
-
-Performance on a parallel machine can also be predicted from one-core
-or one-node timings if the parallel efficiency can be estimated. The
-communication bandwidth and latency of a particular parallel machine
-affects the efficiency. On most machines LAMMPS will give parallel
-efficiencies on these benchmarks above 50% so long as the number of
-atoms/core is a few 100 or greater, and closer to 100% for large
-numbers of atoms/core. This is for all-MPI mode with one MPI task per
-core. For nodes with accelerator options or hardware (OpenMP, GPU,
-Phi), you should first measure single node performance. Then you can
-estimate parallel performance for multi-node runs using the same logic
-as for all-MPI mode, except that now you will typically need many more
-atoms/node to achieve good scalability.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_python.txt b/doc/html/_sources/Section_python.txt
deleted file mode 100644
index 11d62abef..000000000
--- a/doc/html/_sources/Section_python.txt
+++ /dev/null
@@ -1,1003 +0,0 @@
-Python interface to LAMMPS
-==========================
-
-LAMMPS can work together with Python in two ways. First, Python can
-wrap LAMMPS through the :ref:`LAMMPS library interface <howto_19>`, so that a Python script can
-create one or more instances of LAMMPS and launch one or more
-simulations. In Python lingo, this is "extending" Python with LAMMPS.
-
-Second, LAMMPS can use the Python interpreter, so that a LAMMPS input
-script can invoke Python code, and pass information back-and-forth
-between the input script and Python functions you write. The Python
-code can also callback to LAMMPS to query or change its attributes.
-In Python lingo, this is "embedding" Python in LAMMPS.
-
-This section describes how to do both.
-
-* 11.1 :ref:`Overview of running LAMMPS from Python <py_1>`
-* 11.2 :ref:`Overview of using Python from a LAMMPS script <py_2>`
-* 11.3 :ref:`Building LAMMPS as a shared library <py_3>`
-* 11.4 :ref:`Installing the Python wrapper into Python <py_4>`
-* 11.5 :ref:`Extending Python with MPI to run in parallel <py_5>`
-* 11.6 :ref:`Testing the Python-LAMMPS interface <py_6>`
-* 11.7 :ref:`Using LAMMPS from Python <py_7>`
-* 11.8 :ref:`Example Python scripts that use LAMMPS <py_8>`
-
-If you are not familiar with it, `Python <http://www.python.org>`_ is a
-powerful scripting and programming language which can essentially do
-anything that faster, lower-level languages like C or C++ can do, but
-typically with much fewer lines of code. When used in embedded mode,
-Python can perform operations that the simplistic LAMMPS input script
-syntax cannot. Python can be also be used as a "glue" language to
-drive a program through its library interface, or to hook multiple
-pieces of software together, such as a simulation package plus a
-visualization package, or to run a coupled multiscale or multiphysics
-model.
-
-See :ref:`Section_howto 10 <howto_10>` of the manual and
-the couple directory of the distribution for more ideas about coupling
-LAMMPS to other codes. See :ref:`Section_howto 19 <howto_19>` for a description of the LAMMPS
-library interface provided in src/library.cpp and src/library.h, and
-how to extend it for your needs. As described below, that interface
-is what is exposed to Python either when calling LAMMPS from Python or
-when calling Python from a LAMMPS input script and then calling back
-to LAMMPS from Python code. The library interface is designed to be
-easy to add functions to. Thus the Python interface to LAMMPS is also
-easy to extend as well.
-
-If you create interesting Python scripts that run LAMMPS or
-interesting Python functions that can be called from a LAMMPS input
-script, that you think would be useful to other users, please `email them to the developers <http://lammps.sandia.gov/authors.html>`_. We can
-include them in the LAMMPS distribution.
-
-
-
-
-
-.. _py_1:
-
-Overview of running LAMMPS from Python
---------------------------------------
-
-The LAMMPS distribution includes a python directory with all you need
-to run LAMMPS from Python. The python/lammps.py file wraps the LAMMPS
-library interface, with one wrapper function per LAMMPS library
-function. This file makes it is possible to do the following either
-from a Python script, or interactively from a Python prompt: create
-one or more instances of LAMMPS, invoke LAMMPS commands or give it an
-input script, run LAMMPS incrementally, extract LAMMPS results, an
-modify internal LAMMPS variables. From a Python script you can do
-this in serial or parallel. Running Python interactively in parallel
-does not generally work, unless you have a version of Python that
-extends standard Python to enable multiple instances of Python to read
-what you type.
-
-To do all of this, you must first build LAMMPS as a shared library,
-then insure that your Python can find the python/lammps.py file and
-the shared library. These steps are explained in subsequent sections
-11.3 and 11.4. Sections 11.5 and 11.6 discuss using MPI from a
-parallel Python program and how to test that you are ready to use
-LAMMPS from Python. Section 11.7 lists all the functions in the
-current LAMMPS library interface and how to call them from Python.
-
-Section 11.8 gives some examples of coupling LAMMPS to other tools via
-Python. For example, LAMMPS can easily be coupled to a GUI or other
-visualization tools that display graphs or animations in real time as
-LAMMPS runs. Examples of such scripts are inlcluded in the python
-directory.
-
-Two advantages of using Python to run LAMMPS are how concise the
-language is, and that it can be run interactively, enabling rapid
-development and debugging of programs. If you use it to mostly invoke
-costly operations within LAMMPS, such as running a simulation for a
-reasonable number of timesteps, then the overhead cost of invoking
-LAMMPS thru Python will be negligible.
-
-The Python wrapper for LAMMPS uses the amazing and magical (to me)
-"ctypes" package in Python, which auto-generates the interface code
-needed between Python and a set of C interface routines for a library.
-Ctypes is part of standard Python for versions 2.5 and later. You can
-check which version of Python you have installed, by simply typing
-"python" at a shell prompt.
-
-
-----------
-
-
-.. _py_2:
-
-Overview of using Python from a LAMMPS script
----------------------------------------------
-
-.. note::
-
- It is not currently possible to use the :doc:`python <python>`
- command described in this section with Python 3, only with Python 2.
- The C API changed from Python 2 to 3 and the LAMMPS code is not
- compatible with both.
-
-LAMMPS has a :doc:`python <python>` command which can be used in an
-input script 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 :doc:`variable <variable>` 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
-script or in an auxiliary file. The function can have arguments which
-are mapped to LAMMPS variables (also defined in the input script) and
-it can return a value to a LAMMPS variable. This is thus a mechanism
-for your input script to pass information to a piece of Python code,
-ask Python to execute the code, and return information to your input
-script.
-
-Note that a Python function can be arbitrarily complex. It can import
-other Python modules, instantiate Python classes, call other Python
-functions, etc. The Python code that you provide can contain more
-code than the single function. It can contain other functions or
-Python classes, as well as global variables or other mechanisms for
-storing state between calls from LAMMPS to the function.
-
-The Python function you provide can consist of "pure" Python code that
-only performs operations provided by standard Python. However, the
-Python function can also "call back" to LAMMPS through its
-Python-wrapped library interface, in the manner described in the
-previous section 11.1. This means it can issue LAMMPS input script
-commands or query and set internal LAMMPS state. As an example, this
-can be useful in an input script to create a more complex loop with
-branching logic, than can be created using the simple looping and
-branching logic enabled by the :doc:`next <next>` and :doc:`if <if>`
-commands.
-
-See the :doc:`python <python>` doc page and the :doc:`variable <variable>`
-doc page for its python-style variables for more info, including
-examples of Python code you can write for both pure Python operations
-and callbacks to LAMMPS.
-
-To run pure Python code from LAMMPS, you only need to build LAMMPS
-with the PYTHON package installed:
-
-.. parsed-literal::
-
- make yes-python
- make machine
-
-Note that this will link LAMMPS with the Python library on your
-system, which typically requires several auxiliary system libraries to
-also be linked. The list of these libraries and the paths to find
-them are specified in the lib/python/Makefile.lammps file. You need
-to insure that file contains the correct information for your version
-of Python and your machine to successfully build LAMMPS. See the
-lib/python/README file for more info.
-
-If you want to write Python code with callbacks to LAMMPS, then you
-must also follow the steps overviewed in the preceeding section (11.1)
-for running LAMMPS from Python. I.e. you must build LAMMPS as a
-shared library and insure that Python can find the python/lammps.py
-file and the shared library.
-
-
-----------
-
-
-.. _py_3:
-
-Building LAMMPS as a shared library
------------------------------------
-
-Instructions on how to build LAMMPS as a shared library are given in
-:ref:`Section_start 5 <start_5>`. A shared library is one
-that is dynamically loadable, which is what Python requires to wrap
-LAMMPS. On Linux this is a library file that ends in ".so", not ".a".
-
-From the src directory, type
-
-.. parsed-literal::
-
- make foo mode=shlib
-
-where foo is the machine target name, such as linux or g++ or serial.
-This should create the file liblammps_foo.so in the src directory, as
-well as a soft link liblammps.so, which is what the Python wrapper will
-load by default. Note that if you are building multiple machine
-versions of the shared library, the soft link is always set to the
-most recently built version.
-
-.. note::
-
- If you are building LAMMPS with an MPI or FFT library or other
- auxiliary libraries (used by various packages), then all of these
- extra libraries must also be shared libraries. If the LAMMPS
- shared-library build fails with an error complaining about this, see
- :ref:`Section_start 5 <start_5>` for more details.
-
-
-----------
-
-
-.. _py_4:
-
-Installing the Python wrapper into Python
------------------------------------------
-
-For Python to invoke LAMMPS, there are 2 files it needs to know about:
-
-* python/lammps.py
-* src/liblammps.so
-
-Lammps.py is the Python wrapper on the LAMMPS library interface.
-Liblammps.so is the shared LAMMPS library that Python loads, as
-described above.
-
-You can insure Python can find these files in one of two ways:
-
-* set two environment variables
-* run the python/install.py script
-
-If you set the paths to these files as environment variables, you only
-have to do it once. For the csh or tcsh shells, add something like
-this to your ~/.cshrc file, one line for each of the two files:
-
-.. parsed-literal::
-
- setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/python
- setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/src
-
-If you use the python/install.py script, you need to invoke it every
-time you rebuild LAMMPS (as a shared library) or make changes to the
-python/lammps.py file.
-
-You can invoke install.py from the python directory as
-
-.. parsed-literal::
-
- % python install.py [libdir] [pydir]
-
-The optional libdir is where to copy the LAMMPS shared library to; the
-default is /usr/local/lib. The optional pydir is where to copy the
-lammps.py file to; the default is the site-packages directory of the
-version of Python that is running the install script.
-
-Note that libdir must be a location that is in your default
-LD_LIBRARY_PATH, like /usr/local/lib or /usr/lib. And pydir must be a
-location that Python looks in by default for imported modules, like
-its site-packages dir. If you want to copy these files to
-non-standard locations, such as within your own user space, you will
-need to set your PYTHONPATH and LD_LIBRARY_PATH environment variables
-accordingly, as above.
-
-If the install.py script does not allow you to copy files into system
-directories, prefix the python command with "sudo". If you do this,
-make sure that the Python that root runs is the same as the Python you
-run. E.g. you may need to do something like
-
-.. parsed-literal::
-
- % sudo /usr/local/bin/python install.py [libdir] [pydir]
-
-You can also invoke install.py from the make command in the src
-directory as
-
-.. parsed-literal::
-
- % make install-python
-
-In this mode you cannot append optional arguments. Again, you may
-need to prefix this with "sudo". In this mode you cannot control
-which Python is invoked by root.
-
-Note that if you want Python to be able to load different versions of
-the LAMMPS shared library (see :ref:`this section <py_5>` below), you will
-need to manually copy files like liblammps_g++.so into the appropriate
-system directory. This is not needed if you set the LD_LIBRARY_PATH
-environment variable as described above.
-
-
-----------
-
-
-.. _py_5:
-
-Extending Python with MPI to run in parallel
---------------------------------------------
-
-If you wish to run LAMMPS in parallel from Python, you need to extend
-your Python with an interface to MPI. This also allows you to
-make MPI calls directly from Python in your script, if you desire.
-
-There are several Python packages available that purport to wrap MPI
-as a library and allow MPI functions to be called from Python.
-
-These include
-
-* `pyMPI <http://pympi.sourceforge.net/>`_
-* `maroonmpi <http://code.google.com/p/maroonmpi/>`_
-* `mpi4py <http://code.google.com/p/mpi4py/>`_
-* `myMPI <http://nbcr.sdsc.edu/forum/viewtopic.php?t=89&sid=c997fefc3933bd66204875b436940f16>`_
-* `Pypar <http://code.google.com/p/pypar>`_
-
-All of these except pyMPI work by wrapping the MPI library and
-exposing (some portion of) its interface to your Python script. This
-means Python cannot be used interactively in parallel, since they do
-not address the issue of interactive input to multiple instances of
-Python running on different processors. The one exception is pyMPI,
-which alters the Python interpreter to address this issue, and (I
-believe) creates a new alternate executable (in place of "python"
-itself) as a result.
-
-In principle any of these Python/MPI packages should work to invoke
-LAMMPS in parallel and to make MPI calls themselves from a Python
-script which is itself running in parallel. However, when I
-downloaded and looked at a few of them, their documentation was
-incomplete and I had trouble with their installation. It's not clear
-if some of the packages are still being actively developed and
-supported.
-
-The packages Pypar and mpi4py have both been successfully tested with
-LAMMPS. Pypar is simpler and easy to set up and use, but supports
-only a subset of MPI. Mpi4py is more MPI-feature complete, but also a
-bit more complex to use. As of version 2.0.0, mpi4py is the only
-python MPI wrapper that allows passing a custom MPI communicator to
-the LAMMPS constructor, which means one can easily run one or more
-LAMMPS instances on subsets of the total MPI ranks.
-
-
-----------
-
-
-Pypar requires the ubiquitous `Numpy package <http://numpy.scipy.org>`_
-be installed in your Python. After launching Python, type
-
-.. parsed-literal::
-
- import numpy
-
-to see if it is installed. If not, here is how to install it (version
-1.3.0b1 as of April 2009). Unpack the numpy tarball and from its
-top-level directory, type
-
-.. parsed-literal::
-
- python setup.py build
- sudo python setup.py install
-
-The "sudo" is only needed if required to copy Numpy files into your
-Python distribution's site-packages directory.
-
-To install Pypar (version pypar-2.1.4_94 as of Aug 2012), unpack it
-and from its "source" directory, type
-
-.. parsed-literal::
-
- python setup.py build
- sudo python setup.py install
-
-Again, the "sudo" is only needed if required to copy Pypar files into
-your Python distribution's site-packages directory.
-
-If you have successully installed Pypar, you should be able to run
-Python and type
-
-.. parsed-literal::
-
- import pypar
-
-without error. You should also be able to run python in parallel
-on a simple test script
-
-.. parsed-literal::
-
- % mpirun -np 4 python test.py
-
-where test.py contains the lines
-
-.. parsed-literal::
-
- import pypar
- print "Proc %d out of %d procs" % (pypar.rank(),pypar.size())
-
-and see one line of output for each processor you run on.
-
-.. note::
-
- To use Pypar and LAMMPS in parallel from Python, you must insure
- both are using the same version of MPI. If you only have one MPI
- installed on your system, this is not an issue, but it can be if you
- have multiple MPIs. Your LAMMPS build is explicit about which MPI it
- is using, since you specify the details in your lo-level
- src/MAKE/Makefile.foo file. Pypar uses the "mpicc" command to find
- information about the MPI it uses to build against. And it tries to
- load "libmpi.so" from the LD_LIBRARY_PATH. This may or may not find
- the MPI library that LAMMPS is using. If you have problems running
- both Pypar and LAMMPS together, this is an issue you may need to
- address, e.g. by moving other MPI installations so that Pypar finds
- the right one.
-
-
-----------
-
-
-To install mpi4py (version mpi4py-2.0.0 as of Oct 2015), unpack it
-and from its main directory, type
-
-.. parsed-literal::
-
- python setup.py build
- sudo python setup.py install
-
-Again, the "sudo" is only needed if required to copy mpi4py files into
-your Python distribution's site-packages directory. To install with
-user privilege into the user local directory type
-
-.. parsed-literal::
-
- python setup.py install --user
-
-If you have successully installed mpi4py, you should be able to run
-Python and type
-
-.. parsed-literal::
-
- from mpi4py import MPI
-
-without error. You should also be able to run python in parallel
-on a simple test script
-
-.. parsed-literal::
-
- % mpirun -np 4 python test.py
-
-where test.py contains the lines
-
-.. parsed-literal::
-
- from mpi4py import MPI
- comm = MPI.COMM_WORLD
- print "Proc %d out of %d procs" % (comm.Get_rank(),comm.Get_size())
-
-and see one line of output for each processor you run on.
-
-.. note::
-
- To use mpi4py and LAMMPS in parallel from Python, you must
- insure both are using the same version of MPI. If you only have one
- MPI installed on your system, this is not an issue, but it can be if
- you have multiple MPIs. Your LAMMPS build is explicit about which MPI
- it is using, since you specify the details in your lo-level
- src/MAKE/Makefile.foo file. Mpi4py uses the "mpicc" command to find
- information about the MPI it uses to build against. And it tries to
- load "libmpi.so" from the LD_LIBRARY_PATH. This may or may not find
- the MPI library that LAMMPS is using. If you have problems running
- both mpi4py and LAMMPS together, this is an issue you may need to
- address, e.g. by moving other MPI installations so that mpi4py finds
- the right one.
-
-
-----------
-
-
-.. _py_6:
-
-Testing the Python-LAMMPS interface
------------------------------------
-
-To test if LAMMPS is callable from Python, launch Python interactively
-and type:
-
-.. parsed-literal::
-
- >>> from lammps import lammps
- >>> lmp = lammps()
-
-If you get no errors, you're ready to use LAMMPS from Python. If the
-2nd command fails, the most common error to see is
-
-.. parsed-literal::
-
- OSError: Could not load LAMMPS dynamic library
-
-which means Python was unable to load the LAMMPS shared library. This
-typically occurs if the system can't find the LAMMPS shared library or
-one of the auxiliary shared libraries it depends on, or if something
-about the library is incompatible with your Python. The error message
-should give you an indication of what went wrong.
-
-You can also test the load directly in Python as follows, without
-first importing from the lammps.py file:
-
-.. parsed-literal::
-
- >>> from ctypes import CDLL
- >>> CDLL("liblammps.so")
-
-If an error occurs, carefully go thru the steps in :ref:`Section_start 5 <start_5>` and above about building a shared
-library and about insuring Python can find the necessary two files
-it needs.
-
-**Test LAMMPS and Python in serial:**
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-To run a LAMMPS test in serial, type these lines into Python
-interactively from the bench directory:
-
-.. parsed-literal::
-
- >>> from lammps import lammps
- >>> lmp = lammps()
- >>> lmp.file("in.lj")
-
-Or put the same lines in the file test.py and run it as
-
-.. parsed-literal::
-
- % python test.py
-
-Either way, you should see the results of running the in.lj benchmark
-on a single processor appear on the screen, the same as if you had
-typed something like:
-
-.. parsed-literal::
-
- lmp_g++ -in in.lj
-
-**Test LAMMPS and Python in parallel:**
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-To run LAMMPS in parallel, assuming you have installed the
-`Pypar <Pypar>`_ package as discussed above, create a test.py file
-containing these lines:
-
-.. parsed-literal::
-
- import pypar
- from lammps import lammps
- lmp = lammps()
- lmp.file("in.lj")
- print "Proc %d out of %d procs has" % (pypar.rank(),pypar.size()),lmp
- pypar.finalize()
-
-To run LAMMPS in parallel, assuming you have installed the
-`mpi4py <mpi4py>`_ package as discussed above, create a test.py file
-containing these lines:
-
-.. parsed-literal::
-
- from mpi4py import MPI
- from lammps import lammps
- lmp = lammps()
- lmp.file("in.lj")
- me = MPI.COMM_WORLD.Get_rank()
- nprocs = MPI.COMM_WORLD.Get_size()
- print "Proc %d out of %d procs has" % (me,nprocs),lmp
- MPI.Finalize()
-
-You can either script in parallel as:
-
-.. parsed-literal::
-
- % mpirun -np 4 python test.py
-
-and you should see the same output as if you had typed
-
-.. parsed-literal::
-
- % mpirun -np 4 lmp_g++ -in in.lj
-
-Note that if you leave out the 3 lines from test.py that specify Pypar
-commands you will instantiate and run LAMMPS independently on each of
-the P processors specified in the mpirun command. In this case you
-should get 4 sets of output, each showing that a LAMMPS run was made
-on a single processor, instead of one set of output showing that
-LAMMPS ran on 4 processors. If the 1-processor outputs occur, it
-means that Pypar is not working correctly.
-
-Also note that once you import the PyPar module, Pypar initializes MPI
-for you, and you can use MPI calls directly in your Python script, as
-described in the Pypar documentation. The last line of your Python
-script should be pypar.finalize(), to insure MPI is shut down
-correctly.
-
-**Running Python scripts:**
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Note that any Python script (not just for LAMMPS) can be invoked in
-one of several ways:
-
-.. parsed-literal::
-
- % python foo.script
- % python -i foo.script
- % foo.script
-
-The last command requires that the first line of the script be
-something like this:
-
-.. parsed-literal::
-
- #!/usr/local/bin/python
- #!/usr/local/bin/python -i
-
-where the path points to where you have Python installed, and that you
-have made the script file executable:
-
-.. parsed-literal::
-
- % chmod +x foo.script
-
-Without the "-i" flag, Python will exit when the script finishes.
-With the "-i" flag, you will be left in the Python interpreter when
-the script finishes, so you can type subsequent commands. As
-mentioned above, you can only run Python interactively when running
-Python on a single processor, not in parallel.
-
-
-
-
-
-.. _py_7:
-
-Using LAMMPS from Python
-------------------------
-
-As described above, the Python interface to LAMMPS consists of a
-Python "lammps" module, the source code for which is in
-python/lammps.py, which creates a "lammps" object, with a set of
-methods that can be invoked on that object. The sample Python code
-below assumes you have first imported the "lammps" module in your
-Python script, as follows:
-
-.. parsed-literal::
-
- from lammps import lammps
-
-These are the methods defined by the lammps module. If you look at
-the files src/library.cpp and src/library.h you will see that they
-correspond one-to-one with calls you can make to the LAMMPS library
-from a C++ or C or Fortran program.
-
-.. parsed-literal::
-
- lmp = lammps() # create a LAMMPS object using the default liblammps.so library
- 4 optional args are allowed: name, cmdargs, ptr, comm
- lmp = lammps(ptr=lmpptr) # use lmpptr as previously created LAMMPS object
- lmp = lammps(comm=split) # create a LAMMPS object with a custom communicator, requires mpi4py 2.0.0 or later
- lmp = lammps(name="g++") # create a LAMMPS object using the liblammps_g++.so library
- lmp = lammps(name="g++",cmdargs=list) # add LAMMPS command-line args, e.g. list = ["-echo","screen"]
-
-.. parsed-literal::
-
- lmp.close() # destroy a LAMMPS object
-
-version = lmp.version() # return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902
-
-.. parsed-literal::
-
- lmp.file(file) # run an entire input script, file = "in.lj"
- lmp.command(cmd) # invoke a single LAMMPS command, cmd = "run 100"
-
-.. parsed-literal::
-
- xlo = lmp.extract_global(name,type) # extract a global quantity
- # name = "boxxlo", "nlocal", etc
- # type = 0 = int
- # 1 = double
-
-.. parsed-literal::
-
- coords = lmp.extract_atom(name,type) # extract a per-atom quantity
- # name = "x", "type", etc
- # type = 0 = vector of ints
- # 1 = array of ints
- # 2 = vector of doubles
- # 3 = array of doubles
-
-.. parsed-literal::
-
- eng = lmp.extract_compute(id,style,type) # extract value(s) from a compute
- v3 = lmp.extract_fix(id,style,type,i,j) # extract value(s) from a fix
- # id = ID of compute or fix
- # style = 0 = global data
- # 1 = per-atom data
- # 2 = local data
- # type = 0 = scalar
- # 1 = vector
- # 2 = array
- # i,j = indices of value in global vector or array
-
-.. parsed-literal::
-
- var = lmp.extract_variable(name,group,flag) # extract value(s) from a variable
- # name = name of variable
- # group = group ID (ignored for equal-style variables)
- # flag = 0 = equal-style variable
- # 1 = atom-style variable
-
-.. parsed-literal::
-
- flag = lmp.set_variable(name,value) # set existing named string-style variable to value, flag = 0 if successful
- natoms = lmp.get_natoms() # total # of atoms as int
- data = lmp.gather_atoms(name,type,count) # return atom attribute of all atoms gathered into data, ordered by atom ID
- # name = "x", "charge", "type", etc
- # count = # of per-atom values, 1 or 3, etc
- lmp.scatter_atoms(name,type,count,data) # scatter atom attribute of all atoms from data, ordered by atom ID
- # name = "x", "charge", "type", etc
- # count = # of per-atom values, 1 or 3, etc
-
-
-----------
-
-
-The lines
-
-.. parsed-literal::
-
- from lammps import lammps
- lmp = lammps()
-
-create an instance of LAMMPS, wrapped in a Python class by the lammps
-Python module, and return an instance of the Python class as lmp. It
-is used to make all subequent calls to the LAMMPS library.
-
-Additional arguments can be used to tell Python the name of the shared
-library to load or to pass arguments to the LAMMPS instance, the same
-as if LAMMPS were launched from a command-line prompt.
-
-If the ptr argument is set like this:
-
-.. parsed-literal::
-
- lmp = lammps(ptr=lmpptr)
-
-then lmpptr must be an argument passed to Python via the LAMMPS
-:doc:`python <python>` command, when it is used to define a Python
-function that is invoked by the LAMMPS input script. This mode of
-using Python with LAMMPS is described above in 11.2. The variable
-lmpptr refers to the instance of LAMMPS that called the embedded
-Python interpreter. Using it as an argument to lammps() allows the
-returned Python class instance "lmp" to make calls to that instance of
-LAMMPS. See the :doc:`python <python>` command doc page for examples
-using this syntax.
-
-Note that you can create multiple LAMMPS objects in your Python
-script, and coordinate and run multiple simulations, e.g.
-
-.. parsed-literal::
-
- from lammps import lammps
- lmp1 = lammps()
- lmp2 = lammps()
- lmp1.file("in.file1")
- lmp2.file("in.file2")
-
-The file() and command() methods allow an input script or single
-commands to be invoked.
-
-The extract_global(), extract_atom(), extract_compute(),
-extract_fix(), and extract_variable() methods return values or
-pointers to data structures internal to LAMMPS.
-
-For extract_global() see the src/library.cpp file for the list of
-valid names. New names could easily be added. A double or integer is
-returned. You need to specify the appropriate data type via the type
-argument.
-
-For extract_atom(), a pointer to internal LAMMPS atom-based data is
-returned, which you can use via normal Python subscripting. See the
-extract() method in the src/atom.cpp file for a list of valid names.
-Again, new names could easily be added. A pointer to a vector of
-doubles or integers, or a pointer to an array of doubles (double **)
-or integers (int **) is returned. You need to specify the appropriate
-data type via the type argument.
-
-For extract_compute() and extract_fix(), the global, per-atom, or
-local data calulated by the compute or fix can be accessed. What is
-returned depends on whether the compute or fix calculates a scalar or
-vector or array. For a scalar, a single double value is returned. If
-the compute or fix calculates a vector or array, a pointer to the
-internal LAMMPS data is returned, which you can use via normal Python
-subscripting. The one exception is that for a fix that calculates a
-global vector or array, a single double value from the vector or array
-is returned, indexed by I (vector) or I and J (array). I,J are
-zero-based indices. The I,J arguments can be left out if not needed.
-See :ref:`Section_howto 15 <howto_15>` of the manual for a
-discussion of global, per-atom, and local data, and of scalar, vector,
-and array data types. See the doc pages for individual
-:doc:`computes <compute>` and :doc:`fixes <fix>` for a description of what
-they calculate and store.
-
-For extract_variable(), an :doc:`equal-style or atom-style variable <variable>` is evaluated and its result returned.
-
-For equal-style variables a single double value is returned and the
-group argument is ignored. For atom-style variables, a vector of
-doubles is returned, one value per atom, which you can use via normal
-Python subscripting. The values will be zero for atoms not in the
-specified group.
-
-The get_natoms() method returns the total number of atoms in the
-simulation, as an int.
-
-The gather_atoms() method returns a ctypes vector of ints or doubles
-as specified by type, of length count*natoms, for the property of all
-the atoms in the simulation specified by name, ordered by count and
-then by atom ID. The vector can be used via normal Python
-subscripting. If atom IDs are not consecutively ordered within
-LAMMPS, a None is returned as indication of an error.
-
-Note that the data structure gather_atoms("x") returns is different
-from the data structure returned by extract_atom("x") in four ways.
-(1) Gather_atoms() returns a vector which you index as x[i];
-extract_atom() returns an array which you index as x[i][j]. (2)
-Gather_atoms() orders the atoms by atom ID while extract_atom() does
-not. (3) Gathert_atoms() returns a list of all atoms in the
-simulation; extract_atoms() returns just the atoms local to each
-processor. (4) Finally, the gather_atoms() data structure is a copy
-of the atom coords stored internally in LAMMPS, whereas extract_atom()
-returns an array that effectively points directly to the internal
-data. This means you can change values inside LAMMPS from Python by
-assigning a new values to the extract_atom() array. To do this with
-the gather_atoms() vector, you need to change values in the vector,
-then invoke the scatter_atoms() method.
-
-The scatter_atoms() method takes a vector of ints or doubles as
-specified by type, of length count*natoms, for the property of all the
-atoms in the simulation specified by name, ordered by bount and then
-by atom ID. It uses the vector of data to overwrite the corresponding
-properties for each atom inside LAMMPS. This requires LAMMPS to have
-its "map" option enabled; see the :doc:`atom_modify <atom_modify>`
-command for details. If it is not, or if atom IDs are not
-consecutively ordered, no coordinates are reset.
-
-The array of coordinates passed to scatter_atoms() must be a ctypes
-vector of ints or doubles, allocated and initialized something like
-this:
-
-.. parsed-literal::
-
- from ctypes import *
- natoms = lmp.get_natoms()
- n3 = 3*natoms
- x = (n3*c_double)()
- x[0] = x coord of atom with ID 1
- x[1] = y coord of atom with ID 1
- x[2] = z coord of atom with ID 1
- x[3] = x coord of atom with ID 2
- ...
- x[n3-1] = z coord of atom with ID natoms
- lmp.scatter_coords("x",1,3,x)
-
-Alternatively, you can just change values in the vector returned by
-gather_atoms("x",1,3), since it is a ctypes vector of doubles.
-
-
-----------
-
-
-As noted above, these Python class methods correspond one-to-one with
-the functions in the LAMMPS library interface in src/library.cpp and
-library.h. This means you can extend the Python wrapper via the
-following steps:
-
-* Add a new interface function to src/library.cpp and
- src/library.h.
-* Rebuild LAMMPS as a shared library.
-* Add a wrapper method to python/lammps.py for this interface
- function.
-* You should now be able to invoke the new interface function from a
- Python script. Isn't ctypes amazing?
-
-
-
-
-.. _py_8:
-
-Example Python scripts that use LAMMPS
---------------------------------------
-
-These are the Python scripts included as demos in the python/examples
-directory of the LAMMPS distribution, to illustrate the kinds of
-things that are possible when Python wraps LAMMPS. If you create your
-own scripts, send them to us and we can include them in the LAMMPS
-distribution.
-
-+----------------------------------------------------------------+--------------------------------------------------+
-| trivial.py | read/run a LAMMPS input script thru Python |
-+----------------------------------------------------------------+--------------------------------------------------+
-| demo.py | invoke various LAMMPS library interface routines |
-+----------------------------------------------------------------+--------------------------------------------------+
-| simple.py | run in parallel |
-+----------------------------------------------------------------+--------------------------------------------------+
-| similar to examples/COUPLE/simple/simple.cpp | split.py |
-+----------------------------------------------------------------+--------------------------------------------------+
-| same as simple.py but running in parallel on a subset of procs | gui.py |
-+----------------------------------------------------------------+--------------------------------------------------+
-| GUI go/stop/temperature-slider to control LAMMPS | plot.py |
-+----------------------------------------------------------------+--------------------------------------------------+
-| real-time temeperature plot with GnuPlot via Pizza.py | viz_tool.py |
-+----------------------------------------------------------------+--------------------------------------------------+
-| real-time viz via some viz package | vizplotgui_tool.py |
-+----------------------------------------------------------------+--------------------------------------------------+
-| combination of viz_tool.py and plot.py and gui.py | |
-+----------------------------------------------------------------+--------------------------------------------------+
-
-
-----------
-
-
-For the viz_tool.py and vizplotgui_tool.py commands, replace "tool"
-with "gl" or "atomeye" or "pymol" or "vmd", depending on what
-visualization package you have installed.
-
-Note that for GL, you need to be able to run the Pizza.py GL tool,
-which is included in the pizza sub-directory. See the `Pizza.py doc pages <pizza_>`_ for more info:
-
-.. _pizza: http://www.sandia.gov/~sjplimp/pizza.html
-
-
-
-Note that for AtomEye, you need version 3, and there is a line in the
-scripts that specifies the path and name of the executable. See the
-AtomEye WWW pages `here <atomeye_>`_ or `here <atomeye3_>`_ for more details:
-
-.. parsed-literal::
-
- http://mt.seas.upenn.edu/Archive/Graphics/A
- http://mt.seas.upenn.edu/Archive/Graphics/A3/A3.html
-
-.. _atomeye: http://mt.seas.upenn.edu/Archive/Graphics/A
-
-
-
-.. _atomeye3: http://mt.seas.upenn.edu/Archive/Graphics/A3/A3.html
-
-
-
-The latter link is to AtomEye 3 which has the scriping
-capability needed by these Python scripts.
-
-Note that for PyMol, you need to have built and installed the
-open-source version of PyMol in your Python, so that you can import it
-from a Python script. See the PyMol WWW pages `here <pymol_>`_ or
-`here <pymolopen_>`_ for more details:
-
-.. parsed-literal::
-
- http://www.pymol.org
- http://sourceforge.net/scm/?type=svn&group_id=4546
-
-.. _pymol: http://www.pymol.org
-
-
-
-.. _pymolopen: http://sourceforge.net/scm/?type=svn&group_id=4546
-
-
-
-The latter link is to the open-source version.
-
-Note that for VMD, you need a fairly current version (1.8.7 works for
-me) and there are some lines in the pizza/vmd.py script for 4 PIZZA
-variables that have to match the VMD installation on your system.
-
-
-----------
-
-
-See the python/README file for instructions on how to run them and the
-source code for individual scripts for comments about what they do.
-
-Here are screenshots of the vizplotgui_tool.py script in action for
-different visualization package options. Click to see larger images:
-
-.. thumbnail:: JPG/screenshot_gl.jpg
-
-.. thumbnail:: JPG/screenshot_atomeye.jpg
-
-.. thumbnail:: JPG/screenshot_pymol.jpg
-
-.. thumbnail:: JPG/screenshot_vmd.jpg
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_start.txt b/doc/html/_sources/Section_start.txt
deleted file mode 100644
index ee5bb6668..000000000
--- a/doc/html/_sources/Section_start.txt
+++ /dev/null
@@ -1,2101 +0,0 @@
-Getting Started
-===============
-
-This section describes how to build and run LAMMPS, for both new and
-experienced users.
-
-| 2.1 :ref:`What's in the LAMMPS distribution <start_1>`
-| 2.2 :ref:`Making LAMMPS <start_2>`
-| 2.3 :ref:`Making LAMMPS with optional packages <start_3>`
-| 2.4 :ref:`Building LAMMPS via the Make.py script <start_4>`
-| 2.5 :ref:`Building LAMMPS as a library <start_5>`
-| 2.6 :ref:`Running LAMMPS <start_6>`
-| 2.7 :ref:`Command-line options <start_7>`
-| 2.8 :ref:`Screen output <start_8>`
-| 2.9 :ref:`Tips for users of previous versions <start_9>`
-|
-
-
-
-
-
-.. _start_1:
-
-What's in the LAMMPS distribution
------------------------------------------------
-
-When you download a LAMMPS tarball you will need to unzip and untar
-the downloaded file with the following commands, after placing the
-tarball in an appropriate directory.
-
-.. parsed-literal::
-
- gunzip lammps*.tar.gz
- tar xvf lammps*.tar
-
-This will create a LAMMPS directory containing two files and several
-sub-directories:
-
-+------------+--------------------------------------------+
-| README | text file |
-+------------+--------------------------------------------+
-| LICENSE | the GNU General Public License (GPL) |
-+------------+--------------------------------------------+
-| bench | benchmark problems |
-+------------+--------------------------------------------+
-| doc | documentation |
-+------------+--------------------------------------------+
-| examples | simple test problems |
-+------------+--------------------------------------------+
-| potentials | embedded atom method (EAM) potential files |
-+------------+--------------------------------------------+
-| src | source files |
-+------------+--------------------------------------------+
-| tools | pre- and post-processing tools |
-+------------+--------------------------------------------+
-
-Note that the `download page <download_>`_ also has links to download
-Windows exectubles and installers, as well as pre-built executables
-for a few specific Linux distributions. It also has instructions for
-how to download/install LAMMPS for Macs (via Homebrew), and to
-download and update LAMMPS from SVN and Git repositories, which gives
-you the same files that are in the download tarball.
-
-.. _download: http://lammps.sandia.gov/download.html
-
-
-
-The Windows and Linux executables for serial or parallel only include
-certain packages and bug-fixes/upgrades listed on `this page <http://lammps.sandia.gov/bug.html>`_ up to a certain date, as
-stated on the download page. If you want an executable with
-non-included packages or that is more current, then you'll need to
-build LAMMPS yourself, as discussed in the next section.
-
-Skip to the :ref:`Running LAMMPS <start_6>` sections for info on how to
-launch a LAMMPS Windows executable on a Windows box.
-
-
-----------
-
-
-.. _start_2:
-
-Making LAMMPS
----------------------------
-
-This section has the following sub-sections:
-
-* :ref:`Read this first <start_2_1>`
-* :ref:`Steps to build a LAMMPS executable <start_2_2>`
-* :ref:`Common errors that can occur when making LAMMPS <start_2_3>`
-* :ref:`Additional build tips <start_2_4>`
-* :ref:`Building for a Mac <start_2_5>`
-* :ref:`Building for Windows <start_2_6>`
-
-
-----------
-
-
-.. _start_2_1:
-
-**\ *Read this first:*\ **
-
-If you want to avoid building LAMMPS yourself, read the preceeding
-section about options available for downloading and installing
-executables. Details are discussed on the `download <download_>`_ page.
-
-Building LAMMPS can be simple or not-so-simple. If all you need are
-the default packages installed in LAMMPS, and MPI is already installed
-on your machine, or you just want to run LAMMPS in serial, then you
-can typically use the Makefile.mpi or Makefile.serial files in
-src/MAKE by typing one of these lines (from the src dir):
-
-.. parsed-literal::
-
- make mpi
- make serial
-
-Note that on a facility supercomputer, there are often "modules"
-loaded in your environment that provide the compilers and MPI you
-should use. In this case, the "mpicxx" compile/link command in
-Makefile.mpi should just work by accessing those modules.
-
-It may be the case that one of the other Makefile.machine files in the
-src/MAKE sub-directories is a better match to your system (type "make"
-to see a list), you can use it as-is by typing (for example):
-
-.. parsed-literal::
-
- make stampede
-
-If any of these builds (with an existing Makefile.machine) works on
-your system, then you're done!
-
-If you want to do one of the following:
-
-* use optional LAMMPS features that require additional libraries
-* use optional packages that require additional libraries
-* use optional accelerator packages that require special compiler/linker settings
-* run on a specialized platform that has its own compilers, settings, or other libs to use
-
-then building LAMMPS is more complicated. You may need to find where
-auxiliary libraries exist on your machine or install them if they
-don't. You may need to build additional libraries that are part of
-the LAMMPS package, before building LAMMPS. You may need to edit a
-Makefile.machine file to make it compatible with your system.
-
-Note that there is a Make.py tool in the src directory that automates
-several of these steps, but you still have to know what you are doing.
-:ref:`Section 2.4 <start_4>` below describes the tool. It is a convenient
-way to work with installing/un-installing various packages, the
-Makefile.machine changes required by some packages, and the auxiliary
-libraries some of them use.
-
-Please read the following sections carefully. If you are not
-comfortable with makefiles, or building codes on a Unix platform, or
-running an MPI job on your machine, please find a local expert to help
-you. Many compilation, linking, and run problems that users have are
-often not really LAMMPS issues - they are peculiar to the user's
-system, compilers, libraries, etc. Such questions are better answered
-by a local expert.
-
-If you have a build problem that you are convinced is a LAMMPS issue
-(e.g. the compiler complains about a line of LAMMPS source code), then
-please post the issue to the `LAMMPS mail list <http://lammps.sandia.gov/mail.html>`_.
-
-If you succeed in building LAMMPS on a new kind of machine, for which
-there isn't a similar machine Makefile included in the
-src/MAKE/MACHINES directory, then send it to the developers and we can
-include it in the LAMMPS distribution.
-
-
-----------
-
-
-.. _start_2_2:
-
-**\ *Steps to build a LAMMPS executable:*\ **
-
-**Step 0**
-
-The src directory contains the C++ source and header files for LAMMPS.
-It also contains a top-level Makefile and a MAKE sub-directory with
-low-level Makefile.* files for many systems and machines. See the
-src/MAKE/README file for a quick overview of what files are available
-and what sub-directories they are in.
-
-The src/MAKE dir has a few files that should work as-is on many
-platforms. The src/MAKE/OPTIONS dir has more that invoke additional
-compiler, MPI, and other setting options commonly used by LAMMPS, to
-illustrate their syntax. The src/MAKE/MACHINES dir has many more that
-have been tweaked or optimized for specific machines. These files are
-all good starting points if you find you need to change them for your
-machine. Put any file you edit into the src/MAKE/MINE directory and
-it will be never be touched by any LAMMPS updates.
-
->From within the src directory, type "make" or "gmake". You should see
-a list of available choices from src/MAKE and all of its
-sub-directories. If one of those has the options you want or is the
-machine you want, you can type a command like:
-
-.. parsed-literal::
-
- make mpi
- or
- make serial_icc
- or
- gmake mac
-
-Note that the corresponding Makefile.machine can exist in src/MAKE or
-any of its sub-directories. If a file with the same name appears in
-multiple places (not a good idea), the order they are used is as
-follows: src/MAKE/MINE, src/MAKE, src/MAKE/OPTIONS, src/MAKE/MACHINES.
-This gives preference to a file you have created/edited and put in
-src/MAKE/MINE.
-
-Note that on a multi-processor or multi-core platform you can launch a
-parallel make, by using the "-j" switch with the make command, which
-will build LAMMPS more quickly.
-
-If you get no errors and an executable like lmp_mpi or lmp_g++_serial
-or lmp_mac is produced, then you're done; it's your lucky day.
-
-Note that by default only a few of LAMMPS optional packages are
-installed. To build LAMMPS with optional packages, see :ref:`this section <start_3>` below.
-
-**Step 1**
-
-If Step 0 did not work, you will need to create a low-level Makefile
-for your machine, like Makefile.foo. You should make a copy of an
-existing Makefile.* in src/MAKE or one of its sub-directories as a
-starting point. The only portions of the file you need to edit are
-the first line, the "compiler/linker settings" section, and the
-"LAMMPS-specific settings" section. When it works, put the edited
-file in src/MAKE/MINE and it will not be altered by any future LAMMPS
-updates.
-
-**Step 2**
-
-Change the first line of Makefile.foo to list the word "foo" after the
-"#", and whatever other options it will set. This is the line you
-will see if you just type "make".
-
-**Step 3**
-
-The "compiler/linker settings" section lists compiler and linker
-settings for your C++ compiler, including optimization flags. You can
-use g++, the open-source GNU compiler, which is available on all Unix
-systems. You can also use mpicxx which will typically be available if
-MPI is installed on your system, though you should check which actual
-compiler it wraps. Vendor compilers often produce faster code. On
-boxes with Intel CPUs, we suggest using the Intel icc compiler, which
-can be downloaded from `Intel's compiler site <intel_>`_.
-
-.. _intel: http://www.intel.com/software/products/noncom
-
-
-
-If building a C++ code on your machine requires additional libraries,
-then you should list them as part of the LIB variable. You should
-not need to do this if you use mpicxx.
-
-The DEPFLAGS setting is what triggers the C++ compiler to create a
-dependency list for a source file. This speeds re-compilation when
-source (*.cpp) or header (*.h) files are edited. Some compilers do
-not support dependency file creation, or may use a different switch
-than -D. GNU g++ and Intel icc works with -D. If your compiler can't
-create dependency files, then you'll need to create a Makefile.foo
-patterned after Makefile.storm, which uses different rules that do not
-involve dependency files. Note that when you build LAMMPS for the
-first time on a new platform, a long list of *.d files will be printed
-out rapidly. This is not an error; it is the Makefile doing its
-normal creation of dependencies.
-
-**Step 4**
-
-The "system-specific settings" section has several parts. Note that
-if you change any -D setting in this section, you should do a full
-re-compile, after typing "make clean" (which will describe different
-clean options).
-
-The LMP_INC variable is used to include options that turn on ifdefs
-within the LAMMPS code. The options that are currently recogized are:
-
-* -DLAMMPS_GZIP
-* -DLAMMPS_JPEG
-* -DLAMMPS_PNG
-* -DLAMMPS_FFMPEG
-* -DLAMMPS_MEMALIGN
-* -DLAMMPS_XDR
-* -DLAMMPS_SMALLBIG
-* -DLAMMPS_BIGBIG
-* -DLAMMPS_SMALLSMALL
-* -DLAMMPS_LONGLONG_TO_LONG
-* -DPACK_ARRAY
-* -DPACK_POINTER
-* -DPACK_MEMCPY
-
-The read_data and dump commands will read/write gzipped files if you
-compile with -DLAMMPS_GZIP. It requires that your machine supports
-the "popen()" function in the standard runtime library and that a gzip
-executable can be found by LAMMPS during a run.
-
-.. note::
-
- on some clusters with high-speed networks, using the fork()
- library calls (required by popen()) can interfere with the fast
- communication library and lead to simulations using compressed output
- or input to hang or crash. For selected operations, compressed file
- I/O is also available using a compression library instead, which are
- provided in the COMPRESS package. From more details about compiling
- LAMMPS with packages, please see below.
-
-If you use -DLAMMPS_JPEG, the :doc:`dump image <dump_image>` command
-will be able to write out JPEG image files. For JPEG files, you must
-also link LAMMPS with a JPEG library, as described below. If you use
--DLAMMPS_PNG, the :doc:`dump image <dump>` command will be able to write
-out PNG image files. For PNG files, you must also link LAMMPS with a
-PNG library, as described below. If neither of those two defines are
-used, LAMMPS will only be able to write out uncompressed PPM image
-files.
-
-If you use -DLAMMPS_FFMPEG, the :doc:`dump movie <dump_image>` command
-will be available to support on-the-fly generation of rendered movies
-the need to store intermediate image files. It requires that your
-machines supports the "popen" function in the standard runtime library
-and that an FFmpeg executable can be found by LAMMPS during the run.
-
-.. note::
-
- Similar to the note above, this option can conflict with
- high-speed networks, because it uses popen().
-
-Using -DLAMMPS_MEMALIGN=<bytes> enables the use of the
-posix_memalign() call instead of malloc() when large chunks or memory
-are allocated by LAMMPS. This can help to make more efficient use of
-vector instructions of modern CPUS, since dynamically allocated memory
-has to be aligned on larger than default byte boundaries (e.g. 16
-bytes instead of 8 bytes on x86 type platforms) for optimal
-performance.
-
-If you use -DLAMMPS_XDR, the build will include XDR compatibility
-files for doing particle dumps in XTC format. This is only necessary
-if your platform does have its own XDR files available. See the
-Restrictions section of the :doc:`dump <dump>` command for details.
-
-Use at most one of the -DLAMMPS_SMALLBIG, -DLAMMPS_BIGBIG,
--DLAMMPS_SMALLSMALL settings. The default is -DLAMMPS_SMALLBIG. These
-settings refer to use of 4-byte (small) vs 8-byte (big) integers
-within LAMMPS, as specified in src/lmptype.h. The only reason to use
-the BIGBIG setting is to enable simulation of huge molecular systems
-(which store bond topology info) with more than 2 billion atoms, or to
-track the image flags of moving atoms that wrap around a periodic box
-more than 512 times. Normally, the only reason to use SMALLSMALL is
-if your machine does not support 64-bit integers, though you can use
-SMALLSMALL setting if you are running in serial or on a desktop
-machine or small cluster where you will never run large systems or for
-long time (more than 2 billion atoms, more than 2 billion timesteps).
-See the :ref:`Additional build tips <start_2_4>` section below for more
-details on these settings.
-
-Note that the USER-ATC package is not currently compatible with
--DLAMMPS_BIGBIG. Also the GPU package requires the lib/gpu library to
-be compiled with the same setting, or the link will fail.
-
-The -DLAMMPS_LONGLONG_TO_LONG setting may be needed if your system or
-MPI version does not recognize "long long" data types. In this case a
-"long" data type is likely already 64-bits, in which case this setting
-will convert to that data type.
-
-Using one of the -DPACK_ARRAY, -DPACK_POINTER, and -DPACK_MEMCPY
-options can make for faster parallel FFTs (in the PPPM solver) on some
-platforms. The -DPACK_ARRAY setting is the default. See the
-:doc:`kspace_style <kspace_style>` command for info about PPPM. See
-Step 6 below for info about building LAMMPS with an FFT library.
-
-**Step 5**
-
-The 3 MPI variables are used to specify an MPI library to build LAMMPS
-with. Note that you do not need to set these if you use the MPI
-compiler mpicxx for your CC and LINK setting in the section above.
-The MPI wrapper knows where to find the needed files.
-
-If you want LAMMPS to run in parallel, you must have an MPI library
-installed on your platform. If MPI is installed on your system in the
-usual place (under /usr/local), you also may not need to specify these
-3 variables, assuming /usr/local is in your path. On some large
-parallel machines which use "modules" for their compile/link
-environements, you may simply need to include the correct module in
-your build environment, before building LAMMPS. Or the parallel
-machine may have a vendor-provided MPI which the compiler has no
-trouble finding.
-
-Failing this, these 3 variables can be used to specify where the mpi.h
-file (MPI_INC) and the MPI library file (MPI_PATH) are found and the
-name of the library file (MPI_LIB).
-
-If you are installing MPI yourself, we recommend Argonne's MPICH2
-or OpenMPI. MPICH can be downloaded from the `Argonne MPI site <http://www.mcs.anl.gov/research/projects/mpich2/>`_. OpenMPI can
-be downloaded from the `OpenMPI site <http://www.open-mpi.org>`_.
-Other MPI packages should also work. If you are running on a big
-parallel platform, your system people or the vendor should have
-already installed a version of MPI, which is likely to be faster
-than a self-installed MPICH or OpenMPI, so find out how to build
-and link with it. If you use MPICH or OpenMPI, you will have to
-configure and build it for your platform. The MPI configure script
-should have compiler options to enable you to use the same compiler
-you are using for the LAMMPS build, which can avoid problems that can
-arise when linking LAMMPS to the MPI library.
-
-If you just want to run LAMMPS on a single processor, you can use the
-dummy MPI library provided in src/STUBS, since you don't need a true
-MPI library installed on your system. See src/MAKE/Makefile.serial
-for how to specify the 3 MPI variables in this case. You will also
-need to build the STUBS library for your platform before making LAMMPS
-itself. Note that if you are building with src/MAKE/Makefile.serial,
-e.g. by typing "make serial", then the STUBS library is built for you.
-
-To build the STUBS library from the src directory, type "make
-mpi-stubs", or from the src/STUBS dir, type "make". This should
-create a libmpi_stubs.a file suitable for linking to LAMMPS. If the
-build fails, you will need to edit the STUBS/Makefile for your
-platform.
-
-The file STUBS/mpi.c provides a CPU timer function called MPI_Wtime()
-that calls gettimeofday() . If your system doesn't support
-gettimeofday() , you'll need to insert code to call another timer.
-Note that the ANSI-standard function clock() rolls over after an hour
-or so, and is therefore insufficient for timing long LAMMPS
-simulations.
-
-**Step 6**
-
-The 3 FFT variables allow you to specify an FFT library which LAMMPS
-uses (for performing 1d FFTs) when running the particle-particle
-particle-mesh (PPPM) option for long-range Coulombics via the
-:doc:`kspace_style <kspace_style>` command.
-
-LAMMPS supports various open-source or vendor-supplied FFT libraries
-for this purpose. If you leave these 3 variables blank, LAMMPS will
-use the open-source `KISS FFT library <http://kissfft.sf.net>`_, which is
-included in the LAMMPS distribution. This library is portable to all
-platforms and for typical LAMMPS simulations is almost as fast as FFTW
-or vendor optimized libraries. If you are not including the KSPACE
-package in your build, you can also leave the 3 variables blank.
-
-Otherwise, select which kinds of FFTs to use as part of the FFT_INC
-setting by a switch of the form -DFFT_XXX. Recommended values for XXX
-are: MKL, SCSL, FFTW2, and FFTW3. Legacy options are: INTEL, SGI,
-ACML, and T3E. For backward compatability, using -DFFT_FFTW will use
-the FFTW2 library. Using -DFFT_NONE will use the KISS library
-described above.
-
-You may also need to set the FFT_INC, FFT_PATH, and FFT_LIB variables,
-so the compiler and linker can find the needed FFT header and library
-files. Note that on some large parallel machines which use "modules"
-for their compile/link environements, you may simply need to include
-the correct module in your build environment. Or the parallel machine
-may have a vendor-provided FFT library which the compiler has no
-trouble finding.
-
-FFTW is a fast, portable library that should also work on any
-platform. You can download it from
-`www.fftw.org <http://www.fftw.org>`_. Both the legacy version 2.1.X and
-the newer 3.X versions are supported as -DFFT_FFTW2 or -DFFT_FFTW3.
-Building FFTW for your box should be as simple as ./configure; make.
-Note that on some platforms FFTW2 has been pre-installed, and uses
-renamed files indicating the precision it was compiled with,
-e.g. sfftw.h, or dfftw.h instead of fftw.h. In this case, you can
-specify an additional define variable for FFT_INC called -DFFTW_SIZE,
-which will select the correct include file. In this case, for FFT_LIB
-you must also manually specify the correct library, namely -lsfftw or
--ldfftw.
-
-The FFT_INC variable also allows for a -DFFT_SINGLE setting that will
-use single-precision FFTs with PPPM, which can speed-up long-range
-calulations, particularly in parallel or on GPUs. Fourier transform
-and related PPPM operations are somewhat insensitive to floating point
-truncation errors and thus do not always need to be performed in
-double precision. Using the -DFFT_SINGLE setting trades off a little
-accuracy for reduced memory use and parallel communication costs for
-transposing 3d FFT data. Note that single precision FFTs have only
-been tested with the FFTW3, FFTW2, MKL, and KISS FFT options.
-
-**Step 7**
-
-The 3 JPG variables allow you to specify a JPEG and/or PNG library
-which LAMMPS uses when writing out JPEG or PNG files via the :doc:`dump image <dump_image>` command. These can be left blank if you do not
-use the -DLAMMPS_JPEG or -DLAMMPS_PNG switches discussed above in Step
-4, since in that case JPEG/PNG output will be disabled.
-
-A standard JPEG library usually goes by the name libjpeg.a or
-libjpeg.so and has an associated header file jpeglib.h. Whichever
-JPEG library you have on your platform, you'll need to set the
-appropriate JPG_INC, JPG_PATH, and JPG_LIB variables, so that the
-compiler and linker can find it.
-
-A standard PNG library usually goes by the name libpng.a or libpng.so
-and has an associated header file png.h. Whichever PNG library you
-have on your platform, you'll need to set the appropriate JPG_INC,
-JPG_PATH, and JPG_LIB variables, so that the compiler and linker can
-find it.
-
-As before, if these header and library files are in the usual place on
-your machine, you may not need to set these variables.
-
-**Step 8**
-
-Note that by default only a few of LAMMPS optional packages are
-installed. To build LAMMPS with optional packages, see :ref:`this section <start_3>` below, before proceeding to Step 9.
-
-**Step 9**
-
-That's it. Once you have a correct Makefile.foo, and you have
-pre-built any other needed libraries (e.g. MPI, FFT, etc) all you need
-to do from the src directory is type something like this:
-
-.. parsed-literal::
-
- make foo
- make -j N foo
- gmake foo
- gmake -j N foo
-
-The -j or -j N switches perform a parallel build which can be much
-faster, depending on how many cores your compilation machine has. N
-is the number of cores the build runs on.
-
-You should get the executable lmp_foo when the build is complete.
-
-
-----------
-
-
-.. _start_2_3:
-
-**\ *Errors that can occur when making LAMMPS:*\ **
-
-.. note::
-
- If an error occurs when building LAMMPS, the compiler or linker
- will state very explicitly what the problem is. The error message
- should give you a hint as to which of the steps above has failed, and
- what you need to do in order to fix it. Building a code with a
- Makefile is a very logical process. The compiler and linker need to
- find the appropriate files and those files need to be compatible with
- LAMMPS source files. When a make fails, there is usually a very
- simple reason, which you or a local expert will need to fix.
-
-Here are two non-obvious errors that can occur:
-
-(1) If the make command breaks immediately with errors that indicate
-it can't find files with a "*" in their names, this can be because
-your machine's native make doesn't support wildcard expansion in a
-makefile. Try gmake instead of make. If that doesn't work, try using
-a -f switch with your make command to use a pre-generated
-Makefile.list which explicitly lists all the needed files, e.g.
-
-.. parsed-literal::
-
- make makelist
- make -f Makefile.list linux
- gmake -f Makefile.list mac
-
-The first "make" command will create a current Makefile.list with all
-the file names in your src dir. The 2nd "make" command (make or
-gmake) will use it to build LAMMPS. Note that you should
-include/exclude any desired optional packages before using the "make
-makelist" command.
-
-(2) If you get an error that says something like 'identifier "atoll"
-is undefined', then your machine does not support "long long"
-integers. Try using the -DLAMMPS_LONGLONG_TO_LONG setting described
-above in Step 4.
-
-
-----------
-
-
-.. _start_2_4:
-
-**\ *Additional build tips:*\ **
-
-(1) Building LAMMPS for multiple platforms.
-
-You can make LAMMPS for multiple platforms from the same src
-directory. Each target creates its own object sub-directory called
-Obj_target where it stores the system-specific *.o files.
-
-(2) Cleaning up.
-
-Typing "make clean-all" or "make clean-machine" will delete *.o object
-files created when LAMMPS is built, for either all builds or for a
-particular machine.
-
-(3) Changing the LAMMPS size limits via -DLAMMPS_SMALLBIG or
--DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL
-
-As explained above, any of these 3 settings can be specified on the
-LMP_INC line in your low-level src/MAKE/Makefile.foo.
-
-The default is -DLAMMPS_SMALLBIG which allows for systems with up to
-2^63 atoms and 2^63 timesteps (about 9e18). The atom limit is for
-atomic systems which do not store bond topology info and thus do not
-require atom IDs. If you use atom IDs for atomic systems (which is
-the default) or if you use a molecular model, which stores bond
-topology info and thus requires atom IDs, the limit is 2^31 atoms
-(about 2 billion). This is because the IDs are stored in 32-bit
-integers.
-
-Likewise, with this setting, the 3 image flags for each atom (see the
-:doc:`dump <dump>` doc page for a discussion) are stored in a 32-bit
-integer, which means the atoms can only wrap around a periodic box (in
-each dimension) at most 512 times. If atoms move through the periodic
-box more than this many times, the image flags will "roll over",
-e.g. from 511 to -512, which can cause diagnostics like the
-mean-squared displacement, as calculated by the :doc:`compute msd <compute_msd>` command, to be faulty.
-
-To allow for larger atomic systems with atom IDs or larger molecular
-systems or larger image flags, compile with -DLAMMPS_BIGBIG. This
-stores atom IDs and image flags in 64-bit integers. This enables
-atomic or molecular systems with atom IDS of up to 2^63 atoms (about
-9e18). And image flags will not "roll over" until they reach 2^20 =
-1048576.
-
-If your system does not support 8-byte integers, you will need to
-compile with the -DLAMMPS_SMALLSMALL setting. This will restrict the
-total number of atoms (for atomic or molecular systems) and timesteps
-to 2^31 (about 2 billion). Image flags will roll over at 2^9 = 512.
-
-Note that in src/lmptype.h there are definitions of all these data
-types as well as the MPI data types associated with them. The MPI
-types need to be consistent with the associated C data types, or else
-LAMMPS will generate a run-time error. As far as we know, the
-settings defined in src/lmptype.h are portable and work on every
-current system.
-
-In all cases, the size of problem that can be run on a per-processor
-basis is limited by 4-byte integer storage to 2^31 atoms per processor
-(about 2 billion). This should not normally be a limitation since such
-a problem would have a huge per-processor memory footprint due to
-neighbor lists and would run very slowly in terms of CPU secs/timestep.
-
-
-----------
-
-
-.. _start_2_5:
-
-**\ *Building for a Mac:*\ **
-
-OS X is BSD Unix, so it should just work. See the
-src/MAKE/MACHINES/Makefile.mac and Makefile.mac_mpi files.
-
-
-----------
-
-
-.. _start_2_6:
-
-**\ *Building for Windows:*\ **
-
-The LAMMPS download page has an option to download both a serial and
-parallel pre-built Windows executable. See the :ref:`Running LAMMPS <start_6>` section for instructions on running these executables
-on a Windows box.
-
-The pre-built executables hosted on the `LAMMPS download page <http://lammps.sandia.gov/download.html>`_ are built with a subset
-of the available packages; see the download page for the list. These
-are single executable files. No examples or documentation in
-included. You will need to download the full source code package to
-obtain those.
-
-As an alternative, you can download "daily builds" (and some older
-versions) of the installer packages from
-`rpm.lammps.org/windows.html <http://rpm.lammps.org/windows.html>`_.
-These executables are built with most optional packages and the
-download includes documentation, some tools and most examples.
-
-If you want a Windows version with specific packages included and
-excluded, you can build it yourself.
-
-One way to do this is install and use cygwin to build LAMMPS with a
-standard unix style make program, just as you would on a Linux box;
-see src/MAKE/MACHINES/Makefile.cygwin.
-
-
-----------
-
-
-.. _start_3:
-
-Making LAMMPS with optional packages
---------------------------------------------------
-
-This section has the following sub-sections:
-
-* :ref:`Package basics <start_3_1>`
-* :ref:`Including/excluding packages <start_3_2>`
-* :ref:`Packages that require extra libraries <start_3_3>`
-* :ref:`Packages that require Makefile.machine settings <start_3_4>`
-
-Note that the following :ref:`Section 2.4 <start_4>` describes the Make.py
-tool which can be used to install/un-install packages and build the
-auxiliary libraries which some of them use. It can also auto-edit a
-Makefile.machine to add settings needed by some packages.
-
-
-----------
-
-
-.. _start_3_1:
-
-**\ *Package basics:*\ **
-
-The source code for LAMMPS is structured as a set of core files which
-are always included, plus optional packages. Packages are groups of
-files that enable a specific set of features. For example, force
-fields for molecular systems or granular systems are in packages.
-
-:doc:`Section packages <Section_packages>` in the manual has details
-about all the packages, including specific instructions for building
-LAMMPS with each package, which are covered in a more general manner
-below.
-
-You can see the list of all packages by typing "make package" from
-within the src directory of the LAMMPS distribution. This also lists
-various make commands that can be used to manipulate packages.
-
-If you use a command in a LAMMPS input script that is part of a
-package, you must have built LAMMPS with that package, else you will
-get an error that the style is invalid or the command is unknown.
-Every command's doc page specfies if it is part of a package. You can
-also type
-
-.. parsed-literal::
-
- lmp_machine -h
-
-to run your executable with the optional :ref:`-h command-line switch <start_7>` for "help", which will simply list the styles and
-commands known to your executable, and immediately exit.
-
-There are two kinds of packages in LAMMPS, standard and user packages.
-More information about the contents of standard and user packages is
-given in :doc:`Section_packages <Section_packages>` of the manual. The
-difference between standard and user packages is as follows:
-
-Standard packages, such as molecule or kspace, are supported by the
-LAMMPS developers and are written in a syntax and style consistent
-with the rest of LAMMPS. This means we will answer questions about
-them, debug and fix them if necessary, and keep them compatible with
-future changes to LAMMPS.
-
-User packages, such as user-atc or user-omp, have been contributed by
-users, and always begin with the user prefix. If they are a single
-command (single file), they are typically in the user-misc package.
-Otherwise, they are a a set of files grouped together which add a
-specific functionality to the code.
-
-User packages don't necessarily meet the requirements of the standard
-packages. If you have problems using a feature provided in a user
-package, you may need to contact the contributor directly to get help.
-Information on how to submit additions you make to LAMMPS as single
-files or either a standard or user-contributed package are given in
-:ref:`this section <mod_15>` of the documentation.
-
-
-----------
-
-
-.. _start_3_2:
-
-**\ *Including/excluding packages:*\ **
-
-To use (or not use) a package you must include it (or exclude it)
-before building LAMMPS. From the src directory, this is typically as
-simple as:
-
-.. parsed-literal::
-
- make yes-colloid
- make g++
-
-or
-
-.. parsed-literal::
-
- make no-manybody
- make g++
-
-.. note::
-
- You should NOT include/exclude packages and build LAMMPS in a
- single make command using multiple targets, e.g. make yes-colloid g++.
- This is because the make procedure creates a list of source files that
- will be out-of-date for the build if the package configuration changes
- within the same command.
-
-Some packages have individual files that depend on other packages
-being included. LAMMPS checks for this and does the right thing.
-I.e. individual files are only included if their dependencies are
-already included. Likewise, if a package is excluded, other files
-dependent on that package are also excluded.
-
-If you will never run simulations that use the features in a
-particular packages, there is no reason to include it in your build.
-For some packages, this will keep you from having to build auxiliary
-libraries (see below), and will also produce a smaller executable
-which may run a bit faster.
-
-When you download a LAMMPS tarball, these packages are pre-installed
-in the src directory: KSPACE, MANYBODY,MOLECULE, because they are so
-commonly used. When you download LAMMPS source files from the SVN or
-Git repositories, no packages are pre-installed.
-
-Packages are included or excluded by typing "make yes-name" or "make
-no-name", where "name" is the name of the package in lower-case, e.g.
-name = kspace for the KSPACE package or name = user-atc for the
-USER-ATC package. You can also type "make yes-standard", "make
-no-standard", "make yes-std", "make no-std", "make yes-user", "make
-no-user", "make yes-lib", "make no-lib", "make yes-all", or "make
-no-all" to include/exclude various sets of packages. Type "make
-package" to see all of the package-related make options.
-
-.. note::
-
- Inclusion/exclusion of a package works by simply moving files
- back and forth between the main src directory and sub-directories with
- the package name (e.g. src/KSPACE, src/USER-ATC), so that the files
- are seen or not seen when LAMMPS is built. After you have included or
- excluded a package, you must re-build LAMMPS.
-
-Additional package-related make options exist to help manage LAMMPS
-files that exist in both the src directory and in package
-sub-directories. You do not normally need to use these commands
-unless you are editing LAMMPS files or have downloaded a patch from
-the LAMMPS WWW site.
-
-Typing "make package-update" or "make pu" will overwrite src files
-with files from the package sub-directories if the package has been
-included. It should be used after a patch is installed, since patches
-only update the files in the package sub-directory, but not the src
-files. Typing "make package-overwrite" will overwrite files in the
-package sub-directories with src files.
-
-Typing "make package-status" or "make ps" will show which packages are
-currently included. For those that are included, it will list any
-files that are different in the src directory and package
-sub-directory. Typing "make package-diff" lists all differences
-between these files. Again, type "make package" to see all of the
-package-related make options.
-
-
-----------
-
-
-.. _start_3_3:
-
-**\ *Packages that require extra libraries:*\ **
-
-A few of the standard and user packages require additional auxiliary
-libraries. Many of them are provided with LAMMPS, in which case they
-must be compiled first, before LAMMPS is built, if you wish to include
-that package. If you get a LAMMPS build error about a missing
-library, this is likely the reason. See the
-:doc:`Section_packages <Section_packages>` doc page for a list of
-packages that have these kinds of auxiliary libraries.
-
-The lib directory in the distribution has sub-directories with package
-names that correspond to the needed auxiliary libs, e.g. lib/gpu.
-Each sub-directory has a README file that gives more details. Code
-for most of the auxiliary libraries is included in that directory.
-Examples are the USER-ATC and MEAM packages.
-
-A few of the lib sub-directories do not include code, but do include
-instructions (and sometimes scripts) that automate the process of
-downloading the auxiliary library and installing it so LAMMPS can link
-to it. Examples are the KIM, VORONOI, USER-MOLFILE, and USER-SMD
-packages.
-
-The lib/python directory (for the PYTHON package) contains only a
-choice of Makefile.lammps.* files. This is because no auxiliary code
-or libraries are needed, only the Python library and other system libs
-that should already available on your system. However, the
-Makefile.lammps file is needed to tell LAMMPS which libs to use and
-where to find them.
-
-For libraries with provided code, the sub-directory README file
-(e.g. lib/atc/README) has instructions on how to build that library.
-This information is also summarized in :doc:`Section packages <Section_packages>`. Typically this is done by typing
-something like:
-
-.. parsed-literal::
-
- make -f Makefile.g++
-
-If one of the provided Makefiles is not appropriate for your system
-you will need to edit or add one. Note that all the Makefiles have a
-setting for EXTRAMAKE at the top that specifies a Makefile.lammps.*
-file.
-
-If the library build is successful, it will produce 2 files in the lib
-directory:
-
-.. parsed-literal::
-
- libpackage.a
- Makefile.lammps
-
-The Makefile.lammps file will typically be a copy of one of the
-Makefile.lammps.* files in the library directory.
-
-Note that you must insure that the settings in Makefile.lammps are
-appropriate for your system. If they are not, the LAMMPS build may
-fail. To fix this, you can edit or create a new Makefile.lammps.*
-file for your system, and copy it to Makefile.lammps.
-
-As explained in the lib/package/README files, the settings in
-Makefile.lammps are used to specify additional system libraries and
-their locations so that LAMMPS can build with the auxiliary library.
-For example, if the MEAM package is used, the auxiliary library
-consists of F90 code, built with a Fortran complier. To link that
-library with LAMMPS (a C++ code) via whatever C++ compiler LAMMPS is
-built with, typically requires additional Fortran-to-C libraries be
-included in the link. Another example are the BLAS and LAPACK
-libraries needed to use the USER-ATC or USER-AWPMD packages.
-
-For libraries without provided code, the sub-directory README file has
-information on where to download the library and how to build it,
-e.g. lib/voronoi/README and lib/smd/README. The README files also
-describe how you must either (a) create soft links, via the "ln"
-command, in those directories to point to where you built or installed
-the packages, or (b) check or edit the Makefile.lammps file in the
-same directory to provide that information.
-
-Some of the sub-directories, e.g. lib/voronoi, also have an install.py
-script which can be used to automate the process of
-downloading/building/installing the auxiliary library, and setting the
-needed soft links. Type "python install.py" for further instructions.
-
-As with the sub-directories containing library code, if the soft links
-or settings in the lib/package/Makefile.lammps files are not correct,
-the LAMMPS build will typically fail.
-
-
-----------
-
-
-.. _start_3_4:
-
-**\ *Packages that require Makefile.machine settings*\ **
-
-A few packages require specific settings in Makefile.machine, to
-either build or use the package effectively. These are the
-USER-INTEL, KOKKOS, USER-OMP, and OPT packages, used for accelerating
-code performance on CPUs or other hardware, as discussed in :doc:`Section acclerate <Section_accelerate>`.
-
-A summary of what Makefile.machine changes are needed for each of
-these packages is given in :doc:`Section packages <Section_packages>`.
-The details are given on the doc pages that describe each of these
-accelerator packages in detail:
-
-* :doc:`USER-INTEL package <accelerate_intel>`
-* :doc:`KOKKOS package <accelerate_kokkos>`
-* :doc:`USER-OMP package <accelerate_omp>`
-* :doc:`OPT package <accelerate_opt>`
-
-You can also look at the following machine Makefiles in
-src/MAKE/OPTIONS, which include the changes. Note that the USER-INTEL
-and KOKKOS packages allow for settings that build LAMMPS for different
-hardware. The USER-INTEL package builds for CPU and the Xeon Phi, the
-KOKKOS package builds for OpenMP, GPUs (Cuda), and the Xeon Phi.
-
-* Makefile.intel_cpu
-* Makefile.intel_phi
-* Makefile.kokkos_omp
-* Makefile.kokkos_cuda
-* Makefile.kokkos_phi
-* Makefile.omp
-* Makefile.opt
-
-Also note that the Make.py tool, described in the next :ref:`Section 2.4 <start_4>` can automatically add the needed info to an existing
-machine Makefile, using simple command-line arguments.
-
-
-----------
-
-
-.. _start_4:
-
-Building LAMMPS via the Make.py tool
---------------------------------------------------
-
-The src directory includes a Make.py script, written in Python, which
-can be used to automate various steps of the build process. It is
-particularly useful for working with the accelerator packages, as well
-as other packages which require auxiliary libraries to be built.
-
-The goal of the Make.py tool is to allow any complex multi-step LAMMPS
-build to be performed as a single Make.py command. And you can
-archive the commands, so they can be re-invoked later via the -r
-(redo) switch. If you find some LAMMPS build procedure that can't be
-done in a single Make.py command, let the developers know, and we'll
-see if we can augment the tool.
-
-You can run Make.py from the src directory by typing either:
-
-.. parsed-literal::
-
- Make.py -h
- python Make.py -h
-
-which will give you help info about the tool. For the former to work,
-you may need to edit the first line of Make.py to point to your local
-Python. And you may need to insure the script is executable:
-
-.. parsed-literal::
-
- chmod +x Make.py
-
-Here are examples of build tasks you can perform with Make.py:
-
-+--------------------------------------------------------------------------------+---------------------------------------------------------+
-| Install/uninstall packages | Make.py -p no-lib kokkos omp intel |
-+--------------------------------------------------------------------------------+---------------------------------------------------------+
-| Build specific auxiliary libs | Make.py -a lib-atc lib-meam |
-+--------------------------------------------------------------------------------+---------------------------------------------------------+
-| Build libs for all installed packages | Make.py -p cuda gpu -gpu mode=double arch=31 -a lib-all |
-+--------------------------------------------------------------------------------+---------------------------------------------------------+
-| Create a Makefile from scratch with compiler and MPI settings | Make.py -m none -cc g++ -mpi mpich -a file |
-+--------------------------------------------------------------------------------+---------------------------------------------------------+
-| Augment Makefile.serial with settings for installed packages | Make.py -p intel -intel cpu -m serial -a file |
-+--------------------------------------------------------------------------------+---------------------------------------------------------+
-| Add JPG and FFTW support to Makefile.mpi | Make.py -m mpi -jpg -fft fftw -a file |
-+--------------------------------------------------------------------------------+---------------------------------------------------------+
-| Build LAMMPS with a parallel make using Makefile.mpi | Make.py -j 16 -m mpi -a exe |
-+--------------------------------------------------------------------------------+---------------------------------------------------------+
-| Build LAMMPS and libs it needs using Makefile.serial with accelerator settings | Make.py -p gpu intel -intel cpu -a lib-all file serial |
-+--------------------------------------------------------------------------------+---------------------------------------------------------+
-
-The bench and examples directories give Make.py commands that can be
-used to build LAMMPS with the various packages and options needed to
-run all the benchmark and example input scripts. See these files for
-more details:
-
-* bench/README
-* bench/FERMI/README
-* bench/KEPLER/README
-* bench/PHI/README
-* examples/README
-* examples/accelerate/README
-* examples/accelerate/make.list
-
-All of the Make.py options and syntax help can be accessed by using
-the "-h" switch.
-
-E.g. typing "Make.py -h" gives
-
-.. parsed-literal::
-
- Syntax: Make.py switch args ...
- switches can be listed in any order
- help switch:
- -h prints help and syntax for all other specified switches
- switch for actions:
- -a lib-all, lib-dir, clean, file, exe or machine
- list one or more actions, in any order
- machine is a Makefile.machine suffix, must be last if used
- one-letter switches:
- -d (dir), -j (jmake), -m (makefile), -o (output),
- -p (packages), -r (redo), -s (settings), -v (verbose)
- switches for libs:
- -atc, -awpmd, -colvars, -cuda
- -gpu, -meam, -poems, -qmmm, -reax
- switches for build and makefile options:
- -intel, -kokkos, -cc, -mpi, -fft, -jpg, -png
-
-Using the "-h" switch with other switches and actions gives additional
-info on all the other specified switches or actions. The "-h" can be
-anywhere in the command-line and the other switches do not need their
-arguments. E.g. type "Make.py -h -d -atc -intel" will print:
-
-.. parsed-literal::
-
- -d dir
- dir = LAMMPS home dir
- if -d not specified, working dir must be lammps/src
-
-.. parsed-literal::
-
- -atc make=suffix lammps=suffix2
- all args are optional and can be in any order
- make = use Makefile.suffix (def = g++)
- lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
-
-.. parsed-literal::
-
- -intel mode
- mode = cpu or phi (def = cpu)
- build Intel package for CPU or Xeon Phi
-
-Note that Make.py never overwrites an existing Makefile.machine.
-Instead, it creates src/MAKE/MINE/Makefile.auto, which you can save or
-rename if desired. Likewise it creates an executable named
-src/lmp_auto, which you can rename using the -o switch if desired.
-
-The most recently executed Make.py commmand is saved in
-src/Make.py.last. You can use the "-r" switch (for redo) to re-invoke
-the last command, or you can save a sequence of one or more Make.py
-commands to a file and invoke the file of commands using "-r". You
-can also label the commands in the file and invoke one or more of them
-by name.
-
-A typical use of Make.py is to start with a valid Makefile.machine for
-your system, that works for a vanilla LAMMPS build, i.e. when optional
-packages are not installed. You can then use Make.py to add various
-settings (FFT, JPG, PNG) to the Makefile.machine as well as change its
-compiler and MPI options. You can also add additional packages to the
-build, as well as build the needed supporting libraries.
-
-You can also use Make.py to create a new Makefile.machine from
-scratch, using the "-m none" switch, if you also specify what compiler
-and MPI options to use, via the "-cc" and "-mpi" switches.
-
-
-----------
-
-
-.. _start_5:
-
-Building LAMMPS as a library
-------------------------------------------
-
-LAMMPS can be built as either a static or shared library, which can
-then be called from another application or a scripting language. See
-:ref:`this section <howto_10>` for more info on coupling
-LAMMPS to other codes. See :doc:`this section <Section_python>` for
-more info on wrapping and running LAMMPS from Python.
-
-**Static library:**
-^^^^^^^^^^^^^^^^^^^
-
-To build LAMMPS as a static library (*.a file on Linux), type
-
-.. parsed-literal::
-
- make foo mode=lib
-
-where foo is the machine name. This kind of library is typically used
-to statically link a driver application to LAMMPS, so that you can
-insure all dependencies are satisfied at compile time. This will use
-the ARCHIVE and ARFLAGS settings in src/MAKE/Makefile.foo. The build
-will create the file liblammps_foo.a which another application can
-link to. It will also create a soft link liblammps.a, which will
-point to the most recently built static library.
-
-**Shared library:**
-^^^^^^^^^^^^^^^^^^^
-
-To build LAMMPS as a shared library (*.so file on Linux), which can be
-dynamically loaded, e.g. from Python, type
-
-.. parsed-literal::
-
- make foo mode=shlib
-
-where foo is the machine name. This kind of library is required when
-wrapping LAMMPS with Python; see :doc:`Section_python <Section_python>`
-for details. This will use the SHFLAGS and SHLIBFLAGS settings in
-src/MAKE/Makefile.foo and perform the build in the directory
-Obj_shared_foo. This is so that each file can be compiled with the
--fPIC flag which is required for inclusion in a shared library. The
-build will create the file liblammps_foo.so which another application
-can link to dyamically. It will also create a soft link liblammps.so,
-which will point to the most recently built shared library. This is
-the file the Python wrapper loads by default.
-
-Note that for a shared library to be usable by a calling program, all
-the auxiliary libraries it depends on must also exist as shared
-libraries. This will be the case for libraries included with LAMMPS,
-such as the dummy MPI library in src/STUBS or any package libraries in
-lib/packages, since they are always built as shared libraries using
-the -fPIC switch. However, if a library like MPI or FFTW does not
-exist as a shared library, the shared library build will generate an
-error. This means you will need to install a shared library version
-of the auxiliary library. The build instructions for the library
-should tell you how to do this.
-
-Here is an example of such errors when the system FFTW or provided
-lib/colvars library have not been built as shared libraries:
-
-.. parsed-literal::
-
- /usr/bin/ld: /usr/local/lib/libfftw3.a(mapflags.o): relocation
- R_X86_64_32 against `.rodata' can not be used when making a shared
- object; recompile with -fPIC
- /usr/local/lib/libfftw3.a: could not read symbols: Bad value
-
-.. parsed-literal::
-
- /usr/bin/ld: ../../lib/colvars/libcolvars.a(colvarmodule.o):
- relocation R_X86_64_32 against `__pthread_key_create' can not be used
- when making a shared object; recompile with -fPIC
- ../../lib/colvars/libcolvars.a: error adding symbols: Bad value
-
-As an example, here is how to build and install the `MPICH library <mpich_>`_, a popular open-source version of MPI, distributed by
-Argonne National Labs, as a shared library in the default
-/usr/local/lib location:
-
-.. _mpich: http://www-unix.mcs.anl.gov/mpi
-
-
-
-.. parsed-literal::
-
- ./configure --enable-shared
- make
- make install
-
-You may need to use "sudo make install" in place of the last line if
-you do not have write privileges for /usr/local/lib. The end result
-should be the file /usr/local/lib/libmpich.so.
-
-**Additional requirement for using a shared library:**
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The operating system finds shared libraries to load at run-time using
-the environment variable LD_LIBRARY_PATH. So you may wish to copy the
-file src/liblammps.so or src/liblammps_g++.so (for example) to a place
-the system can find it by default, such as /usr/local/lib, or you may
-wish to add the LAMMPS src directory to LD_LIBRARY_PATH, so that the
-current version of the shared library is always available to programs
-that use it.
-
-For the csh or tcsh shells, you would add something like this to your
-~/.cshrc file:
-
-.. parsed-literal::
-
- setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/src
-
-**Calling the LAMMPS library:**
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Either flavor of library (static or shared) allows one or more LAMMPS
-objects to be instantiated from the calling program.
-
-When used from a C++ program, all of LAMMPS is wrapped in a LAMMPS_NS
-namespace; you can safely use any of its classes and methods from
-within the calling code, as needed.
-
-When used from a C or Fortran program or a scripting language like
-Python, the library has a simple function-style interface, provided in
-src/library.cpp and src/library.h.
-
-See the sample codes in examples/COUPLE/simple for examples of C++ and
-C and Fortran codes that invoke LAMMPS thru its library interface.
-There are other examples as well in the COUPLE directory which are
-discussed in :ref:`Section_howto 10 <howto_10>` of the
-manual. See :doc:`Section_python <Section_python>` of the manual for a
-description of the Python wrapper provided with LAMMPS that operates
-through the LAMMPS library interface.
-
-The files src/library.cpp and library.h define the C-style API for
-using LAMMPS as a library. See :ref:`Section_howto 19 <howto_19>` of the manual for a description of the
-interface and how to extend it for your needs.
-
-
-----------
-
-
-.. _start_6:
-
-Running LAMMPS
-----------------------------
-
-By default, LAMMPS runs by reading commands from standard input. Thus
-if you run the LAMMPS executable by itself, e.g.
-
-.. parsed-literal::
-
- lmp_linux
-
-it will simply wait, expecting commands from the keyboard. Typically
-you should put commands in an input script and use I/O redirection,
-e.g.
-
-.. parsed-literal::
-
- lmp_linux < in.file
-
-For parallel environments this should also work. If it does not, use
-the '-in' command-line switch, e.g.
-
-.. parsed-literal::
-
- lmp_linux -in in.file
-
-:doc:`This section <Section_commands>` describes how input scripts are
-structured and what commands they contain.
-
-You can test LAMMPS on any of the sample inputs provided in the
-examples or bench directory. Input scripts are named in.* and sample
-outputs are named log.*.name.P where name is a machine and P is the
-number of processors it was run on.
-
-Here is how you might run a standard Lennard-Jones benchmark on a
-Linux box, using mpirun to launch a parallel job:
-
-.. parsed-literal::
-
- cd src
- make linux
- cp lmp_linux ../bench
- cd ../bench
- mpirun -np 4 lmp_linux -in in.lj
-
-See `this page <bench_>`_ for timings for this and the other benchmarks on
-various platforms. Note that some of the example scripts require
-LAMMPS to be built with one or more of its optional packages.
-
-.. _bench: http://lammps.sandia.gov/bench.html
-
-
-
-
-----------
-
-
-On a Windows box, you can skip making LAMMPS and simply download an
-executable, as described above, though the pre-packaged executables
-include only certain packages.
-
-To run a LAMMPS executable on a Windows machine, first decide whether
-you want to download the non-MPI (serial) or the MPI (parallel)
-version of the executable. Download and save the version you have
-chosen.
-
-For the non-MPI version, follow these steps:
-
-* Get a command prompt by going to Start->Run... ,
- then typing "cmd".
-* Move to the directory where you have saved lmp_win_no-mpi.exe
- (e.g. by typing: cd "Documents").
-* At the command prompt, type "lmp_win_no-mpi -in in.lj", replacing in.lj
- with the name of your LAMMPS input script.
-For the MPI version, which allows you to run LAMMPS under Windows on
-multiple processors, follow these steps:
-
-* Download and install
- `MPICH2 <http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads>`_
- for Windows.
-* You'll need to use the mpiexec.exe and smpd.exe files from the MPICH2
- package. Put them in same directory (or path) as the LAMMPS Windows
- executable.
-* Get a command prompt by going to Start->Run... ,
- then typing "cmd".
-* Move to the directory where you have saved lmp_win_mpi.exe
- (e.g. by typing: cd "Documents").
-* Then type something like this: "mpiexec -localonly 4 lmp_win_mpi -in
- in.lj", replacing in.lj with the name of your LAMMPS input script.
-* Note that you may need to provide smpd with a passphrase (it doesn't
- matter what you type).
-* In this mode, output may not immediately show up on the screen, so if
- your input script takes a long time to execute, you may need to be
- patient before the output shows up. :l Alternatively, you can still
- use this executable to run on a single processor by typing something
- like: "lmp_win_mpi -in in.lj".
-
-----------
-
-
-The screen output from LAMMPS is described in a section below. As it
-runs, LAMMPS also writes a log.lammps file with the same information.
-
-Note that this sequence of commands copies the LAMMPS executable
-(lmp_linux) to the directory with the input files. This may not be
-necessary, but some versions of MPI reset the working directory to
-where the executable is, rather than leave it as the directory where
-you launch mpirun from (if you launch lmp_linux on its own and not
-under mpirun). If that happens, LAMMPS will look for additional input
-files and write its output files to the executable directory, rather
-than your working directory, which is probably not what you want.
-
-If LAMMPS encounters errors in the input script or while running a
-simulation it will print an ERROR message and stop or a WARNING
-message and continue. See :doc:`Section_errors <Section_errors>` for a
-discussion of the various kinds of errors LAMMPS can or can't detect,
-a list of all ERROR and WARNING messages, and what to do about them.
-
-LAMMPS can run a problem on any number of processors, including a
-single processor. In theory you should get identical answers on any
-number of processors and on any machine. In practice, numerical
-round-off can cause slight differences and eventual divergence of
-molecular dynamics phase space trajectories.
-
-LAMMPS can run as large a problem as will fit in the physical memory
-of one or more processors. If you run out of memory, you must run on
-more processors or setup a smaller problem.
-
-
-----------
-
-
-.. _start_7:
-
-Command-line options
-----------------------------------
-
-At run time, LAMMPS recognizes several optional command-line switches
-which may be used in any order. Either the full word or a one-or-two
-letter abbreviation can be used:
-
-* -e or -echo
-* -h or -help
-* -i or -in
-* -k or -kokkos
-* -l or -log
-* -nc or -nocite
-* -pk or -package
-* -p or -partition
-* -pl or -plog
-* -ps or -pscreen
-* -r or -restart
-* -ro or -reorder
-* -sc or -screen
-* -sf or -suffix
-* -v or -var
-
-For example, lmp_ibm might be launched as follows:
-
-.. parsed-literal::
-
- mpirun -np 16 lmp_ibm -v f tmp.out -l my.log -sc none -in in.alloy
- mpirun -np 16 lmp_ibm -var f tmp.out -log my.log -screen none -in in.alloy
-
-Here are the details on the options:
-
-.. parsed-literal::
-
- -echo style
-
-Set the style of command echoing. The style can be *none* or *screen*
-or *log* or *both*\ . Depending on the style, each command read from
-the input script will be echoed to the screen and/or logfile. This
-can be useful to figure out which line of your script is causing an
-input error. The default value is *log*\ . The echo style can also be
-set by using the :doc:`echo <echo>` command in the input script itself.
-
-.. parsed-literal::
-
- -help
-
-Print a brief help summary and a list of options compiled into this
-executable for each LAMMPS style (atom_style, fix, compute,
-pair_style, bond_style, etc). This can tell you if the command you
-want to use was included via the appropriate package at compile time.
-LAMMPS will print the info and immediately exit if this switch is
-used.
-
-.. parsed-literal::
-
- -in file
-
-Specify a file to use as an input script. This is an optional switch
-when running LAMMPS in one-partition mode. If it is not specified,
-LAMMPS reads its script from standard input, typically from a script
-via I/O redirection; e.g. lmp_linux < in.run. I/O redirection should
-also work in parallel, but if it does not (in the unlikely case that
-an MPI implementation does not support it), then use the -in flag.
-Note that this is a required switch when running LAMMPS in
-multi-partition mode, since multiple processors cannot all read from
-stdin.
-
-.. parsed-literal::
-
- -kokkos on/off keyword/value ...
-
-Explicitly enable or disable KOKKOS support, as provided by the KOKKOS
-package. Even if LAMMPS is built with this package, as described
-above in :ref:`Section 2.3 <start_3>`, this switch must be set to enable
-running with the KOKKOS-enabled styles the package provides. If the
-switch is not set (the default), LAMMPS will operate as if the KOKKOS
-package were not installed; i.e. you can run standard LAMMPS or with
-the GPU or USER-OMP packages, for testing or benchmarking purposes.
-
-Additional optional keyword/value pairs can be specified which
-determine how Kokkos will use the underlying hardware on your
-platform. These settings apply to each MPI task you launch via the
-"mpirun" or "mpiexec" command. You may choose to run one or more MPI
-tasks per physical node. Note that if you are running on a desktop
-machine, you typically have one physical node. On a cluster or
-supercomputer there may be dozens or 1000s of physical nodes.
-
-Either the full word or an abbreviation can be used for the keywords.
-Note that the keywords do not use a leading minus sign. I.e. the
-keyword is "t", not "-t". Also note that each of the keywords has a
-default setting. Example of when to use these options and what
-settings to use on different platforms is given in :ref:`Section 5.8 <acc_8>`.
-
-* d or device
-* g or gpus
-* t or threads
-* n or numa
-
-.. parsed-literal::
-
- device Nd
-
-This option is only relevant if you built LAMMPS with CUDA=yes, you
-have more than one GPU per node, and if you are running with only one
-MPI task per node. The Nd setting is the ID of the GPU on the node to
-run on. By default Nd = 0. If you have multiple GPUs per node, they
-have consecutive IDs numbered as 0,1,2,etc. This setting allows you
-to launch multiple independent jobs on the node, each with a single
-MPI task per node, and assign each job to run on a different GPU.
-
-.. parsed-literal::
-
- gpus Ng Ns
-
-This option is only relevant if you built LAMMPS with CUDA=yes, you
-have more than one GPU per node, and you are running with multiple MPI
-tasks per node (up to one per GPU). The Ng setting is how many GPUs
-you will use. The Ns setting is optional. If set, it is the ID of a
-GPU to skip when assigning MPI tasks to GPUs. This may be useful if
-your desktop system reserves one GPU to drive the screen and the rest
-are intended for computational work like running LAMMPS. By default
-Ng = 1 and Ns is not set.
-
-Depending on which flavor of MPI you are running, LAMMPS will look for
-one of these 3 environment variables
-
-.. parsed-literal::
-
- SLURM_LOCALID (various MPI variants compiled with SLURM support)
- MV2_COMM_WORLD_LOCAL_RANK (Mvapich)
- OMPI_COMM_WORLD_LOCAL_RANK (OpenMPI)
-
-which are initialized by the "srun", "mpirun" or "mpiexec" commands.
-The environment variable setting for each MPI rank is used to assign a
-unique GPU ID to the MPI task.
-
-.. parsed-literal::
-
- threads Nt
-
-This option assigns Nt number of threads to each MPI task for
-performing work when Kokkos is executing in OpenMP or pthreads mode.
-The default is Nt = 1, which essentially runs in MPI-only mode. If
-there are Np MPI tasks per physical node, you generally want Np*Nt =
-the number of physical cores per node, to use your available hardware
-optimally. This also sets the number of threads used by the host when
-LAMMPS is compiled with CUDA=yes.
-
-.. parsed-literal::
-
- numa Nm
-
-This option is only relevant when using pthreads with hwloc support.
-In this case Nm defines the number of NUMA regions (typicaly sockets)
-on a node which will be utilizied by a single MPI rank. By default Nm
-= 1. If this option is used the total number of worker-threads per
-MPI rank is threads*numa. Currently it is always almost better to
-assign at least one MPI rank per NUMA region, and leave numa set to
-its default value of 1. This is because letting a single process span
-multiple NUMA regions induces a significant amount of cross NUMA data
-traffic which is slow.
-
-.. parsed-literal::
-
- -log file
-
-Specify a log file for LAMMPS to write status information to. In
-one-partition mode, if the switch is not used, LAMMPS writes to the
-file log.lammps. If this switch is used, LAMMPS writes to the
-specified file. In multi-partition mode, if the switch is not used, a
-log.lammps file is created with hi-level status information. Each
-partition also writes to a log.lammps.N file where N is the partition
-ID. If the switch is specified in multi-partition mode, the hi-level
-logfile is named "file" and each partition also logs information to a
-file.N. For both one-partition and multi-partition mode, if the
-specified file is "none", then no log files are created. Using a
-:doc:`log <log>` command in the input script will override this setting.
-Option -plog will override the name of the partition log files file.N.
-
-.. parsed-literal::
-
- -nocite
-
-Disable writing the log.cite file which is normally written to list
-references for specific cite-able features used during a LAMMPS run.
-See the `citation page <http://lammps.sandia.gov/cite.html>`_ for more
-details.
-
-.. parsed-literal::
-
- -package style args ....
-
-Invoke the :doc:`package <package>` command with style and args. The
-syntax is the same as if the command appeared at the top of the input
-script. For example "-package gpu 2" or "-pk gpu 2" is the same as
-:doc:`package gpu 2 <package>` in the input script. The possible styles
-and args are documented on the :doc:`package <package>` doc page. This
-switch can be used multiple times, e.g. to set options for the
-USER-INTEL and USER-OMP packages which can be used together.
-
-Along with the "-suffix" command-line switch, this is a convenient
-mechanism for invoking accelerator packages and their options without
-having to edit an input script.
-
-.. parsed-literal::
-
- -partition 8x2 4 5 ...
-
-Invoke LAMMPS in multi-partition mode. When LAMMPS is run on P
-processors and this switch is not used, LAMMPS runs in one partition,
-i.e. all P processors run a single simulation. If this switch is
-used, the P processors are split into separate partitions and each
-partition runs its own simulation. The arguments to the switch
-specify the number of processors in each partition. Arguments of the
-form MxN mean M partitions, each with N processors. Arguments of the
-form N mean a single partition with N processors. The sum of
-processors in all partitions must equal P. Thus the command
-"-partition 8x2 4 5" has 10 partitions and runs on a total of 25
-processors.
-
-Running with multiple partitions can e useful for running
-:ref:`multi-replica simulations <howto_5>`, where each
-replica runs on on one or a few processors. Note that with MPI
-installed on a machine (e.g. your desktop), you can run on more
-(virtual) processors than you have physical processors.
-
-To run multiple independent simulatoins from one input script, using
-multiple partitions, see :ref:`Section_howto 4 <howto_4>`
-of the manual. World- and universe-style :doc:`variables <variable>`
-are useful in this context.
-
-.. parsed-literal::
-
- -plog file
-
-Specify the base name for the partition log files, so partition N
-writes log information to file.N. If file is none, then no partition
-log files are created. This overrides the filename specified in the
--log command-line option. This option is useful when working with
-large numbers of partitions, allowing the partition log files to be
-suppressed (-plog none) or placed in a sub-directory (-plog
-replica_files/log.lammps) If this option is not used the log file for
-partition N is log.lammps.N or whatever is specified by the -log
-command-line option.
-
-.. parsed-literal::
-
- -pscreen file
-
-Specify the base name for the partition screen file, so partition N
-writes screen information to file.N. If file is none, then no
-partition screen files are created. This overrides the filename
-specified in the -screen command-line option. This option is useful
-when working with large numbers of partitions, allowing the partition
-screen files to be suppressed (-pscreen none) or placed in a
-sub-directory (-pscreen replica_files/screen). If this option is not
-used the screen file for partition N is screen.N or whatever is
-specified by the -screen command-line option.
-
-.. parsed-literal::
-
- -restart restartfile *remap* datafile keyword value ...
-
-Convert the restart file into a data file and immediately exit. This
-is the same operation as if the following 2-line input script were
-run:
-
-.. parsed-literal::
-
- read_restart restartfile *remap*
- write_data datafile keyword value ...
-
-Note that the specified restartfile and datafile can have wild-card
-characters ("*",%") as described by the
-:doc:`read_restart <read_restart>` and :doc:`write_data <write_data>`
-commands. But a filename such as file.* will need to be enclosed in
-quotes to avoid shell expansion of the "*" character.
-
-Note that following restartfile, the optional flag *remap* can be
-used. This has the same effect as adding it to the
-:doc:`read_restart <read_restart>` command, as explained on its doc
-page. This is only useful if the reading of the restart file triggers
-an error that atoms have been lost. In that case, use of the remap
-flag should allow the data file to still be produced.
-
-Also note that following datafile, the same optional keyword/value
-pairs can be listed as used by the :doc:`write_data <write_data>`
-command.
-
-.. parsed-literal::
-
- -reorder nth N
- -reorder custom filename
-
-Reorder the processors in the MPI communicator used to instantiate
-LAMMPS, in one of several ways. The original MPI communicator ranks
-all P processors from 0 to P-1. The mapping of these ranks to
-physical processors is done by MPI before LAMMPS begins. It may be
-useful in some cases to alter the rank order. E.g. to insure that
-cores within each node are ranked in a desired order. Or when using
-the :doc:`run_style verlet/split <run_style>` command with 2 partitions
-to insure that a specific Kspace processor (in the 2nd partition) is
-matched up with a specific set of processors in the 1st partition.
-See the :doc:`Section_accelerate <Section_accelerate>` doc pages for
-more details.
-
-If the keyword *nth* is used with a setting *N*\ , then it means every
-Nth processor will be moved to the end of the ranking. This is useful
-when using the :doc:`run_style verlet/split <run_style>` command with 2
-partitions via the -partition command-line switch. The first set of
-processors will be in the first partition, the 2nd set in the 2nd
-partition. The -reorder command-line switch can alter this so that
-the 1st N procs in the 1st partition and one proc in the 2nd partition
-will be ordered consecutively, e.g. as the cores on one physical node.
-This can boost performance. For example, if you use "-reorder nth 4"
-and "-partition 9 3" and you are running on 12 processors, the
-processors will be reordered from
-
-.. parsed-literal::
-
- 0 1 2 3 4 5 6 7 8 9 10 11
-
-to
-
-.. parsed-literal::
-
- 0 1 2 4 5 6 8 9 10 3 7 11
-
-so that the processors in each partition will be
-
-.. parsed-literal::
-
- 0 1 2 4 5 6 8 9 10
- 3 7 11
-
-See the "processors" command for how to insure processors from each
-partition could then be grouped optimally for quad-core nodes.
-
-If the keyword is *custom*\ , then a file that specifies a permutation
-of the processor ranks is also specified. The format of the reorder
-file is as follows. Any number of initial blank or comment lines
-(starting with a "#" character) can be present. These should be
-followed by P lines of the form:
-
-.. parsed-literal::
-
- I J
-
-where P is the number of processors LAMMPS was launched with. Note
-that if running in multi-partition mode (see the -partition switch
-above) P is the total number of processors in all partitions. The I
-and J values describe a permutation of the P processors. Every I and
-J should be values from 0 to P-1 inclusive. In the set of P I values,
-every proc ID should appear exactly once. Ditto for the set of P J
-values. A single I,J pairing means that the physical processor with
-rank I in the original MPI communicator will have rank J in the
-reordered communicator.
-
-Note that rank ordering can also be specified by many MPI
-implementations, either by environment variables that specify how to
-order physical processors, or by config files that specify what
-physical processors to assign to each MPI rank. The -reorder switch
-simply gives you a portable way to do this without relying on MPI
-itself. See the `processors out <processors>`_ command for how to output
-info on the final assignment of physical processors to the LAMMPS
-simulation domain.
-
-.. parsed-literal::
-
- -screen file
-
-Specify a file for LAMMPS to write its screen information to. In
-one-partition mode, if the switch is not used, LAMMPS writes to the
-screen. If this switch is used, LAMMPS writes to the specified file
-instead and you will see no screen output. In multi-partition mode,
-if the switch is not used, hi-level status information is written to
-the screen. Each partition also writes to a screen.N file where N is
-the partition ID. If the switch is specified in multi-partition mode,
-the hi-level screen dump is named "file" and each partition also
-writes screen information to a file.N. For both one-partition and
-multi-partition mode, if the specified file is "none", then no screen
-output is performed. Option -pscreen will override the name of the
-partition screen files file.N.
-
-.. parsed-literal::
-
- -suffix style args
-
-Use variants of various styles if they exist. The specified style can
-be *cuda*\ , *gpu*\ , *intel*\ , *kk*\ , *omp*\ , *opt*\ , or *hybrid*\ . These
-refer to optional packages that LAMMPS can be built with, as described
-above in :ref:`Section 2.3 <start_3>`. The "gpu" style corresponds to the
-GPU package, the "intel" style to the USER-INTEL package, the "kk"
-style to the KOKKOS package, the "opt" style to the OPT package, and
-the "omp" style to the USER-OMP package. The hybrid style is the only
-style that accepts arguments. It allows for two packages to be
-specified. The first package specified is the default and will be used
-if it is available. If no style is available for the first package,
-the style for the second package will be used if available. For
-example, "-suffix hybrid intel omp" will use styles from the
-USER-INTEL package if they are installed and available, but styles for
-the USER-OMP package otherwise.
-
-Along with the "-package" command-line switch, this is a convenient
-mechanism for invoking accelerator packages and their options without
-having to edit an input script.
-
-As an example, all of the packages provide a :doc:`pair_style lj/cut <pair_lj>` variant, with style names lj/cut/gpu,
-lj/cut/intel, lj/cut/kk, lj/cut/omp, and lj/cut/opt. A variant style
-can be specified explicitly in your input script, e.g. pair_style
-lj/cut/gpu. If the -suffix switch is used the specified suffix
-(gpu,intel,kk,omp,opt) is automatically appended whenever your input
-script command creates a new :doc:`atom <atom_style>`,
-:doc:`pair <pair_style>`, :doc:`fix <fix>`, :doc:`compute <compute>`, or
-:doc:`run <run_style>` style. If the variant version does not exist,
-the standard version is created.
-
-For the GPU package, using this command-line switch also invokes the
-default GPU settings, as if the command "package gpu 1" were used at
-the top of your input script. These settings can be changed by using
-the "-package gpu" command-line switch or the :doc:`package gpu <package>` command in your script.
-
-For the USER-INTEL package, using this command-line switch also
-invokes the default USER-INTEL settings, as if the command "package
-intel 1" were used at the top of your input script. These settings
-can be changed by using the "-package intel" command-line switch or
-the :doc:`package intel <package>` command in your script. If the
-USER-OMP package is also installed, the hybrid style with "intel omp"
-arguments can be used to make the omp suffix a second choice, if a
-requested style is not available in the USER-INTEL package. It will
-also invoke the default USER-OMP settings, as if the command "package
-omp 0" were used at the top of your input script. These settings can
-be changed by using the "-package omp" command-line switch or the
-:doc:`package omp <package>` command in your script.
-
-For the KOKKOS package, using this command-line switch also invokes
-the default KOKKOS settings, as if the command "package kokkos" were
-used at the top of your input script. These settings can be changed
-by using the "-package kokkos" command-line switch or the :doc:`package kokkos <package>` command in your script.
-
-For the OMP package, using this command-line switch also invokes the
-default OMP settings, as if the command "package omp 0" were used at
-the top of your input script. These settings can be changed by using
-the "-package omp" command-line switch or the :doc:`package omp <package>` command in your script.
-
-The :doc:`suffix <suffix>` command can also be used within an input
-script to set a suffix, or to turn off or back on any suffix setting
-made via the command line.
-
-.. parsed-literal::
-
- -var name value1 value2 ...
-
-Specify a variable that will be defined for substitution purposes when
-the input script is read. This switch can be used multiple times to
-define multiple variables. "Name" is the variable name which can be a
-single character (referenced as $x in the input script) or a full
-string (referenced as ${abc}). An :doc:`index-style variable <variable>` will be created and populated with the
-subsequent values, e.g. a set of filenames. Using this command-line
-option is equivalent to putting the line "variable name index value1
-value2 ..." at the beginning of the input script. Defining an index
-variable as a command-line argument overrides any setting for the same
-index variable in the input script, since index variables cannot be
-re-defined. See the :doc:`variable <variable>` command for more info on
-defining index and other kinds of variables and :ref:`this section <cmd_2>` for more info on using variables
-in input scripts.
-
-.. note::
-
- Currently, the command-line parser looks for arguments that
- start with "-" to indicate new switches. Thus you cannot specify
- multiple variable values if any of they start with a "-", e.g. a
- negative numeric value. It is OK if the first value1 starts with a
- "-", since it is automatically skipped.
-
-
-----------
-
-
-.. _start_8:
-
-LAMMPS screen output
-----------------------------------
-
-As LAMMPS reads an input script, it prints information to both the
-screen and a log file about significant actions it takes to setup a
-simulation. When the simulation is ready to begin, LAMMPS performs
-various initializations and prints the amount of memory (in MBytes per
-processor) that the simulation requires. It also prints details of
-the initial thermodynamic state of the system. During the run itself,
-thermodynamic information is printed periodically, every few
-timesteps. When the run concludes, LAMMPS prints the final
-thermodynamic state and a total run time for the simulation. It then
-appends statistics about the CPU time and storage requirements for the
-simulation. An example set of statistics is shown here:
-
-Loop time of 2.81192 on 4 procs for 300 steps with 2004 atoms
-
-.. parsed-literal::
-
- Performance: 18.436 ns/day 1.302 hours/ns 106.689 timesteps/s
- 97.0% CPU use with 4 MPI tasks x no OpenMP threads
-
-.. parsed-literal::
-
- MPI task timings breakdown:
- Section | min time | avg time | max time |%varavg| %total
- ---------------------------------------------------------------
- Pair | 1.9808 | 2.0134 | 2.0318 | 1.4 | 71.60
- Bond | 0.0021894 | 0.0060319 | 0.010058 | 4.7 | 0.21
- Kspace | 0.3207 | 0.3366 | 0.36616 | 3.1 | 11.97
- Neigh | 0.28411 | 0.28464 | 0.28516 | 0.1 | 10.12
- Comm | 0.075732 | 0.077018 | 0.07883 | 0.4 | 2.74
- Output | 0.00030518 | 0.00042665 | 0.00078821 | 1.0 | 0.02
- Modify | 0.086606 | 0.086631 | 0.086668 | 0.0 | 3.08
- Other | | 0.007178 | | | 0.26
-
-.. parsed-literal::
-
- Nlocal: 501 ave 508 max 490 min
- Histogram: 1 0 0 0 0 0 1 1 0 1
- Nghost: 6586.25 ave 6628 max 6548 min
- Histogram: 1 0 1 0 0 0 1 0 0 1
- Neighs: 177007 ave 180562 max 170212 min
- Histogram: 1 0 0 0 0 0 0 1 1 1
-
-.. parsed-literal::
-
- Total # of neighbors = 708028
- Ave neighs/atom = 353.307
- Ave special neighs/atom = 2.34032
- Neighbor list builds = 26
- Dangerous builds = 0
-
-The first section provides a global loop timing summary. The loop time
-is the total wall time for the section. The *Performance* line is
-provided for convenience to help predicting the number of loop
-continuations required and for comparing performance with other
-similar MD codes. The CPU use line provides the CPU utilzation per
-MPI task; it should be close to 100% times the number of OpenMP
-threads (or 1). Lower numbers correspond to delays due to file I/O or
-insufficient thread utilization.
-
-The MPI task section gives the breakdown of the CPU run time (in
-seconds) into major categories:
-
-* *Pair* stands for all non-bonded force computation
-* *Bond* stands for bonded interactions: bonds, angles, dihedrals, impropers
-* *Kspace* stands for reciprocal space interactions: Ewald, PPPM, MSM
-* *Neigh* stands for neighbor list construction
-* *Comm* stands for communicating atoms and their properties
-* *Output* stands for writing dumps and thermo output
-* *Modify* stands for fixes and computes called by them
-* *Other* is the remaining time
-
-For each category, there is a breakdown of the least, average and most
-amount of wall time a processor spent on this section. Also you have the
-variation from the average time. Together these numbers allow to gauge
-the amount of load imbalance in this segment of the calculation. Ideally
-the difference between minimum, maximum and average is small and thus
-the variation from the average close to zero. The final column shows
-the percentage of the total loop time is spent in this section.
-
-When using the :doc:`timer full <timer>` setting, an additional column
-is present that also prints the CPU utilization in percent. In
-addition, when using *timer full* and the :doc:`package omp <package>`
-command are active, a similar timing summary of time spent in threaded
-regions to monitor thread utilization and load balance is provided. A
-new entry is the *Reduce* section, which lists the time spend in
-reducing the per-thread data elements to the storage for non-threaded
-computation. These thread timings are taking from the first MPI rank
-only and and thus, as the breakdown for MPI tasks can change from MPI
-rank to MPI rank, this breakdown can be very different for individual
-ranks. Here is an example output for this section:
-
-Thread timings breakdown (MPI rank 0):
-Total threaded time 0.6846 / 90.6%
-Section | min time | avg time | max time |%varavg| %total
----------------------------------------------------------------
-Pair | 0.5127 | 0.5147 | 0.5167 | 0.3 | 75.18
-Bond | 0.0043139 | 0.0046779 | 0.0050418 | 0.5 | 0.68
-Kspace | 0.070572 | 0.074541 | 0.07851 | 1.5 | 10.89
-Neigh | 0.084778 | 0.086969 | 0.089161 | 0.7 | 12.70
-Reduce | 0.0036485 | 0.003737 | 0.0038254 | 0.1 | 0.55
-
-The third section lists the number of owned atoms (Nlocal), ghost atoms
-(Nghost), and pair-wise neighbors stored per processor. The max and min
-values give the spread of these values across processors with a 10-bin
-histogram showing the distribution. The total number of histogram counts
-is equal to the number of processors.
-
-The last section gives aggregate statistics for pair-wise neighbors
-and special neighbors that LAMMPS keeps track of (see the
-:doc:`special_bonds <special_bonds>` command). The number of times
-neighbor lists were rebuilt during the run is given as well as the
-number of potentially "dangerous" rebuilds. If atom movement
-triggered neighbor list rebuilding (see the
-:doc:`neigh_modify <neigh_modify>` command), then dangerous
-reneighborings are those that were triggered on the first timestep
-atom movement was checked for. If this count is non-zero you may wish
-to reduce the delay factor to insure no force interactions are missed
-by atoms moving beyond the neighbor skin distance before a rebuild
-takes place.
-
-If an energy minimization was performed via the
-:doc:`minimize <minimize>` command, additional information is printed,
-e.g.
-
-.. parsed-literal::
-
- Minimization stats:
- Stopping criterion = linesearch alpha is zero
- Energy initial, next-to-last, final =
- -6372.3765206 -8328.46998942 -8328.46998942
- Force two-norm initial, final = 1059.36 5.36874
- Force max component initial, final = 58.6026 1.46872
- Final line search alpha, max atom move = 2.7842e-10 4.0892e-10
- Iterations, force evaluations = 701 1516
-
-The first line prints the criterion that determined the minimization
-to be completed. The third line lists the initial and final energy,
-as well as the energy on the next-to-last iteration. The next 2 lines
-give a measure of the gradient of the energy (force on all atoms).
-The 2-norm is the "length" of this force vector; the inf-norm is the
-largest component. Then some information about the line search and
-statistics on how many iterations and force-evaluations the minimizer
-required. Multiple force evaluations are typically done at each
-iteration to perform a 1d line minimization in the search direction.
-
-If a :doc:`kspace_style <kspace_style>` long-range Coulombics solve was
-performed during the run (PPPM, Ewald), then additional information is
-printed, e.g.
-
-.. parsed-literal::
-
- FFT time (% of Kspce) = 0.200313 (8.34477)
- FFT Gflps 3d 1d-only = 2.31074 9.19989
-
-The first line gives the time spent doing 3d FFTs (4 per timestep) and
-the fraction it represents of the total KSpace time (listed above).
-Each 3d FFT requires computation (3 sets of 1d FFTs) and communication
-(transposes). The total flops performed is 5Nlog_2(N), where N is the
-number of points in the 3d grid. The FFTs are timed with and without
-the communication and a Gflop rate is computed. The 3d rate is with
-communication; the 1d rate is without (just the 1d FFTs). Thus you
-can estimate what fraction of your FFT time was spent in
-communication, roughly 75% in the example above.
-
-
-----------
-
-
-.. _start_9:
-
-Tips for users of previous LAMMPS versions
---------------------------------------------------------
-
-The current C++ began with a complete rewrite of LAMMPS 2001, which
-was written in F90. Features of earlier versions of LAMMPS are listed
-in :doc:`Section_history <Section_history>`. The F90 and F77 versions
-(2001 and 99) are also freely distributed as open-source codes; check
-the `LAMMPS WWW Site <lws_>`_ for distribution information if you prefer
-those versions. The 99 and 2001 versions are no longer under active
-development; they do not have all the features of C++ LAMMPS.
-
-If you are a previous user of LAMMPS 2001, these are the most
-significant changes you will notice in C++ LAMMPS:
-
-(1) The names and arguments of many input script commands have
-changed. All commands are now a single word (e.g. read_data instead
-of read data).
-
-(2) All the functionality of LAMMPS 2001 is included in C++ LAMMPS,
-but you may need to specify the relevant commands in different ways.
-
-(3) The format of the data file can be streamlined for some problems.
-See the :doc:`read_data <read_data>` command for details. The data file
-section "Nonbond Coeff" has been renamed to "Pair Coeff" in C++ LAMMPS.
-
-(4) Binary restart files written by LAMMPS 2001 cannot be read by C++
-LAMMPS with a :doc:`read_restart <read_restart>` command. This is
-because they were output by F90 which writes in a different binary
-format than C or C++ writes or reads. Use the *restart2data* tool
-provided with LAMMPS 2001 to convert the 2001 restart file to a text
-data file. Then edit the data file as necessary before using the C++
-LAMMPS :doc:`read_data <read_data>` command to read it in.
-
-(5) There are numerous small numerical changes in C++ LAMMPS that mean
-you will not get identical answers when comparing to a 2001 run.
-However, your initial thermodynamic energy and MD trajectory should be
-close if you have setup the problem for both codes the same.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/Section_tools.txt b/doc/html/_sources/Section_tools.txt
deleted file mode 100644
index 7d96e007f..000000000
--- a/doc/html/_sources/Section_tools.txt
+++ /dev/null
@@ -1,737 +0,0 @@
-Additional tools
-================
-
-LAMMPS is designed to be a computational kernel for performing
-molecular dynamics computations. Additional pre- and post-processing
-steps are often necessary to setup and analyze a simulation. A few
-additional tools are provided with the LAMMPS distribution and are
-described in this section.
-
-Our group has also written and released a separate toolkit called
-`Pizza.py <pizza_>`_ which provides tools for doing setup, analysis,
-plotting, and visualization for LAMMPS simulations. Pizza.py is
-written in `Python <python_>`_ and is available for download from `the Pizza.py WWW site <pizza_>`_.
-
-.. _pizza: http://www.sandia.gov/~sjplimp/pizza.html
-
-
-
-.. _python: http://www.python.org
-
-
-
-Note that many users write their own setup or analysis tools or use
-other existing codes and convert their output to a LAMMPS input format
-or vice versa. The tools listed here are included in the LAMMPS
-distribution as examples of auxiliary tools. Some of them are not
-actively supported by Sandia, as they were contributed by LAMMPS
-users. If you have problems using them, we can direct you to the
-authors.
-
-The source code for each of these codes is in the tools sub-directory
-of the LAMMPS distribution. There is a Makefile (which you may need
-to edit for your platform) which will build several of the tools which
-reside in that directory. Some of them are larger packages in their
-own sub-directories with their own Makefiles.
-
-* :ref:`amber2lmp <amber>`
-* :ref:`binary2txt <binary>`
-* :ref:`ch2lmp <charmm>`
-* :ref:`chain <chain>`
-* :ref:`colvars <colvars>`
-* :ref:`createatoms <create>`
-* :ref:`data2xmovie <data>`
-* :ref:`eam database <eamdb>`
-* :ref:`eam generate <eamgn>`
-* :ref:`eff <eff>`
-* :ref:`emacs <emacs>`
-* :ref:`fep <fep>`
-* :ref:`i-pi <ipi>`
-* :ref:`ipp <ipp>`
-* :ref:`kate <kate>`
-* :ref:`lmp2arc <arc>`
-* :ref:`lmp2cfg <cfg>`
-* :ref:`lmp2vmd <vmd>`
-* :ref:`matlab <matlab>`
-* :ref:`micelle2d <micelle>`
-* :ref:`moltemplate <moltemplate>`
-* :ref:`msi2lmp <msi>`
-* :ref:`phonon <phonon>`
-* :ref:`polymer bonding <polybond>`
-* :ref:`pymol_asphere <pymol>`
-* :ref:`python <pythontools>`
-* :ref:`reax <reax>`
-* :ref:`restart2data <restart>`
-* :ref:`vim <vim>`
-* :ref:`xmgrace <xmgrace>`
-* :ref:`xmovie <xmovie>`
-
-
-----------
-
-
-.. _amber:
-
-amber2lmp tool
---------------------------
-
-The amber2lmp sub-directory contains two Python scripts for converting
-files back-and-forth between the AMBER MD code and LAMMPS. See the
-README file in amber2lmp for more information.
-
-These tools were written by Keir Novik while he was at Queen Mary
-University of London. Keir is no longer there and cannot support
-these tools which are out-of-date with respect to the current LAMMPS
-version (and maybe with respect to AMBER as well). Since we don't use
-these tools at Sandia, you'll need to experiment with them and make
-necessary modifications yourself.
-
-
-----------
-
-
-.. _binary:
-
-binary2txt tool
-----------------------------
-
-The file binary2txt.cpp converts one or more binary LAMMPS dump file
-into ASCII text files. The syntax for running the tool is
-
-.. parsed-literal::
-
- binary2txt file1 file2 ...
-
-which creates file1.txt, file2.txt, etc. This tool must be compiled
-on a platform that can read the binary file created by a LAMMPS run,
-since binary files are not compatible across all platforms.
-
-
-----------
-
-
-.. _charmm:
-
-ch2lmp tool
-------------------------
-
-The ch2lmp sub-directory contains tools for converting files
-back-and-forth between the CHARMM MD code and LAMMPS.
-
-They are intended to make it easy to use CHARMM as a builder and as a
-post-processor for LAMMPS. Using charmm2lammps.pl, you can convert an
-ensemble built in CHARMM into its LAMMPS equivalent. Using
-lammps2pdb.pl you can convert LAMMPS atom dumps into pdb files.
-
-See the README file in the ch2lmp sub-directory for more information.
-
-These tools were created by Pieter in't Veld (pjintve at sandia.gov)
-and Paul Crozier (pscrozi at sandia.gov) at Sandia.
-
-
-----------
-
-
-.. _chain:
-
-chain tool
-----------------------
-
-The file chain.f creates a LAMMPS data file containing bead-spring
-polymer chains and/or monomer solvent atoms. It uses a text file
-containing chain definition parameters as an input. The created
-chains and solvent atoms can strongly overlap, so LAMMPS needs to run
-the system initially with a "soft" pair potential to un-overlap it.
-The syntax for running the tool is
-
-.. parsed-literal::
-
- chain < def.chain > data.file
-
-See the def.chain or def.chain.ab files in the tools directory for
-examples of definition files. This tool was used to create the
-system for the :doc:`chain benchmark <Section_perf>`.
-
-
-----------
-
-
-.. _colvars:
-
-colvars tools
----------------------------
-
-The colvars directory contains a collection of tools for postprocessing
-data produced by the colvars collective variable library.
-To compile the tools, edit the makefile for your system and run "make".
-
-Please report problems and issues the colvars library and its tools
-at: https://github.com/colvars/colvars/issues
-
-abf_integrate:
-
-MC-based integration of multidimensional free energy gradient
-Version 20110511
-
-.. parsed-literal::
-
- Syntax: ./abf_integrate < filename > [-n < nsteps >] [-t < temp >] [-m [0|1] (metadynamics)] [-h < hill_height >] [-f < variable_hill_factor >]
-
-The LAMMPS interface to the colvars collective variable library, as
-well as these tools, were created by Axel Kohlmeyer (akohlmey at
-gmail.com) at ICTP, Italy.
-
-
-----------
-
-
-.. _create:
-
-createatoms tool
------------------------------
-
-The tools/createatoms directory contains a Fortran program called
-createAtoms.f which can generate a variety of interesting crystal
-structures and geometries and output the resulting list of atom
-coordinates in LAMMPS or other formats.
-
-See the included Manual.pdf for details.
-
-The tool is authored by Xiaowang Zhou (Sandia), xzhou at sandia.gov.
-
-
-----------
-
-
-.. _data:
-
-data2xmovie tool
----------------------------
-
-The file data2xmovie.c converts a LAMMPS data file into a snapshot
-suitable for visualizing with the :ref:`xmovie <xmovie>` tool, as if it had
-been output with a dump command from LAMMPS itself. The syntax for
-running the tool is
-
-.. parsed-literal::
-
- data2xmovie [options] < infile > outfile
-
-See the top of the data2xmovie.c file for a discussion of the options.
-
-
-----------
-
-
-.. _eamdb:
-
-eam database tool
------------------------------
-
-The tools/eam_database directory contains a Fortran program that will
-generate EAM alloy setfl potential files for any combination of 16
-elements: Cu, Ag, Au, Ni, Pd, Pt, Al, Pb, Fe, Mo, Ta, W, Mg, Co, Ti,
-Zr. The files can then be used with the :doc:`pair_style eam/alloy <pair_eam>` command.
-
-The tool is authored by Xiaowang Zhou (Sandia), xzhou at sandia.gov,
-and is based on his paper:
-
-X. W. Zhou, R. A. Johnson, and H. N. G. Wadley, Phys. Rev. B, 69,
-144113 (2004).
-
-
-----------
-
-
-.. _eamgn:
-
-eam generate tool
------------------------------
-
-The tools/eam_generate directory contains several one-file C programs
-that convert an analytic formula into a tabulated :doc:`embedded atom method (EAM) <pair_eam>` setfl potential file. The potentials they
-produce are in the potentials directory, and can be used with the
-:doc:`pair_style eam/alloy <pair_eam>` command.
-
-The source files and potentials were provided by Gerolf Ziegenhain
-(gerolf at ziegenhain.com).
-
-
-----------
-
-
-.. _eff:
-
-eff tool
-------------------
-
-The tools/eff directory contains various scripts for generating
-structures and post-processing output for simulations using the
-electron force field (eFF).
-
-These tools were provided by Andres Jaramillo-Botero at CalTech
-(ajaramil at wag.caltech.edu).
-
-
-----------
-
-
-.. _emacs:
-
-emacs tool
-----------------------
-
-The tools/emacs directory contains a Lips add-on file for Emacs that
-enables a lammps-mode for editing of input scripts when using Emacs,
-with various highlighting options setup.
-
-These tools were provided by Aidan Thompson at Sandia
-(athomps at sandia.gov).
-
-
-----------
-
-
-.. _fep:
-
-fep tool
-------------------
-
-The tools/fep directory contains Python scripts useful for
-post-processing results from performing free-energy perturbation
-simulations using the USER-FEP package.
-
-The scripts were contributed by Agilio Padua (Universite Blaise
-Pascal Clermont-Ferrand), agilio.padua at univ-bpclermont.fr.
-
-See README file in the tools/fep directory.
-
-
-----------
-
-
-.. _ipi:
-
-i-pi tool
--------------------
-
-The tools/i-pi directory contains a version of the i-PI package, with
-all the LAMMPS-unrelated files removed. It is provided so that it can
-be used with the :doc:`fix ipi <fix_ipi>` command to perform
-path-integral molecular dynamics (PIMD).
-
-The i-PI package was created and is maintained by Michele Ceriotti,
-michele.ceriotti at gmail.com, to interface to a variety of molecular
-dynamics codes.
-
-See the tools/i-pi/manual.pdf file for an overview of i-PI, and the
-:doc:`fix ipi <fix_ipi>` doc page for further details on running PIMD
-calculations with LAMMPS.
-
-
-----------
-
-
-.. _ipp:
-
-ipp tool
-------------------
-
-The tools/ipp directory contains a Perl script ipp which can be used
-to facilitate the creation of a complicated file (say, a lammps input
-script or tools/createatoms input file) using a template file.
-
-ipp was created and is maintained by Reese Jones (Sandia), rjones at
-sandia.gov.
-
-See two examples in the tools/ipp directory. One of them is for the
-tools/createatoms tool's input file.
-
-
-----------
-
-
-.. _kate:
-
-kate tool
---------------------
-
-The file in the tools/kate directory is an add-on to the Kate editor
-in the KDE suite that allow syntax highlighting of LAMMPS input
-scripts. See the README.txt file for details.
-
-The file was provided by Alessandro Luigi Sellerio
-(alessandro.sellerio at ieni.cnr.it).
-
-
-----------
-
-
-.. _arc:
-
-lmp2arc tool
-----------------------
-
-The lmp2arc sub-directory contains a tool for converting LAMMPS output
-files to the format for Accelrys' Insight MD code (formerly
-MSI/Biosym and its Discover MD code). See the README file for more
-information.
-
-This tool was written by John Carpenter (Cray), Michael Peachey
-(Cray), and Steve Lustig (Dupont). John is now at the Mayo Clinic
-(jec at mayo.edu), but still fields questions about the tool.
-
-This tool was updated for the current LAMMPS C++ version by Jeff
-Greathouse at Sandia (jagreat at sandia.gov).
-
-
-----------
-
-
-.. _cfg:
-
-lmp2cfg tool
-----------------------
-
-The lmp2cfg sub-directory contains a tool for converting LAMMPS output
-files into a series of *.cfg files which can be read into the
-`AtomEye <http://mt.seas.upenn.edu/Archive/Graphics/A>`_ visualizer. See
-the README file for more information.
-
-This tool was written by Ara Kooser at Sandia (askoose at sandia.gov).
-
-
-----------
-
-
-.. _vmd:
-
-lmp2vmd tool
-----------------------
-
-The lmp2vmd sub-directory contains a README.txt file that describes
-details of scripts and plugin support within the `VMD package <http://www.ks.uiuc.edu/Research/vmd>`_ for visualizing LAMMPS
-dump files.
-
-The VMD plugins and other supporting scripts were written by Axel
-Kohlmeyer (akohlmey at cmm.chem.upenn.edu) at U Penn.
-
-
-----------
-
-
-.. _matlab:
-
-matlab tool
-------------------------
-
-The matlab sub-directory contains several :ref:`MATLAB <matlab>` scripts for
-post-processing LAMMPS output. The scripts include readers for log
-and dump files, a reader for EAM potential files, and a converter that
-reads LAMMPS dump files and produces CFG files that can be visualized
-with the `AtomEye <http://mt.seas.upenn.edu/Archive/Graphics/A>`_
-visualizer.
-
-See the README.pdf file for more information.
-
-These scripts were written by Arun Subramaniyan at Purdue Univ
-(asubrama at purdue.edu).
-
-.. _matlab: http://www.mathworks.com
-
-
-
-
-----------
-
-
-.. _micelle:
-
-micelle2d tool
-----------------------------
-
-The file micelle2d.f creates a LAMMPS data file containing short lipid
-chains in a monomer solution. It uses a text file containing lipid
-definition parameters as an input. The created molecules and solvent
-atoms can strongly overlap, so LAMMPS needs to run the system
-initially with a "soft" pair potential to un-overlap it. The syntax
-for running the tool is
-
-.. parsed-literal::
-
- micelle2d < def.micelle2d > data.file
-
-See the def.micelle2d file in the tools directory for an example of a
-definition file. This tool was used to create the system for the
-:doc:`micelle example <Section_example>`.
-
-
-----------
-
-
-.. _moltemplate:
-
-moltemplate tool
-----------------------------------
-
-The moltemplate sub-directory contains a Python-based tool for
-building molecular systems based on a text-file description, and
-creating LAMMPS data files that encode their molecular topology as
-lists of bonds, angles, dihedrals, etc. See the README.TXT file for
-more information.
-
-This tool was written by Andrew Jewett (jewett.aij at gmail.com), who
-supports it. It has its own WWW page at
-`http://moltemplate.org <http://moltemplate.org>`_.
-
-
-----------
-
-
-.. _msi:
-
-msi2lmp tool
-----------------------
-
-The msi2lmp sub-directory contains a tool for creating LAMMPS input
-data files from Accelrys' Insight MD code (formerly MSI/Biosym and
-its Discover MD code). See the README file for more information.
-
-This tool was written by John Carpenter (Cray), Michael Peachey
-(Cray), and Steve Lustig (Dupont). John is now at the Mayo Clinic
-(jec at mayo.edu), but still fields questions about the tool.
-
-This tool may be out-of-date with respect to the current LAMMPS and
-Insight versions. Since we don't use it at Sandia, you'll need to
-experiment with it yourself.
-
-
-----------
-
-
-.. _phonon:
-
-phonon tool
-------------------------
-
-The phonon sub-directory contains a post-processing tool useful for
-analyzing the output of the :doc:`fix phonon <fix_phonon>` command in
-the USER-PHONON package.
-
-See the README file for instruction on building the tool and what
-library it needs. And see the examples/USER/phonon directory
-for example problems that can be post-processed with this tool.
-
-This tool was written by Ling-Ti Kong at Shanghai Jiao Tong
-University.
-
-
-----------
-
-
-.. _polybond:
-
-polymer bonding tool
------------------------------------
-
-The polybond sub-directory contains a Python-based tool useful for
-performing "programmable polymer bonding". The Python file
-lmpsdata.py provides a "Lmpsdata" class with various methods which can
-be invoked by a user-written Python script to create data files with
-complex bonding topologies.
-
-See the Manual.pdf for details and example scripts.
-
-This tool was written by Zachary Kraus at Georgia Tech.
-
-
-----------
-
-
-.. _pymol:
-
-pymol_asphere tool
-------------------------------
-
-The pymol_asphere sub-directory contains a tool for converting a
-LAMMPS dump file that contains orientation info for ellipsoidal
-particles into an input file for the :ref:`PyMol visualization package <pymol>`.
-
-.. _pymol: http://pymol.sourceforge.net
-
-
-
-Specifically, the tool triangulates the ellipsoids so they can be
-viewed as true ellipsoidal particles within PyMol. See the README and
-examples directory within pymol_asphere for more information.
-
-This tool was written by Mike Brown at Sandia.
-
-
-----------
-
-
-.. _pythontools:
-
-python tool
------------------------------
-
-The python sub-directory contains several Python scripts
-that perform common LAMMPS post-processing tasks, such as:
-
-* extract thermodynamic info from a log file as columns of numbers
-* plot two columns of thermodynamic info from a log file using GnuPlot
-* sort the snapshots in a dump file by atom ID
-* convert multiple :doc:`NEB <neb>` dump files into one dump file for viz
-* convert dump files into XYZ, CFG, or PDB format for viz by other packages
-
-These are simple scripts built on `Pizza.py <pizza_>`_ modules. See the
-README for more info on Pizza.py and how to use these scripts.
-
-
-----------
-
-
-.. _reax:
-
-reax tool
---------------------
-
-The reax sub-directory contains stand-alond codes that can
-post-process the output of the :doc:`fix reax/bonds <fix_reax_bonds>`
-command from a LAMMPS simulation using :doc:`ReaxFF <pair_reax>`. See
-the README.txt file for more info.
-
-These tools were written by Aidan Thompson at Sandia.
-
-
-----------
-
-
-.. _restart:
-
-restart2data tool
--------------------------------
-
-.. note::
-
- This tool is now obsolete and is not included in the current
- LAMMPS distribution. This is becaues there is now a
- :doc:`write_data <write_data>` command, which can create a data file
- from within an input script. Running LAMMPS with the "-r"
- :ref:`command-line switch <start_7>` as follows:
-
-lmp_g++ -r restartfile datafile
-
-is the same as running a 2-line input script:
-
-read_restart restartfile
-write_data datafile
-
-which will produce the same data file that the restart2data tool used
-to create. The following information is included in case you have an
-older version of LAMMPS which still includes the restart2data tool.
-
-The file restart2data.cpp converts a binary LAMMPS restart file into
-an ASCII data file. The syntax for running the tool is
-
-.. parsed-literal::
-
- restart2data restart-file data-file (input-file)
-
-Input-file is optional and if specified will contain LAMMPS input
-commands for the masses and force field parameters, instead of putting
-those in the data-file. Only a few force field styles currently
-support this option.
-
-This tool must be compiled on a platform that can read the binary file
-created by a LAMMPS run, since binary files are not compatible across
-all platforms.
-
-Note that a text data file has less precision than a binary restart
-file. Hence, continuing a run from a converted data file will
-typically not conform as closely to a previous run as will restarting
-from a binary restart file.
-
-If a "%" appears in the specified restart-file, the tool expects a set
-of multiple files to exist. See the :doc:`restart <restart>` and
-:doc:`write_restart <write_restart>` commands for info on how such sets
-of files are written by LAMMPS, and how the files are named.
-
-
-----------
-
-
-.. _vim:
-
-vim tool
-------------------
-
-The files in the tools/vim directory are add-ons to the VIM editor
-that allow easier editing of LAMMPS input scripts. See the README.txt
-file for details.
-
-These files were provided by Gerolf Ziegenhain (gerolf at
-ziegenhain.com)
-
-
-----------
-
-
-.. _xmgrace:
-
-xmgrace tool
---------------------------
-
-The files in the tools/xmgrace directory can be used to plot the
-thermodynamic data in LAMMPS log files via the xmgrace plotting
-package. There are several tools in the directory that can be used in
-post-processing mode. The lammpsplot.cpp file can be compiled and
-used to create plots from the current state of a running LAMMPS
-simulation.
-
-See the README file for details.
-
-These files were provided by Vikas Varshney (vv0210 at gmail.com)
-
-
-----------
-
-
-.. _xmovie:
-
-xmovie tool
-------------------------
-
-The xmovie tool is an X-based visualization package that can read
-LAMMPS dump files and animate them. It is in its own sub-directory
-with the tools directory. You may need to modify its Makefile so that
-it can find the appropriate X libraries to link against.
-
-The syntax for running xmovie is
-
-.. parsed-literal::
-
- xmovie [options] dump.file1 dump.file2 ...
-
-If you just type "xmovie" you will see a list of options. Note that
-by default, LAMMPS dump files are in scaled coordinates, so you
-typically need to use the -scale option with xmovie. When xmovie runs
-it opens a visualization window and a control window. The control
-options are straightforward to use.
-
-Xmovie was mostly written by Mike Uttormark (U Wisconsin) while he
-spent a summer at Sandia. It displays 2d projections of a 3d domain.
-While simple in design, it is an amazingly fast program that can
-render large numbers of atoms very quickly. It's a useful tool for
-debugging LAMMPS input and output and making sure your simulation is
-doing what you think it should. The animations on the Examples page
-of the `LAMMPS WWW site <lws_>`_ were created with xmovie.
-
-I've lost contact with Mike, so I hope he's comfortable with us
-distributing his great tool!
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/accelerate_gpu.txt b/doc/html/_sources/accelerate_gpu.txt
deleted file mode 100644
index 166262c7c..000000000
--- a/doc/html/_sources/accelerate_gpu.txt
+++ /dev/null
@@ -1,249 +0,0 @@
-:doc:`Return to Section accelerate overview <Section_accelerate>`
-
-5.GPU package
--------------
-
-The GPU package was developed by Mike Brown at ORNL and his
-collaborators, particularly Trung Nguyen (ORNL). It provides GPU
-versions of many pair styles, including the 3-body Stillinger-Weber
-pair style, and for :doc:`kspace_style pppm <kspace_style>` for
-long-range Coulombics. It has the following general features:
-
-* It is designed to exploit common GPU hardware configurations where one
- or more GPUs are coupled to many cores of one or more multi-core CPUs,
- e.g. within a node of a parallel machine.
-* Atom-based data (e.g. coordinates, forces) moves back-and-forth
- between the CPU(s) and GPU every timestep.
-* Neighbor lists can be built on the CPU or on the GPU
-* The charge assignement and force interpolation portions of PPPM can be
- run on the GPU. The FFT portion, which requires MPI communication
- between processors, runs on the CPU.
-* Asynchronous force computations can be performed simultaneously on the
- CPU(s) and GPU.
-* It allows for GPU computations to be performed in single or double
- precision, or in mixed-mode precision, where pairwise forces are
- computed in single precision, but accumulated into double-precision
- force vectors.
-* LAMMPS-specific code is in the GPU package. It makes calls to a
- generic GPU library in the lib/gpu directory. This library provides
- NVIDIA support as well as more general OpenCL support, so that the
- same functionality can eventually be supported on a variety of GPU
- hardware.
-Here is a quick overview of how to enable and use the GPU package:
-
-* build the library in lib/gpu for your GPU hardware with the desired precision settings
-* install the GPU package and build LAMMPS as usual
-* use the mpirun command to set the number of MPI tasks/node which determines the number of MPI tasks/GPU
-* specify the # of GPUs per node
-* use GPU styles in your input script
-
-The latter two steps can be done using the "-pk gpu" and "-sf gpu"
-:ref:`command-line switches <start_7>` respectively. Or
-the effect of the "-pk" or "-sf" switches can be duplicated by adding
-the :doc:`package gpu <package>` or :doc:`suffix gpu <suffix>` commands
-respectively to your input script.
-
-**Required hardware/software:**
-
-To use this package, you currently need to have an NVIDIA GPU and
-install the NVIDIA Cuda software on your system:
-
-* Check if you have an NVIDIA GPU: cat /proc/driver/nvidia/gpus/0/information
-* Go to http://www.nvidia.com/object/cuda_get.html
-* Install a driver and toolkit appropriate for your system (SDK is not necessary)
-* Run lammps/lib/gpu/nvc_get_devices (after building the GPU library, see below) to list supported devices and properties
-
-**Building LAMMPS with the GPU package:**
-
-This requires two steps (a,b): build the GPU library, then build
-LAMMPS with the GPU package.
-
-You can do both these steps in one line, using the src/Make.py script,
-described in :ref:`Section 2.4 <start_4>` of the manual.
-Type "Make.py -h" for help. If run from the src directory, this
-command will create src/lmp_gpu using src/MAKE/Makefile.mpi as the
-starting Makefile.machine:
-
-.. parsed-literal::
-
- Make.py -p gpu -gpu mode=single arch=31 -o gpu -a lib-gpu file mpi
-
-Or you can follow these two (a,b) steps:
-
-(a) Build the GPU library
-
-The GPU library is in lammps/lib/gpu. Select a Makefile.machine (in
-lib/gpu) appropriate for your system. You should pay special
-attention to 3 settings in this makefile.
-
-* CUDA_HOME = needs to be where NVIDIA Cuda software is installed on your system
-* CUDA_ARCH = needs to be appropriate to your GPUs
-* CUDA_PREC = precision (double, mixed, single) you desire
-
-See lib/gpu/Makefile.linux.double for examples of the ARCH settings
-for different GPU choices, e.g. Fermi vs Kepler. It also lists the
-possible precision settings:
-
-.. parsed-literal::
-
- CUDA_PREC = -D_SINGLE_SINGLE # single precision for all calculations
- CUDA_PREC = -D_DOUBLE_DOUBLE # double precision for all calculations
- CUDA_PREC = -D_SINGLE_DOUBLE # accumulation of forces, etc, in double
-
-The last setting is the mixed mode referred to above. Note that your
-GPU must support double precision to use either the 2nd or 3rd of
-these settings.
-
-To build the library, type:
-
-.. parsed-literal::
-
- make -f Makefile.machine
-
-If successful, it will produce the files libgpu.a and Makefile.lammps.
-
-The latter file has 3 settings that need to be appropriate for the
-paths and settings for the CUDA system software on your machine.
-Makefile.lammps is a copy of the file specified by the EXTRAMAKE
-setting in Makefile.machine. You can change EXTRAMAKE or create your
-own Makefile.lammps.machine if needed.
-
-Note that to change the precision of the GPU library, you need to
-re-build the entire library. Do a "clean" first, e.g. "make -f
-Makefile.linux clean", followed by the make command above.
-
-(b) Build LAMMPS with the GPU package
-
-.. parsed-literal::
-
- cd lammps/src
- make yes-gpu
- make machine
-
-No additional compile/link flags are needed in Makefile.machine.
-
-Note that if you change the GPU library precision (discussed above)
-and rebuild the GPU library, then you also need to re-install the GPU
-package and re-build LAMMPS, so that all affected files are
-re-compiled and linked to the new GPU library.
-
-**Run with the GPU package from the command line:**
-
-The mpirun or mpiexec command sets the total number of MPI tasks used
-by LAMMPS (one or multiple per compute node) and the number of MPI
-tasks used per node. E.g. the mpirun command in MPICH does this via
-its -np and -ppn switches. Ditto for OpenMPI via -np and -npernode.
-
-When using the GPU package, you cannot assign more than one GPU to a
-single MPI task. However multiple MPI tasks can share the same GPU,
-and in many cases it will be more efficient to run this way. Likewise
-it may be more efficient to use less MPI tasks/node than the available
-# of CPU cores. Assignment of multiple MPI tasks to a GPU will happen
-automatically if you create more MPI tasks/node than there are
-GPUs/mode. E.g. with 8 MPI tasks/node and 2 GPUs, each GPU will be
-shared by 4 MPI tasks.
-
-Use the "-sf gpu" :ref:`command-line switch <start_7>`,
-which will automatically append "gpu" to styles that support it. Use
-the "-pk gpu Ng" :ref:`command-line switch <start_7>` to
-set Ng = # of GPUs/node to use.
-
-.. parsed-literal::
-
- lmp_machine -sf gpu -pk gpu 1 -in in.script # 1 MPI task uses 1 GPU
- mpirun -np 12 lmp_machine -sf gpu -pk gpu 2 -in in.script # 12 MPI tasks share 2 GPUs on a single 16-core (or whatever) node
- mpirun -np 48 -ppn 12 lmp_machine -sf gpu -pk gpu 2 -in in.script # ditto on 4 16-core nodes
-
-Note that if the "-sf gpu" switch is used, it also issues a default
-:doc:`package gpu 1 <package>` command, which sets the number of
-GPUs/node to 1.
-
-Using the "-pk" switch explicitly allows for setting of the number of
-GPUs/node to use and additional options. Its syntax is the same as
-same as the "package gpu" command. See the :doc:`package <package>`
-command doc page for details, including the default values used for
-all its options if it is not specified.
-
-Note that the default for the :doc:`package gpu <package>` command is to
-set the Newton flag to "off" pairwise interactions. It does not
-affect the setting for bonded interactions (LAMMPS default is "on").
-The "off" setting for pairwise interaction is currently required for
-GPU package pair styles.
-
-**Or run with the GPU package by editing an input script:**
-
-The discussion above for the mpirun/mpiexec command, MPI tasks/node,
-and use of multiple MPI tasks/GPU is the same.
-
-Use the :doc:`suffix gpu <suffix>` command, or you can explicitly add an
-"gpu" suffix to individual styles in your input script, e.g.
-
-.. parsed-literal::
-
- pair_style lj/cut/gpu 2.5
-
-You must also use the :doc:`package gpu <package>` command to enable the
-GPU package, unless the "-sf gpu" or "-pk gpu" :ref:`command-line switches <start_7>` were used. It specifies the
-number of GPUs/node to use, as well as other options.
-
-**Speed-ups to expect:**
-
-The performance of a GPU versus a multi-core CPU is a function of your
-hardware, which pair style is used, the number of atoms/GPU, and the
-precision used on the GPU (double, single, mixed).
-
-See the `Benchmark page <http://lammps.sandia.gov/bench.html>`_ of the
-LAMMPS web site for performance of the GPU package on various
-hardware, including the Titan HPC platform at ORNL.
-
-You should also experiment with how many MPI tasks per GPU to use to
-give the best performance for your problem and machine. This is also
-a function of the problem size and the pair style being using.
-Likewise, you should experiment with the precision setting for the GPU
-library to see if single or mixed precision will give accurate
-results, since they will typically be faster.
-
-**Guidelines for best performance:**
-
-* Using multiple MPI tasks per GPU will often give the best performance,
- as allowed my most multi-core CPU/GPU configurations.
-* If the number of particles per MPI task is small (e.g. 100s of
- particles), it can be more efficient to run with fewer MPI tasks per
- GPU, even if you do not use all the cores on the compute node.
-* The :doc:`package gpu <package>` command has several options for tuning
- performance. Neighbor lists can be built on the GPU or CPU. Force
- calculations can be dynamically balanced across the CPU cores and
- GPUs. GPU-specific settings can be made which can be optimized
- for different hardware. See the :doc:`packakge <package>` command
- doc page for details.
-* As described by the :doc:`package gpu <package>` command, GPU
- accelerated pair styles can perform computations asynchronously with
- CPU computations. The "Pair" time reported by LAMMPS will be the
- maximum of the time required to complete the CPU pair style
- computations and the time required to complete the GPU pair style
- computations. Any time spent for GPU-enabled pair styles for
- computations that run simultaneously with :doc:`bond <bond_style>`,
- :doc:`angle <angle_style>`, :doc:`dihedral <dihedral_style>`,
- :doc:`improper <improper_style>`, and :doc:`long-range <kspace_style>`
- calculations will not be included in the "Pair" time.
-* When the *mode* setting for the package gpu command is force/neigh,
- the time for neighbor list calculations on the GPU will be added into
- the "Pair" time, not the "Neigh" time. An additional breakdown of the
- times required for various tasks on the GPU (data copy, neighbor
- calculations, force computations, etc) are output only with the LAMMPS
- screen output (not in the log file) at the end of each run. These
- timings represent total time spent on the GPU for each routine,
- regardless of asynchronous CPU calculations.
-* The output section "GPU Time Info (average)" reports "Max Mem / Proc".
- This is the maximum memory used at one time on the GPU for data
- storage by a single MPI process.
-Restrictions
-""""""""""""
-
-
-None.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/accelerate_intel.txt b/doc/html/_sources/accelerate_intel.txt
deleted file mode 100644
index c8bee2877..000000000
--- a/doc/html/_sources/accelerate_intel.txt
+++ /dev/null
@@ -1,479 +0,0 @@
-:doc:`Return to Section accelerate overview <Section_accelerate>`
-
-5.USER-INTEL package
---------------------
-
-The USER-INTEL package is maintained by Mike Brown at Intel
-Corporation. It provides two methods for accelerating simulations,
-depending on the hardware you have. The first is acceleration on
-Intel CPUs by running in single, mixed, or double precision with
-vectorization. The second is acceleration on Intel Xeon Phi
-coprocessors via offloading neighbor list and non-bonded force
-calculations to the Phi. The same C++ code is used in both cases.
-When offloading to a coprocessor from a CPU, the same routine is run
-twice, once on the CPU and once with an offload flag. This allows
-LAMMPS to run on the CPU cores and coprocessor cores simulataneously.
-
-**Currently Available USER-INTEL Styles:**
-
-* Angle Styles: charmm, harmonic
-* Bond Styles: fene, harmonic
-* Dihedral Styles: charmm, harmonic, opls
-* Fixes: nve, npt, nvt, nvt/sllod
-* Improper Styles: cvff, harmonic
-* Pair Styles: buck/coul/cut, buck/coul/long, buck, gayberne,
- charmm/coul/long, lj/cut, lj/cut/coul/long, sw, tersoff
-* K-Space Styles: pppm
-**Speed-ups to expect:**
-
-The speedups will depend on your simulation, the hardware, which
-styles are used, the number of atoms, and the floating-point
-precision mode. Performance improvements are shown compared to
-LAMMPS *without using other acceleration packages* as these are
-under active development (and subject to performance changes). The
-measurements were performed using the input files available in
-the src/USER-INTEL/TEST directory. These are scalable in size; the
-results given are with 512K particles (524K for Liquid Crystal).
-Most of the simulations are standard LAMMPS benchmarks (indicated
-by the filename extension in parenthesis) with modifications to the
-run length and to add a warmup run (for use with offload
-benchmarks).
-
-.. image:: JPG/user_intel.png
- :align: center
-
-Results are speedups obtained on Intel Xeon E5-2697v4 processors
-(code-named Broadwell) and Intel Xeon Phi 7250 processors
-(code-named Knights Landing) with "18 Jun 2016" LAMMPS built with
-Intel Parallel Studio 2016 update 3. Results are with 1 MPI task
-per physical core. See *src/USER-INTEL/TEST/README* for the raw
-simulation rates and instructions to reproduce.
-
-
-----------
-
-
-**Quick Start for Experienced Users:**
-
-LAMMPS should be built with the USER-INTEL package installed.
-Simulations should be run with 1 MPI task per physical *core*\ ,
-not *hardware thread*\ .
-
-For Intel Xeon CPUs:
-
-* Edit src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi as necessary.
-* If using *kspace_style pppm* in the input script, add "neigh_modify binsize 3" and "kspace_modify diff ad" to the input script for better
- performance.
-* "-pk intel 0 omp 2 -sf intel" added to LAMMPS command-line
-For Intel Xeon Phi CPUs for simulations without *kspace_style
-pppm* in the input script
-
-* Edit src/MAKE/OPTIONS/Makefile.knl as necessary.
-* Runs should be performed using MCDRAM.
-* "-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.
-For Intel Xeon Phi CPUs for simulations with *kspace_style
-pppm* in the input script:
-
-* Edit src/MAKE/OPTIONS/Makefile.knl as necessary.
-* Runs should be performed using MCDRAM.
-* Add "neigh_modify binsize 3" to the input script for better
- performance.
-* Add "kspace_modify diff ad" to the input script for better
- performance.
-* export KMP_AFFINITY=none
-* "-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.
-For Intel Xeon Phi coprocessors (Offload):
-
-* Edit src/MAKE/OPTIONS/Makefile.intel_coprocessor as necessary
-* "-pk intel N omp 1" added to command-line where N is the number of
- coprocessors per node.
-
-----------
-
-
-**Required hardware/software:**
-
-In order to use offload to coprocessors, an Intel Xeon Phi
-coprocessor and an Intel compiler are required. For this, the
-recommended version of the Intel compiler is 14.0.1.106 or
-versions 15.0.2.044 and higher.
-
-Although any compiler can be used with the USER-INTEL pacakge,
-currently, vectorization directives are disabled by default when
-not using Intel compilers due to lack of standard support and
-observations of decreased performance. The OpenMP standard now
-supports directives for vectorization and we plan to transition the
-code to this standard once it is available in most compilers. We
-expect this to allow improved performance and support with other
-compilers.
-
-For Intel Xeon Phi x200 series processors (code-named Knights
-Landing), there are multiple configuration options for the hardware.
-For best performance, we recommend that the MCDRAM is configured in
-"Flat" mode and with the cluster mode set to "Quadrant" or "SNC4".
-"Cache" mode can also be used, although the performance might be
-slightly lower.
-
-**Notes about Simultaneous Multithreading:**
-
-Modern CPUs often support Simultaneous Multithreading (SMT). On
-Intel processors, this is called Hyper-Threading (HT) technology.
-SMT is hardware support for running multiple threads efficiently on
-a single core. *Hardware threads* or *logical cores* are often used
-to refer to the number of threads that are supported in hardware.
-For example, the Intel Xeon E5-2697v4 processor is described
-as having 36 cores and 72 threads. This means that 36 MPI processes
-or OpenMP threads can run simultaneously on separate cores, but that
-up to 72 MPI processes or OpenMP threads can be running on the CPU
-without costly operating system context switches.
-
-Molecular dynamics simulations will often run faster when making use
-of SMT. If a thread becomes stalled, for example because it is
-waiting on data that has not yet arrived from memory, another thread
-can start running so that the CPU pipeline is still being used
-efficiently. Although benefits can be seen by launching a MPI task
-for every hardware thread, for multinode simulations, we recommend
-that OpenMP threads are used for SMT instead, either with the
-USER-INTEL package, `USER-OMP package <accelerate_omp.html">`_, or
-:doc:`KOKKOS package <accelerate_kokkos>`. In the example above, up
-to 36X speedups can be observed by using all 36 physical cores with
-LAMMPS. By using all 72 hardware threads, an additional 10-30%
-performance gain can be achieved.
-
-The BIOS on many platforms allows SMT to be disabled, however, we do
-not recommend this on modern processors as there is little to no
-benefit for any software package in most cases. The operating system
-will report every hardware thread as a separate core allowing one to
-determine the number of hardware threads available. On Linux systems,
-this information can normally be obtained with:
-
-.. parsed-literal::
-
- cat /proc/cpuinfo
-
-**Building LAMMPS with the USER-INTEL package:**
-
-The USER-INTEL package must be installed into the source directory:
-
-.. parsed-literal::
-
- make yes-user-intel
-
-Several example Makefiles for building with the Intel compiler are
-included with LAMMPS in the src/MAKE/OPTIONS/ directory:
-
-.. parsed-literal::
-
- Makefile.intel_cpu_intelmpi # Intel Compiler, Intel MPI, No Offload
- Makefile.knl # Intel Compiler, Intel MPI, No Offload
- Makefile.intel_cpu_mpich # Intel Compiler, MPICH, No Offload
- Makefile.intel_cpu_openpmi # Intel Compiler, OpenMPI, No Offload
- Makefile.intel_coprocessor # Intel Compiler, Intel MPI, Offload
-
-Makefile.knl is identical to Makefile.intel_cpu_intelmpi except that
-it explicitly specifies that vectorization should be for Intel
-Xeon Phi x200 processors making it easier to cross-compile. For
-users with recent installations of Intel Parallel Studio, the
-process can be as simple as:
-
-.. parsed-literal::
-
- make yes-user-intel
- source /opt/intel/parallel_studio_xe_2016.3.067/psxevars.sh
- # or psxevars.csh for C-shell
- make intel_cpu_intelmpi
-
-Alternatively, the build can be accomplished with the src/Make.py
-script, described in :ref:`Section 2.4 <start_4>` of the
-manual. Type "Make.py -h" for help. For an example:
-
-.. parsed-literal::
-
- Make.py -v -p intel omp -intel cpu -a file intel_cpu_intelmpi
-
-Note that if you build with support for a Phi coprocessor, the same
-binary can be used on nodes with or without coprocessors installed.
-However, if you do not have coprocessors on your system, building
-without offload support will produce a smaller binary.
-
-The general requirements for Makefiles with the USER-INTEL package
-are as follows. "-DLAMMPS_MEMALIGN=64" is required for CCFLAGS. When
-using Intel compilers, "-restrict" is required and "-qopenmp" is
-highly recommended for CCFLAGS and LINKFLAGS. LIB should include
-"-ltbbmalloc". For builds supporting offload, "-DLMP_INTEL_OFFLOAD"
-is required for CCFLAGS and "-qoffload" is required for LINKFLAGS.
-Other recommended CCFLAG options for best performance are
-"-O2 -fno-alias -ansi-alias -qoverride-limits fp-model fast=2
--no-prec-div". The Make.py command will add all of these
-automatically.
-
-.. note::
-
- The vectorization and math capabilities can differ depending on
- the CPU. For Intel compilers, the "-x" flag specifies the type of
- processor for which to optimize. "-xHost" specifies that the compiler
- should build for the processor used for compiling. For Intel Xeon Phi
- x200 series processors, this option is "-xMIC-AVX512". For fourth
- generation Intel Xeon (v4/Broadwell) processors, "-xCORE-AVX2" should
- be used. For older Intel Xeon processors, "-xAVX" will perform best
- in general for the different simulations in LAMMPS. The default
- in most of the example Makefiles is to use "-xHost", however this
- should not be used when cross-compiling.
-
-**Running LAMMPS with the USER-INTEL package:**
-
-Running LAMMPS with the USER-INTEL package is similar to normal use
-with the exceptions that one should 1) specify that LAMMPS should use
-the USER-INTEL package, 2) specify the number of OpenMP threads, and
-3) optionally specify the specific LAMMPS styles that should use the
-USER-INTEL package. 1) and 2) can be performed from the command-line
-or by editing the input script. 3) requires editing the input script.
-Advanced performance tuning options are also described below to get
-the best performance.
-
-When running on a single node (including runs using offload to a
-coprocessor), best performance is normally obtained by using 1 MPI
-task per physical core and additional OpenMP threads with SMT. For
-Intel Xeon processors, 2 OpenMP threads should be used for SMT.
-For Intel Xeon Phi CPUs, 2 or 4 OpenMP threads should be used
-(best choice depends on the simulation). In cases where the user
-specifies that LRT mode is used (described below), 1 or 3 OpenMP
-threads should be used. For multi-node runs, using 1 MPI task per
-physical core will often perform best, however, depending on the
-machine and scale, users might get better performance by decreasing
-the number of MPI tasks and using more OpenMP threads. For
-performance, the product of the number of MPI tasks and OpenMP
-threads should not exceed the number of available hardware threads in
-almost all cases.
-
-.. note::
-
- Setting core affinity is often used to pin MPI tasks and OpenMP
- threads to a core or group of cores so that memory access can be
- uniform. Unless disabled at build time, affinity for MPI tasks and
- OpenMP threads on the host (CPU) will be set by default on the host
- *when using offload to a coprocessor*\ . In this case, it is unnecessary
- to use other methods to control affinity (e.g. taskset, numactl,
- I_MPI_PIN_DOMAIN, etc.). This can be disabled with the *no_affinity*
- option to the :doc:`package intel <package>` command or by disabling the
- option at build time (by adding -DINTEL_OFFLOAD_NOAFFINITY to the
- CCFLAGS line of your Makefile). Disabling this option is not
- recommended, especially when running on a machine with Intel
- Hyper-Threading technology disabled.
-
-**Run with the USER-INTEL package from the command line:**
-
-To enable USER-INTEL optimizations for all available styles used in
-the input script, the "-sf intel"
-:ref:`command-line switch <start_7>` can be used without
-any requirement for editing the input script. This switch will
-automatically append "intel" to styles that support it. It also
-invokes a default command: :doc:`package intel 1 <package>`. This
-package command is used to set options for the USER-INTEL package.
-The default package command will specify that USER-INTEL calculations
-are performed in mixed precision, that the number of OpenMP threads
-is specified by the OMP_NUM_THREADS environment variable, and that
-if coprocessors are present and the binary was built with offload
-support, that 1 coprocessor per node will be used with automatic
-balancing of work between the CPU and the coprocessor.
-
-You can specify different options for the USER-INTEL package by using
-the "-pk intel Nphi" :ref:`command-line switch <start_7>`
-with keyword/value pairs as specified in the documentation. Here,
-Nphi = # of Xeon Phi coprocessors/node (ignored without offload
-support). Common options to the USER-INTEL package include *omp* to
-override any OMP_NUM_THREADS setting and specify the number of OpenMP
-threads, *mode* to set the floating-point precision mode, and
-*lrt* to enable Long-Range Thread mode as described below. See the
-:doc:`package intel <package>` command for details, including the
-default values used for all its options if not specified, and how to
-set the number of OpenMP threads via the OMP_NUM_THREADS environment
-variable if desired.
-
-Examples (see documentation for your MPI/Machine for differences in
-launching MPI applications):
-
-.. parsed-literal::
-
- mpirun -np 72 -ppn 36 lmp_machine -sf intel -in in.script # 2 nodes, 36 MPI tasks/node, $OMP_NUM_THREADS OpenMP Threads
- mpirun -np 72 -ppn 36 lmp_machine -sf intel -in in.script -pk intel 0 omp 2 mode double # Don't use any coprocessors that might be available, use 2 OpenMP threads for each task, use double precision
-
-**Or run with the USER-INTEL package by editing an input script:**
-
-As an alternative to adding command-line arguments, the input script
-can be edited to enable the USER-INTEL package. This requires adding
-the :doc:`package intel <package>` command to the top of the input
-script. For the second example above, this would be:
-
-.. parsed-literal::
-
- package intel 0 omp 2 mode double
-
-To enable the USER-INTEL package only for individual styles, you can
-add an "intel" suffix to the individual style, e.g.:
-
-.. parsed-literal::
-
- pair_style lj/cut/intel 2.5
-
-Alternatively, the :doc:`suffix intel <suffix>` command can be added to
-the input script to enable USER-INTEL styles for the commands that
-follow in the input script.
-
-**Tuning for Performance:**
-
-.. note::
-
- The USER-INTEL package will perform better with modifications
- to the input script when :doc:`PPPM <kspace_style>` is used:
- :doc:`kspace_modify diff ad <kspace_modify>` and :doc:`neigh_modify binsize 3 <neigh_modify>` should be added to the input script.
-
-Long-Range Thread (LRT) mode is an option to the :doc:`package intel <package>` command that can improve performance when using
-:doc:`PPPM <kspace_style>` for long-range electrostatics on processors
-with SMT. It generates an extra pthread for each MPI task. The thread
-is dedicated to performing some of the PPPM calculations and MPI
-communications. On Intel Xeon Phi x200 series CPUs, this will likely
-always improve performance, even on a single node. On Intel Xeon
-processors, using this mode might result in better performance when
-using multiple nodes, depending on the machine. To use this mode,
-specify that the number of OpenMP threads is one less than would
-normally be used for the run and add the "lrt yes" option to the "-pk"
-command-line suffix or "package intel" command. For example, if a run
-would normally perform best with "-pk intel 0 omp 4", instead use
-"-pk intel 0 omp 3 lrt yes". When using LRT, you should set the
-environment variable "KMP_AFFINITY=none". LRT mode is not supported
-when using offload.
-
-Not all styles are supported in the USER-INTEL package. You can mix
-the USER-INTEL package with styles from the :doc:`OPT <accelerate_opt>`
-package or the `USER-OMP package <accelerate_omp.html">`_. Of course,
-this requires that these packages were installed at build time. This
-can performed automatically by using "-sf hybrid intel opt" or
-"-sf hybrid intel omp" command-line options. Alternatively, the "opt"
-and "omp" suffixes can be appended manually in the input script. For
-the latter, the :doc:`package omp <package>` command must be in the
-input script or the "-pk omp Nt" :ref:`command-line switch <start_7>` must be used where Nt is the
-number of OpenMP threads. The number of OpenMP threads should not be
-set differently for the different packages. Note that the :doc:`suffix hybrid intel omp <suffix>` command can also be used within the
-input script to automatically append the "omp" suffix to styles when
-USER-INTEL styles are not available.
-
-When running on many nodes, performance might be better when using
-fewer OpenMP threads and more MPI tasks. This will depend on the
-simulation and the machine. Using the :doc:`verlet/split <run_style>`
-run style might also give better performance for simulations with
-:doc:`PPPM <kspace_style>` electrostatics. Note that this is an
-alternative to LRT mode and the two cannot be used together.
-
-Currently, when using Intel MPI with Intel Xeon Phi x200 series
-CPUs, better performance might be obtained by setting the
-environment variable "I_MPI_SHM_LMT=shm" for Linux kernels that do
-not yet have full support for AVX-512. Runs on Intel Xeon Phi x200
-series processors will always perform better using MCDRAM. Please
-consult your system documentation for the best approach to specify
-that MPI runs are performed in MCDRAM.
-
-**Tuning for Offload Performance:**
-
-The default settings for offload should give good performance.
-
-When using LAMMPS with offload to Intel coprocessors, best performance
-will typically be achieved with concurrent calculations performed on
-both the CPU and the coprocessor. This is achieved by offloading only
-a fraction of the neighbor and pair computations to the coprocessor or
-using :doc:`hybrid <pair_hybrid>` pair styles where only one style uses
-the "intel" suffix. For simulations with long-range electrostatics or
-bond, angle, dihedral, improper calculations, computation and data
-transfer to the coprocessor will run concurrently with computations
-and MPI communications for these calculations on the host CPU. This
-is illustrated in the figure below for the rhodopsin protein benchmark
-running on E5-2697v2 processors with a Intel Xeon Phi 7120p
-coprocessor. In this plot, the vertical access is time and routines
-running at the same time are running concurrently on both the host and
-the coprocessor.
-
-.. image:: JPG/offload_knc.png
- :align: center
-
-The fraction of the offloaded work is controlled by the *balance*
-keyword in the :doc:`package intel <package>` command. A balance of 0
-runs all calculations on the CPU. A balance of 1 runs all
-supported calculations on the coprocessor. A balance of 0.5 runs half
-of the calculations on the coprocessor. Setting the balance to -1
-(the default) will enable dynamic load balancing that continously
-adjusts the fraction of offloaded work throughout the simulation.
-Because data transfer cannot be timed, this option typically produces
-results within 5 to 10 percent of the optimal fixed balance.
-
-If running short benchmark runs with dynamic load balancing, adding a
-short warm-up run (10-20 steps) will allow the load-balancer to find a
-near-optimal setting that will carry over to additional runs.
-
-The default for the :doc:`package intel <package>` command is to have
-all the MPI tasks on a given compute node use a single Xeon Phi
-coprocessor. In general, running with a large number of MPI tasks on
-each node will perform best with offload. Each MPI task will
-automatically get affinity to a subset of the hardware threads
-available on the coprocessor. For example, if your card has 61 cores,
-with 60 cores available for offload and 4 hardware threads per core
-(240 total threads), running with 24 MPI tasks per node will cause
-each MPI task to use a subset of 10 threads on the coprocessor. Fine
-tuning of the number of threads to use per MPI task or the number of
-threads to use per core can be accomplished with keyword settings of
-the :doc:`package intel <package>` command.
-
-The USER-INTEL package has two modes for deciding which atoms will be
-handled by the coprocessor. This choice is controlled with the *ghost*
-keyword of the :doc:`package intel <package>` command. When set to 0,
-ghost atoms (atoms at the borders between MPI tasks) are not offloaded
-to the card. This allows for overlap of MPI communication of forces
-with computation on the coprocessor when the :doc:`newton <newton>`
-setting is "on". The default is dependent on the style being used,
-however, better performance may be achieved by setting this option
-explictly.
-
-When using offload with CPU Hyper-Threading disabled, it may help
-performance to use fewer MPI tasks and OpenMP threads than available
-cores. This is due to the fact that additional threads are generated
-internally to handle the asynchronous offload tasks.
-
-If pair computations are being offloaded to an Intel Xeon Phi
-coprocessor, a diagnostic line is printed to the screen (not to the
-log file), during the setup phase of a run, indicating that offload
-mode is being used and indicating the number of coprocessor threads
-per MPI task. Additionally, an offload timing summary is printed at
-the end of each run. When offloading, the frequency for :doc:`atom sorting <atom_modify>` is changed to 1 so that the per-atom data is
-effectively sorted at every rebuild of the neighbor lists. All the
-available coprocessor threads on each Phi will be divided among MPI
-tasks, unless the *tptask* option of the "-pk intel" :ref:`command-line switch <start_7>` is used to limit the coprocessor
-threads per MPI task.
-
-Restrictions
-""""""""""""
-
-
-When offloading to a coprocessor, :doc:`hybrid <pair_hybrid>` styles
-that require skip lists for neighbor builds cannot be offloaded.
-Using :doc:`hybrid/overlay <pair_hybrid>` is allowed. Only one intel
-accelerated style may be used with hybrid styles.
-:doc:`Special_bonds <special_bonds>` exclusion lists are not currently
-supported with offload, however, the same effect can often be
-accomplished by setting cutoffs for excluded atom types to 0. None of
-the pair styles in the USER-INTEL package currently support the
-"inner", "middle", "outer" options for rRESPA integration via the
-:doc:`run_style respa <run_style>` command; only the "pair" option is
-supported.
-
-**References:**
-
-* 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.
-* 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.
-* 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.
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/accelerate_kokkos.txt b/doc/html/_sources/accelerate_kokkos.txt
deleted file mode 100644
index f1c6986dd..000000000
--- a/doc/html/_sources/accelerate_kokkos.txt
+++ /dev/null
@@ -1,532 +0,0 @@
-:doc:`Return to Section accelerate overview <Section_accelerate>`
-
-5.KOKKOS package
-----------------
-
-The KOKKOS package was developed primarily by Christian Trott (Sandia)
-with contributions of various styles by others, including Sikandar
-Mashayak (UIUC), Stan Moore (Sandia), and Ray Shan (Sandia). The
-underlying Kokkos library was written primarily by Carter Edwards,
-Christian Trott, and Dan Sunderland (all Sandia).
-
-The KOKKOS package contains versions of pair, fix, and atom styles
-that use data structures and macros provided by the Kokkos library,
-which is included with LAMMPS in lib/kokkos.
-
-The Kokkos library is part of
-`Trilinos <http://trilinos.sandia.gov/packages/kokkos>`_ and can also be
-downloaded from `Github <https://github.com/kokkos/kokkos>`_. Kokkos is a
-templated C++ library that provides two key abstractions for an
-application like LAMMPS. First, it allows a single implementation of
-an application kernel (e.g. a pair style) to run efficiently on
-different kinds of hardware, such as a GPU, Intel Phi, or many-core
-CPU.
-
-The Kokkos library also provides data abstractions to adjust (at
-compile time) the memory layout of basic data structures like 2d and
-3d arrays and allow the transparent utilization of special hardware
-load and store operations. Such data structures are used in LAMMPS to
-store atom coordinates or forces or neighbor lists. The layout is
-chosen to optimize performance on different platforms. Again this
-functionality is hidden from the developer, and does not affect how
-the kernel is coded.
-
-These abstractions are set at build time, when LAMMPS is compiled with
-the KOKKOS package installed. All Kokkos operations occur within the
-context of an individual MPI task running on a single node of the
-machine. The total number of MPI tasks used by LAMMPS (one or
-multiple per compute node) is set in the usual manner via the mpirun
-or mpiexec commands, and is independent of Kokkos.
-
-Kokkos currently provides support for 3 modes of execution (per MPI
-task). These are OpenMP (for many-core CPUs), Cuda (for NVIDIA GPUs),
-and OpenMP (for Intel Phi). Note that the KOKKOS package supports
-running on the Phi in native mode, not offload mode like the
-USER-INTEL package supports. You choose the mode at build time to
-produce an executable compatible with specific hardware.
-
-Here is a quick overview of how to use the KOKKOS package
-for CPU acceleration, assuming one or more 16-core nodes.
-More details follow.
-
-.. parsed-literal::
-
- use a C++11 compatible compiler
- make yes-kokkos
- make mpi KOKKOS_DEVICES=OpenMP # build with the KOKKOS package
- make kokkos_omp # or Makefile.kokkos_omp already has variable set
- Make.py -v -p kokkos -kokkos omp -o mpi -a file mpi # or one-line build via Make.py
-
-.. parsed-literal::
-
- mpirun -np 16 lmp_mpi -k on -sf kk -in in.lj # 1 node, 16 MPI tasks/node, no threads
- mpirun -np 2 -ppn 1 lmp_mpi -k on t 16 -sf kk -in in.lj # 2 nodes, 1 MPI task/node, 16 threads/task
- mpirun -np 2 lmp_mpi -k on t 8 -sf kk -in in.lj # 1 node, 2 MPI tasks/node, 8 threads/task
- mpirun -np 32 -ppn 4 lmp_mpi -k on t 4 -sf kk -in in.lj # 8 nodes, 4 MPI tasks/node, 4 threads/task
-
-* specify variables and settings in your Makefile.machine that enable OpenMP, GPU, or Phi support
-* include the KOKKOS package and build LAMMPS
-* enable the KOKKOS package and its hardware options via the "-k on" command-line switch use KOKKOS styles in your input script
-
-Here is a quick overview of how to use the KOKKOS package for GPUs,
-assuming one or more nodes, each with 16 cores and a GPU. More
-details follow.
-
-discuss use of NVCC, which Makefiles to examine
-
-.. parsed-literal::
-
- use a C++11 compatible compiler
- KOKKOS_DEVICES = Cuda, OpenMP
- KOKKOS_ARCH = Kepler35
- make yes-kokkos
- make machine
- Make.py -p kokkos -kokkos cuda arch=31 -o kokkos_cuda -a file kokkos_cuda
-
-.. parsed-literal::
-
- mpirun -np 1 lmp_cuda -k on t 6 -sf kk -in in.lj # one MPI task, 6 threads on CPU
- mpirun -np 4 -ppn 1 lmp_cuda -k on t 6 -sf kk -in in.lj # ditto on 4 nodes
-
-.. parsed-literal::
-
- mpirun -np 2 lmp_cuda -k on t 8 g 2 -sf kk -in in.lj # two MPI tasks, 8 threads per CPU
- mpirun -np 32 -ppn 2 lmp_cuda -k on t 8 g 2 -sf kk -in in.lj # ditto on 16 nodes
-
-Here is a quick overview of how to use the KOKKOS package
-for the Intel Phi:
-
-.. parsed-literal::
-
- use a C++11 compatible compiler
- KOKKOS_DEVICES = OpenMP
- KOKKOS_ARCH = KNC
- make yes-kokkos
- make machine
- Make.py -p kokkos -kokkos phi -o kokkos_phi -a file mpi
-
-.. parsed-literal::
-
- host=MIC, Intel Phi with 61 cores (240 threads/phi via 4x hardware threading):
- mpirun -np 1 lmp_g++ -k on t 240 -sf kk -in in.lj # 1 MPI task on 1 Phi, 1*240 = 240
- mpirun -np 30 lmp_g++ -k on t 8 -sf kk -in in.lj # 30 MPI tasks on 1 Phi, 30*8 = 240
- mpirun -np 12 lmp_g++ -k on t 20 -sf kk -in in.lj # 12 MPI tasks on 1 Phi, 12*20 = 240
- mpirun -np 96 -ppn 12 lmp_g++ -k on t 20 -sf kk -in in.lj # ditto on 8 Phis
-
-**Required hardware/software:**
-
-Kokkos support within LAMMPS must be built with a C++11 compatible
-compiler. If using gcc, version 4.8.1 or later is required.
-
-To build with Kokkos support for CPUs, your compiler must support the
-OpenMP interface. You should have one or more multi-core CPUs so that
-multiple threads can be launched by each MPI task running on a CPU.
-
-To build with Kokkos support for NVIDIA GPUs, NVIDIA Cuda software
-version 6.5 or later must be installed on your system. See the
-discussion for the :doc:`GPU <accelerate_gpu>` package for details of
-how to check and do this.
-
-.. note::
-
- For good performance of the KOKKOS package on GPUs, you must
- have Kepler generation GPUs (or later). The Kokkos library exploits
- texture cache options not supported by Telsa generation GPUs (or
- older).
-
-To build with Kokkos support for Intel Xeon Phi coprocessors, your
-sysmte must be configured to use them in "native" mode, not "offload"
-mode like the USER-INTEL package supports.
-
-**Building LAMMPS with the KOKKOS package:**
-
-You must choose at build time whether to build for CPUs (OpenMP),
-GPUs, or Phi.
-
-You can do any of these in one line, using the src/Make.py script,
-described in :ref:`Section 2.4 <start_4>` of the manual.
-Type "Make.py -h" for help. If run from the src directory, these
-commands will create src/lmp_kokkos_omp, lmp_kokkos_cuda, and
-lmp_kokkos_phi. Note that the OMP and PHI options use
-src/MAKE/Makefile.mpi as the starting Makefile.machine. The CUDA
-option uses src/MAKE/OPTIONS/Makefile.kokkos_cuda.
-
-The latter two steps can be done using the "-k on", "-pk kokkos" and
-"-sf kk" :ref:`command-line switches <start_7>`
-respectively. Or the effect of the "-pk" or "-sf" switches can be
-duplicated by adding the :doc:`package kokkos <package>` or :doc:`suffix kk <suffix>` commands respectively to your input script.
-
-Or you can follow these steps:
-
-CPU-only (run all-MPI or with OpenMP threading):
-
-.. parsed-literal::
-
- cd lammps/src
- make yes-kokkos
- make g++ KOKKOS_DEVICES=OpenMP
-
-Intel Xeon Phi:
-
-.. parsed-literal::
-
- cd lammps/src
- make yes-kokkos
- make g++ KOKKOS_DEVICES=OpenMP KOKKOS_ARCH=KNC
-
-CPUs and GPUs:
-
-.. parsed-literal::
-
- cd lammps/src
- make yes-kokkos
- make cuda KOKKOS_DEVICES=Cuda
-
-These examples set the KOKKOS-specific OMP, MIC, CUDA variables on the
-make command line which requires a GNU-compatible make command. Try
-"gmake" if your system's standard make complains.
-
-.. note::
-
- If you build using make line variables and re-build LAMMPS twice
- with different KOKKOS options and the *same* target, e.g. g++ in the
- first two examples above, then you *must* perform a "make clean-all"
- or "make clean-machine" before each build. This is to force all the
- KOKKOS-dependent files to be re-compiled with the new options.
-
-You can also hardwire these make variables in the specified machine
-makefile, e.g. src/MAKE/Makefile.g++ in the first two examples above,
-with a line like:
-
-.. parsed-literal::
-
- KOKKOS_ARCH = KNC
-
-Note that if you build LAMMPS multiple times in this manner, using
-different KOKKOS options (defined in different machine makefiles), you
-do not have to worry about doing a "clean" in between. This is
-because the targets will be different.
-
-.. note::
-
- The 3rd example above for a GPU, uses a different machine
- makefile, in this case src/MAKE/Makefile.cuda, which is included in
- the LAMMPS distribution. To build the KOKKOS package for a GPU, this
- makefile must use the NVIDA "nvcc" compiler. And it must have a
- KOKKOS_ARCH setting that is appropriate for your NVIDIA hardware and
- installed software. Typical values for KOKKOS_ARCH are given below,
- as well as other settings that must be included in the machine
- makefile, if you create your own.
-
-.. note::
-
- Currently, there are no precision options with the KOKKOS
- package. All compilation and computation is performed in double
- precision.
-
-There are other allowed options when building with the KOKKOS package.
-As above, they can be set either as variables on the make command line
-or in Makefile.machine. This is the full list of options, including
-those discussed above, Each takes a value shown below. The
-default value is listed, which is set in the
-lib/kokkos/Makefile.kokkos file.
-
-#Default settings specific options
-#Options: force_uvm,use_ldg,rdc
-
-* KOKKOS_DEVICES, values = *OpenMP*\ , *Serial*\ , *Pthreads*\ , *Cuda*\ , default = *OpenMP*
-* KOKKOS_ARCH, values = *KNC*\ , *SNB*\ , *HSW*\ , *Kepler*\ , *Kepler30*\ , *Kepler32*\ , *Kepler35*\ , *Kepler37*\ , *Maxwell*\ , *Maxwell50*\ , *Maxwell52*\ , *Maxwell53*\ , *ARMv8*\ , *BGQ*\ , *Power7*\ , *Power8*\ , default = *none*
-* KOKKOS_DEBUG, values = *yes*\ , *no*\ , default = *no*
-* KOKKOS_USE_TPLS, values = *hwloc*\ , *librt*\ , default = *none*
-* KOKKOS_CUDA_OPTIONS, values = *force_uvm*\ , *use_ldg*\ , *rdc*
-
-KOKKOS_DEVICE sets the parallelization method used for Kokkos code
-(within LAMMPS). KOKKOS_DEVICES=OpenMP means that OpenMP will be
-used. KOKKOS_DEVICES=Pthreads means that pthreads will be used.
-KOKKOS_DEVICES=Cuda means an NVIDIA GPU running CUDA will be used.
-
-If KOKKOS_DEVICES=Cuda, then the lo-level Makefile in the src/MAKE
-directory must use "nvcc" as its compiler, via its CC setting. For
-best performance its CCFLAGS setting should use -O3 and have a
-KOKKOS_ARCH setting that matches the compute capability of your NVIDIA
-hardware and software installation, e.g. KOKKOS_ARCH=Kepler30. Note
-the minimal required compute capability is 2.0, but this will give
-signicantly reduced performance compared to Kepler generation GPUs
-with compute capability 3.x. For the LINK setting, "nvcc" should not
-be used; instead use g++ or another compiler suitable for linking C++
-applications. Often you will want to use your MPI compiler wrapper
-for this setting (i.e. mpicxx). Finally, the lo-level Makefile must
-also have a "Compilation rule" for creating *.o files from *.cu files.
-See src/Makefile.cuda for an example of a lo-level Makefile with all
-of these settings.
-
-KOKKOS_USE_TPLS=hwloc binds threads to hardware cores, so they do not
-migrate during a simulation. KOKKOS_USE_TPLS=hwloc should always be
-used if running with KOKKOS_DEVICES=Pthreads for pthreads. It is not
-necessary for KOKKOS_DEVICES=OpenMP for OpenMP, because OpenMP
-provides alternative methods via environment variables for binding
-threads to hardware cores. More info on binding threads to cores is
-given in :ref:`this section <acc_8>`.
-
-KOKKOS_ARCH=KNC enables compiler switches needed when compling for an
-Intel Phi processor.
-
-KOKKOS_USE_TPLS=librt enables use of a more accurate timer mechanism
-on most Unix platforms. This library is not available on all
-platforms.
-
-KOKKOS_DEBUG is only useful when developing a Kokkos-enabled style
-within LAMMPS. KOKKOS_DEBUG=yes enables printing of run-time
-debugging information that can be useful. It also enables runtime
-bounds checking on Kokkos data structures.
-
-KOKKOS_CUDA_OPTIONS are additional options for CUDA.
-
-For more information on Kokkos see the Kokkos programmers' guide here:
-/lib/kokkos/doc/Kokkos_PG.pdf.
-
-**Run with the KOKKOS package from the command line:**
-
-The mpirun or mpiexec command sets the total number of MPI tasks used
-by LAMMPS (one or multiple per compute node) and the number of MPI
-tasks used per node. E.g. the mpirun command in MPICH does this via
-its -np and -ppn switches. Ditto for OpenMPI via -np and -npernode.
-
-When using KOKKOS built with host=OMP, you need to choose how many
-OpenMP threads per MPI task will be used (via the "-k" command-line
-switch discussed below). Note that the product of MPI tasks * OpenMP
-threads/task should not exceed the physical number of cores (on a
-node), otherwise performance will suffer.
-
-When using the KOKKOS package built with device=CUDA, you must use
-exactly one MPI task per physical GPU.
-
-When using the KOKKOS package built with host=MIC for Intel Xeon Phi
-coprocessor support you need to insure there are one or more MPI tasks
-per coprocessor, and choose the number of coprocessor threads to use
-per MPI task (via the "-k" command-line switch discussed below). The
-product of MPI tasks * coprocessor threads/task should not exceed the
-maximum number of threads the coproprocessor is designed to run,
-otherwise performance will suffer. This value is 240 for current
-generation Xeon Phi(TM) chips, which is 60 physical cores * 4
-threads/core. Note that with the KOKKOS package you do not need to
-specify how many Phi coprocessors there are per node; each
-coprocessors is simply treated as running some number of MPI tasks.
-
-You must use the "-k on" :ref:`command-line switch <start_7>` to enable the KOKKOS package. It
-takes additional arguments for hardware settings appropriate to your
-system. Those arguments are :ref:`documented here <start_7>`. The two most commonly used
-options are:
-
-.. parsed-literal::
-
- -k on t Nt g Ng
-
-The "t Nt" option applies to host=OMP (even if device=CUDA) and
-host=MIC. For host=OMP, it specifies how many OpenMP threads per MPI
-task to use with a node. For host=MIC, it specifies how many Xeon Phi
-threads per MPI task to use within a node. The default is Nt = 1.
-Note that for host=OMP this is effectively MPI-only mode which may be
-fine. But for host=MIC you will typically end up using far less than
-all the 240 available threads, which could give very poor performance.
-
-The "g Ng" option applies to device=CUDA. It specifies how many GPUs
-per compute node to use. The default is 1, so this only needs to be
-specified is you have 2 or more GPUs per compute node.
-
-The "-k on" switch also issues a "package kokkos" command (with no
-additional arguments) which sets various KOKKOS options to default
-values, as discussed on the :doc:`package <package>` command doc page.
-
-Use the "-sf kk" :ref:`command-line switch <start_7>`,
-which will automatically append "kk" to styles that support it. Use
-the "-pk kokkos" :ref:`command-line switch <start_7>` if
-you wish to change any of the default :doc:`package kokkos <package>`
-optionns set by the "-k on" :ref:`command-line switch <start_7>`.
-
-Note that the default for the :doc:`package kokkos <package>` command is
-to use "full" neighbor lists and set the Newton flag to "off" for both
-pairwise and bonded interactions. This typically gives fastest
-performance. If the :doc:`newton <newton>` command is used in the input
-script, it can override the Newton flag defaults.
-
-However, when running in MPI-only mode with 1 thread per MPI task, it
-will typically be faster to use "half" neighbor lists and set the
-Newton flag to "on", just as is the case for non-accelerated pair
-styles. You can do this with the "-pk" :ref:`command-line switch <start_7>`.
-
-**Or run with the KOKKOS package by editing an input script:**
-
-The discussion above for the mpirun/mpiexec command and setting
-appropriate thread and GPU values for host=OMP or host=MIC or
-device=CUDA are the same.
-
-You must still use the "-k on" :ref:`command-line switch <start_7>` to enable the KOKKOS package, and
-specify its additional arguments for hardware options appopriate to
-your system, as documented above.
-
-Use the :doc:`suffix kk <suffix>` command, or you can explicitly add a
-"kk" suffix to individual styles in your input script, e.g.
-
-.. parsed-literal::
-
- pair_style lj/cut/kk 2.5
-
-You only need to use the :doc:`package kokkos <package>` command if you
-wish to change any of its option defaults, as set by the "-k on"
-:ref:`command-line switch <start_7>`.
-
-**Speed-ups to expect:**
-
-The performance of KOKKOS running in different modes is a function of
-your hardware, which KOKKOS-enable styles are used, and the problem
-size.
-
-Generally speaking, the following rules of thumb apply:
-
-* When running on CPUs only, with a single thread per MPI task,
- performance of a KOKKOS style is somewhere between the standard
- (un-accelerated) styles (MPI-only mode), and those provided by the
- USER-OMP package. However the difference between all 3 is small (less
- than 20%).
-* When running on CPUs only, with multiple threads per MPI task,
- performance of a KOKKOS style is a bit slower than the USER-OMP
- package.
-* When running large number of atoms per GPU, KOKKOS is typically faster
- than the GPU package.
-* When running on Intel Xeon Phi, KOKKOS is not as fast as
- the USER-INTEL package, which is optimized for that hardware.
-See the `Benchmark page <http://lammps.sandia.gov/bench.html>`_ of the
-LAMMPS web site for performance of the KOKKOS package on different
-hardware.
-
-**Guidelines for best performance:**
-
-Here are guidline for using the KOKKOS package on the different
-hardware configurations listed above.
-
-Many of the guidelines use the :doc:`package kokkos <package>` command
-See its doc page for details and default settings. Experimenting with
-its options can provide a speed-up for specific calculations.
-
-**Running on a multi-core CPU:**
-
-If N is the number of physical cores/node, then the number of MPI
-tasks/node * number of threads/task should not exceed N, and should
-typically equal N. Note that the default threads/task is 1, as set by
-the "t" keyword of the "-k" :ref:`command-line switch <start_7>`. If you do not change this, no
-additional parallelism (beyond MPI) will be invoked on the host
-CPU(s).
-
-You can compare the performance running in different modes:
-
-* run with 1 MPI task/node and N threads/task
-* run with N MPI tasks/node and 1 thread/task
-* run with settings in between these extremes
-
-Examples of mpirun commands in these modes are shown above.
-
-When using KOKKOS to perform multi-threading, it is important for
-performance to bind both MPI tasks to physical cores, and threads to
-physical cores, so they do not migrate during a simulation.
-
-If you are not certain MPI tasks are being bound (check the defaults
-for your MPI installation), binding can be forced with these flags:
-
-.. parsed-literal::
-
- OpenMPI 1.8: mpirun -np 2 -bind-to socket -map-by socket ./lmp_openmpi ...
- Mvapich2 2.0: mpiexec -np 2 -bind-to socket -map-by socket ./lmp_mvapich ...
-
-For binding threads with the KOKKOS OMP option, use thread affinity
-environment variables to force binding. With OpenMP 3.1 (gcc 4.7 or
-later, intel 12 or later) setting the environment variable
-OMP_PROC_BIND=true should be sufficient. For binding threads with the
-KOKKOS pthreads option, compile LAMMPS the KOKKOS HWLOC=yes option, as
-discussed in :ref:`Section 2.3.4 <start_3_4>` of the
-manual.
-
-**Running on GPUs:**
-
-Insure the -arch setting in the machine makefile you are using,
-e.g. src/MAKE/Makefile.cuda, is correct for your GPU hardware/software
-(see :ref:`this section <start_3_4>` of the manual for
-details).
-
-The -np setting of the mpirun command should set the number of MPI
-tasks/node to be equal to the # of physical GPUs on the node.
-
-Use the "-k" :ref:`command-line switch <start_7>` to
-specify the number of GPUs per node, and the number of threads per MPI
-task. As above for multi-core CPUs (and no GPU), if N is the number
-of physical cores/node, then the number of MPI tasks/node * number of
-threads/task should not exceed N. With one GPU (and one MPI task) it
-may be faster to use less than all the available cores, by setting
-threads/task to a smaller value. This is because using all the cores
-on a dual-socket node will incur extra cost to copy memory from the
-2nd socket to the GPU.
-
-Examples of mpirun commands that follow these rules are shown above.
-
-.. note::
-
- When using a GPU, you will achieve the best performance if your
- input script does not use any fix or compute styles which are not yet
- Kokkos-enabled. This allows data to stay on the GPU for multiple
- timesteps, without being copied back to the host CPU. Invoking a
- non-Kokkos fix or compute, or performing I/O for
- :doc:`thermo <thermo_style>` or :doc:`dump <dump>` output will cause data
- to be copied back to the CPU.
-
-You cannot yet assign multiple MPI tasks to the same GPU with the
-KOKKOS package. We plan to support this in the future, similar to the
-GPU package in LAMMPS.
-
-You cannot yet use both the host (multi-threaded) and device (GPU)
-together to compute pairwise interactions with the KOKKOS package. We
-hope to support this in the future, similar to the GPU package in
-LAMMPS.
-
-**Running on an Intel Phi:**
-
-Kokkos only uses Intel Phi processors in their "native" mode, i.e.
-not hosted by a CPU.
-
-As illustrated above, build LAMMPS with OMP=yes (the default) and
-MIC=yes. The latter insures code is correctly compiled for the Intel
-Phi. The OMP setting means OpenMP will be used for parallelization on
-the Phi, which is currently the best option within Kokkos. In the
-future, other options may be added.
-
-Current-generation Intel Phi chips have either 61 or 57 cores. One
-core should be excluded for running the OS, leaving 60 or 56 cores.
-Each core is hyperthreaded, so there are effectively N = 240 (4*60) or
-N = 224 (4*56) cores to run on.
-
-The -np setting of the mpirun command sets the number of MPI
-tasks/node. The "-k on t Nt" command-line switch sets the number of
-threads/task as Nt. The product of these 2 values should be N, i.e.
-240 or 224. Also, the number of threads/task should be a multiple of
-4 so that logical threads from more than one MPI task do not run on
-the same physical core.
-
-Examples of mpirun commands that follow these rules are shown above.
-
-Restrictions
-""""""""""""
-
-
-As noted above, if using GPUs, the number of MPI tasks per compute
-node should equal to the number of GPUs per compute node. In the
-future Kokkos will support assigning multiple MPI tasks to a single
-GPU.
-
-Currently Kokkos does not support AMD GPUs due to limits in the
-available backend programming models. Specifically, Kokkos requires
-extensive C++ support from the Kernel language. This is expected to
-change in the future.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/accelerate_omp.txt b/doc/html/_sources/accelerate_omp.txt
deleted file mode 100644
index 252b10b02..000000000
--- a/doc/html/_sources/accelerate_omp.txt
+++ /dev/null
@@ -1,178 +0,0 @@
-:doc:`Return to Section accelerate overview <Section_accelerate>`
-
-5.USER-OMP package
-------------------
-
-The USER-OMP package was developed by Axel Kohlmeyer at Temple
-University. It provides multi-threaded versions of most pair styles,
-nearly all bonded styles (bond, angle, dihedral, improper), several
-Kspace styles, and a few fix styles. The package currently uses the
-OpenMP interface for multi-threading.
-
-Here is a quick overview of how to use the USER-OMP package, assuming
-one or more 16-core nodes. More details follow.
-
-.. parsed-literal::
-
- use -fopenmp with CCFLAGS and LINKFLAGS in Makefile.machine
- make yes-user-omp
- make mpi # build with USER-OMP package, if settings added to Makefile.mpi
- make omp # or Makefile.omp already has settings
- Make.py -v -p omp -o mpi -a file mpi # or one-line build via Make.py
-
-.. parsed-literal::
-
- lmp_mpi -sf omp -pk omp 16 < in.script # 1 MPI task, 16 threads
- mpirun -np 4 lmp_mpi -sf omp -pk omp 4 -in in.script # 4 MPI tasks, 4 threads/task
- mpirun -np 32 -ppn 4 lmp_mpi -sf omp -pk omp 4 -in in.script # 8 nodes, 4 MPI tasks/node, 4 threads/task
-
-**Required hardware/software:**
-
-Your compiler must support the OpenMP interface. You should have one
-or more multi-core CPUs so that multiple threads can be launched by
-each MPI task running on a CPU.
-
-**Building LAMMPS with the USER-OMP package:**
-
-The lines above illustrate how to include/build with the USER-OMP
-package in two steps, using the "make" command. Or how to do it with
-one command via the src/Make.py script, described in :ref:`Section 2.4 <start_4>` of the manual. Type "Make.py -h" for
-help.
-
-Note that the CCFLAGS and LINKFLAGS settings in Makefile.machine must
-include "-fopenmp". Likewise, if you use an Intel compiler, the
-CCFLAGS setting must include "-restrict". The Make.py command will
-add these automatically.
-
-**Run with the USER-OMP package from the command line:**
-
-The mpirun or mpiexec command sets the total number of MPI tasks used
-by LAMMPS (one or multiple per compute node) and the number of MPI
-tasks used per node. E.g. the mpirun command in MPICH does this via
-its -np and -ppn switches. Ditto for OpenMPI via -np and -npernode.
-
-You need to choose how many OpenMP threads per MPI task will be used
-by the USER-OMP package. Note that the product of MPI tasks *
-threads/task should not exceed the physical number of cores (on a
-node), otherwise performance will suffer.
-
-As in the lines above, use the "-sf omp" :ref:`command-line switch <start_7>`, which will automatically append
-"omp" to styles that support it. The "-sf omp" switch also issues a
-default :doc:`package omp 0 <package>` command, which will set the
-number of threads per MPI task via the OMP_NUM_THREADS environment
-variable.
-
-You can also use the "-pk omp Nt" :ref:`command-line switch <start_7>`, to explicitly set Nt = # of OpenMP
-threads per MPI task to use, as well as additional options. Its
-syntax is the same as the :doc:`package omp <package>` command whose doc
-page gives details, including the default values used if it is not
-specified. It also gives more details on how to set the number of
-threads via the OMP_NUM_THREADS environment variable.
-
-**Or run with the USER-OMP package by editing an input script:**
-
-The discussion above for the mpirun/mpiexec command, MPI tasks/node,
-and threads/MPI task is the same.
-
-Use the :doc:`suffix omp <suffix>` command, or you can explicitly add an
-"omp" suffix to individual styles in your input script, e.g.
-
-.. parsed-literal::
-
- pair_style lj/cut/omp 2.5
-
-You must also use the :doc:`package omp <package>` command to enable the
-USER-OMP package. When you do this you also specify how many threads
-per MPI task to use. The command doc page explains other options and
-how to set the number of threads via the OMP_NUM_THREADS environment
-variable.
-
-**Speed-ups to expect:**
-
-Depending on which styles are accelerated, you should look for a
-reduction in the "Pair time", "Bond time", "KSpace time", and "Loop
-time" values printed at the end of a run.
-
-You may see a small performance advantage (5 to 20%) when running a
-USER-OMP style (in serial or parallel) with a single thread per MPI
-task, versus running standard LAMMPS with its standard un-accelerated
-styles (in serial or all-MPI parallelization with 1 task/core). This
-is because many of the USER-OMP styles contain similar optimizations
-to those used in the OPT package, described in :doc:`Section accelerate 5.3.6 <accelerate_opt>`.
-
-With multiple threads/task, the optimal choice of number of MPI
-tasks/node and OpenMP threads/task can vary a lot and should always be
-tested via benchmark runs for a specific simulation running on a
-specific machine, paying attention to guidelines discussed in the next
-sub-section.
-
-A description of the multi-threading strategy used in the USER-OMP
-package and some performance examples are `presented here <http://sites.google.com/site/akohlmey/software/lammps-icms/lammps-icms-tms2011-talk.pdf?attredirects=0&d=1>`_
-
-**Guidelines for best performance:**
-
-For many problems on current generation CPUs, running the USER-OMP
-package with a single thread/task is faster than running with multiple
-threads/task. This is because the MPI parallelization in LAMMPS is
-often more efficient than multi-threading as implemented in the
-USER-OMP package. The parallel efficiency (in a threaded sense) also
-varies for different USER-OMP styles.
-
-Using multiple threads/task can be more effective under the following
-circumstances:
-
-* Individual compute nodes have a significant number of CPU cores but
- the CPU itself has limited memory bandwidth, e.g. for Intel Xeon 53xx
- (Clovertown) and 54xx (Harpertown) quad-core processors. Running one
- MPI task per CPU core will result in significant performance
- degradation, so that running with 4 or even only 2 MPI tasks per node
- is faster. Running in hybrid MPI+OpenMP mode will reduce the
- inter-node communication bandwidth contention in the same way, but
- offers an additional speedup by utilizing the otherwise idle CPU
- cores.
-* The interconnect used for MPI communication does not provide
- sufficient bandwidth for a large number of MPI tasks per node. For
- example, this applies to running over gigabit ethernet or on Cray XT4
- or XT5 series supercomputers. As in the aforementioned case, this
- effect worsens when using an increasing number of nodes.
-* The system has a spatially inhomogeneous particle density which does
- not map well to the :doc:`domain decomposition scheme <processors>` or
- :doc:`load-balancing <balance>` options that LAMMPS provides. This is
- because multi-threading achives parallelism over the number of
- particles, not via their distribution in space.
-* A machine is being used in "capability mode", i.e. near the point
- where MPI parallelism is maxed out. For example, this can happen when
- using the :doc:`PPPM solver <kspace_style>` for long-range
- electrostatics on large numbers of nodes. The scaling of the KSpace
- calculation (see the :doc:`kspace_style <kspace_style>` command) becomes
- the performance-limiting factor. Using multi-threading allows less
- MPI tasks to be invoked and can speed-up the long-range solver, while
- increasing overall performance by parallelizing the pairwise and
- bonded calculations via OpenMP. Likewise additional speedup can be
- sometimes be achived by increasing the length of the Coulombic cutoff
- and thus reducing the work done by the long-range solver. Using the
- :doc:`run_style verlet/split <run_style>` command, which is compatible
- with the USER-OMP package, is an alternative way to reduce the number
- of MPI tasks assigned to the KSpace calculation.
-Additional performance tips are as follows:
-
-* The best parallel efficiency from *omp* styles is typically achieved
- when there is at least one MPI task per physical CPU chip, i.e. socket
- or die.
-* It is usually most efficient to restrict threading to a single
- socket, i.e. use one or more MPI task per socket.
-* NOTE: By default, several current MPI implementations use a processor
- affinity setting that restricts each MPI task to a single CPU core.
- Using multi-threading in this mode will force all threads to share the
- one core and thus is likely to be counterproductive. Instead, binding
- MPI tasks to a (multi-core) socket, should solve this issue.
-Restrictions
-""""""""""""
-
-
-None.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/accelerate_opt.txt b/doc/html/_sources/accelerate_opt.txt
deleted file mode 100644
index 8aebe5939..000000000
--- a/doc/html/_sources/accelerate_opt.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-:doc:`Return to Section accelerate overview <Section_accelerate>`
-
-5.OPT package
--------------
-
-The OPT package was developed by James Fischer (High Performance
-Technologies), David Richie, and Vincent Natoli (Stone Ridge
-Technologies). It contains a handful of pair styles whose compute()
-methods were rewritten in C++ templated form to reduce the overhead
-due to if tests and other conditional code.
-
-Here is a quick overview of how to use the OPT package. More details
-follow.
-
-.. parsed-literal::
-
- make yes-opt
- make mpi # build with the OPT package
- Make.py -v -p opt -o mpi -a file mpi # or one-line build via Make.py
-
-.. parsed-literal::
-
- lmp_mpi -sf opt -in in.script # run in serial
- mpirun -np 4 lmp_mpi -sf opt -in in.script # run in parallel
-
-**Required hardware/software:**
-
-None.
-
-**Building LAMMPS with the OPT package:**
-
-The lines above illustrate how to build LAMMPS with the OPT package in
-two steps, using the "make" command. Or how to do it with one command
-via the src/Make.py script, described in :ref:`Section 2.4 <start_4>` of the manual. Type "Make.py -h" for
-help.
-
-Note that if you use an Intel compiler to build with the OPT package,
-the CCFLAGS setting in your Makefile.machine must include "-restrict".
-The Make.py command will add this automatically.
-
-**Run with the OPT package from the command line:**
-
-As in the lines above, use the "-sf opt" :ref:`command-line switch <start_7>`, which will automatically append
-"opt" to styles that support it.
-
-**Or run with the OPT package by editing an input script:**
-
-Use the :doc:`suffix opt <suffix>` command, or you can explicitly add an
-"opt" suffix to individual styles in your input script, e.g.
-
-.. parsed-literal::
-
- pair_style lj/cut/opt 2.5
-
-**Speed-ups to expect:**
-
-You should see a reduction in the "Pair time" value printed at the end
-of a run. On most machines for reasonable problem sizes, it will be a
-5 to 20% savings.
-
-**Guidelines for best performance:**
-
-Just try out an OPT pair style to see how it performs.
-
-Restrictions
-""""""""""""
-
-
-None.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_charmm.txt b/doc/html/_sources/angle_charmm.txt
deleted file mode 100644
index d68434e1c..000000000
--- a/doc/html/_sources/angle_charmm.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-.. index:: angle_style charmm
-
-angle_style charmm command
-==========================
-
-angle_style charmm/intel command
-================================
-
-angle_style charmm/kk command
-=============================
-
-angle_style charmm/omp command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style charmm
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style charmm
- angle_coeff 1 300.0 107.0 50.0 3.0
-
-Description
-"""""""""""
-
-The *charmm* angle style uses the potential
-
-.. image:: Eqs/angle_charmm.jpg
- :align: center
-
-with an additional Urey_Bradley term based on the distance *r* between
-the 1st and 3rd atoms in the angle. K, theta0, Kub, and Rub are
-coefficients defined for each angle type.
-
-See :ref:`(MacKerell) <angle-MacKerell>` for a description of the CHARMM force
-field.
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy/radian^2)
-* theta0 (degrees)
-* K_ub (energy/distance^2)
-* r_ub (distance)
-
-Theta0 is specified in degrees, but LAMMPS converts it to radians
-internally; hence the units of K are in energy/radian^2.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _angle-MacKerell:
-
-
-
-**(MacKerell)** MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field,
-Fischer, Gao, Guo, Ha, et al, J Phys Chem, 102, 3586 (1998).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_class2.txt b/doc/html/_sources/angle_class2.txt
deleted file mode 100644
index ec75f76ba..000000000
--- a/doc/html/_sources/angle_class2.txt
+++ /dev/null
@@ -1,139 +0,0 @@
-.. index:: angle_style class2
-
-angle_style class2 command
-==========================
-
-angle_style class2/omp command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style class2
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style class2
- angle_coeff * 75.0
- angle_coeff 1 bb 10.5872 1.0119 1.5228
- angle_coeff * ba 3.6551 24.895 1.0119 1.5228
-
-Description
-"""""""""""
-
-The *class2* angle style uses the potential
-
-.. image:: Eqs/angle_class2.jpg
- :align: center
-
-where Ea is the angle term, Ebb is a bond-bond term, and Eba is a
-bond-angle term. Theta0 is the equilibrium angle and r1 and r2 are
-the equilibrium bond lengths.
-
-See :ref:`(Sun) <angle-Sun>` for a description of the COMPASS class2 force field.
-
-Coefficients for the Ea, Ebb, and Eba formulas must be defined for
-each angle type via the :doc:`angle_coeff <angle_coeff>` command as in
-the example above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands.
-
-These are the 4 coefficients for the Ea formula:
-
-* theta0 (degrees)
-* K2 (energy/radian^2)
-* K3 (energy/radian^3)
-* K4 (energy/radian^4)
-
-Theta0 is specified in degrees, but LAMMPS converts it to radians
-internally; hence the units of the various K are in per-radian.
-
-For the Ebb formula, each line in a :doc:`angle_coeff <angle_coeff>`
-command in the input script lists 4 coefficients, the first of which
-is "bb" to indicate they are BondBond coefficients. In a data file,
-these coefficients should be listed under a "BondBond Coeffs" heading
-and you must leave out the "bb", i.e. only list 3 coefficients after
-the angle type.
-
-* bb
-* M (energy/distance^2)
-* r1 (distance)
-* r2 (distance)
-
-For the Eba formula, each line in a :doc:`angle_coeff <angle_coeff>`
-command in the input script lists 5 coefficients, the first of which
-is "ba" to indicate they are BondAngle coefficients. In a data file,
-these coefficients should be listed under a "BondAngle Coeffs" heading
-and you must leave out the "ba", i.e. only list 4 coefficients after
-the angle type.
-
-* ba
-* N1 (energy/distance^2)
-* N2 (energy/distance^2)
-* r1 (distance)
-* r2 (distance)
-
-The theta0 value in the Eba formula is not specified, since it is the
-same value from the Ea formula.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the CLASS2
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _angle-Sun:
-
-
-
-**(Sun)** Sun, J Phys Chem B 102, 7338-7364 (1998).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_coeff.txt b/doc/html/_sources/angle_coeff.txt
deleted file mode 100644
index 8a619c14e..000000000
--- a/doc/html/_sources/angle_coeff.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-.. index:: angle_coeff
-
-angle_coeff command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_coeff N args
-
-* N = angle type (see asterisk form below)
-* args = coefficients for one or more angle types
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_coeff 1 300.0 107.0
- angle_coeff * 5.0
- angle_coeff 2*10 5.0
-
-Description
-"""""""""""
-
-Specify the angle force field coefficients for one or more angle types.
-The number and meaning of the coefficients depends on the angle style.
-Angle coefficients can also be set in the data file read by the
-:doc:`read_data <read_data>` command or in a restart file.
-
-N can be specified in one of two ways. An explicit numeric value can
-be used, as in the 1st example above. Or a wild-card asterisk can be
-used to set the coefficients for multiple angle types. This takes the
-form "*" or "*n" or "n*" or "m*n". If N = the number of angle types,
-then an asterisk with no numeric values means all types from 1 to N. A
-leading asterisk means all types from 1 to n (inclusive). A trailing
-asterisk means all types from n to N (inclusive). A middle asterisk
-means all types from m to n (inclusive).
-
-Note that using an angle_coeff command can override a previous setting
-for the same angle type. For example, these commands set the coeffs
-for all angle types, then overwrite the coeffs for just angle type 2:
-
-.. parsed-literal::
-
- angle_coeff * 200.0 107.0 1.2
- angle_coeff 2 50.0 107.0
-
-A line in a data file that specifies angle coefficients uses the exact
-same format as the arguments of the angle_coeff command in an input
-script, except that wild-card asterisks should not be used since
-coefficients for all N types must be listed in the file. For example,
-under the "Angle Coeffs" section of a data file, the line that
-corresponds to the 1st example above would be listed as
-
-.. parsed-literal::
-
- 1 300.0 107.0
-
-The :doc:`angle_style class2 <angle_class2>` is an exception to this
-rule, in that an additional argument is used in the input script to
-allow specification of the cross-term coefficients. See its
-doc page for details.
-
-
-----------
-
-
-Here is an alphabetic list of angle styles defined in LAMMPS. Click on
-the style to display the formula it computes and coefficients
-specified by the associated :doc:`angle_coeff <angle_coeff>` command.
-
-Note that there are also additional angle styles submitted by users
-which are included in the LAMMPS distribution. The list of these with
-links to the individual styles are given in the angle section of :ref:`this page <cmd_5>`.
-
-* :doc:`angle_style none <angle_none>` - turn off angle interactions
-* :doc:`angle_style hybrid <angle_hybrid>` - define multiple styles of angle interactions
-
-* :doc:`angle_style charmm <angle_charmm>` - CHARMM angle
-* :doc:`angle_style class2 <angle_class2>` - COMPASS (class 2) angle
-* :doc:`angle_style cosine <angle_cosine>` - cosine angle potential
-* :doc:`angle_style cosine/delta <angle_cosine_delta>` - difference of cosines angle potential
-* :doc:`angle_style cosine/periodic <angle_cosine_periodic>` - DREIDING angle
-* :doc:`angle_style cosine/squared <angle_cosine_squared>` - cosine squared angle potential
-* :doc:`angle_style harmonic <angle_harmonic>` - harmonic angle
-* :doc:`angle_style table <angle_table>` - tabulated by angle
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command must come after the simulation box is defined by a
-:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`, or
-:doc:`create_box <create_box>` command.
-
-An angle style must be defined before any angle coefficients are
-set, either in the input script or in a data file.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_style <angle_style>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_cosine.txt b/doc/html/_sources/angle_cosine.txt
deleted file mode 100644
index 90e3ce669..000000000
--- a/doc/html/_sources/angle_cosine.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-.. index:: angle_style cosine
-
-angle_style cosine command
-==========================
-
-angle_style cosine/omp command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style cosine
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style cosine
- angle_coeff * 75.0
-
-Description
-"""""""""""
-
-The *cosine* angle style uses the potential
-
-.. image:: Eqs/angle_cosine.jpg
- :align: center
-
-where K is defined for each angle type.
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_cosine_delta.txt b/doc/html/_sources/angle_cosine_delta.txt
deleted file mode 100644
index aac7e750f..000000000
--- a/doc/html/_sources/angle_cosine_delta.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-.. index:: angle_style cosine/delta
-
-angle_style cosine/delta command
-================================
-
-angle_style cosine/delta/omp command
-====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style cosine/delta
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style cosine/delta
- angle_coeff 2*4 75.0 100.0
-
-Description
-"""""""""""
-
-The *cosine/delta* angle style uses the potential
-
-.. image:: Eqs/angle_cosine_delta.jpg
- :align: center
-
-where theta0 is the equilibrium value of the angle, and K is a
-prefactor. Note that the usual 1/2 factor is included in K.
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy)
-* theta0 (degrees)
-
-Theta0 is specified in degrees, but LAMMPS converts it to radians
-internally.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`, :doc:`angle_style cosine/squared <angle_cosine_squared>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_cosine_periodic.txt b/doc/html/_sources/angle_cosine_periodic.txt
deleted file mode 100644
index 8451c88db..000000000
--- a/doc/html/_sources/angle_cosine_periodic.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-.. index:: angle_style cosine/periodic
-
-angle_style cosine/periodic command
-===================================
-
-angle_style cosine/periodic/omp command
-=======================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style cosine/periodic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style cosine/periodic
- angle_coeff * 75.0 1 6
-
-Description
-"""""""""""
-
-The *cosine/periodic* angle style uses the following potential, which
-is commonly used in the :ref:`DREIDING <howto_4>` force
-field, particularly for organometallic systems where *n* = 4 might be
-used for an octahedral complex and *n* = 3 might be used for a
-trigonal center:
-
-.. image:: Eqs/angle_cosine_periodic.jpg
- :align: center
-
-where C, B and n are coefficients defined for each angle type.
-
-See :ref:`(Mayo) <cosine-Mayo>` for a description of the DREIDING force field
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* C (energy)
-* B = 1 or -1
-* n = 1, 2, 3, 4, 5 or 6 for periodicity
-
-Note that the prefactor C is specified and not the overall force
-constant K = C / n^2. When B = 1, it leads to a minimum for the
-linear geometry. When B = -1, it leads to a maximum for the linear
-geometry.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _cosine-Mayo:
-
-
-
-**(Mayo)** Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909
-(1990).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_cosine_shift.txt b/doc/html/_sources/angle_cosine_shift.txt
deleted file mode 100644
index 0fe6521e9..000000000
--- a/doc/html/_sources/angle_cosine_shift.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-.. index:: angle_style cosine/shift
-
-angle_style cosine/shift command
-================================
-
-angle_style cosine/shift/omp command
-====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style cosine/shift
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style cosine/shift
- angle_coeff * 10.0 45.0
-
-Description
-"""""""""""
-
-The *cosine/shift* angle style uses the potential
-
-.. image:: Eqs/angle_cosine_shift.jpg
- :align: center
-
-where theta0 is the equilibrium angle. The potential is bounded
-between -Umin and zero. In the neighborhood of the minimum E=- Umin +
-Umin/4(theta-theta0)^2 hence the spring constant is umin/2.
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* umin (energy)
-* theta (angle)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`,
-:doc:`angle_cosine_shift_exp <angle_cosine_shift_exp>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_cosine_shift_exp.txt b/doc/html/_sources/angle_cosine_shift_exp.txt
deleted file mode 100644
index ee1152981..000000000
--- a/doc/html/_sources/angle_cosine_shift_exp.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-.. index:: angle_style cosine/shift/exp
-
-angle_style cosine/shift/exp command
-====================================
-
-angle_style cosine/shift/exp/omp command
-========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style cosine/shift/exp
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style cosine/shift/exp
- angle_coeff * 10.0 45.0 2.0
-
-Description
-"""""""""""
-
-The *cosine/shift/exp* angle style uses the potential
-
-.. image:: Eqs/angle_cosine_shift_exp.jpg
- :align: center
-
-where Umin, theta, and a are defined for each angle type.
-
-The potential is bounded between [-Umin:0] and the minimum is
-located at the angle theta0. The a parameter can be both positive or
-negative and is used to control the spring constant at the
-equilibrium.
-
-The spring constant is given by k = A exp(A) Umin / [2 (Exp(a)-1)].
-For a > 3, k/Umin = a/2 to better than 5% relative error. For negative
-values of the a parameter, the spring constant is essentially zero,
-and anharmonic terms takes over. The potential is furthermore well
-behaved in the limit a -> 0, where it has been implemented to linear
-order in a for a < 0.001. In this limit the potential reduces to the
-cosineshifted potential.
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* umin (energy)
-* theta (angle)
-* A (real number)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`,
-:doc:`angle_cosine_shift <angle_cosine_shift>`,
-:doc:`dihedral_cosine_shift_exp <dihedral_cosine_shift_exp>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_cosine_squared.txt b/doc/html/_sources/angle_cosine_squared.txt
deleted file mode 100644
index 593093f4e..000000000
--- a/doc/html/_sources/angle_cosine_squared.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-.. index:: angle_style cosine/squared
-
-angle_style cosine/squared command
-==================================
-
-angle_style cosine/squared/omp command
-======================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style cosine/squared
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style cosine/squared
- angle_coeff 2*4 75.0 100.0
-
-Description
-"""""""""""
-
-The *cosine/squared* angle style uses the potential
-
-.. image:: Eqs/angle_cosine_squared.jpg
- :align: center
-
-where theta0 is the equilibrium value of the angle, and K is a
-prefactor. Note that the usual 1/2 factor is included in K.
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy)
-* theta0 (degrees)
-
-Theta0 is specified in degrees, but LAMMPS converts it to radians
-internally.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_dipole.txt b/doc/html/_sources/angle_dipole.txt
deleted file mode 100644
index c7a189efe..000000000
--- a/doc/html/_sources/angle_dipole.txt
+++ /dev/null
@@ -1,152 +0,0 @@
-.. index:: angle_style dipole
-
-angle_style dipole command
-==========================
-
-angle_style dipole/omp command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style dipole
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style dipole
- angle_coeff 6 2.1 180.0
-
-Description
-"""""""""""
-
-The *dipole* angle style is used to control the orientation of a dipolar
-atom within a molecule :ref:`(Orsi) <Orsi>`. Specifically, the *dipole* angle
-style restrains the orientation of a point dipole mu_j (embedded in atom
-'j') with respect to a reference (bond) vector r_ij = r_i - r_j, where 'i'
-is another atom of the same molecule (typically, 'i' and 'j' are also
-covalently bonded).
-
-It is convenient to define an angle gamma between the 'free' vector mu_j
-and the reference (bond) vector r_ij:
-
-.. image:: Eqs/angle_dipole_gamma.jpg
- :align: center
-
-The *dipole* angle style uses the potential:
-
-.. image:: Eqs/angle_dipole_potential.jpg
- :align: center
-
-where K is a rigidity constant and gamma0 is an equilibrium (reference)
-angle.
-
-The torque on the dipole can be obtained by differentiating the
-potential using the 'chain rule' as in appendix C.3 of
-:ref:`(Allen) <Allen>`:
-
-.. image:: Eqs/angle_dipole_torque.jpg
- :align: center
-
-Example: if gamma0 is set to 0 degrees, the torque generated by
-the potential will tend to align the dipole along the reference
-direction defined by the (bond) vector r_ij (in other words, mu_j is
-restrained to point towards atom 'i').
-
-The dipolar torque T_j must be counterbalanced in order to conserve
-the local angular momentum. This is achieved via an additional force
-couple generating a torque equivalent to the opposite of T_j:
-
-.. image:: Eqs/angle_dipole_couple.jpg
- :align: center
-
-where F_i and F_j are applied on atoms i and j, respectively.
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy)
-* gamma0 (degrees)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_6>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <start_2_3>`
-section for more info on packages.
-
-.. note::
-
- In the "Angles" section of the data file, the atom ID 'j'
- corresponding to the dipole to restrain must come before the atom ID
- of the reference atom 'i'. A third atom ID 'k' must also be provided,
- although 'k' is just a 'dummy' atom which can be any atom; it may be
- useful to choose a convention (e.g., 'k'='i') and adhere to it. For
- example, if ID=1 for the dipolar atom to restrain, and ID=2 for the
- reference atom, the corresponding line in the "Angles" section of the
- data file would read: X X 1 2 2
-
-The "newton" command for intramolecular interactions must be "on"
-(which is the default).
-
-This angle style should not be used with SHAKE.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`, :doc:`angle_hybrid <angle_hybrid>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Orsi:
-
-
-
-**(Orsi)** Orsi & Essex, The ELBA force field for coarse-grain modeling of
-lipid membranes, PloS ONE 6(12): e28637, 2011.
-
-.. _Allen:
-
-
-
-**(Allen)** Allen & Tildesley, Computer Simulation of Liquids,
-Clarendon Press, Oxford, 1987.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_fourier.txt b/doc/html/_sources/angle_fourier.txt
deleted file mode 100644
index ad04f2f75..000000000
--- a/doc/html/_sources/angle_fourier.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-.. index:: angle_style fourier
-
-angle_style fourier command
-===========================
-
-angle_style fourier/omp command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style fourier
-
-Examples
-""""""""
-
-angle_style fourier
-angle_coeff 75.0 1.0 1.0 1.0
-
-Description
-"""""""""""
-
-The *fourier* angle style uses the potential
-
-.. image:: Eqs/angle_fourier.jpg
- :align: center
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy)
-* C0 (real)
-* C1 (real)
-* C2 (real)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER_MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_fourier_simple.txt b/doc/html/_sources/angle_fourier_simple.txt
deleted file mode 100644
index d77706167..000000000
--- a/doc/html/_sources/angle_fourier_simple.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-.. index:: angle_style fourier/simple
-
-angle_style fourier/simple command
-==================================
-
-angle_style fourier/simple/omp command
-======================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style fourier/simple
-
-Examples
-""""""""
-
-angle_style fourier/simple
-angle_coeff 100.0 -1.0 1.0
-
-Description
-"""""""""""
-
-The *fourier/simple* angle style uses the potential
-
-.. image:: Eqs/angle_fourier_simple.jpg
- :align: center
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy)
-* c (real)
-* n (real)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER_MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_harmonic.txt b/doc/html/_sources/angle_harmonic.txt
deleted file mode 100644
index b9e33bc17..000000000
--- a/doc/html/_sources/angle_harmonic.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-.. index:: angle_style harmonic
-
-angle_style harmonic command
-============================
-
-angle_style harmonic/intel command
-==================================
-
-angle_style harmonic/kk command
-===============================
-
-angle_style harmonic/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style harmonic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style harmonic
- angle_coeff 1 300.0 107.0
-
-Description
-"""""""""""
-
-The *harmonic* angle style uses the potential
-
-.. image:: Eqs/angle_harmonic.jpg
- :align: center
-
-where theta0 is the equilibrium value of the angle, and K is a
-prefactor. Note that the usual 1/2 factor is included in K.
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy/radian^2)
-* theta0 (degrees)
-
-Theta0 is specified in degrees, but LAMMPS converts it to radians
-internally; hence the units of K are in energy/radian^2.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-This angle style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_hybrid.txt b/doc/html/_sources/angle_hybrid.txt
deleted file mode 100644
index 3fadc97cd..000000000
--- a/doc/html/_sources/angle_hybrid.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-.. index:: angle_style hybrid
-
-angle_style hybrid command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style hybrid style1 style2 ...
-
-* style1,style2 = list of one or more angle styles
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style hybrid harmonic cosine
- angle_coeff 1 harmonic 80.0 30.0
- angle_coeff 2* cosine 50.0
-
-Description
-"""""""""""
-
-The *hybrid* style enables the use of multiple angle styles in one
-simulation. An angle style is assigned to each angle type. For
-example, angles in a polymer flow (of angle type 1) could be computed
-with a *harmonic* potential and angles in the wall boundary (of angle
-type 2) could be computed with a *cosine* potential. The assignment
-of angle type to style is made via the :doc:`angle_coeff <angle_coeff>`
-command or in the data file.
-
-In the angle_coeff commands, the name of an angle style must be added
-after the angle type, with the remaining coefficients being those
-appropriate to that style. In the example above, the 2 angle_coeff
-commands set angles of angle type 1 to be computed with a *harmonic*
-potential with coefficients 80.0, 30.0 for K, theta0. All other angle
-types (2-N) are computed with a *cosine* potential with coefficient
-50.0 for K.
-
-If angle coefficients are specified in the data file read via the
-:doc:`read_data <read_data>` command, then the same rule applies.
-E.g. "harmonic" or "cosine", must be added after the angle type, for each
-line in the "Angle Coeffs" section, e.g.
-
-.. parsed-literal::
-
- Angle Coeffs
-
-.. parsed-literal::
-
- 1 harmonic 80.0 30.0
- 2 cosine 50.0
- ...
-
-If *class2* is one of the angle hybrid styles, the same rule holds for
-specifying additional BondBond (and BondAngle) coefficients either via
-the input script or in the data file. I.e. *class2* must be added to
-each line after the angle type. For lines in the BondBond (or
-BondAngle) section of the data file for angle types that are not
-*class2*\ , you must use an angle style of *skip* as a placeholder, e.g.
-
-.. parsed-literal::
-
- BondBond Coeffs
-
-.. parsed-literal::
-
- 1 skip
- 2 class2 3.6512 1.0119 1.0119
- ...
-
-Note that it is not necessary to use the angle style *skip* in the
-input script, since BondBond (or BondAngle) coefficients need not be
-specified at all for angle types that are not *class2*\ .
-
-An angle style of *none* with no additional coefficients can be used
-in place of an angle style, either in a input script angle_coeff
-command or in the data file, if you desire to turn off interactions
-for specific angle types.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Unlike other angle styles, the hybrid angle style does not store angle
-coefficient info for individual sub-styles in a :doc:`binary restart files <restart>`. Thus when retarting a simulation from a restart
-file, you need to re-specify angle_coeff commands.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_none.txt b/doc/html/_sources/angle_none.txt
deleted file mode 100644
index a53a50ac0..000000000
--- a/doc/html/_sources/angle_none.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-.. index:: angle_style none
-
-angle_style none command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style none
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style none
-
-Description
-"""""""""""
-
-Using an angle style of none means angle forces and energies are not
-computed, even if triplets of angle atoms were listed in the data file
-read by the :doc:`read_data <read_data>` command.
-
-See the :doc:`angle_style zero <angle_zero>` command for a way to
-calculate angle statistics, but compute no angle interactions.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_style zero <angle_zero>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_quartic.txt b/doc/html/_sources/angle_quartic.txt
deleted file mode 100644
index ddc231d12..000000000
--- a/doc/html/_sources/angle_quartic.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-.. index:: angle_style quartic
-
-angle_style quartic command
-===========================
-
-angle_style quartic/omp command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style quartic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style quartic
- angle_coeff 1 129.1948 56.8726 -25.9442 -14.2221
-
-Description
-"""""""""""
-
-The *quartic* angle style uses the potential
-
-.. image:: Eqs/angle_quartic.jpg
- :align: center
-
-where theta0 is the equilibrium value of the angle, and K is a
-prefactor. Note that the usual 1/2 factor is included in K.
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* theta0 (degrees)
-* K2 (energy/radian^2)
-* K3 (energy/radian^3)
-* K4 (energy/radian^4)
-
-Theta0 is specified in degrees, but LAMMPS converts it to radians
-internally; hence the units of K are in energy/radian^2.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER_MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_sdk.txt b/doc/html/_sources/angle_sdk.txt
deleted file mode 100644
index 05ad2e46c..000000000
--- a/doc/html/_sources/angle_sdk.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-.. index:: angle_style sdk
-
-angle_style sdk command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style sdk
-
-.. parsed-literal::
-
- angle_style sdk/omp
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style sdk
- angle_coeff 1 300.0 107.0
-
-Description
-"""""""""""
-
-The *sdk* angle style is a combination of the harmonic angle potential,
-
-.. image:: Eqs/angle_harmonic.jpg
- :align: center
-
-where theta0 is the equilibrium value of the angle and K a prefactor,
-with the *repulsive* part of the non-bonded *lj/sdk* pair style
-between the atoms 1 and 3. This angle potential is intended for
-coarse grained MD simulations with the CMM parametrization using the
-:doc:`pair_style lj/sdk <pair_sdk>`. Relative to the pair_style
-*lj/sdk*\ , however, the energy is shifted by *epsilon*\ , to avoid sudden
-jumps. Note that the usual 1/2 factor is included in K.
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above:
-
-* K (energy/radian^2)
-* theta0 (degrees)
-
-Theta0 is specified in degrees, but LAMMPS converts it to radians
-internally; hence the units of K are in energy/radian^2.
-The also required *lj/sdk* parameters will be extracted automatically
-from the pair_style.
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER-CG-CMM package. See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`, :doc:`angle_style harmonic <angle_harmonic>`, :doc:`pair_style lj/sdk <pair_sdk>`,
-:doc:`pair_style lj/sdk/coul/long <pair_sdk>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_style.txt b/doc/html/_sources/angle_style.txt
deleted file mode 100644
index c498617a1..000000000
--- a/doc/html/_sources/angle_style.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-.. index:: angle_style
-
-angle_style command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style style
-
-* style = *none* or *hybrid* or *charmm* or *class2* or *cosine* or *cosine/squared* or *harmonic*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style harmonic
- angle_style charmm
- angle_style hybrid harmonic cosine
-
-Description
-"""""""""""
-
-Set the formula(s) LAMMPS uses to compute angle interactions between
-triplets of atoms, which remain in force for the duration of the
-simulation. The list of angle triplets is read in by a
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>` command
-from a data or restart file.
-
-Hybrid models where angles are computed using different angle
-potentials can be setup using the *hybrid* angle style.
-
-The coefficients associated with a angle style can be specified in a
-data or restart file or via the :doc:`angle_coeff <angle_coeff>` command.
-
-All angle potentials store their coefficient data in binary restart
-files which means angle_style and :doc:`angle_coeff <angle_coeff>`
-commands do not need to be re-specified in an input script that
-restarts a simulation. See the :doc:`read_restart <read_restart>`
-command for details on how to do this. The one exception is that
-angle_style *hybrid* only stores the list of sub-styles in the restart
-file; angle coefficients need to be re-specified.
-
-.. note::
-
- When both an angle and pair style is defined, the
- :doc:`special_bonds <special_bonds>` command often needs to be used to
- turn off (or weight) the pairwise interaction that would otherwise
- exist between 3 bonded atoms.
-
-In the formulas listed for each angle style, *theta* is the angle
-between the 3 atoms in the angle.
-
-
-----------
-
-
-Here is an alphabetic list of angle styles defined in LAMMPS. Click on
-the style to display the formula it computes and coefficients
-specified by the associated :doc:`angle_coeff <angle_coeff>` command.
-
-Note that there are also additional angle styles submitted by users
-which are included in the LAMMPS distribution. The list of these with
-links to the individual styles are given in the angle section of :ref:`this page <cmd_5>`.
-
-* :doc:`angle_style none <angle_none>` - turn off angle interactions
-* :doc:`angle_style zero <angle_zero>` - topology but no interactions
-* :doc:`angle_style hybrid <angle_hybrid>` - define multiple styles of angle interactions
-
-* :doc:`angle_style charmm <angle_charmm>` - CHARMM angle
-* :doc:`angle_style class2 <angle_class2>` - COMPASS (class 2) angle
-* :doc:`angle_style cosine <angle_cosine>` - cosine angle potential
-* :doc:`angle_style cosine/delta <angle_cosine_delta>` - difference of cosines angle potential
-* :doc:`angle_style cosine/periodic <angle_cosine_periodic>` - DREIDING angle
-* :doc:`angle_style cosine/squared <angle_cosine_squared>` - cosine squared angle potential
-* :doc:`angle_style harmonic <angle_harmonic>` - harmonic angle
-* :doc:`angle_style table <angle_table>` - tabulated by angle
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-Angle styles can only be set for atom_styles that allow angles to be
-defined.
-
-Most angle styles are part of the MOLECULE package. They are only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-The doc pages for individual bond potentials tell if it is part of a
-package.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- angle_style none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_table.txt b/doc/html/_sources/angle_table.txt
deleted file mode 100644
index fae468cc3..000000000
--- a/doc/html/_sources/angle_table.txt
+++ /dev/null
@@ -1,175 +0,0 @@
-.. index:: angle_style table
-
-angle_style table command
-=========================
-
-angle_style table/omp command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style table style N
-
-* style = *linear* or *spline* = method of interpolation
-* N = use N values in table
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style table linear 1000
- angle_coeff 3 file.table ENTRY1
-
-Description
-"""""""""""
-
-Style *table* creates interpolation tables of length *N* from angle
-potential and derivative values listed in a file(s) as a function of
-angle The files are read by the :doc:`angle_coeff <angle_coeff>`
-command.
-
-The interpolation tables are created by fitting cubic splines to the
-file values and interpolating energy and derivative values at each of
-*N* angles. During a simulation, these tables are used to interpolate
-energy and force values on individual atoms as needed. The
-interpolation is done in one of 2 styles: *linear* or *spline*\ .
-
-For the *linear* style, the angle is used to find 2 surrounding table
-values from which an energy or its derivative is computed by linear
-interpolation.
-
-For the *spline* style, a cubic spline coefficients are computed and
-stored at each of the *N* values in the table. The angle is used to
-find the appropriate set of coefficients which are used to evaluate a
-cubic polynomial which computes the energy or derivative.
-
-The following coefficients must be defined for each angle type via the
-:doc:`angle_coeff <angle_coeff>` command as in the example above.
-
-* filename
-* keyword
-
-The filename specifies a file containing tabulated energy and
-derivative values. The keyword specifies a section of the file. The
-format of this file is described below.
-
-
-----------
-
-
-The format of a tabulated file is as follows (without the
-parenthesized comments):
-
-.. parsed-literal::
-
- # Angle potential for harmonic (one or more comment or blank lines)
-
-.. parsed-literal::
-
- HAM (keyword is the first text on line)
- N 181 FP 0 0 EQ 90.0 (N, FP, EQ parameters)
- (blank line)
- N 181 FP 0 0 (N, FP parameters)
- 1 0.0 200.5 2.5 (index, angle, energy, derivative)
- 2 1.0 198.0 2.5
- ...
- 181 180.0 0.0 0.0
-
-A section begins with a non-blank line whose 1st character is not a
-"#"; blank lines or lines starting with "#" can be used as comments
-between sections. The first line begins with a keyword which
-identifies the section. The line can contain additional text, but the
-initial text must match the argument specified in the
-:doc:`angle_coeff <angle_coeff>` command. The next line lists (in any
-order) one or more parameters for the table. Each parameter is a
-keyword followed by one or more numeric values.
-
-The parameter "N" is required and its value is the number of table
-entries that follow. Note that this may be different than the *N*
-specified in the :doc:`angle_style table <angle_style>` command. Let
-Ntable = *N* in the angle_style command, and Nfile = "N" in the
-tabulated file. What LAMMPS does is a preliminary interpolation by
-creating splines using the Nfile tabulated values as nodal points. It
-uses these to interpolate as needed to generate energy and derivative
-values at Ntable different points. The resulting tables of length
-Ntable are then used as described above, when computing energy and
-force for individual angles and their atoms. This means that if you
-want the interpolation tables of length Ntable to match exactly what
-is in the tabulated file (with effectively no preliminary
-interpolation), you should set Ntable = Nfile.
-
-The "FP" parameter is optional. If used, it is followed by two values
-fplo and fphi, which are the 2nd derivatives at the innermost and
-outermost angle settings. These values are needed by the spline
-construction routines. If not specified by the "FP" parameter, they
-are estimated (less accurately) by the first two and last two
-derivative values in the table.
-
-The "EQ" parameter is also optional. If used, it is followed by a the
-equilibrium angle value, which is used, for example, by the :doc:`fix shake <fix_shake>` command. If not used, the equilibrium angle is
-set to 180.0.
-
-Following a blank line, the next N lines list the tabulated values.
-On each line, the 1st value is the index from 1 to N, the 2nd value is
-the angle value (in degrees), the 3rd value is the energy (in energy
-units), and the 4th is -dE/d(theta) (also in energy units). The 3rd
-term is the energy of the 3-atom configuration for the specified
-angle. The last term is the derivative of the energy with respect to
-the angle (in degrees, not radians). Thus the units of the last term
-are still energy, not force. The angle values must increase from one
-line to the next. The angle values must also begin with 0.0 and end
-with 180.0, i.e. span the full range of possible angles.
-
-Note that one file can contain many sections, each with a tabulated
-potential. LAMMPS reads the file section by section until it finds
-one that matches the specified keyword.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_coeff <angle_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/angle_zero.txt b/doc/html/_sources/angle_zero.txt
deleted file mode 100644
index 35bbd1494..000000000
--- a/doc/html/_sources/angle_zero.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-.. index:: angle_style zero
-
-angle_style zero command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- angle_style zero *nocoeff*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- angle_style zero
- angle_style zero nocoeff
- angle_coeff *
- angle_coeff * 120.0
-
-Description
-"""""""""""
-
-Using an angle style of zero means angle forces and energies are not
-computed, but the geometry of angle triplets is still accessible to
-other commands.
-
-As an example, the :doc:`compute angle/local <compute_angle_local>`
-command can be used to compute the theta values for the list of
-triplets of angle atoms listed in the data file read by the
-:doc:`read_data <read_data>` command. If no angle style is defined,
-this command cannot be used.
-
-The optional *nocoeff* flag allows to read data files with AngleCoeff
-section for any angle style. Similarly, any angle_coeff commands
-will only be checked for the angle type number and the rest ignored.
-
-Note that the :doc:`angle_coeff <angle_coeff>` command must be used for
-all angle types. If specified, there can be only one value, which is
-going to be used to assign an equilibrium angle, e.g. for use with
-:doc:`fix shake <fix_shake>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`angle_style none <angle_none>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/atom_modify.txt b/doc/html/_sources/atom_modify.txt
deleted file mode 100644
index 36b9652ad..000000000
--- a/doc/html/_sources/atom_modify.txt
+++ /dev/null
@@ -1,186 +0,0 @@
-.. index:: atom_modify
-
-atom_modify command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- atom_modify keyword values ...
-
-* one or more keyword/value pairs may be appended
-* keyword = *id* or *map* or *first* or *sort*
-.. parsed-literal::
-
- *id* value = *yes* or *no*
- *map* value = *array* or *hash*
- *first* value = group-ID = group whose atoms will appear first in internal atom lists
- *sort* values = Nfreq binsize
- Nfreq = sort atoms spatially every this many time steps
- binsize = bin size for spatial sorting (distance units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- atom_modify map hash
- atom_modify map array sort 10000 2.0
- atom_modify first colloid
-
-Description
-"""""""""""
-
-Modify certain attributes of atoms defined and stored within LAMMPS,
-in addition to what is specified by the :doc:`atom_style <atom_style>`
-command. The *id* and *map* keywords must be specified before a
-simulation box is defined; other keywords can be specified any time.
-
-The *id* keyword determines whether non-zero atom IDs can be assigned
-to each atom. If the value is *yes*\ , which is the default, IDs are
-assigned, whether you use the :doc:`create atoms <create_atoms>` or
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands to initialize atoms. If the value is *no* the IDs for all
-atoms are assumed to be 0.
-
-If atom IDs are used, they must all be positive integers. They should
-also be unique, though LAMMPS does not check for this. Typically they
-should also be consecutively numbered (from 1 to Natoms), though this
-is not required. Molecular :doc:`atom styles <atom_style>` are those
-that store bond topology information (styles bond, angle, molecular,
-full). These styles require atom IDs since the IDs are used to encode
-the topology. Some other LAMMPS commands also require the use of atom
-IDs. E.g. some many-body pair styles use them to avoid double
-computation of the I-J interaction between two atoms.
-
-The only reason not to use atom IDs is if you are running an atomic
-simulation so large that IDs cannot be uniquely assigned. For a
-default LAMMPS build this limit is 2^31 or about 2 billion atoms.
-However, even in this case, you can use 64-bit atom IDs, allowing 2^63
-or about 9e18 atoms, if you build LAMMPS with the - DLAMMPS_BIGBIG
-switch. This is described in :ref:`Section 2.2 <start_2>`
-of the manual. If atom IDs are not used, they must be specified as 0
-for all atoms, e.g. in a data or restart file.
-
-The *map* keyword determines how atom ID lookup is done for molecular
-atom styles. Lookups are performed by bond (angle, etc) routines in
-LAMMPS to find the local atom index associated with a global atom ID.
-
-When the *array* value is used, each processor stores a lookup table
-of length N, where N is the largest atom ID in the system. This is a
-fast, simple method for many simulations, but requires too much memory
-for large simulations. The *hash* value uses a hash table to perform
-the lookups. This can be slightly slower than the *array* method, but
-its memory cost is proportional to the number of atoms owned by a
-processor, i.e. N/P when N is the total number of atoms in the system
-and P is the number of processors.
-
-When this setting is not specified in your input script, LAMMPS
-creates a map, if one is needed, as an array or hash. See the
-discussion of default values below for how LAMMPS chooses which kind
-of map to build. Note that atomic systems do not normally need to
-create a map. However, even in this case some LAMMPS commands will
-create a map to find atoms (and then destroy it), or require a
-permanent map. An example of the former is the :doc:`velocity loop all <velocity>` command, which uses a map when looping over all
-atoms and insuring the same velocity values are assigned to an atom
-ID, no matter which processor owns it.
-
-The *first* keyword allows a :doc:`group <group>` to be specified whose
-atoms will be maintained as the first atoms in each processor's list
-of owned atoms. This in only useful when the specified group is a
-small fraction of all the atoms, and there are other operations LAMMPS
-is performing that will be sped-up significantly by being able to loop
-over the smaller set of atoms. Otherwise the reordering required by
-this option will be a net slow-down. The :doc:`neigh_modify include <neigh_modify>` and :doc:`comm_modify group <comm_modify>`
-commands are two examples of commands that require this setting to
-work efficiently. Several :doc:`fixes <fix>`, most notably time
-integration fixes like :doc:`fix nve <fix_nve>`, also take advantage of
-this setting if the group they operate on is the group specified by
-this command. Note that specifying "all" as the group-ID effectively
-turns off the *first* option.
-
-It is OK to use the *first* keyword with a group that has not yet been
-defined, e.g. to use the atom_modify first command at the beginning of
-your input script. LAMMPS does not use the group until a simullation
-is run.
-
-The *sort* keyword turns on a spatial sorting or reordering of atoms
-within each processor's sub-domain every *Nfreq* timesteps. If
-*Nfreq* is set to 0, then sorting is turned off. Sorting can improve
-cache performance and thus speed-up a LAMMPS simulation, as discussed
-in a paper by :ref:`(Meloni) <Meloni>`. Its efficacy depends on the problem
-size (atoms/processor), how quickly the system becomes disordered, and
-various other factors. As a general rule, sorting is typically more
-effective at speeding up simulations of liquids as opposed to solids.
-In tests we have done, the speed-up can range from zero to 3-4x.
-
-Reordering is peformed every *Nfreq* timesteps during a dynamics run
-or iterations during a minimization. More precisely, reordering
-occurs at the first reneighboring that occurs after the target
-timestep. The reordering is performed locally by each processor,
-using bins of the specified *binsize*\ . If *binsize* is set to 0.0,
-then a binsize equal to half the :doc:`neighbor <neighbor>` cutoff
-distance (force cutoff plus skin distance) is used, which is a
-reasonable value. After the atoms have been binned, they are
-reordered so that atoms in the same bin are adjacent to each other in
-the processor's 1d list of atoms.
-
-The goal of this procedure is for atoms to put atoms close to each
-other in the processor's one-dimensional list of atoms that are also
-near to each other spatially. This can improve cache performance when
-pairwise intereractions and neighbor lists are computed. Note that if
-bins are too small, there will be few atoms/bin. Likewise if bins are
-too large, there will be many atoms/bin. In both cases, the goal of
-cache locality will be undermined.
-
-.. note::
-
- Running a simulation with sorting on versus off should not
- change the simulation results in a statistical sense. However, a
- different ordering will induce round-off differences, which will lead
- to diverging trajectories over time when comparing two simluations.
- Various commands, particularly those which use random numbers
- (e.g. :doc:`velocity create <velocity>`, and :doc:`fix langevin <fix_langevin>`), may generate (statistically identical)
- results which depend on the order in which atoms are processed. The
- order of atoms in a :doc:`dump <dump>` file will also typically change
- if sorting is enabled.
-
-Restrictions
-""""""""""""
-
-
-The *first* and *sort* options cannot be used together. Since sorting
-is on by default, it will be turned off if the *first* keyword is
-used with a group-ID that is not "all".
-
-**Related commands:** none
-
-Default
-"""""""
-
-By default, *id* is yes. By default, atomic systems (no bond topology
-info) do not use a map. For molecular systems (with bond topology
-info), a map is used. The default map style is array if no atom ID is
-larger than 1 million, otherwise the default is hash. By default, a
-"first" group is not defined. By default, sorting is enabled with a
-frequency of 1000 and a binsize of 0.0, which means the neighbor
-cutoff will be used to set the bin size.
-
-
-----------
-
-
-.. _Meloni:
-
-
-
-**(Meloni)** Meloni, Rosati and Colombo, J Chem Phys, 126, 121102 (2007).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/atom_style.txt b/doc/html/_sources/atom_style.txt
deleted file mode 100644
index 30ecaa9d5..000000000
--- a/doc/html/_sources/atom_style.txt
+++ /dev/null
@@ -1,337 +0,0 @@
-.. index:: atom_style
-
-atom_style command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- atom_style style args
-
-* style = *angle* or *atomic* or *body* or *bond* or *charge* or *dipole* or *dpd* or *electron* or *ellipsoid* or *full* or *line* or *meso* or *molecular* or *peri* or *smd* or *sphere* or *tri* or *template* or *hybrid*
-.. parsed-literal::
-
- args = none for any style except the following
- *body* args = bstyle bstyle-args
- bstyle = style of body particles
- bstyle-args = additional arguments specific to the bstyle
- see the :doc:`body <body>` doc page for details
- *template* args = template-ID
- template-ID = ID of molecule template specified in a separate :doc:`molecule <molecule>` command
- *hybrid* args = list of one or more sub-styles, each with their args
-
-* accelerated styles (with same args) = *angle/kk* or *atomic/kk* or *bond/kk* or *charge/kk* or *full/kk* or *molecular/kk*
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- atom_style atomic
- atom_style bond
- atom_style full
- atom_style body nparticle 2 10
- atom_style hybrid charge bond
- atom_style hybrid charge body nparticle 2 5
- atom_style template myMols
-
-Description
-"""""""""""
-
-Define what style of atoms to use in a simulation. This determines
-what attributes are associated with the atoms. This command must be
-used before a simulation is setup via a :doc:`read_data <read_data>`,
-:doc:`read_restart <read_restart>`, or :doc:`create_box <create_box>`
-command.
-
-.. note::
-
- Many of the atom styles discussed here are only enabled if
- LAMMPS was built with a specific package, as listed below in the
- Restrictions section.
-
-Once a style is assigned, it cannot be changed, so use a style general
-enough to encompass all attributes. E.g. with style *bond*\ , angular
-terms cannot be used or added later to the model. It is OK to use a
-style more general than needed, though it may be slightly inefficient.
-
-The choice of style affects what quantities are stored by each atom,
-what quantities are communicated between processors to enable forces
-to be computed, and what quantities are listed in the data file read
-by the :doc:`read_data <read_data>` command.
-
-These are the additional attributes of each style and the typical
-kinds of physical systems they are used to model. All styles store
-coordinates, velocities, atom IDs and types. See the
-:doc:`read_data <read_data>`, :doc:`create_atoms <create_atoms>`, and
-:doc:`set <set>` commands for info on how to set these various
-quantities.
-
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *angle* | bonds and angles | bead-spring polymers with stiffness |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *atomic* | only the default values | coarse-grain liquids, solids, metals |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *body* | mass, inertia moments, quaternion, angular momentum | arbitrary bodies |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *bond* | bonds | bead-spring polymers |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *charge* | charge | atomic system with charges |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *dipole* | charge and dipole moment | system with dipolar particles |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *dpd* | internal temperature and internal energies | DPD particles |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *electron* | charge and spin and eradius | electronic force field |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *ellipsoid* | shape, quaternion, angular momentum | aspherical particles |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *full* | molecular + charge | bio-molecules |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *line* | end points, angular velocity | rigid bodies |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *meso* | rho, e, cv | SPH particles |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *molecular* | bonds, angles, dihedrals, impropers | uncharged molecules |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *peri* | mass, volume | mesocopic Peridynamic models |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *smd* | volume, kernel diameter, contact radius, mass | solid and fluid SPH particles |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *sphere* | diameter, mass, angular velocity | granular models |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *template* | template index, template atom | small molecules with fixed topology |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *tri* | corner points, angular momentum | rigid bodies |
-+--------------+-----------------------------------------------------+--------------------------------------+
-| *wavepacket* | charge, spin, eradius, etag, cs_re, cs_im | AWPMD |
-+--------------+-----------------------------------------------------+--------------------------------------+
-
-.. note::
-
- It is possible to add some attributes, such as a molecule ID, to
- atom styles that do not have them via the :doc:`fix property/atom <fix_property_atom>` command. This command also
- allows new custom attributes consisting of extra integer or
- floating-point values to be added to atoms. See the :doc:`fix property/atom <fix_property_atom>` doc page for examples of cases
- where this is useful and details on how to initialize, access, and
- output the custom values.
-
-All of the above styles define point particles, except the *sphere*\ ,
-*ellipsoid*\ , *electron*\ , *peri*\ , *wavepacket*\ , *line*\ , *tri*\ , and
-*body* styles, which define finite-size particles. See :ref:`Section_howto 14 <howto_14>` for an overview of using finite-size
-particle models with LAMMPS.
-
-All of the point-particle styles assign mass to particles on a
-per-type basis, using the :doc:`mass <mass>` command, The finite-size
-particle styles assign mass to individual particles on a per-particle
-basis.
-
-For the *sphere* style, the particles are spheres and each stores a
-per-particle diameter and mass. If the diameter > 0.0, the particle
-is a finite-size sphere. If the diameter = 0.0, it is a point
-particle.
-
-For the *ellipsoid* style, the particles are ellipsoids and each
-stores a flag which indicates whether it is a finite-size ellipsoid or
-a point particle. If it is an ellipsoid, it also stores a shape
-vector with the 3 diamters of the ellipsoid and a quaternion 4-vector
-with its orientation.
-
-For the *dipole* style, a point dipole is defined for each point
-particle. Note that if you wish the particles to be finite-size
-spheres as in a Stockmayer potential for a dipolar fluid, so that the
-particles can rotate due to dipole-dipole interactions, then you need
-to use atom_style hybrid sphere dipole, which will assign both a
-diameter and dipole moment to each particle.
-
-For the *electron* style, the particles representing electrons are 3d
-Gaussians with a specified position and bandwidth or uncertainty in
-position, which is represented by the eradius = electron size.
-
-For the *peri* style, the particles are spherical and each stores a
-per-particle mass and volume.
-
-The *dpd* style is for dissipative particle dynamics (DPD) particles.
-Note that it is part of the USER-DPD package, and is not for use with
-the :doc:`pair_style dpd or dpd/stat <pair_dpd>` commands, which can
-simply use atom_style atomic. Atom_style dpd extends DPD particle
-properties with internal temperature (dpdTheta), internal conductive
-energy (uCond), internal mechanical energy (uMech), and internal
-chemical energy (uChem).
-
-The *meso* style is for smoothed particle hydrodynamics (SPH)
-particles which store a density (rho), energy (e), and heat capacity
-(cv).
-
-The *smd* style is for a general formulation of Smooth Particle
-Hydrodynamics. Both fluids and solids can be modeled. Particles
-store the mass and volume of an integration point, a kernel diameter
-used for calculating the field variables (e.g. stress and deformation)
-and a contact radius for calculating repulsive forces which prevent
-individual physical bodies from penetretating each other.
-
-The *wavepacket* style is similar to *electron*\ , but the electrons may
-consist of several Gaussian wave packets, summed up with coefficients
-cs= (cs_re,cs_im). Each of the wave packets is treated as a separate
-particle in LAMMPS, wave packets belonging to the same electron must
-have identical *etag* values.
-
-For the *line* style, the particles are idealized line segments and
-each stores a per-particle mass and length and orientation (i.e. the
-end points of the line segment).
-
-For the *tri* style, the particles are planar triangles and each
-stores a per-particle mass and size and orientation (i.e. the corner
-points of the triangle).
-
-The *template* style allows molecular topolgy (bonds,angles,etc) to be
-defined via a molecule template using the `molecule <molecule.txt>`_
-command. The template stores one or more molecules with a single copy
-of the topology info (bonds,angles,etc) of each. Individual atoms
-only store a template index and template atom to identify which
-molecule and which atom-within-the-molecule they represent. Using the
-*template* style instead of the *bond*\ , *angle*\ , *molecular* styles
-can save memory for systems comprised of a large number of small
-molecules, all of a single type (or small number of types). See the
-paper by Grime and Voth, in :ref:`(Grime) <Grime>`, for examples of how this
-can be advantageous for large-scale coarse-grained systems.
-
-.. note::
-
- When using the *template* style with a :doc:`molecule template <molecule>` that contains multiple molecules, you should
- insure the atom types, bond types, angle_types, etc in all the
- molecules are consistent. E.g. if one molecule represents H2O and
- another CO2, then you probably do not want each molecule file to
- define 2 atom types and a single bond type, because they will conflict
- with each other when a mixture system of H2O and CO2 molecules is
- defined, e.g. by the :doc:`read_data <read_data>` command. Rather the
- H2O molecule should define atom types 1 and 2, and bond type 1. And
- the CO2 molecule should define atom types 3 and 4 (or atom types 3 and
- 2 if a single oxygen type is desired), and bond type 2.
-
-For the *body* style, the particles are arbitrary bodies with internal
-attributes defined by the "style" of the bodies, which is specified by
-the *bstyle* argument. Body particles can represent complex entities,
-such as surface meshes of discrete points, collections of
-sub-particles, deformable objects, etc.
-
-The :doc:`body <body>` doc page descibes the body styles LAMMPS
-currently supports, and provides more details as to the kind of body
-particles they represent. For all styles, each body particle stores
-moments of inertia and a quaternion 4-vector, so that its orientation
-and position can be time integrated due to forces and torques.
-
-Note that there may be additional arguments required along with the
-*bstyle* specification, in the atom_style body command. These
-arguments are described in the :doc:`body <body>` doc page.
-
-
-----------
-
-
-Typically, simulations require only a single (non-hybrid) atom style.
-If some atoms in the simulation do not have all the properties defined
-by a particular style, use the simplest style that defines all the
-needed properties by any atom. For example, if some atoms in a
-simulation are charged, but others are not, use the *charge* style.
-If some atoms have bonds, but others do not, use the *bond* style.
-
-The only scenario where the *hybrid* style is needed is if there is no
-single style which defines all needed properties of all atoms. For
-example, as mentioned above, if you want dipolar particles which will
-rotate due to torque, you need to use "atom_style hybrid sphere
-dipole". When a hybrid style is used, atoms store and communicate the
-union of all quantities implied by the individual styles.
-
-When using the *hybrid* style, you cannot combine the *template* style
-with another molecular style that stores bond,angle,etc info on a
-per-atom basis.
-
-LAMMPS can be extended with new atom styles as well as new body
-styles; see :doc:`this section <Section_modify>`.
-
-
-----------
-
-
-Styles with a *kk* 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
-:doc:`Section_accelerate <Section_accelerate>` of the manual. The
-accelerated styles take the same arguments and should produce the same
-results, except for round-off and precision issues.
-
-Note that other acceleration packages in LAMMPS, specifically the GPU,
-USER-INTEL, USER-OMP, and OPT packages do not use accelerated atom
-styles.
-
-The accelerated styles are part of the KOKKOS package. They are only
-enabled if LAMMPS was built with those packages. See the :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restrictions
-""""""""""""
-
-
-This command cannot be used after the simulation box is defined by a
-:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command.
-
-Many of the styles listed above are only enabled if LAMMPS was built
-with a specific package, as listed below. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The *angle*\ , *bond*\ , *full*\ , *molecular*\ , and *template* styles are
-part of the MOLECULE package.
-
-The *line* and *tri* styles are part of the ASPHERE package.
-
-The *body* style is part of the BODY package.
-
-The *dipole* style is part of the DIPOLE package.
-
-The *peri* style is part of the PERI package for Peridynamics.
-
-The *electron* style is part of the USER-EFF package for :doc:`electronic force fields <pair_eff>`.
-
-The *dpd* style is part of the USER-DPD package for dissipative
-particle dynamics (DPD).
-
-The *meso* style is part of the USER-SPH package for smoothed particle
-hydrodyanmics (SPH). See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in LAMMPS.
-
-The *wavepacket* style is part of the USER-AWPMD package for the
-:doc:`antisymmetrized wave packet MD method <pair_awpmd>`.
-
-Related commands
-""""""""""""""""
-
-:doc:`read_data <read_data>`, :doc:`pair_style <pair_style>`
-
-Default
-"""""""
-
-atom_style atomic
-
-
-----------
-
-
-.. _Grime:
-
-
-
-**(Grime)** Grime and Voth, to appear in J Chem Theory & Computation
-(2014).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/balance.txt b/doc/html/_sources/balance.txt
deleted file mode 100644
index 5668e0cf5..000000000
--- a/doc/html/_sources/balance.txt
+++ /dev/null
@@ -1,386 +0,0 @@
-.. index:: balance
-
-balance command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- balance thresh style args ... keyword value ...
-
-* thresh = imbalance threshhold that must be exceeded to perform a re-balance
-* one style/arg pair can be used (or multiple for *x*\ ,\ *y*\ ,\ *z*\ )
-* style = *x* or *y* or *z* or *shift* or *rcb*
-.. parsed-literal::
-
- *x* args = *uniform* or Px-1 numbers between 0 and 1
- *uniform* = evenly spaced cuts between processors in x dimension
- numbers = Px-1 ascending values between 0 and 1, Px - # of processors in x dimension
- *x* can be specified together with *y* or *z*
- *y* args = *uniform* or Py-1 numbers between 0 and 1
- *uniform* = evenly spaced cuts between processors in y dimension
- numbers = Py-1 ascending values between 0 and 1, Py - # of processors in y dimension
- *y* can be specified together with *x* or *z*
- *z* args = *uniform* or Pz-1 numbers between 0 and 1
- *uniform* = evenly spaced cuts between processors in z dimension
- numbers = Pz-1 ascending values between 0 and 1, Pz - # of processors in z dimension
- *z* can be specified together with *x* or *y*
- *shift* args = dimstr Niter stopthresh
- dimstr = sequence of letters containing "x" or "y" or "z", each not more than once
- Niter = # of times to iterate within each dimension of dimstr sequence
- stopthresh = stop balancing when this imbalance threshhold is reached
- *rcb* args = none
-
-* zero or more keyword/value pairs may be appended
-* keyword = *out*
-.. parsed-literal::
-
- *out* value = filename
- filename = write each processor's sub-domain to a file
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- balance 0.9 x uniform y 0.4 0.5 0.6
- balance 1.2 shift xz 5 1.1
- balance 1.0 shift xz 5 1.1
- balance 1.1 rcb
- balance 1.0 shift x 20 1.0 out tmp.balance
-
-Description
-"""""""""""
-
-This command adjusts the size and shape of processor sub-domains
-within the simulation box, to attempt to balance the number of
-particles and thus the computational cost (load) evenly across
-processors. The load balancing is "static" in the sense that this
-command performs the balancing once, before or between simulations.
-The processor sub-domains will then remain static during the
-subsequent run. To perform "dynamic" balancing, see the :doc:`fix balance <fix_balance>` command, which can adjust processor
-sub-domain sizes and shapes on-the-fly during a :doc:`run <run>`.
-
-Load-balancing is typically only useful if the particles in the
-simulation box have a spatially-varying density distribution. E.g. a
-model of a vapor/liquid interface, or a solid with an irregular-shaped
-geometry containing void regions. In this case, the LAMMPS default of
-dividing the simulation box volume into a regular-spaced grid of 3d
-bricks, with one equal-volume sub-domain per procesor, may assign very
-different numbers of particles per processor. This can lead to poor
-performance when the simulation is run in parallel.
-
-Note that the :doc:`processors <processors>` command allows some control
-over how the box volume is split across processors. Specifically, for
-a Px by Py by Pz grid of processors, it allows choice of Px, Py, and
-Pz, subject to the constraint that Px * Py * Pz = P, the total number
-of processors. This is sufficient to achieve good load-balance for
-some problems on some processor counts. However, all the processor
-sub-domains will still have the same shape and same volume.
-
-The requested load-balancing operation is only performed if the
-current "imbalance factor" in particles owned by each processor
-exceeds the specified *thresh* parameter. The imbalance factor is
-defined as the maximum number of particles owned by any processor,
-divided by the average number of particles per processor. Thus an
-imbalance factor of 1.0 is perfect balance.
-
-As an example, for 10000 particles running on 10 processors, if the
-most heavily loaded processor has 1200 particles, then the factor is
-1.2, meaning there is a 20% imbalance. Note that a re-balance can be
-forced even if the current balance is perfect (1.0) be specifying a
-*thresh* < 1.0.
-
-.. note::
-
- Balancing is performed even if the imbalance factor does not
- exceed the *thresh* parameter if a "grid" style is specified when the
- current partitioning is "tiled". The meaning of "grid" vs "tiled" is
- explained below. This is to allow forcing of the partitioning to
- "grid" so that the :doc:`comm_style brick <comm_style>` command can then
- be used to replace a current :doc:`comm_style tiled <comm_style>`
- setting.
-
-When the balance command completes, it prints statistics about the
-result, including the change in the imbalance factor and the change in
-the maximum number of particles on any processor. For "grid" methods
-(defined below) that create a logical 3d grid of processors, the
-positions of all cutting planes in each of the 3 dimensions (as
-fractions of the box length) are also printed.
-
-.. note::
-
- This command attempts to minimize the imbalance factor, as
- defined above. But depending on the method a perfect balance (1.0)
- may not be achieved. For example, "grid" methods (defined below) that
- create a logical 3d grid cannot achieve perfect balance for many
- irregular distributions of particles. Likewise, if a portion of the
- system is a perfect lattice, e.g. the intiial system is generated by
- the :doc:`create_atoms <create_atoms>` command, then "grid" methods may
- be unable to achieve exact balance. This is because entire lattice
- planes will be owned or not owned by a single processor.
-
-.. note::
-
- The imbalance factor is also an estimate of the maximum speed-up
- you can hope to achieve by running a perfectly balanced simulation
- versus an imbalanced one. In the example above, the 10000 particle
- simulation could run up to 20% faster if it were perfectly balanced,
- versus when imbalanced. However, computational cost is not strictly
- proportional to particle count, and changing the relative size and
- shape of processor sub-domains may lead to additional computational
- and communication overheads, e.g. in the PPPM solver used via the
- :doc:`kspace_style <kspace_style>` command. Thus you should benchmark
- the run times of a simulation before and after balancing.
-
-
-----------
-
-
-The method used to perform a load balance is specified by one of the
-listed styles (or more in the case of *x*\ ,\ *y*\ ,\ *z*\ ), which are
-described in detail below. There are 2 kinds of styles.
-
-The *x*\ , *y*\ , *z*\ , and *shift* styles are "grid" methods which produce
-a logical 3d grid of processors. They operate by changing the cutting
-planes (or lines) between processors in 3d (or 2d), to adjust the
-volume (area in 2d) assigned to each processor, as in the following 2d
-diagram where processor sub-domains are shown and atoms are colored by
-the processor that owns them. The leftmost diagram is the default
-partitioning of the simulation box across processors (one sub-box for
-each of 16 processors); the middle diagram is after a "grid" method
-has been applied.
-
-.. thumbnail:: JPG/balance_uniform.jpg
- :align: center
-.. thumbnail:: JPG/balance_nonuniform.jpg
- :align: center
-.. thumbnail:: JPG/balance_rcb.jpg
- :align: center
-The *rcb* style is a "tiling" method which does not produce a logical
-3d grid of processors. Rather it tiles the simulation domain with
-rectangular sub-boxes of varying size and shape in an irregular
-fashion so as to have equal numbers of particles in each sub-box, as
-in the rightmost diagram above.
-
-The "grid" methods can be used with either of the
-:doc:`comm_style <comm_style>` command options, *brick* or *tiled*\ . The
-"tiling" methods can only be used with :doc:`comm_style tiled <comm_style>`. Note that it can be useful to use a "grid"
-method with :doc:`comm_style tiled <comm_style>` to return the domain
-partitioning to a logical 3d grid of processors so that "comm_style
-brick" can afterwords be specified for subsequent :doc:`run <run>`
-commands.
-
-When a "grid" method is specified, the current domain partitioning can
-be either a logical 3d grid or a tiled partitioning. In the former
-case, the current logical 3d grid is used as a starting point and
-changes are made to improve the imbalance factor. In the latter case,
-the tiled partitioning is discarded and a logical 3d grid is created
-with uniform spacing in all dimensions. This becomes the starting
-point for the balancing operation.
-
-When a "tiling" method is specified, the current domain partitioning
-("grid" or "tiled") is ignored, and a new partitioning is computed
-from scratch.
-
-
-----------
-
-
-The *x*\ , *y*\ , and *z* styles invoke a "grid" method for balancing, as
-described above. Note that any or all of these 3 styles can be
-specified together, one after the other, but they cannot be used with
-any other style. This style adjusts the position of cutting planes
-between processor sub-domains in specific dimensions. Only the
-specified dimensions are altered.
-
-The *uniform* argument spaces the planes evenly, as in the left
-diagrams above. The *numeric* argument requires listing Ps-1 numbers
-that specify the position of the cutting planes. This requires
-knowing Ps = Px or Py or Pz = the number of processors assigned by
-LAMMPS to the relevant dimension. This assignment is made (and the
-Px, Py, Pz values printed out) when the simulation box is created by
-the "create_box" or "read_data" or "read_restart" command and is
-influenced by the settings of the :doc:`processors <processors>`
-command.
-
-Each of the numeric values must be between 0 and 1, and they must be
-listed in ascending order. They represent the fractional position of
-the cutting place. The left (or lower) edge of the box is 0.0, and
-the right (or upper) edge is 1.0. Neither of these values is
-specified. Only the interior Ps-1 positions are specified. Thus is
-there are 2 procesors in the x dimension, you specify a single value
-such as 0.75, which would make the left processor's sub-domain 3x
-larger than the right processor's sub-domain.
-
-
-----------
-
-
-The *shift* style invokes a "grid" method for balancing, as
-described above. It changes the positions of cutting planes between
-processors in an iterative fashion, seeking to reduce the imbalance
-factor, similar to how the :doc:`fix balance shift <fix_balance>`
-command operates.
-
-The *dimstr* argument is a string of characters, each of which must be
-an "x" or "y" or "z". Eacn character can appear zero or one time,
-since there is no advantage to balancing on a dimension more than
-once. You should normally only list dimensions where you expect there
-to be a density variation in the particles.
-
-Balancing proceeds by adjusting the cutting planes in each of the
-dimensions listed in *dimstr*\ , one dimension at a time. For a single
-dimension, the balancing operation (described below) is iterated on up
-to *Niter* times. After each dimension finishes, the imbalance factor
-is re-computed, and the balancing operation halts if the *stopthresh*
-criterion is met.
-
-A rebalance operation in a single dimension is performed using a
-recursive multisectioning algorithm, where the position of each
-cutting plane (line in 2d) in the dimension is adjusted independently.
-This is similar to a recursive bisectioning for a single value, except
-that the bounds used for each bisectioning take advantage of
-information from neighboring cuts if possible. At each iteration, the
-count of particles on either side of each plane is tallied. If the
-counts do not match the target value for the plane, the position of
-the cut is adjusted to be halfway between a low and high bound. The
-low and high bounds are adjusted on each iteration, using new count
-information, so that they become closer together over time. Thus as
-the recustion progresses, the count of particles on either side of the
-plane gets closer to the target value.
-
-Once the rebalancing is complete and final processor sub-domains
-assigned, particles are migrated to their new owning processor, and
-the balance procedure ends.
-
-.. note::
-
- At each rebalance operation, the bisectioning for each cutting
- plane (line in 2d) typcially starts with low and high bounds separated
- by the extent of a processor's sub-domain in one dimension. The size
- of this bracketing region shrinks by 1/2 every iteration. Thus if
- *Niter* is specified as 10, the cutting plane will typically be
- positioned to 1 part in 1000 accuracy (relative to the perfect target
- position). For *Niter* = 20, it will be accurate to 1 part in a
- million. Thus there is no need ot set *Niter* to a large value.
- LAMMPS will check if the threshold accuracy is reached (in a
- dimension) is less iterations than *Niter* and exit early. However,
- *Niter* should also not be set too small, since it will take roughly
- the same number of iterations to converge even if the cutting plane is
- initially close to the target value.
-
-
-----------
-
-
-The *rcb* style invokes a "tiled" method for balancing, as described
-above. It performs a recursive coordinate bisectioning (RCB) of the
-simulation domain. The basic idea is as follows.
-
-The simulation domain is cut into 2 boxes by an axis-aligned cut in
-the longest dimension, leaving one new box on either side of the cut.
-All the processors are also partitioned into 2 groups, half assigned
-to the box on the lower side of the cut, and half to the box on the
-upper side. (If the processor count is odd, one side gets an extra
-processor.) The cut is positioned so that the number of atoms in the
-lower box is exactly the number that the processors assigned to that
-box should own for load balance to be perfect. This also makes load
-balance for the upper box perfect. The positioning is done
-iteratively, by a bisectioning method. Note that counting atoms on
-either side of the cut requires communication between all processors
-at each iteration.
-
-That is the procedure for the first cut. Subsequent cuts are made
-recursively, in exactly the same manner. The subset of processors
-assigned to each box make a new cut in the longest dimension of that
-box, splitting the box, the subset of processsors, and the atoms in
-the box in two. The recursion continues until every processor is
-assigned a sub-box of the entire simulation domain, and owns the atoms
-in that sub-box.
-
-
-----------
-
-
-The *out* keyword writes a text file to the specified *filename* with
-the results of the balancing operation. The file contains the bounds
-of the sub-domain for each processor after the balancing operation
-completes. The format of the file is compatible with the
-`Pizza.py <pizza>`_ *mdump* tool which has support for manipulating and
-visualizing mesh files. An example is shown here for a balancing by 4
-processors for a 2d problem:
-
-.. parsed-literal::
-
- ITEM: TIMESTEP
- 0
- ITEM: NUMBER OF NODES
- 16
- ITEM: BOX BOUNDS
- 0 10
- 0 10
- 0 10
- ITEM: NODES
- 1 1 0 0 0
- 2 1 5 0 0
- 3 1 5 5 0
- 4 1 0 5 0
- 5 1 5 0 0
- 6 1 10 0 0
- 7 1 10 5 0
- 8 1 5 5 0
- 9 1 0 5 0
- 10 1 5 5 0
- 11 1 5 10 0
- 12 1 10 5 0
- 13 1 5 5 0
- 14 1 10 5 0
- 15 1 10 10 0
- 16 1 5 10 0
- ITEM: TIMESTEP
- 0
- ITEM: NUMBER OF SQUARES
- 4
- ITEM: SQUARES
- 1 1 1 2 3 4
- 2 1 5 6 7 8
- 3 1 9 10 11 12
- 4 1 13 14 15 16
-
-The coordinates of all the vertices are listed in the NODES section, 5
-per processor. Note that the 4 sub-domains share vertices, so there
-will be duplicate nodes in the list.
-
-The "SQUARES" section lists the node IDs of the 4 vertices in a
-rectangle for each processor (1 to 4).
-
-For a 3d problem, the syntax is similar with 8 vertices listed for
-each processor, instead of 4, and "SQUARES" replaced by "CUBES".
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-For 2d simulations, the *z* style cannot be used. Nor can a "z"
-appear in *dimstr* for the *shift* style.
-
-Related commands
-""""""""""""""""
-
-:doc:`processors <processors>`, :doc:`fix balance <fix_balance>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/body.txt b/doc/html/_sources/body.txt
deleted file mode 100644
index fcbb0c686..000000000
--- a/doc/html/_sources/body.txt
+++ /dev/null
@@ -1,301 +0,0 @@
-Body particles
-==============
-
-**Overview:**
-
-This doc page is not about a LAMMPS input script command, but about
-body particles, which are generalized finite-size particles.
-Individual body particles can represent complex entities, such as
-surface meshes of discrete points, collections of sub-particles,
-deformable objects, etc. Note that other kinds of finite-size
-spherical and aspherical particles are also supported by LAMMPS, such
-as spheres, ellipsoids, line segments, and triangles, but they are
-simpler entities that body particles. See :ref:`Section_howto 14 <howto_14>` for a general overview of all these
-particle types.
-
-Body particles are used via the :doc:`atom_style body <atom_style>`
-command. It takes a body style as an argument. The current body
-styles supported by LAMMPS are as follows. The name in the first
-column is used as the *bstyle* argument for the :doc:`atom_style body <atom_style>` command.
-
-+-------------------+-----------------------------------+
-| *nparticle* | rigid body with N sub-particles |
-+-------------------+-----------------------------------+
-| *rounded/polygon* | 2d convex polygon with N vertices |
-+-------------------+-----------------------------------+
-
-The body style determines what attributes are stored for each body and
-thus how they can be used to compute pairwise body/body or
-bond/non-body (point particle) interactions. More details of each
-style are described below.
-
-.. note::
-
- The rounded/polygon style listed in the table above and
- described below has not yet been relesed in LAMMPS. It will be soon.
-
-We hope to add more styles in the future. See :ref:`Section_modify 12 <mod_12>` for details on how to add a new body
-style to the code.
-
-
-----------
-
-
-**When to use body particles:**
-
-You should not use body particles to model a rigid body made of
-simpler particles (e.g. point, sphere, ellipsoid, line segment,
-triangular particles), if the interaction between pairs of rigid
-bodies is just the summation of pairwise interactions between the
-simpler particles. LAMMPS already supports this kind of model via the
-:doc:`fix rigid <fix_rigid>` command. Any of the numerous pair styles
-that compute interactions between simpler particles can be used. The
-:doc:`fix rigid <fix_rigid>` command time integrates the motion of the
-rigid bodies. All of the standard LAMMPS commands for thermostatting,
-adding constraints, performing output, etc will operate as expected on
-the simple particles.
-
-By contrast, when body particles are used, LAMMPS treats an entire
-body as a single particle for purposes of computing pairwise
-interactions, building neighbor lists, migrating particles between
-processors, outputting particles to a dump file, etc. This means that
-interactions between pairs of bodies or between a body and non-body
-(point) particle need to be encoded in an appropriate pair style. If
-such a pair style were to mimic the :doc:`fix rigid <fix_rigid>` model,
-it would need to loop over the entire collection of interactions
-between pairs of simple particles within the two bodies, each time a
-single body/body interaction was computed.
-
-Thus it only makes sense to use body particles and develop such a pair
-style, when particle/particle interactions are more complex than what
-the :doc:`fix rigid <fix_rigid>` command can already calculate. For
-example, if particles have one or more of the following attributes:
-
-* represented by a surface mesh
-* represented by a collection of geometric entities (e.g. planes + spheres)
-* deformable
-* internal stress that induces fragmentation
-
-then the interaction between pairs of particles is likely to be more
-complex than the summation of simple sub-particle interactions. An
-example is contact or frictional forces between particles with planar
-sufaces that inter-penetrate.
-
-These are additional LAMMPS commands that can be used with body
-particles of different styles
-
-+------------------------------------------------+-----------------------------------------------------+
-| :doc:`fix nve/body <fix_nve_body>` | integrate motion of a body particle in NVE ensemble |
-+------------------------------------------------+-----------------------------------------------------+
-| :doc:`fix nvt/body <fix_nvt_body>` | ditto for NVT ensemble |
-+------------------------------------------------+-----------------------------------------------------+
-| :doc:`fix npt/body <fix_npt_body>` | ditto for NPT ensemble |
-+------------------------------------------------+-----------------------------------------------------+
-| :doc:`fix nph/body <fix_nph_body>` | ditto for NPH ensemble |
-+------------------------------------------------+-----------------------------------------------------+
-| :doc:`compute body/local <compute_body_local>` | store sub-particle attributes of a body particle |
-+------------------------------------------------+-----------------------------------------------------+
-| :doc:`compute temp/body <compute_temp_body>` | compute temperature of body particles |
-+------------------------------------------------+-----------------------------------------------------+
-| :doc:`dump local <dump>` | output sub-particle attributes of a body particle |
-+------------------------------------------------+-----------------------------------------------------+
-| :doc:`dump image <dump_image>` | output body particle attributes as an image |
-+------------------------------------------------+-----------------------------------------------------+
-
-The pair styles defined for use with specific body styles are listed
-in the sections below.
-
-
-----------
-
-
-**Specifics of body style nparticle:**
-
-The *nparticle* body style represents body particles as a rigid body
-with a variable number N of sub-particles. It is provided as a
-vanillia, prototypical example of a body particle, although as
-mentioned above, the :doc:`fix rigid <fix_rigid>` command already
-duplicates its functionality.
-
-The atom_style body command for this body style takes two additional
-arguments:
-
-.. parsed-literal::
-
- atom_style body nparticle Nmin Nmax
- Nmin = minimum # of sub-particles in any body in the system
- Nmax = maximum # of sub-particles in any body in the system
-
-The Nmin and Nmax arguments are used to bound the size of data
-structures used internally by each particle.
-
-When the :doc:`read_data <read_data>` command reads a data file for this
-body style, the following information must be provided for each entry
-in the *Bodies* section of the data file:
-
-.. parsed-literal::
-
- atom-ID 1 M
- N
- ixx iyy izz ixy ixz iyz
- x1 y1 z1
- ...
- xN yN zN
-
-N is the number of sub-particles in the body particle. M = 6 + 3*N.
-The integer line has a single value N. The floating point line(s)
-list 6 moments of inertia followed by the coordinates of the N
-sub-particles (x1 to zN) as 3N values. These values can be listed on
-as many lines as you wish; see the :doc:`read_data <read_data>` command
-for more details.
-
-The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz) should be the
-values consistent with the current orientation of the rigid body
-around its center of mass. The values are with respect to the
-simulation box XYZ axes, not with respect to the prinicpal axes of the
-rigid body itself. LAMMPS performs the latter calculation internally.
-The coordinates of each sub-particle are specified as its x,y,z
-displacement from the center-of-mass of the body particle. The
-center-of-mass position of the particle is specified by the x,y,z
-values in the *Atoms* section of the data file, as is the total mass
-of the body particle.
-
-The :doc:`pair_style body <pair_body>` command can be used with this
-body style to compute body/body and body/non-body interactions.
-
-For output purposes via the :doc:`compute body/local <compute_body_local>` and :doc:`dump local <dump>`
-commands, this body style produces one datum for each of the N
-sub-particles in a body particle. The datum has 3 values:
-
-.. parsed-literal::
-
- 1 = x position of sub-particle
- 2 = y position of sub-particle
- 3 = z position of sub-particle
-
-These values are the current position of the sub-particle within the
-simulation domain, not a displacement from the center-of-mass (COM) of
-the body particle itself. These values are calculated using the
-current COM and orientation of the body particle.
-
-For images created by the :doc:`dump image <dump_image>` command, if the
-*body* keyword is set, then each body particle is drawn as a
-collection of spheres, one for each sub-particle. The size of each
-sphere is determined by the *bflag1* parameter for the *body* keyword.
-The *bflag2* argument is ignored.
-
-
-----------
-
-
-**Specifics of body style rounded/polygon:**
-
-The *rounded/polygon* body style represents body particles as a convex
-polygon with a variable number N > 2 of vertices, which can only be
-used for 2d models. One example use of this body style is for 2d
-discrete element models, as described in :ref:`Fraige <Fraige>`. Similar to
-body style *nparticle*\ , the atom_style body command for this body
-style takes two additional arguments:
-
-.. parsed-literal::
-
- atom_style body rounded/polygon Nmin Nmax
- Nmin = minimum # of vertices in any body in the system
- Nmax = maximum # of vertices in any body in the system
-
-The Nmin and Nmax arguments are used to bound the size of data
-structures used internally by each particle.
-
-When the :doc:`read_data <read_data>` command reads a data file for this
-body style, the following information must be provided for each entry
-in the *Bodies* section of the data file:
-
-.. parsed-literal::
-
- atom-ID 1 M
- N
- ixx iyy izz ixy ixz iyz
- x1 y1 z1
- ...
- xN yN zN
- i j j k k ...
- radius
-
-N is the number of vertices in the body particle. M = 6 + 3*N + 2*N +
-1. The integer line has a single value N. The floating point line(s)
-list 6 moments of inertia followed by the coordinates of the N
-vertices (x1 to zN) as 3N values, followed by 2N vertex indices
-corresponding to the end points of the N edges, followed by a single
-radius value = the smallest circle encompassing the polygon. That
-last value is used to facilitate the body/body contact detection.
-These floating-point values can be listed on as many lines as you
-wish; see the :doc:`read_data <read_data>` command for more details.
-
-The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz) should be the
-values consistent with the current orientation of the rigid body
-around its center of mass. The values are with respect to the
-simulation box XYZ axes, not with respect to the prinicpal axes of the
-rigid body itself. LAMMPS performs the latter calculation internally.
-The coordinates of each vertex are specified as its x,y,z displacement
-from the center-of-mass of the body particle. The center-of-mass
-position of the particle is specified by the x,y,z values in the
-*Atoms* section of the data file.
-
-For example, the following information would specify a square
-particles whose edge length is sqrt(2):
-
-.. parsed-literal::
-
- 3 1 27
- 4
- 1 1 4 0 0 0
- -0.7071 -0.7071 0
- -0.7071 0.7071 0
- 0.7071 0.7071 0
- 0.7071 -0.7071 0
- 0 1 1 2 2 3 3 0
- 1.0
-
-The :doc:`pair_style body/rounded/polygon <pair_body_rounded_polygon>` command
-can be used with this body style to compute body/body interactions.
-
-For output purposes via the :doc:`compute body/local <compute_body_local>` and :doc:`dump local <dump>`
-commands, this body style produces one datum for each of the N
-sub-particles in a body particle. The datum has 3 values:
-
-.. parsed-literal::
-
- 1 = x position of vertex
- 2 = y position of vertex
- 3 = z position of vertex
-
-These values are the current position of the vertex within the
-simulation domain, not a displacement from the center-of-mass (COM) of
-the body particle itself. These values are calculated using the
-current COM and orientation of the body particle.
-
-For images created by the :doc:`dump image <dump_image>` command, if the
-*body* keyword is set, then each body particle is drawn as a convex
-polygon consisting of N line segments. Note that the line segments
-are drawn between the N vertices, which does not correspond exactly to
-the physical extent of the body (because the `pair_style rounded/polygon <pair_body_rounded_polygon.cpp>`_ defines finite-size
-spheres at those point and the line segments between the spheres are
-tangent to the spheres). The drawn diameter of each line segment is
-determined by the *bflag1* parameter for the *body* keyword. The
-*bflag2* argument is ignored.
-
-
-----------
-
-
-.. _Fraige:
-
-
-
-**(Fraige)** F. Y. Fraige, P. A. Langston, A. J. Matchett, J. Dodds,
-Particuology, 6, 455 (2008).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_class2.txt b/doc/html/_sources/bond_class2.txt
deleted file mode 100644
index 1d5f78bd4..000000000
--- a/doc/html/_sources/bond_class2.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-.. index:: bond_style class2
-
-bond_style class2 command
-=========================
-
-bond_style class2/omp command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style class2
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style class2
- bond_coeff 1 1.0 100.0 80.0 80.0
-
-Description
-"""""""""""
-
-The *class2* bond style uses the potential
-
-.. image:: Eqs/bond_class2.jpg
- :align: center
-
-where r0 is the equilibrium bond distance.
-
-See :ref:`(Sun) <bond-Sun>` for a description of the COMPASS class2 force field.
-
-The following coefficients must be defined for each bond type via the
-:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* R0 (distance)
-* K2 (energy/distance^2)
-* K3 (energy/distance^3)
-* K4 (energy/distance^4)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This bond style can only be used if LAMMPS was built with the CLASS2
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
-
-**Default:** none
-
-
-----------
-
-
-.. _bond-Sun:
-
-
-
-**(Sun)** Sun, J Phys Chem B 102, 7338-7364 (1998).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_coeff.txt b/doc/html/_sources/bond_coeff.txt
deleted file mode 100644
index a57efc4e3..000000000
--- a/doc/html/_sources/bond_coeff.txt
+++ /dev/null
@@ -1,112 +0,0 @@
-.. index:: bond_coeff
-
-bond_coeff command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_coeff N args
-
-* N = bond type (see asterisk form below)
-* args = coefficients for one or more bond types
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_coeff 5 80.0 1.2
- bond_coeff * 30.0 1.5 1.0 1.0
- bond_coeff 1*4 30.0 1.5 1.0 1.0
- bond_coeff 1 harmonic 200.0 1.0
-
-Description
-"""""""""""
-
-Specify the bond force field coefficients for one or more bond types.
-The number and meaning of the coefficients depends on the bond style.
-Bond coefficients can also be set in the data file read by the
-:doc:`read_data <read_data>` command or in a restart file.
-
-N can be specified in one of two ways. An explicit numeric value can
-be used, as in the 1st example above. Or a wild-card asterisk can be
-used to set the coefficients for multiple bond types. This takes the
-form "*" or "*n" or "n*" or "m*n". If N = the number of bond types,
-then an asterisk with no numeric values means all types from 1 to N. A
-leading asterisk means all types from 1 to n (inclusive). A trailing
-asterisk means all types from n to N (inclusive). A middle asterisk
-means all types from m to n (inclusive).
-
-Note that using a bond_coeff command can override a previous setting
-for the same bond type. For example, these commands set the coeffs
-for all bond types, then overwrite the coeffs for just bond type 2:
-
-.. parsed-literal::
-
- bond_coeff * 100.0 1.2
- bond_coeff 2 200.0 1.2
-
-A line in a data file that specifies bond coefficients uses the exact
-same format as the arguments of the bond_coeff command in an input
-script, except that wild-card asterisks should not be used since
-coefficients for all N types must be listed in the file. For example,
-under the "Bond Coeffs" section of a data file, the line that
-corresponds to the 1st example above would be listed as
-
-.. parsed-literal::
-
- 5 80.0 1.2
-
-
-----------
-
-
-Here is an alphabetic list of bond styles defined in LAMMPS. Click on
-the style to display the formula it computes and coefficients
-specified by the associated :doc:`bond_coeff <bond_coeff>` command.
-
-Note that here are also additional bond styles submitted by users
-which are included in the LAMMPS distribution. The list of these with
-links to the individual styles are given in the bond section of :ref:`this page <cmd_5>`.
-
-* :doc:`bond_style none <bond_none>` - turn off bonded interactions
-* :doc:`bond_style hybrid <bond_hybrid>` - define multiple styles of bond interactions
-
-* :doc:`bond_style class2 <bond_class2>` - COMPASS (class 2) bond
-* :doc:`bond_style fene <bond_fene>` - FENE (finite-extensible non-linear elastic) bond
-* :doc:`bond_style fene/expand <bond_fene_expand>` - FENE bonds with variable size particles
-* :doc:`bond_style harmonic <bond_harmonic>` - harmonic bond
-* :doc:`bond_style morse <bond_morse>` - Morse bond
-* :doc:`bond_style nonlinear <bond_nonlinear>` - nonlinear bond
-* :doc:`bond_style quartic <bond_quartic>` - breakable quartic bond
-* :doc:`bond_style table <bond_table>` - tabulated by bond length
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command must come after the simulation box is defined by a
-:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`, or
-:doc:`create_box <create_box>` command.
-
-A bond style must be defined before any bond coefficients are set,
-either in the input script or in a data file.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_style <bond_style>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_fene.txt b/doc/html/_sources/bond_fene.txt
deleted file mode 100644
index 7e10c63a1..000000000
--- a/doc/html/_sources/bond_fene.txt
+++ /dev/null
@@ -1,112 +0,0 @@
-.. index:: bond_style fene
-
-bond_style fene command
-=======================
-
-bond_style fene/intel command
-=============================
-
-bond_style fene/kk command
-==========================
-
-bond_style fene/omp command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style fene
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style fene
- bond_coeff 1 30.0 1.5 1.0 1.0
-
-Description
-"""""""""""
-
-The *fene* bond style uses the potential
-
-.. image:: Eqs/bond_fene.jpg
- :align: center
-
-to define a finite extensible nonlinear elastic (FENE) potential
-:ref:`(Kremer) <fene-Kremer>`, used for bead-spring polymer models. The first
-term is attractive, the 2nd Lennard-Jones term is repulsive. The
-first term extends to R0, the maximum extent of the bond. The 2nd
-term is cutoff at 2^(1/6) sigma, the minimum of the LJ potential.
-
-The following coefficients must be defined for each bond type via the
-:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy/distance^2)
-* R0 (distance)
-* epsilon (energy)
-* sigma (distance)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This bond style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-You typically should specify `special_bonds fene <special_bonds.html">`_
-or :doc:`special_bonds lj/coul 0 1 1 <special_bonds>` to use this bond
-style. LAMMPS will issue a warning it that's not the case.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
-
-**Default:** none
-
-
-----------
-
-
-.. _fene-Kremer:
-
-
-
-**(Kremer)** Kremer, Grest, J Chem Phys, 92, 5057 (1990).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_fene_expand.txt b/doc/html/_sources/bond_fene_expand.txt
deleted file mode 100644
index 6ec731421..000000000
--- a/doc/html/_sources/bond_fene_expand.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-.. index:: bond_style fene/expand
-
-bond_style fene/expand command
-==============================
-
-bond_style fene/expand/omp command
-==================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style fene/expand
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style fene/expand
- bond_coeff 1 30.0 1.5 1.0 1.0 0.5
-
-Description
-"""""""""""
-
-The *fene/expand* bond style uses the potential
-
-.. image:: Eqs/bond_fene_expand.jpg
- :align: center
-
-to define a finite extensible nonlinear elastic (FENE) potential
-:ref:`(Kremer) <feneexpand-Kremer>`, used for bead-spring polymer models. The first
-term is attractive, the 2nd Lennard-Jones term is repulsive.
-
-The *fene/expand* bond style is similar to *fene* except that an extra
-shift factor of delta (positive or negative) is added to *r* to
-effectively change the bead size of the bonded atoms. The first term
-now extends to R0 + delta and the 2nd term is cutoff at 2^(1/6) sigma
-+ delta.
-
-The following coefficients must be defined for each bond type via the
-:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy/distance^2)
-* R0 (distance)
-* epsilon (energy)
-* sigma (distance)
-* delta (distance)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This bond style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-You typically should specify `special_bonds fene <special_bonds.html">`_
-or :doc:`special_bonds lj/coul 0 1 1 <special_bonds>` to use this bond
-style. LAMMPS will issue a warning it that's not the case.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
-
-**Default:** none
-
-
-----------
-
-
-.. _feneexpand-Kremer:
-
-
-
-**(Kremer)** Kremer, Grest, J Chem Phys, 92, 5057 (1990).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_harmonic.txt b/doc/html/_sources/bond_harmonic.txt
deleted file mode 100644
index 088f01d16..000000000
--- a/doc/html/_sources/bond_harmonic.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-.. index:: bond_style harmonic
-
-bond_style harmonic command
-===========================
-
-bond_style harmonic/intel command
-=================================
-
-bond_style harmonic/kk command
-==============================
-
-bond_style harmonic/omp command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style harmonic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style harmonic
- bond_coeff 5 80.0 1.2
-
-Description
-"""""""""""
-
-The *harmonic* bond style uses the potential
-
-.. image:: Eqs/bond_harmonic.jpg
- :align: center
-
-where r0 is the equilibrium bond distance. Note that the usual 1/2
-factor is included in K.
-
-The following coefficients must be defined for each bond type via the
-:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy/distance^2)
-* r0 (distance)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This bond style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_harmonic_shift.txt b/doc/html/_sources/bond_harmonic_shift.txt
deleted file mode 100644
index a1e7ee16b..000000000
--- a/doc/html/_sources/bond_harmonic_shift.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-.. index:: bond_style harmonic/shift
-
-bond_style harmonic/shift command
-=================================
-
-bond_style harmonic/shift/omp command
-=====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style harmonic/shift
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style harmonic/shift
- bond_coeff 5 10.0 0.5 1.0
-
-Description
-"""""""""""
-
-The *harmonic/shift* bond style is a shifted harmonic bond that uses
-the potential
-
-.. image:: Eqs/bond_harmonic_shift.jpg
- :align: center
-
-where r0 is the equilibrium bond distance, and rc the critical distance.
-The potential is -Umin at r0 and zero at rc. The spring constant is
-k = Umin / [ 2 (r0-rc)^2].
-
-The following coefficients must be defined for each bond type via the
-:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* Umin (energy)
-
-* r0 (distance)
-
-* rc (distance)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This bond style can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`,
-:doc:`bond_harmonic <bond_harmonic>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_harmonic_shift_cut.txt b/doc/html/_sources/bond_harmonic_shift_cut.txt
deleted file mode 100644
index 044c655d1..000000000
--- a/doc/html/_sources/bond_harmonic_shift_cut.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-.. index:: bond_style harmonic/shift/cut
-
-bond_style harmonic/shift/cut command
-=====================================
-
-bond_style harmonic/shift/cut/omp command
-=========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style harmonic/shift/cut
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style harmonic/shift/cut
- bond_coeff 5 10.0 0.5 1.0
-
-Description
-"""""""""""
-
-The *harmonic/shift/cut* bond style is a shifted harmonic bond that
-uses the potential
-
-.. image:: Eqs/bond_harmonic_shift_cut.jpg
- :align: center
-
-where r0 is the equilibrium bond distance, and rc the critical distance.
-The bond potential is zero for distances r > rc. The potential is -Umin
-at r0 and zero at rc. The spring constant is k = Umin / [ 2 (r0-rc)^2].
-
-The following coefficients must be defined for each bond type via the
-:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* Umin (energy)
-* r0 (distance)
-* rc (distance)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This bond style can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`,
-:doc:`bond_harmonic <bond_harmonic>`,
-:doc:`bond_harmonic_shift <bond_harmonic_shift>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_hybrid.txt b/doc/html/_sources/bond_hybrid.txt
deleted file mode 100644
index a07e051db..000000000
--- a/doc/html/_sources/bond_hybrid.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-.. index:: bond_style hybrid
-
-bond_style hybrid command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style hybrid style1 style2 ...
-
-* style1,style2 = list of one or more bond styles
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style hybrid harmonic fene
- bond_coeff 1 harmonic 80.0 1.2
- bond_coeff 2* fene 30.0 1.5 1.0 1.0
-
-Description
-"""""""""""
-
-The *hybrid* style enables the use of multiple bond styles in one
-simulation. A bond style is assigned to each bond type. For example,
-bonds in a polymer flow (of bond type 1) could be computed with a
-*fene* potential and bonds in the wall boundary (of bond type 2) could
-be computed with a *harmonic* potential. The assignment of bond type
-to style is made via the :doc:`bond_coeff <bond_coeff>` command or in
-the data file.
-
-In the bond_coeff commands, the name of a bond style must be added
-after the bond type, with the remaining coefficients being those
-appropriate to that style. In the example above, the 2 bond_coeff
-commands set bonds of bond type 1 to be computed with a *harmonic*
-potential with coefficients 80.0, 1.2 for K, r0. All other bond types
-(2-N) are computed with a *fene* potential with coefficients 30.0,
-1.5, 1.0, 1.0 for K, R0, epsilon, sigma.
-
-If bond coefficients are specified in the data file read via the
-:doc:`read_data <read_data>` command, then the same rule applies.
-E.g. "harmonic" or "fene" must be added after the bond type, for each
-line in the "Bond Coeffs" section, e.g.
-
-.. parsed-literal::
-
- Bond Coeffs
-
-.. parsed-literal::
-
- 1 harmonic 80.0 1.2
- 2 fene 30.0 1.5 1.0 1.0
- ...
-
-A bond style of *none* with no additional coefficients can be used in
-place of a bond style, either in a input script bond_coeff command or
-in the data file, if you desire to turn off interactions for specific
-bond types.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This bond style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Unlike other bond styles, the hybrid bond style does not store bond
-coefficient info for individual sub-styles in a :doc:`binary restart files <restart>`. Thus when retarting a simulation from a restart
-file, you need to re-specify bond_coeff commands.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_morse.txt b/doc/html/_sources/bond_morse.txt
deleted file mode 100644
index 4e83e015c..000000000
--- a/doc/html/_sources/bond_morse.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-.. index:: bond_style morse
-
-bond_style morse command
-========================
-
-bond_style morse/omp command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style morse
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style morse
- bond_coeff 5 1.0 2.0 1.2
-
-Description
-"""""""""""
-
-The *morse* bond style uses the potential
-
-.. image:: Eqs/bond_morse.jpg
- :align: center
-
-where r0 is the equilibrium bond distance, alpha is a stiffness
-parameter, and D determines the depth of the potential well.
-
-The following coefficients must be defined for each bond type via the
-:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* D (energy)
-* alpha (inverse distance)
-* r0 (distance)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This bond style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_none.txt b/doc/html/_sources/bond_none.txt
deleted file mode 100644
index ca330a4bc..000000000
--- a/doc/html/_sources/bond_none.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-.. index:: bond_style none
-
-bond_style none command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style none
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style none
-
-Description
-"""""""""""
-
-Using a bond style of none means bond forces and energies are not
-computed, even if pairs of bonded atoms were listed in the data file
-read by the :doc:`read_data <read_data>` command.
-
-See the :doc:`bond_style zero <bond_zero>` command for a way to
-calculate bond statistics, but compute no bond interactions.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-:doc:`bond_style zero <bond_zero>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_nonlinear.txt b/doc/html/_sources/bond_nonlinear.txt
deleted file mode 100644
index c313b26d2..000000000
--- a/doc/html/_sources/bond_nonlinear.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-.. index:: bond_style nonlinear
-
-bond_style nonlinear command
-============================
-
-bond_style nonlinear/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style nonlinear
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style nonlinear
- bond_coeff 2 100.0 1.1 1.4
-
-Description
-"""""""""""
-
-The *nonlinear* bond style uses the potential
-
-.. image:: Eqs/bond_nonlinear.jpg
- :align: center
-
-to define an anharmonic spring :ref:`(Rector) <Rector>` of equilibrium
-length r0 and maximum extension lamda.
-
-The following coefficients must be defined for each bond type via the
-:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* epsilon (energy)
-* r0 (distance)
-* lamda (distance)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This bond style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Rector:
-
-
-
-**(Rector)** Rector, Van Swol, Henderson, Molecular Physics, 82, 1009 (1994).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_quartic.txt b/doc/html/_sources/bond_quartic.txt
deleted file mode 100644
index 60c3ca3a2..000000000
--- a/doc/html/_sources/bond_quartic.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-.. index:: bond_style quartic
-
-bond_style quartic command
-==========================
-
-bond_style quartic/omp command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style quartic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style quartic
- bond_coeff 2 1200 -0.55 0.25 1.3 34.6878
-
-Description
-"""""""""""
-
-The *quartic* bond style uses the potential
-
-.. image:: Eqs/bond_quartic.jpg
- :align: center
-
-to define a bond that can be broken as the simulation proceeds (e.g.
-due to a polymer being stretched). The sigma and epsilon used in the
-LJ portion of the formula are both set equal to 1.0 by LAMMPS.
-
-The following coefficients must be defined for each bond type via the
-:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy/distance^4)
-* B1 (distance)
-* B2 (distance)
-* Rc (distance)
-* U0 (energy)
-
-This potential was constructed to mimic the FENE bond potential for
-coarse-grained polymer chains. When monomers with sigma = epsilon =
-1.0 are used, the following choice of parameters gives a quartic
-potential that looks nearly like the FENE potential: K = 1200, B1 =
--0.55, B2 = 0.25, Rc = 1.3, and U0 = 34.6878. Different parameters
-can be specified using the :doc:`bond_coeff <bond_coeff>` command, but
-you will need to choose them carefully so they form a suitable bond
-potential.
-
-Rc is the cutoff length at which the bond potential goes smoothly to a
-local maximum. If a bond length ever becomes > Rc, LAMMPS "breaks"
-the bond, which means two things. First, the bond potential is turned
-off by setting its type to 0, and is no longer computed. Second, a
-pairwise interaction between the two atoms is turned on, since they
-are no longer bonded.
-
-LAMMPS does the second task via a computational sleight-of-hand. It
-subtracts the pairwise interaction as part of the bond computation.
-When the bond breaks, the subtraction stops. For this to work, the
-pairwise interaction must always be computed by the
-:doc:`pair_style <pair_style>` command, whether the bond is broken or
-not. This means that :doc:`special_bonds <special_bonds>` must be set
-to 1,1,1, as indicated as a restriction below.
-
-Note that when bonds are dumped to a file via the :doc:`dump local <dump>` command, bonds with type 0 are not included. The
-:doc:`delete_bonds <delete_bonds>` command can also be used to query the
-status of broken bonds or permanently delete them, e.g.:
-
-.. parsed-literal::
-
- delete_bonds all stats
- delete_bonds all bond 0 remove
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This bond style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-The *quartic* style requires that :doc:`special_bonds <special_bonds>`
-parameters be set to 1,1,1. Three- and four-body interactions (angle,
-dihedral, etc) cannot be used with *quartic* bonds.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_style.txt b/doc/html/_sources/bond_style.txt
deleted file mode 100644
index 7182ee064..000000000
--- a/doc/html/_sources/bond_style.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-.. index:: bond_style
-
-bond_style command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style style args
-
-* style = *none* or *hybrid* or *class2* or *fene* or *fene/expand* or *harmonic* or *morse* or *nonlinear* or *quartic*
-
-.. parsed-literal::
-
- args = none for any style except *hybrid*
- *hybrid* args = list of one or more styles
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style harmonic
- bond_style fene
- bond_style hybrid harmonic fene
-
-Description
-"""""""""""
-
-Set the formula(s) LAMMPS uses to compute bond interactions between
-pairs of atoms. In LAMMPS, a bond differs from a pairwise
-interaction, which are set via the :doc:`pair_style <pair_style>`
-command. Bonds are defined between specified pairs of atoms and
-remain in force for the duration of the simulation (unless the bond
-breaks which is possible in some bond potentials). The list of bonded
-atoms is read in by a :doc:`read_data <read_data>` or
-:doc:`read_restart <read_restart>` command from a data or restart file.
-By contrast, pair potentials are typically defined between all pairs
-of atoms within a cutoff distance and the set of active interactions
-changes over time.
-
-Hybrid models where bonds are computed using different bond potentials
-can be setup using the *hybrid* bond style.
-
-The coefficients associated with a bond style can be specified in a
-data or restart file or via the :doc:`bond_coeff <bond_coeff>` command.
-
-All bond potentials store their coefficient data in binary restart
-files which means bond_style and :doc:`bond_coeff <bond_coeff>` commands
-do not need to be re-specified in an input script that restarts a
-simulation. See the :doc:`read_restart <read_restart>` command for
-details on how to do this. The one exception is that bond_style
-*hybrid* only stores the list of sub-styles in the restart file; bond
-coefficients need to be re-specified.
-
-.. note::
-
- When both a bond and pair style is defined, the
- :doc:`special_bonds <special_bonds>` command often needs to be used to
- turn off (or weight) the pairwise interaction that would otherwise
- exist between 2 bonded atoms.
-
-In the formulas listed for each bond style, *r* is the distance
-between the 2 atoms in the bond.
-
-
-----------
-
-
-Here is an alphabetic list of bond styles defined in LAMMPS. Click on
-the style to display the formula it computes and coefficients
-specified by the associated :doc:`bond_coeff <bond_coeff>` command.
-
-Note that there are also additional bond styles submitted by users
-which are included in the LAMMPS distribution. The list of these with
-links to the individual styles are given in the bond section of :ref:`this page <cmd_5>`.
-
-* :doc:`bond_style none <bond_none>` - turn off bonded interactions
-* :doc:`bond_style zero <bond_zero>` - topology but no interactions
-* :doc:`bond_style hybrid <bond_hybrid>` - define multiple styles of bond interactions
-
-* :doc:`bond_style class2 <bond_class2>` - COMPASS (class 2) bond
-* :doc:`bond_style fene <bond_fene>` - FENE (finite-extensible non-linear elastic) bond
-* :doc:`bond_style fene/expand <bond_fene_expand>` - FENE bonds with variable size particles
-* :doc:`bond_style harmonic <bond_harmonic>` - harmonic bond
-* :doc:`bond_style morse <bond_morse>` - Morse bond
-* :doc:`bond_style nonlinear <bond_nonlinear>` - nonlinear bond
-* :doc:`bond_style quartic <bond_quartic>` - breakable quartic bond
-* :doc:`bond_style table <bond_table>` - tabulated by bond length
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-Bond styles can only be set for atom styles that allow bonds to be
-defined.
-
-Most bond styles are part of the MOLECULE package. They are only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-The doc pages for individual bond potentials tell if it is part of a
-package.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
-
-Default
-"""""""
-
-bond_style none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_table.txt b/doc/html/_sources/bond_table.txt
deleted file mode 100644
index 24ee7a59f..000000000
--- a/doc/html/_sources/bond_table.txt
+++ /dev/null
@@ -1,172 +0,0 @@
-.. index:: bond_style table
-
-bond_style table command
-========================
-
-bond_style table/omp command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style table style N
-
-* style = *linear* or *spline* = method of interpolation
-* N = use N values in table
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style table linear 1000
- bond_coeff 1 file.table ENTRY1
-
-Description
-"""""""""""
-
-Style *table* creates interpolation tables of length *N* from bond
-potential and force values listed in a file(s) as a function of bond
-length. The files are read by the :doc:`bond_coeff <bond_coeff>`
-command.
-
-The interpolation tables are created by fitting cubic splines to the
-file values and interpolating energy and force values at each of *N*
-distances. During a simulation, these tables are used to interpolate
-energy and force values as needed. The interpolation is done in one
-of 2 styles: *linear* or *spline*\ .
-
-For the *linear* style, the bond length is used to find 2 surrounding
-table values from which an energy or force is computed by linear
-interpolation.
-
-For the *spline* style, a cubic spline coefficients are computed and
-stored at each of the *N* values in the table. The bond length is
-used to find the appropriate set of coefficients which are used to
-evaluate a cubic polynomial which computes the energy or force.
-
-The following coefficients must be defined for each bond type via the
-:doc:`bond_coeff <bond_coeff>` command as in the example above.
-
-* filename
-* keyword
-
-The filename specifies a file containing tabulated energy and force
-values. The keyword specifies a section of the file. The format of
-this file is described below.
-
-
-----------
-
-
-The format of a tabulated file is as follows (without the
-parenthesized comments):
-
-.. parsed-literal::
-
- # Bond potential for harmonic (one or more comment or blank lines)
-
-.. parsed-literal::
-
- HAM (keyword is the first text on line)
- N 101 FP 0 0 EQ 0.5 (N, FP, EQ parameters)
- (blank line)
- 1 0.00 338.0000 1352.0000 (index, bond-length, energy, force)
- 2 0.01 324.6152 1324.9600
- ...
- 101 1.00 338.0000 -1352.0000
-
-A section begins with a non-blank line whose 1st character is not a
-"#"; blank lines or lines starting with "#" can be used as comments
-between sections. The first line begins with a keyword which
-identifies the section. The line can contain additional text, but the
-initial text must match the argument specified in the
-:doc:`bond_coeff <bond_coeff>` command. The next line lists (in any
-order) one or more parameters for the table. Each parameter is a
-keyword followed by one or more numeric values.
-
-The parameter "N" is required and its value is the number of table
-entries that follow. Note that this may be different than the *N*
-specified in the :doc:`bond_style table <bond_style>` command. Let
-Ntable = *N* in the bond_style command, and Nfile = "N" in the
-tabulated file. What LAMMPS does is a preliminary interpolation by
-creating splines using the Nfile tabulated values as nodal points. It
-uses these to interpolate as needed to generate energy and force
-values at Ntable different points. The resulting tables of length
-Ntable are then used as described above, when computing energy and
-force for individual bond lengths. This means that if you want the
-interpolation tables of length Ntable to match exactly what is in the
-tabulated file (with effectively no preliminary interpolation), you
-should set Ntable = Nfile.
-
-The "FP" parameter is optional. If used, it is followed by two values
-fplo and fphi, which are the derivatives of the force at the innermost
-and outermost bond lengths. These values are needed by the spline
-construction routines. If not specified by the "FP" parameter, they
-are estimated (less accurately) by the first two and last two force
-values in the table.
-
-The "EQ" parameter is also optional. If used, it is followed by a the
-equilibrium bond length, which is used, for example, by the :doc:`fix shake <fix_shake>` command. If not used, the equilibrium bond
-length is to the distance in the table with the lowest potential energy.
-
-Following a blank line, the next N lines list the tabulated values.
-On each line, the 1st value is the index from 1 to N, the 2nd value is
-the bond length r (in distance units), the 3rd value is the energy (in
-energy units), and the 4th is the force (in force units). The bond
-lengths must range from a LO value to a HI value, and increase from
-one line to the next. If the actual bond length is ever smaller than
-the LO value or larger than the HI value, then the bond energy and
-force is evaluated as if the bond were the LO or HI length.
-
-Note that one file can contain many sections, each with a tabulated
-potential. LAMMPS reads the file section by section until it finds
-one that matches the specified keyword.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This bond style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_coeff <bond_coeff>`, :doc:`delete_bonds <delete_bonds>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_write.txt b/doc/html/_sources/bond_write.txt
deleted file mode 100644
index 8d06fab28..000000000
--- a/doc/html/_sources/bond_write.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-.. index:: bond_write
-
-bond_write command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_write btype N inner outer file keyword itype jtype
-
-* btype = bond types
-* N = # of values
-* inner,outer = inner and outer bond length (distance units)
-* file = name of file to write values to
-* keyword = section name in file for this set of tabulated values
-* itype,jtype = 2 atom types (optional)
-*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_write 1 500 0.5 3.5 table.txt Harmonic_1
- bond_write 3 1000 0.1 6.0 table.txt Morse
-
-Description
-"""""""""""
-
-Write energy and force values to a file as a function of distance for
-the currently defined bond potential. This is useful for plotting the
-potential function or otherwise debugging its values. If the file
-already exists, the table of values is appended to the end of the file
-to allow multiple tables of energy and force to be included in one
-file.
-
-The energy and force values are computed at distances from inner to
-outer for 2 interacting atoms forming a bond of type btype, using the
-appropriate :doc:`bond_coeff <bond_coeff>` coefficients. N evenly spaced
-distances are used.
-
-For example, for N = 7, inner = 1.0, and outer = 4.0,
-values are computed at r = 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0.
-
-The file is written in the format used as input for the
-:doc:`bond_style <bond_style>` *table* option with *keyword* as the
-section name. Each line written to the file lists an index number
-(1-N), a distance (in distance units), an energy (in energy units),
-and a force (in force units).
-
-Restrictions
-""""""""""""
-
-
-All force field coefficients for bond and other kinds of interactions
-must be set before this command can be invoked.
-
-Due to how the bond force is computed, an inner value > 0.0 must
-be specified even if the potential has a finite value at r = 0.0.
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_style table <bond_table>`,
-:doc:`bond_style <bond_style>`, :doc:`bond_coeff <bond_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/bond_zero.txt b/doc/html/_sources/bond_zero.txt
deleted file mode 100644
index 975e681b9..000000000
--- a/doc/html/_sources/bond_zero.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-.. index:: bond_style zero
-
-bond_style zero command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- bond_style zero *nocoeff*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- bond_style zero
- bond_style zero nocoeff
- bond_coeff *
- bond_coeff * 2.14
-
-Description
-"""""""""""
-
-Using an bond style of zero means bond forces and energies are not
-computed, but the geometry of bond pairs is still accessible to other
-commands.
-
-As an example, the :doc:`compute bond/local <compute_bond_local>`
-command can be used to compute distances for the list of pairs of bond
-atoms listed in the data file read by the :doc:`read_data <read_data>`
-command. If no bond style is defined, this command cannot be used.
-
-The optional *nocoeff* flag allows to read data files with a BondCoeff
-section for any bond style. Similarly, any bond_coeff commands
-will only be checked for the bond type number and the rest ignored.
-
-Note that the :doc:`bond_coeff <bond_coeff>` command must be used for
-all bond types. If specified, there can be only one value, which is
-going to be used to assign an equilibrium distance, e.g. for use with
-:doc:`fix shake <fix_shake>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`bond_style none <bond_none>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/boundary.txt b/doc/html/_sources/boundary.txt
deleted file mode 100644
index efb782f90..000000000
--- a/doc/html/_sources/boundary.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-.. index:: boundary
-
-boundary command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- boundary x y z
-
-* x,y,z = *p* or *s* or *f* or *m*\ , one or two letters
-.. parsed-literal::
-
- *p* is periodic
- *f* is non-periodic and fixed
- *s* is non-periodic and shrink-wrapped
- *m* is non-periodic and shrink-wrapped with a minimum value
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- boundary p p f
- boundary p fs p
- boundary s f fm
-
-Description
-"""""""""""
-
-Set the style of boundaries for the global simulation box in each
-dimension. A single letter assigns the same style to both the lower
-and upper face of the box. Two letters assigns the first style to the
-lower face and the second style to the upper face. The initial size
-of the simulation box is set by the :doc:`read_data <read_data>`,
-:doc:`read_restart <read_restart>`, or :doc:`create_box <create_box>`
-commands.
-
-The style *p* means the box is periodic, so that particles interact
-across the boundary, and they can exit one end of the box and re-enter
-the other end. A periodic dimension can change in size due to
-constant pressure boundary conditions or box deformation (see the :doc:`fix npt <fix_nh>` and :doc:`fix deform <fix_deform>` commands). The *p*
-style must be applied to both faces of a dimension.
-
-The styles *f*\ , *s*\ , and *m* mean the box is non-periodic, so that
-particles do not interact across the boundary and do not move from one
-side of the box to the other.
-
-For style *f*\ , the position of the face is fixed. If an atom moves
-outside the face it will be deleted on the next timestep that
-reneighboring occurs. This will typically generate an error unless
-you have set the :doc:`thermo_modify lost <thermo_modify>` option to
-allow for lost atoms.
-
-For style *s*\ , the position of the face is set so as to encompass the
-atoms in that dimension (shrink-wrapping), no matter how far they
-move.
-
-For style *m*\ , shrink-wrapping occurs, but is bounded by the value
-specified in the data or restart file or set by the
-:doc:`create_box <create_box>` command. For example, if the upper z
-face has a value of 50.0 in the data file, the face will always be
-positioned at 50.0 or above, even if the maximum z-extent of all the
-atoms becomes less than 50.0. This can be useful if you start a
-simulation with an empty box or if you wish to leave room on one side
-of the box, e.g. for atoms to evaporate from a surface.
-
-For triclinic (non-orthogonal) simulation boxes, if the 2nd dimension
-of a tilt factor (e.g. y for xy) is periodic, then the periodicity is
-enforced with the tilt factor offset. If the 1st dimension is
-shrink-wrapped, then the shrink wrapping is applied to the tilted box
-face, to encompass the atoms. E.g. for a positive xy tilt, the xlo
-and xhi faces of the box are planes tilting in the +y direction as y
-increases. These tilted planes are shrink-wrapped around the atoms to
-determine the x extent of the box.
-
-See :ref:`Section_howto 12 <howto_12>` of the doc pages
-for a geometric description of triclinic boxes, as defined by LAMMPS,
-and how to transform these parameters to and from other commonly used
-triclinic representations.
-
-Restrictions
-""""""""""""
-
-
-This command cannot be used after the simulation box is defined by a
-:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command or
-:doc:`read_restart <read_restart>` command. See the
-:doc:`change_box <change_box>` command for how to change the simulation
-box boundaries after it has been defined.
-
-For 2d simulations, the z dimension must be periodic.
-
-Related commands
-""""""""""""""""
-
-See the :doc:`thermo_modify <thermo_modify>` command for a discussion
-of lost atoms.
-
-Default
-"""""""
-
-.. parsed-literal::
-
- boundary p p p
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/box.txt b/doc/html/_sources/box.txt
deleted file mode 100644
index 920e07563..000000000
--- a/doc/html/_sources/box.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-.. index:: box
-
-box command
-===========
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- box keyword value ...
-
-* one or more keyword/value pairs may be appended
-* keyword = *tilt*
-.. parsed-literal::
-
- *tilt* value = *small* or *large*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- box tilt large
- box tilt small
-
-Description
-"""""""""""
-
-Set attributes of the simulation box.
-
-For triclinic (non-orthogonal) simulation boxes, the *tilt* keyword
-allows simulation domains to be created with arbitrary tilt factors,
-e.g. via the :doc:`create_box <create_box>` or
-:doc:`read_data <read_data>` commands. Tilt factors determine how
-skewed the triclinic box is; see :ref:`this section <howto_12>` of the manual for a discussion of
-triclinic boxes in LAMMPS.
-
-LAMMPS normally requires that no tilt factor can skew the box more
-than half the distance of the parallel box length, which is the 1st
-dimension in the tilt factor (x for xz). If *tilt* is set to
-*small*\ , which is the default, then an error will be
-generated if a box is created which exceeds this limit. If *tilt*
-is set to *large*\ , then no limit is enforced. You can create
-a box with any tilt factors you wish.
-
-Note that if a simulation box has a large tilt factor, LAMMPS will run
-less efficiently, due to the large volume of communication needed to
-acquire ghost atoms around a processor's irregular-shaped sub-domain.
-For extreme values of tilt, LAMMPS may also lose atoms and generate an
-error.
-
-Restrictions
-""""""""""""
-
-
-This command cannot be used after the simulation box is defined by a
-:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command or
-:doc:`read_restart <read_restart>` command.
-
-**Related commands:** none
-
-Default
-"""""""
-
-The default value is tilt = small.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/change_box.txt b/doc/html/_sources/change_box.txt
deleted file mode 100644
index c84d4804c..000000000
--- a/doc/html/_sources/change_box.txt
+++ /dev/null
@@ -1,382 +0,0 @@
-.. index:: change_box
-
-change_box command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- change_box group-ID parameter args ... keyword args ...
-
-* group-ID = ID of group of atoms to (optionally) displace
-* one or more parameter/arg pairs may be appended
-.. parsed-literal::
-
- parameter = *x* or *y* or *z* or *xy* or *xz* or *yz* or *boundary* or *ortho* or *triclinic* or *set* or *remap*
- *x*\ , *y*\ , *z* args = style value(s)
- style = *final* or *delta* or *scale* or *volume*
- *final* values = lo hi
- lo hi = box boundaries after displacement (distance units)
- *delta* values = dlo dhi
- dlo dhi = change in box boundaries after displacement (distance units)
- *scale* values = factor
- factor = multiplicative factor for change in box length after displacement
- *volume* value = none = adjust this dim to preserve volume of system
- *xy*\ , *xz*\ , *yz* args = style value
- style = *final* or *delta*
- *final* value = tilt
- tilt = tilt factor after displacement (distance units)
- *delta* value = dtilt
- dtilt = change in tilt factor after displacement (distance units)
- *boundary* args = x y z
- x,y,z = *p* or *s* or *f* or *m*\ , one or two letters
- *p* is periodic
- *f* is non-periodic and fixed
- *s* is non-periodic and shrink-wrapped
- *m* is non-periodic and shrink-wrapped with a minimum value
- *ortho* args = none = change box to orthogonal
- *triclinic* args = none = change box to triclinic
- *set* args = none = store state of current box
- *remap* args = none = remap atom coords from last saved state to current box
-
-* zero or more keyword/value pairs may be appended
-* keyword = *units*
-.. parsed-literal::
-
- *units* value = *lattice* or *box*
- lattice = distances are defined in lattice units
- box = distances are defined in simulation box units
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- change_box all xy final -2.0 z final 0.0 5.0 boundary p p f remap units box
- change_box all x scale 1.1 y volume z volume remap
-
-Description
-"""""""""""
-
-Change the volume and/or shape and/or boundary conditions for the
-simulation box. Orthogonal simulation boxes have 3 adjustable size
-parameters (x,y,z). Triclinic (non-orthogonal) simulation boxes have
-6 adjustable size/shape parameters (x,y,z,xy,xz,yz). Any or all of
-them can be adjusted independently by this command. Thus it can be
-used to expand or contract a box, or to apply a shear strain to a
-non-orthogonal box. It can also be used to change the boundary
-conditions for the simulation box, similar to the
-:doc:`boundary <boundary>` command.
-
-The size and shape of the initial simulation box are specified by the
-:doc:`create_box <create_box>` or :doc:`read_data <read_data>` or
-:doc:`read_restart <read_restart>` command used to setup the simulation.
-The size and shape may be altered by subsequent runs, e.g. by use of
-the :doc:`fix npt <fix_nh>` or :doc:`fix deform <fix_deform>` commands.
-The :doc:`create_box <create_box>`, :doc:`read data <read_data>`, and
-:doc:`read_restart <read_restart>` commands also determine whether the
-simulation box is orthogonal or triclinic and their doc pages explain
-the meaning of the xy,xz,yz tilt factors.
-
-See :ref:`Section_howto 12 <howto_12>` of the doc pages
-for a geometric description of triclinic boxes, as defined by LAMMPS,
-and how to transform these parameters to and from other commonly used
-triclinic representations.
-
-The keywords used in this command are applied sequentially to the
-simulation box and the atoms in it, in the order specified.
-
-Before the sequence of keywords are invoked, the current box
-size/shape is stored, in case a *remap* keyword is used to map the
-atom coordinates from a previously stored box size/shape to the
-current one.
-
-After all the keywords have been processed, any shrink-wrap boundary
-conditions are invoked (see the :doc:`boundary <boundary>` command)
-which may change simulation box boundaries, and atoms are migrated to
-new owning processors.
-
-.. note::
-
- This means that you cannot use the change_box command to enlarge
- a shrink-wrapped box, e.g. to make room to insert more atoms via the
- :doc:`create_atoms <create_atoms>` command, because the simulation box
- will be re-shrink-wrapped before the change_box command completes.
- Instead you could do something like this, assuming the simulation box
- is non-periodic and atoms extend from 0 to 20 in all dimensions:
-
-.. parsed-literal::
-
- change_box all x final -10 20
- create_atoms 1 single -5 5 5 # this will fail to insert an atom
-
-.. parsed-literal::
-
- change_box all x final -10 20 boundary f s s
- create_atoms 1 single -5 5 5
- change_box boundary s s s # this will work
-
-.. note::
-
- Unlike the earlier "displace_box" version of this command, atom
- remapping is NOT performed by default. This command allows remapping
- to be done in a more general way, exactly when you specify it (zero or
- more times) in the sequence of transformations. Thus if you do not
- use the *remap* keyword, atom coordinates will not be changed even if
- the box size/shape changes. If a uniformly strained state is desired,
- the *remap* keyword should be specified.
-
-.. note::
-
- It is possible to lose atoms with this command. E.g. by
- changing the box without remapping the atoms, and having atoms end up
- outside of non-periodic boundaries. It is also possible to alter
- bonds between atoms straddling a boundary in bad ways. E.g. by
- converting a boundary from periodic to non-periodic. It is also
- possible when remapping atoms to put them (nearly) on top of each
- other. E.g. by converting a boundary from non-periodic to periodic.
- All of these will typically lead to bad dynamics and/or generate error
- messages.
-
-.. note::
-
- The simulation box size/shape can be changed by arbitrarily
- large amounts by this command. This is not a problem, except that the
- mapping of processors to the simulation box is not changed from its
- initial 3d configuration; see the :doc:`processors <processors>`
- command. Thus, if the box size/shape changes dramatically, the
- mapping of processors to the simulation box may not end up as optimal
- as the initial mapping attempted to be.
-
-.. note::
-
- Because the keywords used in this command are applied one at a
- time to the simulation box and the atoms in it, care must be taken
- with triclinic cells to avoid exceeding the limits on skew after each
- transformation in the sequence. If skew is exceeded before the final
- transformation this can be avoided by changing the order of the
- sequence, or breaking the transformation into two or more smaller
- transformations. For more information on the allowed limits for box
- skew see the discussion on triclinic boxes on :ref:`this page <howto_12>`.
-
-
-----------
-
-
-For the *x*\ , *y*\ , and *z* parameters, this is the meaning of their
-styles and values.
-
-For style *final*\ , the final lo and hi box boundaries of a dimension
-are specified. The values can be in lattice or box distance units.
-See the discussion of the units keyword below.
-
-For style *delta*\ , plus or minus changes in the lo/hi box boundaries
-of a dimension are specified. The values can be in lattice or box
-distance units. See the discussion of the units keyword below.
-
-For style *scale*\ , a multiplicative factor to apply to the box length
-of a dimension is specified. For example, if the initial box length
-is 10, and the factor is 1.1, then the final box length will be 11. A
-factor less than 1.0 means compression.
-
-The *volume* style changes the specified dimension in such a way that
-the overall box volume remains constant with respect to the operation
-performed by the preceding keyword. The *volume* style can only be
-used following a keyword that changed the volume, which is any of the
-*x*\ , *y*\ , *z* keywords. If the preceding keyword "key" had a *volume*
-style, then both it and the current keyword apply to the keyword
-preceding "key". I.e. this sequence of keywords is allowed:
-
-.. parsed-literal::
-
- change_box all x scale 1.1 y volume z volume
-
-The *volume* style changes the associated dimension so that the
-overall box volume is unchanged relative to its value before the
-preceding keyword was invoked.
-
-If the following command is used, then the z box length will shrink by
-the same 1.1 factor the x box length was increased by:
-
-.. parsed-literal::
-
- change_box all x scale 1.1 z volume
-
-If the following command is used, then the y,z box lengths will each
-shrink by sqrt(1.1) to keep the volume constant. In this case, the
-y,z box lengths shrink so as to keep their relative aspect ratio
-constant:
-
-.. parsed-literal::
-
- change_box all"x scale 1.1 y volume z volume
-
-If the following command is used, then the final box will be a factor
-of 10% larger in x and y, and a factor of 21% smaller in z, so as to
-keep the volume constant:
-
-.. parsed-literal::
-
- change_box all x scale 1.1 z volume y scale 1.1 z volume
-
-.. note::
-
- For solids or liquids, when one dimension of the box is
- expanded, it may be physically undesirable to hold the other 2 box
- lengths constant since that implies a density change. For solids,
- adjusting the other dimensions via the *volume* style may make
- physical sense (just as for a liquid), but may not be correct for
- materials and potentials whose Poisson ratio is not 0.5.
-
-For the *scale* and *volume* styles, the box length is expanded or
-compressed around its mid point.
-
-
-----------
-
-
-For the *xy*\ , *xz*\ , and *yz* parameters, this is the meaning of their
-styles and values. Note that changing the tilt factors of a triclinic
-box does not change its volume.
-
-For style *final*\ , the final tilt factor is specified. The value
-can be in lattice or box distance units. See the discussion of the
-units keyword below.
-
-For style *delta*\ , a plus or minus change in the tilt factor is
-specified. The value can be in lattice or box distance units. See
-the discussion of the units keyword below.
-
-All of these styles change the xy, xz, yz tilt factors. In LAMMPS,
-tilt factors (xy,xz,yz) for triclinic boxes are required to be no more
-than half the distance of the parallel box length. For example, if
-xlo = 2 and xhi = 12, then the x box length is 10 and the xy tilt
-factor must be between -5 and 5. Similarly, both xz and yz must be
-between -(xhi-xlo)/2 and +(yhi-ylo)/2. Note that this is not a
-limitation, since if the maximum tilt factor is 5 (as in this
-example), then configurations with tilt = ..., -15, -5, 5, 15, 25,
-... are all equivalent. Any tilt factor specified by this command
-must be within these limits.
-
-
-----------
-
-
-The *boundary* keyword takes arguments that have exactly the same
-meaning as they do for the :doc:`boundary <boundary>` command. In each
-dimension, a single letter assigns the same style to both the lower
-and upper face of the box. Two letters assigns the first style to the
-lower face and the second style to the upper face.
-
-The style *p* means the box is periodic; the other styles mean
-non-periodic. For style *f*\ , the position of the face is fixed. For
-style *s*\ , the position of the face is set so as to encompass the
-atoms in that dimension (shrink-wrapping), no matter how far they
-move. For style *m*\ , shrink-wrapping occurs, but is bounded by the
-current box edge in that dimension, so that the box will become no
-smaller. See the :doc:`boundary <boundary>` command for more
-explanation of these style options.
-
-Note that the "boundary" command itself can only be used before the
-simulation box is defined via a :doc:`read_data <read_data>` or
-:doc:`create_box <create_box>` or :doc:`read_restart <read_restart>`
-command. This command allows the boundary conditions to be changed
-later in your input script. Also note that the
-:doc:`read_restart <read_restart>` will change boundary conditions to
-match what is stored in the restart file. So if you wish to change
-them, you should use the change_box command after the read_restart
-command.
-
-
-----------
-
-
-The *ortho* and *triclinic* keywords convert the simulation box to be
-orthogonal or triclinic (non-orthongonal). See :ref:`this section <howto_13>` for a discussion of how non-orthongal
-boxes are represented in LAMMPS.
-
-The simulation box is defined as either orthogonal or triclinic when
-it is created via the :doc:`create_box <create_box>`,
-:doc:`read_data <read_data>`, or :doc:`read_restart <read_restart>`
-commands.
-
-These keywords allow you to toggle the existing simulation box from
-orthogonal to triclinic and vice versa. For example, an initial
-equilibration simulation can be run in an orthogonal box, the box can
-be toggled to triclinic, and then a :ref:`non-equilibrium MD (NEMD) simulation <howto_13>` can be run with deformation
-via the :doc:`fix deform <fix_deform>` command.
-
-If the simulation box is currently triclinic and has non-zero tilt in
-xy, yz, or xz, then it cannot be converted to an orthogonal box.
-
-
-----------
-
-
-The *set* keyword saves the current box size/shape. This can be
-useful if you wish to use the *remap* keyword more than once or if you
-wish it to be applied to an intermediate box size/shape in a sequence
-of keyword operations. Note that the box size/shape is saved before
-any of the keywords are processed, i.e. the box size/shape at the time
-the create_box command is encountered in the input script.
-
-The *remap* keyword remaps atom coordinates from the last saved box
-size/shape to the current box state. For example, if you stretch the
-box in the x dimension or tilt it in the xy plane via the *x* and *xy*
-keywords, then the *remap* commmand will dilate or tilt the atoms to
-conform to the new box size/shape, as if the atoms moved with the box
-as it deformed.
-
-Note that this operation is performed without regard to periodic
-boundaries. Also, any shrink-wrapping of non-periodic boundaries (see
-the :doc:`boundary <boundary>` command) occurs after all keywords,
-including this one, have been processed.
-
-Only atoms in the specified group are remapped.
-
-
-----------
-
-
-The *units* keyword determines the meaning of the distance units used
-to define various arguments. A *box* value selects standard distance
-units as defined by the :doc:`units <units>` command, e.g. Angstroms for
-units = real or metal. A *lattice* value means the distance units are
-in lattice spacings. The :doc:`lattice <lattice>` command must have
-been previously used to define the lattice spacing.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-If you use the *ortho* or *triclinic* keywords, then at the point in
-the input script when this command is issued, no :doc:`dumps <dump>` can
-be active, nor can a :doc:`fix deform <fix_deform>` be active. This is
-because these commands test whether the simulation box is orthogonal
-when they are first issued. Note that these commands can be used in
-your script before a change_box command is issued, so long as an
-:doc:`undump <undump>` or :doc:`unfix <unfix>` command is also used to
-turn them off.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix deform <fix_deform>`, :doc:`boundary <boundary>`
-
-Default
-"""""""
-
-The option default is units = lattice.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/clear.txt b/doc/html/_sources/clear.txt
deleted file mode 100644
index f145148cb..000000000
--- a/doc/html/_sources/clear.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-.. index:: clear
-
-clear command
-=============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- clear
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- (commands for 1st simulation)
- clear
- (commands for 2nd simulation)
-
-Description
-"""""""""""
-
-This command deletes all atoms, restores all settings to their default
-values, and frees all memory allocated by LAMMPS. Once a clear
-command has been executed, it is almost as if LAMMPS were starting
-over, with only the exceptions noted below. This command enables
-multiple jobs to be run sequentially from one input script.
-
-These settings are not affected by a clear command: the working
-directory (:doc:`shell <shell>` command), log file status
-(:doc:`log <log>` command), echo status (:doc:`echo <echo>` command), and
-input script variables (:doc:`variable <variable>` command).
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/comm_modify.txt b/doc/html/_sources/comm_modify.txt
deleted file mode 100644
index b6826ec45..000000000
--- a/doc/html/_sources/comm_modify.txt
+++ /dev/null
@@ -1,177 +0,0 @@
-.. index:: comm_modify
-
-comm_modify command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- comm_modify keyword value ...
-
-* zero or more keyword/value pairs may be appended
-* keyword = *mode* or *cutoff* or *cutoff/multi* or *group* or *vel*
-.. parsed-literal::
-
- *mode* value = *single* or *multi* = communicate atoms within a single or multiple distances
- *cutoff* value = Rcut (distance units) = communicate atoms from this far away
- *cutoff/multi* type value
- type = atom type or type range (supports asterisk notation)
- value = Rcut (distance units) = communicate atoms for selected types from this far away
- *group* value = group-ID = only communicate atoms in the group
- *vel* value = *yes* or *no* = do or do not communicate velocity info with ghost atoms
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- comm_modify mode multi
- comm_modify mode multi group solvent
- comm_modift mode multi cutoff/multi 1 10.0 cutoff/multi 2*4 15.0
- comm_modify vel yes
- comm_modify mode single cutoff 5.0 vel yes
- comm_modify cutoff/multi * 0.0
-
-Description
-"""""""""""
-
-This command sets parameters that affect the inter-processor
-communication of atom information that occurs each timestep as
-coordinates and other properties are exchanged between neighboring
-processors and stored as properties of ghost atoms.
-
-.. note::
-
- These options apply to the currently defined comm style. When
- you specify a :doc:`comm_style <comm_style>` command, all communication
- settings are restored to their default values, including those
- previously reset by a comm_modify command. Thus if your input script
- specifies a comm_style command, you should use the comm_modify command
- after it.
-
-The *mode* keyword determines whether a single or multiple cutoff
-distances are used to determine which atoms to communicate.
-
-The default mode is *single* which means each processor acquires
-information for ghost atoms that are within a single distance from its
-sub-domain. The distance is by default the maximum of the neighbor
-cutoff across all atom type pairs.
-
-For many systems this is an efficient algorithm, but for systems with
-widely varying cutoffs for different type pairs, the *multi* mode can
-be faster. In this case, each atom type is assigned its own distance
-cutoff for communication purposes, and fewer atoms will be
-communicated. See the :doc:`neighbor multi <neighbor>` command for a
-neighbor list construction option that may also be beneficial for
-simulations of this kind.
-
-The *cutoff* keyword allows you to extend the ghost cutoff distance
-for communication mode *single*\ , which is the distance from the borders
-of a processor's sub-domain at which ghost atoms are acquired from other
-processors. By default the ghost cutoff = neighbor cutoff = pairwise
-force cutoff + neighbor skin. See the :doc:`neighbor <neighbor>` command
-for more information about the skin distance. If the specified Rcut is
-greater than the neighbor cutoff, then extra ghost atoms will be acquired.
-If the provided cutoff is smaller, the provided value will be ignored
-and the ghost cutoff is set to the neighbor cutoff. Specifying a
-cutoff value of 0.0 will reset any previous value to the default.
-
-The *cutoff/multi* option is equivalent to *cutoff*\ , but applies to
-communication mode *multi* instead. Since in this case the communication
-cutoffs are determined per atom type, a type specifier is needed and
-cutoff for one or multiple types can be extended. Also ranges of types
-using the usual asterisk notation can be given.
-
-These are simulation scenarios in which it may be useful or even
-necessary to set a ghost cutoff > neighbor cutoff:
-
-* a single polymer chain with bond interactions, but no pairwise interactions
-* bonded interactions (e.g. dihedrals) extend further than the pairwise cutoff
-* ghost atoms beyond the pairwise cutoff are needed for some computation
-
-In the first scenario, a pairwise potential is not defined. Thus the
-pairwise neighbor cutoff will be 0.0. But ghost atoms are still
-needed for computing bond, angle, etc interactions between atoms on
-different processors, or when the interaction straddles a periodic
-boundary.
-
-The appropriate ghost cutoff depends on the :doc:`newton bond <newton>`
-setting. For newton bond *off*\ , the distance needs to be the furthest
-distance between any two atoms in the bond, angle, etc. E.g. the
-distance between 1-4 atoms in a dihedral. For newton bond *on*\ , the
-distance between the central atom in the bond, angle, etc and any
-other atom is sufficient. E.g. the distance between 2-4 atoms in a
-dihedral.
-
-In the second scenario, a pairwise potential is defined, but its
-neighbor cutoff is not sufficiently long enough to enable bond, angle,
-etc terms to be computed. As in the previous scenario, an appropriate
-ghost cutoff should be set.
-
-In the last scenario, a :doc:`fix <fix>` or :doc:`compute <compute>` or
-:doc:`pairwise potential <pair_style>` needs to calculate with ghost
-atoms beyond the normal pairwise cutoff for some computation it
-performs (e.g. locate neighbors of ghost atoms in a multibody pair
-potential). Setting the ghost cutoff appropriately can insure it will
-find the needed atoms.
-
-.. note::
-
- In these scenarios, if you do not set the ghost cutoff long
- enough, and if there is only one processor in a periodic dimension
- (e.g. you are running in serial), then LAMMPS may "find" the atom it
- is looking for (e.g. the partner atom in a bond), that is on the far
- side of the simulation box, across a periodic boundary. This will
- typically lead to bad dynamics (i.e. the bond length is now the
- simulation box length). To detect if this is happening, see the
- :doc:`neigh_modify cluster <neigh_modify>` command.
-
-The *group* keyword will limit communication to atoms in the specified
-group. This can be useful for models where no ghost atoms are needed
-for some kinds of particles. All atoms (not just those in the
-specified group) will still migrate to new processors as they move.
-The group specified with this option must also be specified via the
-:doc:`atom_modify first <atom_modify>` command.
-
-The *vel* keyword enables velocity information to be communicated with
-ghost particles. Depending on the :doc:`atom_style <atom_style>`,
-velocity info includes the translational velocity, angular velocity,
-and angular momentum of a particle. If the *vel* option is set to
-*yes*\ , then ghost atoms store these quantities; if *no* then they do
-not. The *yes* setting is needed by some pair styles which require
-the velocity state of both the I and J particles to compute a pairwise
-I,J interaction.
-
-Note that if the :doc:`fix deform <fix_deform>` command is being used
-with its "remap v" option enabled, then the velocities for ghost atoms
-(in the fix deform group) mirrored across a periodic boundary will
-also include components due to any velocity shift that occurs across
-that boundary (e.g. due to dilation or shear).
-
-Restrictions
-""""""""""""
-
-
-Communication mode *multi* is currently only available for
-:doc:`comm_style <comm_style>` *brick*\ .
-
-Related commands
-""""""""""""""""
-
-:doc:`comm_style <comm_style>`, :doc:`neighbor <neighbor>`
-
-Default
-"""""""
-
-The option defauls are mode = single, group = all, cutoff = 0.0, vel =
-no. The cutoff default of 0.0 means that ghost cutoff = neighbor
-cutoff = pairwise force cutoff + neighbor skin.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/comm_style.txt b/doc/html/_sources/comm_style.txt
deleted file mode 100644
index b788de751..000000000
--- a/doc/html/_sources/comm_style.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-.. index:: comm_style
-
-comm_style command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- comm_style style
-
-* style = *brick* or *tiled*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- comm_style brick
- comm_style tiled
-
-Description
-"""""""""""
-
-This command sets the style of inter-processor communication of atom
-information that occurs each timestep as coordinates and other
-properties are exchanged between neighboring processors and stored as
-properties of ghost atoms.
-
-For the default *brick* style, the domain decomposition used by LAMMPS
-to partition the simulation box must be a regular 3d grid of bricks,
-one per processor. Each processor communicates with its 6 Cartesian
-neighbors in the grid to acquire information for nearby atoms.
-
-For the *tiled* style, a more general domain decomposition can be
-used, as triggered by the :doc:`balance <balance>` or :doc:`fix balance <fix_balance>` commands. The simulation box can be
-partitioned into non-overlapping rectangular-shaped "tiles" or varying
-sizes and shapes. Again there is one tile per processor. To acquire
-information for nearby atoms, communication must now be done with a
-more complex pattern of neighboring processors.
-
-Note that this command does not actually define a partitoining of the
-simulation box (a domain decomposition), rather it determines what
-kinds of decompositions are allowed and the pattern of communication
-used to enable the decomposition. A decomposition is created when the
-simulation box is first created, via the :doc:`create_box <create_box>`
-or :doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands. For both the *brick* and *tiled* styles, the initial
-decomposition will be the same, as described by
-:doc:`create_box <create_box>` and :doc:`processors <processors>`
-commands. The decomposition can be changed via the
-:doc:`balance <balance>` or :doc:`fix balance <fix_balance>` commands.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`comm_modify <comm_modify>`, :doc:`processors <processors>`,
-:doc:`balance <balance>`, :doc:`fix balance <fix_balance>`
-
-Default
-"""""""
-
-The default style is brick.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute.txt b/doc/html/_sources/compute.txt
deleted file mode 100644
index bac3fbfb1..000000000
--- a/doc/html/_sources/compute.txt
+++ /dev/null
@@ -1,271 +0,0 @@
-.. index:: compute
-
-compute command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID style args
-
-* ID = user-assigned name for the computation
-* group-ID = ID of the group of atoms to perform the computation on
-* style = one of a list of possible style names (see below)
-* args = arguments used by a particular style
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all temp
- compute newtemp flow temp/partial 1 1 0
- compute 3 all ke/atom
-
-Description
-"""""""""""
-
-Define a computation that will be performed on a group of atoms.
-Quantities calculated by a compute are instantaneous values, meaning
-they are calculated from information about atoms on the current
-timestep or iteration, though a compute may internally store some
-information about a previous state of the system. Defining a compute
-does not perform a computation. Instead computes are invoked by other
-LAMMPS commands as needed, e.g. to calculate a temperature needed for
-a thermostat fix or to generate thermodynamic or dump file output.
-See this :ref:`howto section <howto_15>` for a summary of
-various LAMMPS output options, many of which involve computes.
-
-The ID of a compute can only contain alphanumeric characters and
-underscores.
-
-
-----------
-
-
-Computes calculate one of three styles of quantities: global,
-per-atom, or local. A global quantity is one or more system-wide
-values, e.g. the temperature of the system. A per-atom quantity is
-one or more values per atom, e.g. the kinetic energy of each atom.
-Per-atom values are set to 0.0 for atoms not in the specified compute
-group. Local quantities are calculated by each processor based on the
-atoms it owns, but there may be zero or more per atom, e.g. a list of
-bond distances. Computes that produce per-atom quantities have the
-word "atom" in their style, e.g. *ke/atom*\ . Computes that produce
-local quantities have the word "local" in their style,
-e.g. *bond/local*\ . Styles with neither "atom" or "local" in their
-style produce global quantities.
-
-Note that a single compute produces either global or per-atom or local
-quantities, but never more than one of these (with only a few
-exceptions, as documented by individual compute commands).
-
-Global, per-atom, and local quantities each come in three kinds: a
-single scalar value, a vector of values, or a 2d array of values. The
-doc page for each compute describes the style and kind of values it
-produces, e.g. a per-atom vector. Some computes produce more than one
-kind of a single style, e.g. a global scalar and a global vector.
-
-When a compute quantity is accessed, as in many of the output commands
-discussed below, it can be referenced via the following bracket
-notation, where ID is the ID of the compute:
-
-+------------+--------------------------------------------+
-| c_ID | entire scalar, vector, or array |
-+------------+--------------------------------------------+
-| c_ID[I] | one element of vector, one column of array |
-+------------+--------------------------------------------+
-| c_ID[I][J] | one element of array |
-+------------+--------------------------------------------+
-
-In other words, using one bracket reduces the dimension of the
-quantity once (vector -> scalar, array -> vector). Using two brackets
-reduces the dimension twice (array -> scalar). Thus a command that
-uses scalar compute values as input can also process elements of a
-vector or array.
-
-Note that commands and :doc:`variables <variable>` which use compute
-quantities typically do not allow for all kinds, e.g. a command may
-require a vector of values, not a scalar. This means there is no
-ambiguity about referring to a compute quantity as c_ID even if it
-produces, for example, both a scalar and vector. The doc pages for
-various commands explain the details.
-
-
-----------
-
-
-In LAMMPS, the values generated by a compute can be used in several
-ways:
-
-* The results of computes that calculate a global temperature or
- pressure can be used by fixes that do thermostatting or barostatting
- or when atom velocities are created.
-* Global values can be output via the :doc:`thermo_style custom <thermo_style>` or :doc:`fix ave/time <fix_ave_time>` command.
- Or the values can be referenced in a :doc:`variable equal <variable>` or
- :doc:`variable atom <variable>` command.
-* Per-atom values can be output via the :doc:`dump custom <dump>` command.
- Or they can be time-averaged via the :doc:`fix ave/atom <fix_ave_atom>`
- command or reduced by the :doc:`compute reduce <compute_reduce>`
- command. Or the per-atom values can be referenced in an :doc:`atom-style variable <variable>`.
-* Local values can be reduced by the :doc:`compute reduce <compute_reduce>` command, or histogrammed by the :doc:`fix ave/histo <fix_ave_histo>` command, or output by the :doc:`dump local <dump>` command.
-The results of computes that calculate global quantities can be either
-"intensive" or "extensive" values. Intensive means the value is
-independent of the number of atoms in the simulation,
-e.g. temperature. Extensive means the value scales with the number of
-atoms in the simulation, e.g. total rotational kinetic energy.
-:doc:`Thermodynamic output <thermo_style>` will normalize extensive
-values by the number of atoms in the system, depending on the
-"thermo_modify norm" setting. It will not normalize intensive values.
-If a compute value is accessed in another way, e.g. by a
-:doc:`variable <variable>`, you may want to know whether it is an
-intensive or extensive value. See the doc page for individual
-computes for further info.
-
-
-----------
-
-
-LAMMPS creates its own computes internally for thermodynamic output.
-Three computes are always created, named "thermo_temp",
-"thermo_press", and "thermo_pe", as if these commands had been invoked
-in the input script:
-
-.. parsed-literal::
-
- compute thermo_temp all temp
- compute thermo_press all pressure thermo_temp
- compute thermo_pe all pe
-
-Additional computes for other quantities are created if the thermo
-style requires it. See the documentation for the
-:doc:`thermo_style <thermo_style>` command.
-
-Fixes that calculate temperature or pressure, i.e. for thermostatting
-or barostatting, may also create computes. These are discussed in the
-documentation for specific :doc:`fix <fix>` commands.
-
-In all these cases, the default computes LAMMPS creates can be
-replaced by computes defined by the user in the input script, as
-described by the :doc:`thermo_modify <thermo_modify>` and :doc:`fix modify <fix_modify>` commands.
-
-Properties of either a default or user-defined compute can be modified
-via the :doc:`compute_modify <compute_modify>` command.
-
-Computes can be deleted with the :doc:`uncompute <uncompute>` command.
-
-Code for new computes can be added to LAMMPS (see :doc:`this section <Section_modify>` of the manual) and the results of their
-calculations accessed in the various ways described above.
-
-
-----------
-
-
-Each compute style has its own doc page which describes its arguments
-and what it does. Here is an alphabetic list of compute styles
-available in LAMMPS. They are also given in more compact form in the
-Compute section of :ref:`this page <cmd_5>`.
-
-There are also additional compute styles (not listed here) submitted
-by users which are included in the LAMMPS distribution. The list of
-these with links to the individual styles are given in the compute
-section of :ref:`this page <cmd_5>`.
-
-* :doc:`angle/local <compute_bond_local>` - theta and energy of each angle
-* :doc:`angmom/chunk <compute_angmom_chunk>` - angular momentum for each chunk
-* :doc:`body/local <compute_body_local>` - attributes of body sub-particles
-* :doc:`bond <compute_bond>` - values computed by a bond style
-* :doc:`bond/local <compute_bond_local>` - distance and energy of each bond
-* :doc:`centro/atom <compute_centro_atom>` - centro-symmetry parameter for each atom
-* :doc:`chunk/atom <compute_chunk_atom>` - assign chunk IDs to each atom
-* :doc:`cluster/atom <compute_cluster_atom>` - cluster ID for each atom
-* :doc:`cna/atom <compute_cna_atom>` - common neighbor analysis (CNA) for each atom
-* :doc:`com <compute_com>` - center-of-mass of group of atoms
-* :doc:`com/chunk <compute_com_chunk>` - center-of-mass for each chunk
-* :doc:`contact/atom <compute_contact_atom>` - contact count for each spherical particle
-* :doc:`coord/atom <compute_coord_atom>` - coordination number for each atom
-* :doc:`damage/atom <compute_damage_atom>` - Peridynamic damage for each atom
-* :doc:`dihedral/local <compute_dihedral_local>` - angle of each dihedral
-* :doc:`dilatation/atom <compute_dilatation_atom>` - Peridynamic dilatation for each atom
-* :doc:`displace/atom <compute_displace_atom>` - displacement of each atom
-* :doc:`erotate/asphere <compute_erotate_asphere>` - rotational energy of aspherical particles
-* :doc:`erotate/rigid <compute_erotate_rigid>` - rotational energy of rigid bodies
-* :doc:`erotate/sphere <compute_erotate_sphere>` - rotational energy of spherical particles
-* :doc:`erotate/sphere/atom <compute_erotate_sphere>` - rotational energy for each spherical particle
-* :doc:`event/displace <compute_event_displace>` - detect event on atom displacement
-* :doc:`group/group <compute_group_group>` - energy/force between two groups of atoms
-* :doc:`gyration <compute_gyration>` - radius of gyration of group of atoms
-* :doc:`gyration/chunk <compute_gyration_chunk>` - radius of gyration for each chunk
-* :doc:`heat/flux <compute_heat_flux>` - heat flux through a group of atoms
-* :doc:`hexorder/atom <compute_hexorder_atom>` - bond orientational order parameter q6
-* :doc:`improper/local <compute_improper_local>` - angle of each improper
-* :doc:`inertia/chunk <compute_inertia_chunk>` - inertia tensor for each chunk
-* :doc:`ke <compute_ke>` - translational kinetic energy
-* :doc:`ke/atom <compute_ke_atom>` - kinetic energy for each atom
-* :doc:`ke/rigid <compute_ke_rigid>` - translational kinetic energy of rigid bodies
-* :doc:`msd <compute_msd>` - mean-squared displacement of group of atoms
-* :doc:`msd/chunk <compute_msd_chunk>` - mean-squared displacement for each chunk
-* :doc:`msd/nongauss <compute_msd_nongauss>` - MSD and non-Gaussian parameter of group of atoms
-* :doc:`omega/chunk <compute_omega_chunk>` - angular velocity for each chunk
-* :doc:`orientorder/atom <compute_orientorder_atom>` - Steinhardt bond orientational order parameters Ql
-* :doc:`pair <compute_pair>` - values computed by a pair style
-* :doc:`pair/local <compute_pair_local>` - distance/energy/force of each pairwise interaction
-* :doc:`pe <compute_pe>` - potential energy
-* :doc:`pe/atom <compute_pe_atom>` - potential energy for each atom
-* :doc:`plasticity/atom <compute_plasticity_atom>` - Peridynamic plasticity for each atom
-* :doc:`pressure <compute_pressure>` - total pressure and pressure tensor
-* :doc:`property/atom <compute_property_atom>` - convert atom attributes to per-atom vectors/arrays
-* :doc:`property/local <compute_property_local>` - convert local attributes to localvectors/arrays
-* :doc:`property/chunk <compute_property_chunk>` - extract various per-chunk attributes
-* :doc:`rdf <compute_rdf>` - radial distribution function g(r) histogram of group of atoms
-* :doc:`reduce <compute_reduce>` - combine per-atom quantities into a single global value
-* :doc:`reduce/region <compute_reduce>` - same as compute reduce, within a region
-* :doc:`rigid/local <compute_rigid_local>` - extract rigid body attributes
-* :doc:`slice <compute_slice>` - extract values from global vector or array
-* :doc:`sna/atom <compute_sna_atom>` - calculate bispectrum coefficients for each atom
-* :doc:`snad/atom <compute_sna_atom>` - derivative of bispectrum coefficients for each atom
-* :doc:`snav/atom <compute_sna_atom>` - virial contribution from bispectrum coefficients for each atom
-* :doc:`stress/atom <compute_stress_atom>` - stress tensor for each atom
-* :doc:`temp <compute_temp>` - temperature of group of atoms
-* :doc:`temp/asphere <compute_temp_asphere>` - temperature of aspherical particles
-* :doc:`temp/body <compute_temp_body>` - temperature of body particles
-* :doc:`temp/chunk <compute_temp_chunk>` - temperature of each chunk
-* :doc:`temp/com <compute_temp_com>` - temperature after subtracting center-of-mass velocity
-* :doc:`temp/deform <compute_temp_deform>` - temperature excluding box deformation velocity
-* :doc:`temp/partial <compute_temp_partial>` - temperature excluding one or more dimensions of velocity
-* :doc:`temp/profile <compute_temp_profile>` - temperature excluding a binned velocity profile
-* :doc:`temp/ramp <compute_temp_ramp>` - temperature excluding ramped velocity component
-* :doc:`temp/region <compute_temp_region>` - temperature of a region of atoms
-* :doc:`temp/sphere <compute_temp_sphere>` - temperature of spherical particles
-* :doc:`ti <compute_ti>` - thermodyanmic integration free energy values
-* :doc:`torque/chunk <compute_torque_chunk>` - torque applied on each chunk
-* :doc:`vacf <compute_vacf>` - velocity-autocorrelation function of group of atoms
-* :doc:`vcm/chunk <compute_vcm_chunk>` - velocity of center-of-mass for each chunk
-* :doc:`voronoi/atom <compute_voronoi_atom>` - Voronoi volume and neighbors for each atom
-
-There are also additional compute styles submitted by users which are
-included in the LAMMPS distribution. The list of these with links to
-the individual styles are given in the compute section of :ref:`this page <cmd_5>`.
-
-There are also additional accelerated compute styles included in the
-LAMMPS distribution for faster performance on CPUs and GPUs. The list
-of these with links to the individual styles are given in the pair
-section of :ref:`this page <cmd_5>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`uncompute <uncompute>`, :doc:`compute_modify <compute_modify>`, :doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/time <fix_ave_time>`, :doc:`fix ave/histo <fix_ave_histo>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_ackland_atom.txt b/doc/html/_sources/compute_ackland_atom.txt
deleted file mode 100644
index b17519a73..000000000
--- a/doc/html/_sources/compute_ackland_atom.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-.. index:: compute ackland/atom
-
-compute ackland/atom command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID ackland/atom
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* ackland/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all ackland/atom
-
-Description
-"""""""""""
-
-Defines a computation that calculates the local lattice structure
-according to the formulation given in :ref:`(Ackland) <Ackland>`.
-
-In contrast to the :doc:`centro-symmetry parameter <compute_centro_atom>` this method is stable against
-temperature boost, because it is based not on the distance between
-particles but the angles. Therefore statistical fluctuations are
-averaged out a little more. A comparison with the Common Neighbor
-Analysis metric is made in the paper.
-
-The result is a number which is mapped to the following different
-lattice structures:
-
-* 0 = UNKNOWN
-* 1 = BCC
-* 2 = FCC
-* 3 = HCP
-* 4 = ICO
-
-The neighbor list needed to compute this quantity is constructed each
-time the calculation is performed (i.e. 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 of
-which computes this quantity.-
-
-**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
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The per-atom vector values will be unitless since they are the
-integers defined above.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute centro/atom <compute_centro_atom>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Ackland:
-
-
-
-**(Ackland)** Ackland, Jones, Phys Rev B, 73, 054104 (2006).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_angle.txt b/doc/html/_sources/compute_angle.txt
deleted file mode 100644
index 91df79f90..000000000
--- a/doc/html/_sources/compute_angle.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-.. index:: compute angle
-
-compute angle command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID angle
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* angle = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all angle
-
-Description
-"""""""""""
-
-Define a computation that extracts the angle energy calculated by each
-of the angle sub-styles used in the "angle_style
-hybrid" angle_hybrid.html command. These values are made accessible
-for output or further processing by other commands. The group
-specified for this command is ignored.
-
-This compute is useful when using :doc:`angle_style hybrid <angle_hybrid>` if you want to know the portion of the total
-energy contributed by one or more of the hybrid sub-styles.
-
-**Output info:**
-
-This compute calculates a global vector of length N where N is the
-number of sub_styles defined by the :doc:`angle_style hybrid <angle_style>` command, which can be accessed by indices
-1-N. These values can be used by any command that uses global scalar
-or vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector values are "extensive" and will be in energy
-:doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute pe <compute_pe>`, :doc:`compute pair <compute_pair>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_angle_local.txt b/doc/html/_sources/compute_angle_local.txt
deleted file mode 100644
index 4e40799c7..000000000
--- a/doc/html/_sources/compute_angle_local.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-.. index:: compute angle/local
-
-compute angle/local command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID angle/local value1 value2 ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* angle/local = style name of this compute command
-* one or more values may be appended
-* value = *theta* or *eng*
-.. parsed-literal::
-
- *theta* = tabulate angles
- *eng* = tabulate angle energies
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all angle/local theta
- compute 1 all angle/local eng theta
-
-Description
-"""""""""""
-
-Define a computation that calculates properties of individual angle
-interactions. The number of datums generated, aggregated across all
-processors, equals the number of angles in the system, modified by the
-group parameter as explained below.
-
-The value *theta* is the angle for the 3 atoms in the interaction.
-
-The value *eng* is the interaction energy for the angle.
-
-The local data stored by this command is generated by looping over all
-the atoms owned on a processor and their angles. An angle will only
-be included if all 3 atoms in the angle are in the specified compute
-group. Any angles that have been broken (see the
-:doc:`angle_style <angle_style>` command) by setting their angle type to
-0 are not included. Angles that have been turned off (see the :doc:`fix shake <fix_shake>` or :doc:`delete_bonds <delete_bonds>` commands) by
-setting their angle type negative are written into the file, but their
-energy will be 0.0.
-
-Note that as atoms migrate from processor to processor, there will be
-no consistent ordering of the entries within the local vector or array
-from one timestep to the next. The only consistency that is
-guaranteed is that the ordering on a particular timestep will be the
-same for local vectors or arrays generated by other compute commands.
-For example, angle output from the :doc:`compute property/local <compute_property_local>` command can be combined
-with data from this command and output by the :doc:`dump local <dump>`
-command in a consistent way.
-
-Here is an example of how to do this:
-
-.. parsed-literal::
-
- compute 1 all property/local atype aatom1 aatom2 aatom3
- compute 2 all angle/local theta eng
- dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_1[3] c_1[4] c_2[1] c_2[2]
-
-**Output info:**
-
-This compute calculates a local vector or local array depending on the
-number of keywords. The length of the vector or number of rows in the
-array is the number of angles. If a single keyword is specified, a
-local vector is produced. If two or more keywords are specified, a
-local array is produced where the number of columns = the number of
-keywords. The vector or array can be accessed by any command that
-uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The output for *theta* will be in degrees. The output for *eng* will
-be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump local <dump>`, :doc:`compute property/local <compute_property_local>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_angmom_chunk.txt b/doc/html/_sources/compute_angmom_chunk.txt
deleted file mode 100644
index 68894d185..000000000
--- a/doc/html/_sources/compute_angmom_chunk.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-.. index:: compute angmom/chunk
-
-compute angmom/chunk command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID angmom/chunk chunkID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* angmom/chunk = style name of this compute command
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 fluid angmom/chunk molchunk
-
-Description
-"""""""""""
-
-Define a computation that calculates the angular momemtum of multiple
-chunks of atoms.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-This compute calculates the 3 components of the angular momentum
-vector for each chunk, due to the velocity/momentum of the individual
-atoms in the chunk around the center-of-mass of the chunk. The
-calculation includes all effects due to atoms passing thru periodic
-boundaries.
-
-Note that only atoms in the specified group contribute to the
-calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
-defines its own group; atoms will have a chunk ID = 0 if they are not
-in that group, signifying they are not assigned to a chunk, and will
-thus also not contribute to this calculation. You can specify the
-"all" group for this command if you simply want to include atoms with
-non-zero chunk IDs.
-
-.. note::
-
- The coordinates of an atom contribute to the chunk's angular
- momentum in "unwrapped" form, by using the image flags associated with
- each atom. See the :doc:`dump custom <dump>` command for a discussion
- of "unwrapped" coordinates. See the Atoms section of the
- :doc:`read_data <read_data>` command for a discussion of image flags and
- how they are set for each atom. You can reset the image flags
- (e.g. to 0) before invoking this compute by using the :doc:`set image <set>` command.
-
-The simplest way to output the results of the compute angmom/chunk
-calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
-command, for example:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk all angmom/chunk cc1
- fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
-
-**Output info:**
-
-This compute calculates a global array where the number of rows = the
-number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The number of columns =
-3 for the 3 xyz components of the angular momentum for each chunk.
-These values can be accessed by any command that uses global array
-values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The array values are "intensive". The array values will be in
-mass-velocity-distance :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`variable angmom() function <variable>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_basal_atom.txt b/doc/html/_sources/compute_basal_atom.txt
deleted file mode 100644
index 046fc8236..000000000
--- a/doc/html/_sources/compute_basal_atom.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-.. index:: compute basal/atom
-
-compute basal/atom command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID basal/atom
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* basal/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all basal/atom
-
-Description
-"""""""""""
-
-Defines a computation that calculates the hexagonal close-packed "c"
-lattice vector for each atom in the group. It does this by
-calculating the normal unit vector to the basal plane for each atom.
-The results enable efficient identification and characterization of
-twins and grains in hexagonal close-packed structures.
-
-The output of the compute is thus the 3 components of a unit vector
-associdate with each atom. The components are set to 0.0 for
-atoms not in the group.
-
-Details of the calculation are given in :ref:`(Barrett) <Barrett>`.
-
-The neighbor list needed to compute this quantity is constructed each
-time the calculation is performed (i.e. 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 of
-which computes this quantity.
-
-An example input script that uses this compute is provided
-in examples/USER/misc/basal.
-
-**Output info:**
-
-This compute calculates a per-atom array with 3 columns, which can be
-accessed by indices 1-3 by any command that uses per-atom values from
-a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The per-atom vector values are unitless since the 3 columns represent
-components of a unit vector.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The output of this compute will be meaningless unless the atoms are on
-(or near) hcp lattice sites, since the calculation assumes a
-well-defined basal plane.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute centro/atom <compute_centro_atom>`, :doc:`compute ackland/atom <compute_ackland_atom>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Barrett:
-
-
-
-**(Barrett)** Barrett, Tschopp, El Kadiri, Scripta Mat. 66, p.666 (2012).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_body_local.txt b/doc/html/_sources/compute_body_local.txt
deleted file mode 100644
index 74b200224..000000000
--- a/doc/html/_sources/compute_body_local.txt
+++ /dev/null
@@ -1,106 +0,0 @@
-.. index:: compute body/local
-
-compute body/local command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID body/local input1 input2 ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* body/local = style name of this compute command
-* one or more keywords may be appended
-* keyword = *id* or *type* or *integer*
-.. parsed-literal::
-
- *id* = atom ID of the body particle
- *type* = atom type of the body particle
- *integer* = 1,2,3,etc = index of fields defined by body style
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all body/local type 1 2 3
- compute 1 all body/local 3 6
-
-Description
-"""""""""""
-
-Define a computation that calculates properties of individual body
-sub-particles. The number of datums generated, aggregated across all
-processors, equals the number of body sub-particles plus the number of
-non-body particles in the system, modified by the group parameter as
-explained below. See :ref:`Section_howto 14 <howto_14>`
-of the manual and the :doc:`body <body>` doc page for more details on
-using body particles.
-
-The local data stored by this command is generated by looping over all
-the atoms. An atom will only be included if it is in the group. If
-the atom is a body particle, then its N sub-particles will be looped
-over, and it will contribute N datums to the count of datums. If it
-is not a body particle, it will contribute 1 datum.
-
-For both body particles and non-body particles, the *id* keyword
-will store the ID of the particle.
-
-For both body particles and non-body particles, the *type* keyword
-will store the type of the particle.
-
-The *integer* keywords mean different things for body and non-body
-particles. If the atom is not a body particle, only its *x*\ , *y*\ , *z*
-coordinates can be referenced, using the *integer* keywords 1,2,3.
-Note that this means that if you want to access more fields than this
-for body particles, then you cannot include non-body particles in the
-group.
-
-For a body particle, the *integer* keywords refer to fields calculated
-by the body style for each sub-particle. The body style, as specified
-by the :doc:`atom_style body <atom_style>`, determines how many fields
-exist and what they are. See the :doc:`body <body>` doc page for
-details of the different styles.
-
-Here is an example of how to output body information using the :doc:`dump local <dump>` command with this compute. If fields 1,2,3 for the
-body sub-particles are x,y,z coordinates, then the dump file will be
-formatted similar to the output of a :doc:`dump atom or custom <dump>`
-command.
-
-.. parsed-literal::
-
- compute 1 all body/local type 1 2 3
- dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_1[3] c_1[4]
-
-**Output info:**
-
-This compute calculates a local vector or local array depending on the
-number of keywords. The length of the vector or number of rows in the
-array is the number of datums as described above. If a single keyword
-is specified, a local vector is produced. If two or more keywords are
-specified, a local array is produced where the number of columns = the
-number of keywords. The vector or array can be accessed by any
-command that uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The :doc:`units <units>` for output values depend on the body style.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump local <dump>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_bond.txt b/doc/html/_sources/compute_bond.txt
deleted file mode 100644
index b912d8b67..000000000
--- a/doc/html/_sources/compute_bond.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-.. index:: compute bond
-
-compute bond command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID bond
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* bond = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all bond
-
-Description
-"""""""""""
-
-Define a computation that extracts the bond energy calculated by each
-of the bond sub-styles used in the :doc:`bond_style hybrid <bond_hybrid>` command. These values are made accessible
-for output or further processing by other commands. The group
-specified for this command is ignored.
-
-This compute is useful when using :doc:`bond_style hybrid <bond_hybrid>`
-if you want to know the portion of the total energy contributed by one
-or more of the hybrid sub-styles.
-
-**Output info:**
-
-This compute calculates a global vector of length N where N is the
-number of sub_styles defined by the :doc:`bond_style hybrid <bond_style>` command, which can be accessed by indices 1-N.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector values are "extensive" and will be in energy
-:doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute pe <compute_pe>`, :doc:`compute pair <compute_pair>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_bond_local.txt b/doc/html/_sources/compute_bond_local.txt
deleted file mode 100644
index a88a1edc0..000000000
--- a/doc/html/_sources/compute_bond_local.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-.. index:: compute bond/local
-
-compute bond/local command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID bond/local value1 value2 ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* bond/local = style name of this compute command
-* one or more values may be appended
-* value = *dist* or *eng* or *force*
-.. parsed-literal::
-
- *dist* = bond distance
- *eng* = bond energy
- *force* = bond force
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all bond/local eng
- compute 1 all bond/local dist eng force
-
-Description
-"""""""""""
-
-Define a computation that calculates properties of individual bond
-interactions. The number of datums generated, aggregated across all
-processors, equals the number of bonds in the system, modified
-by the group parameter as explained below.
-
-The value *dist* is the length of the bond.
-
-The value *eng* is the interaction energy for the bond.
-
-The value *force* is the force acting between the pair of atoms in the
-bond.
-
-The local data stored by this command is generated by looping over all
-the atoms owned on a processor and their bonds. A bond will only be
-included if both atoms in the bond are in the specified compute group.
-Any bonds that have been broken (see the :doc:`bond_style <bond_style>`
-command) by setting their bond type to 0 are not included. Bonds that
-have been turned off (see the :doc:`fix shake <fix_shake>` or
-:doc:`delete_bonds <delete_bonds>` commands) by setting their bond type
-negative are written into the file, but their energy will be 0.0.
-
-Note that as atoms migrate from processor to processor, there will be
-no consistent ordering of the entries within the local vector or array
-from one timestep to the next. The only consistency that is
-guaranteed is that the ordering on a particular timestep will be the
-same for local vectors or arrays generated by other compute commands.
-For example, bond output from the :doc:`compute property/local <compute_property_local>` command can be combined
-with data from this command and output by the :doc:`dump local <dump>`
-command in a consistent way.
-
-Here is an example of how to do this:
-
-.. parsed-literal::
-
- compute 1 all property/local btype batom1 batom2
- compute 2 all bond/local dist eng
- dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_1[3] c_2[1] c_2[2]
-
-**Output info:**
-
-This compute calculates a local vector or local array depending on the
-number of keywords. The length of the vector or number of rows in the
-array is the number of bonds. If a single keyword is specified, a
-local vector is produced. If two or more keywords are specified, a
-local array is produced where the number of columns = the number of
-keywords. The vector or array can be accessed by any command that
-uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The output for *dist* will be in distance :doc:`units <units>`. The
-output for *eng* will be in energy :doc:`units <units>`. The output for
-*force* will be in force :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump local <dump>`, :doc:`compute property/local <compute_property_local>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_centro_atom.txt b/doc/html/_sources/compute_centro_atom.txt
deleted file mode 100644
index f2c4222f5..000000000
--- a/doc/html/_sources/compute_centro_atom.txt
+++ /dev/null
@@ -1,177 +0,0 @@
-.. index:: compute centro/atom
-
-compute centro/atom command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID centro/atom lattice keyword value ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
- centro/atom = style name of this compute command
- lattice = *fcc* or *bcc* or N = # of neighbors per atom to include
-* zero or more keyword/value pairs may be appended
-* keyword = *axes*
-.. parsed-literal::
-
- *axes* value = *no* or *yes*
- *no* = do not calulate 3 symmetry axes
- *yes* = calulate 3 symmetry axes
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all centro/atom fcc
-
-.. parsed-literal::
-
- compute 1 all centro/atom 8
-
-Description
-"""""""""""
-
-Define a computation that calculates the centro-symmetry parameter for
-each atom in the group, for either FCC or BCC lattices, depending on
-the choice of the *lattice* argument. In solid-state systems the
-centro-symmetry parameter is a useful measure of the local lattice
-disorder 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 centro-symmetry parameter will be 0.0 for atoms not
-in the specified compute group.
-
-This parameter is computed using the following formula from
-:ref:`(Kelchner) <Kelchner>`
-
-.. image:: Eqs/centro_symmetry.jpg
- :align: center
-
-where the *N* nearest neighbors of each atom are identified and Ri and
-Ri+N/2 are vectors from the central atom to a particular pair of
-nearest neighbors. There are N*(N-1)/2 possible neighbor pairs that
-can contribute to this formula. The quantity in the sum is computed
-for each, and the N/2 smallest are used. This will typically be for
-pairs of atoms in symmetrically opposite positions with respect to the
-central atom; hence the i+N/2 notation.
-
-*N* is an input parameter, which should be set to correspond to the
-number of nearest neighbors in the underlying lattice of atoms. If
-the keyword *fcc* or *bcc* is used, *N* is set to 12 and 8
-respectively. More generally, *N* can be set to a positive, even
-integer.
-
-For an atom on a lattice site, surrounded by atoms on a perfect
-lattice, the centro-symmetry parameter will be 0. It will be near 0
-for small thermal perturbations of a perfect lattice. If a point
-defect exists, the symmetry is broken, and the parameter will be a
-larger positive value. An atom at a surface will have a large
-positive parameter. If the atom does not have *N* neighbors (within
-the potential cutoff), then its centro-symmetry parameter is set to
-0.0.
-
-If the keyword *axes* has the setting *yes*\ , then this compute also
-estimates three symmetry axes for each atom's local neighborhood. The
-first two of these are the vectors joining the two pairs of neighbor
-atoms with smallest contributions to the centrosymmetry parameter,
-i.e. the two most symmetric pairs of atoms. The third vector is
-normal to the first two by the right-hand rule. All three vectors are
-normalized to unit length. For FCC crystals, the first two vectors
-will lie along a <110> direction, while the third vector will lie
-along either a <100> or <111> direction. For HCP crystals, the first
-two vectors will lie along <1000> directions, while the third vector
-will lie along <0001>. This provides a simple way to measure local
-orientation in HCP structures. In general, the *axes* keyword can be
-used to estimate the orientation of symmetry axes in the neighborhood
-of any atom.
-
-Only atoms within the cutoff of the pairwise neighbor list are
-considered as possible neighbors. Atoms not in the compute group are
-included in the *N* neighbors used in this calculation.
-
-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
-*centro/atom* style.
-
-**Output info:**
-
-By default, this compute calculates the centrosymmetry value for each
-atom as a per-atom vector, which can be accessed by any command that
-uses per-atom values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-If the *axes* keyword setting is *yes*\ , then a per-atom array is
-calculated. The first column is the centrosymmetry parameter. The
-next three columns are the x, y, and z components of the first
-symmetry axis, followed by the second, and third symmetry axes in
-columns 5-7 and 8-10.
-
-The centrosymmetry values are unitless values >= 0.0. Their magnitude
-depends on the lattice style due to the number of contibuting neighbor
-pairs in the summation in the formula above. And it depends on the
-local defects surrounding the central atom, as described above. For
-the *axes yes* case, the vector components are also unitless, since
-they represent spatial directions.
-
-Here are typical centro-symmetry values, from a a nanoindentation
-simulation into gold (FCC). These were provided by Jon Zimmerman
-(Sandia):
-
-.. parsed-literal::
-
- Bulk lattice = 0
- Dislocation core ~ 1.0 (0.5 to 1.25)
- Stacking faults ~ 5.0 (4.0 to 6.0)
- Free surface ~ 23.0
-
-These values are *not* normalized by the square of the lattice
-parameter. If they were, normalized values would be:
-
-.. parsed-literal::
-
- Bulk lattice = 0
- Dislocation core ~ 0.06 (0.03 to 0.075)
- Stacking faults ~ 0.3 (0.24 to 0.36)
- Free surface ~ 1.38
-
-For BCC materials, the values for dislocation cores and free surfaces
-would be somewhat different, due to their being only 8 neighbors instead
-of 12.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute cna/atom <compute_cna_atom>`
-
-Default
-"""""""
-
-The default value for the optional keyword is axes = no.
-
-
-----------
-
-
-.. _Kelchner:
-
-
-
-**(Kelchner)** Kelchner, Plimpton, Hamilton, Phys Rev B, 58, 11085 (1998).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_chunk_atom.txt b/doc/html/_sources/compute_chunk_atom.txt
deleted file mode 100644
index a3c228980..000000000
--- a/doc/html/_sources/compute_chunk_atom.txt
+++ /dev/null
@@ -1,699 +0,0 @@
-.. index:: compute chunk/atom
-
-compute chunk/atom command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID chunk/atom style args keyword values ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* chunk/atom = style name of this compute command
-.. parsed-literal::
-
- style = *bin/1d* or *bin/2d* or *bin/3d* or *bin/sphere* or *type* or *molecule* or *compute/fix/variable*
- *bin/1d* args = dim origin delta
- dim = *x* or *y* or *z*
- origin = *lower* or *center* or *upper* or coordinate value (distance units)
- delta = thickness of spatial bins in dim (distance units)
- *bin/2d* args = dim origin delta dim origin delta
- dim = *x* or *y* or *z*
- origin = *lower* or *center* or *upper* or coordinate value (distance units)
- delta = thickness of spatial bins in dim (distance units)
- *bin/3d* args = dim origin delta dim origin delta dim origin delta
- dim = *x* or *y* or *z*
- origin = *lower* or *center* or *upper* or coordinate value (distance units)
- delta = thickness of spatial bins in dim (distance units)
- *bin/sphere* args = xorig yorig zorig rmin rmax nsbin
- xorig,yorig,zorig = center point of sphere
- srmin,srmax = bin from sphere radius rmin to rmax
- nsbin = # of spherical shell bins between rmin and rmax
- *bin/cylinder* args = dim origin delta c1 c2 rmin rmax ncbin
- dim = *x* or *y* or *z* = axis of cylinder axis
- origin = *lower* or *center* or *upper* or coordinate value (distance units)
- delta = thickness of spatial bins in dim (distance units)
- c1,c2 = coords of cylinder axis in other 2 dimensions (distance units)
- crmin,crmax = bin from cylinder radius rmin to rmax (distance units)
- ncbin = # of concentric circle bins between rmin and rmax
- *type* args = none
- *molecule* args = none
- *compute/fix/variable* = c_ID, c_ID[I], f_ID, f_ID[I], v_name with no args
- c_ID = per-atom vector calculated by a compute with ID
- c_ID[I] = Ith column of per-atom array calculated by a compute with ID
- f_ID = per-atom vector calculated by a fix with ID
- f_ID[I] = Ith column of per-atom array calculated by a fix with ID
- v_name = per-atom vector calculated by an atom-style variable with name
-
-* zero or more keyword/values pairs may be appended
-* keyword = *region* or *nchunk* or *static* or *compress* or *bound* or *discard* or *pbc* or *units*
-.. parsed-literal::
-
- *region* value = region-ID
- region-ID = ID of region atoms must be in to be part of a chunk
- *nchunk* value = *once* or *every*
- once = only compute the number of chunks once
- every = re-compute the number of chunks whenever invoked
- *limit* values = 0 or Nc max or Nc exact
- 0 = no limit on the number of chunks
- Nc max = limit number of chunks to be <= Nc
- Nc exact = set number of chunks to exactly Nc
- *ids* value = *once* or *nfreq* or *every*
- once = assign chunk IDs to atoms only once, they persist thereafter
- nfreq = assign chunk IDs to atoms only once every Nfreq steps (if invoked by :doc:`fix ave/chunk <fix_ave_chunk>` which sets Nfreq)
- every = assign chunk IDs to atoms whenever invoked
- *compress* value = *yes* or *no*
- yes = compress chunk IDs to eliminate IDs with no atoms
- no = do not compress chunk IDs even if some IDs have no atoms
- *discard* value = *yes* or *no* or *mixed*
- yes = discard atoms with out-of-range chunk IDs by assigning a chunk ID = 0
- no = keep atoms with out-of-range chunk IDs by assigning a valid chunk ID
- mixed = keep or discard such atoms according to spatial binning rule
- *bound* values = x/y/z lo hi
- x/y/z = *x* or *y* or *z* to bound sptial bins in this dimension
- lo = *lower* or coordinate value (distance units)
- hi = *upper* or coordinate value (distance units)
- *pbc* value = *no* or *yes*
- yes = use periodic distance for bin/sphere and bin/cylinder styles
- *units* value = *box* or *lattice* or *reduced*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all chunk/atom type
- compute 1 all chunk/atom bin/1d z lower 0.02 units reduced
- compute 1 all chunk/atom bin/2d z lower 1.0 y 0.0 2.5
- compute 1 all chunk/atom molecule region sphere nchunk once ids once compress yes
- compute 1 all chunk/atom bin/sphere 5 5 5 2.0 5.0 5 discard yes
- compute 1 all chunk/atom bin/cylinder z lower 2 10 10 2.0 5.0 3 discard yes
-
-Description
-"""""""""""
-
-Define a computation that calculates an integer chunk ID from 1 to
-Nchunk for each atom in the group. Values of chunk IDs are determined
-by the *style* of chunk, which can be based on atom type or molecule
-ID or spatial binning or a per-atom property or value calculated by
-another :doc:`compute <compute>`, :doc:`fix <fix>`, or :doc:`atom-style variable <variable>`. Per-atom chunk IDs can be used by other
-computes with "chunk" in their style name, such as :doc:`compute com/chunk <compute_com_chunk>` or :doc:`compute msd/chunk <compute_msd_chunk>`. Or they can be used by the :doc:`fix ave/chunk <fix_ave_chunk>` command to sum and time average a
-variety of per-atom properties over the atoms in each chunk. Or they
-can simply be accessed by any command that uses per-atom values from a
-compute as input, as discussed in :ref:`Section_howto 15 <howto_15>`.
-
-See :ref:`Section_howto 23 <howto_23>` for an overview of
-how this compute can be used with a variety of other commands to
-tabulate properties of a simulation. The howto section gives several
-examples of input script commands that can be used to calculate
-interesting properties.
-
-Conceptually it is important to realize that this compute does two
-simple things. First, it sets the value of *Nchunk* = the number of
-chunks, which can be a constant value or change over time. Second, it
-assigns each atom to a chunk via a chunk ID. Chunk IDs range from 1
-to *Nchunk* inclusive; some chunks may have no atoms assigned to them.
-Atoms that do not belong to any chunk are assigned a value of 0. Note
-that the two operations are not always performed together. For
-example, spatial bins can be setup once (which sets *Nchunk*\ ), and
-atoms assigned to those bins many times thereafter (setting their
-chunk IDs).
-
-All other commands in LAMMPS that use chunk IDs assume there are
-*Nchunk* number of chunks, and that every atom is assigned to one of
-those chunks, or not assigned to any chunk.
-
-There are many options for specifying for how and when *Nchunk* is
-calculated, and how and when chunk IDs are assigned to atoms. The
-details depend on the chunk *style* and its *args*\ , as well as
-optional keyword settings. They can also depend on whether a :doc:`fix ave/chunk <fix_ave_chunk>` command is using this compute, since
-that command requires *Nchunk* to remain static across windows of
-timesteps it specifies, while it accumulates per-chunk averages.
-
-The details are described below.
-
-
-
-
-
-The different chunk styles operate as follows. For each style, how it
-calculates *Nchunk* and assigns chunk IDs to atoms is explained. Note
-that using the optional keywords can change both of those actions, as
-described further below where the keywords are discussed.
-
-
-----------
-
-
-The *binning* styles perform a spatial binning of atoms, and assign an
-atom the chunk ID corresponding to the bin number it is in. *Nchunk*
-is set to the number of bins, which can change if the simulation box
-size changes.
-
-The *bin/1d*\ , *bin/2d*\ , and *bin/3d* styles define bins as 1d layers
-(slabs), 2d pencils, or 3d boxes. The *dim*\ , *origin*\ , and *delta*
-settings are specified 1, 2, or 3 times. For 2d or 3d bins, there is
-no restriction on specifying dim = x before dim = y or z, or dim = y
-before dim = z. Bins in a particular *dim* have a bin size in that
-dimension given by *delta*\ . In each dimension, bins are defined
-relative to a specified *origin*\ , which may be the lower/upper edge of
-the simulation box (in that dimension), or its center point, or a
-specified coordinate value. Starting at the origin, sufficient bins
-are created in both directions to completely span the simulation box
-or the bounds specified by the optional *bounds* keyword.
-
-For orthogonal simulation boxes, the bins are layers, pencils, or
-boxes aligned with the xyz coordinate axes. For triclinic
-(non-orthogonal) simulation boxes, the bin faces are parallel to the
-tilted faces of the simulation box. See :ref:`this section <howto_12>` of the manual for a discussion of
-the geometry of triclinic boxes in LAMMPS. As described there, a
-tilted simulation box has edge vectors a,b,c. In that nomenclature,
-bins in the x dimension have faces with normals in the "b" cross "c"
-direction. Bins in y have faces normal to the "a" cross "c"
-direction. And bins in z have faces normal to the "a" cross "b"
-direction. Note that in order to define the size and position of
-these bins in an unambiguous fashion, the *units* option must be set
-to *reduced* when using a triclinic simulation box, as noted below.
-
-The meaning of *origin* and *delta* for triclinic boxes is as follows.
-Consider a triclinic box with bins that are 1d layers or slabs in the
-x dimension. No matter how the box is tilted, an *origin* of 0.0
-means start layers at the lower "b" cross "c" plane of the simulation
-box and an *origin* of 1.0 means to start layers at the upper "b"
-cross "c" face of the box. A *delta* value of 0.1 in *reduced* units
-means there will be 10 layers from 0.0 to 1.0, regardless of the
-current size or shape of the simulation box.
-
-The *bin/sphere* style defines a set of spherical shell bins around
-the origin (\ *xorig*\ ,\ *yorig*\ ,\ *zorig*\ ), using *nsbin* bins with radii
-equally spaced between *srmin* and *srmax*\ . This is effectively a 1d
-vector of bins. For example, if *srmin* = 1.0 and *srmax* = 10.0 and
-*nsbin* = 9, then the first bin spans 1.0 < r < 2.0, and the last bin
-spans 9.0 < r 10.0. The geometry of the bins is the same whether the
-simulation box is orthogonal or triclinic; i.e. the spherical shells
-are not tilted or scaled differently in different dimensions to
-transform them into ellipsoidal shells.
-
-The *bin/cylinder* style defines bins for a cylinder oriented along
-the axis *dim* with the axis coordinates in the other two radial
-dimensions at (\ *c1*\ ,\ *c2*\ ). For dim = x, c1/c2 = y/z; for dim = y,
-c1/c2 = x/z; for dim = z, c1/c2 = x/y. This is effectively a 2d array
-of bins. The first dimension is along the cylinder axis, the second
-dimension is radially outward from the cylinder axis. The bin size
-and positions along the cylinder axis are specified by the *origin*
-and *delta* values, the same as for the *bin/1d*\ , *bin/2d*\ , and
-*bin/3d* styles. There are *ncbin* concentric circle bins in the
-radial direction from the cylinder axis with radii equally spaced
-between *crmin* and *crmax*\ . For example, if *crmin* = 1.0 and
-*crmax* = 10.0 and *ncbin* = 9, then the first bin spans 1.0 < r <
-2.0, and the last bin spans 9.0 < r 10.0. The geometry of the bins in
-the radial dimensions is the same whether the simulation box is
-orthogonal or triclinic; i.e. the concetric circles are not tilted or
-scaled differently in the two different dimensions to transform them
-into ellipses.
-
-The created bins (and hence the chunk IDs) are numbered consecutively
-from 1 to the number of bins = *Nchunk*\ . For *bin2d* and *bin3d*\ , the
-numbering varies most rapidly in the first dimension (which could be
-x, y, or z), next rapidly in the 2nd dimension, and most slowly in the
-3rd dimension. For *bin/sphere*\ , the bin with smallest radii is chunk
-1 and the bni with largest radii is chunk Nchunk = *ncbin*\ . For
-*bin/cylinder*\ , the numbering varies most rapidly in the dimension
-along the cylinder axis and most slowly in the radial direction.
-
-Each time this compute is invoked, each atom is mapped to a bin based
-on its current position. Note that between reneighboring timesteps,
-atoms can move outside the current simulation box. If the box is
-periodic (in that dimension) the atom is remapping into the periodic
-box for purposes of binning. If the box in not periodic, the atom may
-have moved outside the bounds of all bins. If an atom is not inside
-any bin, the *discard* keyword is used to determine how a chunk ID is
-assigned to the atom.
-
-
-----------
-
-
-The *type* style uses the atom type as the chunk ID. *Nchunk* is set
-to the number of atom types defined for the simulation, e.g. via the
-:doc:`create_box <create_box>` or :doc:`read_data <read_data>` commands.
-
-
-----------
-
-
-The *molecule* style uses the molecule ID of each atom as its chunk
-ID. *Nchunk* is set to the largest chunk ID. Note that this excludes
-molecule IDs for atoms which are not in the specified group or
-optional region.
-
-There is no requirement that all atoms in a particular molecule are
-assigned the same chunk ID (zero or non-zero), though you probably
-want that to be the case, if you wish to compute a per-molecule
-property. LAMMPS will issue a warning if that is not the case, but
-only the first time that *Nchunk* is calculated.
-
-Note that atoms with a molecule ID = 0, which may be non-molecular
-solvent atoms, have an out-of-range chunk ID. These atoms are
-discarded (not assigned to any chunk) or assigned to *Nchunk*\ ,
-depending on the value of the *discard* keyword.
-
-
-----------
-
-
-The *compute/fix/variable* styles set the chunk ID of each atom based
-on a quantity calculated and stored by a compute, fix, or variable.
-In each case, it must be a per-atom quantity. In each case the
-referenced floating point values are converted to an integer chunk ID
-as follows. The floating point value is truncated (rounded down) to
-an integer value. If the integer value is <= 0, then a chunk ID of 0
-is assigned to the atom. If the integer value is > 0, it becomes the
-chunk ID to the atom. *Nchunk* is set to the largest chunk ID. Note
-that this excludes atoms which are not in the specified group or
-optional region.
-
-If the style begins with "c_", a compute ID must follow which has been
-previously defined in the input script. If no bracketed integer is
-appended, the per-atom vector calculated by the compute is used. If a
-bracketed integer is appended, the Ith column of the per-atom array
-calculated by the compute is used. Users can also write code for
-their own compute styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If the style begins with "f_", a fix ID must follow which has been
-previously defined in the input script. If no bracketed integer is
-appended, the per-atom vector calculated by the fix is used. If a
-bracketed integer is appended, the Ith column of the per-atom array
-calculated by the fix is used. Note that some fixes only produce
-their values on certain timesteps, which must be compatible with the
-timestep on which this compute accesses the fix, else an error
-results. Users can also write code for their own fix styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If a value begins with "v_", a variable name for an *atom* or
-*atomfile* style :doc:`variable <variable>` must follow which has been
-previously defined in the input script. Variables of style *atom* can
-reference thermodynamic keywords and various per-atom attributes, or
-invoke other computes, fixes, or variables when they are evaluated, so
-this is a very general means of generating per-atom quantities to
-treat as a chunk ID.
-
-
-
-
-
-Normally, *Nchunk* = the number of chunks, is re-calculated every time
-this fix is invoked, though the value may or may not change. As
-explained below, the *nchunk* keyword can be set to *once* which means
-*Nchunk* will never change.
-
-If a :doc:`fix ave/chunk <fix_ave_chunk>` command uses this compute, it
-can also turn off the re-calculation of *Nchunk* for one or more
-windows of timesteps. The extent of the windows, during which Nchunk
-is held constant, are determined by the *Nevery*\ , *Nrepeat*\ , *Nfreq*
-values and the *ave* keyword setting that are used by the :doc:`fix ave/chunk <fix_ave_chunk>` command.
-
-Specifically, if *ave* = *one*\ , then for each span of *Nfreq*
-timesteps, *Nchunk* is held constant between the first timestep when
-averaging is done (within the Nfreq-length window), and the last
-timestep when averaging is done (multiple of Nfreq). If *ave* =
-*running* or *window*\ , then *Nchunk* is held constant forever,
-starting on the first timestep when the :doc:`fix ave/chunk <fix_ave_chunk>` command invokes this compute.
-
-Note that multiple :doc:`fix ave/chunk <fix_ave_chunk>` commands can use
-the same compute chunk/atom compute. However, the time windows they
-induce for holding *Nchunk* constant must be identical, else an error
-will be generated.
-
-
-
-
-
-The various optional keywords operate as follows. Note that some of
-them function differently or are ignored by different chunk styles.
-Some of them also have different default values, depending on
-the chunk style, as listed below.
-
-The *region* keyword applies to all chunk styles. If used, an atom
-must be in both the specified group and the specified geometric
-:doc:`region <region>` to be assigned to a chunk.
-
-
-----------
-
-
-The *nchunk* keyword applies to all chunk styles. It specifies how
-often *Nchunk* is recalculated, which in turn can affect the chunk IDs
-assigned to individual atoms.
-
-If *nchunk* is set to *once*\ , then *Nchunk* is only calculated once,
-the first time this compute is invoked. If *nchunk* is set to
-*every*\ , then *Nchunk* is re-calculated every time the compute is
-invoked. Note that, as described above, the use of this compute
-by the :doc:`fix ave/chunk <fix_ave_chunk>` command can override
-the *every* setting.
-
-The default values for *nchunk* are listed below and depend on the
-chunk style and other system and keyword settings. They attempt to
-represent typical use cases for the various chunk styles. The
-*nchunk* value can always be set explicitly if desired.
-
-
-----------
-
-
-The *limit* keyword can be used to limit the calculated value of
-*Nchunk* = the number of chunks. The limit is applied each time
-*Nchunk* is calculated, which also limits the chunk IDs assigned to
-any atom. The *limit* keyword is used by all chunk styles except the
-*binning* styles, which ignore it. This is because the number of bins
-can be tailored using the *bound* keyword (described below) which
-effectively limits the size of *Nchunk*\ .
-
-If *limit* is set to *Nc* = 0, then no limit is imposed on *Nchunk*\ ,
-though the *compress* keyword can still be used to reduce *Nchunk*\ , as
-described below.
-
-If *Nc* > 0, then the effect of the *limit* keyword depends on whether
-the *compress* keyword is also used with a setting of *yes*\ , and
-whether the *compress* keyword is specified before the *limit* keyword
-or after.
-
-In all cases, *Nchunk* is first calculated in the usual way for each
-chunk style, as described above.
-
-First, here is what occurs if *compress yes* is not set. If *limit*
-is set to *Nc max*\ , then *Nchunk* is reset to the smaller of *Nchunk*
-and *Nc*\ . If *limit* is set to *Nc exact*\ , then *Nchunk* is reset to
-*Nc*\ , whether the original *Nchunk* was larger or smaller than *Nc*\ .
-If *Nchunk* shrank due to the *limit* setting, then atom chunk IDs >
-*Nchunk* will be reset to 0 or *Nchunk*\ , depending on the setting of
-the *discard* keyword. If *Nchunk* grew, there will simply be some
-chunks with no atoms assigned to them.
-
-If *compress yes* is set, and the *compress* keyword comes before the
-*limit* keyword, the compression operation is performed first, as
-described below, which resets *Nchunk*\ . The *limit* keyword is then
-applied to the new *Nchunk* value, exactly as described in the
-preceeding paragraph. Note that in this case, all atoms will end up
-with chunk IDs <= *Nc*\ , but their original values (e.g. molecule ID or
-compute/fix/variable value) may have been > *Nc*\ , because of the
-compression operation.
-
-If *compress yes* is set, and the *compress* keyword comes after the
-*limit* keyword, then the *limit* value of *Nc* is applied first to
-the uncompressed value of *Nchunk*\ , but only if *Nc* < *Nchunk*
-(whether *Nc max* or *Nc exact* is used). This effectively means all
-atoms with chunk IDs > *Nc* have their chunk IDs reset to 0 or *Nc*\ ,
-depending on the setting of the *discard* keyword. The compression
-operation is then performed, which may shrink *Nchunk* further. If
-the new *Nchunk* < *Nc* and *limit* = *Nc exact* is specified, then
-*Nchunk* is reset to *Nc*\ , which results in extra chunks with no atoms
-assigned to them. Note that in this case, all atoms will end up with
-chunk IDs <= *Nc*\ , and their original values (e.g. molecule ID or
-compute/fix/variable value) will also have been <= *Nc*\ .
-
-
-----------
-
-
-The *ids* keyword applies to all chunk styles. If the setting is
-*once* then the chunk IDs assigned to atoms the first time this
-compute is invoked will be permanent, and never be re-computed.
-
-If the setting is *nfreq* and if a :doc:`fix ave/chunk <fix_ave_chunk>`
-command is using this compute, then in each of the *Nchunk* = constant
-time windows (discussed above), the chunk ID's assigned to atoms on
-the first step of the time window will persist until the end of the
-time window.
-
-If the setting is *every*\ , which is the default, then chunk IDs are
-re-calculated on any timestep this compute is invoked.
-
-.. note::
-
- If you want the persistent chunk-IDs calculated by this compute
- to be continuous when running from a :doc:`restart file <read_restart>`,
- then you should use the same ID for this compute, as in the original
- run. This is so that the fix this compute creates to store per-atom
- quantities will also have the same ID, and thus be initialized
- correctly with chunk IDs from the restart file.
-
-
-----------
-
-
-The *compress* keyword applies to all chunk styles and affects how
-*Nchunk* is calculated, which in turn affects the chunk IDs assigned
-to each atom. It is useful for converting a "sparse" set of chunk IDs
-(with many IDs that have no atoms assigned to them), into a "dense"
-set of IDs, where every chunk has one or more atoms assigned to it.
-
-Two possible use cases are as follows. If a large simulation box is
-mostly empty space, then the *binning* style may produce many bins
-with no atoms. If *compress* is set to *yes*\ , only bins with atoms
-will be contribute to *Nchunk*\ . Likewise, the *molecule* or
-*compute/fix/variable* styles may produce large *Nchunk* values. For
-example, the :doc:`compute cluster/atom <compute_cluster_atom>` command
-assigns every atom an atom ID for one of the atoms it is clustered
-with. For a million-atom system with 5 clusters, there would only be
-5 unique chunk IDs, but the largest chunk ID might be 1 million,
-resulting in *Nchunk* = 1 million. If *compress* is set to *yes*\ ,
-*Nchunk* will be reset to 5.
-
-If *compress* is set to *no*\ , which is the default, no compression is
-done. If it is set to *yes*\ , all chunk IDs with no atoms are removed
-from the list of chunk IDs, and the list is sorted. The remaining
-chunk IDs are renumbered from 1 to *Nchunk* where *Nchunk* is the new
-length of the list. The chunk IDs assigned to each atom reflect
-the new renumbering from 1 to *Nchunk*\ .
-
-The original chunk IDs (before renumbering) can be accessed by the
-:doc:`compute property/chunk <compute_property_chunk>` command and its
-*id* keyword, or by the :doc:`fix ave/chunk <fix_ave_chunk>` command
-which outputs the original IDs as one of the columns in its global
-output array. For example, using the "compute cluster/atom" command
-discussed above, the original 5 unique chunk IDs might be atom IDs
-(27,4982,58374,857838,1000000). After compresion, these will be
-renumbered to (1,2,3,4,5). The original values (27,...,1000000) can
-be output to a file by the :doc:`fix ave/chunk <fix_ave_chunk>` command,
-or by using the :doc:`fix ave/time <fix_ave_time>` command in
-conjunction with the :doc:`compute property/chunk <compute_property_chunk>` command.
-
-.. note::
-
- The compression operation requires global communication across
- all processors to share their chunk ID values. It can require large
- memory on every processor to store them, even after they are
- compressed, if there are are a large number of unique chunk IDs with
- atoms assigned to them. It uses a STL map to find unique chunk IDs
- and store them in sorted order. Each time an atom is assigned a
- compressed chunk ID, it must access the STL map. All of this means
- that compression can be expensive, both in memory and CPU time. The
- use of the *limit* keyword in conjunction with the *compress* keyword
- can affect these costs, depending on which keyword is used first. So
- use this option with care.
-
-
-----------
-
-
-The *discard* keyword applies to all chunk styles. It affects what
-chunk IDs are assigned to atoms that do not match one of the valid
-chunk IDs from 1 to *Nchunk*\ . Note that it does not apply to atoms
-that are not in the specified group or optionally specified region.
-Those atoms are always assigned a chunk ID = 0.
-
-If the calculated chunk ID for an atom is not within the range 1 to
-*Nchunk* then it is a "discard" atom. Note that *Nchunk* may have
-been shrunk by the *limit* keyword. Or the *compress* keyword may
-have eliminated chunk IDs that were valid before the compression took
-place, and are now not in the compressed list. Also note that for the
-*molecule* chunk style, if new molecules are added to the system,
-their chunk IDs may exceed a previously calculated *Nchunk*\ .
-Likewise, evaluation of a compute/fix/variable on a later timestep may
-return chunk IDs that are invalid for the previously calculated
-*Nchunk*\ .
-
-All the chunk styles except the *binning* styles, must use *discard*
-set to either *yes* or *no*\ . If *discard* is set to *yes*\ , which is
-the default, then every "discard" atom has its chunk ID set to 0. If
-*discard* is set to *no*\ , every "discard" atom has its chunk ID set to
-*Nchunk*\ . I.e. it becomes part of the last chunk.
-
-The *binning* styles use the *discard* keyword to decide whether to
-discard atoms outside the spatial domain covered by bins, or to assign
-them to the bin they are nearest to.
-
-For the *bin/1d*\ , *bin/2d*\ , *bin/3d* styles the details are as
-follows. If *discard* is set to *yes*\ , an out-of-domain atom will
-have its chunk ID set to 0. If *discard* is set to *no*\ , the atom
-will have its chunk ID set to the first or last bin in that dimension.
-If *discard* is set to *mixed*\ , which is the default, it will only
-have its chunk ID set to the first or last bin if bins extend to the
-simulation box boundary in that dimension. This is the case if the
-*bound* keyword settings are *lower* and *upper*\ , which is the
-default. If the *bound* keyword settings are numeric values, then the
-atom will have its chunk ID set to 0 if it is outside the bounds of
-any bin. Note that in this case, it is possible that the first or
-last bin extends beyond the numeric *bounds* settings, depending on
-the specified *origin*\ . If this is the case, the chunk ID of the atom
-is only set to 0 if it is outside the first or last bin, not if it is
-simply outside the numeric *bounds* setting.
-
-For the *bin/sphere* style the details are as follows. If *discard*
-is set to *yes*\ , an out-of-domain atom will have its chunk ID set to
-0. If *discard* is set to *no* or *mixed*\ , the atom will have its
-chunk ID set to the first or last bin, i.e. the innermost or outermost
-spherical shell. If the distance of the atom from the origin is less
-than *rmin*\ , it will be assigned to the first bin. If the distance of
-the atom from the origin is greater than *rmax*\ , it will be assigned
-to the last bin.
-
-For the *bin/cylinder* style the details are as follows. If *discard*
-is set to *yes*\ , an out-of-domain atom will have its chunk ID set to
-0. If *discard* is set to *no*\ , the atom will have its chunk ID set
-to the first or last bin in both the radial and axis dimensions. If
-*discard* is set to *mixed*\ , which is the default, the the radial
-dimension is treated the same as for *discard* = no. But for the axis
-dimensinon, it will only have its chunk ID set to the first or last
-bin if bins extend to the simulation box boundary in the axis
-dimension. This is the case if the *bound* keyword settings are
-*lower* and *upper*\ , which is the default. If the *bound* keyword
-settings are numeric values, then the atom will have its chunk ID set
-to 0 if it is outside the bounds of any bin. Note that in this case,
-it is possible that the first or last bin extends beyond the numeric
-*bounds* settings, depending on the specified *origin*\ . If this is
-the case, the chunk ID of the atom is only set to 0 if it is outside
-the first or last bin, not if it is simply outside the numeric
-*bounds* setting.
-
-If *discard* is set to *no* or *mixed*\ , the atom will have its
-chunk ID set to the first or last bin, i.e. the innermost or outermost
-spherical shell. If the distance of the atom from the origin is less
-than *rmin*\ , it will be assigned to the first bin. If the distance of
-the atom from the origin is greater than *rmax*\ , it will be assigned
-to the last bin.
-
-
-----------
-
-
-The *bound* keyword only applies to the *bin/1d*\ , *bin/2d*\ , *bin/3d*
-styles and to the axis dimension of the *bin/cylinder* style;
-otherwise it is ignored. It can be used one or more times to limit
-the extent of bin coverage in a specified dimension, i.e. to only bin
-a portion of the box. If the *lo* setting is *lower* or the *hi*
-setting is *upper*\ , the bin extent in that direction extends to the
-box boundary. If a numeric value is used for *lo* and/or *hi*\ , then
-the bin extent in the *lo* or *hi* direction extends only to that
-value, which is assumed to be inside (or at least near) the simulation
-box boundaries, though LAMMPS does not check for this. Note that
-using the *bound* keyword typically reduces the total number of bins
-and thus the number of chunks *Nchunk*\ .
-
-The *pbc* keyword only applies to the *bin/sphere* and *bin/cylinder*
-styles. If set to *yes*\ , the distance an atom is from the sphere
-origin or cylinder axis is calculated in a minimum image sense with
-respect to periodic dimensions, when determining which bin the atom is
-in. I.e. if x is a periodic dimension and the distance between the
-atom and the sphere center in the x dimension is greater than 0.5 *
-simulation box length in x, then a box length is subtracted to give a
-distance < 0.5 * simulation box length. This allosws the sphere or
-cylinder center to be near a box edge, and atoms on the other side of
-the periodic box will still be close to the center point/axis. Note
-that with a setting of *yes*\ , the outer sphere or cylinder radius must
-also be <= 0.5 * simulation box length in any periodic dimension
-except for the cylinder axis dimension, or an error is generated.
-
-The *units* keyword only applies to the *binning* styles; otherwise it
-is ignored. For the *bin/1d*\ , *bin/2d*\ , *bin/3d* styles, it
-determines the meaning of the distance units used for the bin sizes
-*delta* and for *origin* and *bounds* values if they are coordinate
-values. For the *bin/sphere* style it determines the meaning of the
-distance units used for *xorig*\ ,\ *yorig*\ ,\ *zorig* and the radii *srmin*
-and *srmax*\ . For the *bin/cylinder* style it determines the meaning
-of the distance units used for *delta*\ ,\ *c1*\ ,\ *c2* and the radii *crmin*
-and *crmax*\ .
-
-For orthogonal simulation boxes, any of the 3 options may
-be used. For non-orthogonal (triclinic) simulation boxes, only the
-*reduced* option may be used.
-
-A *box* value selects standard distance units as defined by the
-:doc:`units <units>` command, e.g. Angstroms for units = real or metal.
-A *lattice* value means the distance units are in lattice spacings.
-The :doc:`lattice <lattice>` command must have been previously used to
-define the lattice spacing. A *reduced* value means normalized
-unitless values between 0 and 1, which represent the lower and upper
-faces of the simulation box respectively. Thus an *origin* value of
-0.5 means the center of the box in any dimension. A *delta* value of
-0.1 means 10 bins span the box in that dimension.
-
-Note that for the *bin/sphere* style, the radii *srmin* and *srmax* are
-scaled by the lattice spacing or reduced value of the *x* dimension.
-
-Note that for the *bin/cylinder* style, the radii *crmin* and *crmax*
-are scaled by the lattice spacing or reduced value of the 1st
-dimension perpendicular to the cylinder axis. E.g. y for an x-axis
-cylinder, x for a y-axis cylinder, and x for a z-axis cylinder.
-
-
-----------
-
-
-**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
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-atom vector values are unitless chunk IDs, ranging from 1 to
-*Nchunk* (inclusive) for atoms assigned to chunks, and 0 for atoms not
-belonging to a chunk.
-
-Restrictions
-""""""""""""
-
-
-Even if the *nchunk* keyword is set to *once*\ , the chunk IDs assigned
-to each atom are not stored in a restart files. This means you cannot
-expect those assignments to persist in a restarted simulation.
-Instead you must re-specify this command and assign atoms to chunks when
-the restarted simulation begins.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix ave/chunk <fix_ave_chunk>`
-
-Default
-"""""""
-
-The option defaults are as follows:
-
-* region = none
-* nchunk = every, if compress is yes, overriding other defaults listed here
-* nchunk = once, for type style
-* nchunk = once, for mol style if region is none
-* nchunk = every, for mol style if region is set
-* nchunk = once, for binning style if the simulation box size is static or units = reduced
-* nchunk = every, for binning style if the simulation box size is dynamic and units is lattice or box
-* nchunk = every, for compute/fix/variable style
-* limit = 0
-* ids = every
-* compress = no
-* discard = yes, for all styles except binning
-* discard = mixed, for binning styles
-* bound = lower and upper in all dimensions
-* pbc = no
-* units = lattice
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_cluster_atom.txt b/doc/html/_sources/compute_cluster_atom.txt
deleted file mode 100644
index 52cf7ecb7..000000000
--- a/doc/html/_sources/compute_cluster_atom.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-.. index:: compute cluster/atom
-
-compute cluster/atom command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID cluster/atom cutoff
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* cluster/atom = style name of this compute command
-* cutoff = distance within which to label atoms as part of same cluster (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all cluster/atom 1.0
-
-Description
-"""""""""""
-
-Define a computation that assigns each atom a cluster ID.
-
-A cluster is defined as a set of atoms, each of which is within the
-cutoff distance from one or more other atoms in the cluster. If an
-atom has no neighbors within the cutoff distance, then it is a 1-atom
-cluster. The ID of every atom in the cluster will be the smallest
-atom ID of any atom in the cluster.
-
-Only atoms in the compute group are clustered and assigned cluster
-IDs. Atoms not in the compute group are assigned a cluster ID = 0.
-
-The neighbor list needed to compute this quantity is constructed each
-time the calculation is performed (i.e. 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 of a
-*clsuter/atom* style.
-
-.. note::
-
- If you have a bonded system, then the settings of
- :doc:`special_bonds <special_bonds>` command can remove pairwise
- interactions between atoms in the same bond, angle, or dihedral. This
- is the default setting for the :doc:`special_bonds <special_bonds>`
- command, and means those pairwise interactions do not appear in the
- neighbor list. Because this fix uses the neighbor list, it also means
- those pairs will not be included when computing the clusters. This
- does not apply when using long-range coulomb (\ *coul/long*\ , *coul/msm*\ ,
- *coul/wolf* or similar. One way to get around this would be to set
- special_bond scaling factors to very tiny numbers that are not exactly
- zero (e.g. 1.0e-50). Another workaround is to write a dump file, and
- use the :doc:`rerun <rerun>` command to compute the clusters for
- snapshots in the dump file. The rerun script can use a
- :doc:`special_bonds <special_bonds>` command that includes all pairs in
- the neighbor list.
-
-**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
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-atom vector values will be an ID > 0, as explained above.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute coord/atom <compute_coord_atom>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_cna_atom.txt b/doc/html/_sources/compute_cna_atom.txt
deleted file mode 100644
index 336ce8263..000000000
--- a/doc/html/_sources/compute_cna_atom.txt
+++ /dev/null
@@ -1,117 +0,0 @@
-.. index:: compute cna/atom
-
-compute cna/atom command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID cna/atom cutoff
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* cna/atom = style name of this compute command
-* cutoff = cutoff distance for nearest neighbors (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all cna/atom 3.08
-
-Description
-"""""""""""
-
-Define a computation that calculates the CNA (Common Neighbor
-Analysis) pattern for each atom in the group. In solid-state systems
-the CNA pattern is a useful measure of the local crystal structure
-around an atom. The CNA methodology is described in :ref:`(Faken) <Faken>`
-and :ref:`(Tsuzuki) <Tsuzuki>`.
-
-Currently, there are five kinds of CNA patterns LAMMPS recognizes:
-
-* fcc = 1
-* hcp = 2
-* bcc = 3
-* icosohedral = 4
-* unknown = 5
-
-The value of the CNA pattern will be 0 for atoms not in the specified
-compute group. Note that normally a CNA calculation should only be
-performed on mono-component systems.
-
-The CNA calculation can be sensitive to the specified cutoff value.
-You should insure the appropriate nearest neighbors of an atom are
-found within the cutoff distance for the presumed crystal strucure.
-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:
-
-.. image:: Eqs/cna_cutoff1.jpg
- :align: center
-
-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 CNA 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:
-
-.. image:: Eqs/cna_cutoff2.jpg
- :align: center
-
-where Rc is the cutoff distance of the potential, Rs is the skin
-distance as specified by the :doc:`neighbor <neighbor>` command, and
-cutoff is the argument used with the compute cna/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
-*cna/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
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-atom vector values will be a number from 0 to 5, as explained
-above.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute centro/atom <compute_centro_atom>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Faken:
-
-
-
-**(Faken)** Faken, Jonsson, Comput Mater Sci, 2, 279 (1994).
-
-.. _Tsuzuki:
-
-
-
-**(Tsuzuki)** Tsuzuki, Branicio, Rino, Comput Phys Comm, 177, 518 (2007).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_com.txt b/doc/html/_sources/compute_com.txt
deleted file mode 100644
index 0a34de74d..000000000
--- a/doc/html/_sources/compute_com.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-.. index:: compute com
-
-compute com command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID com
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* com = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all com
-
-Description
-"""""""""""
-
-Define a computation that calculates the center-of-mass of the group
-of atoms, including all effects due to atoms passing thru periodic
-boundaries.
-
-A vector of three quantites is calculated by this compute, which
-are the x,y,z coordinates of the center of mass.
-
-.. note::
-
- The coordinates of an atom contribute to the center-of-mass in
- "unwrapped" form, by using the image flags associated with each atom.
- See the :doc:`dump custom <dump>` command for a discussion of
- "unwrapped" coordinates. See the Atoms section of the
- :doc:`read_data <read_data>` command for a discussion of image flags and
- how they are set for each atom. You can reset the image flags
- (e.g. to 0) before invoking this compute by using the :doc:`set image <set>` command.
-
-**Output info:**
-
-This compute calculates a global vector of length 3, which can be
-accessed by indices 1-3 by any command that uses global vector values
-from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector values are "intensive". The vector values will be in
-distance :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute com/chunk <compute_com_chunk>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_com_chunk.txt b/doc/html/_sources/compute_com_chunk.txt
deleted file mode 100644
index 5a7047211..000000000
--- a/doc/html/_sources/compute_com_chunk.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-.. index:: compute com/chunk
-
-compute com/chunk command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID com/chunk chunkID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* com/chunk = style name of this compute command
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 fluid com/chunk molchunk
-
-Description
-"""""""""""
-
-Define a computation that calculates the center-of-mass for multiple
-chunks of atoms.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-This compute calculates the x,y,z coordinates of the center-of-mass
-for each chunk, which includes all effects due to atoms passing thru
-periodic boundaries.
-
-Note that only atoms in the specified group contribute to the
-calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
-defines its own group; atoms will have a chunk ID = 0 if they are not
-in that group, signifying they are not assigned to a chunk, and will
-thus also not contribute to this calculation. You can specify the
-"all" group for this command if you simply want to include atoms with
-non-zero chunk IDs.
-
-.. note::
-
- The coordinates of an atom contribute to the chunk's
- center-of-mass in "unwrapped" form, by using the image flags
- associated with each atom. See the :doc:`dump custom <dump>` command
- for a discussion of "unwrapped" coordinates. See the Atoms section of
- the :doc:`read_data <read_data>` command for a discussion of image flags
- and how they are set for each atom. You can reset the image flags
- (e.g. to 0) before invoking this compute by using the :doc:`set image <set>` command.
-
-The simplest way to output the results of the compute com/chunk
-calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
-command, for example:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk all com/chunk cc1
- fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
-
-**Output info:**
-
-This compute calculates a global array where the number of rows = the
-number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The number of columns =
-3 for the x,y,z center-of-mass coordinates of each chunk. These
-values can be accessed by any command that uses global array values
-from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The array values are "intensive". The array values will be in
-distance :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute com <compute_com>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_contact_atom.txt b/doc/html/_sources/compute_contact_atom.txt
deleted file mode 100644
index ea633116a..000000000
--- a/doc/html/_sources/compute_contact_atom.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-.. index:: compute contact/atom
-
-compute contact/atom command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID contact/atom
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* contact/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all contact/atom
-
-Description
-"""""""""""
-
-Define a computation that calculates the number of contacts
-for each atom in a group.
-
-The contact number is defined for finite-size spherical particles as
-the number of neighbor atoms which overlap the central particle,
-meaning that their distance of separation is less than or equal to the
-sum of the radii of the two particles.
-
-The value of the contact number will be 0.0 for atoms not in the
-specified compute group.
-
-**Output info:**
-
-This compute calculates a per-atom vector, whose values can be
-accessed by any command that uses per-atom values from a compute as
-input. See :ref:`Section_howto 15 <howto_15>` for an
-overview of LAMMPS output options.
-
-The per-atom vector values will be a number >= 0.0, as explained
-above.
-
-Restrictions
-""""""""""""
-
-
-This compute requires that atoms store a radius as defined by the
-:doc:`atom_style sphere <atom_style>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute coord/atom <compute_coord_atom>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_coord_atom.txt b/doc/html/_sources/compute_coord_atom.txt
deleted file mode 100644
index 4a12143af..000000000
--- a/doc/html/_sources/compute_coord_atom.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-.. index:: compute coord/atom
-
-compute coord/atom command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID coord/atom cutoff type1 type2 ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* coord/atom = style name of this compute command
-* cutoff = distance within which to count coordination neighbors (distance units)
-* typeN = atom type for Nth coordination count (see asterisk form below)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all coord/atom 2.0
- compute 1 all coord/atom 6.0 1 2
- compute 1 all coord/atom 6.0 2*4 5*8 *
-
-Description
-"""""""""""
-
-Define a computation that calculates one or more coordination numbers
-for each atom in a group.
-
-A coordination number is defined as the number of neighbor atoms with
-specified atom type(s) that are within the specified cutoff distance
-from the central atom. Atoms not in the group are included in a
-coordination number of atoms in the group.
-
-The *typeN* keywords allow you to specify which atom types contribute
-to each coordination number. One coordination number is computed for
-each of the *typeN* keywords listed. If no *typeN* keywords are
-listed, a single coordination number is calculated, which includes
-atoms of all types (same as the "*" format, see below).
-
-The *typeN* keywords can be specified in one of two ways. An explicit
-numeric value can be used, as in the 2nd example above. Or a
-wild-card asterisk can be used to specify a range of atom types. This
-takes the form "*" or "*n" or "n*" or "m*n". If N = the number of
-atom types, then an asterisk with no numeric values means all types
-from 1 to N. A leading asterisk means all types from 1 to n
-(inclusive). A trailing asterisk means all types from n to N
-(inclusive). A middle asterisk means all types from m to n
-(inclusive).
-
-The value of all coordination numbers will be 0.0 for atoms not in the
-specified compute group.
-
-The neighbor list needed to compute this quantity is constructed each
-time the calculation is performed (i.e. each time a snapshot of atoms
-is dumped). Thus it can be inefficient to compute/dump this quantity
-too frequently.
-
-.. note::
-
- If you have a bonded system, then the settings of
- :doc:`special_bonds <special_bonds>` command can remove pairwise
- interactions between atoms in the same bond, angle, or dihedral. This
- is the default setting for the :doc:`special_bonds <special_bonds>`
- command, and means those pairwise interactions do not appear in the
- neighbor list. Because this fix uses the neighbor list, it also means
- those pairs will not be included in the coordination count. One way
- to get around this, is to write a dump file, and use the
- :doc:`rerun <rerun>` command to compute the coordination for snapshots
- in the dump file. The rerun script can use a
- :doc:`special_bonds <special_bonds>` command that includes all pairs in
- the neighbor list.
-
-**Output info:**
-
-If single *type1* keyword is specified (or if none are specified),
-this compute calculates a per-atom vector. If multiple *typeN*
-keywords are specified, this compute calculates a per-atom array, with
-N columns. These values can be accessed by any command that uses
-per-atom values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The per-atom vector or array values will be a number >= 0.0, as
-explained above.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute cluster/atom <compute_cluster_atom>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_damage_atom.txt b/doc/html/_sources/compute_damage_atom.txt
deleted file mode 100644
index 114f07020..000000000
--- a/doc/html/_sources/compute_damage_atom.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-.. index:: compute damage/atom
-
-compute damage/atom command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID damage/atom
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* damage/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all damage/atom
-
-Description
-"""""""""""
-
-Define a computation that calculates the per-atom damage for each atom
-in a group. This is a quantity relevant for :doc:`Peridynamics models <pair_peri>`. See `this document <PDF/PDLammps_overview.pdf>`_
-for an overview of LAMMPS commands for Peridynamics modeling.
-
-The "damage" of a Peridymaics particles is based on the bond breakage
-between the particle and its neighbors. If all the bonds are broken
-the particle is considered to be fully damaged.
-
-See the `PDLAMMPS user guide <http://www.sandia.gov/~mlparks/papers/PDLAMMPS.pdf>`_ for a formal
-definition of "damage" and more details about Peridynamics as it is
-implemented in LAMMPS.
-
-This command can be used with all the Peridynamic pair styles.
-
-The damage value will be 0.0 for atoms not in the specified compute
-group.
-
-**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
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-atom vector values are unitlesss numbers (damage) >= 0.0.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the PERI package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute dilatation <compute_dilatation>`, :doc:`compute plasticity <compute_plasticity>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_dihedral.txt b/doc/html/_sources/compute_dihedral.txt
deleted file mode 100644
index 8c0281e40..000000000
--- a/doc/html/_sources/compute_dihedral.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-.. index:: compute dihedral
-
-compute dihedral command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID dihedral
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* dihedral = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all dihedral
-
-Description
-"""""""""""
-
-Define a computation that extracts the dihedral energy calculated by
-each of the dihedral sub-styles used in the :doc:`dihedral_style hybrid <dihedral_hybrid>` command. These values are made
-accessible for output or further processing by other commands. The
-group specified for this command is ignored.
-
-This compute is useful when using :doc:`dihedral_style hybrid <dihedral_hybrid>` if you want to know the portion of the
-total energy contributed by one or more of the hybrid sub-styles.
-
-**Output info:**
-
-This compute calculates a global vector of length N where N is the
-number of sub_styles defined by the :doc:`dihedral_style hybrid <dihedral_style>` command. which can be accessed by indices
-1-N. These values can be used by any command that uses global scalar
-or vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector values are "extensive" and will be in energy
-:doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute pe <compute_pe>`, :doc:`compute pair <compute_pair>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_dihedral_local.txt b/doc/html/_sources/compute_dihedral_local.txt
deleted file mode 100644
index 1fb50f5bd..000000000
--- a/doc/html/_sources/compute_dihedral_local.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-.. index:: compute dihedral/local
-
-compute dihedral/local command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID dihedral/local value1 value2 ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* dihedral/local = style name of this compute command
-* one or more values may be appended
-* value = *phi*
-.. parsed-literal::
-
- *phi* = tabulate dihedral angles
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all dihedral/local phi
-
-Description
-"""""""""""
-
-Define a computation that calculates properties of individual dihedral
-interactions. The number of datums generated, aggregated across all
-processors, equals the number of angles in the system, modified by the
-group parameter as explained below.
-
-The value *phi* is the dihedral angle, as defined in the diagram on
-the :doc:`dihedral_style <dihedral_style>` doc page.
-
-The local data stored by this command is generated by looping over all
-the atoms owned on a processor and their dihedrals. A dihedral will
-only be included if all 4 atoms in the dihedral are in the specified
-compute group.
-
-Note that as atoms migrate from processor to processor, there will be
-no consistent ordering of the entries within the local vector or array
-from one timestep to the next. The only consistency that is
-guaranteed is that the ordering on a particular timestep will be the
-same for local vectors or arrays generated by other compute commands.
-For example, dihedral output from the :doc:`compute property/local <compute_property_local>` command can be combined
-with data from this command and output by the :doc:`dump local <dump>`
-command in a consistent way.
-
-Here is an example of how to do this:
-
-.. parsed-literal::
-
- compute 1 all property/local dtype datom1 datom2 datom3 datom4
- compute 2 all dihedral/local phi
- dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_1[3] c_1[4] c_1[5] c_2[1]
-
-**Output info:**
-
-This compute calculates a local vector or local array depending on the
-number of keywords. The length of the vector or number of rows in the
-array is the number of dihedrals. If a single keyword is specified, a
-local vector is produced. If two or more keywords are specified, a
-local array is produced where the number of columns = the number of
-keywords. The vector or array can be accessed by any command that
-uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The output for *phi* will be in degrees.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump local <dump>`, :doc:`compute property/local <compute_property_local>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_dilatation_atom.txt b/doc/html/_sources/compute_dilatation_atom.txt
deleted file mode 100644
index 54fe89e9c..000000000
--- a/doc/html/_sources/compute_dilatation_atom.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-.. index:: compute dilatation/atom
-
-compute dilatation/atom command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID dilatation/atom
-
-* ID, group-ID are documented in compute command
-* dilation/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all dilatation/atom
-
-Description
-"""""""""""
-
-Define a computation that calculates the per-atom dilatation for each
-atom in a group. This is a quantity relevant for :doc:`Peridynamics models <pair_peri>`. See `this document <PDF/PDLammps_overview.pdf>`_
-for an overview of LAMMPS commands for Peridynamics modeling.
-
-For small deformation, dilatation of is the measure of the volumetric
-strain.
-
-The dilatation "theta" for each peridynamic particle I is calculated
-as a sum over its neighbors with unbroken bonds, where the
-contribution of the IJ pair is a function of the change in bond length
-(versus the initial length in the reference state), the volume
-fraction of the particles and an influence function. See the
-`PDLAMMPS user guide <http://www.sandia.gov/~mlparks/papers/PDLAMMPS.pdf>`_ for a formal
-definition of dilatation.
-
-This command can only be used with a subset of the Peridynamic :doc:`pair styles <pair_peri>`: peri/lps, peri/ves and peri/eps.
-
-The dilatation value will be 0.0 for atoms not in the specified
-compute group.
-
-**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_howto 15 for an overview of LAMMPS output options.
-
-The per-atom vector values are unitlesss numbers (theta) >= 0.0.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the PERI package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute damage <compute_damage>`, :doc:`compute plasticity <compute_plasticity>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_dipole_chunk.txt b/doc/html/_sources/compute_dipole_chunk.txt
deleted file mode 100644
index e668edc12..000000000
--- a/doc/html/_sources/compute_dipole_chunk.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-.. index:: compute dipole/chunk
-
-compute dipole/chunk command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID dipole/chunk chunkID charge-correction
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* dipole/chunk = style name of this compute command
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-* charge-correction = *mass* or *geometry*\ , use COM or geometric center for charged chunk correction (optional)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 fluid dipole/chunk molchunk
- compute dw water dipole/chunk 1 geometry
-
-Description
-"""""""""""
-
-Define a computation that calculates the dipole vector and total dipole
-for multiple chunks of atoms.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-This compute calculates the x,y,z coordinates of the dipole vector
-and the total dipole moment for each chunk, which includes all effects
-due to atoms passing thru periodic boundaries. For chunks with a net
-charge the resulting dipole is made position independent by subtracting
-the position vector of the center of mass or geometric center times the
-net charge from the computed dipole vector.
-
-Note that only atoms in the specified group contribute to the
-calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
-defines its own group; atoms will have a chunk ID = 0 if they are not
-in that group, signifying they are not assigned to a chunk, and will
-thus also not contribute to this calculation. You can specify the
-"all" group for this command if you simply want to include atoms with
-non-zero chunk IDs.
-
-.. note::
-
- The coordinates of an atom contribute to the chunk's
- dipole in "unwrapped" form, by using the image flags
- associated with each atom. See the :doc:`dump custom <dump>` command
- for a discussion of "unwrapped" coordinates. See the Atoms section of
- the :doc:`read_data <read_data>` command for a discussion of image flags
- and how they are set for each atom. You can reset the image flags
- (e.g. to 0) before invoking this compute by using the :doc:`set image <set>` command.
-
-The simplest way to output the results of the compute com/chunk
-calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
-command, for example:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk all dipole/chunk cc1
- fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
-
-**Output info:**
-
-This compute calculates a global array where the number of rows = the
-number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The number of columns =
-4 for the x,y,z dipole vector components and the total dipole of each
-chunk. These values can be accessed by any command that uses global
-array values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The array values are "intensive". The array values will be in
-dipole units, i.e. charge units times distance :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute com/chunk <compute_com_chunk>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_displace_atom.txt b/doc/html/_sources/compute_displace_atom.txt
deleted file mode 100644
index 8c0e84bc5..000000000
--- a/doc/html/_sources/compute_displace_atom.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-.. index:: compute displace/atom
-
-compute displace/atom command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID displace/atom
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* displace/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all displace/atom
-
-Description
-"""""""""""
-
-Define a computation that calculates the current displacement of each
-atom in the group from its original coordinates, including all effects
-due to atoms passing thru periodic boundaries.
-
-A vector of four quantites per atom is calculated by this compute.
-The first 3 elements of the vector are the dx,dy,dz displacements.
-The 4th component is the total displacement, i.e. sqrt(dx*dx + dy*dy +
-dz*dz).
-
-The displacement of an atom is from its original position at the time
-the compute command was issued. The value of the displacement will be
-0.0 for atoms not in the specified compute group.
-
-.. note::
-
- Initial coordinates are stored in "unwrapped" form, by using the
- image flags associated with each atom. See the :doc:`dump custom <dump>` command for a discussion of "unwrapped" coordinates.
- See the Atoms section of the :doc:`read_data <read_data>` command for a
- discussion of image flags and how they are set for each atom. You can
- reset the image flags (e.g. to 0) before invoking this compute by
- using the :doc:`set image <set>` command.
-
-.. note::
-
- If you want the quantities calculated by this compute to be
- continuous when running from a :doc:`restart file <read_restart>`, then
- you should use the same ID for this compute, as in the original run.
- This is so that the fix this compute creates to store per-atom
- quantities will also have the same ID, and thus be initialized
- correctly with time=0 atom coordinates from the restart file.
-
-**Output info:**
-
-This compute calculates a per-atom array with 4 columns, which can be
-accessed by indices 1-4 by any command that uses per-atom values from
-a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The per-atom array values will be in distance :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute msd <compute_msd>`, :doc:`dump custom <dump>`, :doc:`fix store/state <fix_store_state>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_dpd.txt b/doc/html/_sources/compute_dpd.txt
deleted file mode 100644
index 61241d83e..000000000
--- a/doc/html/_sources/compute_dpd.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-.. index:: compute dpd
-
-compute dpd command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID dpd
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* dpd = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all dpd
-
-Description
-"""""""""""
-
-Define a computation that accumulates the total internal conductive
-energy (U_cond), the total internal mechanical energy (U_mech), the
-total chemical energy (U_chem) and the *harmonic* average of the internal
-temperature (dpdTheta) for the entire system of particles. See the
-:doc:`compute dpd/atom <compute_dpd_atom>` command if you want
-per-particle internal energies and internal temperatures.
-
-The system internal properties are computed according to the following
-relations:
-
-.. image:: Eqs/compute_dpd.jpg
- :align: center
-
-where N is the number of particles in the system
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global vector of length 5 (U_cond, U_mech,
-U_chem, dpdTheta, N_particles), which can be accessed by indices 1-5. See
-:ref:`this section <howto_15>` for an overview of LAMMPS
-output options.
-
-The vector values will be in energy and temperature :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-DPD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This command also requires use of the :doc:`atom_style dpd <atom_style>`
-command.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute dpd/atom <compute_dpd_atom>`,
-:doc:`thermo_style <thermo_style>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Larentzos:
-
-
-
-**(Larentzos)** J.P. Larentzos, J.K. Brennan, J.D. Moore, and
-W.D. Mattson, "LAMMPS Implementation of Constant Energy Dissipative
-Particle Dynamics (DPD-E)", ARL-TR-6863, U.S. Army Research
-Laboratory, Aberdeen Proving Ground, MD (2014).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_dpd_atom.txt b/doc/html/_sources/compute_dpd_atom.txt
deleted file mode 100644
index b3919f67e..000000000
--- a/doc/html/_sources/compute_dpd_atom.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-.. index:: compute dpd/atom
-
-compute dpd/atom command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID dpd/atom
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* dpd/atom = style name of this compute command
-
-Examples
-""""""""
-
-compute 1 all dpd/atom
-
-Description
-"""""""""""
-
-Define a computation that accesses the per-particle internal
-conductive energy (u_cond), internal mechanical energy (u_mech),
-internal chemical energy (u_chem) and
-internal temperatures (dpdTheta) for each particle in a group. See
-the :doc:`compute dpd <compute_dpd>` command if you want the total
-internal conductive energy, the total internal mechanical energy, the
-total chemical energy and
-average internal temperature of the entire system or group of dpd
-particles.
-
-**Output info:**
-
-This compute calculates a per-particle array with 4 columns (u_cond,
-u_mech, u_chem, dpdTheta), which can be accessed by indices 1-4 by any command
-that uses per-particle values from a compute as input. See
-:ref:`Section_howto15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-particle array values will be in energy (u_cond, u_mech, u_chem)
-and temperature (dpdTheta) :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-DPD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This command also requires use of the :doc:`atom_style dpd <atom_style>`
-command.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump custom <dump>`, :doc:`compute dpd <compute_dpd>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Larentzos:
-
-
-
-**(Larentzos)** J.P. Larentzos, J.K. Brennan, J.D. Moore, and
-W.D. Mattson, "LAMMPS Implementation of Constant Energy Dissipative
-Particle Dynamics (DPD-E)", ARL-TR-6863, U.S. Army Research
-Laboratory, Aberdeen Proving Ground, MD (2014).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_erotate_asphere.txt b/doc/html/_sources/compute_erotate_asphere.txt
deleted file mode 100644
index f75175b3f..000000000
--- a/doc/html/_sources/compute_erotate_asphere.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-.. index:: compute erotate/asphere
-
-compute erotate/asphere command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID erotate/asphere
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* erotate/asphere = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all erotate/asphere
-
-Description
-"""""""""""
-
-Define a computation that calculates the rotational kinetic energy of
-a group of aspherical particles. The aspherical particles can be
-ellipsoids, or line segments, or triangles. See the
-:doc:`atom_style <atom_style>` and :doc:`read_data <read_data>` commands
-for descriptions of these options.
-
-For all 3 types of particles, the rotational kinetic energy is
-computed as 1/2 I w^2, where I is the inertia tensor for the
-aspherical particle and w is its angular velocity, which is computed
-from its angular momentum if needed.
-
-.. note::
-
- For :doc:`2d models <dimension>`, ellipsoidal particles are
- treated as ellipsoids, not ellipses, meaning their moments of inertia
- will be the same as in 3d.
-
-**Output info:**
-
-This compute calculates a global scalar (the KE). This value can be
-used by any command that uses a global scalar value from a compute as
-input. See :ref:`Section_howto 15 <howto_15>` for an
-overview of LAMMPS output options.
-
-The scalar value calculated by this compute is "extensive". The
-scalar value will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute requires that ellipsoidal particles atoms store a shape
-and quaternion orientation and angular momentum as defined by the
-:doc:`atom_style ellipsoid <atom_style>` command.
-
-This compute requires that line segment particles atoms store a length
-and orientation and angular velocity as defined by the :doc:`atom_style line <atom_style>` command.
-
-This compute requires that triangular particles atoms store a size and
-shape and quaternion orientation and angular momentum as defined by
-the :doc:`atom_style tri <atom_style>` command.
-
-All particles in the group must be finite-size. They cannot be point
-particles.
-
-**Related commands:** none
-
-:doc:`compute erotate/sphere <compute_erotate_sphere>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_erotate_rigid.txt b/doc/html/_sources/compute_erotate_rigid.txt
deleted file mode 100644
index 093860fef..000000000
--- a/doc/html/_sources/compute_erotate_rigid.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-.. index:: compute erotate/rigid
-
-compute erotate/rigid command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID erotate/rigid fix-ID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* erotate/rigid = style name of this compute command
-* fix-ID = ID of rigid body fix
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all erotate/rigid myRigid
-
-Description
-"""""""""""
-
-Define a computation that calculates the rotational kinetic energy of
-a collection of rigid bodies, as defined by one of the :doc:`fix rigid <fix_rigid>` command variants.
-
-The rotational energy of each rigid body is computed as 1/2 I Wbody^2,
-where I is the inertia tensor for the rigid body, and Wbody is its
-angular velocity vector. Both I and Wbody are in the frame of
-reference of the rigid body, i.e. I is diagonalized.
-
-The *fix-ID* should be the ID of one of the :doc:`fix rigid <fix_rigid>`
-commands which defines the rigid bodies. The group specified in the
-compute command is ignored. The rotational energy of all the rigid
-bodies defined by the fix rigid command in included in the
-calculation.
-
-**Output info:**
-
-This compute calculates a global scalar (the summed rotational energy
-of all the rigid bodies). This value can be used by any command that
-uses a global scalar value from a compute as input. See
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The scalar value calculated by this compute is "extensive". The
-scalar value will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the RIGID package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute ke/rigid <compute_erotate_ke_rigid>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_erotate_sphere.txt b/doc/html/_sources/compute_erotate_sphere.txt
deleted file mode 100644
index 5ed6d6a10..000000000
--- a/doc/html/_sources/compute_erotate_sphere.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-.. index:: compute erotate/sphere
-
-compute erotate/sphere command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID erotate/sphere
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* erotate/sphere = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all erotate/sphere
-
-Description
-"""""""""""
-
-Define a computation that calculates the rotational kinetic energy of
-a group of spherical particles.
-
-The rotational energy is computed as 1/2 I w^2, where I is the moment
-of inertia for a sphere and w is the particle's angular velocity.
-
-.. note::
-
- For :doc:`2d models <dimension>`, particles are treated as
- spheres, not disks, meaning their moment of inertia will be the same
- as in 3d.
-
-**Output info:**
-
-This compute calculates a global scalar (the KE). This value can be
-used by any command that uses a global scalar value from a compute as
-input. See :ref:`Section_howto 15 <howto_15>` for an
-overview of LAMMPS output options.
-
-The scalar value calculated by this compute is "extensive". The
-scalar value will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute requires that atoms store a radius and angular velocity
-(omega) as defined by the :doc:`atom_style sphere <atom_style>` command.
-
-All particles in the group must be finite-size spheres or point
-particles. They cannot be aspherical. Point particles will not
-contribute to the rotational energy.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute erotate/asphere <compute_erotate_asphere>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_erotate_sphere_atom.txt b/doc/html/_sources/compute_erotate_sphere_atom.txt
deleted file mode 100644
index ba529198c..000000000
--- a/doc/html/_sources/compute_erotate_sphere_atom.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-.. index:: compute erotate/sphere/atom
-
-compute erotate/sphere/atom command
-===================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID erotate/sphere/atom
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* erotate/sphere/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all erotate/sphere/atom
-
-Description
-"""""""""""
-
-Define a computation that calculates the rotational kinetic energy for
-each particle in a group.
-
-The rotational energy is computed as 1/2 I w^2, where I is the moment
-of inertia for a sphere and w is the particle's angular velocity.
-
-.. note::
-
- For :doc:`2d models <dimension>`, particles are treated as
- spheres, not disks, meaning their moment of inertia will be the same
- as in 3d.
-
-The value of the rotational kinetic energy will be 0.0 for atoms not
-in the specified compute group or for point particles with a radius =
-0.0.
-
-**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
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-atom vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump custom <dump>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_event_displace.txt b/doc/html/_sources/compute_event_displace.txt
deleted file mode 100644
index ac54510ed..000000000
--- a/doc/html/_sources/compute_event_displace.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-.. index:: compute event/displace
-
-compute event/displace command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID event/displace threshold
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* event/displace = style name of this compute command
-* threshold = minimum distance anyparticle must move to trigger an event (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all event/displace 0.5
-
-Description
-"""""""""""
-
-Define a computation that flags an "event" if any particle in the
-group has moved a distance greater than the specified threshold
-distance when compared to a previously stored reference state
-(i.e. the previous event). This compute is typically used in
-conjunction with the :doc:`prd <prd>` and :doc:`tad <tad>` commands,
-to detect if a transition
-to a new minimum energy basin has occurred.
-
-This value calculated by the compute is equal to 0 if no particle has
-moved far enough, and equal to 1 if one or more particles have moved
-further than the threshold distance.
-
-.. note::
-
- If the system is undergoing significant center-of-mass motion,
- due to thermal motion, an external force, or an initial net momentum,
- then this compute will not be able to distinguish that motion from
- local atom displacements and may generate "false postives."
-
-**Output info:**
-
-This compute calculates a global scalar (the flag). This value can be
-used by any command that uses a global scalar value from a compute as
-input. See :ref:`Section_howto 15 <howto_15>` for an
-overview of LAMMPS output options.
-
-The scalar value calculated by this compute is "intensive". The
-scalar value will be a 0 or 1 as explained above.
-
-Restrictions
-""""""""""""
-
-
-This command can only be used if LAMMPS was built with the REPLICA
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`prd <prd>`, :doc:`tad <tad>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_fep.txt b/doc/html/_sources/compute_fep.txt
deleted file mode 100644
index 6da9e144a..000000000
--- a/doc/html/_sources/compute_fep.txt
+++ /dev/null
@@ -1,315 +0,0 @@
-.. index:: compute fep
-
-compute fep command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID fep temp attribute args ... keyword value ...
-
-* ID, group-ID are documented in the :doc:`compute <compute>` command
-* fep = name of this compute command
-* temp = external temperature (as specified for constant-temperature run)
-* one or more attributes with args may be appended
-* attribute = *pair* or *atom*
-.. parsed-literal::
-
- *pair* args = pstyle pparam I J v_delta
- pstyle = pair style name, e.g. lj/cut
- pparam = parameter to perturb
- I,J = type pair(s) to set parameter for
- v_delta = variable with perturbation to apply (in the units of the parameter)
- *atom* args = aparam I v_delta
- aparam = parameter to perturb
- I = type to set parameter for
- v_delta = variable with perturbation to apply (in the units of the parameter)
-
-* zero or more keyword/value pairs may be appended
-* keyword = *tail* or *volume*
-.. parsed-literal::
-
- *tail* value = *no* or *yes*
- *no* = ignore tail correction to pair energies (usually small in fep)
- *yes* = include tail correction to pair energies
- *volume* value = *no* or *yes*
- *no* = ignore volume changes (e.g. in *NVE* or *NVT* trajectories)
- *yes* = include volume changes (e.g. in *NpT* trajectories)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all fep 298 pair lj/cut epsilon 1 * v_delta pair lj/cut sigma 1 * v_delta volume yes
- compute 1 all fep 300 atom charge 2 v_delta
-
-Description
-"""""""""""
-
-Apply a perturbation to parameters of the interaction potential and
-recalculate the pair potential energy without changing the atomic
-coordinates from those of the reference, unperturbed system. This
-compute can be used to calculate free energy differences using several
-methods, such as free-energy perturbation (FEP), finite-difference
-thermodynamic integration (FDTI) or Bennet's acceptance ratio method
-(BAR).
-
-The potential energy of the system is decomposed in three terms: a
-background term corresponding to interaction sites whose parameters
-remain constant, a reference term :math:`U_0` corresponding to the
-initial interactions of the atoms that will undergo perturbation, and
-a term :math:`U_1` corresponding to the final interactions of
-these atoms:
-
-.. image:: Eqs/compute_fep_u.jpg
- :align: center
-
-A coupling parameter :math:`\lambda` varying from 0 to 1 connects the
-reference and perturbed systems:
-
-.. image:: Eqs/compute_fep_lambda.jpg
- :align: center
-
-It is possible but not necessary that the coupling parameter (or a
-function thereof) appears as a multiplication factor of the potential
-energy. Therefore, this compute can apply perturbations to interaction
-parameters that are not directly proportional to the potential energy
-(e.g. :math:`\sigma` in Lennard-Jones potentials).
-
-This command can be combined with :doc:`fix adapt <fix_adapt>` to
-perform multistage free-energy perturbation calculations along
-stepwise alchemical transformations during a simulation run:
-
-.. image:: Eqs/compute_fep_fep.jpg
- :align: center
-
-This compute is suitable for the finite-difference thermodynamic
-integration (FDTI) method :ref:`(Mezei) <Mezei>`, which is based on an
-evaluation of the numerical derivative of the free energy by a
-perturbation method using a very small :math:`\delta`:
-
-.. image:: Eqs/compute_fep_fdti.jpg
- :align: center
-
-where :math:`w_i` are weights of a numerical quadrature. The :doc:`fix adapt <fix_adapt>` command can be used to define the stages of
-:math:`\lambda` at which the derivative is calculated and averaged.
-
-The compute fep calculates the exponential Boltzmann term and also the
-potential energy difference :math:`U_1 -U_0`. By
-choosing a very small perturbation :math:`\delta` the thermodynamic
-integration method can be implemented using a numerical evaluation of
-the derivative of the potential energy with respect to :math:`\lambda`:
-
-.. image:: Eqs/compute_fep_ti.jpg
- :align: center
-
-Another technique to calculate free energy differences is the
-acceptance ratio method :ref:`(Bennet) <Bennet>`, which can be implemented
-by calculating the potential energy differences with :math:`\delta` = 1.0 on
-both the forward and reverse routes:
-
-.. image:: Eqs/compute_fep_bar.jpg
- :align: center
-
-The value of the free energy difference is determined by numerical
-root finding to establish the equality.
-
-Concerning the choice of how the atomic parameters are perturbed in
-order to setup an alchemical transformation route, several strategies
-are available, such as single-topology or double-topology strategies
-:ref:`(Pearlman) <Pearlman>`. The latter does not require modification of
-bond lengths, angles or other internal coordinates.
-
-NOTES: This compute command does not take kinetic energy into account,
-therefore the masses of the particles should not be modified between
-the reference and perturbed states, or along the alchemical
-transformation route. This compute command does not change bond
-lengths or other internal coordinates :ref:`(Boresch, Karplus) <BoreschKarplus>`.
-
-
-----------
-
-
-The *pair* attribute enables various parameters of potentials defined
-by the :doc:`pair_style <pair_style>` and :doc:`pair_coeff <pair_coeff>`
-commands to be changed, if the pair style supports it.
-
-The *pstyle* argument is the name of the pair style. For example,
-*pstyle* could be specified as "lj/cut". The *pparam* argument is the
-name of the parameter to change. This is a (non-exclusive) list of
-pair styles and parameters that can be used with this compute. See
-the doc pages for individual pair styles and their energy formulas for
-the meaning of these parameters:
-
-+------------------------------------------------+----------------------+------------+
-| :doc:`lj/cut <pair_lj>` | epsilon,sigma | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`lj/cut/coul/cut <pair_lj>` | epsilon,sigma | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`lj/cut/coul/long <pair_lj>` | epsilon,sigma | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`lj/cut/soft <pair_lj_soft>` | epsilon,sigma,lambda | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`coul/cut/soft <pair_lj_soft>` | lambda | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`coul/long/soft <pair_lj_soft>` | lambda | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`lj/cut/coul/cut/soft <pair_lj_soft>` | epsilon,sigma,lambda | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`lj/cut/coul/long/soft <pair_lj_soft>` | epsilon,sigma,lambda | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`lj/cut/tip4p/long/soft <pair_lj_soft>` | epsilon,sigma,lambda | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`tip4p/long/soft <pair_lj_soft>` | lambda | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`lj/charmm/coul/long/soft <pair_lj_soft>` | epsilon,sigma,lambda | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`born <pair_born>` | a,b,c | type pairs |
-+------------------------------------------------+----------------------+------------+
-| :doc:`buck <pair_buck>` | a,c | type pairs |
-+------------------------------------------------+----------------------+------------+
-
-Note that it is easy to add new potentials and their parameters to
-this list. All it typically takes is adding an extract() method to
-the pair_*.cpp file associated with the potential.
-
-Similar to the :doc:`pair_coeff <pair_coeff>` command, I and J can be
-specified in one of two ways. Explicit numeric values can be used for
-each, as in the 1st example above. I <= J is required. LAMMPS sets
-the coefficients for the symmetric J,I interaction to the same
-values. A wild-card asterisk can be used in place of or in conjunction
-with the I,J arguments to set the coefficients for multiple pairs of
-atom types. This takes the form "*" or "*n" or "n*" or "m*n". If N =
-the number of atom types, then an asterisk with no numeric values
-means all types from 1 to N. A leading asterisk means all types from
-1 to n (inclusive). A trailing asterisk means all types from n to N
-(inclusive). A middle asterisk means all types from m to n
-(inclusive). Note that only type pairs with I <= J are considered; if
-asterisks imply type pairs where J < I, they are ignored.
-
-If :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is being
-used, then the *pstyle* will be a sub-style name. You must specify
-I,J arguments that correspond to type pair values defined (via the
-:doc:`pair_coeff <pair_coeff>` command) for that sub-style.
-
-The *v_name* argument for keyword *pair* is the name of an
-:doc:`equal-style variable <variable>` which will be evaluated each time
-this compute is invoked. It should be specified as v_name, where name
-is the variable name.
-
-
-----------
-
-
-The *atom* attribute enables atom properties to be changed. The
-*aparam* argument is the name of the parameter to change. This is the
-current list of atom parameters that can be used with this compute:
-
-* charge = charge on particle
-
-The *v_name* argument for keyword *pair* is the name of an
-:doc:`equal-style variable <variable>` which will be evaluated each time
-this compute is invoked. It should be specified as v_name, where name
-is the variable name.
-
-
-----------
-
-
-The *tail* keyword controls the calculation of the tail correction to
-"van der Waals" pair energies beyond the cutoff, if this has been
-activated via the :doc:`pair_modify <pair_modify>` command. If the
-perturbation is small, the tail contribution to the energy difference
-between the reference and perturbed systems should be negligible.
-
-If the keyword *volume* = *yes*\ , then the Boltzmann term is multiplied
-by the volume so that correct ensemble averaging can be performed over
-trajectories during which the volume fluctuates or changes :ref:`(Allen and Tildesley) <AllenTildesley>`:
-
-.. image:: Eqs/compute_fep_vol.jpg
- :align: center
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global vector of length 3 which contains the
-energy difference ( :math:`U_1-U_0` ) as c_ID[1], the
-Boltzmann factor :math:`\exp(-(U_1-U_0)/kT)`, or
-:math:`V \exp(-(U_1-U_0)/kT)`, as c_ID[2] and the
-volume of the simulation box :math:`V` as c_ID[3]. :math:`U_1` is the
-pair potential energy obtained with the perturbed parameters and
-:math:`U_0` is the pair potential energy obtained with the
-unperturbed parameters. The energies include kspace terms if these
-are used in the simulation.
-
-These output results can be used by any command that uses a global
-scalar or vector from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options. For example, the computed values can be averaged using :doc:`fix ave/time <fix_ave_time>`.
-
-The values calculated by this compute are "extensive".
-
-Restrictions
-""""""""""""
-
-
-This compute is distributed as the USER-FEP package. It is only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix adapt/fep <fix_adapt_fep>`, :doc:`fix ave/time <fix_ave_time>`,
-`pair_lj_soft_coul_soft <pair_lj_soft_coul_soft.txt>`_
-
-Default
-"""""""
-
-The option defaults are *tail* = *no*\ , *volume* = *no*\ .
-
-
-----------
-
-
-.. _Pearlman:
-
-
-
-**(Pearlman)** Pearlman, J Chem Phys, 98, 1487 (1994)
-
-.. _Mezei:
-
-
-
-**(Mezei)** Mezei, J Chem Phys, 86, 7084 (1987)
-
-.. _Bennet:
-
-
-
-**(Bennet)** Bennet, J Comput Phys, 22, 245 (1976)
-
-.. _BoreschKarplus:
-
-
-
-**(BoreschKarplus)** Boresch and Karplus, J Phys Chem A, 103, 103 (1999)
-
-.. _AllenTildesley:
-
-
-
-**(AllenTildesley)** Allen and Tildesley, Computer Simulation of
-Liquids, Oxford University Press (1987)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_group_group.txt b/doc/html/_sources/compute_group_group.txt
deleted file mode 100644
index d9ca95027..000000000
--- a/doc/html/_sources/compute_group_group.txt
+++ /dev/null
@@ -1,150 +0,0 @@
-.. index:: compute group/group
-
-compute group/group command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID group/group group2-ID keyword value ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* group/group = style name of this compute command
-* group2-ID = group ID of second (or same) group
-* zero or more keyword/value pairs may be appended
-* keyword = *pair* or *kspace* or *boundary*
-.. parsed-literal::
-
- *pair* value = *yes* or *no*
- *kspace* value = *yes* or *no*
- *boundary* value = *yes* or *no*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 lower group/group upper
- compute 1 lower group/group upper kspace yes
- compute mine fluid group/group wall
-
-Description
-"""""""""""
-
-Define a computation that calculates the total energy and force
-interaction between two groups of atoms: the compute group and the
-specified group2. The two groups can be the same.
-
-If the *pair* keyword is set to *yes*\ , which is the default, then the
-the interaction energy will include a pair component which is defined
-as the pairwise energy between all pairs of atoms where one atom in
-the pair is in the first group and the other is in the second group.
-Likewise, the interaction force calculated by this compute will
-include the force on the compute group atoms due to pairwise
-interactions with atoms in the specified group2.
-
-.. note::
-
- The energies computed by the *pair* keyword do not include tail
- corrections, even if they are enabled via the
- :doc:`pair_modify <pair_modify>` command.
-
-If the *kspace* keyword is set to *yes*\ , which is not the default, and
-if a :doc:`kspace_style <kspace_style>` is defined, then the interaction
-energy will include a Kspace component which is the long-range
-Coulombic energy between all the atoms in the first group and all the
-atoms in the 2nd group. Likewise, the interaction force calculated by
-this compute will include the force on the compute group atoms due to
-long-range Coulombic interactions with atoms in the specified group2.
-
-Normally the long-range Coulombic energy converges only when the net
-charge of the unit cell is zero. However, one can assume the net
-charge of the system is neutralized by a uniform background plasma,
-and a correction to the system energy can be applied to reduce
-artifacts. For more information see :ref:`(Bogusz) <Bogusz>`. If the
-*boundary* keyword is set to *yes*\ , which is the default, and *kspace*
-contributions are included, then this energy correction term will be
-added to the total group-group energy. This correction term does not
-affect the force calculation and will be zero if one or both of the
-groups are charge neutral. This energy correction term is the same as
-that included in the regular Ewald and PPPM routines.
-
-This compute does not calculate any bond or angle or dihedral or
-improper interactions between atoms in the two groups.
-
-
-----------
-
-
-The pairwise contributions to the group-group interactions are
-calculated by looping over a neighbor list. The Kspace contribution
-to the group-group interactions require essentially the same amount of
-work (FFTs, Ewald summation) as computing long-range forces for the
-entire system. Thus it can be costly to invoke this compute too
-frequently.
-
-If you desire a breakdown of the interactions into a pairwise and
-Kspace component, simply invoke the compute twice with the appropriate
-yes/no settings for the *pair* and *kspace* keywords. This is no more
-costly than using a single compute with both keywords set to *yes*\ .
-The individual contributions can be summed in a
-:doc:`variable <variable>` if desired.
-
-This `document <PDF/kspace.pdf>`_ describes how the long-range
-group-group calculations are performed.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global scalar (the energy) and a global
-vector of length 3 (force), which can be accessed by indices 1-3.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-Both the scalar and vector values calculated by this compute are
-"extensive". The scalar value will be in energy :doc:`units <units>`.
-The vector values will be in force :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-Not all pair styles can be evaluated in a pairwise mode as required by
-this compute. For example, 3-body and other many-body potentials,
-such as :doc:`Tersoff <pair_tersoff>` and
-:doc:`Stillinger-Weber <pair_sw>` cannot be used. :doc:`EAM <pair_eam>`
-potentials only include the pair potential portion of the EAM
-interaction when used by this compute, not the embedding term.
-
-Not all Kspace styles support calculation of group/group interactions.
-The *ewald* and *pppm* styles do.
-
-**Related commands:** none
-
-Default
-"""""""
-
-The option defaults are pair = yes, kspace = no, and boundary = yes.
-
-
-----------
-
-
-.. _Bogusz:
-
-
-
-Bogusz et al, J Chem Phys, 108, 7070 (1998)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_gyration.txt b/doc/html/_sources/compute_gyration.txt
deleted file mode 100644
index d28bef60c..000000000
--- a/doc/html/_sources/compute_gyration.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-.. index:: compute gyration
-
-compute gyration command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID gyration
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* gyration = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 molecule gyration
-
-Description
-"""""""""""
-
-Define a computation that calculates the radius of gyration Rg of the
-group of atoms, including all effects due to atoms passing thru
-periodic boundaries.
-
-Rg is a measure of the size of the group of atoms, and is computed as
-the square root of the Rg^2 value in this formula
-
-.. image:: Eqs/compute_gyration.jpg
- :align: center
-
-where M is the total mass of the group, Rcm is the center-of-mass
-position of the group, and the sum is over all atoms in the group.
-
-A Rg^2 tensor, stored as a 6-element vector, is also calculated by
-this compute. The formula for the components of the tensor is the
-same as the above formula, except that (Ri - Rcm)^2 is replaced by
-(Rix - Rcmx) * (Riy - Rcmy) for the xy component, etc. The 6
-components of the vector are ordered xx, yy, zz, xy, xz, yz. Note
-that unlike the scalar Rg, each of the 6 values of the tensor is
-effectively a "squared" value, since the cross-terms may be negative
-and taking a sqrt() would be invalid.
-
-.. note::
-
- The coordinates of an atom contribute to Rg in "unwrapped" form,
- by using the image flags associated with each atom. See the :doc:`dump custom <dump>` command for a discussion of "unwrapped" coordinates.
- See the Atoms section of the :doc:`read_data <read_data>` command for a
- discussion of image flags and how they are set for each atom. You can
- reset the image flags (e.g. to 0) before invoking this compute by
- using the :doc:`set image <set>` command.
-
-**Output info:**
-
-This compute calculates a global scalar (Rg) and a global vector of
-length 6 (Rg^2 tensor), which can be accessed by indices 1-6. These
-values can be used by any command that uses a global scalar value or
-vector values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar and vector values calculated by this compute are
-"intensive". The scalar and vector values will be in distance and
-distance^2 :doc:`units <units>` respectively.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute gyration/chunk <compute_gyration_chunk>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_gyration_chunk.txt b/doc/html/_sources/compute_gyration_chunk.txt
deleted file mode 100644
index cbd683db3..000000000
--- a/doc/html/_sources/compute_gyration_chunk.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-.. index:: compute gyration/chunk
-
-compute gyration/chunk command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID gyration/chunk chunkID keyword value ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* gyration/chunk = style name of this compute command
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-* zero or more keyword/value pairs may be appended
-* keyword = *tensor*
-.. parsed-literal::
-
- *tensor* value = none
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 molecule gyration/chunk molchunk
- compute 2 molecule gyration/chunk molchunk tensor
-
-Description
-"""""""""""
-
-Define a computation that calculates the radius of gyration Rg for
-multiple chunks of atoms.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-This compute calculates the radius of gyration Rg for each chunk,
-which includes all effects due to atoms passing thru periodic
-boundaries.
-
-Rg is a measure of the size of a chunk, and is computed by this
-formula
-
-.. image:: Eqs/compute_gyration.jpg
- :align: center
-
-where M is the total mass of the chunk, Rcm is the center-of-mass
-position of the chunk, and the sum is over all atoms in the
-chunk.
-
-Note that only atoms in the specified group contribute to the
-calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
-defines its own group; atoms will have a chunk ID = 0 if they are not
-in that group, signifying they are not assigned to a chunk, and will
-thus also not contribute to this calculation. You can specify the
-"all" group for this command if you simply want to include atoms with
-non-zero chunk IDs.
-
-If the *tensor* keyword is specified, then the scalar Rg value is not
-calculated, but an Rg tensor is instead calculated for each chunk.
-The formula for the components of the tensor is the same as the above
-formula, except that (Ri - Rcm)^2 is replaced by (Rix - Rcmx) * (Riy -
-Rcmy) for the xy component, etc. The 6 components of the tensor are
-ordered xx, yy, zz, xy, xz, yz.
-
-.. note::
-
- The coordinates of an atom contribute to Rg in "unwrapped" form,
- by using the image flags associated with each atom. See the :doc:`dump custom <dump>` command for a discussion of "unwrapped" coordinates.
- See the Atoms section of the :doc:`read_data <read_data>` command for a
- discussion of image flags and how they are set for each atom. You can
- reset the image flags (e.g. to 0) before invoking this compute by
- using the :doc:`set image <set>` command.
-
-The simplest way to output the results of the compute gyration/chunk
-calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
-command, for example:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk all gyration/chunk cc1
- fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
-
-**Output info:**
-
-This compute calculates a global vector if the *tensor* keyword is not
-specified and a global array if it is. The length of the vector or
-number of rows in the array = the number of chunks *Nchunk* as
-calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. If the *tensor* keyword
-is specified, the global array has 6 columns. The vector or array can
-be accessed by any command that uses global values from a compute as
-input. See :ref:`this section <howto_15>` for an overview
-of LAMMPS output options.
-
-All the vector or array values calculated by this compute are
-"intensive". The vector or array values will be in distance
-:doc:`units <units>`, since they are the square root of values
-represented by the formula above.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-:doc:`compute gyration <compute_gyration>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_heat_flux.txt b/doc/html/_sources/compute_heat_flux.txt
deleted file mode 100644
index c001d6993..000000000
--- a/doc/html/_sources/compute_heat_flux.txt
+++ /dev/null
@@ -1,231 +0,0 @@
-.. index:: compute heat/flux
-
-compute heat/flux command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID heat/flux ke-ID pe-ID stress-ID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* heat/flux = style name of this compute command
-* ke-ID = ID of a compute that calculates per-atom kinetic energy
-* pe-ID = ID of a compute that calculates per-atom potential energy
-* stress-ID = ID of a compute that calculates per-atom stress
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute myFlux all heat/flux myKE myPE myStress
-
-Description
-"""""""""""
-
-Define a computation that calculates the heat flux vector based on
-contributions from atoms in the specified group. This can be used by
-itself to measure the heat flux into or out of a reservoir of atoms,
-or to calculate a thermal conductivity using the Green-Kubo formalism.
-
-See the :doc:`fix thermal/conductivity <fix_thermal_conductivity>`
-command for details on how to compute thermal conductivity in an
-alternate way, via the Muller-Plathe method. See the :doc:`fix heat <fix_heat>` command for a way to control the heat added or
-subtracted to a group of atoms.
-
-The compute takes three arguments which are IDs of other
-:doc:`computes <compute>`. One calculates per-atom kinetic energy
-(\ *ke-ID*\ ), one calculates per-atom potential energy (\ *pe-ID)*\ , and the
-third calcualtes per-atom stress (\ *stress-ID*\ ).
-
-.. note::
-
- These other computes should provide values for all the atoms in
- the group this compute specifies. That means the other computes could
- use the same group as this compute, or they can just use group "all"
- (or any group whose atoms are superset of the atoms in this compute's
- group). LAMMPS does not check for this.
-
-The Green-Kubo formulas relate the ensemble average of the
-auto-correlation of the heat flux J to the thermal conductivity kappa:
-
-.. image:: Eqs/heat_flux_J.jpg
- :align: center
-
-.. image:: Eqs/heat_flux_k.jpg
- :align: center
-
-Ei in the first term of the equation for J is the per-atom energy
-(potential and kinetic). This is calculated by the computes *ke-ID*
-and *pe-ID*\ . Si in the second term of the equation for J is the
-per-atom stress tensor calculated by the compute *stress-ID*\ . The
-tensor multiplies Vi as a 3x3 matrix-vector multiply to yield a
-vector. Note that as discussed below, the 1/V scaling factor in the
-equation for J is NOT included in the calculation performed by this
-compute; you need to add it for a volume appropriate to the atoms
-included in the calculation.
-
-.. note::
-
- The :doc:`compute pe/atom <compute_pe_atom>` and :doc:`compute stress/atom <compute_stress_atom>` commands have options for which
- terms to include in their calculation (pair, bond, etc). The heat
- flux calculation will thus include exactly the same terms. Normally
- you should use :doc:`compute stress/atom virial <compute_stress_atom>`
- so as not to include a kinetic energy term in the heat flux.
-
-This compute calculates 6 quantities and stores them in a 6-component
-vector. The first 3 components are the x, y, z components of the full
-heat flux vector, i.e. (Jx, Jy, Jz). The next 3 components are the x,
-y, z components of just the convective portion of the flux, i.e. the
-first term in the equation for J above.
-
-
-----------
-
-
-The heat flux can be output every so many timesteps (e.g. via the
-:doc:`thermo_style custom <thermo_style>` command). Then as a
-post-processing operation, an autocorrelation can be performed, its
-integral estimated, and the Green-Kubo formula above evaluated.
-
-The :doc:`fix ave/correlate <fix_ave_correlate>` command can calclate
-the autocorrelation. The trap() function in the
-:doc:`variable <variable>` command can calculate the integral.
-
-An example LAMMPS input script for solid Ar is appended below. The
-result should be: average conductivity ~0.29 in W/mK.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global vector of length 6 (total heat flux
-vector, followed by convective heat flux vector), which can be
-accessed by indices 1-6. These values can be used by any command that
-uses global vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector values calculated by this compute are "extensive", meaning
-they scale with the number of atoms in the simulation. They can be
-divided by the appropriate volume to get a flux, which would then be
-an "intensive" value, meaning independent of the number of atoms in
-the simulation. Note that if the compute is "all", then the
-appropriate volume to divide by is the simulation box volume.
-However, if a sub-group is used, it should be the volume containing
-those atoms.
-
-The vector values will be in energy*velocity :doc:`units <units>`. Once
-divided by a volume the units will be that of flux, namely
-energy/area/time :doc:`units <units>`
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix thermal/conductivity <fix_thermal_conductivity>`,
-:doc:`fix ave/correlate <fix_ave_correlate>`,
-:doc:`variable <variable>`
-
-**Default:** none
-
-
-----------
-
-
-.. parsed-literal::
-
- # Sample LAMMPS input script for thermal conductivity of solid Ar
-
-.. parsed-literal::
-
- units real
- variable T equal 70
- variable V equal vol
- variable dt equal 4.0
- variable p equal 200 # correlation length
- variable s equal 10 # sample interval
- variable d equal $p*$s # dump interval
-
-.. parsed-literal::
-
- # convert from LAMMPS real units to SI
-
-.. parsed-literal::
-
- variable kB equal 1.3806504e-23 # [J/K] Boltzmann
- variable kCal2J equal 4186.0/6.02214e23
- variable A2m equal 1.0e-10
- variable fs2s equal 1.0e-15
- variable convert equal ${kCal2J}*${kCal2J}/${fs2s}/${A2m}
-
-.. parsed-literal::
-
- # setup problem
-
-.. parsed-literal::
-
- dimension 3
- boundary p p p
- lattice fcc 5.376 orient x 1 0 0 orient y 0 1 0 orient z 0 0 1
- region box block 0 4 0 4 0 4
- create_box 1 box
- create_atoms 1 box
- mass 1 39.948
- pair_style lj/cut 13.0
- pair_coeff * * 0.2381 3.405
- timestep ${dt}
- thermo $d
-
-.. parsed-literal::
-
- # equilibration and thermalization
-
-.. parsed-literal::
-
- velocity all create $T 102486 mom yes rot yes dist gaussian
- fix NVT all nvt temp $T $T 10 drag 0.2
- run 8000
-
-.. parsed-literal::
-
- # thermal conductivity calculation, switch to NVE if desired
-
-.. parsed-literal::
-
- #unfix NVT
- #fix NVE all nve
-
-.. parsed-literal::
-
- reset_timestep 0
- compute myKE all ke/atom
- compute myPE all pe/atom
- compute myStress all stress/atom NULL virial
- compute flux all heat/flux myKE myPE myStress
- variable Jx equal c_flux[1]/vol
- variable Jy equal c_flux[2]/vol
- variable Jz equal c_flux[3]/vol
- fix JJ all ave/correlate $s $p $d &
- c_flux[1] c_flux[2] c_flux[3] type auto file J0Jt.dat ave running
- variable scale equal ${convert}/${kB}/$T/$T/$V*$s*${dt}
- variable k11 equal trap(f_JJ[3])*${scale}
- variable k22 equal trap(f_JJ[4])*${scale}
- variable k33 equal trap(f_JJ[5])*${scale}
- thermo_style custom step temp v_Jx v_Jy v_Jz v_k11 v_k22 v_k33
- run 100000
- variable k equal (v_k11+v_k22+v_k33)/3.0
- variable ndens equal count(all)/vol
- print "average conductivity: $k[W/mK] @ $T K, ${ndens} /A^3"
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_hexorder_atom.txt b/doc/html/_sources/compute_hexorder_atom.txt
deleted file mode 100644
index acc219a34..000000000
--- a/doc/html/_sources/compute_hexorder_atom.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-.. index:: compute hexorder/atom
-
-compute hexorder/atom command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID hexorder/atom keyword values ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* hexorder/atom = style name of this compute command
-* one or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *degree* or *nnn* or *cutoff*
- *cutoff* value = distance cutoff
- *nnn* value = number of nearest neighbors
- *degree* value = degree *n* of order parameter
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all hexorder/atom
- compute 1 all hexorder/atom degree 4 nnn 4 cutoff 1.2
-
-Description
-"""""""""""
-
-Define a computation that calculates *qn* the bond-orientational
-order parameter for each atom in a group. The hexatic (\ *n* = 6) order
-parameter was introduced by :ref:`Nelson and Halperin <Nelson>` as a way to detect
-hexagonal symmetry in two-dimensional systems. For each atom, *qn*
-is a complex number (stored as two real numbers) defined as follows:
-
-.. image:: Eqs/hexorder.jpg
- :align: center
-
-where the sum is over the *nnn* nearest neighbors
-of the central atom. The angle theta
-is formed by the bond vector rij and the *x* axis. theta is calculated
-only using the *x* and *y* components, whereas the distance from the
-central atom is calculated using all three
-*x*\ , *y*\ , and *z* components of the bond vector.
-Neighbor atoms not in the group
-are included in the order parameter of atoms in the group.
-
-The optional keyword *cutoff* defines the distance cutoff
-used when searching for neighbors. The default value, also
-the maximum allowable value, is the cutoff specified
-by the pair style.
-
-The optional keyword *nnn* defines the number of nearest
-neighbors used to calculate *qn*\ . The default value is 6.
-If the value is NULL, then all neighbors up to the
-distance cutoff are used.
-
-The optional keyword *degree* sets the degree *n* of the order parameter.
-The default value is 6. For a perfect hexagonal lattice with
-*nnn* = 6,
-*q*\ 6 = exp(6 i phi) for all atoms, where the constant 0 < phi < pi/3
-depends only on the orientation of the lattice relative to the *x* axis.
-In an isotropic liquid, local neighborhoods may still exhibit
-weak hexagonal symmetry, but because the orientational correlation
-decays quickly with distance, the value of phi will be different for
-different atoms, and so when *q*\ 6 is averaged over all the atoms
-in the system, \|<\ *q*\ 6>\| << 1.
-
-The value of *qn* is set to zero for atoms not in the
-specified compute group, as well as for atoms that have less than
-*nnn* neighbors within the distance cutoff.
-
-The neighbor list needed to compute this quantity is constructed each
-time the calculation is performed (i.e. each time a snapshot of atoms
-is dumped). Thus it can be inefficient to compute/dump this quantity
-too frequently.
-
-.. note::
-
- If you have a bonded system, then the settings of
- :doc:`special_bonds <special_bonds>` command can remove pairwise
- interactions between atoms in the same bond, angle, or dihedral. This
- is the default setting for the :doc:`special_bonds <special_bonds>`
- command, and means those pairwise interactions do not appear in the
- neighbor list. Because this fix uses the neighbor list, it also means
- those pairs will not be included in the order parameter. This
- difficulty can be circumvented by writing a dump file, and using the
- :doc:`rerun <rerun>` command to compute the order parameter for
- snapshots in the dump file. The rerun script can use a
- :doc:`special_bonds <special_bonds>` command that includes all pairs in
- the neighbor list.
-
-**Output info:**
-
-This compute calculates a per-atom array with 2 columns, giving the
-real and imaginary parts *qn*\ , a complex number restricted to the
-unit disk of the complex plane i.e. Re(\ *qn*\ )^2 + Im(\ *qn*\ )^2 <= 1 .
-
-These values can be accessed by any command that uses
-per-atom values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute orientorder/atom <compute_orientorder_atom>`, :doc:`compute coord/atom <compute_coord_atom>`, :doc:`compute centro/atom <compute_centro_atom>`
-
-Default
-"""""""
-
-The option defaults are *cutoff* = pair style cutoff, *nnn* = 6, *degree* = 6
-
-
-----------
-
-
-.. _Nelson:
-
-
-
-**(Nelson)** Nelson, Halperin, Phys Rev B, 19, 2457 (1979).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_improper.txt b/doc/html/_sources/compute_improper.txt
deleted file mode 100644
index ade78d6cb..000000000
--- a/doc/html/_sources/compute_improper.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-.. index:: compute improper
-
-compute improper command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID improper
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* improper = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all improper
-
-Description
-"""""""""""
-
-Define a computation that extracts the improper energy calculated by
-each of the improper sub-styles used in the :doc:`improper_style hybrid <improper_hybrid>` command. These values are made
-accessible for output or further processing by other commands. The
-group specified for this command is ignored.
-
-This compute is useful when using :doc:`improper_style hybrid <improper_hybrid>` if you want to know the portion of the
-total energy contributed by one or more of the hybrid sub-styles.
-
-**Output info:**
-
-This compute calculates a global vector of length N where N is the
-number of sub_styles defined by the :doc:`improper_style hybrid <improper_style>` command. which can be accessed by indices
-1-N. These values can be used by any command that uses global scalar
-or vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector values are "extensive" and will be in energy
-:doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute pe <compute_pe>`, :doc:`compute pair <compute_pair>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_improper_local.txt b/doc/html/_sources/compute_improper_local.txt
deleted file mode 100644
index 53aa47585..000000000
--- a/doc/html/_sources/compute_improper_local.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-.. index:: compute improper/local
-
-compute improper/local command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID improper/local value1 value2 ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* improper/local = style name of this compute command
-* one or more values may be appended
-* value = *chi*
-.. parsed-literal::
-
- *chi* = tabulate improper angles
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all improper/local chi
-
-Description
-"""""""""""
-
-Define a computation that calculates properties of individual improper
-interactions. The number of datums generated, aggregated across all
-processors, equals the number of impropers in the system, modified by
-the group parameter as explained below.
-
-The value *chi* is the improper angle, as defined in the doc pages for
-the individual improper styles listed on
-:doc:`improper_style <improper_style>` doc page.
-
-The local data stored by this command is generated by looping over all
-the atoms owned on a processor and their impropers. An improper will
-only be included if all 4 atoms in the improper are in the specified
-compute group.
-
-Note that as atoms migrate from processor to processor, there will be
-no consistent ordering of the entries within the local vector or array
-from one timestep to the next. The only consistency that is
-guaranteed is that the ordering on a particular timestep will be the
-same for local vectors or arrays generated by other compute commands.
-For example, improper output from the :doc:`compute property/local <compute_property_local>` command can be combined
-with data from this command and output by the :doc:`dump local <dump>`
-command in a consistent way.
-
-Here is an example of how to do this:
-
-.. parsed-literal::
-
- compute 1 all property/local itype iatom1 iatom2 iatom3 iatom4
- compute 2 all improper/local chi
- dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_1[3] c_1[4] c_1[5] c_2[1]
-
-**Output info:**
-
-This compute calculates a local vector or local array depending on the
-number of keywords. The length of the vector or number of rows in the
-array is the number of impropers. If a single keyword is specified, a
-local vector is produced. If two or more keywords are specified, a
-local array is produced where the number of columns = the number of
-keywords. The vector or array can be accessed by any command that
-uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The output for *chi* will be in degrees.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump local <dump>`, :doc:`compute property/local <compute_property_local>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_inertia_chunk.txt b/doc/html/_sources/compute_inertia_chunk.txt
deleted file mode 100644
index e55f6f413..000000000
--- a/doc/html/_sources/compute_inertia_chunk.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-.. index:: compute inertia/chunk
-
-compute inertia/chunk command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID inertia/chunk chunkID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* inertia/chunk = style name of this compute command
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 fluid inertia/chunk molchunk
-
-Description
-"""""""""""
-
-Define a computation that calculates the inertia tensor for multiple
-chunks of atoms.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-This compute calculates the 6 components of the symmetric intertia
-tensor for each chunk, ordered Ixx,Iyy,Izz,Ixy,Iyz,Ixz. The
-calculation includes all effects due to atoms passing thru periodic
-boundaries.
-
-Note that only atoms in the specified group contribute to the
-calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
-defines its own group; atoms will have a chunk ID = 0 if they are not
-in that group, signifying they are not assigned to a chunk, and will
-thus also not contribute to this calculation. You can specify the
-"all" group for this command if you simply want to include atoms with
-non-zero chunk IDs.
-
-.. note::
-
- The coordinates of an atom contribute to the chunk's inertia
- tensor in "unwrapped" form, by using the image flags associated with
- each atom. See the :doc:`dump custom <dump>` command for a discussion
- of "unwrapped" coordinates. See the Atoms section of the
- :doc:`read_data <read_data>` command for a discussion of image flags and
- how they are set for each atom. You can reset the image flags
- (e.g. to 0) before invoking this compute by using the :doc:`set image <set>` command.
-
-The simplest way to output the results of the compute inertia/chunk
-calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
-command, for example:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk all inertia/chunk cc1
- fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
-
-**Output info:**
-
-This compute calculates a global array where the number of rows = the
-number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The number of columns =
-6 for the 6 components of the inertia tensor for each chunk, ordered
-as listed above. These values can be accessed by any command that
-uses global array values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The array values are "intensive". The array values will be in
-mass*distance^2 :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`variable inertia() function <variable>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_ke.txt b/doc/html/_sources/compute_ke.txt
deleted file mode 100644
index 9283108be..000000000
--- a/doc/html/_sources/compute_ke.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-.. index:: compute ke
-
-compute ke command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID ke
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* ke = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all ke
-
-Description
-"""""""""""
-
-Define a computation that calculates the translational kinetic energy
-of a group of particles.
-
-The kinetic energy of each particle is computed as 1/2 m v^2, where m
-and v are the mass and velocity of the particle.
-
-There is a subtle difference between the quantity calculated by this
-compute and the kinetic energy calculated by the *ke* or *etotal*
-keyword used in thermodynamic output, as specified by the
-:doc:`thermo_style <thermo_style>` command. For this compute, kinetic
-energy is "translational" kinetic energy, calculated by the simple
-formula above. For thermodynamic output, the *ke* keyword infers
-kinetic energy from the temperature of the system with 1/2 Kb T of
-energy for each degree of freedom. For the default temperature
-computation via the :doc:`compute temp <compute_temp>` command, these
-are the same. But different computes that calculate temperature can
-subtract out different non-thermal components of velocity and/or
-include different degrees of freedom (translational, rotational, etc).
-
-**Output info:**
-
-This compute calculates a global scalar (the summed KE). This value
-can be used by any command that uses a global scalar value from a
-compute as input. See :ref:`Section_howto 15 <howto_15>`
-for an overview of LAMMPS output options.
-
-The scalar value calculated by this compute is "extensive". The
-scalar value will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute erotate/sphere <compute_erotate_sphere>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_ke_atom.txt b/doc/html/_sources/compute_ke_atom.txt
deleted file mode 100644
index ddee572c6..000000000
--- a/doc/html/_sources/compute_ke_atom.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-.. index:: compute ke/atom
-
-compute ke/atom command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID ke/atom
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* ke/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all ke/atom
-
-Description
-"""""""""""
-
-Define a computation that calculates the per-atom translational
-kinetic energy for each atom in a group.
-
-The kinetic energy is simply 1/2 m v^2, where m is the mass and v is
-the velocity of each atom.
-
-The value of the kinetic energy will be 0.0 for atoms not in the
-specified compute group.
-
-**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
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-atom vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump custom <dump>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_ke_atom_eff.txt b/doc/html/_sources/compute_ke_atom_eff.txt
deleted file mode 100644
index b776b1712..000000000
--- a/doc/html/_sources/compute_ke_atom_eff.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-.. index:: compute ke/atom/eff
-
-compute ke/atom/eff command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID ke/atom/eff
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* ke/atom/eff = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all ke/atom/eff
-
-Description
-"""""""""""
-
-Define a computation that calculates the per-atom translational
-(nuclei and electrons) and radial kinetic energy (electron only) in a
-group. The particles are assumed to be nuclei and electrons modeled
-with the :doc:`electronic force field <pair_eff>`.
-
-The kinetic energy for each nucleus is computed as 1/2 m v^2, where m
-corresponds to the corresponding nuclear mass, and the kinetic energy
-for each electron is computed as 1/2 (me v^2 + 3/4 me s^2), where me
-and v correspond to the mass and translational velocity of each
-electron, and s to its radial velocity, respectively.
-
-There is a subtle difference between the quantity calculated by this
-compute and the kinetic energy calculated by the *ke* or *etotal*
-keyword used in thermodynamic output, as specified by the
-:doc:`thermo_style <thermo_style>` command. For this compute, kinetic
-energy is "translational" plus electronic "radial" kinetic energy,
-calculated by the simple formula above. For thermodynamic output, the
-*ke* keyword infers kinetic energy from the temperature of the system
-with 1/2 Kb T of energy for each (nuclear-only) degree of freedom in
-eFF.
-
-.. note::
-
- The temperature in eFF should be monitored via the :doc:`compute temp/eff <compute_temp_eff>` command, which can be printed with
- thermodynamic output by using the :doc:`thermo_modify <thermo_modify>`
- command, as shown in the following example:
-
-.. parsed-literal::
-
- compute effTemp all temp/eff
- thermo_style custom step etotal pe ke temp press
- thermo_modify temp effTemp
-
-The value of the kinetic energy will be 0.0 for atoms (nuclei or
-electrons) not in the specified compute group.
-
-**Output info:**
-
-This compute calculates a scalar quantity for each atom, which can be
-accessed by any command that uses per-atom computes as input. See
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-atom vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-EFF package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump custom <dump>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_ke_eff.txt b/doc/html/_sources/compute_ke_eff.txt
deleted file mode 100644
index 4497ecf5b..000000000
--- a/doc/html/_sources/compute_ke_eff.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-.. index:: compute ke/eff
-
-compute ke/eff command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID ke/eff
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* ke/eff = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all ke/eff
-
-Description
-"""""""""""
-
-Define a computation that calculates the kinetic energy of motion of a
-group of eFF particles (nuclei and electrons), as modeled with the
-:doc:`electronic force field <pair_eff>`.
-
-The kinetic energy for each nucleus is computed as 1/2 m v^2 and the
-kinetic energy for each electron is computed as 1/2(me v^2 + 3/4 me
-s^2), where m corresponds to the nuclear mass, me to the electron
-mass, v to the translational velocity of each particle, and s to the
-radial velocity of the electron, respectively.
-
-There is a subtle difference between the quantity calculated by this
-compute and the kinetic energy calculated by the *ke* or *etotal*
-keyword used in thermodynamic output, as specified by the
-:doc:`thermo_style <thermo_style>` command. For this compute, kinetic
-energy is "translational" and "radial" (only for electrons) kinetic
-energy, calculated by the simple formula above. For thermodynamic
-output, the *ke* keyword infers kinetic energy from the temperature of
-the system with 1/2 Kb T of energy for each degree of freedom. For
-the eFF temperature computation via the :doc:`compute temp_eff <compute_temp_eff>` command, these are the same. But
-different computes that calculate temperature can subtract out
-different non-thermal components of velocity and/or include other
-degrees of freedom.
-
-IMPRORTANT NOTE: The temperature in eFF models should be monitored via
-the :doc:`compute temp/eff <compute_temp_eff>` command, which can be
-printed with thermodynamic output by using the
-:doc:`thermo_modify <thermo_modify>` command, as shown in the following
-example:
-
-.. parsed-literal::
-
- compute effTemp all temp/eff
- thermo_style custom step etotal pe ke temp press
- thermo_modify temp effTemp
-
-See :doc:`compute temp/eff <compute_temp_eff>`.
-
-**Output info:**
-
-This compute calculates a global scalar (the KE). This value can be
-used by any command that uses a global scalar value from a compute as
-input. See :ref:`Section_howto 15 <howto_15>` for an
-overview of LAMMPS output options.
-
-The scalar value calculated by this compute is "extensive". The
-scalar value will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-EFF package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_ke_rigid.txt b/doc/html/_sources/compute_ke_rigid.txt
deleted file mode 100644
index d40e1768c..000000000
--- a/doc/html/_sources/compute_ke_rigid.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-.. index:: compute ke/rigid
-
-compute ke/rigid command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID ke/rigid fix-ID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* ke = style name of this compute command
-* fix-ID = ID of rigid body fix
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all ke/rigid myRigid
-
-Description
-"""""""""""
-
-Define a computation that calculates the translational kinetic energy
-of a collection of rigid bodies, as defined by one of the :doc:`fix rigid <fix_rigid>` command variants.
-
-The kinetic energy of each rigid body is computed as 1/2 M Vcm^2,
-where M is the total mass of the rigid body, and Vcm is its
-center-of-mass velocity.
-
-The *fix-ID* should be the ID of one of the :doc:`fix rigid <fix_rigid>`
-commands which defines the rigid bodies. The group specified in the
-compute command is ignored. The kinetic energy of all the rigid
-bodies defined by the fix rigid command in included in the
-calculation.
-
-**Output info:**
-
-This compute calculates a global scalar (the summed KE of all the
-rigid bodies). This value can be used by any command that uses a
-global scalar value from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "extensive". The
-scalar value will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the RIGID package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute erotate/rigid <compute_erotate_rigid>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_meso_e_atom.txt b/doc/html/_sources/compute_meso_e_atom.txt
deleted file mode 100644
index 833e0d363..000000000
--- a/doc/html/_sources/compute_meso_e_atom.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-.. index:: compute meso/e/atom
-
-compute meso/e/atom command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID meso/e/atom
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* meso/e/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all meso/e/atom
-
-Description
-"""""""""""
-
-Define a computation that calculates the per-atom internal energy
-for each atom in a group.
-
-The internal energy is the energy associated with the internal degrees
-of freedom of a mesoscopic particles, e.g. a Smooth-Particle
-Hydrodynamics particle.
-
-See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in
-LAMMPS.
-
-The value of the internal energy will be 0.0 for atoms not in the
-specified compute group.
-
-**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
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-atom vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SPH package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump custom <dump>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_meso_rho_atom.txt b/doc/html/_sources/compute_meso_rho_atom.txt
deleted file mode 100644
index cbfa46926..000000000
--- a/doc/html/_sources/compute_meso_rho_atom.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-.. index:: compute meso/rho/atom
-
-compute meso/rho/atom command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID meso/rho/atom
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* meso/rho/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all meso/rho/atom
-
-Description
-"""""""""""
-
-Define a computation that calculates the per-atom mesoscopic density
-for each atom in a group.
-
-The mesoscopic density is the mass density of a mesoscopic particle,
-calculated by kernel function interpolation using "pair style
-sph/rhosum".
-
-See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in
-LAMMPS.
-
-The value of the mesoscopic density will be 0.0 for atoms not in the
-specified compute group.
-
-**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
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-atom vector values will be in mass/volume :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SPH package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump custom <dump>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_meso_t_atom.txt b/doc/html/_sources/compute_meso_t_atom.txt
deleted file mode 100644
index b2c4eadd0..000000000
--- a/doc/html/_sources/compute_meso_t_atom.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-.. index:: compute meso/t/atom
-
-compute meso/t/atom command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID meso/t/atom
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* meso/t/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all meso/t/atom
-
-Description
-"""""""""""
-
-Define a computation that calculates the per-atom internal temperature
-for each atom in a group.
-
-The internal temperature is the ratio of internal energy over the heat
-capacity associated with the internal degrees of freedom of a mesoscopic
-particles, e.g. a Smooth-Particle Hydrodynamics particle.
-
-T_\ *int* = E_\ *int* / C_\ *V, int*
-
-See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in
-LAMMPS.
-
-The value of the internal energy will be 0.0 for atoms not in the
-specified compute group.
-
-**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
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-atom vector values will be in temperature :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SPH package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump custom <dump>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_modify.txt b/doc/html/_sources/compute_modify.txt
deleted file mode 100644
index adadb3dcb..000000000
--- a/doc/html/_sources/compute_modify.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-.. index:: compute_modify
-
-compute_modify command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute_modify compute-ID keyword value ...
-
-* compute-ID = ID of the compute to modify
-* one or more keyword/value pairs may be listed
-* keyword = *extra* or *dynamic*
-.. parsed-literal::
-
- *extra* value = N
- N = # of extra degrees of freedom to subtract
- *dynamic* value = *yes* or *no*
- yes/no = do or do not recompute the number of atoms contributing to the temperature
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute_modify myTemp extra 0
- compute_modify newtemp dynamic yes extra 600
-
-Description
-"""""""""""
-
-Modify one or more parameters of a previously defined compute. Not
-all compute styles support all parameters.
-
-The *extra* keyword refers to how many degrees-of-freedom are
-subtracted (typically from 3N) as a normalizing factor in a
-temperature computation. Only computes that compute a temperature use
-this option. The default is 2 or 3 for :doc:`2d or 3d systems <dimension>` which is a correction factor for an ensemble
-of velocities with zero total linear momentum. For compute
-temp/partial, if one or more velocity components are excluded, the
-value used for *extra* is scaled accordingly. You can use a negative
-number for the *extra* parameter if you need to add
-degrees-of-freedom. See the :doc:`compute temp/asphere <compute_temp_asphere>` command for an example.
-
-The *dynamic* keyword determines whether the number of atoms N in the
-compute group is re-computed each time a temperature is computed.
-Only compute styles that calculate a temperature use this option. By
-default, N is assumed to be constant. If you are adding atoms to the
-system (see the :doc:`fix pour <fix_pour>` or :doc:`fix deposit <fix_deposit>` commands) or expect atoms to be lost
-(e.g. due to evaporation), then this option should be used to insure
-the temperature is correctly normalized.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute <compute>`
-
-Default
-"""""""
-
-The option defaults are extra = 2 or 3 for 2d or 3d systems and
-dynamic = no.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_msd.txt b/doc/html/_sources/compute_msd.txt
deleted file mode 100644
index a0632ec39..000000000
--- a/doc/html/_sources/compute_msd.txt
+++ /dev/null
@@ -1,126 +0,0 @@
-.. index:: compute msd
-
-compute msd command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID msd keyword values ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* msd = style name of this compute command
-* zero or more keyword/value pairs may be appended
-* keyword = *com* or *average*
-.. parsed-literal::
-
- *com* value = *yes* or *no*
- *average* value = *yes* or *no*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all msd
- compute 1 upper msd com yes average yes
-
-Description
-"""""""""""
-
-Define a computation that calculates the mean-squared displacement
-(MSD) of the group of atoms, including all effects due to atoms
-passing thru periodic boundaries. For computation of the non-Gaussian
-parameter of mean-squared displacement, see the :doc:`compute msd/nongauss <compute_msd_nongauss>` command.
-
-A vector of four quantites is calculated by this compute. The first 3
-elements of the vector are the squared dx,dy,dz displacements, summed
-and averaged over atoms in the group. The 4th element is the total
-squared displacement, i.e. (dx*dx + dy*dy + dz*dz), summed and
-averaged over atoms in the group.
-
-The slope of the mean-squared displacement (MSD) versus time is
-proportional to the diffusion coefficient of the diffusing atoms.
-
-The displacement of an atom is from its reference position. This is
-normally the original position at the time
-the compute command was issued, unless the *average* keyword is set to *yes*\ .
-The value of the displacement will be
-0.0 for atoms not in the specified compute group.
-
-If the *com* option is set to *yes* then the effect of any drift in
-the center-of-mass of the group of atoms is subtracted out before the
-displacment of each atom is calculated.
-
-If the *average* option is set to *yes* then the reference position of
-an atom is based on the average position of that atom, corrected for
-center-of-mass motion if requested. The average position is a running
-average over all previous calls to the compute, including the current
-call. So on the first call it is current position, on the second call
-it is the arithmetic average of the current position and the position
-on the first call, and so on. Note that when using this option, the
-precise value of the mean square displacement will depend on the
-number of times the compute is called. So, for example, changing the
-frequency of thermo output may change the computed displacement. Also,
-the precise values will be changed if a single simulation is broken up
-into two parts, using either multiple run commands or a restart
-file. It only makes sense to use this option if the atoms are not
-diffusing, so that their average positions relative to the center of
-mass of the system are stationary. The most common case is crystalline
-solids undergoing thermal motion.
-
-.. note::
-
- Initial coordinates are stored in "unwrapped" form, by using the
- image flags associated with each atom. See the :doc:`dump custom <dump>` command for a discussion of "unwrapped" coordinates.
- See the Atoms section of the :doc:`read_data <read_data>` command for a
- discussion of image flags and how they are set for each atom. You can
- reset the image flags (e.g. to 0) before invoking this compute by
- using the :doc:`set image <set>` command.
-
-.. note::
-
- If you want the quantities calculated by this compute to be
- continuous when running from a :doc:`restart file <read_restart>`, then
- you should use the same ID for this compute, as in the original run.
- This is so that the fix this compute creates to store per-atom
- quantities will also have the same ID, and thus be initialized
- correctly with atom reference positions from the restart file. When
- *average* is set to yes, then the atom reference positions are
- restored correctly, but not the number of samples used obtain them. As
- a result, the reference positions from the restart file are combined
- with subsequent positions as if they were from a single sample,
- instead of many, which will change the values of msd somewhat.
-
-**Output info:**
-
-This compute calculates a global vector of length 4, which can be
-accessed by indices 1-4 by any command that uses global vector values
-from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector values are "intensive". The vector values will be in
-distance^2 :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute msd/nongauss <compute_msd_nongauss>`, :doc:`compute displace_atom <compute_displace_atom>`, :doc:`fix store/state <fix_store_state>`, :doc:`compute msd/chunk <compute_msd_chunk>`
-
-Default
-"""""""
-
-The option default are com = no, average = no.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_msd_chunk.txt b/doc/html/_sources/compute_msd_chunk.txt
deleted file mode 100644
index 4c491d0a4..000000000
--- a/doc/html/_sources/compute_msd_chunk.txt
+++ /dev/null
@@ -1,134 +0,0 @@
-.. index:: compute msd/chunk
-
-compute msd/chunk command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID msd/chunk chunkID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* msd/chunk = style name of this compute command
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all msd/chunk molchunk
-
-Description
-"""""""""""
-
-Define a computation that calculates the mean-squared displacement
-(MSD) for multiple chunks of atoms.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-Four quantites are calculated by this compute for each chunk. The
-first 3 quantities are the squared dx,dy,dz displacements of the
-center-of-mass. The 4th component is the total squared displacement,
-i.e. (dx*dx + dy*dy + dz*dz) of the center-of-mass. These
-calculations include all effects due to atoms passing thru periodic
-boundaries.
-
-Note that only atoms in the specified group contribute to the
-calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
-defines its own group; atoms will have a chunk ID = 0 if they are not
-in that group, signifying they are not assigned to a chunk, and will
-thus also not contribute to this calculation. You can specify the
-"all" group for this command if you simply want to include atoms with
-non-zero chunk IDs.
-
-The slope of the mean-squared displacement (MSD) versus time is
-proportional to the diffusion coefficient of the diffusing chunks.
-
-The displacement of the center-of-mass of the chunk is from its
-original center-of-mass position, calculated on the timestep this
-compute command was first invoked.
-
-.. note::
-
- The number of chunks *Nchunk* calculated by the :doc:`compute chunk/atom <compute_chunk_atom>` command must remain constant each
- time this compute is invoked, so that the displacement for each chunk
- from its original position can be computed consistently. If *Nchunk*
- does not remain constant, an error will be generated. If needed, you
- can enforce a constant *Nchunk* by using the *nchunk once* or *ids
- once* options when specifying the :doc:`compute chunk/atom <compute_chunk_atom>` command.
-
-.. note::
-
- This compute stores the original position (of the
- center-of-mass) of each chunk. When a displacement is calculated on a
- later timestep, it is assumed that the same atoms are assigned to the
- same chunk ID. However LAMMPS has no simple way to insure this is the
- case, though you can use the *ids once* option when specifying the
- :doc:`compute chunk/atom <compute_chunk_atom>` command. Note that if
- this is not the case, the MSD calculation does not have a sensible
- meaning.
-
-.. note::
-
- The initial coordinates of the atoms in each chunk are stored in
- "unwrapped" form, by using the image flags associated with each atom.
- See the :doc:`dump custom <dump>` command for a discussion of
- "unwrapped" coordinates. See the Atoms section of the
- :doc:`read_data <read_data>` command for a discussion of image flags and
- how they are set for each atom. You can reset the image flags
- (e.g. to 0) before invoking this compute by using the :doc:`set image <set>` command.
-
-.. note::
-
- If you want the quantities calculated by this compute to be
- continuous when running from a :doc:`restart file <read_restart>`, then
- you should use the same ID for this compute, as in the original run.
- This is so that the fix this compute creates to store per-chunk
- quantities will also have the same ID, and thus be initialized
- correctly with chunk reference positions from the restart file.
-
-The simplest way to output the results of the compute com/msd
-calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
-command, for example:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk all com/msd cc1
- fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
-
-**Output info:**
-
-This compute calculates a global array where the number of rows = the
-number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The number of columns =
-4 for dx,dy,dz and the total displacement. These values can be
-accessed by any command that uses global array values from a compute
-as input. See :ref:`this section <howto_15>` for an
-overview of LAMMPS output options.
-
-The array values are "intensive". The array values will be in
-distance^2 :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute msd <compute_msd>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_msd_nongauss.txt b/doc/html/_sources/compute_msd_nongauss.txt
deleted file mode 100644
index a330cb2a9..000000000
--- a/doc/html/_sources/compute_msd_nongauss.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-.. index:: compute msd/nongauss
-
-compute msd/nongauss command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID msd/nongauss keyword values ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* msd/nongauss = style name of this compute command
-* zero or more keyword/value pairs may be appended
-* keyword = *com*
-.. parsed-literal::
-
- *com* value = *yes* or *no*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all msd/nongauss
- compute 1 upper msd/nongauss com yes
-
-Description
-"""""""""""
-
-Define a computation that calculates the mean-squared displacement
-(MSD) and non-Gaussian parameter (NGP) of the group of atoms,
-including all effects due to atoms passing thru periodic boundaries.
-
-A vector of three quantites is calculated by this compute. The first
-element of the vector is the total squared dx,dy,dz displacements
-drsquared = (dx*dx + dy*dy + dz*dz) of atoms, and the second is the
-fourth power of these displacements drfourth = (dx*dx + dy*dy +
-dz*dz)*(dx*dx + dy*dy + dz*dz), summed and averaged over atoms in the
-group. The 3rd component is the nonGaussian diffusion paramter NGP =
-3*drfourth/(5*drsquared*drsquared), i.e.
-
-.. image:: Eqs/compute_msd_nongauss.jpg
- :align: center
-
-The NGP is a commonly used quantity in studies of dynamical
-heterogeneity. Its minimum theoretical value (-0.4) occurs when all
-atoms have the same displacement magnitude. NGP=0 for Brownian
-diffusion, while NGP > 0 when some mobile atoms move faster than
-others.
-
-If the *com* option is set to *yes* then the effect of any drift in
-the center-of-mass of the group of atoms is subtracted out before the
-displacment of each atom is calcluated.
-
-See the :doc:`compute msd <compute_msd>` doc page for further important
-NOTEs, which also apply to this compute.
-
-**Output info:**
-
-This compute calculates a global vector of length 3, which can be
-accessed by indices 1-3 by any command that uses global vector values
-from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector values are "intensive". The first vector value will be in
-distance^2 :doc:`units <units>`, the second is in distance^4 units, and
-the 3rd is dimensionless.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the MISC package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute msd <compute_msd>`
-
-Default
-"""""""
-
-The option default is com = no.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_omega_chunk.txt b/doc/html/_sources/compute_omega_chunk.txt
deleted file mode 100644
index ea3cc572a..000000000
--- a/doc/html/_sources/compute_omega_chunk.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-.. index:: compute omega/chunk
-
-compute omega/chunk command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID omega/chunk chunkID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* omega/chunk = style name of this compute command
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 fluid omega/chunk molchunk
-
-Description
-"""""""""""
-
-Define a computation that calculates the angular velocity (omega) of
-multiple chunks of atoms.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-This compute calculates the 3 components of the angular velocity
-vector for each chunk, via the formula L = Iw where L is the angular
-momentum vector of the chunk, I is its moment of inertia tensor, and w
-is omega = angular velocity of the chunk. The calculation includes
-all effects due to atoms passing thru periodic boundaries.
-
-Note that only atoms in the specified group contribute to the
-calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
-defines its own group; atoms will have a chunk ID = 0 if they are not
-in that group, signifying they are not assigned to a chunk, and will
-thus also not contribute to this calculation. You can specify the
-"all" group for this command if you simply want to include atoms with
-non-zero chunk IDs.
-
-.. note::
-
- The coordinates of an atom contribute to the chunk's angular
- velocity in "unwrapped" form, by using the image flags associated with
- each atom. See the :doc:`dump custom <dump>` command for a discussion
- of "unwrapped" coordinates. See the Atoms section of the
- :doc:`read_data <read_data>` command for a discussion of image flags and
- how they are set for each atom. You can reset the image flags
- (e.g. to 0) before invoking this compute by using the :doc:`set image <set>` command.
-
-The simplest way to output the results of the compute omega/chunk
-calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
-command, for example:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk all omega/chunk cc1
- fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
-
-**Output info:**
-
-This compute calculates a global array where the number of rows = the
-number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The number of columns =
-3 for the 3 xyz components of the angular velocity for each chunk.
-These values can be accessed by any command that uses global array
-values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The array values are "intensive". The array values will be in
-velocity/distance :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`variable omega() function <variable>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_orientorder_atom.txt b/doc/html/_sources/compute_orientorder_atom.txt
deleted file mode 100644
index 6fe83f4e8..000000000
--- a/doc/html/_sources/compute_orientorder_atom.txt
+++ /dev/null
@@ -1,144 +0,0 @@
-.. index:: compute orientorder/atom
-
-compute orientorder/atom command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID orientorder/atom keyword values ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* orientorder/atom = style name of this compute command
-* one or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *cutoff* or *nnn* or *ql*
- *cutoff* value = distance cutoff
- *nnn* value = number of nearest neighbors
- *degrees* values = nlvalues, l1, l2,...
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all orientorder/atom
- compute 1 all orientorder/atom degrees 5 4 6 8 10 12 nnn NULL cutoff 1.5
-
-Description
-"""""""""""
-
-Define a computation that calculates a set of bond-orientational
-order parameters *Ql* for each atom in a group. These order parameters
-were introduced by :ref:`Steinhardt et al. <Steinhardt>` as a way to
-characterize the local orientational order in atomic structures.
-For each atom, *Ql* is a real number defined as follows:
-
-.. image:: Eqs/orientorder.jpg
- :align: center
-
-The first equation defines the spherical harmonic order parameters.
-These are complex number components of the 3D analog of the 2D order
-parameter *qn*\ , which is implemented as LAMMPS compute
-:doc:`hexorder/atom <compute_hexorder_atom>`.
-The summation is over the *nnn* nearest
-neighbors of the central atom.
-The angles theta and phi are the standard spherical polar angles
-defining the direction of the bond vector *rij*\ .
-The second equation defines *Ql*\ , which is a
-rotationally invariant scalar quantity obtained by summing
-over all the components of degree *l*\ .
-
-The optional keyword *cutoff* defines the distance cutoff
-used when searching for neighbors. The default value, also
-the maximum allowable value, is the cutoff specified
-by the pair style.
-
-The optional keyword *nnn* defines the number of nearest
-neighbors used to calculate *Ql*\ . The default value is 12.
-If the value is NULL, then all neighbors up to the
-specified distance cutoff are used.
-
-The optional keyword *degrees* defines the list of order parameters to
-be computed. The first argument *nlvalues* is the number of order
-parameters. This is followed by that number of integers giving the
-degree of each order parameter. Because *Q*\ 2 and all odd-degree
-order parameters are zero for atoms in cubic crystals
-(see :ref:`Steinhardt <Steinhardt>`), the default order parameters
-are *Q*\ 4, *Q*\ 6, *Q*\ 8, *Q*\ 10, and *Q*\ 12. For the
-FCC crystal with *nnn*\ =12, *Q*\ 4 = sqrt(7/3)/8 = 0.19094....
-The numerical values of all order parameters up to *Q*\ 12
-for a range of commonly encountered high-symmetry structures are given
-in Table I of :ref:`Mickel et al. <Mickel>`.
-
-The value of *Ql* is set to zero for atoms not in the
-specified compute group, as well as for atoms that have less than
-*nnn* neighbors within the distance cutoff.
-
-The neighbor list needed to compute this quantity is constructed each
-time the calculation is performed (i.e. each time a snapshot of atoms
-is dumped). Thus it can be inefficient to compute/dump this quantity
-too frequently.
-
-.. note::
-
- If you have a bonded system, then the settings of
- :doc:`special_bonds <special_bonds>` command can remove pairwise
- interactions between atoms in the same bond, angle, or dihedral. This
- is the default setting for the :doc:`special_bonds <special_bonds>`
- command, and means those pairwise interactions do not appear in the
- neighbor list. Because this fix uses the neighbor list, it also means
- those pairs will not be included in the order parameter. This
- difficulty can be circumvented by writing a dump file, and using the
- :doc:`rerun <rerun>` command to compute the order parameter for
- snapshots in the dump file. The rerun script can use a
- :doc:`special_bonds <special_bonds>` command that includes all pairs in
- the neighbor list.
-
-**Output info:**
-
-This compute calculates a per-atom array with *nlvalues* columns, giving the
-*Ql* values for each atom, which are real numbers on the range 0 <= *Ql* <= 1.
-
-These values can be accessed by any command that uses
-per-atom values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute coord/atom <compute_coord_atom>`, :doc:`compute centro/atom <compute_centro_atom>`, :doc:`compute hexorder/atom <compute_hexorder_atom>`
-
-Default
-"""""""
-
-The option defaults are *cutoff* = pair style cutoff, *nnn* = 12, *degrees* = 5 4 6 8 9 10 12 i.e. *Q*\ 4, *Q*\ 6, *Q*\ 8, *Q*\ 10, and *Q*\ 12.
-
-
-----------
-
-
-.. _Steinhardt:
-
-
-
-.. _Mickel:
-
-**(Steinhardt)** P. Steinhardt, D. Nelson, and M. Ronchetti, Phys. Rev. B 28, 784 (1983).
-
-
-**(Mickel)** W. Mickel, S. C. Kapfer, G. E. Schroeder-Turkand, K. Mecke, J. Chem. Phys. 138, 044501 (2013).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_pair.txt b/doc/html/_sources/compute_pair.txt
deleted file mode 100644
index 60e6983ea..000000000
--- a/doc/html/_sources/compute_pair.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-.. index:: compute pair
-
-compute pair command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID pair pstyle evalue
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* pair = style name of this compute command
-* pstyle = style name of a pair style that calculates additional values
-* evalue = *epair* or *evdwl* or *ecoul* or blank (optional setting)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all pair gauss
- compute 1 all pair lj/cut/coul/cut ecoul
- compute 1 all pair reax
-
-Description
-"""""""""""
-
-Define a computation that extracts additional values calculated by a
-pair style, and makes them accessible for output or further processing
-by other commands. The group specified for this command is ignored.
-
-The specified *pstyle* must be a pair style used in your simulation
-either by itself or as a sub-style in a :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` command.
-
-The *evalue* setting is optional; it may be left off the command. All
-pair styles tally a potential energy *epair* which may be broken into
-two parts: *evdwl* and *ecoul* such that *epair* = *evdwl* + *ecoul*\ .
-If the pair style calculates Coulombic interactions, their energy will
-be tallied in *ecoul*\ . Everything else (whether it is a Lennard-Jones
-style van der Waals interaction or not) is tallied in *evdwl*\ . If
-*evalue* is specified as *epair* or left out, then *epair* is stored
-as a global scalar by this compute. This is useful when using
-:doc:`pair_style hybrid <pair_hybrid>` if you want to know the portion
-of the total energy contributed by one sub-style. If *evalue* is
-specfied as *evdwl* or *ecoul*\ , then just that portion of the energy
-is stored as a global scalar.
-
-.. note::
-
- The energy returned by the *evdwl* keyword does not include tail
- corrections, even if they are enabled via the
- :doc:`pair_modify <pair_modify>` command.
-
-Some pair styles tally additional quantities, e.g. a breakdown of
-potential energy into a dozen or so components is tallied by the
-:doc:`pair_style reax <pair_reax>` commmand. These values (1 or more)
-are stored as a global vector by this compute. See the doc page for
-:doc:`individual pair styles <pair_style>` for info on these values.
-
-**Output info:**
-
-This compute calculates a global scalar which is *epair* or *evdwl* or
-*ecoul*\ . If the pair style supports it, it also calculates a global
-vector of length >= 1, as determined by the pair style. These values
-can be used by any command that uses global scalar or vector values
-from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar and vector values calculated by this compute are
-"extensive".
-
-The scalar value will be in energy :doc:`units <units>`. The vector
-values will typically also be in energy :doc:`units <units>`, but see
-the doc page for the pair style for details.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute pe <compute_pe>`, :doc:`compute bond <compute_bond>`
-
-Default
-"""""""
-
-The default for *evalue* is *epair*\ .
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_pair_local.txt b/doc/html/_sources/compute_pair_local.txt
deleted file mode 100644
index eceee7ae6..000000000
--- a/doc/html/_sources/compute_pair_local.txt
+++ /dev/null
@@ -1,155 +0,0 @@
-.. index:: compute pair/local
-
-compute pair/local command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID pair/local value1 value2 ... keyword args ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* pair/local = style name of this compute command
-* one or more values may be appended
-* value = *dist* or *eng* or *force* or *fx* or *fy* or *fz* or *pN*
-.. parsed-literal::
-
- *dist* = pairwise distance
- *eng* = pairwise energy
- *force* = pairwise force
- *fx*\ ,\ *fy*\ ,\ *fz* = components of pairwise force
- *pN* = pair style specific quantities for allowed N values
-
-* zero or more keyword/arg pairs may be appended
-* keyword = *cutoff*
-.. parsed-literal::
-
- *cutoff* arg = *type* or *radius*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all pair/local eng
- compute 1 all pair/local dist eng force
- compute 1 all pair/local dist eng fx fy fz
- compute 1 all pair/local dist fx fy fz p1 p2 p3
-
-Description
-"""""""""""
-
-Define a computation that calculates properties of individual pairwise
-interactions. The number of datums generated, aggregated across all
-processors, equals the number of pairwise interactions in the system.
-
-The local data stored by this command is generated by looping over the
-pairwise neighbor list. Info about an individual pairwise interaction
-will only be included if both atoms in the pair are in the specified
-compute group, and if the current pairwise distance is less than the
-force cutoff distance for that interaction, as defined by the
-:doc:`pair_style <pair_style>` and :doc:`pair_coeff <pair_coeff>`
-commands.
-
-The value *dist* is the distance bewteen the pair of atoms.
-
-The value *eng* is the interaction energy for the pair of atoms.
-
-The value *force* is the force acting between the pair of atoms, which
-is positive for a repulsive force and negative for an attractive
-force. The values *fx*\ , *fy*\ , and *fz* are the xyz components of
-*force* on atom I.
-
-A pair style may define additional pairwise quantities which can be
-accessed as *p1* to *pN*\ , where N is defined by the pair style. Most
-pair styles do not define any additional quantities, so N = 0. An
-example of ones that do are the :doc:`granular pair styles <pair_gran>`
-which calculate the tangential force between two particles and return
-its components and magnitude acting on atom I for N = 1,2,3,4. See
-individual pair styles for detils.
-
-The value *dist* will be in distance :doc:`units <units>`. The value
-*eng* will be in energy :doc:`units <units>`. The values *force*\ , *fx*\ ,
-*fy*\ , and *fz* will be in force :doc:`units <units>`. The values *pN*
-will be in whatever units the pair style defines.
-
-The optional *cutoff* keyword determines how the force cutoff distance
-for an interaction is determined. For the default setting of *type*\ ,
-the pairwise cutoff defined by the :doc:`pair_style <pair_style>`
-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
-cutoff. For example, this is appropriate for granular particles which
-only interact when they are overlapping, as computed by `granular pair styles <pair_gran.txt>`_.
-
-Note that as atoms migrate from processor to processor, there will be
-no consistent ordering of the entries within the local vector or array
-from one timestep to the next. The only consistency that is
-guaranteed is that the ordering on a particular timestep will be the
-same for local vectors or arrays generated by other compute commands.
-For example, pair output from the :doc:`compute property/local <compute_property_local>` command can be combined
-with data from this command and output by the :doc:`dump local <dump>`
-command in a consistent way.
-
-Here is an example of how to do this:
-
-.. parsed-literal::
-
- compute 1 all property/local patom1 patom2
- compute 2 all pair/local dist eng force
- dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_2[1] c_2[2] c_2[3]
-
-.. note::
-
- For pairs, if two atoms I,J are involved in 1-2, 1-3, 1-4
- interactions within the molecular topology, their pairwise interaction
- may be turned off, and thus they may not appear in the neighbor list,
- and will not be part of the local data created by this command. More
- specifically, this will be true of I,J pairs with a weighting factor
- of 0.0; pairs with a non-zero weighting factor are included. The
- weighting factors for 1-2, 1-3, and 1-4 pairwise interactions are set
- by the :doc:`special_bonds <special_bonds>` command. An exception is if
- long-range Coulombics are being computed via the
- :doc:`kspace_style <kspace_style>` command, then atom pairs with
- weighting factors of zero are still included in the neighbor list, so
- that a portion of the long-range interaction contribution can be
- computed in the pair style. Hence in that case, those atom pairs will
- be part of the local data created by this command.
-
-**Output info:**
-
-This compute calculates a local vector or local array depending on the
-number of keywords. The length of the vector or number of rows in the
-array is the number of pairs. If a single keyword is specified, a
-local vector is produced. If two or more keywords are specified, a
-local array is produced where the number of columns = the number of
-keywords. The vector or array can be accessed by any command that
-uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The output for *dist* will be in distance :doc:`units <units>`. The
-output for *eng* will be in energy :doc:`units <units>`. The output for
-*force*\ , *fx*\ , *fy*\ , and *fz* will be in force :doc:`units <units>`.
-The outpur for *pN* will be in whatever units the pair style defines.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump local <dump>`, :doc:`compute property/local <compute_property_local>`
-
-Default
-"""""""
-
-The keyword default is cutoff = type.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_pe.txt b/doc/html/_sources/compute_pe.txt
deleted file mode 100644
index c573e8d9a..000000000
--- a/doc/html/_sources/compute_pe.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-.. index:: compute pe
-
-compute pe command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID pe keyword ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* pe = style name of this compute command
-* zero or more keywords may be appended
-* keyword = *pair* or *bond* or *angle* or *dihedral* or *improper* or *kspace* or *fix*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all pe
- compute molPE all pe bond angle dihedral improper
-
-Description
-"""""""""""
-
-Define a computation that calculates the potential energy of the
-entire system of atoms. The specified group must be "all". See the
-:doc:`compute pe/atom <compute_pe_atom>` command if you want per-atom
-energies. These per-atom values could be summed for a group of atoms
-via the :doc:`compute reduce <compute_reduce>` command.
-
-The energy is calculated by the various pair, bond, etc potentials
-defined for the simulation. If no extra keywords are listed, then the
-potential energy is the sum of pair, bond, angle, dihedral, improper,
-kspace (long-range), and fix energy. I.e. it is as if all the
-keywords were listed. If any extra keywords are listed, then only
-those components are summed to compute the potential energy.
-
-The Kspace contribution requires 1 extra FFT each timestep the energy
-is calculated, if using the PPPM solver via the :doc:`kspace_style pppm <kspace_style>` command. Thus it can increase the cost of the
-PPPM calculation if it is needed on a large fraction of the simulation
-timesteps.
-
-Various fixes can contribute to the total potential energy of the
-system if the *fix* contribution is included. See the doc pages for
-:doc:`individual fixes <fix>` for details of which ones compute a
-potential energy.
-
-.. note::
-
- The :doc:`fix_modify energy yes <fix_modify>` command must also be
- specified if a fix is to contribute potential energy to this command.
-
-A compute of this style with the ID of "thermo_pe" is created when
-LAMMPS starts up, as if this command were in the input script:
-
-.. parsed-literal::
-
- compute thermo_pe all pe
-
-See the "thermo_style" command for more details.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global scalar (the potential energy). This
-value can be used by any command that uses a global scalar value from
-a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "extensive". The
-scalar value will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute pe/atom <compute_pe_atom>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_pe_atom.txt b/doc/html/_sources/compute_pe_atom.txt
deleted file mode 100644
index de77ad67a..000000000
--- a/doc/html/_sources/compute_pe_atom.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-.. index:: compute pe/atom
-
-compute pe/atom command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID pe/atom keyword ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* pe/atom = style name of this compute command
-* zero or more keywords may be appended
-* keyword = *pair* or *bond* or *angle* or *dihedral* or *improper* or *kspace* or *fix*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all pe/atom
- compute 1 all pe/atom pair
- compute 1 all pe/atom pair bond
-
-Description
-"""""""""""
-
-Define a computation that computes the per-atom potential energy for
-each atom in a group. See the :doc:`compute pe <compute_pe>` command if
-you want the potential energy of the entire system.
-
-The per-atom energy is calculated by the various pair, bond, etc
-potentials defined for the simulation. If no extra keywords are
-listed, then the potential energy is the sum of pair, bond, angle,
-dihedral,improper, kspace (long-range), and fix energy. I.e. it is as
-if all the keywords were listed. If any extra keywords are listed,
-then only those components are summed to compute the potential energy.
-
-Note that the energy of each atom is due to its interaction with all
-other atoms in the simulation, not just with other atoms in the group.
-
-For an energy contribution produced by a small set of atoms (e.g. 4
-atoms in a dihedral or 3 atoms in a Tersoff 3-body interaction), that
-energy is assigned in equal portions to each atom in the set.
-E.g. 1/4 of the dihedral energy to each of the 4 atoms.
-
-The :doc:`dihedral_style charmm <dihedral_charmm>` style calculates
-pairwise interactions between 1-4 atoms. The energy contribution of
-these terms is included in the pair energy, not the dihedral energy.
-
-The KSpace contribution is calculated using the method in
-:ref:`(Heyes) <Heyes>` for the Ewald method and a related method for PPPM,
-as specified by the :doc:`kspace_style pppm <kspace_style>` command.
-For PPPM, the calcluation requires 1 extra FFT each timestep that
-per-atom energy is calculated. Thie `document <PDF/kspace.pdf>`_
-describes how the long-range per-atom energy calculation is performed.
-
-Various fixes can contribute to the per-atom potential energy of the
-system if the *fix* contribution is included. See the doc pages for
-:doc:`individual fixes <fix>` for details of which ones compute a
-per-atom potential energy.
-
-.. note::
-
- The :doc:`fix_modify energy yes <fix_modify>` command must also be
- specified if a fix is to contribute per-atom potential energy to this
- command.
-
-As an example of per-atom potential energy compared to total potential
-energy, these lines in an input script should yield the same result
-in the last 2 columns of thermo output:
-
-.. parsed-literal::
-
- compute peratom all pe/atom
- compute pe all reduce sum c_peratom
- thermo_style custom step temp etotal press pe c_pe
-
-.. note::
-
- The per-atom energy does not any Lennard-Jones tail corrections
- invoked by the :doc:`pair_modify tail yes <pair_modify>` command, since
- those are global contributions to the system energy.
-
-**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
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-atom vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-Related commands
-""""""""""""""""
-
-:doc:`compute pe <compute_pe>`, :doc:`compute stress/atom <compute_stress_atom>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Heyes:
-
-
-
-**(Heyes)** Heyes, Phys Rev B 49, 755 (1994),
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_plasticity_atom.txt b/doc/html/_sources/compute_plasticity_atom.txt
deleted file mode 100644
index 843c7d868..000000000
--- a/doc/html/_sources/compute_plasticity_atom.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-.. index:: compute plasticity/atom
-
-compute plasticity/atom command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID plasticity/atom
-
-* ID, group-ID are documented in compute command
-* plasticity/atom = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all plasticity/atom
-
-Description
-"""""""""""
-
-Define a computation that calculates the per-atom plasticity for each
-atom in a group. This is a quantity relevant for :doc:`Peridynamics models <pair_peri>`. See `this document <PDF/PDLammps_overview.pdf>`_
-for an overview of LAMMPS commands for Peridynamics modeling.
-
-The plasticity for a Peridynamic particle is the so-called consistency
-parameter (lambda). For elastic deformation lambda = 0, otherwise
-lambda > 0 for plastic deformation. For details, see
-:ref:`(Mitchell) <Mitchell>` and the PDF doc included in the LAMMPS
-distro in `doc/PDF/PDLammps_EPS.pdf <PDF/PDLammps_EPS.pdf>`_.
-
-This command can be invoked for one of the Peridynamic :doc:`pair styles <pair_peri>`: peri/eps.
-
-The plasticity value will be 0.0 for atoms not in the specified
-compute group.
-
-**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_howto 15 for an overview of LAMMPS output options.
-
-The per-atom vector values are unitlesss numbers (lambda) >= 0.0.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the PERI package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute damage <compute_damage>`, :doc:`compute dilatation <compute_dilatation>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Mitchell:
-
-
-
-**(Mitchell)** Mitchell, "A non-local, ordinary-state-based
-viscoelasticity model for peridynamics", Sandia National Lab Report,
-8064:1-28 (2011).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_pressure.txt b/doc/html/_sources/compute_pressure.txt
deleted file mode 100644
index 4593dc05a..000000000
--- a/doc/html/_sources/compute_pressure.txt
+++ /dev/null
@@ -1,163 +0,0 @@
-.. index:: compute pressure
-
-compute pressure command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID pressure temp-ID keyword ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* pressure = style name of this compute command
-* temp-ID = ID of compute that calculates temperature, can be NULL if not needed
-* zero or more keywords may be appended
-* keyword = *ke* or *pair* or *bond* or *angle* or *dihedral* or *improper* or *kspace* or *fix* or *virial*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all pressure thermo_temp
- compute 1 all pressure NULL pair bond
-
-Description
-"""""""""""
-
-Define a computation that calculates the pressure of the entire system
-of atoms. The specified group must be "all". See the :doc:`compute stress/atom <compute_stress_atom>` command if you want per-atom
-pressure (stress). These per-atom values could be summed for a group
-of atoms via the :doc:`compute reduce <compute_reduce>` command.
-
-The pressure is computed by the formula
-
-.. image:: Eqs/pressure.jpg
- :align: center
-
-where N is the number of atoms in the system (see discussion of DOF
-below), Kb is the Boltzmann constant, T is the temperature, d is the
-dimensionality of the system (2 or 3 for 2d/3d), V is the system
-volume (or area in 2d), and the second term is the virial, computed
-within LAMMPS for all pairwise as well as 2-body, 3-body, and 4-body,
-and long-range interactions. :doc:`Fixes <fix>` that impose constraints
-(e.g. the :doc:`fix shake <fix_shake>` command) also contribute to the
-virial term.
-
-A symmetric pressure tensor, stored as a 6-element vector, is also
-calculated by this compute. The 6 components of the vector are
-ordered xx, yy, zz, xy, xz, yz. The equation for the I,J components
-(where I and J = x,y,z) is similar to the above formula, except that
-the first term uses components of the kinetic energy tensor and the
-second term uses components of the virial tensor:
-
-.. image:: Eqs/pressure_tensor.jpg
- :align: center
-
-If no extra keywords are listed, the entire equations above are
-calculated. This includes a kinetic energy (temperature) term and the
-virial as the sum of pair, bond, angle, dihedral, improper, kspace
-(long-range), and fix contributions to the force on each atom. If any
-extra keywords are listed, then only those components are summed to
-compute temperature or ke and/or the virial. The *virial* keyword
-means include all terms except the kinetic energy *ke*\ .
-
-Details of how LAMMPS computes the virial efficiently for the entire
-system, including the effects of periodic boundary conditions is
-discussed in :ref:`(Thompson) <Thompson>`.
-
-The temperature and kinetic energy tensor is not calculated by this
-compute, but rather by the temperature compute specified with the
-command. If the kinetic energy is not included in the pressure, than
-the temperature compute is not used and can be specified as NULL.
-Normally the temperature compute used by compute pressure should
-calculate the temperature of all atoms for consistency with the virial
-term, but any compute style that calculates temperature can be used,
-e.g. one that excludes frozen atoms or other degrees of freedom.
-
-Note that if desired the specified temperature compute can be one that
-subtracts off a bias to calculate a temperature using only the thermal
-velocity of the atoms, e.g. by subtracting a background streaming
-velocity. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias.
-
-Also note that the N in the first formula above is really
-degrees-of-freedom divided by d = dimensionality, where the DOF value
-is calcluated by the temperature compute. See the various :doc:`compute temperature <compute>` styles for details.
-
-A compute of this style with the ID of "thermo_press" is created when
-LAMMPS starts up, as if this command were in the input script:
-
-.. parsed-literal::
-
- compute thermo_press all pressure thermo_temp
-
-where "thermo_temp" is the ID of a similarly defined compute of style
-"temp". See the "thermo_style" command for more details.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global scalar (the pressure) and a global
-vector of length 6 (pressure tensor), which can be accessed by indices
-1-6. These values can be used by any command that uses global scalar
-or vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar and vector values calculated by this compute are
-"intensive". The scalar and vector values will be in pressure
-:doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`, :doc:`compute stress/atom <compute_stress_atom>`,
-:doc:`thermo_style <thermo_style>`,
-
-**Default:** none
-
-
-----------
-
-
-.. _Thompson:
-
-
-
-**(Thompson)** Thompson, Plimpton, Mattson, J Chem Phys, 131, 154107 (2009).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_property_atom.txt b/doc/html/_sources/compute_property_atom.txt
deleted file mode 100644
index 15c972ffa..000000000
--- a/doc/html/_sources/compute_property_atom.txt
+++ /dev/null
@@ -1,182 +0,0 @@
-.. index:: compute property/atom
-
-compute property/atom command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID property/atom input1 input2 ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* property/atom = style name of this compute command
-* input = one or more atom attributes
-.. parsed-literal::
-
- possible attributes = id, mol, proc, type, mass,
- x, y, z, xs, ys, zs, xu, yu, zu, ix, iy, iz,
- vx, vy, vz, fx, fy, fz,
- q, mux, muy, muz, mu,
- radius, diameter, omegax, omegay, omegaz,
- angmomx, angmomy, angmomz,
- shapex,shapey, shapez,
- quatw, quati, quatj, quatk, tqx, tqy, tqz,
- end1x, end1y, end1z, end2x, end2y, end2z,
- corner1x, corner1y, corner1z,
- corner2x, corner2y, corner2z,
- corner3x, corner3y, corner3z,
- nbonds,
- vfrac, s0,
- spin, eradius, ervel, erforce,
- rho, drho, e, de, cv,
- i_name, d_name
-
-.. parsed-literal::
-
- id = atom ID
- mol = molecule ID
- proc = ID of processor that owns atom
- type = atom type
- mass = atom mass
- x,y,z = unscaled atom coordinates
- xs,ys,zs = scaled atom coordinates
- xu,yu,zu = unwrapped atom coordinates
- ix,iy,iz = box image that the atom is in
- vx,vy,vz = atom velocities
- fx,fy,fz = forces on atoms
- q = atom charge
- mux,muy,muz = orientation of dipole moment of atom
- mu = magnitude of dipole moment of atom
- radius,diameter = radius,diameter of spherical particle
- omegax,omegay,omegaz = angular velocity of spherical particle
- angmomx,angmomy,angmomz = angular momentum of aspherical particle
- shapex,shapey,shapez = 3 diameters of aspherical particle
- quatw,quati,quatj,quatk = quaternion components for aspherical or body particles
- tqx,tqy,tqz = torque on finite-size particles
- end12x, end12y, end12z = end points of line segment
- corner123x, corner123y, corner123z = corner points of triangle
- nbonds = number of bonds assigned to an atom
-
-.. parsed-literal::
-
- PERI package per-atom properties:
- vfrac = ???
- s0 = ???
-
-.. parsed-literal::
-
- USER-EFF and USER-AWPMD package per-atom properties:
- spin = electron spin
- eradius = electron radius
- ervel = electron radial velocity
- erforce = electron radial force
-
-.. parsed-literal::
-
- USER-SPH package per-atom properties:
- rho = ???
- drho = ???
- e = ???
- de = ???
- cv = ???
-
-.. parsed-literal::
-
- :doc:`fix property/atom <fix_property_atom>` per-atom properties:
- i_name = custom integer vector with name
- d_name = custom integer vector with name
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all property/atom xs vx fx mux
- compute 2 all property/atom type
- compute 1 all property/atom ix iy iz
-
-Description
-"""""""""""
-
-Define a computation that simply stores atom attributes for each atom
-in the group. This is useful so that the values can be used by other
-:ref:`output commands <howto_15>` that take computes as
-inputs. See for example, the :doc:`compute reduce <compute_reduce>`,
-:doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/histo <fix_ave_histo>`,
-:doc:`fix ave/chunk <fix_ave_chunk>`, and :doc:`atom-style variable <variable>` commands.
-
-The list of possible attributes is the same as that used by the :doc:`dump custom <dump>` command, which describes their meaning, with some
-additional quantities that are only defined for certain :doc:`atom styles <atom_style>`. Basically, this augmented list gives an
-input script access to any per-atom quantity stored by LAMMPS.
-
-The values are stored in a per-atom vector or array as discussed
-below. Zeroes are stored for atoms not in the specified group or for
-quantities that are not defined for a particular particle in the group
-(e.g. *shapex* if the particle is not an ellipsoid).
-
-The additional quantities only accessible via this command, and not
-directly via the :doc:`dump custom <dump>` command, are as follows.
-
-*Shapex*\ , *shapey*\ , and *shapez* are defined for ellipsoidal particles
-and define the 3d shape of each particle.
-
-*Quatw*\ , *quati*\ , *quatj*\ , and *quatk* are defined for ellipsoidal
-particles and body particles and store the 4-vector quaternion
-representing the orientation of each particle. See the :doc:`set <set>`
-command for an explanation of the quaternion vector.
-
-*End1x*\ , *end1y*\ , *end1z*\ , *end2x*\ , *end2y*\ , *end2z*\ , are defined for
-line segment particles and define the end points of each line segment.
-
-*Corner1x*\ , *corner1y*\ , *corner1z*\ , *corner2x*\ , *corner2y*\ ,
-*corner2z*\ , *corner3x*\ , *corner3y*\ , *corner3z*\ , are defined for
-triangular particles and define the corner points of each triangle.
-
-*Nbonds* is available for all molecular atom styles and refers to the
-number of explicit bonds assigned to an atom. Note that if the
-:doc:`newton bond <newton>` command is set to *on*\ , which is the
-default, then every bond in the system is assigned to only one of the
-two atoms in the bond. Thus a bond between atoms I,J may be tallied
-for either atom I or atom J. If :doc:`newton bond off <newton>` is set,
-it will be tallied with both atom I and atom J.
-
-The *i_name* and *d_name* attributes refer to custom integer and
-floating-point properties that have been added to each atom via the
-:doc:`fix property/atom <fix_property_atom>` command. When that command
-is used specific names are given to each attribute which are what is
-specified as the "name" portion of *i_name* or *d_name*\ .
-
-**Output info:**
-
-This compute calculates a per-atom vector or per-atom array depending
-on the number of input values. If a single input is specified, a
-per-atom vector is produced. If two or more inputs are specified, a
-per-atom array is produced where the number of columns = the number of
-inputs. The vector or array can be accessed by any command that uses
-per-atom values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector or array values will be in whatever :doc:`units <units>` the
-corresponding attribute is in, e.g. velocity units for vx, charge
-units for q, etc.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump custom <dump>`, :doc:`compute reduce <compute_reduce>`, :doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/chunk <fix_ave_chunk>`,
-:doc:`fix property/atom <fix_property_atom>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_property_chunk.txt b/doc/html/_sources/compute_property_chunk.txt
deleted file mode 100644
index 062f7d349..000000000
--- a/doc/html/_sources/compute_property_chunk.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-.. index:: compute property/chunk
-
-compute property/chunk command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID property/chunk chunkID input1 input2 ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* property/chunk = style name of this compute command
-* input = one or more attributes
-.. parsed-literal::
-
- attributes = count, id, coord1, coord2, coord3
- count = # of atoms in chunk
- id = original chunk IDs before compression by :doc:`compute chunk/atom <compute_chunk_atom>`
- coord123 = coordinates for spatial bins calculated by :doc:`compute chunk/atom <compute_chunk_atom>`
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all property/chunk count
- compute 1 all property/chunk ID coord1
-
-Description
-"""""""""""
-
-Define a computation that stores the specified attributes of chunks of
-atoms.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-This compute calculates and stores the specified attributes of chunks
-as global data so they can be accessed by other :ref:`output commands <howto_15>` and used in conjunction with
-other commands that generate per-chunk data, such as :doc:`compute com/chunk <compute_com_chunk>` or :doc:`compute msd/chunk <compute_msd_chunk>`.
-
-Note that only atoms in the specified group contribute to the
-calculation of the *count* attribute. The :doc:`compute chunk/atom <compute_chunk_atom>` command defines its own group;
-atoms will have a chunk ID = 0 if they are not in that group,
-signifying they are not assigned to a chunk, and will thus also not
-contribute to this calculation. You can specify the "all" group for
-this command if you simply want to include atoms with non-zero chunk
-IDs.
-
-The *count* attribute is the number of atoms in the chunk.
-
-The *id* attribute stores the original chunk ID for each chunk. It
-can only be used if the *compress* keyword was set to *yes* for the
-:doc:`compute chunk/atom <compute_chunk_atom>` command referenced by
-chunkID. This means that the original chunk IDs (e.g. molecule IDs)
-will have been compressed to remove chunk IDs with no atoms assigned
-to them. Thus a compresed chunk ID of 3 may correspond to an original
-chunk ID (molecule ID in this case) of 415. The *id* attribute will
-then be 415 for the 3rd chunk.
-
-The *coordN* attributes can only be used if a *binning* style was used
-in the :doc:`compute chunk/atom <compute_chunk_atom>` command referenced
-by chunkID. For *bin/1d*\ , *bin/2d*\ , and *bin/3d* styles the attribute
-is the center point of the bin in the corresponding dimension. Style
-*bin/1d* only defines a *coord1* attribute. Style *bin/2d* adds a
-*coord2* attribute. Style *bin/3d* adds a *coord3* attribute.
-
-Note that if the value of the *units* keyword used in the :doc:`compute chunk/atom command <compute_chunk_atom>` is *box* or *lattice*\ , the
-*coordN* attributes will be in distance :doc:`units <units>`. If the
-value of the *units* keyword is *reduced*\ , the *coordN* attributes
-will be in unitless reduced units (0-1).
-
-The simplest way to output the results of the compute property/chunk
-calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
-command, for example:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk1 all property/chunk cc1
- compute myChunk2 all com/chunk cc1
- fix 1 all ave/time 100 1 100 c_myChunk1 c_myChunk2 file tmp.out mode vector
-
-**Output info:**
-
-This compute calculates a global vector or global array depending on
-the number of input values. The length of the vector or number of
-rows in the array is the number of chunks.
-
-This compute calculates a global vector or global array where the
-number of rows = the number of chunks *Nchunk* as calculated by the
-specified :doc:`compute chunk/atom <compute_chunk_atom>` command. If a
-single input is specified, a global vector is produced. If two or
-more inputs are specified, a global array is produced where the number
-of columns = the number of inputs. The vector or array can be
-accessed by any command that uses global values from a compute as
-input. See :ref:`this section <howto_15>` for an overview
-of LAMMPS output options.
-
-The vector or array values are "intensive". The values will be
-unitless or in the units discussed above.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix ave/chunk <fix_ave_chunk>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_property_local.txt b/doc/html/_sources/compute_property_local.txt
deleted file mode 100644
index 6dbe4c6da..000000000
--- a/doc/html/_sources/compute_property_local.txt
+++ /dev/null
@@ -1,173 +0,0 @@
-.. index:: compute property/local
-
-compute property/local command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID property/local attribute1 attribute2 ... keyword args ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* property/local = style name of this compute command
-* one or more attributes may be appended
-.. parsed-literal::
-
- possible attributes = natom1 natom2 ntype1 ntype2
- patom1 patom2 ptype1 ptype2
- batom1 batom2 btype
- aatom1 aatom2 aatom3 atype
- datom1 datom2 datom3 dtype
- iatom1 iatom2 iatom3 itype
-
-.. parsed-literal::
-
- natom1, natom2 = IDs of 2 atoms in each pair (within neighbor cutoff)
- ntype1, ntype2 = type of 2 atoms in each pair (within neighbor cutoff)
- patom1, patom2 = IDs of 2 atoms in each pair (within force cutoff)
- ptype1, ptype2 = type of 2 atoms in each pair (within force cutoff)
- batom1, batom2 = IDs of 2 atoms in each bond
- btype = bond type of each bond
- aatom1, aatom2, aatom3 = IDs of 3 atoms in each angle
- atype = angle type of each angle
- datom1, datom2, datom3, datom4 = IDs of 4 atoms in each dihedral
- dtype = dihedral type of each dihedral
- iatom1, iatom2, iatom3, iatom4 = IDs of 4 atoms in each improper
- itype = improper type of each improper
-
-* zero or more keyword/arg pairs may be appended
-* keyword = *cutoff*
-.. parsed-literal::
-
- *cutoff* arg = *type* or *radius*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all property/local btype batom1 batom2
- compute 1 all property/local atype aatom2
-
-Description
-"""""""""""
-
-Define a computation that stores the specified attributes as local
-data so it can be accessed by other :ref:`output commands <howto_15>`. If the input attributes refer
-to bond information, then the number of datums generated, aggregated
-across all processors, equals the number of bonds in the system.
-Ditto for pairs, angles, etc.
-
-If multiple attributes are specified then they must all generate the
-same amount of information, so that the resulting local array has the
-same number of rows for each column. This means that only bond
-attributes can be specified together, or angle attributes, etc. Bond
-and angle attributes can not be mixed in the same compute
-property/local command.
-
-If the inputs are pair attributes, the local data is generated by
-looping over the pairwise neighbor list. Info about an individual
-pairwise interaction will only be included if both atoms in the pair
-are in the specified compute group. For *natom1* and *natom2*\ , all
-atom pairs in the neighbor list are considered (out to the neighbor
-cutoff = force cutoff + :doc:`neighbor skin <neighbor>`). For *patom1*
-and *patom2*\ , the distance between the atoms must be less than the
-force cutoff distance for that pair to be included, as defined by the
-:doc:`pair_style <pair_style>` and :doc:`pair_coeff <pair_coeff>`
-commands.
-
-The optional *cutoff* keyword determines how the force cutoff distance
-for an interaction is determined for the *patom1* and *patom2*
-attributes. For the default setting of *type*\ , the pairwise cutoff
-defined by the :doc:`pair_style <pair_style>` 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 cutoff. For example, this is
-appropriate for granular particles which only interact when they are
-overlapping, as computed by `granular pair styles <pair_gran.txt>`_.
-
-If the inputs are bond, angle, etc attributes, the local data is
-generated by looping over all the atoms owned on a processor and
-extracting bond, angle, etc info. For bonds, info about an individual
-bond will only be included if both atoms in the bond are in the
-specified compute group. Likewise for angles, dihedrals, etc.
-
-For bonds and angles, a bonds/angles that have been broken by setting
-their bond/angle type to 0 will not be included. Bonds/angles that
-have been turned off (see the :doc:`fix shake <fix_shake>` or
-:doc:`delete_bonds <delete_bonds>` commands) by setting their bond/angle
-type negative are written into the file. This is consistent with the
-:doc:`compute bond/local <compute_bond_local>` and :doc:`compute angle/local <compute_angle_local>` commands
-
-Note that as atoms migrate from processor to processor, there will be
-no consistent ordering of the entries within the local vector or array
-from one timestep to the next. The only consistency that is
-guaranteed is that the ordering on a particular timestep will be the
-same for local vectors or arrays generated by other compute commands.
-For example, output from the :doc:`compute bond/local <compute_bond_local>` command can be combined with bond
-atom indices from this command and output by the :doc:`dump local <dump>` command in a consistent way.
-
-The *natom1* and *natom2*\ , or *patom1* and *patom2* attributes refer
-to the atom IDs of the 2 atoms in each pairwise interaction computed
-by the :doc:`pair_style <pair_style>` command. The *ntype1* and
-*ntype2*\ , or *ptype1* and *ptype2* attributes refer to the atom types
-of the 2 atoms in each pairwise interaction.
-
-.. note::
-
- For pairs, if two atoms I,J are involved in 1-2, 1-3, 1-4
- interactions within the molecular topology, their pairwise interaction
- may be turned off, and thus they may not appear in the neighbor list,
- and will not be part of the local data created by this command. More
- specifically, this may be true of I,J pairs with a weighting factor of
- 0.0; pairs with a non-zero weighting factor are included. The
- weighting factors for 1-2, 1-3, and 1-4 pairwise interactions are set
- by the :doc:`special_bonds <special_bonds>` command.
-
-The *batom1* and *batom2* attributes refer to the atom IDs of the 2
-atoms in each :doc:`bond <bond_style>`. The *btype* attribute refers to
-the type of the bond, from 1 to Nbtypes = # of bond types. The number
-of bond types is defined in the data file read by the
-:doc:`read_data <read_data>` command.
-
-The attributes that start with "a", "d", "i", refer to similar values
-for :doc:`angles <angle_style>`, :doc:`dihedrals <dihedral_style>`, and
-:doc:`impropers <improper_style>`.
-
-The optional *cutoff* keyword
-
-**Output info:**
-
-This compute calculates a local vector or local array depending on the
-number of input values. The length of the vector or number of rows in
-the array is the number of bonds, angles, etc. If a single input is
-specified, a local vector is produced. If two or more inputs are
-specified, a local array is produced where the number of columns = the
-number of inputs. The vector or array can be accessed by any command
-that uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector or array values will be integers that correspond to the
-specified attribute.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump local <dump>`, :doc:`compute reduce <compute_reduce>`
-
-Default
-"""""""
-
-The keyword default is cutoff = type.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_rdf.txt b/doc/html/_sources/compute_rdf.txt
deleted file mode 100644
index e5abfe454..000000000
--- a/doc/html/_sources/compute_rdf.txt
+++ /dev/null
@@ -1,170 +0,0 @@
-.. index:: compute rdf
-
-compute rdf command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID rdf Nbin itype1 jtype1 itype2 jtype2 ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* rdf = style name of this compute command
-* Nbin = number of RDF bins
-* itypeN = central atom type for Nth RDF histogram (see asterisk form below)
-* jtypeN = distribution atom type for Nth RDF histogram (see asterisk form below)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all rdf 100
- compute 1 all rdf 100 1 1
- compute 1 all rdf 100 * 3
- compute 1 fluid rdf 500 1 1 1 2 2 1 2 2
- compute 1 fluid rdf 500 1*3 2 5 *10
-
-Description
-"""""""""""
-
-Define a computation that calculates the radial distribution function
-(RDF), also called g(r), and the coordination number for a group of
-particles. Both are calculated in histogram form by binning pairwise
-distances into *Nbin* bins from 0.0 to the maximum force cutoff
-defined by the :doc:`pair_style <pair_style>` command. The bins are of
-uniform size in radial distance. Thus a single bin encompasses a thin
-shell of distances in 3d and a thin ring of distances in 2d.
-
-.. note::
-
- If you have a bonded system, then the settings of
- :doc:`special_bonds <special_bonds>` command can remove pairwise
- interactions between atoms in the same bond, angle, or dihedral. This
- is the default setting for the :doc:`special_bonds <special_bonds>`
- command, and means those pairwise interactions do not appear in the
- neighbor list. Because this fix uses the neighbor list, it also means
- those pairs will not be included in the RDF. This does not apply when
- using long-range coulomb (\ *coul/long*\ , *coul/msm*\ , *coul/wolf* or
- similar. One way to get around this would be to set special_bond
- scaling factors to very tiny numbers that are not exactly zero
- (e.g. 1.0e-50). Another workaround is to write a dump file, and use
- the :doc:`rerun <rerun>` command to compute the RDF for snapshots in the
- dump file. The rerun script can use a
- :doc:`special_bonds <special_bonds>` command that includes all pairs in
- the neighbor list.
-
-The *itypeN* and *jtypeN* arguments are optional. These arguments
-must come in pairs. If no pairs are listed, then a single histogram
-is computed for g(r) between all atom types. If one or more pairs are
-listed, then a separate histogram is generated for each
-*itype*\ ,\ *jtype* pair.
-
-The *itypeN* and *jtypeN* settings can be specified in one of two
-ways. An explicit numeric value can be used, as in the 4th example
-above. Or a wild-card asterisk can be used to specify a range of atom
-types. This takes the form "*" or "*n" or "n*" or "m*n". If N = the
-number of atom types, then an asterisk with no numeric values means
-all types from 1 to N. A leading asterisk means all types from 1 to n
-(inclusive). A trailing asterisk means all types from n to N
-(inclusive). A middle asterisk means all types from m to n
-(inclusive).
-
-If both *itypeN* and *jtypeN* are single values, as in the 4th example
-above, this means that a g(r) is computed where atoms of type *itypeN*
-are the central atom, and atoms of type *jtypeN* are the distribution
-atom. If either *itypeN* and *jtypeN* represent a range of values via
-the wild-card asterisk, as in the 5th example above, this means that a
-g(r) is computed where atoms of any of the range of types represented
-by *itypeN* are the central atom, and atoms of any of the range of
-types represented by *jtypeN* are the distribution atom.
-
-Pairwise distances are generated by looping over a pairwise neighbor
-list, just as they would be in a :doc:`pair_style <pair_style>`
-computation. The distance between two atoms I and J is included in a
-specific histogram if the following criteria are met:
-
-* atoms I,J are both in the specified compute group
-* the distance between atoms I,J is less than the maximum force cutoff
-* the type of the I atom matches itypeN (one or a range of types)
-* the type of the J atom matches jtypeN (one or a range of types)
-
-It is OK if a particular pairwise distance is included in more than
-one individual histogram, due to the way the *itypeN* and *jtypeN*
-arguments are specified.
-
-The g(r) value for a bin is calculated from the histogram count by
-scaling it by the idealized number of how many counts there would be
-if atoms of type *jtypeN* were uniformly distributed. Thus it
-involves the count of *itypeN* atoms, the count of *jtypeN* atoms, the
-volume of the entire simulation box, and the volume of the bin's thin
-shell in 3d (or the area of the bin's thin ring in 2d).
-
-A coordination number coord(r) is also calculated, which is the number
-of atoms of type *jtypeN* within the current bin or closer, averaged
-over atoms of type *itypeN*\ . This is calculated as the area- or
-volume-weighted sum of g(r) values over all bins up to and including
-the current bin, multiplied by the global average volume density of
-atoms of type jtypeN.
-
-The simplest way to output the results of the compute rdf calculation
-to a file is to use the :doc:`fix ave/time <fix_ave_time>` command, for
-example:
-
-.. parsed-literal::
-
- compute myRDF all rdf 50
- fix 1 all ave/time 100 1 100 c_myRDF file tmp.rdf mode vector
-
-**Output info:**
-
-This compute calculates a global array with the number of rows =
-*Nbins*\ , and the number of columns = 1 + 2*Npairs, where Npairs is the
-number of I,J pairings specified. The first column has the bin
-coordinate (center of the bin), Each successive set of 2 columns has
-the g(r) and coord(r) values for a specific set of *itypeN* versus
-*jtypeN* interactions, as described above. These values can be used
-by any command that uses a global values from a compute as input. See
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The array values calculated by this compute are all "intensive".
-
-The first column of array values will be in distance
-:doc:`units <units>`. The g(r) columns of array values are normalized
-numbers >= 0.0. The coordination number columns of array values are
-also numbers >= 0.0.
-
-Restrictions
-""""""""""""
-
-
-The RDF is not computed for distances longer than the force cutoff,
-since processors (in parallel) don't know about atom coordinates for
-atoms further away than that distance. If you want an RDF for larger
-distances, you can use the :doc:`rerun <rerun>` command to post-process
-a dump file and set the cutoff for the potential to be longer in the
-rerun script. Note that in the rerun context, the force cutoff is
-arbitrary, since you aren't running dynamics and thus are not changing
-your model. The definition of g(r) used by LAMMPS is only appropriate
-for characterizing atoms that are uniformly distributed throughout the
-simulation cell. In such cases, the coordination number is still
-correct and meaningful. As an example, if a large simulation cell
-contains only one atom of type *itypeN* and one of *jtypeN*\ , then g(r)
-will register an arbitrarily large spike at whatever distance they
-happen to be at, and zero everywhere else. Coord(r) will show a step
-change from zero to one at the location of the spike in g(r).
-
-Related commands
-""""""""""""""""
-
-:doc:`fix ave/time <fix_ave_time>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_reduce.txt b/doc/html/_sources/compute_reduce.txt
deleted file mode 100644
index 2acdee0c7..000000000
--- a/doc/html/_sources/compute_reduce.txt
+++ /dev/null
@@ -1,237 +0,0 @@
-.. index:: compute reduce
-
-compute reduce command
-======================
-
-compute reduce/region command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID style arg mode input1 input2 ... keyword args ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* style = *reduce* or *reduce/region*
-.. parsed-literal::
-
- *reduce* arg = none
- *reduce/region* arg = region-ID
- region-ID = ID of region to use for choosing atoms
-
-* mode = *sum* or *min* or *max* or *ave* or *sumsq* or *avesq*
-* one or more inputs can be listed
-* input = x, y, z, vx, vy, vz, fx, fy, fz, c_ID, c_ID[N], f_ID, f_ID[N], v_name
-.. parsed-literal::
-
- x,y,z,vx,vy,vz,fx,fy,fz = atom attribute (position, velocity, force component)
- c_ID = per-atom or local vector calculated by a compute with ID
- c_ID[I] = Ith column of per-atom or local array calculated by a compute with ID, I can include wildcard (see below)
- f_ID = per-atom or local vector calculated by a fix with ID
- f_ID[I] = Ith column of per-atom or local array calculated by a fix with ID, I can include wildcard (see below)
- v_name = per-atom vector calculated by an atom-style variable with name
-
-* zero or more keyword/args pairs may be appended
-* keyword = *replace*
-.. parsed-literal::
-
- *replace* args = vec1 vec2
- vec1 = reduced value from this input vector will be replaced
- vec2 = replace it with vec1[N] where N is index of max/min value from vec2
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all reduce sum c_force
- compute 1 all reduce/region subbox sum c_force
- compute 2 all reduce min c_press[2] f_ave v_myKE
- compute 2 all reduce min c_press[*] f_ave v_myKE
- compute 3 fluid reduce max c_index[1] c_index[2] c_dist replace 1 3 replace 2 3
-
-Description
-"""""""""""
-
-Define a calculation that "reduces" one or more vector inputs into
-scalar values, one per listed input. The inputs can be per-atom or
-local quantities; they cannot be global quantities. Atom attributes
-are per-atom quantities, :doc:`computes <compute>` and :doc:`fixes <fix>`
-may generate any of the three kinds of quantities, and :doc:`atom-style variables <variable>` generate per-atom quantities. See the
-:doc:`variable <variable>` command and its special functions which can
-perform the same operations as the compute reduce command on global
-vectors.
-
-The reduction operation is specified by the *mode* setting. The *sum*
-option adds the values in the vector into a global total. The *min*
-or *max* options find the minimum or maximum value across all vector
-values. The *ave* setting adds the vector values into a global total,
-then divides by the number of values in the vector. The *sumsq*
-option sums the square of the values in the vector into a global
-total. The *avesq* setting does the same as *sumsq*\ , then divdes the
-sum of squares by the number of values. The last two options can be
-useful for calculating the variance of some quantity, e.g. variance =
-sumsq - ave^2.
-
-Each listed input is operated on independently. For per-atom inputs,
-the group specified with this command means only atoms within the
-group contribute to the result. For per-atom inputs, if the compute
-reduce/region command is used, the atoms must also currently be within
-the region. Note that an input that produces per-atom quantities may
-define its own group which affects the quantities it returns. For
-example, if a compute is used as an input which generates a per-atom
-vector, it will generate values of 0.0 for atoms that are not in the
-group specified for that compute.
-
-Each listed input can be an atom attribute (position, velocity, force
-component) or can be the result of a :doc:`compute <compute>` or
-:doc:`fix <fix>` or the evaluation of an atom-style
-:doc:`variable <variable>`.
-
-Note that for values from a compute or fix, the bracketed index I can
-be specified using a wildcard asterisk with the index to effectively
-specify multiple values. This takes the form "*" or "*n" or "n*" or
-"m*n". If N = the size of the vector (for *mode* = scalar) or the
-number of columns in the array (for *mode* = vector), then an asterisk
-with no numeric values means all indices from 1 to N. A leading
-asterisk means all indices from 1 to n (inclusive). A trailing
-asterisk means all indices from n to N (inclusive). A middle asterisk
-means all indices from m to n (inclusive).
-
-Using a wildcard is the same as if the individual columns of the array
-had been listed one by one. E.g. these 2 compute reduce commands are
-equivalent, since the :doc:`compute stress/atom <compute_stress/atom>`
-command creates a per-atom array with 6 columns:
-
-.. parsed-literal::
-
- compute myPress all stress/atom NULL
- compute 2 all reduce min myPress[*]
- compute 2 all reduce min myPress[1] myPress[2] myPress[3] &
- myPress[4] myPress[5] myPress[6]
-
-
-----------
-
-
-The atom attribute values (x,y,z,vx,vy,vz,fx,fy,fz) are
-self-explanatory. Note that other atom attributes can be used as
-inputs to this fix by using the :doc:`compute property/atom <compute_property_atom>` command and then specifying
-an input value from that compute.
-
-If a value begins with "c_", a compute ID must follow which has been
-previously defined in the input script. Computes can generate
-per-atom or local quantities. See the individual
-:doc:`compute <compute>` doc page for details. If no bracketed integer
-is appended, the vector calculated by the compute is used. If a
-bracketed integer is appended, the Ith column of the array calculated
-by the compute is used. Users can also write code for their own
-compute styles and :doc:`add them to LAMMPS <Section_modify>`. See the
-discussion above for how I can be specified with a wildcard asterisk
-to effectively specify multiple values.
-
-If a value begins with "f_", a fix ID must follow which has been
-previously defined in the input script. Fixes can generate per-atom
-or local quantities. See the individual :doc:`fix <fix>` doc page for
-details. Note that some fixes only produce their values on certain
-timesteps, which must be compatible with when compute reduce
-references the values, else an error results. If no bracketed integer
-is appended, the vector calculated by the fix is used. If a bracketed
-integer is appended, the Ith column of the array calculated by the fix
-is used. Users can also write code for their own fix style and :doc:`add them to LAMMPS <Section_modify>`. See the discussion above for how
-I can be specified with a wildcard asterisk to effectively specify
-multiple values.
-
-If a value begins with "v_", a variable name must follow which has
-been previously defined in the input script. It must be an
-:doc:`atom-style variable <variable>`. Atom-style variables can
-reference thermodynamic keywords and various per-atom attributes, or
-invoke other computes, fixes, or variables when they are evaluated, so
-this is a very general means of generating per-atom quantities to
-reduce.
-
-
-----------
-
-
-If the *replace* keyword is used, two indices *vec1* and *vec2* are
-specified, where each index ranges from 1 to the # of input values.
-The replace keyword can only be used if the *mode* is *min* or *max*\ .
-It works as follows. A min/max is computed as usual on the *vec2*
-input vector. The index N of that value within *vec2* is also stored.
-Then, instead of performing a min/max on the *vec1* input vector, the
-stored index is used to select the Nth element of the *vec1* vector.
-
-Thus, for example, if you wish to use this compute to find the bond
-with maximum stretch, you can do it as follows:
-
-.. parsed-literal::
-
- compute 1 all property/local batom1 batom2
- compute 2 all bond/local dist
- compute 3 all reduce max c_1[1] c_1[2] c_2 replace 1 3 replace 2 3
- thermo_style custom step temp c_3[1] c_3[2] c_3[3]
-
-The first two input values in the compute reduce command are vectors
-with the IDs of the 2 atoms in each bond, using the :doc:`compute property/local <compute_property_local>` command. The last input
-value is bond distance, using the :doc:`compute bond/local <compute_bond_local>` command. Instead of taking the
-max of the two atom ID vectors, which does not yield useful
-information in this context, the *replace* keywords will extract the
-atom IDs for the two atoms in the bond of maximum stretch. These atom
-IDs and the bond stretch will be printed with thermodynamic output.
-
-
-----------
-
-
-If a single input is specified this compute produces a global scalar
-value. If multiple inputs are specified, this compute produces a
-global vector of values, the length of which is equal to the number of
-inputs specified.
-
-As discussed below, for the *sum* and *sumsq* modes, the value(s)
-produced by this compute are all "extensive", meaning their value
-scales linearly with the number of atoms involved. If normalized
-values are desired, this compute can be accessed by the :doc:`thermo_style custom <thermo_style>` command with :doc:`thermo_modify norm yes <thermo_modify>` set as an option. Or it can be accessed by a
-:doc:`variable <variable>` that divides by the appropriate atom count.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global scalar if a single input value is
-specified or a global vector of length N where N is the number of
-inputs, and which can be accessed by indices 1 to N. These values can
-be used by any command that uses global scalar or vector values from a
-compute as input. See :ref:`Section_howto 15 <howto_15>`
-for an overview of LAMMPS output options.
-
-All the scalar or vector values calculated by this compute are
-"intensive", except when the *sum* or *sumsq* modes are used on
-per-atom or local vectors, in which case the calculated values are
-"extensive".
-
-The scalar or vector values will be in whatever :doc:`units <units>` the
-quantities being reduced are in.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute <compute>`, :doc:`fix <fix>`, :doc:`variable <variable>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_rigid_local.txt b/doc/html/_sources/compute_rigid_local.txt
deleted file mode 100644
index b8755e5a3..000000000
--- a/doc/html/_sources/compute_rigid_local.txt
+++ /dev/null
@@ -1,200 +0,0 @@
-.. index:: compute rigid/local
-
-compute rigid/local command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID rigid/local rigidID input1 input2 ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* rigid/local = style name of this compute command
-* rigidID = ID of fix rigid/small command or one of its variants
-* input = one or more rigid body attributes
-.. parsed-literal::
-
- possible attributes = id, mol, mass,
- x, y, z, xu, yu, zu, ix, iy, iz
- vx, vy, vz, fx, fy, fz,
- omegax, omegay, omegaz,
- angmomx, angmomy, angmomz,
- quatw, quati, quatj, quatk,
- tqx, tqy, tqz,
- inertiax, inertiay, inertiaz
- id = atom ID of atom within body which owns body properties
- mol = molecule ID used to define body in :doc:`fix rigid/small <fix_rigid>` command
- mass = total mass of body
- x,y,z = center of mass coords of body
- xu,yu,zu = unwrapped center of mass coords of body
- ix,iy,iz = box image that the center of mass is in
- vx,vy,vz = center of mass velocities
- fx,fy,fz = force of center of mass
- omegax,omegay,omegaz = angular velocity of body
- angmomx,angmomy,angmomz = angular momentum of body
- quatw,quati,quatj,quatk = quaternion components for body
- tqx,tqy,tqz = torque on body
- inertiax,inertiay,inertiaz = diagonalized moments of inertia of body
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all rigid/local myRigid mol x y z
-
-Description
-"""""""""""
-
-Define a computation that simply stores rigid body attributes for
-rigid bodies defined by the :doc:`fix rigid/small <fix_rigid>` command
-or one of its NVE, NVT, NPT, NPH variants. The data is stored as
-local data so it can be accessed by other :ref:`output commands <howto_15>` that process local data, such as
-the :doc:`compute reduce <compute_reduce>` or :doc:`dump local <dump>`
-commands.
-
-Note that this command only works with the :doc:`fix rigid/small <fix_rigid>` command or its variants, not the fix rigid
-command and its variants. The ID of the :doc:`fix rigid/small <fix_rigid>` command used to define rigid bodies must
-be specified as *rigidID*\ . The :doc:`fix rigid <fix_rigid>` command is
-typically used to define a handful of (potentially very large) rigid
-bodies. It outputs similar per-body information as this command
-directly from the fix as global data; see the :doc:`fix rigid <fix_rigid>` doc page for details
-
-The local data stored by this command is generated by looping over all
-the atoms owned on a processor. If the atom is not in the specified
-*group-ID* or is not part of a rigid body it is skipped. If it is not
-the atom within a body that is assigned to store the body information
-it is skipped (only one atom per body is so assigned). If it is the
-assigned atom, then the info for that body is output. This means that
-information for N bodies is generated. N may be less than the # of
-bodies defined by the fix rigid command, if the atoms in some bodies
-are not in the *group-ID*\ .
-
-.. note::
-
- Which atom in a body owns the body info is determined internal
- to LAMMPS; it's the one nearest the geometric center of the body.
- Typically you should avoid this complication, by defining the group
- associated with this fix to include/exclude entire bodies.
-
-Note that as atoms and bodies migrate from processor to processor,
-there will be no consistent ordering of the entries within the local
-vector or array from one timestep to the next.
-
-Here is an example of how to use this compute to dump rigid body info
-to a file:
-
-.. parsed-literal::
-
- compute 1 all rigid/local myRigid mol x y z fx fy fz
- dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_1[3] c_1[4] c_1[5] c_1[6] c_1[7]
-
-
-----------
-
-
-This section explains the rigid body attributes that can be specified.
-
-The *id* attribute is the atomID of the atom which owns the rigid body, which is
-assigned by the :doc:`fix rigid/small <fix_rigid>` command.
-
-The *mol* attribute is the molecule ID of the rigid body. It should
-be the molecule ID which all of the atoms in the body belong to, since
-that is how the :doc:`fix rigid/small <fix_rigid>` command defines its
-rigid bodies.
-
-The *mass* attribute is the total mass of the rigid body.
-
-There are two options for outputting the coordinates of the center of
-mass (COM) of the body. The *x*\ , *y*\ , *z* attributes write the COM
-"unscaled", in the appropriate distance :doc:`units <units>` (Angstroms,
-sigma, etc). Use *xu*\ , *yu*\ , *zu* if you want the COM "unwrapped" by
-the image flags for each atobody. Unwrapped means that if the body
-COM has passed thru a periodic boundary one or more times, the value
-is generated what the COM coordinate would be if it had not been
-wrapped back into the periodic box.
-
-The image flags for the body can be generated directly using the *ix*\ ,
-*iy*\ , *iz* attributes. For periodic dimensions, they specify which
-image of the simulation box the COM is considered to be in. An image
-of 0 means it is inside the box as defined. A value of 2 means add 2
-box lengths to get the true value. A value of -1 means subtract 1 box
-length to get the true value. LAMMPS updates these flags as the rigid
-body COMs cross periodic boundaries during the simulation.
-
-The *vx*\ , *vy*\ , *vz*\ , *fx*\ , *fy*\ , *fz* attributes are components of
-the COM velocity and force on the COM of the body.
-
-The *omegax*\ , *omegay*\ , and *omegaz* attributes are the angular
-velocity componennts of the body around its COM.
-
-The *angmomx*\ , *angmomy*\ , and *angmomz* attributes are the angular
-momentum components of the body around its COM.
-
-The *quatw*\ , *quati*\ , *quatj*\ , and *quatk* attributes are the
-components of the 4-vector quaternion representing the orientation of
-the rigid body. See the :doc:`set <set>` command for an explanation of
-the quaternion vector.
-
-The *angmomx*\ , *angmomy*\ , and *angmomz* attributes are the angular
-momentum components of the body around its COM.
-
-The *tqx*\ , *tqy*\ , *tqz* attributes are components of the torque acting
-on the body around its COM.
-
-The *inertiax*\ , *inertiay*\ , *inertiaz* attributes are components of
-diagonalized inertia tensor for the body, i.e the 3 moments of inertia
-for the body around its principal axes, as computed internally by
-LAMMPS.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a local vector or local array depending on the
-number of keywords. The length of the vector or number of rows in the
-array is the number of rigid bodies. If a single keyword is
-specified, a local vector is produced. If two or more keywords are
-specified, a local array is produced where the number of columns = the
-number of keywords. The vector or array can be accessed by any
-command that uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector or array values will be in whatever :doc:`units <units>` the
-corresponding attribute is in:
-
-* id,mol = unitless
-* mass = mass units
-* x,y,z and xy,yu,zu = distance units
-* vx,vy,vz = velocity units
-* fx,fy,fz = force units
-* omegax,omegay,omegaz = radians/time units
-* angmomx,angmomy,angmomz = mass*distance^2/time units
-* quatw,quati,quatj,quatk = unitless
-* tqx,tqy,tqz = torque units
-* inertiax,inertiay,inertiaz = mass*distance^2 units
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the RIGID package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump local <dump>`, :doc:`compute reduce <compute_reduce>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_saed.txt b/doc/html/_sources/compute_saed.txt
deleted file mode 100644
index a0ceacbe6..000000000
--- a/doc/html/_sources/compute_saed.txt
+++ /dev/null
@@ -1,211 +0,0 @@
-.. index:: compute saed
-
-compute saed command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID saed lambda type1 type2 ... typeN keyword value ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* saed = style name of this compute command
-* lambda = wavelength of incident radiation (length units)
-* type1 type2 ... typeN = chemical symbol of each atom type (see valid options below)
-* zero or more keyword/value pairs may be appended
-* keyword = *Kmax* or *Zone* or *dR_Ewald* or *c* or *manual* or *echo*
-.. parsed-literal::
-
- *Kmax* value = Maximum distance explored from reciprocal space origin
- (inverse length units)
- *Zone* values = z1 z2 z3
- z1,z2,z3 = Zone axis of incident radiation. If z1=z2=z3=0 all
- reciprocal space will be meshed up to *Kmax*
- *dR_Ewald* value = Thickness of Ewald sphere slice intercepting
- reciprocal space (inverse length units)
- *c* values = c1 c2 c3
- c1,c2,c3 = parameters to adjust the spacing of the reciprocal
- lattice nodes in the h, k, and l directions respectively
- *manual* = flag to use manual spacing of reciprocal lattice points
- based on the values of the *c* parameters
- *echo* = flag to provide extra output for debugging purposes
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all saed 0.0251 Al O Kmax 1.70 Zone 0 0 1 dR_Ewald 0.01 c 0.5 0.5 0.5
- compute 2 all saed 0.0251 Ni Kmax 1.70 Zone 0 0 0 c 0.05 0.05 0.05 manual echo
-
-.. parsed-literal::
-
- fix saed/vtk 1 1 1 c_1 file Al2O3_001.saed
- fix saed/vtk 1 1 1 c_2 file Ni_000.saed
-
-Description
-"""""""""""
-
-Define a computation that calculates electron diffraction intensity as
-described in :ref:`(Coleman) <saed-Coleman>` on a mesh of reciprocal lattice nodes
-defined by the entire simulation domain (or manually) using simulated
-radiation of wavelength lambda.
-
-The electron diffraction intensity I at each reciprocal lattice point
-is computed from the structure factor F using the equations:
-
-.. image:: Eqs/compute_saed1.jpg
- :align: center
-
-.. image:: Eqs/compute_saed2.jpg
- :align: center
-
-Here, K is the location of the reciprocal lattice node, rj is the
-position of each atom, fj are atomic scattering factors.
-
-Diffraction intensities are calculated on a three-dimensional mesh of
-reciprocal lattice nodes. The mesh spacing is defined either (a) by
-the entire simulation domain or (b) manually using selected values as
-shown in the 2D diagram below.
-
-.. thumbnail:: JPG/saed_mesh.jpg
- :align: center
-
-For a mesh defined by the simulation domain, a rectilinear grid is
-constructed with spacing *c*\ *inv(A) along each reciprocal lattice
-axis. Where A are the vectors corresponding to the edges of the
-simulation cell. If one or two directions has non-periodic boundary
-conditions, then the spacing in these directions is defined from the
-average of the (inversed) box lengths with periodic boundary conditions.
-Meshes defined by the simulation domain must contain at least one periodic
-boundary.
-
-If the *manual* flag is included, the mesh of reciprocal lattice nodes
-will defined using the *c* values for the spacing along each reciprocal
-lattice axis. Note that manual mapping of the reciprocal space mesh is
-good for comparing diffraction results from multiple simulations; however
-it can reduce the likelihood that Bragg reflections will be satisfied
-unless small spacing parameters <0.05 Angstrom^(-1) are implemented.
-Meshes with manual spacing do not require a periodic boundary.
-
-The limits of the reciprocal lattice mesh are determined by the use of
-the *Kmax*\ , *Zone*\ , and *dR_Ewald* parameters. The rectilinear mesh
-created about the origin of reciprocal space is terminated at the
-boundary of a sphere of radius *Kmax* centered at the origin. If
-*Zone* parameters z1=z2=z3=0 are used, diffraction intensities are
-computed throughout the entire spherical volume - note this can
-greatly increase the cost of computation. Otherwise, *Zone*
-parameters will denote the z1=h, z2=k, and z3=l (in a global since)
-zone axis of an intersecting Ewald sphere. Diffraction intensities
-will only be computed at the intersection of the reciprocal lattice
-mesh and a *dR_Ewald* thick surface of the Ewald sphere. See the
-example 3D intestiety data and the intersection of a [010] zone axis
-in the below image.
-
-.. thumbnail:: JPG/saed_ewald_intersect.jpg
- :align: center
-
-The atomic scattering factors, fj, accounts for the reduction in
-diffraction intensity due to Compton scattering. Compute saed uses
-analytical approximations of the atomic scattering factors that vary
-for each atom type (type1 type2 ... typeN) and angle of diffraction.
-The analytic approximation is computed using the formula
-:ref:`(Brown) <Brown>`:
-
-.. image:: Eqs/compute_saed3.jpg
- :align: center
-
-Coefficients parameterized by :ref:`(Fox) <Fox>` are assigned for each
-atom type designating the chemical symbol and charge of each atom
-type. Valid chemical symbols for compute saed are:
-
-H: He: Li: Be: B:
- C: N: O: F: Ne:
- Na: Mg: Al: Si: P:
- S: Cl: Ar: K: Ca:
- Sc: Ti: V: Cr: Mn:
- Fe: Co: Ni: Cu: Zn:
- Ga: Ge: As: Se: Br:
- Kr: Rb: Sr: Y: Zr:
- Nb: Mo: Tc: Ru: Rh:
- Pd: Ag: Cd: In: Sn:
- Sb: Te: I: Xe: Cs:
- Ba: La: Ce: Pr: Nd:
- Pm: Sm: Eu: Gd: Tb:
- Dy: Ho: Er: Tm: Yb:
- Lu: Hf: Ta: W: Re:
- Os: Ir: Pt: Au: Hg:
- Tl: Pb: Bi: Po: At:
- Rn: Fr: Ra: Ac: Th:
- Pa: U: Np: Pu: Am:
- Cm: Bk: Cf:tb(c=5,s=:)
-
-If the *echo* keyword is specified, compute saed will provide extra
-reporting information to the screen.
-
-**Output info:**
-
-This compute calculates a global vector. The length of the vector is
-the number of reciprocal lattice nodes that are explored by the mesh.
-The entries of the global vector are the computed diffraction
-intensities as described above.
-
-The vector can be accessed by any command that uses global values
-from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-All array values calculated by this compute are "intensive".
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-DIFFRACTION package. It is only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The compute_saed command does not work for triclinic cells.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix saed_vtk <fix_saed_vtk>`, :doc:`compute xrd <compute_xrd>`
-
-Default
-"""""""
-
-The option defaults are Kmax = 1.70, Zone 1 0 0, c 1 1 1, dR_Ewald =
-0.01.
-
-
-----------
-
-
-.. _saed-Coleman:
-
-
-
-**(Coleman)** Coleman, Spearot, Capolungo, MSMSE, 21, 055020
-(2013).
-
-.. _Brown:
-
-
-
-**(Brown)** Brown et al. International Tables for Crystallography
-Volume C: Mathematical and Chemical Tables, 554-95 (2004).
-
-.. _Fox:
-
-
-
-**(Fox)** Fox, O'Keefe, Tabbernor, Acta Crystallogr. A, 45, 786-93
-(1989).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_slice.txt b/doc/html/_sources/compute_slice.txt
deleted file mode 100644
index f1a4b0a81..000000000
--- a/doc/html/_sources/compute_slice.txt
+++ /dev/null
@@ -1,134 +0,0 @@
-.. index:: compute slice
-
-compute slice command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID slice Nstart Nstop Nskip input1 input2 ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* slice = style name of this compute command
-* Nstart = starting index within input vector(s)
-* Nstop = stopping index within input vector(s)
-* Nskip = extract every Nskip elements from input vector(s)
-* input = c_ID, c_ID[N], f_ID, f_ID[N]
-.. parsed-literal::
-
- c_ID = global vector calculated by a compute with ID
- c_ID[I] = Ith column of global array calculated by a compute with ID
- f_ID = global vector calculated by a fix with ID
- f_ID[I] = Ith column of global array calculated by a fix with ID
- v_name = vector calculated by an vector-style variable with name
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all slice 1 100 10 c_msdmol[4]
- compute 1 all slice 301 400 1 c_msdmol[4] v_myVec
-
-Description
-"""""""""""
-
-Define a calculation that "slices" one or more vector inputs into
-smaller vectors, one per listed input. The inputs can be global
-quantities; they cannot be per-atom or local quantities.
-:doc:`Computes <compute>` and :doc:`fixes <fix>` and vector-style
-:doc:`variables <variable>` can generate such global quantities. The
-group specified with this command is ignored.
-
-The values extracted from the input vector(s) are determined by the
-*Nstart*\ , *Nstop*\ , and *Nskip* parameters. The elements of an input
-vector of length N are indexed from 1 to N. Starting at element
-*Nstart*\ , every Mth element is extracted, where M = *Nskip*\ , until
-element *Nstop* is reached. The extracted quantities are stored as a
-vector, which is typically shorter than the input vector.
-
-Each listed input is operated on independently to produce one output
-vector. Each listed input must be a global vector or column of a
-global array calculated by another :doc:`compute <compute>` or
-:doc:`fix <fix>`.
-
-If an input value begins with "c_", a compute ID must follow which has
-been previously defined in the input script and which generates a
-global vector or array. See the individual :doc:`compute <compute>` doc
-page for details. If no bracketed integer is appended, the vector
-calculated by the compute is used. If a bracketed integer is
-appended, the Ith column of the array calculated by the compute is
-used. Users can also write code for their own compute styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If a value begins with "f_", a fix ID must follow which has been
-previously defined in the input script and which generates a global
-vector or array. See the individual :doc:`fix <fix>` doc page for
-details. Note that some fixes only produce their values on certain
-timesteps, which must be compatible with when compute slice references
-the values, else an error results. If no bracketed integer is
-appended, the vector calculated by the fix is used. If a bracketed
-integer is appended, the Ith column of the array calculated by the fix
-is used. Users can also write code for their own fix style and :doc:`add them to LAMMPS <Section_modify>`.
-
-If an input value begins with "v_", a variable name must follow which
-has been previously defined in the input script. Only vector-style
-variables can be referenced. See the :doc:`variable <variable>` command
-for details. Note that variables of style *vector* define a formula
-which can reference individual atom properties or thermodynamic
-keywords, or they can invoke other computes, fixes, or variables when
-they are evaluated, so this is a very general means of specifying
-quantities to slice.
-
-If a single input is specified this compute produces a global vector,
-even if the length of the vector is 1. If multiple inputs are
-specified, then a global array of values is produced, with the number
-of columns equal to the number of inputs specified.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global vector if a single input value is
-specified or a global array with N columns where N is the number of
-inputs. The length of the vector or the number of rows in the array
-is equal to the number of values extracted from each input vector.
-These values can be used by any command that uses global vector or
-array values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector or array values calculated by this compute are simply
-copies of values generated by computes or fixes or variables that are
-input vectors to this compute. If there is a single input vector of
-intensive and/or extensive values, then each value in the vector of
-values calculated by this compute will be "intensive" or "extensive",
-depending on the corresponding input value. If there are multiple
-input vectors, and all the values in them are intensive, then the
-array values calculated by this compute are "intensive". If there are
-multiple input vectors, and any value in them is extensive, then the
-array values calculated by this compute are "extensive". Values
-produced by a variable are treated as intensive.
-
-The vector or array values will be in whatever :doc:`units <units>` the
-input quantities are in.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute <compute>`, :doc:`fix <fix>`, :doc:`compute reduce <compute_reduce>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_contact_radius.txt b/doc/html/_sources/compute_smd_contact_radius.txt
deleted file mode 100644
index ff888621e..000000000
--- a/doc/html/_sources/compute_smd_contact_radius.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-.. index:: compute smd/contact/radius
-
-compute smd/contact/radius command
-==================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/contact/radius
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/contact/radius = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/contact/radius
-
-Description
-"""""""""""
-
-Define a computation which outputs the contact radius, i.e., the
-radius used to prevent particles from penetrating each other. The
-contact radius is used only to prevent particles belonging to
-different physical bodies from penetrating each other. It is used by
-the contact pair styles, e.g., smd/hertz and smd/tri_surface.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-The value of the contact radius will be 0.0 for particles not in the
-specified compute group.
-
-**Output info:**
-
-This compute calculates a per-particle vector, which can be accessed by
-any command that uses per-particle values from a compute as input. See
-:ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-particle vector values will be in distance :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump custom <dump>` smd/hertz smd/tri_surface
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_damage.txt b/doc/html/_sources/compute_smd_damage.txt
deleted file mode 100644
index 074485810..000000000
--- a/doc/html/_sources/compute_smd_damage.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-.. index:: compute smd/damage
-
-compute smd/damage command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/damage
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/damage = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/damage
-
-Description
-"""""""""""
-
-Define a computation that calculates the damage status of SPH particles
-according to the damage model which is defined via the SMD SPH pair styles, e.g., the maximum plastic strain failure criterion.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to use Smooth Mach Dynamics in LAMMPS.
-
-**Output Info:**
-
-This compute calculates a per-particle vector, which can be accessed by
-any command that uses per-particle values from a compute as input. See
-:ref:`How-to discussions, section 6.15 <howto_15>`
-for an overview of LAMMPS output options.
-
-The per-particle values are dimensionless an in the range of zero to one.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/plastic_strain <compute_smd_plastic_strain>`, :doc:`smd/tlsph_stress <compute_smd_tlsph_stress>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_hourglass_error.txt b/doc/html/_sources/compute_smd_hourglass_error.txt
deleted file mode 100644
index 34cd46606..000000000
--- a/doc/html/_sources/compute_smd_hourglass_error.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-.. index:: compute smd/hourglass/error
-
-compute smd/hourglass/error command
-===================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/hourglass/error
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/hourglass/error = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/hourglass/error
-
-Description
-"""""""""""
-
-Define a computation which outputs the error of the approximated
-relative separation with respect to the actual relative separation of
-the particles i and j. Ideally, if the deformation gradient is exact,
-and there exists a unique mapping between all particles' positions
-within the neighborhood of the central node and the deformation
-gradient, the approximated relative separation will coincide with the
-actual relative separation of the particles i and j in the deformed
-configuration. This compute is only really useful for debugging the
-hourglass control mechanim which is part of the Total-Lagrangian SPH
-pair style.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to use Smooth
-Mach Dynamics in LAMMPS.
-
-**Output Info:**
-
-This compute calculates a per-particle vector, which can be accessed by
-any command that uses per-particle values from a compute as input. See
-:ref:`How-to discussions, section 6.15 <howto_15>`
-for an overview of LAMMPS output options.
-
-The per-particle vector values will are dimensionless. See
-:doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This quantity will be computed only for particles which interact with
-tlsph pair style.
-
-**Related Commands:**
-
-:doc:`smd/tlsph_defgrad <compute_smd_tlsph_defgrad>`
-
-Default
-"""""""
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_internal_energy.txt b/doc/html/_sources/compute_smd_internal_energy.txt
deleted file mode 100644
index 075adc72b..000000000
--- a/doc/html/_sources/compute_smd_internal_energy.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-.. index:: compute smd/internal/energy
-
-compute smd/internal/energy command
-===================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/internal/energy
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/smd/internal/energy = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/internal/energy
-
-Description
-"""""""""""
-
-Define a computation which outputs the per-particle enthalpy, i.e.,
-the sum of potential energy and heat.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to use Smooth
-Mach Dynamics in LAMMPS.
-
-**Output Info:**
-
-This compute calculates a per-particle vector, which can be accessed
-by any command that uses per-particle values from a compute as input.
-See :ref:`How-to discussions, section 6.15 <howto_15>` for
-an overview of LAMMPS output options.
-
-The per-particle vector values will be given in :doc:`units <units>` of energy.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. This compute
-can only be used for particles which interact via the updated
-Lagrangian or total Lagrangian SPH pair styles.
-
-**Related Commands:**
-
-Default
-"""""""
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_plastic_strain.txt b/doc/html/_sources/compute_smd_plastic_strain.txt
deleted file mode 100644
index f666f62ae..000000000
--- a/doc/html/_sources/compute_smd_plastic_strain.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-.. index:: compute smd/plastic/strain
-
-compute smd/plastic/strain command
-==================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/plastic/strain
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/plastic/strain = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/plastic/strain
-
-Description
-"""""""""""
-
-Define a computation that outputs the equivalent plastic strain per
-particle. This command is only meaningful if a material model with
-plasticity is defined.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to use Smooth
-Mach Dynamics in LAMMPS.
-
-**Output Info:**
-
-This compute calculates a per-particle vector, which can be accessed
-by any command that uses per-particle values from a compute as input.
-See :ref:`How-to discussions, section 6.15 <howto_15>` for
-an overview of LAMMPS output options.
-
-The per-particle values will be given dimensionless. See :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. This compute
-can only be used for particles which interact via the updated
-Lagrangian or total Lagrangian SPH pair styles.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/plastic/strain/rate <compute_smd_tlsph_strain>`,
-:doc:`smd/tlsph/strain/rate <compute_smd_tlsph_strain_rate>`,
-:doc:`smd/tlsph/strain <compute_smd_tlsph_strain>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_plastic_strain_rate.txt b/doc/html/_sources/compute_smd_plastic_strain_rate.txt
deleted file mode 100644
index 71b708b19..000000000
--- a/doc/html/_sources/compute_smd_plastic_strain_rate.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-.. index:: compute smd/plastic/strain/rate
-
-compute smd/plastic/strain/rate command
-=======================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/plastic/strain/rate
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/plastic/strain/rate = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/plastic/strain/rate
-
-Description
-"""""""""""
-
-Define a computation that outputs the time rate of the equivalent
-plastic strain. This command is only meaningful if a material model
-with plasticity is defined.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to use Smooth
-Mach Dynamics in LAMMPS.
-
-**Output Info:**
-
-This compute calculates a per-particle vector, which can be accessed
-by any command that uses per-particle values from a compute as input.
-See :ref:`How-to discussions, section 6.15 <howto_15>` for
-an overview of LAMMPS output options.
-
-The per-particle values will be given in :doc:`units <units>` of one over time.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. This compute
-can only be used for particles which interact via the updated
-Lagrangian or total Lagrangian SPH pair styles.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/plastic/strain <compute_smd_plastic_strain>`,
-:doc:`smd/tlsph/strain/rate <compute_smd_tlsph_strain_rate>`,
-:doc:`smd/tlsph/strain <compute_smd_tlsph_strain>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_rho.txt b/doc/html/_sources/compute_smd_rho.txt
deleted file mode 100644
index f25398376..000000000
--- a/doc/html/_sources/compute_smd_rho.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-.. index:: compute smd/rho
-
-compute smd/rho command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/rho
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/rho = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/rho
-
-Description
-"""""""""""
-
-Define a computation that calculates the per-particle mass density.
-The mass density is the mass of a particle which is constant during
-the course of a simulation, divided by its volume, which can change
-due to mechanical deformation.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to use Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute calculates a per-particle vector, which can be accessed
-by any command that uses per-particle values from a compute as input.
-See :ref:`How-to discussions, section 6.15 <howto_15>` for
-an overview of LAMMPS output options.
-
-The per-particle values will be in :doc:`units <units>` of mass over volume.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute smd/vol <compute_smd_vol>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_tlsph_defgrad.txt b/doc/html/_sources/compute_smd_tlsph_defgrad.txt
deleted file mode 100644
index 33501df12..000000000
--- a/doc/html/_sources/compute_smd_tlsph_defgrad.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-.. index:: compute smd/tlsph/defgrad
-
-compute smd/tlsph/defgrad command
-=================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/tlsph/defgrad
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/tlsph/defgrad = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/tlsph/defgrad
-
-Description
-"""""""""""
-
-Define a computation that calculates the deformation gradient. It is
-only meaningful for particles which interact according to the
-Total-Lagrangian SPH pair style.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to use Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute outputss a per-particle vector of vectors (tensors),
-which can be accessed by any command that uses per-particle values
-from a compute as input. See :ref:`How-to discussions, section 6.15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The per-particle vector values will be given dimensionless. See
-:doc:`units <units>`. The per-particle vector has 10 entries. The first
-nine entries correspond to the xx, xy, xz, yx, yy, yz, zx, zy, zz
-components of the asymmetric deformation gradient tensor. The tenth
-entry is the determinant of the deformation gradient.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. TThis
-compute can only be used for particles which interact via the total
-Lagrangian SPH pair style.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/hourglass/error <compute_smd_hourglass_error>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_tlsph_dt.txt b/doc/html/_sources/compute_smd_tlsph_dt.txt
deleted file mode 100644
index e8e406981..000000000
--- a/doc/html/_sources/compute_smd_tlsph_dt.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-.. index:: compute smd/tlsph/dt
-
-compute smd/tlsph/dt command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/tlsph/dt
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/tlsph/dt = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/tlsph/dt
-
-Description
-"""""""""""
-
-Define a computation that outputs the CFL-stable time increment per
-particle. This time increment is essentially given by the speed of
-sound, divided by the SPH smoothing length. Because both the speed of
-sound and the smoothing length typically change during the course of a
-simulation, the stable time increment needs to be recomputed every
-time step. This calculation is performed automatically in the
-relevant SPH pair styles and this compute only serves to make the
-stable time increment accessible for output purposes.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute calculates a per-particle vector, which can be accessed
-by any command that uses per-particle values from a compute as input.
-See :ref:`How-to discussions, section 6.15 <howto_15>` for
-an overview of LAMMPS output options.
-
-The per-particle values will be given in :doc:`units <units>` of time.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This compute can only be used for particles interacting with the
-Total-Lagrangian SPH pair style.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/adjust/dt <fix_smd_adjust_dt>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_tlsph_num_neighs.txt b/doc/html/_sources/compute_smd_tlsph_num_neighs.txt
deleted file mode 100644
index 78fb76475..000000000
--- a/doc/html/_sources/compute_smd_tlsph_num_neighs.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-.. index:: compute smd/tlsph/num/neighs
-
-compute smd/tlsph/num/neighs command
-====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/tlsph/num/neighs
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/tlsph/num/neighs = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/tlsph/num/neighs
-
-Description
-"""""""""""
-
-Define a computation that calculates the number of particles inside of
-the smoothing kernel radius for particles interacting via the
-Total-Lagrangian SPH pair style.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute calculates a per-particle vector, which can be accessed
-by any command that uses per-particle values from a compute as input.
-See :ref:`How-to discussions, section 6.15 <howto_15>` for
-an overview of LAMMPS output options.
-
-The per-particle values are dimensionless. See :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This quantity will be computed only for particles which interact with
-the Total-Lagrangian pair style.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/ulsph/num/neighs <compute_smd_ulsph_num_neighs>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_tlsph_shape.txt b/doc/html/_sources/compute_smd_tlsph_shape.txt
deleted file mode 100644
index 7067b524c..000000000
--- a/doc/html/_sources/compute_smd_tlsph_shape.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-.. index:: compute smd/tlsph/shape
-
-compute smd/tlsph/shape command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/tlsph/shape
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/tlsph/shape = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/tlsph/shape
-
-Description
-"""""""""""
-
-Define a computation that outputs the current shape of the volume
-associated with a particle as a rotated ellipsoid. It is only
-meaningful for particles which interact according to the
-Total-Lagrangian SPH pair style.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to use Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute calculates a per-particle vector of vectors, which can be
-accessed by any command that uses per-particle values from a compute
-as input. See :ref:`How-to discussions, section 6.15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The per-particle vector has 7 entries. The first three entries
-correspond to the lengths of the ellipsoid's axes and have units of
-length. These axis valus are computed as the contact radius times the
-xx, yy, or zz components of the Green-Lagrange strain tensor
-associated with the particle. The next 4 values are quaternions
-(order: q, x, y, z) which describe the spatial rotation of the
-particle relative to its initial state.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This quantity will be computed only for particles which interact with
-the Total-Lagrangian SPH pair style.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/contact/radius <compute_smd_contact_radius>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_tlsph_strain.txt b/doc/html/_sources/compute_smd_tlsph_strain.txt
deleted file mode 100644
index 7e92bae14..000000000
--- a/doc/html/_sources/compute_smd_tlsph_strain.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-.. index:: compute smd/tlsph/strain
-
-compute smd/tlsph/strain command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/tlsph/strain
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/tlsph/strain = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/tlsph/strain
-
-Description
-"""""""""""
-
-Define a computation that calculates the Green-Lagrange strain tensor
-for particles interacting via the Total-Lagrangian SPH pair style.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute calculates a per-particle vector of vectors (tensors),
-which can be accessed by any command that uses per-particle values
-from a compute as input. See :ref:`How-to discussions, section 6.15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The per-particle tensor values will be given dimensionless. See
-:doc:`units <units>`.
-
-The per-particle vector has 6 entries, corresponding to the xx, yy,
-zz, xy, xz, yz components of the symmetric strain tensor.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This quantity will be computed only for particles which interact with
-the Total-Lagrangian SPH pair style.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/tlsph/strain/rate <compute_smd_tlsph_strain_rate>`,
-:doc:`smd/tlsph/stress <compute_smd_tlsph_stress>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_tlsph_strain_rate.txt b/doc/html/_sources/compute_smd_tlsph_strain_rate.txt
deleted file mode 100644
index fc2731c83..000000000
--- a/doc/html/_sources/compute_smd_tlsph_strain_rate.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-.. index:: compute smd/tlsph/strain/rate
-
-compute smd/tlsph/strain/rate command
-=====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/tlsph/strain/rate
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/tlsph/strain/rate = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/tlsph/strain/rate
-
-Description
-"""""""""""
-
-Define a computation that calculates the rate of the strain tensor for
-particles interacting via the Total-Lagrangian SPH pair style.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute calculates a per-particle vector of vectors (tensors),
-which can be accessed by any command that uses per-particle values
-from a compute as input. See :ref:`How-to discussions, section 6.15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The values will be given in :doc:`units <units>` of one over time.
-
-The per-particle vector has 6 entries, corresponding to the xx, yy,
-zz, xy, xz, yz components of the symmetric strain rate tensor.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This quantity will be computed only for particles which interact with
-Total-Lagrangian SPH pair style.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute smd/tlsph/strain <compute_smd_tlsph_strain>`, :doc:`compute smd/tlsph/stress <compute_smd_tlsph_stress>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_tlsph_stress.txt b/doc/html/_sources/compute_smd_tlsph_stress.txt
deleted file mode 100644
index a155b3a64..000000000
--- a/doc/html/_sources/compute_smd_tlsph_stress.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-.. index:: compute smd/tlsph/stress
-
-compute smd/tlsph/stress command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/tlsph/stress
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/tlsph/stress = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/tlsph/stress
-
-Description
-"""""""""""
-
-Define a computation that outputs the Cauchy stress tensor for
-particles interacting via the Total-Lagrangian SPH pair style.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute calculates a per-particle vector of vectors (tensors), which can be
-accessed by any command that uses per-particle values from a compute
-as input. See
-:ref:`How-to discussions, section 6.15 <howto_15>`
-for an overview of LAMMPS output options.
-
-The values will be given in :doc:`units <units>` of pressure.
-
-The per-particle vector has 7 entries. The first six entries
-correspond to the xx, yy, zz, xy, xz and yz components of the
-symmetric Cauchy stress tensor. The seventh entry is the second
-invariant of the stress tensor, i.e., the von Mises equivalent stress.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This quantity will be computed only for particles which interact with
-the Total-Lagrangian SPH pair style.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute smd/tlsph/strain <compute_smd_tlsph_strain>`, :doc:`cmopute smd/tlsph/strain/rate <compute_smd_tlsph_strain_rate>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_triangle_mesh_vertices.txt b/doc/html/_sources/compute_smd_triangle_mesh_vertices.txt
deleted file mode 100644
index 5c0200985..000000000
--- a/doc/html/_sources/compute_smd_triangle_mesh_vertices.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-compute smd/triangle/mesh/vertices
-==================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/triangle/mesh/vertices
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/triangle/mesh/vertices = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/triangle/mesh/vertices
-
-Description
-"""""""""""
-
-Define a computation that returns the coordinates of the vertices
-corresponding to the triangle-elements of a mesh created by the `fix smd/wall_surface <ls_>`_.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute returns a per-particle vector of vectors, which can be
-accessed by any command that uses per-particle values from a compute as
-input. See :ref:`How-to discussions, section 6.15 <howto_15>`
-for an overview of LAMMPS output options.
-
-The per-particle vector has nine entries, (x1/y1/z1), (x2/y2/z2), and
-(x3/y3/z3) corresponding to the first, second, and third vertex of
-each triangle.
-
-It is only meaningful to use this compute for a group of particles
-which is created via the `fix smd/wall_surface <ls_>`_ command.
-
-The output of this compute can be used with the dump2vtk_tris tool to
-generate a VTK representation of the smd/wall_surace mesh for
-visualization purposes.
-
-The values will be given in :doc:`units <units>` of distance.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute smd/move/tri/surf <fix_smd_move_triangulated_surface>`,
-`compute smd/wall/surface <ls_>`_
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_ulsph_num_neighs.txt b/doc/html/_sources/compute_smd_ulsph_num_neighs.txt
deleted file mode 100644
index 90c7a202d..000000000
--- a/doc/html/_sources/compute_smd_ulsph_num_neighs.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-.. index:: compute smd/ulsph/num/neighs
-
-compute smd/ulsph/num/neighs command
-====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/ulsph/num/neighs
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/ulsph/num/neighs = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/ulsph/num/neighs
-
-Description
-"""""""""""
-
-Define a computation that returns the number of neighbor particles
-inside of the smoothing kernel radius for particles interacting via
-the updated Lagrangian SPH pair style.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute returns a per-particle vector, which can be accessed by
-any command that uses per-particle values from a compute as input.
-See :ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-particle values will be given dimentionless, see :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_2>` section for more info. This compute
-can only be used for particles which interact with the updated
-Lagrangian SPH pair style.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute smd/tlsph/num/neighs <compute_smd_tlsph_num_neighs>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_ulsph_strain.txt b/doc/html/_sources/compute_smd_ulsph_strain.txt
deleted file mode 100644
index 1c8ec914e..000000000
--- a/doc/html/_sources/compute_smd_ulsph_strain.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-.. index:: compute smd/ulsph/strain
-
-compute smd/ulsph/strain command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/ulsph/strain
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/ulsph/strain = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/ulsph/strain
-
-Description
-"""""""""""
-
-Define a computation that outputs the logarithmic strain tensor. for
-particles interacting via the updated Lagrangian SPH pair style.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute calculates a per-particle tensor, which can be accessed
-by any command that uses per-particle values from a compute as input.
-See :ref:`Section_howto 15 <howto_15>` for an overview of
-LAMMPS output options.
-
-The per-particle vector has 6 entries, corresponding to the xx, yy,
-zz, xy, xz, yz components of the symmetric strain rate tensor.
-
-The per-particle tensor values will be given dimensionless, see
-:doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. This compute
-can only be used for particles which interact with the updated
-Lagrangian SPH pair style.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute smd/tlsph/strain <compute_smd_tlsph_strain>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_ulsph_strain_rate.txt b/doc/html/_sources/compute_smd_ulsph_strain_rate.txt
deleted file mode 100644
index 7308385bc..000000000
--- a/doc/html/_sources/compute_smd_ulsph_strain_rate.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-.. index:: compute smd/ulsph/strain/rate
-
-compute smd/ulsph/strain/rate command
-=====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/ulsph/strain/rate
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/ulsph/strain/rate = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/ulsph/strain/rate
-
-Description
-"""""""""""
-
-Define a computation that outputs the rate of the logarithmic strain
-tensor for particles interacting via the updated Lagrangian SPH pair
-style.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute calculates a per-particle vector of vectors (tensors),
-which can be accessed by any command that uses per-particle values
-from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The values will be given in :doc:`units <units>` of one over time.
-
-The per-particle vector has 6 entries, corresponding to the xx, yy,
-zz, xy, xz, yz components of the symmetric strain rate tensor.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_2>` section for more info. This compute
-can only be used for particles which interact with the updated
-Lagrangian SPH pair style.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute smd/tlsph/strain/rate <compute_smd_tlsph_strain_rate>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_ulsph_stress.txt b/doc/html/_sources/compute_smd_ulsph_stress.txt
deleted file mode 100644
index a3385985f..000000000
--- a/doc/html/_sources/compute_smd_ulsph_stress.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-.. index:: compute smd/ulsph/stress
-
-compute smd/ulsph/stress command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/ulsph/stress
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/ulsph/stress = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/ulsph/stress
-
-Description
-"""""""""""
-
-Define a computation that outputs the Cauchy stress tensor.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute calculates a per-particle vector of vectors (tensors),
-which can be accessed by any command that uses per-particle values
-from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The values will be given in :doc:`units <units>` of pressure.
-
-The per-particle vector has 7 entries. The first six entries
-correspond to the xx, yy, zz, xy, xz, yz components of the symmetric
-Cauchy stress tensor. The seventh entry is the second invariant of the
-stress tensor, i.e., the von Mises equivalent stress.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. This compute
-can only be used for particles which interact with the updated
-Lagrangian SPH pair style.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute smd/ulsph/strain <compute_smd_ulsph_strain>`, :doc:`compute smd/ulsph/strain/rate <compute_smd_ulsph_strain_rate>` :doc:`compute smd/tlsph/stress <compute_smd_tlsph_stress>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_smd_vol.txt b/doc/html/_sources/compute_smd_vol.txt
deleted file mode 100644
index ec2be61e1..000000000
--- a/doc/html/_sources/compute_smd_vol.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-.. index:: compute smd/vol
-
-compute smd/vol command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID smd/vol
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* smd/vol = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all smd/vol
-
-Description
-"""""""""""
-
-Define a computation that provides the per-particle volume and the sum
-of the per-particle volumes of the group for which the fix is defined.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth
-Mach Dynamics in LAMMPS.
-
-**Output info:**
-
-This compute calculates a per-particle vector, which can be accessed
-by any command that uses per-particle values from a compute as input.
-See :ref:`How-to discussions, section 6.15 <howto_15>` for
-an overview of LAMMPS output options.
-
-The per-particle vector values will be given in :doc:`units <units>` of
-volume.
-
-Additionally, the compute returns a scalar, which is the sum of the
-per-particle volumes of the group for which the fix is defined.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute smd/rho <compute_smd_rho>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_sna_atom.txt b/doc/html/_sources/compute_sna_atom.txt
deleted file mode 100644
index da548a0fb..000000000
--- a/doc/html/_sources/compute_sna_atom.txt
+++ /dev/null
@@ -1,281 +0,0 @@
-.. index:: compute sna/atom
-
-compute sna/atom command
-========================
-
-compute snad/atom command
-=========================
-
-compute snav/atom command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID sna/atom rcutfac rfac0 twojmax R_1 R_2 ... w_1 w_2 ... keyword values ...
- compute ID group-ID snad/atom rcutfac rfac0 twojmax R_1 R_2 ... w_1 w_2 ... keyword values ...
- compute ID group-ID snav/atom rcutfac rfac0 twojmax R_1 R_2 ... w_1 w_2 ... keyword values ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* sna/atom = style name of this compute command
-* rcutfac = scale factor applied to all cutoff radii (positive real)
-* rfac0 = parameter in distance to angle conversion (0 < rcutfac < 1)
-* twojmax = band limit for bispectrum components (non-negative integer)
-* R_1, R_2,... = list of cutoff radii, one for each type (distance units)
-* w_1, w_2,... = list of neighbor weights, one for each type
-* zero or more keyword/value pairs may be appended
-* keyword = *diagonal* or *rmin0* or *switchflag*
-.. parsed-literal::
-
- *diagonal* value = *0* or *1* or *2* or *3*
- *0* = all j1, j2, j <= twojmax, j2 <= j1
- *1* = subset satisfying j1 == j2
- *2* = subset satisfying j1 == j2 == j3
- *3* = subset satisfying j2 <= j1 <= j
- *rmin0* value = parameter in distance to angle conversion (distance units)
- *switchflag* value = *0* or *1*
- *0* = do not use switching function
- *1* = use switching function
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute b all sna/atom 1.4 0.99363 6 2.0 2.4 0.75 1.0 diagonal 3 rmin0 0.0
- compute db all sna/atom 1.4 0.95 6 2.0 1.0
- compute vb all sna/atom 1.4 0.95 6 2.0 1.0
-
-Description
-"""""""""""
-
-Define a computation that calculates a set of bispectrum components
-for each atom in a group.
-
-Bispectrum components of an atom are order parameters characterizing
-the radial and angular distribution of neighbor atoms. The detailed
-mathematical definition is given in the paper by Thompson et
-al. :ref:`(Thompson) <Thompson2014>`
-
-The position of a neighbor atom *i'* relative to a central atom *i* is
-a point within the 3D ball of radius *R_ii' = rcutfac*(R_i + R_i')*
-
-Bartok et al. :ref:`(Bartok) <Bartok2010>`, proposed mapping this 3D ball
-onto the 3-sphere, the surface of the unit ball in a four-dimensional
-space. The radial distance *r* within *R_ii'* is mapped on to a third
-polar angle *theta0* defined by,
-
-.. image:: Eqs/compute_sna_atom1.jpg
- :align: center
-
-In this way, all possible neighbor positions are mapped on to a subset
-of the 3-sphere. Points south of the latitude *theta0max=rfac0*Pi*
-are excluded.
-
-The natural basis for functions on the 3-sphere is formed by the 4D
-hyperspherical harmonics *U^j_m,m'(theta, phi, theta0).* These
-functions are better known as *D^j_m,m',* the elements of the Wigner
-*D*\ -matrices :ref:`(Meremianin <Meremianin2006>`,
-:ref:`Varshalovich) <Varshalovich1987>`.
-
-The density of neighbors on the 3-sphere can be written as a sum of
-Dirac-delta functions, one for each neighbor, weighted by species and
-radial distance. Expanding this density function as a generalized
-Fourier series in the basis functions, we can write each Fourier
-coefficient as
-
-.. image:: Eqs/compute_sna_atom2.jpg
- :align: center
-
-The *w_i'* neighbor weights are dimensionless numbers that are chosen
-to distinguish atoms of different types, while the central atom is
-arbitrarily assigned a unit weight. The function *fc(r)* ensures that
-the contribution of each neighbor atom goes smoothly to zero at
-*R_ii'*\ :
-
-.. image:: Eqs/compute_sna_atom4.jpg
- :align: center
-
-The expansion coefficients *u^j_m,m'* are complex-valued and they are
-not directly useful as descriptors, because they are not invariant
-under rotation of the polar coordinate frame. However, the following
-scalar triple products of expansion coefficients can be shown to be
-real-valued and invariant under rotation :ref:`(Bartok) <Bartok2010>`.
-
-.. image:: Eqs/compute_sna_atom3.jpg
- :align: center
-
-The constants *H^jmm'_j1m1m1'_j2m2m2'* are coupling coefficients,
-analogous to Clebsch-Gordan coefficients for rotations on the
-2-sphere. These invariants are the components of the bispectrum and
-these are the quantities calculated by the compute *sna/atom*\ . They
-characterize the strength of density correlations at three points on
-the 3-sphere. The j2=0 subset form the power spectrum, which
-characterizes the correlations of two points. The lowest-order
-components describe the coarsest features of the density function,
-while higher-order components reflect finer detail. Note that the
-central atom is included in the expansion, so three point-correlations
-can be either due to three neighbors, or two neighbors and the central
-atom.
-
-Compute *snad/atom* calculates the derivative of the bispectrum components
-summed separately for each atom type:
-
-.. image:: Eqs/compute_sna_atom5.jpg
- :align: center
-
-The sum is over all atoms *i'* of atom type *I*\ . For each atom *i*\ ,
-this compute evaluates the above expression for each direction, each
-atom type, and each bispectrum component. See section below on output
-for a detailed explanation.
-
-Compute *snav/atom* calculates the virial contribution due to the
-derivatives:
-
-.. image:: Eqs/compute_sna_atom6.jpg
- :align: center
-
-Again, the sum is over all atoms *i'* of atom type *I*\ . For each atom
-*i*\ , this compute evaluates the above expression for each of the six
-virial components, each atom type, and each bispectrum component. See
-section below on output for a detailed explanation.
-
-The value of all bispectrum components will be zero for atoms not in
-the group. Neighbor atoms not in the group do not contribute to the
-bispectrum of atoms in the group.
-
-The neighbor list needed to compute this quantity is constructed each
-time the calculation is performed (i.e. each time a snapshot of atoms
-is dumped). Thus it can be inefficient to compute/dump this quantity
-too frequently.
-
-The argument *rcutfac* is a scale factor that controls the ratio of
-atomic radius to radial cutoff distance.
-
-The argument *rfac0* and the optional keyword *rmin0* define the
-linear mapping from radial distance to polar angle *theta0* on the
-3-sphere.
-
-The argument *twojmax* and the keyword *diagonal* define which
-bispectrum components are generated. See section below on output for a
-detailed explanation of the number of bispectrum components and the
-ordered in which they are listed
-
-The keyword *switchflag* can be used to turn off the switching
-function.
-
-.. note::
-
- If you have a bonded system, then the settings of
- :doc:`special_bonds <special_bonds>` command can remove pairwise
- interactions between atoms in the same bond, angle, or dihedral. This
- is the default setting for the :doc:`special_bonds <special_bonds>`
- command, and means those pairwise interactions do not appear in the
- neighbor list. Because this fix uses the neighbor list, it also means
- those pairs will not be included in the calculation. One way to get
- around this, is to write a dump file, and use the :doc:`rerun <rerun>`
- command to compute the bispectrum components for snapshots in the dump
- file. The rerun script can use a :doc:`special_bonds <special_bonds>`
- command that includes all pairs in the neighbor list.
-
-;line
-
-**Output info:**
-
-Compute *sna/atom* calculates a per-atom array, each column
-corresponding to a particular bispectrum component. The total number
-of columns and the identities of the bispectrum component contained in
-each column depend on the values of *twojmax* and *diagonal*\ , as
-described by the following piece of python code:
-
-.. parsed-literal::
-
- for j1 in range(0,twojmax+1):
- if(diagonal==2):
- print j1/2,j1/2,j1/2
- elif(diagonal==1):
- for j in range(0,min(twojmax,2*j1)+1,2):
- print j1/2,j1/2,j/2
- elif(diagonal==0):
- for j2 in range(0,j1+1):
- for j in range(j1-j2,min(twojmax,j1+j2)+1,2):
- print j1/2,j2/2,j/2
- elif(diagonal==3):
- for j2 in range(0,j1+1):
- for j in range(j1-j2,min(twojmax,j1+j2)+1,2):
- if (j>=j1): print j1/2,j2/2,j/2
-
-Compute *snad/atom* evaluates a per-atom array. The columns are
-arranged into *ntypes* blocks, listed in order of atom type *I*\ . Each
-block contains three sub-blocks corresponding to the *x*\ , *y*\ , and *z*
-components of the atom position. Each of these sub-blocks contains
-one column for each bispectrum component, the same as for compute
-*sna/atom*
-
-Compute *snav/atom* evaluates a per-atom array. The columns are
-arranged into *ntypes* blocks, listed in order of atom type *I*\ . Each
-block contains six sub-blocks corresponding to the *xx*\ , *yy*\ , *zz*\ ,
-*yz*\ , *xz*\ , and *xy* components of the virial tensor in Voigt
-notation. Each of these sub-blocks contains one column for each
-bispectrum component, the same as for compute *sna/atom*
-
-These values can be accessed by any command that uses per-atom values
-from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-Restrictions
-""""""""""""
-
-
-These computes are part of the SNAP package. They are only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style snap <pair_snap>`
-
-Default
-"""""""
-
-The optional keyword defaults are *diagonal* = 0, *rmin0* = 0,
-*switchflag* = 1.
-
-
-----------
-
-
-.. _Thompson2014:
-
-
-
-**(Thompson)** Thompson, Swiler, Trott, Foiles, Tucker, under review, preprint
-available at `arXiv:1409.3880 <http://arxiv.org/abs/1409.3880>`_
-
-.. _Bartok2010:
-
-
-
-**(Bartok)** Bartok, Payne, Risi, Csanyi, Phys Rev Lett, 104, 136403 (2010).
-
-.. _Meremianin2006:
-
-
-
-**(Meremianin)** Meremianin, J. Phys. A, 39, 3099 (2006).
-
-.. _Varshalovich1987:
-
-
-
-**(Varshalovich)** Varshalovich, Moskalev, Khersonskii, Quantum Theory
-of Angular Momentum, World Scientific, Singapore (1987).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_stress_atom.txt b/doc/html/_sources/compute_stress_atom.txt
deleted file mode 100644
index 4e09e814a..000000000
--- a/doc/html/_sources/compute_stress_atom.txt
+++ /dev/null
@@ -1,187 +0,0 @@
-.. index:: compute stress/atom
-
-compute stress/atom command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID stress/atom temp-ID keyword ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* stress/atom = style name of this compute command
-* temp-ID = ID of compute that calculates temperature, can be NULL if not needed
-* zero or more keywords may be appended
-* keyword = *ke* or *pair* or *bond* or *angle* or *dihedral* or *improper* or *kspace* or *fix* or *virial*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 mobile stress/atom NULL
- compute 1 mobile stress/atom myRamp
- compute 1 all stress/atom NULL pair bond
-
-Description
-"""""""""""
-
-Define a computation that computes the symmetric per-atom stress
-tensor for each atom in a group. The tensor for each atom has 6
-components and is stored as a 6-element vector in the following order:
-xx, yy, zz, xy, xz, yz. See the :doc:`compute pressure <compute_pressure>` command if you want the stress tensor
-(pressure) of the entire system.
-
-The stress tensor for atom *I* is given by the following formula,
-where *a* and *b* take on values x,y,z to generate the 6 components of
-the symmetric tensor:
-
-.. image:: Eqs/stress_tensor.jpg
- :align: center
-
-The first term is a kinetic energy contribution for atom *I*\ . See
-details below on how the specified *temp-ID* can affect the velocities
-used in this calculation. The second term is a pairwise energy
-contribution where *n* loops over the *Np* neighbors of atom *I*\ , *r1*
-and *r2* are the positions of the 2 atoms in the pairwise interaction,
-and *F1* and *F2* are the forces on the 2 atoms resulting from the
-pairwise interaction. The third term is a bond contribution of
-similar form for the *Nb* bonds which atom *I* is part of. There are
-similar terms for the *Na* angle, *Nd* dihedral, and *Ni* improper
-interactions atom *I* is part of. There is also a term for the KSpace
-contribution from long-range Coulombic interactions, if defined.
-Finally, there is a term for the *Nf* :doc:`fixes <fix>` that apply
-internal constraint forces to atom *I*\ . Currently, only the :doc:`fix shake <fix_shake>` and :doc:`fix rigid <fix_rigid>` commands
-contribute to this term.
-
-As the coefficients in the formula imply, a virial contribution
-produced by a small set of atoms (e.g. 4 atoms in a dihedral or 3
-atoms in a Tersoff 3-body interaction) is assigned in equal portions
-to each atom in the set. E.g. 1/4 of the dihedral virial to each of
-the 4 atoms, or 1/3 of the fix virial due to SHAKE constraints applied
-to atoms in a a water molecule via the :doc:`fix shake <fix_shake>`
-command.
-
-If no extra keywords are listed, all of the terms in this formula are
-included in the per-atom stress tensor. If any extra keywords are
-listed, only those terms are summed to compute the tensor. The
-*virial* keyword means include all terms except the kinetic energy
-*ke*\ .
-
-Note that the stress for each atom is due to its interaction with all
-other atoms in the simulation, not just with other atoms in the group.
-
-Details of how LAMMPS computes the virial for individual atoms for
-either pairwise or manybody potentials, and including the effects of
-periodic boundary conditions is discussed in :ref:`(Thompson) <Thompson>`.
-The basic idea for manybody potentials is to treat each component of
-the force computation between a small cluster of atoms in the same
-manner as in the formula above for bond, angle, dihedral, etc
-interactions. Namely the quantity R dot F is summed over the atoms in
-the interaction, with the R vectors unwrapped by periodic boundaries
-so that the cluster of atoms is close together. The total
-contribution for the cluster interaction is divided evenly among those
-atoms.
-
-The :doc:`dihedral_style charmm <dihedral_charmm>` style calculates
-pairwise interactions between 1-4 atoms. The virial contribution of
-these terms is included in the pair virial, not the dihedral virial.
-
-The KSpace contribution is calculated using the method in
-:ref:`(Heyes) <Heyes>` for the Ewald method and by the methodology described
-in :ref:`(Sirk) <Sirk>` for PPPM. The choice of KSpace solver is specified
-by the :doc:`kspace_style pppm <kspace_style>` command. Note that for
-PPPM, the calcluation requires 6 extra FFTs each timestep that
-per-atom stress is calculated. Thus it can significantly increase the
-cost of the PPPM calculation if it is needed on a large fraction of
-the simulation timesteps.
-
-The *temp-ID* argument can be used to affect the per-atom velocities
-used in the kinetic energy contribution to the total stress. If the
-kinetic energy is not included in the stress, than the temperature
-compute is not used and can be specified as NULL. If the kinetic
-energy is included and you wish to use atom velocities as-is, then
-*temp-ID* can also be specified as NULL. If desired, the specified
-temperature compute can be one that subtracts off a bias to leave each
-atom with only a thermal velocity to use in the formula above, e.g. by
-subtracting a background streaming velocity. See the doc pages for
-individual :doc:`compute commands <compute>` to determine which ones
-include a bias.
-
-
-----------
-
-
-Note that as defined in the formula, per-atom stress is the negative
-of the per-atom pressure tensor. It is also really a stress*volume
-formulation, meaning the computed quantity is in units of
-pressure*volume. It would need to be divided by a per-atom volume to
-have units of stress (pressure), but an individual atom's volume is
-not well defined or easy to compute in a deformed solid or a liquid.
-See the :doc:`compute voronoi/atom <compute_voronoi_atom>` command for
-one possible way to estimate a per-atom volume.
-
-Thus, if the diagonal components of the per-atom stress tensor are
-summed for all atoms in the system and the sum is divided by dV, where
-d = dimension and V is the volume of the system, the result should be
--P, where P is the total pressure of the system.
-
-These lines in an input script for a 3d system should yield that
-result. I.e. the last 2 columns of thermo output will be the same:
-
-.. parsed-literal::
-
- compute peratom all stress/atom NULL
- compute p all reduce sum c_peratom[1] c_peratom[2] c_peratom[3]
- variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol)
- thermo_style custom step temp etotal press v_press
-
-**Output info:**
-
-This compute calculates a per-atom array with 6 columns, which can be
-accessed by indices 1-6 by any command that uses per-atom values from
-a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The per-atom array values will be in pressure*volume
-:doc:`units <units>` as discussed above.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute pe <compute_pe>`, :doc:`compute pressure <compute_pressure>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Heyes:
-
-
-
-**(Heyes)** Heyes, Phys Rev B 49, 755 (1994),
-
-.. _Sirk:
-
-
-
-**(Sirk)** Sirk, Moore, Brown, J Chem Phys, 138, 064505 (2013).
-
-.. _Thompson:
-
-
-
-**(Thompson)** Thompson, Plimpton, Mattson, J Chem Phys, 131, 154107 (2009).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_tally.txt b/doc/html/_sources/compute_tally.txt
deleted file mode 100644
index d62c1e635..000000000
--- a/doc/html/_sources/compute_tally.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-.. index:: compute force/tally
-
-compute force/tally command
-===========================
-
-compute heat/flux/tally command
-===============================
-
-compute pe/tally command
-========================
-
-compute pe/mol/tally command
-============================
-
-compute stress/tally command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID style group2-ID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* style = *force/tally* or *pe/tally* or *pe/mol/tally* or *stress/tally*
-* group2-ID = group ID of second (or same) group
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 lower force/tally upper
- compute 1 left pe/tally right
- compute 1 lower stress/tally lower
-
-Description
-"""""""""""
-
-Define a computation that calculates properties between two groups of
-atoms by accumulating them from pairwise non-bonded computations. The
-two groups can be the same. This is similar to :doc:`compute group/group <compute_group_group>` only that the data is
-accumulated directly during the non-bonded force computation. The
-computes *force/tally*\ , *pe/tally*\ , *stress/tally*\ , and
-*heat/flux/tally* are primarily provided as example how to program
-additional, more sophisticated computes using the tally mechanism.
-
-
-----------
-
-
-The pairwise contributions are computing via a callback that the
-compute registers with the non-bonded pairwise force computation.
-This limits the use to systems that have no bonds, no Kspace, and no
-manybody interactions. On the other hand, the computation does not
-have to compute forces or energies a second time and thus can be much
-more efficient. The callback mechanism allows to write more complex
-pairwise property computations.
-
-
-----------
-
-
-**Output info:**
-
-Compute *pe/tally* calculates a global scalar (the energy) and a per
-atom scalar (the contributions of the single atom to the global
-scalar). Compute *pe/mol/tally* calculates a global 4-element vector
-containing (in this order): *evdwl* and *ecoul* for intramolecular pairs
-and *evdwl* and *ecoul* for intermolecular pairs. Since molecules are
-identified my their molecule IDs, the partitioning does not have to be
-related to molecules, but the energies are tallied into the respective
-slots depending on whether the molecule IDs of a pair are the same or
-different. Compute *force/tally* calculates a global scalar (the force
-magnitude) and a per atom 3-element vector (force contribution from
-each atom). Compute *stress/tally* calculates a global scalar
-(average of the diagonal elements of the stress tensor) and a per atom
-vector (the 6 elements of stress tensor contributions from the
-individual atom).
-
-Both the scalar and vector values calculated by this compute are
-"extensive".
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-TALLY package. It is only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Not all pair styles can be evaluated in a pairwise mode as required by
-this compute. For example, 3-body and other many-body potentials,
-such as :doc:`Tersoff <pair_tersoff>` and
-:doc:`Stillinger-Weber <pair_sw>` cannot be used. :doc:`EAM <pair_eam>`
-potentials only include the pair potential portion of the EAM
-interaction when used by this compute, not the embedding term. Also
-bonded or Kspace interactions do not contribute to this compute.
-
-Related commands
-""""""""""""""""
-
-*compute group/group*\ _compute_group_group.html, *compute
-heat/flux*\ _compute_heat_flux.html
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp.txt b/doc/html/_sources/compute_temp.txt
deleted file mode 100644
index 890eaba16..000000000
--- a/doc/html/_sources/compute_temp.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-.. index:: compute temp
-
-compute temp command
-====================
-
-compute temp/kk command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all temp
- compute myTemp mobile temp
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-atoms. A compute of this style can be used by any command that
-computes a temperature, e.g. :doc:`thermo_modify <thermo_modify>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix npt <fix_nh>`, etc.
-
-The temperature is calculated by the formula KE = dim/2 N k T, where
-KE = total kinetic energy of the group of atoms (sum of 1/2 m v^2),
-dim = 2 or 3 = dimensionality of the simulation, N = number of atoms
-in the group, k = Boltzmann constant, and T = temperature.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute for use in the computation of a pressure
-tensor. The formula for the components of the tensor is the same as
-the above formula, except that v^2 is replaced by vx*vy for the xy
-component, etc. The 6 components of the vector are ordered xx, yy,
-zz, xy, xz, yz.
-
-The number of atoms contributing to the temperature is assumed to be
-constant for the duration of the run; use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command if this is not the case.
-
-This compute subtracts out degrees-of-freedom due to fixes that
-constrain molecular motion, such as :doc:`fix shake <fix_shake>` and
-:doc:`fix rigid <fix_rigid>`. This means the temperature of groups of
-atoms that include these constraints will be computed correctly. If
-needed, the subtracted degrees-of-freedom can be altered using the
-*extra* option of the :doc:`compute_modify <compute_modify>` command.
-
-A compute of this style with the ID of "thermo_temp" is created when
-LAMMPS starts up, as if this command were in the input script:
-
-.. parsed-literal::
-
- compute thermo_temp all temp
-
-See the "thermo_style" command for more details.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp/partial <compute_temp_partial>`, :doc:`compute temp/region <compute_temp_region>`, :doc:`compute pressure <compute_pressure>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_asphere.txt b/doc/html/_sources/compute_temp_asphere.txt
deleted file mode 100644
index d9954deef..000000000
--- a/doc/html/_sources/compute_temp_asphere.txt
+++ /dev/null
@@ -1,170 +0,0 @@
-.. index:: compute temp/asphere
-
-compute temp/asphere command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/asphere keyword value ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/asphere = style name of this compute command
-* zero or more keyword/value pairs may be appended
-* keyword = *bias* or *dof*
-.. parsed-literal::
-
- *bias* value = bias-ID
- bias-ID = ID of a temperature compute that removes a velocity bias
- *dof* value = *all* or *rotate*
- all = compute temperature of translational and rotational degrees of freedom
- rotate = compute temperature of just rotational degrees of freedom
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all temp/asphere
- compute myTemp mobile temp/asphere bias tempCOM
- compute myTemp mobile temp/asphere dof rotate
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-aspherical particles, including a contribution from both their
-translational and rotational kinetic energy. This differs from the
-usual :doc:`compute temp <compute_temp>` command, which assumes point
-particles with only translational kinetic energy.
-
-Only finite-size particles (aspherical or spherical) can be included
-in the group. For 3d finite-size particles, each has 6 degrees of
-freedom (3 translational, 3 rotational). For 2d finite-size
-particles, each has 3 degrees of freedom (2 translational, 1
-rotational).
-
-.. note::
-
- This choice for degrees of freedom (dof) assumes that all
- finite-size aspherical or spherical particles in your model will
- freely rotate, sampling all their rotational dof. It is possible to
- use a combination of interaction potentials and fixes that induce no
- torque or otherwise constrain some of all of your particles so that
- this is not the case. Then there are less dof and you should use the
- :doc:`compute_modify extra <compute_modify>` command to adjust the dof
- accordingly.
-
-For example, an aspherical particle with all three of its shape
-parameters the same is a sphere. If it does not rotate, then it
-should have 3 dof instead of 6 in 3d (or 2 instead of 3 in 2d). A
-uniaxial aspherical particle has two of its three shape parameters the
-same. If it does not rotate around the axis perpendicular to its
-circular cross section, then it should have 5 dof instead of 6 in 3d.
-The latter is the case for uniaxial ellipsoids in a :doc:`GayBerne model <pair_gayberne>` since there is no induced torque around the
-optical axis. It will also be the case for biaxial ellipsoids when
-exactly two of the semiaxes have the same length and the corresponding
-relative well depths are equal.
-
-The translational kinetic energy is computed the same as is described
-by the :doc:`compute temp <compute_temp>` command. The rotational
-kinetic energy is computed as 1/2 I w^2, where I is the inertia tensor
-for the aspherical particle and w is its angular velocity, which is
-computed from its angular momentum.
-
-.. note::
-
- For :doc:`2d models <dimension>`, particles are treated as
- ellipsoids, not ellipses, meaning their moments of inertia will be the
- same as in 3d.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute. The formula for the components of the
-tensor is the same as the above formula, except that v^2 and w^2 are
-replaced by vx*vy and wx*wy for the xy component, and the appropriate
-elements of the inertia tensor are used. The 6 components of the
-vector are ordered xx, yy, zz, xy, xz, yz.
-
-The number of atoms contributing to the temperature is assumed to be
-constant for the duration of the run; use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command if this is not the case.
-
-This compute subtracts out translational degrees-of-freedom due to
-fixes that constrain molecular motion, such as :doc:`fix shake <fix_shake>` and :doc:`fix rigid <fix_rigid>`. This means the
-temperature of groups of atoms that include these constraints will be
-computed correctly. If needed, the subtracted degrees-of-freedom can
-be altered using the *extra* option of the
-:doc:`compute_modify <compute_modify>` command.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-
-----------
-
-
-The keyword/value option pairs are used in the following ways.
-
-For the *bias* keyword, *bias-ID* refers to the ID of a temperature
-compute that removes a "bias" velocity from each atom. This allows
-compute temp/sphere to compute its thermal temperature after the
-translational kinetic energy components have been altered in a
-prescribed way, e.g. to remove a flow velocity profile. Thermostats
-that use this compute will work with this bias term. See the doc
-pages for individual computes that calculate a temperature and the doc
-pages for fixes that perform thermostatting for more details.
-
-For the *dof* keyword, a setting of *all* calculates a temperature
-that includes both translational and rotational degrees of freedom. A
-setting of *rotate* calculates a temperature that includes only
-rotational degrees of freedom.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the ASPHERE package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This compute requires that atoms store angular momementum and a
-quaternion as defined by the :doc:`atom_style ellipsoid <atom_style>`
-command.
-
-All particles in the group must be finite-size. They cannot be point
-particles, but they can be aspherical or spherical as defined by their
-shape attribute.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_body.txt b/doc/html/_sources/compute_temp_body.txt
deleted file mode 100644
index 89d49d809..000000000
--- a/doc/html/_sources/compute_temp_body.txt
+++ /dev/null
@@ -1,146 +0,0 @@
-.. index:: compute temp/body
-
-compute temp/body command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/body keyword value ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/body = style name of this compute command
-* zero or more keyword/value pairs may be appended
-* keyword = *bias* or *dof*
-.. parsed-literal::
-
- *bias* value = bias-ID
- bias-ID = ID of a temperature compute that removes a velocity bias
- *dof* value = *all* or *rotate*
- all = compute temperature of translational and rotational degrees of freedom
- rotate = compute temperature of just rotational degrees of freedom
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all temp/body
- compute myTemp mobile temp/body bias tempCOM
- compute myTemp mobile temp/body dof rotate
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-body particles, including a contribution from both their
-translational and rotational kinetic energy. This differs from the
-usual :doc:`compute temp <compute_temp>` command, which assumes point
-particles with only translational kinetic energy.
-
-Only body particles can be included in the group. For 3d particles,
-each has 6 degrees of freedom (3 translational, 3 rotational). For 2d
-body particles, each has 3 degrees of freedom (2 translational, 1
-rotational).
-
-.. note::
-
- This choice for degrees of freedom (dof) assumes that all body
- particles in your model will freely rotate, sampling all their
- rotational dof. It is possible to use a combination of interaction
- potentials and fixes that induce no torque or otherwise constrain some
- of all of your particles so that this is not the case. Then there are
- less dof and you should use the :doc:`compute_modify extra <compute_modify>` command to adjust the dof accordingly.
-
-The translational kinetic energy is computed the same as is described
-by the :doc:`compute temp <compute_temp>` command. The rotational
-kinetic energy is computed as 1/2 I w^2, where I is the inertia tensor
-for the aspherical particle and w is its angular velocity, which is
-computed from its angular momentum.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute. The formula for the components of the
-tensor is the same as the above formula, except that v^2 and w^2 are
-replaced by vx*vy and wx*wy for the xy component, and the appropriate
-elements of the inertia tensor are used. The 6 components of the
-vector are ordered xx, yy, zz, xy, xz, yz.
-
-The number of atoms contributing to the temperature is assumed to be
-constant for the duration of the run; use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command if this is not the case.
-
-This compute subtracts out translational degrees-of-freedom due to
-fixes that constrain molecular motion, such as :doc:`fix shake <fix_shake>` and :doc:`fix rigid <fix_rigid>`. This means the
-temperature of groups of atoms that include these constraints will be
-computed correctly. If needed, the subtracted degrees-of-freedom can
-be altered using the *extra* option of the
-:doc:`compute_modify <compute_modify>` command.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-
-----------
-
-
-The keyword/value option pairs are used in the following ways.
-
-For the *bias* keyword, *bias-ID* refers to the ID of a temperature
-compute that removes a "bias" velocity from each atom. This allows
-compute temp/sphere to compute its thermal temperature after the
-translational kinetic energy components have been altered in a
-prescribed way, e.g. to remove a flow velocity profile. Thermostats
-that use this compute will work with this bias term. See the doc
-pages for individual computes that calculate a temperature and the doc
-pages for fixes that perform thermostatting for more details.
-
-For the *dof* keyword, a setting of *all* calculates a temperature
-that includes both translational and rotational degrees of freedom. A
-setting of *rotate* calculates a temperature that includes only
-rotational degrees of freedom.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the BODY package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This compute requires that atoms store angular momementum and a
-quaternion as defined by the :doc:`atom_style body <atom_style>`
-command.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_chunk.txt b/doc/html/_sources/compute_temp_chunk.txt
deleted file mode 100644
index dc9cada32..000000000
--- a/doc/html/_sources/compute_temp_chunk.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-.. index:: compute temp/chunk
-
-compute temp/chunk command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/chunk chunkID value1 value2 ... keyword value ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/chunk = style name of this compute command
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-* zero or more values can be listed as value1,value2,etc
-* value = *temp* or *kecom* or *internal*
-.. parsed-literal::
-
- temp = temperature of each chunk
- kecom = kinetic energy of each chunk based on velocity of center of mass
- internal = internal kinetic energy of each chunk
-
-* zero or more keyword/value pairs may be appended
-* keyword = *com* or *bias* or *adof* or *cdof*
-.. parsed-literal::
-
- *com* value = *yes* or *no*
- yes = subtract center-of-mass velocity from each chunk before calculating temperature
- no = do not subtract center-of-mass velocity
- *bias* value = bias-ID
- bias-ID = ID of a temperature compute that removes a velocity bias
- *adof* value = dof_per_atom
- dof_per_atom = define this many degrees-of-freedom per atom
- *cdof* value = dof_per_chunk
- dof_per_chunk = define this many degrees-of-freedom per chunk
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 fluid temp/chunk molchunk
- compute 1 fluid temp/chunk molchunk temp internal
- compute 1 fluid temp/chunk molchunk bias tpartial adof 2.0
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-atoms that are also in chunks, after optionally subtracting out the
-center-of-mass velocity of each chunk. By specifying optional values,
-it can also calulate the per-chunk temperature or energies of the
-multiple chunks of atoms.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-The temperature is calculated by the formula KE = DOF/2 k T, where KE =
-total kinetic energy of all atoms assigned to chunks (sum of 1/2 m
-v^2), DOF = the total number of degrees of freedom for those atoms, k
-= Boltzmann constant, and T = temperature.
-
-The DOF is calculated as N*adof + Nchunk*cdof, where N = number of
-atoms contributing to the KE, adof = degrees of freedom per atom, and
-cdof = degrees of freedom per chunk. By default adof = 2 or 3 =
-dimensionality of system, as set via the :doc:`dimension <dimension>`
-command, and cdof = 0.0. This gives the usual formula for
-temperature.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute for use in the computation of a pressure
-tensor. The formula for the components of the tensor is the same as
-the above formula, except that v^2 is replaced by vx*vy for the xy
-component, etc. The 6 components of the vector are ordered xx, yy,
-zz, xy, xz, yz.
-
-Note that the number of atoms contributing to the temperature is
-calculated each time the temperature is evaluated since it is assumed
-the atoms may be dynamically assigned to chunks. Thus there is no
-need to use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command for this compute style.
-
-If any optional values are specified, then per-chunk quantities are
-also calculated and stored in a global array, as described below.
-
-The *temp* value calculates the temperature for each chunk by the
-formula KE = DOF/2 k T, where KE = total kinetic energy of the chunk
-of atoms (sum of 1/2 m v^2), DOF = the total number of degrees of
-freedom for all atoms in the chunk, k = Boltzmann constant, and T =
-temperature.
-
-The DOF in this case is calculated as N*adof + cdof, where N = number
-of atoms in the chunk, adof = degrees of freedom per atom, and cdof =
-degrees of freedom per chunk. By default adof = 2 or 3 =
-dimensionality of system, as set via the :doc:`dimension <dimension>`
-command, and cdof = 0.0. This gives the usual formula for
-temperature.
-
-The *kecom* value calculates the kinetic energy of each chunk as if
-all its atoms were moving with the velocity of the center-of-mass of
-the chunk.
-
-The *internal* value calculates the internal kinetic energy of each
-chunk. The interal KE is summed over the atoms in the chunk using an
-internal "thermal" velocity for each atom, which is its velocity minus
-the center-of-mass velocity of the chunk.
-
-
-----------
-
-
-Note that currently the global and per-chunk temperatures calculated
-by this compute only include translational degrees of freedom for each
-atom. No rotational degrees of freedom are included for finite-size
-particles. Also no degrees of freedom are subtracted for any velocity
-bias or constraints that are applied, such as :doc:`compute temp/partial <compute_temp_partial>`, or :doc:`fix shake <fix_shake>`
-or :doc:`fix rigid <fix_rigid>`. This is because those degrees of
-freedom (e.g. a constrained bond) could apply to sets of atoms that
-are both included and excluded from a specific chunk, and hence the
-concept is somewhat ill-defined. In some cases, you can use the
-*adof* and *cdof* keywords to adjust the calculated degress of freedom
-appropriately, as explained below.
-
-Note that the per-chunk temperature calulated by this compute and the
-:doc:`fix ave/chunk temp <fix_ave_chunk>` command can be different.
-This compute calculates the temperature for each chunk for a single
-snapshot. Fix ave/chunk can do that but can also time average those
-values over many snapshots, or it can compute a temperature as if the
-atoms in the chunk on different timesteps were collected together as
-one set of atoms to calculate their temperature. This compute allows
-the center-of-mass velocity of each chunk to be subtracted before
-calculating the temperature; fix ave/chunk does not.
-
-.. note::
-
- Only atoms in the specified group contribute to the calculations
- performed by this compute. The :doc:`compute chunk/atom <compute_chunk_atom>` command defines its own group;
- atoms will have a chunk ID = 0 if they are not in that group,
- signifying they are not assigned to a chunk, and will thus also not
- contribute to this calculation. You can specify the "all" group for
- this command if you simply want to include atoms with non-zero chunk
- IDs.
-
-The simplest way to output the per-chunk results of the compute
-temp/chunk calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>` command, for example:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk all temp/chunk cc1 temp
- fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
-
-
-----------
-
-
-The keyword/value option pairs are used in the following ways.
-
-The *com* keyword can be used with a value of *yes* to subtract the
-velocity of the center-of-mass for each chunk from the velocity of the
-atoms in that chunk, before calculating either the global or per-chunk
-temperature. This can be useful if the atoms are streaming or
-otherwise moving collectively, and you wish to calculate only the
-thermal temperature.
-
-For the *bias* keyword, *bias-ID* refers to the ID of a temperature
-compute that removes a "bias" velocity from each atom. This also
-allows calculation of the global or per-chunk temperature using only
-the thermal temperature of atoms in each chunk after the translational
-kinetic energy components have been altered in a prescribed way,
-e.g. to remove a velocity profile. It also applies to the calculation
-of the other per-chunk values, such as *kecom* or *internal*\ , which
-involve the center-of-mass velocity of each chunk, which is calculated
-after the velocity bias is removed from each atom. Note that the
-temperature compute will apply its bias globally to the entire system,
-not on a per-chunk basis.
-
-The *adof* and *cdof* keywords define the values used in the degree of
-freedom (DOF) formulas used for the global or per-chunk temperature,
-as described above. They can be used to calculate a more appropriate
-temperature for some kinds of chunks. Here are 3 examples:
-
-If spatially binned chunks contain some number of water molecules and
-:doc:`fix shake <fix_shake>` is used to make each molecule rigid, then
-you could calculate a temperature with 6 degrees of freedom (DOF) (3
-translational, 3 rotational) per molecule by setting *adof* to 2.0.
-
-If :doc:`compute temp/partial <compute_temp_partial>` is used with the
-*bias* keyword to only allow the x component of velocity to contribute
-to the temperature, then *adof* = 1.0 would be appropriate.
-
-If each chunk consists of a large molecule, with some number of its
-bonds constrained by :doc:`fix shake <fix_shake>` or the entire molecule
-by :doc:`fix rigid/small <fix_rigid>`, *adof* = 0.0 and *cdof* could be
-set to the remaining degrees of freedom for the entire molecule
-(entire chunk in this case), e.g. 6 for 3d, or 3 for 2d, for a rigid
-molecule.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-This compute also optionally calculates a global array, if one or more
-of the optional values are specified. The number of rows in the array
-= the number of chunks *Nchunk* as calculated by the specified
-:doc:`compute chunk/atom <compute_chunk_atom>` command. The number of
-columns is the number of specifed values (1 or more). These values
-can be accessed by any command that uses global array values from a
-compute as input. Again, see :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive". The array values are "intensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`. The array values
-will be in temperature :doc:`units <units>` for the *temp* value, and in
-energy :doc:`units <units>` for the *kecom* and *internal* values.
-
-Restrictions
-""""""""""""
-
-
-The *com* and *bias* keywords cannot be used together.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`, :doc:`fix ave/chunk temp <fix_ave_chunk>`
-
-Default
-"""""""
-
-The option defaults are com no, no bias, adof = dimensionality of the
-system (2 or 3), and cdof = 0.0.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_com.txt b/doc/html/_sources/compute_temp_com.txt
deleted file mode 100644
index 63fef44bc..000000000
--- a/doc/html/_sources/compute_temp_com.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-.. index:: compute temp/com
-
-compute temp/com command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/com
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/com = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all temp/com
- compute myTemp mobile temp/com
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-atoms, after subtracting out the center-of-mass velocity of the group.
-This is useful if the group is expected to have a non-zero net
-velocity for some reason. A compute of this style can be used by any
-command that computes a temperature,
-e.g. :doc:`thermo_modify <thermo_modify>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix npt <fix_nh>`, etc.
-
-After the center-of-mass velocity has been subtracted from each atom,
-the temperature is calculated by the formula KE = dim/2 N k T, where
-KE = total kinetic energy of the group of atoms (sum of 1/2 m v^2),
-dim = 2 or 3 = dimensionality of the simulation, N = number of atoms
-in the group, k = Boltzmann constant, and T = temperature.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute for use in the computation of a pressure
-tensor. The formula for the components of the tensor is the same as
-the above formula, except that v^2 is replaced by vx*vy for the xy
-component, etc. The 6 components of the vector are ordered xx, yy,
-zz, xy, xz, yz.
-
-The number of atoms contributing to the temperature is assumed to be
-constant for the duration of the run; use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command if this is not the case.
-
-The removal of the center-of-mass velocity by this fix is essentially
-computing the temperature after a "bias" has been removed from the
-velocity of the atoms. If this compute is used with a fix command
-that performs thermostatting then this bias will be subtracted from
-each atom, thermostatting of the remaining thermal velocity will be
-performed, and the bias will be added back in. Thermostatting fixes
-that work in this way include :doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix temp/berendsen <fix_temp_berendsen>`, and :doc:`fix langevin <fix_langevin>`.
-
-This compute subtracts out degrees-of-freedom due to fixes that
-constrain molecular motion, such as :doc:`fix shake <fix_shake>` and
-:doc:`fix rigid <fix_rigid>`. This means the temperature of groups of
-atoms that include these constraints will be computed correctly. If
-needed, the subtracted degrees-of-freedom can be altered using the
-*extra* option of the :doc:`compute_modify <compute_modify>` command.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_cs.txt b/doc/html/_sources/compute_temp_cs.txt
deleted file mode 100644
index c9eeedf0d..000000000
--- a/doc/html/_sources/compute_temp_cs.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-.. index:: compute temp/cs
-
-compute temp/cs command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/cs group1 group2
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/cs = style name of this compute command
-* group1 = group-ID of either cores or shells
-* group2 = group-ID of either shells or cores
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute oxygen_c-s all temp/cs O_core O_shell
- compute core_shells all temp/cs cores shells
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a system based
-on the center-of-mass velocity of atom pairs that are bonded to each
-other. This compute is designed to be used with the adiabatic
-core/shell model of :ref:`(Mitchell and Finchham) <MitchellFinchham>`. See
-:ref:`Section_howto 25 <howto_25>` of the manual for an
-overview of the model as implemented in LAMMPS. Specifically, this
-compute enables correct temperature calculation and thermostatting of
-core/shell pairs where it is desirable for the internal degrees of
-freedom of the core/shell pairs to not be influenced by a thermostat.
-A compute of this style can be used by any command that computes a
-temperature via :doc:`fix_modify <fix_modify>` e.g. :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix npt <fix_nh>`, etc.
-
-Note that this compute does not require all ions to be polarized,
-hence defined as core/shell pairs. One can mix core/shell pairs and
-ions without a satellite particle if desired. The compute will
-consider the non-polarized ions according to the physical system.
-
-For this compute, core and shell particles are specified by two
-respective group IDs, which can be defined using the
-:doc:`group <group>` command. The number of atoms in the two groups
-must be the same and there should be one bond defined between a pair
-of atoms in the two groups. Non-polarized ions which might also be
-included in the treated system should not be included into either of
-these groups, they are taken into account by the *group-ID* (2nd
-argument) of the compute.
-
-The temperature is calculated by the formula KE = dim/2 N k T, where
-KE = total kinetic energy of the group of atoms (sum of 1/2 m v^2),
-dim = 2 or 3 = dimensionality of the simulation, N = number of atoms
-in the group, k = Boltzmann constant, and T = temperature. Note that
-the velocity of each core or shell atom used in the KE calculation is
-the velocity of the center-of-mass (COM) of the core/shell pair the
-atom is part of.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute for use in the computation of a pressure
-tensor. The formula for the components of the tensor is the same as
-the above formula, except that v^2 is replaced by vx*vy for the xy
-component, etc. The 6 components of the vector are ordered xx, yy,
-zz, xy, xz, yz. In contrast to the temperature, the velocity of
-each core or shell atom is taken individually.
-
-The change this fix makes to core/shell atom velocities is essentially
-computing the temperature after a "bias" has been removed from the
-velocity of the atoms. This "bias" is the velocity of the atom
-relative to the COM velocity of the core/shell pair. If this compute
-is used with a fix command that performs thermostatting then this bias
-will be subtracted from each atom, thermostatting of the remaining COM
-velocity will be performed, and the bias will be added back in. This
-means the thermostating will effectively be performed on the
-core/shell pairs, instead of on the individual core and shell atoms.
-Thermostatting fixes that work in this way include :doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix temp/berendsen <fix_temp_berendsen>`, and :doc:`fix langevin <fix_langevin>`.
-
-The internal energy of core/shell pairs can be calculated by the
-:doc:`compute temp/chunk <compute_temp_chunk>` command, if chunks are
-defined as core/shell pairs. See :ref:`Section_howto 25 <howto_25>` for more discussion on how to do this.
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-The number of core/shell pairs contributing to the temperature is
-assumed to be constant for the duration of the run. No fixes should
-be used which generate new molecules or atoms during a simulation.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`, :doc:`compute temp/chunk <compute_temp_chunk>`
-
-**Default:** none
-
-
-----------
-
-
-.. _MitchellFinchham:
-
-
-
-**(Mitchell and Finchham)** Mitchell, Finchham, J Phys Condensed Matter,
-5, 1031-1038 (1993).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_deform.txt b/doc/html/_sources/compute_temp_deform.txt
deleted file mode 100644
index ddb6b15e4..000000000
--- a/doc/html/_sources/compute_temp_deform.txt
+++ /dev/null
@@ -1,140 +0,0 @@
-.. index:: compute temp/deform
-
-compute temp/deform command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/deform
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/deform = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute myTemp all temp/deform
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-atoms, after subtracting out a streaming velocity induced by the
-simulation box changing size and/or shape, for example in a
-non-equilibrium MD (NEMD) simulation. The size/shape change is
-induced by use of the :doc:`fix deform <fix_deform>` command. A compute
-of this style is created by the :doc:`fix nvt/sllod <fix_nvt_sllod>`
-command to compute the thermal temperature of atoms for thermostatting
-purposes. A compute of this style can also be used by any command
-that computes a temperature, e.g. :doc:`thermo_modify <thermo_modify>`,
-:doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix npt <fix_nh>`, etc.
-
-The deformation fix changes the box size and/or shape over time, so
-each atom in the simulation box can be thought of as having a
-"streaming" velocity. For example, if the box is being sheared in x,
-relative to y, then atoms at the bottom of the box (low y) have a
-small x velocity, while atoms at the top of the box (hi y) have a
-large x velocity. This position-dependent streaming velocity is
-subtracted from each atom's actual velocity to yield a thermal
-velocity which is used to compute the temperature.
-
-.. note::
-
- :doc:`Fix deform <fix_deform>` has an option for remapping either
- atom coordinates or velocities to the changing simulation box. When
- using this compute in conjunction with a deforming box, fix deform
- should NOT remap atom positions, but rather should let atoms respond
- to the changing box by adjusting their own velocities (or let :doc:`fix deform <fix_deform>` remap the atom velocities, see it's remap
- option). If fix deform does remap atom positions, then they appear to
- move with the box but their velocity is not changed, and thus they do
- NOT have the streaming velocity assumed by this compute. LAMMPS will
- warn you if fix deform is defined and its remap setting is not
- consistent with this compute.
-
-After the streaming velocity has been subtracted from each atom, the
-temperature is calculated by the formula KE = dim/2 N k T, where KE =
-total kinetic energy of the group of atoms (sum of 1/2 m v^2), dim = 2
-or 3 = dimensionality of the simulation, N = number of atoms in the
-group, k = Boltzmann constant, and T = temperature. Note that v in
-the kinetic energy formula is the atom's thermal velocity.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute for use in the computation of a pressure
-tensor. The formula for the components of the tensor is the same as
-the above formula, except that v^2 is replaced by vx*vy for the xy
-component, etc. The 6 components of the vector are ordered xx, yy,
-zz, xy, xz, yz.
-
-The number of atoms contributing to the temperature is assumed to be
-constant for the duration of the run; use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command if this is not the case.
-
-The removal of the box deformation velocity component by this fix is
-essentially computing the temperature after a "bias" has been removed
-from the velocity of the atoms. If this compute is used with a fix
-command that performs thermostatting then this bias will be subtracted
-from each atom, thermostatting of the remaining thermal velocity will
-be performed, and the bias will be added back in. Thermostatting
-fixes that work in this way include :doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix temp/berendsen <fix_temp_berendsen>`, and :doc:`fix langevin <fix_langevin>`.
-
-.. note::
-
- The temperature calculated by this compute is only accurate if
- the atoms are indeed moving with a stream velocity profile that
- matches the box deformation. If not, then the compute will subtract
- off an incorrect stream velocity, yielding a bogus thermal
- temperature. You should NOT assume that your atoms are streaming at
- the same rate the box is deforming. Rather, you should monitor their
- velocity profile, e.g. via the :doc:`fix ave/chunk <fix_ave_chunk>`
- command. And you can compare the results of this compute to :doc:`compute temp/profile <compute_temp_profile>`, which actually calculates the
- stream profile before subtracting it. If the two computes do not give
- roughly the same temperature, then your atoms are not streaming
- consistent with the box deformation. See the :doc:`fix deform <fix_deform>` command for more details on ways to get atoms
- to stream consistently with the box deformation.
-
-This compute subtracts out degrees-of-freedom due to fixes that
-constrain molecular motion, such as :doc:`fix shake <fix_shake>` and
-:doc:`fix rigid <fix_rigid>`. This means the temperature of groups of
-atoms that include these constraints will be computed correctly. If
-needed, the subtracted degrees-of-freedom can be altered using the
-*extra* option of the :doc:`compute_modify <compute_modify>` command.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp/ramp <compute_temp_ramp>`, :doc:`compute temp/profile <compute_temp_profile>`, :doc:`fix deform <fix_deform>`,
-:doc:`fix nvt/sllod <fix_nvt_sllod>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_deform_eff.txt b/doc/html/_sources/compute_temp_deform_eff.txt
deleted file mode 100644
index 5eaa0c4c0..000000000
--- a/doc/html/_sources/compute_temp_deform_eff.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-.. index:: compute temp/deform/eff
-
-compute temp/deform/eff command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/deform/eff
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/deform/eff = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute myTemp all temp/deform/eff
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-nuclei and electrons in the :doc:`electron force field <pair_eff>`
-model, after subtracting out a streaming velocity induced by the
-simulation box changing size and/or shape, for example in a
-non-equilibrium MD (NEMD) simulation. The size/shape change is
-induced by use of the :doc:`fix deform/eff <fix_deform_eff>` command. A
-compute of this style is created by the :doc:`fix nvt/sllod/eff <fix_nvt_sllod_eff>` command to compute the thermal
-temperature of atoms for thermostatting purposes. A compute of this
-style can also be used by any command that computes a temperature,
-e.g. :doc:`thermo_modify <thermo_modify>`, :doc:`fix npt/eff <fix_nh>`,
-etc.
-
-The calculation performed by this compute is exactly like that
-described by the :doc:`compute temp/deform <compute_temp_deform>`
-command, except that the formula for the temperature includes the
-radial electron velocity contributions, as discussed by the :doc:`compute temp/eff <compute_temp_eff>` command. Note that only the
-translational degrees of freedom for each nuclei or electron are
-affected by the streaming velocity adjustment. The radial velocity
-component of the electrons is not affected.
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-EFF package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp/ramp <compute_temp_ramp>`, :doc:`fix deform/eff <fix_deform_eff>`, :doc:`fix nvt/sllod/eff <fix_nvt_sllod_eff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_drude.txt b/doc/html/_sources/compute_temp_drude.txt
deleted file mode 100644
index 9077c1b59..000000000
--- a/doc/html/_sources/compute_temp_drude.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-.. index:: compute temp/drude
-
-compute temp/drude command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/drude
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/drude = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute TDRUDE all temp/drude
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperatures of core-Drude
-pairs. This compute is designed to be used with the
-:doc:`thermalized Drude oscillator model <tutorial_drude>`. Polarizable
-models in LAMMPS are described in :ref:`this Section <howto_25>`.
-
-Drude oscillators consist of a core particle and a Drude particle
-connected by a harmonic bond, and the relative motion of these Drude
-oscillators is usually maintained cold by a specific thermostat that
-acts on the relative motion of the core-Drude particle
-pairs. Therefore, because LAMMPS considers Drude particles as normal
-atoms in its default temperature compute (:doc:`compute temp <compute_temp>` command), the reduced temperature of the
-core-Drude particle pairs is not calculated correctly.
-
-By contrast, this compute calculates the temperature of the cores
-using center-of-mass velocities of the core-Drude pairs, and the
-reduced temperature of the Drude particles using the relative
-velocities of the Drude particles with respect to their cores.
-Non-polarizable atoms are considered as cores. Their velocities
-contribute to the temperature of the cores.
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6, which can be accessed by indices 1-6, whose components
-are
-
-1. temperature of the centers of mass (temperature units)
-2. temperature of the dipoles (temperature units)
-3. number of degrees of freedom of the centers of mass
-4. number of degrees of freedom of the dipoles
-5. kinetic energy of the centers of mass (energy units)
-6. kinetic energy of the dipoles (energy units)
-
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-Both the scalar value and the first two values of the vector
-calculated by this compute are "intensive". The other 4 vector values
-are "extensive".
-
-Restrictions
-""""""""""""
-
-
-The number of degrees of freedom contributing to the temperature is
-assumed to be constant for the duration of the run unless the
-*fix_modify* command sets the option *dynamic yes*\ .
-
-Related commands
-""""""""""""""""
-
-:doc:`fix drude <fix_drude>`, :doc:`fix langevin/drude <fix_langevin_drude>`, :doc:`fix drude/transform <fix_drude_transform>`, :doc:`pair_style thole <pair_thole>`, :doc:`compute temp <compute_temp>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_eff.txt b/doc/html/_sources/compute_temp_eff.txt
deleted file mode 100644
index 81ba026c1..000000000
--- a/doc/html/_sources/compute_temp_eff.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-.. index:: compute temp/eff
-
-compute temp/eff command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/eff
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/eff = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all temp/eff
- compute myTemp mobile temp/eff
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-nuclei and electrons in the :doc:`electron force field <pair_eff>`
-model. A compute of this style can be used by commands that compute a
-temperature, e.g. :doc:`thermo_modify <thermo_modify>`, :doc:`fix npt/eff <fix_npt_eff>`, etc.
-
-The temperature is calculated by the formula KE = dim/2 N k T, where
-KE = total kinetic energy of the group of atoms (sum of 1/2 m v^2 for
-nuclei and sum of 1/2 (m v^2 + 3/4 m s^2) for electrons, where s
-includes the radial electron velocity contributions), dim = 2 or 3 =
-dimensionality of the simulation, N = number of atoms (only total
-number of nuclei in the eFF (see the :doc:`pair_eff <pair_style>`
-command) in the group, k = Boltzmann constant, and T = temperature.
-This expression is summed over all nuclear and electronic degrees of
-freedom, essentially by setting the kinetic contribution to the heat
-capacity to 3/2k (where only nuclei contribute). This subtlety is
-valid for temperatures well below the Fermi temperature, which for
-densities two to five times the density of liquid H2 ranges from
-86,000 to 170,000 K.
-
-.. note::
-
- For eFF models, in order to override the default temperature
- reported by LAMMPS in the thermodynamic quantities reported via the
- :doc:`thermo <thermo>` command, the user should apply a
- :doc:`thermo_modify <thermo_modify>` command, as shown in the following
- example:
-
-.. parsed-literal::
-
- compute effTemp all temp/eff
- thermo_style custom step etotal pe ke temp press
- thermo_modify temp effTemp
-
-A 6-component kinetic energy tensor is also calculated by this compute
-for use in the computation of a pressure tensor. The formula for the
-components of the tensor is the same as the above formula, except that
-v^2 is replaced by vx * vy for the xy component, etc. For the eFF,
-again, the radial electronic velocities are also considered.
-
-The number of atoms contributing to the temperature is assumed to be
-constant for the duration of the run; use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command if this is not the case.
-
-This compute subtracts out degrees-of-freedom due to fixes that
-constrain molecular motion, such as :doc:`fix shake <fix_shake>` and
-:doc:`fix rigid <fix_rigid>`. This means the temperature of groups of
-atoms that include these constraints will be computed correctly. If
-needed, the subtracted degrees-of-freedom can be altered using the
-*extra* option of the :doc:`compute_modify <compute_modify>` command.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-**Output info:**
-
-The scalar value calculated by this compute is "intensive", meaning it
-is independent of the number of atoms in the simulation. The vector
-values are "extensive", meaning they scale with the number of atoms in
-the simulation.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-EFF package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp/partial <compute_temp_partial>`, :doc:`compute temp/region <compute_temp_region>`, :doc:`compute pressure <compute_pressure>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_partial.txt b/doc/html/_sources/compute_temp_partial.txt
deleted file mode 100644
index 1a6909e6c..000000000
--- a/doc/html/_sources/compute_temp_partial.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-.. index:: compute temp/partial
-
-compute temp/partial command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/partial xflag yflag zflag
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/partial = style name of this compute command
-* xflag,yflag,zflag = 0/1 for whether to exclude/include this dimension
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute newT flow temp/partial 1 1 0
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-atoms, after excluding one or more velocity components. A compute of
-this style can be used by any command that computes a temperature,
-e.g. :doc:`thermo_modify <thermo_modify>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix npt <fix_nh>`, etc.
-
-The temperature is calculated by the formula KE = dim/2 N k T, where
-KE = total kinetic energy of the group of atoms (sum of 1/2 m v^2),
-dim = dimensionality of the simulation, N = number of atoms in the
-group, k = Boltzmann constant, and T = temperature. The calculation
-of KE excludes the x, y, or z dimensions if xflag, yflag, or zflag =
-0. The dim parameter is adjusted to give the correct number of
-degrees of freedom.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute for use in the calculation of a pressure
-tensor. The formula for the components of the tensor is the same as
-the above formula, except that v^2 is replaced by vx*vy for the xy
-component, etc. The 6 components of the vector are ordered xx, yy,
-zz, xy, xz, yz.
-
-The number of atoms contributing to the temperature is assumed to be
-constant for the duration of the run; use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command if this is not the case.
-
-The removal of velocity components by this fix is essentially
-computing the temperature after a "bias" has been removed from the
-velocity of the atoms. If this compute is used with a fix command
-that performs thermostatting then this bias will be subtracted from
-each atom, thermostatting of the remaining thermal velocity will be
-performed, and the bias will be added back in. Thermostatting fixes
-that work in this way include :doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix temp/berendsen <fix_temp_berendsen>`, and :doc:`fix langevin <fix_langevin>`.
-
-This compute subtracts out degrees-of-freedom due to fixes that
-constrain molecular motion, such as :doc:`fix shake <fix_shake>` and
-:doc:`fix rigid <fix_rigid>`. This means the temperature of groups of
-atoms that include these constraints will be computed correctly. If
-needed, the subtracted degrees-of-freedom can be altered using the
-*extra* option of the :doc:`compute_modify <compute_modify>` command.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`, :doc:`compute temp/region <compute_temp_region>`, :doc:`compute pressure <compute_pressure>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_profile.txt b/doc/html/_sources/compute_temp_profile.txt
deleted file mode 100644
index 819d6dcb9..000000000
--- a/doc/html/_sources/compute_temp_profile.txt
+++ /dev/null
@@ -1,198 +0,0 @@
-.. index:: compute temp/profile
-
-compute temp/profile command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/profile xflag yflag zflag binstyle args
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/profile = style name of this compute command
-* xflag,yflag,zflag = 0/1 for whether to exclude/include this dimension
-* binstyle = *x* or *y* or *z* or *xy* or *yz* or *xz* or *xyz*
-.. parsed-literal::
-
- *x* arg = Nx
- *y* arg = Ny
- *z* arg = Nz
- *xy* args = Nx Ny
- *yz* args = Ny Nz
- *xz* args = Nx Nz
- *xyz* args = Nx Ny Nz
- Nx,Ny,Nz = number of velocity bins in x,y,z dimensions
-
-* zero or more keyword/value pairs may be appended
-* keyword = *out*
-.. parsed-literal::
-
- *out* value = *tensor* or *bin*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute myTemp flow temp/profile 1 1 1 x 10
- compute myTemp flow temp/profile 1 1 1 x 10 out bin
- compute myTemp flow temp/profile 0 1 1 xyz 20 20 20
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-atoms, after subtracting out a spatially-averaged center-of-mass
-velocity field, before computing the kinetic energy. This can be
-useful for thermostatting a collection of atoms undergoing a complex
-flow, e.g. via a profile-unbiased thermostat (PUT) as described in
-:ref:`(Evans) <Evans>`. A compute of this style can be used by any command
-that computes a temperature, e.g. :doc:`thermo_modify <thermo_modify>`,
-:doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix npt <fix_nh>`, etc.
-
-The *xflag*\ , *yflag*\ , *zflag* settings determine which components of
-average velocity are subtracted out.
-
-The *binstyle* setting and its *Nx*\ , *Ny*\ , *Nz* arguments determine
-how bins are setup to perform spatial averaging. "Bins" can be 1d
-slabs, 2d pencils, or 3d bricks depending on which *binstyle* is used.
-The simulation box is partitioned conceptually into *Nx* by *Ny* by
-*Nz* bins. Depending on the *binstyle*\ , you may only specify one or
-two of these values; the others are effectively set to 1 (no binning
-in that dimension). For non-orthogonal (triclinic) simulation boxes,
-the bins are "tilted" slabs or pencils or bricks that are parallel to
-the tilted faces of the box. See the :doc:`region prism <region>`
-command for a discussion of the geometry of tilted boxes in LAMMPS.
-
-When a temperature is computed, the center-of-mass velocity for the
-set of atoms that are both in the compute group and in the same
-spatial bin is calculated. This bias velocity is then subtracted from
-the velocities of individual atoms in the bin to yield a thermal
-velocity for each atom. Note that if there is only one atom in the
-bin, its thermal velocity will thus be 0.0.
-
-After the spatially-averaged velocity field has been subtracted from
-each atom, the temperature is calculated by the formula KE = (dim/2 N
-- dim*Nx*Ny*Nz) k T, where KE = total kinetic energy of the group of
-atoms (sum of 1/2 m v^2), dim = 2 or 3 = dimensionality of the
-simulation, N = number of atoms in the group, k = Boltzmann constant,
-and T = temperature. The dim*Nx*Ny*Nz term are degrees of freedom
-subtracted to adjust for the removal of the center-of-mass velocity in
-each of Nx*Ny*Nz bins, as discussed in the :ref:`(Evans) <Evans>` paper.
-
-If the *out* keyword is used with a *tensor* value, which is the
-default, a kinetic energy tensor, stored as a 6-element vector, is
-also calculated by this compute for use in the computation of a
-pressure tensor. The formula for the components of the tensor is the
-same as the above formula, except that v^2 is replaced by vx*vy for
-the xy component, etc. The 6 components of the vector are ordered xx,
-yy, zz, xy, xz, yz.
-
-If the *out* keyword is used with a *bin* value, the count of atoms
-and computed temperature for each bin are stored for output, as an
-array of values, as described below. The temperature of each bin is
-calculated as described above, where the bias velocity is subtracted
-and only the remaining thermal velocity of atoms in the bin
-contributes to the temperature. See the note below for how the
-temperature is normalized by the degrees-of-freedom of atoms in the
-bin.
-
-The number of atoms contributing to the temperature is assumed to be
-constant for the duration of the run; use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command if this is not the case.
-
-The removal of the spatially-averaged velocity field by this fix is
-essentially computing the temperature after a "bias" has been removed
-from the velocity of the atoms. If this compute is used with a fix
-command that performs thermostatting then this bias will be subtracted
-from each atom, thermostatting of the remaining thermal velocity will
-be performed, and the bias will be added back in. Thermostatting
-fixes that work in this way include :doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix temp/berendsen <fix_temp_berendsen>`, and :doc:`fix langevin <fix_langevin>`.
-
-This compute subtracts out degrees-of-freedom due to fixes that
-constrain molecular motion, such as :doc:`fix shake <fix_shake>` and
-:doc:`fix rigid <fix_rigid>`. This means the temperature of groups of
-atoms that include these constraints will be computed correctly. If
-needed, the subtracted degrees-of-freedom can be altered using the
-*extra* option of the :doc:`compute_modify <compute_modify>` command.
-
-.. note::
-
- When using the *out* keyword with a value of *bin*\ , the
- calculated temperature for each bin does not include the
- degrees-of-freedom adjustment described in the preceeding paragraph,
- for fixes that constrain molecular motion. It does include the
- adjustment due to the *extra* option, which is applied to each bin.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting. Using this compute in conjunction with a
-thermostatting fix, as explained there, will effectively implement a
-profile-unbiased thermostat (PUT), as described in :ref:`(Evans) <Evans>`.
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature). Depending
-on the setting of the *out* keyword, it also calculates a global
-vector or array. For *out* = *tensor*\ , it calculates a vector of
-length 6 (KE tensor), which can be accessed by indices 1-6. For *out*
-= *bin* it calculates a global array which has 2 columns and N rows,
-where N is the number of bins. The first column contains the number
-of atoms in that bin. The second contains the temperature of that
-bin, calculated as described above. The ordering of rows in the array
-is as follows. Bins in x vary fastest, then y, then z. Thus for a
-10x10x10 3d array of bins, there will be 1000 rows. The bin with
-indices ix,iy,iz = 2,3,4 would map to row M = (iz-1)*10*10 + (iy-1)*10
-+ ix = 322, where the rows are numbered from 1 to 1000 and the bin
-indices are numbered from 1 to 10 in each dimension.
-
-These values can be used by any command that uses global scalar or
-vector or array values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive". The array values are "intensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`. The first column
-of array values are counts; the values in the second column will be in
-temperature :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-You should not use too large a velocity-binning grid, especially in
-3d. In the current implementation, the binned velocity averages are
-summed across all processors, so this will be inefficient if the grid
-is too large, and the operation is performed every timestep, as it
-will be for most thermostats.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`, :doc:`compute temp/ramp <compute_temp_ramp>`, :doc:`compute temp/deform <compute_temp_deform>`, :doc:`compute pressure <compute_pressure>`
-
-Default
-"""""""
-
-The option default is out = tensor.
-
-
-----------
-
-
-.. _Evans:
-
-
-
-**(Evans)** Evans and Morriss, Phys Rev Lett, 56, 2172-2175 (1986).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_ramp.txt b/doc/html/_sources/compute_temp_ramp.txt
deleted file mode 100644
index 1f0a09cbd..000000000
--- a/doc/html/_sources/compute_temp_ramp.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-.. index:: compute temp/ramp
-
-compute temp/ramp command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/ramp vdim vlo vhi dim clo chi keyword value ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/ramp = style name of this compute command
-* vdim = *vx* or *vy* or *vz*
-* vlo,vhi = subtract velocities between vlo and vhi (velocity units)
-* dim = *x* or *y* or *z*
-* clo,chi = lower and upper bound of domain to subtract from (distance units)
-* zero or more keyword/value pairs may be appended
-* keyword = *units*
-
-.. parsed-literal::
-
- *units* value = *lattice* or *box*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 2nd middle temp/ramp vx 0 8 y 2 12 units lattice
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-atoms, after subtracting out an ramped velocity profile before
-computing the kinetic energy. A compute of this style can be used by
-any command that computes a temperature,
-e.g. :doc:`thermo_modify <thermo_modify>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix npt <fix_nh>`, etc.
-
-The meaning of the arguments for this command which define the
-velocity ramp are the same as for the :doc:`velocity ramp <velocity>`
-command which was presumably used to impose the velocity.
-
-After the ramp velocity has been subtracted from the specified
-dimension for each atom, the temperature is calculated by the formula
-KE = dim/2 N k T, where KE = total kinetic energy of the group of
-atoms (sum of 1/2 m v^2), dim = 2 or 3 = dimensionality of the
-simulation, N = number of atoms in the group, k = Boltzmann constant,
-and T = temperature.
-
-The *units* keyword determines the meaning of the distance units used
-for coordinates (c1,c2) and velocities (vlo,vhi). A *box* value
-selects standard distance units as defined by the :doc:`units <units>`
-command, e.g. Angstroms for units = real or metal. A *lattice* value
-means the distance units are in lattice spacings; e.g. velocity =
-lattice spacings / tau. The :doc:`lattice <lattice>` command must have
-been previously used to define the lattice spacing.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute for use in the computation of a pressure
-tensor. The formula for the components of the tensor is the same as
-the above formula, except that v^2 is replaced by vx*vy for the xy
-component, etc. The 6 components of the vector are ordered xx, yy,
-zz, xy, xz, yz.
-
-The number of atoms contributing to the temperature is assumed to be
-constant for the duration of the run; use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command if this is not the case.
-
-The removal of the ramped velocity component by this fix is
-essentially computing the temperature after a "bias" has been removed
-from the velocity of the atoms. If this compute is used with a fix
-command that performs thermostatting then this bias will be subtracted
-from each atom, thermostatting of the remaining thermal velocity will
-be performed, and the bias will be added back in. Thermostatting
-fixes that work in this way include :doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix temp/berendsen <fix_temp_berendsen>`, and :doc:`fix langevin <fix_langevin>`.
-
-This compute subtracts out degrees-of-freedom due to fixes that
-constrain molecular motion, such as :doc:`fix shake <fix_shake>` and
-:doc:`fix rigid <fix_rigid>`. This means the temperature of groups of
-atoms that include these constraints will be computed correctly. If
-needed, the subtracted degrees-of-freedom can be altered using the
-*extra* option of the :doc:`compute_modify <compute_modify>` command.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`, :doc:`compute temp/profie <compute_temp_profile>`, :doc:`compute temp/deform <compute_temp_deform>`, :doc:`compute pressure <compute_pressure>`
-
-Default
-"""""""
-
-The option default is units = lattice.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_region.txt b/doc/html/_sources/compute_temp_region.txt
deleted file mode 100644
index d2636368a..000000000
--- a/doc/html/_sources/compute_temp_region.txt
+++ /dev/null
@@ -1,112 +0,0 @@
-.. index:: compute temp/region
-
-compute temp/region command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/region region-ID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/region = style name of this compute command
-* region-ID = ID of region to use for choosing atoms
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute mine flow temp/region boundary
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-atoms in a geometric region. This can be useful for thermostatting
-one portion of the simulation box. E.g. a McDLT simulation where one
-side is cooled, and the other side is heated. A compute of this style
-can be used by any command that computes a temperature,
-e.g. :doc:`thermo_modify <thermo_modify>`, :doc:`fix temp/rescale <fix_temp_rescale>`, etc.
-
-Note that a *region*\ -style temperature can be used to thermostat with
-:doc:`fix temp/rescale <fix_temp_rescale>` or :doc:`fix langevin <fix_langevin>`, but should probably not be used with
-Nose/Hoover style fixes (:doc:`fix nvt <fix_nh>`, :doc:`fix npt <fix_nh>`, or :doc:`fix nph <fix_nh>`), if the
-degrees-of-freedom included in the computed T varies with time.
-
-The temperature is calculated by the formula KE = dim/2 N k T, where
-KE = total kinetic energy of the group of atoms (sum of 1/2 m v^2),
-dim = 2 or 3 = dimensionality of the simulation, N = number of atoms
-in both the group and region, k = Boltzmann constant, and T =
-temperature.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute for use in the computation of a pressure
-tensor. The formula for the components of the tensor is the same as
-the above formula, except that v^2 is replaced by vx*vy for the xy
-component, etc. The 6 components of the vector are ordered xx, yy,
-zz, xy, xz, yz.
-
-The number of atoms contributing to the temperature is calculated each
-time the temperature is evaluated since it is assumed atoms can
-enter/leave the region. Thus there is no need to use the *dynamic*
-option of the :doc:`compute_modify <compute_modify>` command for this
-compute style.
-
-The removal of atoms outside the region by this fix is essentially
-computing the temperature after a "bias" has been removed, which in
-this case is the velocity of any atoms outside the region. If this
-compute is used with a fix command that performs thermostatting then
-this bias will be subtracted from each atom, thermostatting of the
-remaining thermal velocity will be performed, and the bias will be
-added back in. Thermostatting fixes that work in this way include
-:doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix temp/berendsen <fix_temp_berendsen>`, and :doc:`fix langevin <fix_langevin>`. This means that when this compute
-is used to calculate the temperature for any of the thermostatting
-fixes via the :doc:`fix modify temp <fix_modify>` command, the thermostat
-will operate only on atoms that are currently in the geometric
-region.
-
-Unlike other compute styles that calculate temperature, this compute
-does not subtract out degrees-of-freedom due to fixes that constrain
-motion, such as :doc:`fix shake <fix_shake>` and :doc:`fix rigid <fix_rigid>`. This is because those degrees of freedom
-(e.g. a constrained bond) could apply to sets of atoms that straddle
-the region boundary, and hence the concept is somewhat ill-defined.
-If needed the number of subtracted degrees-of-freedom can be set
-explicitly using the *extra* option of the
-:doc:`compute_modify <compute_modify>` command.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`, :doc:`compute pressure <compute_pressure>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_region_eff.txt b/doc/html/_sources/compute_temp_region_eff.txt
deleted file mode 100644
index d0a0bac43..000000000
--- a/doc/html/_sources/compute_temp_region_eff.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-.. index:: compute temp/region/eff
-
-compute temp/region/eff command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/region/eff region-ID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/region/eff = style name of this compute command
-* region-ID = ID of region to use for choosing atoms
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute mine flow temp/region/eff boundary
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-nuclei and electrons in the :doc:`electron force field <pair_eff>`
-model, within a geometric region using the electron force field. A
-compute of this style can be used by commands that compute a
-temperature, e.g. :doc:`thermo_modify <thermo_modify>`.
-
-The operation of this compute is exactly like that described by the
-:doc:`compute temp/region <compute_temp_region>` command, except that
-the formula for the temperature itself includes the radial electron
-velocity contributions, as discussed by the :doc:`compute temp/eff <compute_temp_eff>` command.
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-EFF package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp/region <compute_temp_region>`, :doc:`compute temp/eff <compute_temp_eff>`, :doc:`compute pressure <compute_pressure>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_rotate.txt b/doc/html/_sources/compute_temp_rotate.txt
deleted file mode 100644
index 65803d96d..000000000
--- a/doc/html/_sources/compute_temp_rotate.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-.. index:: compute temp/rotate
-
-compute temp/rotate command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/rotate
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/rotate = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute Tbead bead temp/rotate
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-atoms, after subtracting out the center-of-mass velocity and angular velocity of the group.
-This is useful if the group is expected to have a non-zero net
-velocity and/or global rotation motion for some reason. A compute of this style can be used by any
-command that computes a temperature,
-e.g. :doc:`thermo_modify <thermo_modify>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix npt <fix_nh>`, etc.
-
-After the center-of-mass velocity and angular velocity has been subtracted from each atom,
-the temperature is calculated by the formula KE = dim/2 N k T, where
-KE = total kinetic energy of the group of atoms (sum of 1/2 m v^2),
-dim = 2 or 3 = dimensionality of the simulation, N = number of atoms
-in the group, k = Boltzmann constant, and T = temperature.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute for use in the computation of a pressure
-tensor. The formula for the components of the tensor is the same as
-the above formula, except that v^2 is replaced by vx*vy for the xy
-component, etc. The 6 components of the vector are ordered xx, yy,
-zz, xy, xz, yz.
-
-The number of atoms contributing to the temperature is assumed to be
-constant for the duration of the run; use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command if this is not the case.
-
-The removal of the center-of-mass velocity and angular velocity by this fix is essentially
-computing the temperature after a "bias" has been removed from the
-velocity of the atoms. If this compute is used with a fix command
-that performs thermostatting then this bias will be subtracted from
-each atom, thermostatting of the remaining thermal velocity will be
-performed, and the bias will be added back in. Thermostatting fixes
-that work in this way include :doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix temp/berendsen <fix_temp_berendsen>`, and :doc:`fix langevin <fix_langevin>`.
-
-This compute subtracts out degrees-of-freedom due to fixes that
-constrain molecular motion, such as :doc:`fix shake <fix_shake>` and
-:doc:`fix rigid <fix_rigid>`. This means the temperature of groups of
-atoms that include these constraints will be computed correctly. If
-needed, the subtracted degrees-of-freedom can be altered using the
-*extra* option of the :doc:`compute_modify <compute_modify>` command.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_temp_sphere.txt b/doc/html/_sources/compute_temp_sphere.txt
deleted file mode 100644
index d95d17b88..000000000
--- a/doc/html/_sources/compute_temp_sphere.txt
+++ /dev/null
@@ -1,156 +0,0 @@
-.. index:: compute temp/sphere
-
-compute temp/sphere command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID temp/sphere keyword value ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* temp/sphere = style name of this compute command
-* zero or more keyword/value pairs may be appended
-* keyword = *bias* or *dof*
-.. parsed-literal::
-
- *bias* value = bias-ID
- bias-ID = ID of a temperature compute that removes a velocity bias
- *dof* value = *all* or *rotate*
- all = compute temperature of translational and rotational degrees of freedom
- rotate = compute temperature of just rotational degrees of freedom
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all temp/sphere
- compute myTemp mobile temp/sphere bias tempCOM
- compute myTemp mobile temp/sphere dof rotate
-
-Description
-"""""""""""
-
-Define a computation that calculates the temperature of a group of
-spherical particles, including a contribution from both their
-translational and rotational kinetic energy. This differs from the
-usual :doc:`compute temp <compute_temp>` command, which assumes point
-particles with only translational kinetic energy.
-
-Both point and finite-size particles can be included in the group.
-Point particles do not rotate, so they have only 3 translational
-degrees of freedom. For 3d spherical particles, each has 6 degrees of
-freedom (3 translational, 3 rotational). For 2d spherical particles,
-each has 3 degrees of freedom (2 translational, 1 rotational).
-
-.. note::
-
- This choice for degrees of freedom (dof) assumes that all
- finite-size spherical particles in your model will freely rotate,
- sampling all their rotational dof. It is possible to use a
- combination of interaction potentials and fixes that induce no torque
- or otherwise constrain some of all of your particles so that this is
- not the case. Then there are less dof and you should use the
- :doc:`compute_modify extra <compute_modify>` command to adjust the dof
- accordingly.
-
-The translational kinetic energy is computed the same as is described
-by the :doc:`compute temp <compute_temp>` command. The rotational
-kinetic energy is computed as 1/2 I w^2, where I is the moment of
-inertia for a sphere and w is the particle's angular velocity.
-
-.. note::
-
- For :doc:`2d models <dimension>`, particles are treated as
- spheres, not disks, meaning their moment of inertia will be the same
- as in 3d.
-
-A kinetic energy tensor, stored as a 6-element vector, is also
-calculated by this compute. The formula for the components of the
-tensor is the same as the above formulas, except that v^2 and w^2 are
-replaced by vx*vy and wx*wy for the xy component. The 6 components of
-the vector are ordered xx, yy, zz, xy, xz, yz.
-
-The number of atoms contributing to the temperature is assumed to be
-constant for the duration of the run; use the *dynamic* option of the
-:doc:`compute_modify <compute_modify>` command if this is not the case.
-
-This compute subtracts out translational degrees-of-freedom due to
-fixes that constrain molecular motion, such as :doc:`fix shake <fix_shake>` and :doc:`fix rigid <fix_rigid>`. This means the
-temperature of groups of atoms that include these constraints will be
-computed correctly. If needed, the subtracted degrees-of-freedom can
-be altered using the *extra* option of the
-:doc:`compute_modify <compute_modify>` command.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-
-----------
-
-
-The keyword/value option pairs are used in the following ways.
-
-For the *bias* keyword, *bias-ID* refers to the ID of a temperature
-compute that removes a "bias" velocity from each atom. This allows
-compute temp/sphere to compute its thermal temperature after the
-translational kinetic energy components have been altered in a
-prescribed way, e.g. to remove a flow velocity profile. Thermostats
-that use this compute will work with this bias term. See the doc
-pages for individual computes that calculate a temperature and the doc
-pages for fixes that perform thermostatting for more details.
-
-For the *dof* keyword, a setting of *all* calculates a temperature
-that includes both translational and rotational degrees of freedom. A
-setting of *rotate* calculates a temperature that includes only
-rotational degrees of freedom.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global scalar (the temperature) and a global
-vector of length 6 (KE tensor), which can be accessed by indices 1-6.
-These values can be used by any command that uses global scalar or
-vector values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "intensive". The
-vector values are "extensive".
-
-The scalar value will be in temperature :doc:`units <units>`. The
-vector values will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This fix requires that atoms store torque and angular velocity (omega)
-and a radius as defined by the :doc:`atom_style sphere <atom_style>`
-command.
-
-All particles in the group must be finite-size spheres, or point
-particles with radius = 0.0.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute temp <compute_temp>`, :doc:`compute temp/asphere <compute_temp>`
-
-Default
-"""""""
-
-The option defaults are no bias and dof = all.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_ti.txt b/doc/html/_sources/compute_ti.txt
deleted file mode 100644
index c3cf9fa79..000000000
--- a/doc/html/_sources/compute_ti.txt
+++ /dev/null
@@ -1,157 +0,0 @@
-.. index:: compute ti
-
-compute ti command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group ti keyword args ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* ti = style name of this compute command
-* one or more attribute/arg pairs may be appended
-* keyword = pair style (lj/cut, gauss, born, etc) or *tail* or *kspace*
-.. parsed-literal::
-
- pair style args = atype v_name1 v_name2
- atype = atom type (see asterisk form below)
- v_name1 = variable with name1 that is energy scale factor and function of lambda
- v_name2 = variable with name2 that is derivative of v_name1 with respect to lambda
- *tail* args = atype v_name1 v_name2
- atype = atom type (see asterisk form below)
- v_name1 = variable with name1 that is energy tail correction scale factor and function of lambda
- v_name2 = variable with name2 that is derivative of v_name1 with respect to lambda
- *kspace* args = atype v_name1 v_name2
- atype = atom type (see asterisk form below)
- v_name1 = variable with name1 that is K-Space scale factor and function of lambda
- v_name2 = variable with name2 that is derivative of v_name1 with respect to lambda
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all ti lj/cut 1 v_lj v_dlj coul/long 2 v_c v_dc kspace 1 v_ks v_dks
- compute 1 all ti lj/cut 1*3 v_lj v_dlj coul/long * v_c v_dc kspace * v_ks v_dks
-
-Description
-"""""""""""
-
-Define a computation that calculates the derivative of the interaction
-potential with respect to *lambda*\ , the coupling parameter used in a
-thermodynamic integration. This derivative can be used to infer a
-free energy difference resulting from an alchemical simulation, as
-described in :ref:`Eike <Eike>`.
-
-Typically this compute will be used in conjunction with the :doc:`fix adapt <fix_adapt>` command which can perform alchemical
-transformations by adusting the strength of an interaction potential
-as a simulation runs, as defined by one or more
-:doc:`pair_style <pair_style>` or :doc:`kspace_style <kspace_style>`
-commands. This scaling is done via a prefactor on the energy, forces,
-virial calculated by the pair or K-Space style. The prefactor is
-often a function of a *lambda* parameter which may be adjusted from 0
-to 1 (or vice versa) over the course of a :doc:`run <run>`. The
-time-dependent adjustment is what the :doc:`fix adapt <fix_adapt>`
-command does.
-
-Assume that the unscaled energy of a pair_style or kspace_style is
-given by U. Then the scaled energy is
-
-.. parsed-literal::
-
- Us = f(lambda) U
-
-where f() is some function of lambda. What this compute calculates is
-
-.. parsed-literal::
-
- dUs / d(lambda) = U df(lambda)/dlambda = Us / f(lambda) df(lambda)/dlambda
-
-which is the derivative of the system's scaled potential energy Us
-with respect to *lambda*\ .
-
-To perform this calculation, you provide one or more atom types as
-*atype*\ . *Atype* can be specified in one of two ways. An explicit
-numeric values can be used, as in the 1st example above. Or a
-wildcard asterisk can be used in place of or in conjunction with the
-*atype* argument to select multiple atom types. This takes the form
-"*" or "*n" or "n*" or "m*n". If N = the number of atom types, then
-an asterisk with no numeric values means all types from 1 to N. A
-leading asterisk means all types from 1 to n (inclusive). A trailing
-asterisk means all types from n to N (inclusive). A middle asterisk
-means all types from m to n (inclusive).
-
-You also specify two functions, as :doc:`equal-style variables <variable>`. The first is specified as *v_name1*\ , where
-*name1* is the name of the variable, and is f(lambda) in the notation
-above. The second is specified as *v_name2*\ , where *name2* is the
-name of the variable, and is df(lambda) / dlambda in the notation
-above. I.e. it is the analytic derivative of f() with respect to
-lambda. Note that the *name1* variable is also typically given as an
-argument to the :doc:`fix adapt <fix_adapt>` command.
-
-An alchemical simulation may use several pair potentials together,
-invoked via the :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>`
-command. The total dUs/dlambda for the overall system is calculated
-as the sum of each contributing term as listed by the keywords in the
-compute ti command. Individual pair potentials can be listed, which
-will be sub-styles in the hybrid case. You can also include a K-space
-term via the *kspace* keyword. You can also include a pairwise
-long-range tail correction to the energy via the *tail* keyword.
-
-For each term you can specify a different (or the same) scale factor
-by the two variables that you list. Again, these will typically
-correspond toe the scale factors applied to these various potentials
-and the K-Space contribution via the :doc:`fix adapt <fix_adapt>`
-command.
-
-More details about the exact functional forms for the computation of
-du/dl can be found in the paper by :ref:`Eike <Eike>`.
-
-
-----------
-
-
-**Output info:**
-
-This compute calculates a global scalar, namely dUs/dlambda. This
-value can be used by any command that uses a global scalar value from
-a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The scalar value calculated by this compute is "extensive".
-
-The scalar value will be in energy :doc:`units <units>`.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix adapt <fix_adapt>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Eike:
-
-
-
-**(Eike)** Eike and Maginn, Journal of Chemical Physics, 124, 164503 (2006).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_torque_chunk.txt b/doc/html/_sources/compute_torque_chunk.txt
deleted file mode 100644
index 13a1106ba..000000000
--- a/doc/html/_sources/compute_torque_chunk.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-.. index:: compute torque/chunk
-
-compute torque/chunk command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID torque/chunk chunkID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* torque/chunk = style name of this compute command
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 fluid torque/chunk molchunk
-
-Description
-"""""""""""
-
-Define a computation that calculates the torque on multiple chunks of
-atoms.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-This compute calculates the 3 components of the torque vector for eqch
-chunk, due to the forces on the individual atoms in the chunk around
-the center-of-mass of the chunk. The calculation includes all effects
-due to atoms passing thru periodic boundaries.
-
-Note that only atoms in the specified group contribute to the
-calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
-defines its own group; atoms will have a chunk ID = 0 if they are not
-in that group, signifying they are not assigned to a chunk, and will
-thus also not contribute to this calculation. You can specify the
-"all" group for this command if you simply want to include atoms with
-non-zero chunk IDs.
-
-.. note::
-
- The coordinates of an atom contribute to the chunk's torque in
- "unwrapped" form, by using the image flags associated with each atom.
- See the :doc:`dump custom <dump>` command for a discussion of
- "unwrapped" coordinates. See the Atoms section of the
- :doc:`read_data <read_data>` command for a discussion of image flags and
- how they are set for each atom. You can reset the image flags
- (e.g. to 0) before invoking this compute by using the :doc:`set image <set>` command.
-
-The simplest way to output the results of the compute torque/chunk
-calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
-command, for example:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk all torque/chunk cc1
- fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
-
-**Output info:**
-
-This compute calculates a global array where the number of rows = the
-number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The number of columns =
-3 for the 3 xyz components of the torque for each chunk. These values
-can be accessed by any command that uses global array values from a
-compute as input. See :ref:`Section_howto 15 <howto_15>`
-for an overview of LAMMPS output options.
-
-The array values are "intensive". The array values will be in
-force-distance :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`variable torque() function <variable>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_vacf.txt b/doc/html/_sources/compute_vacf.txt
deleted file mode 100644
index 2065562b4..000000000
--- a/doc/html/_sources/compute_vacf.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-.. index:: compute vacf
-
-compute vacf command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID vacf
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* vacf = style name of this compute command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all vacf
- compute 1 upper vacf
-
-Description
-"""""""""""
-
-Define a computation that calculates the velocity auto-correlation
-function (VACF), averaged over a group of atoms. Each atom's
-contribution to the VACF is its current velocity vector dotted into
-its initial velocity vector at the time the compute was specified.
-
-A vector of four quantites is calculated by this compute. The first 3
-elements of the vector are vx * vx0 (and similarly for the y and z
-components), summed and averaged over atoms in the group. Vx is the
-current x-component of velocity for the atom, vx0 is the initial
-x-component of velocity for the atom. The 4th element of the vector
-is the total VACF, i.e. (vx*vx0 + vy*vy0 + vz*vz0), summed and
-averaged over atoms in the group.
-
-The integral of the VACF versus time is proportional to the diffusion
-coefficient of the diffusing atoms. This can be computed in the
-following manner, using the :doc:`variable trap() <variable>` function:
-
-.. parsed-literal::
-
- compute 2 all vacf
- fix 5 all vector 1 c_2[4]
- variable diff equal dt*trap(f_5)
- thermo_style custom step v_diff
-
-.. note::
-
- If you want the quantities calculated by this compute to be
- continuous when running from a :doc:`restart file <read_restart>`, then
- you should use the same ID for this compute, as in the original run.
- This is so that the fix this compute creates to store per-atom
- quantities will also have the same ID, and thus be initialized
- correctly with time=0 atom velocities from the restart file.
-
-**Output info:**
-
-This compute calculates a global vector of length 4, which can be
-accessed by indices 1-4 by any command that uses global vector values
-from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options.
-
-The vector values are "intensive". The vector values will be in
-velocity^2 :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute msd <compute_msd>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_vcm_chunk.txt b/doc/html/_sources/compute_vcm_chunk.txt
deleted file mode 100644
index 5eb1749ac..000000000
--- a/doc/html/_sources/compute_vcm_chunk.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-.. index:: compute vcm/chunk
-
-compute vcm/chunk command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID vcm/chunk chunkID
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* vcm/chunk = style name of this compute command
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 fluid vcm/chunk molchunk
-
-Description
-"""""""""""
-
-Define a computation that calculates the center-of-mass velocity for
-multiple chunks of atoms.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-This compute calculates the x,y,z components of the center-of-mass
-velocity for each chunk. This is done by summing mass*velocity for
-each atom in the chunk and dividing the sum by the total mass of the
-chunk.
-
-Note that only atoms in the specified group contribute to the
-calculation. The :doc:`compute chunk/atom <compute_chunk_atom>` command
-defines its own group; atoms will have a chunk ID = 0 if they are not
-in that group, signifying they are not assigned to a chunk, and will
-thus also not contribute to this calculation. You can specify the
-"all" group for this command if you simply want to include atoms with
-non-zero chunk IDs.
-
-The simplest way to output the results of the compute vcm/chunk
-calculation to a file is to use the :doc:`fix ave/time <fix_ave_time>`
-command, for example:
-
-.. parsed-literal::
-
- compute cc1 all chunk/atom molecule
- compute myChunk all vcm/chunk cc1
- fix 1 all ave/time 100 1 100 c_myChunk file tmp.out mode vector
-
-**Output info:**
-
-This compute calculates a global array where the number of rows = the
-number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The number of columns =
-3 for the x,y,z center-of-mass velocity coordinates of each chunk.
-These values can be accessed by any command that uses global array
-values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options.
-
-The array values are "intensive". The array values will be in
-velocity :doc:`units <units>`.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_voronoi_atom.txt b/doc/html/_sources/compute_voronoi_atom.txt
deleted file mode 100644
index b61dff650..000000000
--- a/doc/html/_sources/compute_voronoi_atom.txt
+++ /dev/null
@@ -1,248 +0,0 @@
-.. index:: compute voronoi/atom
-
-compute voronoi/atom command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID voronoi/atom keyword arg ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* voronoi/atom = style name of this compute command
-* zero or more keyword/value pairs may be appended
-* keyword = *only_group* or *surface* or *radius* or *edge_histo* or *edge_threshold*
- or *face_threshold* or *neighbors* or *peratom*
-.. parsed-literal::
-
- *only_group* = no arg
- *occupation* = no arg
- *surface* arg = sgroup-ID
- sgroup-ID = compute the dividing surface between group-ID and sgroup-ID
- this keyword adds a third column to the compute output
- *radius* arg = v_r
- v_r = radius atom style variable for a poly-disperse Voronoi tessellation
- *edge_histo* arg = maxedge
- maxedge = maximum number of Voronoi cell edges to be accounted in the histogram
- *edge_threshold* arg = minlength
- minlength = minimum length for an edge to be counted
- *face_threshold* arg = minarea
- minarea = minimum area for a face to be counted
- *neighbors* value = *yes* or *no* = store list of all neighbors or no
- *peratom* value = *yes* or *no* = per-atom quantities accessible or no
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all voronoi/atom
- compute 2 precipitate voronoi/atom surface matrix
- compute 3b precipitate voronoi/atom radius v_r
- compute 4 solute voronoi/atom only_group
- compute 5 defects voronoi/atom occupation
- compute 6 all voronoi/atom neighbors yes
-
-Description
-"""""""""""
-
-Define a computation that calculates the Voronoi tessellation of the
-atoms in the simulation box. The tessellation is calculated using all
-atoms in the simulation, but non-zero values are only stored for atoms
-in the group.
-
-By default two per-atom quantities are calculated by this compute.
-The first is the volume of the Voronoi cell around each atom. Any
-point in an atom's Voronoi cell is closer to that atom than any other.
-The second is the number of faces of the Voronoi cell. This is
-equal to the number of nearest neighbors of the central atom,
-plus any exterior faces (see note below). If the *peratom* keyword
-is set to "no", the per-atom quantities are still calculated,
-but they are not accessible.
-
-
-----------
-
-
-If the *only_group* keyword is specified the tessellation is performed
-only with respect to the atoms contained in the compute group. This is
-equivalent to deleting all atoms not contained in the group prior to
-evaluating the tessellation.
-
-If the *surface* keyword is specified a third quantity per atom is
-computed: the Voronoi cell surface of the given atom. *surface* takes
-a group ID as an argument. If a group other than *all* is specified,
-only the Voronoi cell facets facing a neighbor atom from the specified
-group are counted towards the surface area.
-
-In the example above, a precipitate embedded in a matrix, only atoms
-at the surface of the precipitate will have non-zero surface area, and
-only the outward facing facets of the Voronoi cells are counted (the
-hull of the precipitate). The total surface area of the precipitate
-can be obtained by running a "reduce sum" compute on c_2[3]
-
-If the *radius* keyword is specified with an atom style variable as
-the argument, a poly-disperse Voronoi tessellation is
-performed. Examples for radius variables are
-
-.. parsed-literal::
-
- variable r1 atom (type==1)*0.1+(type==2)*0.4
- compute radius all property/atom radius
- variable r2 atom c_radius
-
-Here v_r1 specifies a per-type radius of 0.1 units for type 1 atoms
-and 0.4 units for type 2 atoms, and v_r2 accesses the radius property
-present in atom_style sphere for granular models.
-
-The *edge_histo* keyword activates the compilation of a histogram of
-number of edges on the faces of the Voronoi cells in the compute
-group. The argument *maxedge* of the this keyword is the largest number
-of edges on a single Voronoi cell face expected to occur in the
-sample. This keyword adds the generation of a global vector with
-*maxedge*\ +1 entries. The last entry in the vector contains the number of
-faces with with more than *maxedge* edges. Since the polygon with the
-smallest amount of edges is a triangle, entries 1 and 2 of the vector
-will always be zero.
-
-The *edge_threshold* and *face_threshold* keywords allow the
-suppression of edges below a given minimum length and faces below a
-given minimum area. Ultra short edges and ultra small faces can occur
-as artifacts of the Voronoi tessellation. These keywords will affect
-the neighbor count and edge histogram outputs.
-
-If the *occupation* keyword is specified the tessellation is only
-performed for the first invocation of the compute and then stored.
-For all following invocations of the compute the number of atoms in
-each Voronoi cell in the stored tessellation is counted. In this mode
-the compute returns a per-atom array with 2 columns. The first column
-is the number of atoms currently in the Voronoi volume defined by this
-atom at the time of the first invocation of the compute (note that the
-atom may have moved significantly). The second column contains the
-total number of atoms sharing the Voronoi cell of the stored
-tessellation at the location of the current atom. Numbers in column
-one can be any positive integer including zero, while column two
-values will always be greater than zero. Column one data can be used
-to locate vacancies (the coordinates are given by the atom coordinates
-at the time step when the compute was first invoked), while column two
-data can be used to identify interstitial atoms.
-
-If the *neighbors* value is set to yes, then
-this compute creates a local array with 3 columns. There
-is one row for each face of each Voronoi cell. The
-3 columns are the atom ID of the atom that owns the cell,
-the atom ID of the atom in the neighboring cell
-(or zero if the face is external), and the area of the face.
-The array can be accessed by any command that
-uses local values from a compute as input. See :ref:`this section <howto_15>` for an overview of LAMMPS output
-options. More specifically, the array can be accessed by a
-:doc:`dump local <dump>` command to write a file containing
-all the Voronoi neighbors in a system:
-
-.. parsed-literal::
-
- compute 6 all voronoi/atom neighbors yes
- dump d2 all local 1 dump.neighbors index c_6[1] c_6[2] c_6[3]
-
-If the *face_threshold* keyword is used, then only faces
-with areas greater than the threshold are stored.
-
-
-----------
-
-
-The Voronoi calculation is performed by the freely available `Voro++ package <voronoi_>`_, written by Chris Rycroft at UC Berkeley and LBL,
-which must be installed on your system when building LAMMPS for use
-with this compute. See instructions on obtaining and installing the
-Voro++ software in the src/VORONOI/README file.
-
-.. _voronoi: http://math.lbl.gov/voro++/
-
-
-
-.. note::
-
- The calculation of Voronoi volumes is performed by each
- processor for the atoms it owns, and includes the effect of ghost
- atoms stored by the processor. This assumes that the Voronoi cells of
- owned atoms are not affected by atoms beyond the ghost atom cut-off
- distance. This is usually a good assumption for liquid and solid
- systems, but may lead to underestimation of Voronoi volumes in low
- density systems. By default, the set of ghost atoms stored by each
- processor is determined by the cutoff used for
- :doc:`pair_style <pair_style>` interactions. The cutoff can be set
- explicitly via the :doc:`comm_modify cutoff <comm_modify>` command. The
- Voronoi cells for atoms adjacent to empty regions will extend into
- those regions up to the communication cutoff in x, y, or z. In that
- situation, an exterior face is created at the cutoff distance normal
- to the x, y, or z direction. For triclinic systems, the exterior face
- is parallel to the corresponding reciprocal lattice vector.
-
-.. note::
-
- The Voro++ package performs its calculation in 3d. This will
- still work for a 2d LAMMPS simulation, provided all the atoms have the
- same z coordinate. The Voronoi cell of each atom will be a columnar
- polyhedron with constant cross-sectional area along the z direction
- and two exterior faces at the top and bottom of the simulation box. If
- the atoms do not all have the same z coordinate, then the columnar
- cells will be accordingly distorted. The cross-sectional area of each
- Voronoi cell can be obtained by dividing its volume by the z extent of
- the simulation box. Note that you define the z extent of the
- simulation box for 2d simulations when using the
- :doc:`create_box <create_box>` or :doc:`read_data <read_data>` commands.
-
-**Output info:**
-
-By default, this compute calculates a per-atom array with 2
-columns. In regular dynamic tessellation mode the first column is the
-Voronoi volume, the second is the neighbor count, as described above
-(read above for the output data in case the *occupation* keyword is
-specified). These values can be accessed by any command that uses
-per-atom values from a compute as input. See :ref:`Section_howto 15 <howto_15>` for an overview of LAMMPS output
-options. If the *peratom* keyword is set to "no", the per-atom array
-is still created, but it is not accessible.
-
-If the *edge_histo* keyword is used, then this compute generates a
-global vector of length *maxedge*\ +1, containing a histogram of the
-number of edges per face.
-
-If the *neighbors* value is set to yes, then this compute calculates a
-local array with 3 columns. There is one row for each face of each
-Voronoi cell.
-
-.. note::
-
- Some LAMMPS commands such as the :doc:`compute reduce <compute_reduce>` command can accept either a per-atom or
- local quantity. If this compute produces both quantities, the command
- may access the per-atom quantity, even if you want to access the local
- quantity. This effect can be eliminated by using the *peratom*
- keyword to turn off the production of the per-atom quantities. For
- the default value *yes* both quantities are produced. For the value
- *no*\ , only the local array is produced.
-
-The Voronoi cell volume will be in distance :doc:`units <units>` cubed.
-The Voronoi face area will be in distance :doc:`units <units>` squared.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the VORONOI package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump custom <dump>`, :doc:`dump local <dump>`
-
-**Default:** *neighbors* no, *peratom* yes
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/compute_xrd.txt b/doc/html/_sources/compute_xrd.txt
deleted file mode 100644
index 4702715ed..000000000
--- a/doc/html/_sources/compute_xrd.txt
+++ /dev/null
@@ -1,236 +0,0 @@
-.. index:: compute xrd
-
-compute xrd command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- compute ID group-ID xrd lambda type1 type2 ... typeN keyword value ...
-
-* ID, group-ID are documented in :doc:`compute <compute>` command
-* xrd = style name of this compute command
-* lambda = wavelength of incident radiation (length units)
-* type1 type2 ... typeN = chemical symbol of each atom type (see valid options below)
-* zero or more keyword/value pairs may be appended
-* keyword = *2Theta* or *c* or *LP* or *manual* or *echo*
-.. parsed-literal::
-
- *2Theta* values = Min2Theta Max2Theta
- Min2Theta,Max2Theta = minimum and maximum 2 theta range to explore
- (radians or degrees)
- *c* values = c1 c2 c3
- c1,c2,c3 = parameters to adjust the spacing of the reciprocal
- lattice nodes in the h, k, and l directions respectively
- *LP* value = switch to apply Lorentz-polarization factor
- 0/1 = off/on
- *manual* = flag to use manual spacing of reciprocal lattice points
- based on the values of the *c* parameters
- *echo* = flag to provide extra output for debugging purposes
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all xrd 1.541838 Al O 2Theta 0.087 0.87 c 1 1 1 LP 1 echo
- compute 2 all xrd 1.541838 Al O 2Theta 10 100 c 0.05 0.05 0.05 LP 1 manual
-
-.. parsed-literal::
-
- fix 1 all ave/histo/weight 1 1 1 0.087 0.87 250 c_1[1] c_1[2] mode vector file Rad2Theta.xrd
- fix 2 all ave/histo/weight 1 1 1 10 100 250 c_2[1] c_2[2] mode vector file Deg2Theta.xrd
-
-.. parsed-literal::
-
-
-Description
-"""""""""""
-
-Define a computation that calculates x-ray diffraction intensity as described
-in :ref:`(Coleman) <xrd-Coleman>` on a mesh of reciprocal lattice nodes defined
-by the entire simulation domain (or manually) using a simulated radiation
-of wavelength lambda.
-
-The x-ray diffraction intensity, I, at each reciprocal lattice point, k,
-is computed from the structure factor, F, using the equations:
-
-.. image:: Eqs/compute_xrd1.jpg
- :align: center
-
-.. image:: Eqs/compute_xrd2.jpg
- :align: center
-
-.. image:: Eqs/compute_xrd3.jpg
- :align: center
-
-.. image:: Eqs/compute_xrd4.jpg
- :align: center
-
-Here, K is the location of the reciprocal lattice node, rj is the
-position of each atom, fj are atomic scattering factors, LP is the
-Lorentz-polarization factor, and theta is the scattering angle of
-diffraction. The Lorentz-polarization factor can be turned off using
-the optional *LP* keyword.
-
-Diffraction intensities are calculated on a three-dimensional mesh of
-reciprocal lattice nodes. The mesh spacing is defined either (a)
-by the entire simulation domain or (b) manually using selected values as
-shown in the 2D diagram below.
-
-.. thumbnail:: JPG/xrd_mesh.jpg
- :align: center
-
-For a mesh defined by the simulation domain, a rectilinear grid is
-constructed with spacing *c*\ *inv(A) along each reciprocal lattice
-axis. Where A are the vectors corresponding to the edges of the
-simulation cell. If one or two directions has non-periodic boundary
-conditions, then the spacing in these directions is defined from the
-average of the (inversed) box lengths with periodic boundary conditions.
-Meshes defined by the simulation domain must contain at least one periodic
-boundary.
-
-If the *manual* flag is included, the mesh of reciprocal lattice nodes
-will defined using the *c* values for the spacing along each
-reciprocal lattice axis. Note that manual mapping of the reciprocal
-space mesh is good for comparing diffraction results from multiple
-simulations; however it can reduce the likelihood that Bragg
-reflections will be satisfied unless small spacing parameters (< 0.05
-Angstrom^(-1)) are implemented. Meshes with manual spacing do not
-require a periodic boundary.
-
-The limits of the reciprocal lattice mesh are determined by range of
-scattering angles explored. The *2Theta* parameters allows the user
-to reduce the scattering angle range to only the region of interest
-which reduces the cost of the computation.
-
-The atomic scattering factors, fj, accounts for the reduction in
-diffraction intensity due to Compton scattering. Compute xrd uses
-analytical approximations of the atomic scattering factors that vary
-for each atom type (type1 type2 ... typeN) and angle of diffraction.
-The analytic approximation is computed using the formula
-:ref:`(Colliex) <Colliex>`:
-
-.. image:: Eqs/compute_xrd5.jpg
- :align: center
-
-Coefficients parameterized by :ref:`(Peng) <Peng>` are assigned for each
-atom type designating the chemical symbol and charge of each atom
-type. Valid chemical symbols for compute xrd are:
-
-H: He1-: He: Li: Li1+:
- Be: Be2+: B: C: Cval:
- N: O: O1-: F: F1-:
- Ne: Na: Na1+: Mg: Mg2+:
- Al: Al3+: Si: Sival: Si4+:
- P: S: Cl: Cl1-: Ar:
- K: Ca: Ca2+: Sc: Sc3+:
- Ti: Ti2+: Ti3+: Ti4+: V:
- V2+: V3+: V5+: Cr: Cr2+:
- Cr3+: Mn: Mn2+: Mn3+: Mn4+:
- Fe: Fe2+: Fe3+: Co: Co2+:
- Co: Ni: Ni2+: Ni3+: Cu:
- Cu1+: Cu2+: Zn: Zn2+: Ga:
- Ga3+: Ge: Ge4+: As: Se:
- Br: Br1-: Kr: Rb: Rb1+:
- Sr: Sr2+: Y: Y3+: Zr:
- Zr4+: Nb: Nb3+: Nb5+: Mo:
- Mo3+: Mo5+: Mo6+: Tc: Ru:
- Ru3+: Ru4+: Rh: Rh3+: Rh4+:
- Pd: Pd2+: Pd4+: Ag: Ag1+:
- Ag2+: Cd: Cd2+: In: In3+:
- Sn: Sn2+: Sn4+: Sb: Sb3+:
- Sb5+: Te: I: I1-: Xe:
- Cs: Cs1+: Ba: Ba2+: La:
- La3+: Ce: Ce3+: Ce4+: Pr:
- Pr3+: Pr4+: Nd: Nd3+: Pm:
- Pm3+: Sm: Sm3+: Eu: Eu2+:
- Eu3+: Gd: Gd3+: Tb: Tb3+:
- Dy: Dy3+: Ho: Ho3+: Er:
- Er3+: Tm: Tm3+: Yb: Yb2+:
- Yb3+: Lu: Lu3+: Hf: Hf4+:
- Ta: Ta5+: W: W6+: Re:
- Os: Os4+: Ir: Ir3+: Ir4+:
- Pt: Pt2+: Pt4+: Au: Au1+:
- Au3+: Hg: Hg1+: Hg2+: Tl:
- Tl1+: Tl3+: Pb: Pb2+: Pb4+:
- Bi: Bi3+: Bi5+: Po: At:
- Rn: Fr: Ra: Ra2+: Ac:
- Ac3+: Th: Th4+: Pa: U:
- U3+: U4+: U6+: Np: Np3+:
- Np4+: Np6+: Pu: Pu3+: Pu4+:
- Pu6+: Am: Cm: Bk: Cf:tb(c=5,s=:)
-
-If the *echo* keyword is specified, compute xrd will provide extra
-reporting information to the screen.
-
-**Output info:**
-
-This compute calculates a global array. The number of rows in the
-array is the number of reciprocal lattice nodes that are explored
-which by the mesh. The global array has 2 columns.
-
-The first column contains the diffraction angle in the units (radians
-or degrees) provided with the *2Theta* values. The second column contains
-the computed diffraction intensities as described above.
-
-The array can be accessed by any command that uses global values from
-a compute as input. See :ref:`this section <howto_15>`
-for an overview of LAMMPS output options.
-
-All array values calculated by this compute are "intensive".
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-DIFFRACTION package. It is only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The compute_xrd command does not work for triclinic cells.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix ave/histo <fix_ave_histo>`,
-:doc:`compute saed <compute_saed>`
-
-Default
-"""""""
-
-The option defaults are 2Theta = 1 179 (degrees), c = 1 1 1, LP = 1,
-no manual flag, no echo flag.
-
-
-----------
-
-
-.. _xrd-Coleman:
-
-
-
-**(Coleman)** Coleman, Spearot, Capolungo, MSMSE, 21, 055020
-(2013).
-
-.. _Colliex:
-
-
-
-**(Colliex)** Colliex et al. International Tables for Crystallography
-Volume C: Mathematical and Chemical Tables, 249-429 (2004).
-
-.. _Peng:
-
-
-
-**(Peng)** Peng, Ren, Dudarev, Whelan, Acta Crystallogr. A, 52, 257-76
-(1996).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/create_atoms.txt b/doc/html/_sources/create_atoms.txt
deleted file mode 100644
index a9e21da02..000000000
--- a/doc/html/_sources/create_atoms.txt
+++ /dev/null
@@ -1,350 +0,0 @@
-.. index:: create_atoms
-
-create_atoms command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- create_atoms type style args keyword values ...
-
-* type = atom type (1-Ntypes) of atoms to create (offset for molecule creation)
-* style = *box* or *region* or *single* or *random*
-.. parsed-literal::
-
- *box* args = none
- *region* args = region-ID
- region-ID = particles will only be created if contained in the region
- *single* args = x y z
- x,y,z = coordinates of a single particle (distance units)
- *random* args = N seed region-ID
- N = number of particles to create
- seed = random # seed (positive integer)
- region-ID = create atoms within this region, use NULL for entire simulation box
-
-* zero or more keyword/value pairs may be appended
-* keyword = *mol* or *basis* or *remap* or *var* or *set* or *units*
-.. parsed-literal::
-
- *mol* value = template-ID seed
- template-ID = ID of molecule template specified in a separate :doc:`molecule <molecule>` command
- seed = random # seed (positive integer)
- *basis* values = M itype
- M = which basis atom
- itype = atom type (1-N) to assign to this basis atom
- *remap* value = *yes* or *no*
- *var* value = name = variable name to evaluate for test of atom creation
- *set* values = dim name
- dim = *x* or *y* or *z*
- name = name of variable to set with x, y, or z atom position
- *rotate* values = Rx Ry Rz theta
- Rx,Ry,Rz = rotation vector for single molecule
- theta = rotation angle for single molecule (degrees)
- *units* value = *lattice* or *box*
- *lattice* = the geometry is defined in lattice units
- *box* = the geometry is defined in simulation box units
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- create_atoms 1 box
- create_atoms 3 region regsphere basis 2 3
- create_atoms 3 single 0 0 5
- create_atoms 1 box var v set x xpos set y ypos
-
-Description
-"""""""""""
-
-This command creates atoms (or molecules) on a lattice, or a single
-atom (or molecule), or a random collection of atoms (or molecules), as
-an alternative to reading in their coordinates explicitly via a
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-command. A simulation box must already exist, which is typically
-created via the :doc:`create_box <create_box>` command. Before using
-this command, a lattice must also be defined using the
-:doc:`lattice <lattice>` command, unless you specify the *single* style
-with units = box or the *random* style. For the remainder of this doc
-page, a created atom or molecule is referred to as a "particle".
-
-If created particles are individual atoms, they are assigned the
-specified atom *type*\ , though this can be altered via the *basis*
-keyword as discussed below. If molecules are being created, the type
-of each atom in the created molecule is specified in the file read by
-the :doc:`molecule <molecule>` command, and those values are added to
-the specified atom *type*\ . E.g. if *type* = 2, and the file specifies
-atom types 1,2,3, then each created molecule will have atom types
-3,4,5.
-
-For the *box* style, the create_atoms command fills the entire
-simulation box with particles on the lattice. If your simulation box
-is periodic, you should insure its size is a multiple of the lattice
-spacings, to avoid unwanted atom overlaps at the box boundaries. If
-your box is periodic and a multiple of the lattice spacing in a
-particular dimension, LAMMPS is careful to put exactly one particle at
-the boundary (on either side of the box), not zero or two.
-
-For the *region* style, a geometric volume is filled with particles on
-the lattice. This volume what is inside the simulation box and is
-also consistent with the region volume. See the :doc:`region <region>`
-command for details. Note that a region can be specified so that its
-"volume" is either inside or outside a geometric boundary. Also note
-that if your region is the same size as a periodic simulation box (in
-some dimension), LAMMPS does not implement the same logic described
-above as for the *box* style, to insure exactly one particle at
-periodic boundaries. if this is what you desire, you should either
-use the *box* style, or tweak the region size to get precisely the
-particles you want.
-
-For the *single* style, a single particle is added to the system at
-the specified coordinates. This can be useful for debugging purposes
-or to create a tiny system with a handful of particles at specified
-positions.
-
-For the *random* style, N particles are added to the system at
-randomly generated coordinates, which can be useful for generating an
-amorphous system. The particles are created one by one using the
-speficied random number *seed*\ , resulting in the same set of particles
-coordinates, independent of how many processors are being used in the
-simulation. If the *region-ID* argument is specified as NULL, then
-the created particles will be anywhere in the simulation box. If a
-*region-ID* is specified, a geometric volume is filled which is both
-inside the simulation box and is also consistent with the region
-volume. See the :doc:`region <region>` command for details. Note that
-a region can be specified so that its "volume" is either inside or
-outside a geometric boundary.
-
-.. note::
-
- Particles generated by the *random* style will typically be
- highly overlapped which will cause many interatomic potentials to
- compute large energies and forces. Thus you should either perform an
- :doc:`energy minimization <minimize>` or run dynamics with :doc:`fix nve/limit <fix_nve_limit>` to equilibrate such a system, before
- running normal dynamics.
-
-Note that this command adds particles to those that already exist.
-This means it can be used to add particles to a system previously read
-in from a data or restart file. Or the create_atoms command can be
-used multiple times, to add multiple sets of particles to the
-simulation. For example, grain boundaries can be created, by
-interleaving create_atoms with :doc:`lattice <lattice>` commands
-specifying different orientations. By using the create_atoms command
-in conjunction with the :doc:`delete_atoms <delete_atoms>` command,
-reasonably complex geometries can be created, or a protein can be
-solvated with a surrounding box of water molecules.
-
-In all these cases, care should be taken to insure that new atoms do
-not overlap existing atoms inappropriately, especially if molecules
-are being added. The :doc:`delete_atoms <delete_atoms>` command can be
-used to remove overlapping atoms or molecules.
-
-
-----------
-
-
-Individual atoms are inserted by this command, unless the *mol*
-keyword is used. It specifies a *template-ID* previously defined
-using the :doc:`molecule <molecule>` command, which reads a file that
-defines the molecule. The coordinates, atom types, charges, etc, as
-well as any bond/angle/etc and special neighbor information for the
-molecule can be specified in the molecule file. See the
-:doc:`molecule <molecule>` command for details. The only settings
-required to be in this file are the coordinates and types of atoms in
-the molecule.
-
-Using a lattice to add molecules, e.g. via the *box* or *region* or
-*single* styles, is exactly the same as adding atoms on lattice
-points, except that entire molecules are added at each point, i.e. on
-the point defined by each basis atom in the unit cell as it tiles the
-simulation box or region. This is done by placing the geometric
-center of the molecule at the lattice point, and giving the molecule a
-random orientation about the point. The random *seed* specified with
-the *mol* keyword is used for this operation, and the random numbers
-generated by each processor are different. This means the coordinates
-of individual atoms (in the molecules) will be different when running
-on different numbers of processors, unlike when atoms are being
-created in parallel.
-
-Also note that because of the random rotations, it may be important to
-use a lattice with a large enough spacing that adjacent molecules will
-not overlap, regardless of their relative orientations.
-
-.. note::
-
- If the :doc:`create_box <create_box>` command is used to create
- the simulation box, followed by the create_atoms command with its
- *mol* option for adding molecules, then you typically need to use the
- optional keywords allowed by the :doc:`create_box <create_box>` command
- for extra bonds (angles,etc) or extra special neighbors. This is
- because by default, the :doc:`create_box <create_box>` command sets up a
- non-molecular system which doesn't allow molecules to be added.
-
-
-----------
-
-
-This is the meaning of the other allowed keywords.
-
-The *basis* keyword is only used when atoms (not molecules) are being
-created. It specifies an atom type that will be assigned to specific
-basis atoms as they are created. See the :doc:`lattice <lattice>`
-command for specifics on how basis atoms are defined for the unit cell
-of the lattice. By default, all created atoms are assigned the
-argument *type* as their atom type.
-
-The *remap* keyword only applies to the *single* style. If it is set
-to *yes*\ , then if the specified position is outside the simulation
-box, it will mapped back into the box, assuming the relevant
-dimensions are periodic. If it is set to *no*\ , no remapping is done
-and no particle is created if its position is outside the box.
-
-The *var* and *set* keywords can be used together to provide a
-criterion for accepting or rejecting the addition of an individual
-atom, based on its coordinates. The *name* specified for the *var*
-keyword is the name of an :doc:`equal-style variable <variable>` which
-should evaluate to a zero or non-zero value based on one or two or
-three variables which will store the x, y, or z coordinates of an atom
-(one variable per coordinate). If used, these other variables must be
-:doc:`internal-style variables <variable>` defined in the input script;
-their initial numeric value can be anything. They must be
-internal-style variables, because this command resets their values
-directly. The *set* keyword is used to identify the names of these
-other variables, one variable for the x-coordinate of a created atom,
-one for y, and one for z.
-
-When an atom is created, its x,y,z coordinates become the values for
-any *set* variable that is defined. The *var* variable is then
-evaluated. If the returned value is 0.0, the atom is not created. If
-it is non-zero, the atom is created.
-
-As an example, these commands can be used in a 2d simulation, to
-create a sinusoidal surface. Note that the surface is "rough" due to
-individual lattice points being "above" or "below" the mathematical
-expression for the sinusoidal curve. If a finer lattice were used,
-the sinusoid would appear to be "smoother". Also note the use of the
-"xlat" and "ylat" :doc:`thermo_style <thermo_style>` keywords which
-converts lattice spacings to distance. Click on the image for a
-larger version.
-
-.. parsed-literal::
-
- variable x equal 100
- variable y equal 25
- lattice hex 0.8442
- region box block 0 $x 0 $y -0.5 0.5
- create_box 1 box
-
-.. parsed-literal::
-
- variable xx equal 0.0
- variable yy equal 0.0
- variable v equal "(0.2*v_y*ylat * cos(v_xx/xlat * 2.0*PI*4.0/v_x) + 0.5*v_y*ylat - v_yy) > 0.0"
- create_atoms 1 box var v set x xx set y yy
-
-.. thumbnail:: JPG/sinusoid.jpg
- :align: center
-
-The *rotate* keyword can be used with the *single* style, when adding
-a single molecule to specify the orientation at which the molecule is
-inserted. The axis of rotation is determined by the rotation vector
-(Rx,Ry,Rz) that goes through the insertion point. The specified
-*theta* determines the angle of rotation around that axis. Note that
-the direction of rotation for the atoms around the rotation axis is
-consistent with the right-hand rule: if your right-hand's thumb points
-along *R*\ , then your fingers wrap around the axis in the direction of
-rotation.
-
-The *units* keyword determines the meaning of the distance units used
-to specify the coordinates of the one particle created by the *single*
-style. A *box* value selects standard distance units as defined by
-the :doc:`units <units>` command, e.g. Angstroms for units = real or
-metal. A *lattice* value means the distance units are in lattice
-spacings.
-
-
-----------
-
-
-Atom IDs are assigned to created atoms in the following way. The
-collection of created atoms are assigned consecutive IDs that start
-immediately following the largest atom ID existing before the
-create_atoms command was invoked. When a simulation is performed on
-different numbers of processors, there is no guarantee a particular
-created atom will be assigned the same ID. If molecules are being
-created, molecule IDs are assigned to created molecules in a similar
-fashion.
-
-Aside from their ID, atom type, and xyz position, other properties of
-created atoms are set to default values, depending on which quantities
-are defined by the chosen :doc:`atom style <atom_style>`. See the :doc:`atom style <atom_style>` command for more details. See the
-:doc:`set <set>` and :doc:`velocity <velocity>` commands for info on how
-to change these values.
-
-* charge = 0.0
-* dipole moment magnitude = 0.0
-* diameter = 1.0
-* shape = 0.0 0.0 0.0
-* density = 1.0
-* volume = 1.0
-* velocity = 0.0 0.0 0.0
-* angular velocity = 0.0 0.0 0.0
-* angular momentum = 0.0 0.0 0.0
-* quaternion = (1,0,0,0)
-* bonds, angles, dihedrals, impropers = none
-
-If molecules are being created, these defaults can be overridden by
-values specified in the file read by the :doc:`molecule <molecule>`
-command. E.g. the file typically defines bonds (angles,etc) between
-atoms in the molecule, and can optionally define charges on each atom.
-
-Note that the *sphere* atom style sets the default particle diameter
-to 1.0 as well as the density. This means the mass for the particle
-is not 1.0, but is PI/6 * diameter^3 = 0.5236.
-
-Note that the *ellipsoid* atom style sets the default particle shape
-to (0.0 0.0 0.0) and the density to 1.0 which means it is a point
-particle, not an ellipsoid, and has a mass of 1.0.
-
-Note that the *peri* style sets the default volume and density to 1.0
-and thus also set the mass for the particle to 1.0.
-
-The :doc:`set <set>` command can be used to override many of these
-default settings.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-An :doc:`atom_style <atom_style>` must be previously defined to use this
-command.
-
-A rotation vector specified for a single molecule must be in
-the z-direction for a 2d model.
-
-Related commands
-""""""""""""""""
-
-:doc:`lattice <lattice>`, :doc:`region <region>`, :doc:`create_box <create_box>`,
-:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`
-
-Default
-"""""""
-
-The default for the *basis* keyword is that all created atoms are
-assigned the argument *type* as their atom type (when single atoms are
-being created). The other defaults are *remap* = no, *rotate* =
-random, and *units* = lattice.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/create_bonds.txt b/doc/html/_sources/create_bonds.txt
deleted file mode 100644
index 17e5fd91e..000000000
--- a/doc/html/_sources/create_bonds.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-.. index:: create_bonds
-
-create_bonds command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- create_bonds group-ID group2-ID btype rmin rmax
-
-* group-ID = ID of first group
-* group2-ID = ID of second group, bonds will be between atoms in the 2 groups
-* 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
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- create_bonds all all 1 1.0 1.2
- create_bonds surf solvent 3 2.0 2.4
-
-Description
-"""""""""""
-
-Create bonds between pairs of atoms that meet specified distance
-criteria. The bond interactions can then be computed during a
-simulation by the bond potential defined by the
-:doc:`bond_style <bond_style>` and :doc:`bond_coeff <bond_coeff>`
-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
-:doc:`read_data <read_data>` command.
-
-Note that 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 create all the bonds that would
-normally be defined in a complex system of molecules. Also note that
-this command does not add any 3-body or 4-body interactions which,
-depending on your model, may be induced by added bonds,
-e.g. :doc:`angle <angle_style>`, :doc:`dihedral <dihedral_style>`, or
-:doc:`improper <improper_style>` interactions.
-
-All created bonds will be 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. This maximum value is set by the "bond types"
-field in the header of the data file read by the
-:doc:`read_data <read_data>` command, or via the optional "bond/types"
-argument of the :doc:`create_box <create_box>` command.
-
-For a bond to be created, an I,J pair of atoms must be a distance D
-apart such that *rmin* <= D <= *rmax*\ .
-
-The following settings must have been made in an input
-script before this command is used:
-
-* special_bonds weight for 1-2 interactions must be 0.0
-* a :doc:`pair_style <pair_style>` must be defined
-* no :doc:`kspace_style <kspace_style>` defined
-* minimum :doc:`pair_style <pair_style>` cutoff + :doc:`neighbor <neighbor>` skin >= *rmax*
-
-These settings are required so that a neighbor list can be created to
-search for nearby atoms. Pairs of atoms that are already bonded
-cannot appear in the neighbor list, to avoid creation of duplicate
-bonds. The neighbor list for all atom type pairs must also extend to
-a distance that encompasses the *rmax* for new bonds to create.
-
-An additional requirement is that your system must be ready to perform
-a simulation. This means, for example, that all
-:doc:`pair_style <pair_style>` coefficients be set via the
-:doc:`pair_coeff <pair_coeff>` command. A :doc:`bond_style <bond_style>`
-command and all bond coefficients must also be set, even if no bonds
-exist before this command is invoked. This is because the building of
-neighbor list requires initialization and setup of a simulation,
-similar to what a :doc:`run <run>` command would require.
-
-Note that you can change any of these settings after this command
-executes, e.g. if you wish to use long-range Coulombic interactions
-via the :doc:`kspace_style <kspace_style>` command for your subsequent
-simulation.
-
-.. note::
-
- If the system has no bonds 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. Otherwise an error may occur when too
- many bonds are added to an atom. If the :doc:`read_data <read_data>`
- 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
- section of the data file. If the :doc:`create_box <create_box>` command
- is used to define the system, these 2 parameters can be set via its
- optional "bond/types" and "extra/bond/per/atom" arguments. See the
- doc pages for the 2 commands for details.
-
-Restrictions
-""""""""""""
-
-
-This command cannot be used with molecular systems defined using
-molecule template files via the :doc:`molecule <molecule>` and
-:doc:`atom_style template <atom_style>` commands.
-
-Related commands
-""""""""""""""""
-
-:doc:`create_atoms <create_atoms>`, :doc:`delete_bonds <delete_bonds>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/create_box.txt b/doc/html/_sources/create_box.txt
deleted file mode 100644
index f48fcd718..000000000
--- a/doc/html/_sources/create_box.txt
+++ /dev/null
@@ -1,167 +0,0 @@
-.. index:: create_box
-
-create_box command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- create_box N region-ID keyword value ...
-
-* N = # of atom types to use in this simulation
-* region-ID = ID of region to use as simulation domain
-* zero or more keyword/value pairs may be appended
-* keyword = *bond/types* or *angle/types* or *dihedral/types* or *improper/types* or *extra/bond/per/atom* or *extra/angle/per/atom* or *extra/dihedral/per/atom* or *extra/improper/per/atom*
-.. parsed-literal::
-
- *bond/types* value = # of bond types
- *angle/types* value = # of angle types
- *dihedral/types* value = # of dihedral types
- *improper/types* value = # of improper types
- *extra/bond/per/atom* value = # of bonds per atom
- *extra/angle/per/atom* value = # of angles per atom
- *extra/dihedral/per/atom* value = # of dihedrals per atom
- *extra/improper/per/atom* value = # of impropers per atom
- *extra/special/per/atom* value = # of special neighbors per atom
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- create_box 2 mybox
- create_box 2 mybox bond/types 2 extra/bond/per/atom 1
-
-Description
-"""""""""""
-
-This command creates a simulation box based on the specified region.
-Thus a :doc:`region <region>` command must first be used to define a
-geometric domain. It also partitions the simulation box into a
-regular 3d grid of rectangular bricks, one per processor, based on the
-number of processors being used and the settings of the
-:doc:`processors <processors>` command. The partitioning can later be
-changed by the :doc:`balance <balance>` or :doc:`fix balance <fix_balance>` commands.
-
-The argument N is the number of atom types that will be used in the
-simulation.
-
-If the region is not of style *prism*\ , then LAMMPS encloses the region
-(block, sphere, etc) with an axis-aligned orthogonal bounding box
-which becomes the simulation domain.
-
-If the region is of style *prism*\ , LAMMPS creates a non-orthogonal
-simulation domain shaped as a parallelepiped with triclinic symmetry.
-As defined by the :doc:`region prism <region>` command, the
-parallelepiped has its "origin" at (xlo,ylo,zlo) and is defined by 3
-edge vectors starting from the origin given by A = (xhi-xlo,0,0); B =
-(xy,yhi-ylo,0); C = (xz,yz,zhi-zlo). *Xy,xz,yz* can be 0.0 or
-positive or negative values and are called "tilt factors" because they
-are the amount of displacement applied to faces of an originally
-orthogonal box to transform it into the parallelipiped.
-
-By default, a *prism* region used with the create_box command must
-have tilt factors (xy,xz,yz) that do not skew the box more than half
-the distance of the parallel box length. For example, if xlo = 2 and
-xhi = 12, then the x box length is 10 and the xy tilt factor must be
-between -5 and 5. Similarly, both xz and yz must be between
--(xhi-xlo)/2 and +(yhi-ylo)/2. Note that this is not a limitation,
-since if the maximum tilt factor is 5 (as in this example), then
-configurations with tilt = ..., -15, -5, 5, 15, 25, ... are all
-geometrically equivalent. If you wish to define a box with tilt
-factors that exceed these limits, you can use the :doc:`box tilt <box>`
-command, with a setting of *large*\ ; a setting of *small* is the
-default.
-
-See :ref:`Section_howto 12 <howto_12>` of the doc pages
-for a geometric description of triclinic boxes, as defined by LAMMPS,
-and how to transform these parameters to and from other commonly used
-triclinic representations.
-
-When a prism region is used, the simulation domain should normally be
-periodic in the dimension that the tilt is applied to, which is given
-by the second dimension of the tilt factor (e.g. y for xy tilt). This
-is so that pairs of atoms interacting across that boundary will have
-one of them shifted by the tilt factor. Periodicity is set by the
-:doc:`boundary <boundary>` command. For example, if the xy tilt factor
-is non-zero, then the y dimension should be periodic. Similarly, the
-z dimension should be periodic if xz or yz is non-zero. LAMMPS does
-not require this periodicity, but you may lose atoms if this is not
-the case.
-
-Also note that if your simulation will tilt the box, e.g. via the :doc:`fix deform <fix_deform>` command, the simulation box must be setup to
-be triclinic, even if the tilt factors are initially 0.0. You can
-also change an orthogonal box to a triclinic box or vice versa by
-using the :doc:`change box <change_box>` command with its *ortho* and
-*triclinic* options.
-
-.. note::
-
- If the system is non-periodic (in a dimension), then you should
- not make the lo/hi box dimensions (as defined in your
- :doc:`region <region>` command) radically smaller/larger than the extent
- of the atoms you eventually plan to create, e.g. via the
- :doc:`create_atoms <create_atoms>` command. For example, if your atoms
- extend from 0 to 50, you should not specify the box bounds as -10000
- and 10000. This is because as described above, LAMMPS uses the
- specified box size to layout the 3d grid of processors. A huge
- (mostly empty) box will be sub-optimal for performance when using
- "fixed" boundary conditions (see the :doc:`boundary <boundary>`
- command). When using "shrink-wrap" boundary conditions (see the
- :doc:`boundary <boundary>` command), a huge (mostly empty) box may cause
- a parallel simulation to lose atoms the first time that LAMMPS
- shrink-wraps the box around the atoms.
-
-
-----------
-
-
-The optional keywords can be used to create a system that allows for
-bond (angle, dihedral, improper) interactions, or for molecules with
-special 1-2,1-3,1-4 neighbors to be added later. These optional
-keywords serve the same purpose as the analogous keywords that can be
-used in a data file which are recognized by the
-:doc:`read_data <read_data>` command when it sets up a system.
-
-Note that if these keywords are not used, then the create_box command
-creates an atomic (non-molecular) simulation that does not allow bonds
-between pairs of atoms to be defined, or a :doc:`bond potential <bond_style>` to be specified, or for molecules with
-special neighbors to be added to the system by commands such as
-:doc:`create_atoms mol <create_atoms>`, :doc:`fix deposit <fix_deposit>`
-or :doc:`fix pour <fix_pour>`.
-
-As an example, see the examples/deposit/in.deposit.molecule script,
-which deposits molecules onto a substrate. Initially there are no
-molecules in the system, but they are added later by the :doc:`fix deposit <fix_deposit>` command. The create_box command in the
-script uses the bond/types and extra/bond/per/atom keywords to allow
-this. If the added molecule contained more than 1 special bond
-(allowed by default), an extra/special/per/atom keyword would also
-need to be specified.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-An :doc:`atom_style <atom_style>` and :doc:`region <region>` must have
-been previously defined to use this command.
-
-Related commands
-""""""""""""""""
-
-:doc:`read_data <read_data>`, :doc:`create_atoms <create_atoms>`,
-:doc:`region <region>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/delete_atoms.txt b/doc/html/_sources/delete_atoms.txt
deleted file mode 100644
index a8dad9ff1..000000000
--- a/doc/html/_sources/delete_atoms.txt
+++ /dev/null
@@ -1,163 +0,0 @@
-.. index:: delete_atoms
-
-delete_atoms command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- delete_atoms style args keyword value ...
-
-* style = *group* or *region* or *overlap* or *porosity*
-.. parsed-literal::
-
- *group* args = group-ID
- *region* args = region-ID
- *overlap* args = cutoff group1-ID group2-ID
- cutoff = delete one atom from pairs of atoms within the cutoff (distance units)
- group1-ID = one atom in pair must be in this group
- group2-ID = other atom in pair must be in this group
- *porosity* args = region-ID fraction seed
- region-ID = region within which to perform deletions
- fraction = delete this fraction of atoms
- seed = random number seed (positive integer)
-
-* zero or more keyword/value pairs may be appended
-* keyword = *compress* or *bond* or *mol*
-.. parsed-literal::
-
- *compress* value = *no* or *yes*
- *bond* value = *no* or *yes*
- *mol* value = *no* or *yes*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- delete_atoms group edge
- delete_atoms region sphere compress no
- delete_atoms overlap 0.3 all all
- delete_atoms overlap 0.5 solvent colloid
- delete_atoms porosity cube 0.1 482793 bond yes
-
-Description
-"""""""""""
-
-Delete the specified atoms. This command can be used to carve out
-voids from a block of material or to delete created atoms that are too
-close to each other (e.g. at a grain boundary).
-
-For style *group*\ , all atoms belonging to the group are deleted.
-
-For style *region*\ , all atoms in the region volume are deleted.
-Additional atoms can be deleted if they are in a molecule for which
-one or more atoms were deleted within the region; see the *mol*
-keyword discussion below.
-
-For style *overlap* pairs of atoms whose distance of separation is
-within the specified cutoff distance are searched for, and one of the
-2 atoms is deleted. Only pairs where one of the two atoms is in the
-first group specified and the other atom is in the second group are
-considered. The atom that is in the first group is the one that is
-deleted.
-
-Note that it is OK for the two group IDs to be the same (e.g. group
-*all*\ ), or for some atoms to be members of both groups. In these
-cases, either atom in the pair may be deleted. Also note that if
-there are atoms which are members of both groups, the only guarantee
-is that at the end of the deletion operation, enough deletions will
-have occurred that no atom pairs within the cutoff will remain
-(subject to the group restriction). There is no guarantee that the
-minimum number of atoms will be deleted, or that the same atoms will
-be deleted when running on different numbers of processors.
-
-For style *porosity* a specified *fraction* of atoms are deleted
-within the specified region. For example, if fraction is 0.1, then
-10% of the atoms will be deleted. The atoms to delete are chosen
-randomly. There is no guarantee that the exact fraction of atoms will
-be deleted, or that the same atoms will be deleted when running on
-different numbers of processors.
-
-If the *compress* keyword is set to *yes*\ , then after atoms are
-deleted, then atom IDs are re-assigned so that they run from 1 to the
-number of atoms in the system. Note that this is not done for
-molecular systems (see the :doc:`atom_style <atom_style>` command),
-regardless of the *compress* setting, since it would foul up the bond
-connectivity that has already been assigned.
-
-A molecular system with fixed bonds, angles, dihedrals, or improper
-interactions, is one where the topology of the interactions is
-typically defined in the data file read by the
-:doc:`read_data <read_data>` command, and where the interactions
-themselves are defined with the :doc:`bond_style <bond_style>`,
-:doc:`angle_style <angle_style>`, etc commands. If you delete atoms
-from such a system, you must be careful not to end up with bonded
-interactions that are stored by remaining atoms but which include
-deleted atoms. This will cause LAMMPS to generate a "missing atoms"
-error when the bonded interaction is computed. The *bond* and *mol*
-keywords offer two ways to do that.
-
-It the *bond* keyword is set to *yes* then any bond or angle or
-dihedral or improper interaction that includes a deleted atom is also
-removed from the lists of such interactions stored by non-deleted
-atoms. Note that simply deleting interactions due to dangling bonds
-(e.g. at a surface) may result in a inaccurate or invalid model for
-the remaining atoms.
-
-It the *mol* keyword is set to *yes*\ , then for every atom that is
-deleted, all other atoms in the same molecule (with the same molecule
-ID) will also be deleted. This is not done for atoms with molecule ID
-= 0, since such an ID is assumed to flag isolated atoms that are not
-part of molecules.
-
-.. note::
-
- The molecule deletion operation in invoked after all individual
- atoms have been deleted using the rules described above for each
- style. This means additional atoms may be deleted that are not in the
- group or region, that are not required by the overlap cutoff
- criterion, or that will create a higher fraction of porosity than was
- requested.
-
-Restrictions
-""""""""""""
-
-
-The *overlap* styles requires inter-processor communication to acquire
-ghost atoms and build a neighbor list. This means that your system
-must be ready to perform a simulation before using this command (force
-fields setup, atom masses set, etc). Since a neighbor list is used to
-find overlapping atom pairs, it also means that you must define a
-:doc:`pair style <pair_style>` with the minimum force cutoff distance
-between any pair of atoms types (plus the :doc:`neighbor <neighbor>`
-skin) >= the specified overlap cutoff.
-
-If the :doc:`special_bonds <special_bonds>` command is used with a
-setting of 0, then a pair of bonded atoms (1-2, 1-3, or 1-4) will not
-appear in the neighbor list, and thus will not be considered for
-deletion by the *overlap* styles. You probably don't want to be
-deleting one atom in a bonded pair anyway.
-
-The *bond yes* option cannot be used with molecular systems defined
-using molecule template files via the :doc:`molecule <molecule>` and
-:doc:`atom_style template <atom_style>` commands.
-
-Related commands
-""""""""""""""""
-
-:doc:`create_atoms <create_atoms>`
-
-Default
-"""""""
-
-The option defaults are compress = yes, bond = no, mol = no.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/delete_bonds.txt b/doc/html/_sources/delete_bonds.txt
deleted file mode 100644
index bdc5bfc6d..000000000
--- a/doc/html/_sources/delete_bonds.txt
+++ /dev/null
@@ -1,165 +0,0 @@
-.. index:: delete_bonds
-
-delete_bonds command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- delete_bonds group-ID style arg keyword ...
-
-* group-ID = group ID
-* style = *multi* or *atom* or *bond* or *angle* or *dihedral* or
- *improper* or *stats*
-.. parsed-literal::
-
- *multi* arg = none
- *atom* arg = an atom type or range of types (see below)
- *bond* arg = a bond type or range of types (see below)
- *angle* arg = an angle type or range of types (see below)
- *dihedral* arg = a dihedral type or range of types (see below)
- *improper* arg = an improper type or range of types (see below)
- *stats* arg = none
-
-* zero or more keywords may be appended
-* keyword = *any* or *undo* or *remove* or *special*
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- delete_bonds frozen multi remove
- delete_bonds all atom 4 special
- delete_bonds all bond 0*3 special
- delete_bonds all stats
-
-Description
-"""""""""""
-
-Turn off (or on) molecular topology interactions, i.e. bonds, angles,
-dihedrals, impropers. This command is useful for deleting
-interactions that have been previously turned off by bond-breaking
-potentials. It is also useful for turning off topology interactions
-between frozen or rigid atoms. Pairwise interactions can be turned
-off via the :doc:`neigh_modify exclude <neigh_modify>` command. The
-:doc:`fix shake <fix_shake>` command also effectively turns off certain
-bond and angle interactions.
-
-For all styles, by default, an interaction is only turned off (or on)
-if all the atoms involved are in the specified group. See the *any*
-keyword to change the behavior.
-
-Several of the styles (\ *atom*\ , *bond*\ , *angle*\ , *dihedral*\ ,
-*improper*\ ) take a *type* as an argument. The specified *type* should
-be an integer from 0 to N, where N is the number of relevant types
-(atom types, bond types, etc). A value of 0 is only relevant for
-style *bond*\ ; see details below. In all cases, a wildcard asterisk
-can be used in place of or in conjunction with the *type* argument to
-specify a range of types. This takes the form "*" or "*n" or "n*" or
-"m*n". If N = the number of types, then an asterisk with no numeric
-values means all types from 0 to N. A leading asterisk means all
-types from 0 to n (inclusive). A trailing asterisk means all types
-from n to N (inclusive). A middle asterisk means all types from m to
-n (inclusive). Note that it is fine to include a type of 0 for
-non-bond styles; it will simply be ignored.
-
-For style *multi* all bond, angle, dihedral, and improper interactions
-of any type, involving atoms in the group, are turned off.
-
-Style *atom* is the same as style *multi* except that in addition, one
-or more of the atoms involved in the bond, angle, dihedral, or
-improper interaction must also be of the specified atom type.
-
-For style *bond*\ , only bonds are candidates for turn-off, and the bond
-must also be of the specified type. Styles *angle*\ , *dihedral*\ , and
-*improper* are treated similarly.
-
-For style *bond*\ , you can set the type to 0 to delete bonds that have
-been previously broken by a bond-breaking potential (which sets the
-bond type to 0 when a bond is broken); e.g. see the :doc:`bond_style quartic <bond_style>` command.
-
-For style *stats* no interactions are turned off (or on); the status
-of all interactions in the specified group is simply reported. This
-is useful for diagnostic purposes if bonds have been turned off by a
-bond-breaking potential during a previous run.
-
-The default behavior of the delete_bonds command is to turn off
-interactions by toggling their type to a negative value, but not to
-permanently remove the interaction. E.g. a bond_type of 2 is set to
--2. The neighbor list creation routines will not include such an
-interaction in their interaction lists. The default is also to not
-alter the list of 1-2, 1-3, 1-4 neighbors computed by the
-:doc:`special_bonds <special_bonds>` command and used to weight pairwise
-force and energy calculations. This means that pairwise computations
-will proceed as if the bond (or angle, etc) were still turned on.
-
-Several keywords can be appended to the argument list to alter the
-default behaviors.
-
-The *any* keyword changes the requirement that all atoms in the bond
-(angle, etc) must be in the specified group in order to turn-off the
-interaction. Instead, if any of the atoms in the interaction are in
-the specified group, it will be turned off (or on if the *undo*
-keyword is used).
-
-The *undo* keyword inverts the delete_bonds command so that the
-specified bonds, angles, etc are turned on if they are currently
-turned off. This means a negative value is toggled to positive. For
-example, for style *angle*\ , if *type* is specified as 2, then all
-angles with current type = -2, are reset to type = 2. Note that the
-:doc:`fix shake <fix_shake>` command also sets bond and angle types
-negative, so this option should not be used on those interactions.
-
-The *remove* keyword is invoked at the end of the delete_bonds
-operation. It causes turned-off bonds (angles, etc) to be removed
-from each atom's data structure and then adjusts the global bond
-(angle, etc) counts accordingly. Removal is a permanent change;
-removed bonds cannot be turned back on via the *undo* keyword.
-Removal does not alter the pairwise 1-2, 1-3, 1-4 weighting list.
-
-The *special* keyword is invoked at the end of the delete_bonds
-operation, after (optional) removal. It re-computes the pairwise 1-2,
-1-3, 1-4 weighting list. The weighting list computation treats
-turned-off bonds the same as turned-on. Thus, turned-off bonds must
-be removed if you wish to change the weighting list.
-
-Note that the choice of *remove* and *special* options affects how
-1-2, 1-3, 1-4 pairwise interactions will be computed across bonds that
-have been modified by the delete_bonds command.
-
-Restrictions
-""""""""""""
-
-
-This command requires inter-processor communication to acquire ghost
-atoms, to coordinate the deleting of bonds, angles, etc between atoms
-shared by multiple processors. This means that your system must be
-ready to perform a simulation before using this command (force fields
-setup, atom masses set, etc). Just as would be needed to run
-dynamics, the force field you define should define a cutoff
-(e.g. through a :doc:`pair_style <pair_style>` command) which is long
-enough for a processor to acquire the ghost atoms its needs to compute
-bond, angle, etc interactions.
-
-If deleted bonds (angles, etc) are removed but the 1-2, 1-3, 1-4
-weighting list is not recomputed, this can cause a later :doc:`fix shake <fix_shake>` command to fail due to an atom's bonds being
-inconsistent with the weighting list. This should only happen if the
-group used in the fix command includes both atoms in the bond, in
-which case you probably should be recomputing the weighting list.
-
-Related commands
-""""""""""""""""
-
-:doc:`neigh_modify <neigh_modify>` exclude,
-:doc:`special_bonds <special_bonds>`, :doc:`fix shake <fix_shake>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dielectric.txt b/doc/html/_sources/dielectric.txt
deleted file mode 100644
index c9b09437e..000000000
--- a/doc/html/_sources/dielectric.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-.. index:: dielectric
-
-dielectric command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dielectric value
-
-* value = dielectric constant
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dielectric 2.0
-
-Description
-"""""""""""
-
-Set the dielectric constant for Coulombic interactions (pairwise and
-long-range) to this value. The constant is unitless, since it is used
-to reduce the strength of the interactions. The value is used in the
-denominator of the formulas for Coulombic interactions - e.g. a value
-of 4.0 reduces the Coulombic interactions to 25% of their default
-strength. See the :doc:`pair_style <pair_style>` command for more
-details.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style <pair_style>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- dielectric 1.0
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_charmm.txt b/doc/html/_sources/dihedral_charmm.txt
deleted file mode 100644
index 10ac9acb4..000000000
--- a/doc/html/_sources/dihedral_charmm.txt
+++ /dev/null
@@ -1,155 +0,0 @@
-.. index:: dihedral_style charmm
-
-dihedral_style charmm command
-=============================
-
-dihedral_style charmm/intel command
-===================================
-
-dihedral_style charmm/kk command
-================================
-
-dihedral_style charmm/omp command
-=================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style charmm
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style charmm
- dihedral_coeff 1 0.2 1 180 1.0
- dihedral_coeff 2 1.8 1 0 1.0
- dihedral_coeff 1 3.1 2 180 0.5
-
-Description
-"""""""""""
-
-The *charmm* dihedral style uses the potential
-
-.. image:: Eqs/dihedral_charmm.jpg
- :align: center
-
-See :ref:`(MacKerell) <dihedral-MacKerell>` for a description of the CHARMM
-force field. This dihedral style can also be used for the AMBER force
-field (see comment on weighting factors below). See
-:ref:`(Cornell) <dihedral-Cornell>` for a description of the AMBER force
-field.
-
-The following coefficients must be defined for each dihedral type via the
-:doc:`dihedral_coeff <dihedral_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy)
-* n (integer >= 0)
-* d (integer value of degrees)
-* weighting factor (1.0, 0.5, or 0.0)
-
-The weighting factor is required to correct for double counting
-pairwise non-bonded Lennard-Jones interactions in cyclic systems or
-when using the CHARMM dihedral style with non-CHARMM force fields.
-With the CHARMM dihedral style, interactions between the 1st and 4th
-atoms in a dihedral are skipped during the normal non-bonded force
-computation and instead evaluated as part of the dihedral using
-special epsilon and sigma values specified with the
-:doc:`pair_coeff <pair_charmm>` command of pair styles that contain
-"lj/charmm" (e.g. :doc:`pair_style lj/charmm/coul/long <pair_charmm>`)
-In 6-membered rings, the same 1-4 interaction would be computed twice
-(once for the clockwise 1-4 pair in dihedral 1-2-3-4 and once in the
-counterclockwise dihedral 1-6-5-4) and thus the weighting factor has
-to be 0.5 in this case. In 4-membered or 5-membered rings, the 1-4
-dihedral also is counted as a 1-2 or 1-3 interaction when going around
-the ring in the opposite direction and thus the weighting factor is
-0.0, as the 1-2 and 1-3 exclusions take precedence.
-
-Note that this dihedral weighting factor is unrelated to the scaling
-factor specified by the :doc:`special bonds <special_bonds>` command
-which applies to all 1-4 interactions in the system. For CHARMM force
-fields, the special_bonds 1-4 interaction scaling factor should be set
-to 0.0. Since the corresponding 1-4 non-bonded interactions are
-computed with the dihedral. This means that if any of the weighting
-factors defined as dihedral coefficients (4th coeff above) are
-non-zero, then you must use a pair style with "lj/charmm" and set the
-special_bonds 1-4 scaling factor to 0.0 (which is the
-default). Otherwise 1-4 non-bonded interactions in dihedrals will be
-computed twice.
-
-Also note that for AMBER force fields, which use pair styles with
-"lj/cut", the special_bonds 1-4 scaling factor should be set to the
-AMBER defaults (1/2 and 5/6) and all the dihedral weighting factors
-(4th coeff above) must be set to 0.0. In this case, you can use any
-pair style you wish, since the dihedral does not need any
-Lennard-Jones parameter information and will not compute any 1-4
-non-bonded interactions.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This dihedral style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _dihedral-Cornell:
-
-
-
-**(Cornell)** Cornell, Cieplak, Bayly, Gould, Merz, Ferguson,
-Spellmeyer, Fox, Caldwell, Kollman, JACS 117, 5179-5197 (1995).
-
-.. _dihedral-MacKerell:
-
-
-
-**(MacKerell)** MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field,
-Fischer, Gao, Guo, Ha, et al, J Phys Chem B, 102, 3586 (1998).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_class2.txt b/doc/html/_sources/dihedral_class2.txt
deleted file mode 100644
index e5f4c4bbe..000000000
--- a/doc/html/_sources/dihedral_class2.txt
+++ /dev/null
@@ -1,198 +0,0 @@
-.. index:: dihedral_style class2
-
-dihedral_style class2 command
-=============================
-
-dihedral_style class2/omp command
-=================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style class2
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style class2
- dihedral_coeff 1 100 75 100 70 80 60
- dihedral_coeff * mbt 3.5945 0.1704 -0.5490 1.5228
- dihedral_coeff * ebt 0.3417 0.3264 -0.9036 0.1368 0.0 -0.8080 1.0119 1.1010
- dihedral_coeff 2 at 0.0 -0.1850 -0.7963 -2.0220 0.0 -0.3991 110.2453 105.1270
- dihedral_coeff * aat -13.5271 110.2453 105.1270
- dihedral_coeff * bb13 0.0 1.0119 1.1010
-
-Description
-"""""""""""
-
-The *class2* dihedral style uses the potential
-
-.. image:: Eqs/dihedral_class2.jpg
- :align: center
-
-where Ed is the dihedral term, Embt is a middle-bond-torsion term,
-Eebt is an end-bond-torsion term, Eat is an angle-torsion term, Eaat
-is an angle-angle-torsion term, and Ebb13 is a bond-bond-13 term.
-
-Theta1 and theta2 are equilibrium angles and r1 r2 r3 are equilibrium
-bond lengths.
-
-See :ref:`(Sun) <dihedral-Sun>` for a description of the COMPASS class2 force field.
-
-Coefficients for the Ed, Embt, Eebt, Eat, Eaat, and Ebb13 formulas
-must be defined for each dihedral type via the
-:doc:`dihedral_coeff <dihedral_coeff>` command as in the example above,
-or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands.
-
-These are the 6 coefficients for the Ed formula:
-
-* K1 (energy)
-* phi1 (degrees)
-* K2 (energy)
-* phi2 (degrees)
-* K3 (energy)
-* phi3 (degrees)
-
-For the Embt formula, each line in a
-:doc:`dihedral_coeff <dihedral_coeff>` command in the input script lists
-5 coefficients, the first of which is "mbt" to indicate they are
-MiddleBondTorsion coefficients. In a data file, these coefficients
-should be listed under a "MiddleBondTorsion Coeffs" heading and you
-must leave out the "mbt", i.e. only list 4 coefficients after the
-dihedral type.
-
-* mbt
-* A1 (energy/distance)
-* A2 (energy/distance)
-* A3 (energy/distance)
-* r2 (distance)
-
-For the Eebt formula, each line in a
-:doc:`dihedral_coeff <dihedral_coeff>` command in the input script lists
-9 coefficients, the first of which is "ebt" to indicate they are
-EndBondTorsion coefficients. In a data file, these coefficients
-should be listed under a "EndBondTorsion Coeffs" heading and you must
-leave out the "ebt", i.e. only list 8 coefficients after the dihedral
-type.
-
-* ebt
-* B1 (energy/distance)
-* B2 (energy/distance)
-* B3 (energy/distance)
-* C1 (energy/distance)
-* C2 (energy/distance)
-* C3 (energy/distance)
-* r1 (distance)
-* r3 (distance)
-
-For the Eat formula, each line in a
-:doc:`dihedral_coeff <dihedral_coeff>` command in the input script lists
-9 coefficients, the first of which is "at" to indicate they are
-AngleTorsion coefficients. In a data file, these coefficients should
-be listed under a "AngleTorsion Coeffs" heading and you must leave out
-the "at", i.e. only list 8 coefficients after the dihedral type.
-
-* at
-* D1 (energy/radian)
-* D2 (energy/radian)
-* D3 (energy/radian)
-* E1 (energy/radian)
-* E2 (energy/radian)
-* E3 (energy/radian)
-* theta1 (degrees)
-* theta2 (degrees)
-
-Theta1 and theta2 are specified in degrees, but LAMMPS converts them
-to radians internally; hence the units of D and E are in
-energy/radian.
-
-For the Eaat formula, each line in a
-:doc:`dihedral_coeff <dihedral_coeff>` command in the input script lists
-4 coefficients, the first of which is "aat" to indicate they are
-AngleAngleTorsion coefficients. In a data file, these coefficients
-should be listed under a "AngleAngleTorsion Coeffs" heading and you
-must leave out the "aat", i.e. only list 3 coefficients after the
-dihedral type.
-
-* aat
-* M (energy/radian^2)
-* theta1 (degrees)
-* theta2 (degrees)
-
-Theta1 and theta2 are specified in degrees, but LAMMPS converts them
-to radians internally; hence the units of M are in energy/radian^2.
-
-For the Ebb13 formula, each line in a
-:doc:`dihedral_coeff <dihedral_coeff>` command in the input script lists
-4 coefficients, the first of which is "bb13" to indicate they are
-BondBond13 coefficients. In a data file, these coefficients should be
-listed under a "BondBond13 Coeffs" heading and you must leave out the
-"bb13", i.e. only list 3 coefficients after the dihedral type.
-
-* bb13
-* N (energy/distance^2)
-* r1 (distance)
-* r3 (distance)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This dihedral style can only be used if LAMMPS was built with the
-CLASS2 package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _dihedral-Sun:
-
-
-
-**(Sun)** Sun, J Phys Chem B 102, 7338-7364 (1998).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_coeff.txt b/doc/html/_sources/dihedral_coeff.txt
deleted file mode 100644
index 20aa5911c..000000000
--- a/doc/html/_sources/dihedral_coeff.txt
+++ /dev/null
@@ -1,130 +0,0 @@
-.. index:: dihedral_coeff
-
-dihedral_coeff command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_coeff N args
-
-* N = dihedral type (see asterisk form below)
-* args = coefficients for one or more dihedral types
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_coeff 1 80.0 1 3
- dihedral_coeff * 80.0 1 3 0.5
- dihedral_coeff 2* 80.0 1 3 0.5
-
-Description
-"""""""""""
-
-
-----------
-
-
-Specify the dihedral force field coefficients for one or more dihedral types.
-The number and meaning of the coefficients depends on the dihedral style.
-Dihedral coefficients can also be set in the data file read by the
-:doc:`read_data <read_data>` command or in a restart file.
-
-N can be specified in one of two ways. An explicit numeric value can
-be used, as in the 1st example above. Or a wild-card asterisk can be
-used to set the coefficients for multiple dihedral types. This takes the
-form "*" or "*n" or "n*" or "m*n". If N = the number of dihedral types,
-then an asterisk with no numeric values means all types from 1 to N. A
-leading asterisk means all types from 1 to n (inclusive). A trailing
-asterisk means all types from n to N (inclusive). A middle asterisk
-means all types from m to n (inclusive).
-
-Note that using a dihedral_coeff command can override a previous setting
-for the same dihedral type. For example, these commands set the coeffs
-for all dihedral types, then overwrite the coeffs for just dihedral type 2:
-
-.. parsed-literal::
-
- dihedral_coeff * 80.0 1 3
- dihedral_coeff 2 200.0 1 3
-
-A line in a data file that specifies dihedral coefficients uses the exact
-same format as the arguments of the dihedral_coeff command in an input
-script, except that wild-card asterisks should not be used since
-coefficients for all N types must be listed in the file. For example,
-under the "Dihedral Coeffs" section of a data file, the line that
-corresponds to the 1st example above would be listed as
-
-.. parsed-literal::
-
- 1 80.0 1 3
-
-The :doc:`dihedral_style class2 <dihedral_class2>` is an exception to
-this rule, in that an additional argument is used in the input script
-to allow specification of the cross-term coefficients. See its doc
-page for details.
-
-.. note::
-
- When comparing the formulas and coefficients for various LAMMPS
- dihedral styles with dihedral equations defined by other force fields,
- note that some force field implementations divide/multiply the energy
- prefactor *K* by the multiple number of torsions that contain the J-K
- bond in an I-J-K-L torsion. LAMMPS does not do this, i.e. the listed
- dihedral equation applies to each individual dihedral. Thus you need
- to define *K* appropriately to account for this difference if
- necessary.
-
-
-----------
-
-
-Here is an alphabetic list of dihedral styles defined in LAMMPS. Click on
-the style to display the formula it computes and coefficients
-specified by the associated :doc:`dihedral_coeff <dihedral_coeff>` command.
-
-Note that there are also additional dihedral styles submitted by users
-which are included in the LAMMPS distribution. The list of these with
-links to the individual styles are given in the dihedral section of
-:ref:`this page <cmd_5>`.
-
-* :doc:`dihedral_style none <dihedral_none>` - turn off dihedral interactions
-* :doc:`dihedral_style hybrid <dihedral_hybrid>` - define multiple styles of dihedral interactions
-
-* :doc:`dihedral_style charmm <dihedral_charmm>` - CHARMM dihedral
-* :doc:`dihedral_style class2 <dihedral_class2>` - COMPASS (class 2) dihedral
-* :doc:`dihedral_style harmonic <dihedral_harmonic>` - harmonic dihedral
-* :doc:`dihedral_style helix <dihedral_helix>` - helix dihedral
-* :doc:`dihedral_style multi/harmonic <dihedral_multi_harmonic>` - multi-harmonic dihedral
-* :doc:`dihedral_style opls <dihedral_opls>` - OPLS dihedral
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command must come after the simulation box is defined by a
-:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`, or
-:doc:`create_box <create_box>` command.
-
-A dihedral style must be defined before any dihedral coefficients are
-set, either in the input script or in a data file.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_style <dihedral_style>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_cosine_shift_exp.txt b/doc/html/_sources/dihedral_cosine_shift_exp.txt
deleted file mode 100644
index 69ba415e0..000000000
--- a/doc/html/_sources/dihedral_cosine_shift_exp.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-.. index:: dihedral_style cosine/shift/exp
-
-dihedral_style cosine/shift/exp command
-=======================================
-
-dihedral_style cosine/shift/exp/omp command
-===========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style cosine/shift/exp
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style cosine/shift/exp
- dihedral_coeff 1 10.0 45.0 2.0
-
-Description
-"""""""""""
-
-The *cosine/shift/exp* dihedral style uses the potential
-
-.. image:: Eqs/dihedral_cosine_shift_exp.jpg
- :align: center
-
-where Umin, theta, and a are defined for each dihedral type.
-
-The potential is bounded between [-Umin:0] and the minimum is located
-at the angle theta0. The a parameter can be both positive or negative
-and is used to control the spring constant at the equilibrium.
-
-The spring constant is given by k=a exp(a) Umin/ [2 (Exp(a)-1)].
-For a>3 k/Umin = a/2 to better than 5% relative error. For negative
-values of the a parameter, the spring constant is essentially zero,
-and anharmonic terms takes over. The potential is furthermore well
-behaved in the limit a->0, where it has been implemented to linear
-order in a for a < 0.001.
-
-The following coefficients must be defined for each dihedral type via
-the :doc:`dihedral_coeff <dihedral_coeff>` command as in the example
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* umin (energy)
-* theta (angle)
-* A (real number)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This dihedral style can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`,
-:doc:`angle_cosine_shift_exp <angle_cosine_shift_exp>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_fourier.txt b/doc/html/_sources/dihedral_fourier.txt
deleted file mode 100644
index 44434b747..000000000
--- a/doc/html/_sources/dihedral_fourier.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-.. index:: dihedral_style fourier
-
-dihedral_style fourier command
-==============================
-
-dihedral_style fourier/omp command
-==================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style fourier
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style fourier
- dihedral_coeff 1 3 -0.846200 3 0.0 7.578800 1 0 0.138000 2 -180.0
-
-Description
-"""""""""""
-
-The *fourier* dihedral style uses the potential:
-
-.. image:: Eqs/dihedral_fourier.jpg
- :align: center
-
-The following coefficients must be defined for each dihedral type via the
-:doc:`dihedral_coeff <dihedral_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* m (integer >=1)
-* K1 (energy)
-* n1 (integer >= 0)
-* d1 (degrees)
-* ....
-* Km (energy)
-* nm (integer >= 0)
-* dm (degrees)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER_MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_harmonic.txt b/doc/html/_sources/dihedral_harmonic.txt
deleted file mode 100644
index 211beaf4d..000000000
--- a/doc/html/_sources/dihedral_harmonic.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-.. index:: dihedral_style harmonic
-
-dihedral_style harmonic command
-===============================
-
-dihedral_style harmonic/intel command
-=====================================
-
-dihedral_style harmonic/omp command
-===================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style harmonic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style harmonic
- dihedral_coeff 1 80.0 1 2
-
-Description
-"""""""""""
-
-The *harmonic* dihedral style uses the potential
-
-.. image:: Eqs/dihedral_harmonic.jpg
- :align: center
-
-The following coefficients must be defined for each dihedral type via the
-:doc:`dihedral_coeff <dihedral_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K (energy)
-* d (+1 or -1)
-* n (integer >= 0)
-
-.. note::
-
- Here are important points to take note of when defining LAMMPS
- dihedral coefficients for the harmonic style, so that they are
- compatible with how harmonic dihedrals are defined by other force
- fields:
-
-* The LAMMPS convention is that the trans position = 180 degrees, while
- in some force fields trans = 0 degrees.
-* Some force fields reverse the sign convention on *d*\ .
-* Some force fields let *n* be positive or negative which corresponds to
- *d* = 1 or -1 for the harmonic style.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This dihedral style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_helix.txt b/doc/html/_sources/dihedral_helix.txt
deleted file mode 100644
index 7c9da182d..000000000
--- a/doc/html/_sources/dihedral_helix.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-.. index:: dihedral_style helix
-
-dihedral_style helix command
-============================
-
-dihedral_style helix/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style helix
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style helix
- dihedral_coeff 1 80.0 100.0 40.0
-
-Description
-"""""""""""
-
-The *helix* dihedral style uses the potential
-
-.. image:: Eqs/dihedral_helix.jpg
- :align: center
-
-This coarse-grain dihedral potential is described in :ref:`(Guo) <Guo>`.
-For dihedral angles in the helical region, the energy function is
-represented by a standard potential consisting of three minima, one
-corresponding to the trans (t) state and the other to gauche states
-(g+ and g-). The paper describes how the A,B,C parameters are chosen
-so as to balance secondary (largely driven by local interactions) and
-tertiary structure (driven by long-range interactions).
-
-The following coefficients must be defined for each dihedral type via the
-:doc:`dihedral_coeff <dihedral_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* A (energy)
-* B (energy)
-* C (energy)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This dihedral style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Guo:
-
-
-
-**(Guo)** Guo and Thirumalai, Journal of Molecular Biology, 263, 323-43 (1996).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_hybrid.txt b/doc/html/_sources/dihedral_hybrid.txt
deleted file mode 100644
index e47b9efff..000000000
--- a/doc/html/_sources/dihedral_hybrid.txt
+++ /dev/null
@@ -1,110 +0,0 @@
-.. index:: dihedral_style hybrid
-
-dihedral_style hybrid command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style hybrid style1 style2 ...
-
-* style1,style2 = list of one or more dihedral styles
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style hybrid harmonic helix
- dihedral_coeff 1 harmonic 6.0 1 3
- dihedral_coeff 2* helix 10 10 10
-
-Description
-"""""""""""
-
-The *hybrid* style enables the use of multiple dihedral styles in one
-simulation. An dihedral style is assigned to each dihedral type. For
-example, dihedrals in a polymer flow (of dihedral type 1) could be
-computed with a *harmonic* potential and dihedrals in the wall
-boundary (of dihedral type 2) could be computed with a *helix*
-potential. The assignment of dihedral type to style is made via the
-:doc:`dihedral_coeff <dihedral_coeff>` command or in the data file.
-
-In the dihedral_coeff commands, the name of a dihedral style must be
-added after the dihedral type, with the remaining coefficients being
-those appropriate to that style. In the example above, the 2
-dihedral_coeff commands set dihedrals of dihedral type 1 to be
-computed with a *harmonic* potential with coefficients 6.0, 1, 3 for
-K, d, n. All other dihedral types (2-N) are computed with a *helix*
-potential with coefficients 10, 10, 10 for A, B, C.
-
-If dihedral coefficients are specified in the data file read via the
-:doc:`read_data <read_data>` command, then the same rule applies.
-E.g. "harmonic" or "helix", must be added after the dihedral type, for
-each line in the "Dihedral Coeffs" section, e.g.
-
-.. parsed-literal::
-
- Dihedral Coeffs
-
-.. parsed-literal::
-
- 1 harmonic 6.0 1 3
- 2 helix 10 10 10
- ...
-
-If *class2* is one of the dihedral hybrid styles, the same rule holds
-for specifying additional AngleTorsion (and EndBondTorsion, etc)
-coefficients either via the input script or in the data file.
-I.e. *class2* must be added to each line after the dihedral type. For
-lines in the AngleTorsion (or EndBondTorsion, etc) section of the data
-file for dihedral types that are not *class2*\ , you must use an
-dihedral style of *skip* as a placeholder, e.g.
-
-.. parsed-literal::
-
- AngleTorsion Coeffs
-
-.. parsed-literal::
-
- 1 skip
- 2 class2 1.0 1.0 1.0 3.0 3.0 3.0 30.0 50.0
- ...
-
-Note that it is not necessary to use the dihedral style *skip* in the
-input script, since AngleTorsion (or EndBondTorsion, etc) coefficients
-need not be specified at all for dihedral types that are not *class2*\ .
-
-A dihedral style of *none* with no additional coefficients can be used
-in place of a dihedral style, either in a input script dihedral_coeff
-command or in the data file, if you desire to turn off interactions
-for specific dihedral types.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This dihedral style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Unlike other dihedral styles, the hybrid dihedral style does not store
-dihedral coefficient info for individual sub-styles in a :doc:`binary restart files <restart>`. Thus when retarting a simulation from a
-restart file, you need to re-specify dihedral_coeff commands.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_multi_harmonic.txt b/doc/html/_sources/dihedral_multi_harmonic.txt
deleted file mode 100644
index db635a586..000000000
--- a/doc/html/_sources/dihedral_multi_harmonic.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-.. index:: dihedral_style multi/harmonic
-
-dihedral_style multi/harmonic command
-=====================================
-
-dihedral_style multi/harmonic/omp command
-=========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style multi/harmonic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style multi/harmonic
- dihedral_coeff 1 20 20 20 20 20
-
-Description
-"""""""""""
-
-The *multi/harmonic* dihedral style uses the potential
-
-.. image:: Eqs/dihedral_multi_harmonic.jpg
- :align: center
-
-The following coefficients must be defined for each dihedral type via the
-:doc:`dihedral_coeff <dihedral_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* A1 (energy)
-* A2 (energy)
-* A3 (energy)
-* A4 (energy)
-* A5 (energy)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This dihedral style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_nharmonic.txt b/doc/html/_sources/dihedral_nharmonic.txt
deleted file mode 100644
index 13732c237..000000000
--- a/doc/html/_sources/dihedral_nharmonic.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-.. index:: dihedral_style nharmonic
-
-dihedral_style nharmonic command
-================================
-
-dihedral_style nharmonic/omp command
-====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style nharmonic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style nharmonic
- dihedral_coeff 3 10.0 20.0 30.0
-
-Description
-"""""""""""
-
-The *nharmonic* dihedral style uses the potential:
-
-.. image:: Eqs/dihedral_nharmonic.jpg
- :align: center
-
-The following coefficients must be defined for each dihedral type via the
-:doc:`dihedral_coeff <dihedral_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* n (integer >=1)
-* A1 (energy)
-* A2 (energy)
-* ...
-* An (energy)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER_MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_none.txt b/doc/html/_sources/dihedral_none.txt
deleted file mode 100644
index bb7b5d835..000000000
--- a/doc/html/_sources/dihedral_none.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-.. index:: dihedral_style none
-
-dihedral_style none command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style none
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style none
-
-Description
-"""""""""""
-
-Using a dihedral style of none means dihedral forces and energies are
-not computed, even if quadruplets of dihedral atoms were listed in the
-data file read by the :doc:`read_data <read_data>` command.
-
-See the :doc:`dihedral_style zero <dihedral_zero>` command for a way to
-calculate dihedral statistics, but compute no dihedral interactions.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_style zero <dihedral_zero>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_opls.txt b/doc/html/_sources/dihedral_opls.txt
deleted file mode 100644
index 9fb87d242..000000000
--- a/doc/html/_sources/dihedral_opls.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-.. index:: dihedral_style opls
-
-dihedral_style opls command
-===========================
-
-dihedral_style opls/intel command
-=================================
-
-dihedral_style opls/kk command
-==============================
-
-dihedral_style opls/omp command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style opls
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style opls
- dihedral_coeff 1 1.740 -0.157 0.279 0.00 # CT-CT-CT-CT
- dihedral_coeff 2 0.000 0.000 0.366 0.000 # CT-CT-CT-HC
- dihedral_coeff 3 0.000 0.000 0.318 0.000 # HC-CT-CT-HC
-
-Description
-"""""""""""
-
-The *opls* dihedral style uses the potential
-
-.. image:: Eqs/dihedral_opls.jpg
- :align: center
-
-Note that the usual 1/2 factor is not included in the K values.
-
-This dihedral potential is used in the OPLS force field and is
-described in :ref:`(Watkins) <Watkins>`.
-
-The following coefficients must be defined for each dihedral type via the
-:doc:`dihedral_coeff <dihedral_coeff>` command as in the example above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* K1 (energy)
-* K2 (energy)
-* K3 (energy)
-* K4 (energy)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This dihedral style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Watkins:
-
-
-
-**(Watkins)** Watkins and Jorgensen, J Phys Chem A, 105, 4118-4125 (2001).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_quadratic.txt b/doc/html/_sources/dihedral_quadratic.txt
deleted file mode 100644
index 11d1fbac2..000000000
--- a/doc/html/_sources/dihedral_quadratic.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-.. index:: dihedral_style quadratic
-
-dihedral_style quadratic command
-================================
-
-dihedral_style quadratic/omp command
-====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style quadratic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style quadratic
- dihedral_coeff 100.0 80.0
-
-Description
-"""""""""""
-
-The *quadratic* dihedral style uses the potential:
-
-.. image:: Eqs/dihedral_quadratic.jpg
- :align: center
-
-This dihedral potential can be used to keep a dihedral in a predefined
-value (cis=zero, right-hand convention is used).
-
-The following coefficients must be defined for each dihedral type via
-the :doc:`dihedral_coeff <dihedral_coeff>` command as in the example
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* K (energy/radian^2)
-* phi0 (degrees)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER_MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_spherical.txt b/doc/html/_sources/dihedral_spherical.txt
deleted file mode 100644
index 0a6fb9442..000000000
--- a/doc/html/_sources/dihedral_spherical.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-.. index:: dihedral_style spherical
-
-dihedral_style spherical command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style spherical
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- 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 &
- 17.3 0 0.0 0 1 158 1 0 0.0 0 &
- 15.1 0 0.0 0 0 0.0 0 1 167.3 1
-
-Description
-"""""""""""
-
-The *spherical* dihedral style uses the potential:
-
-.. image:: JPG/dihedral_spherical_angles.jpg
- :align: center
-
-.. image:: Eqs/dihedral_spherical.jpg
- :align: center
-
-For this dihedral style, the energy can be any function that combines the
-4-body dihedral-angle (phi) and the two 3-body bond-angles (theta1, theta2).
-For this reason, there is usually no need to define 3-body "angle" forces
-separately for the atoms participating in these interactions.
-It is probably more efficient to incorporate 3-body angle forces into
-the dihedral interaction even if it requires adding additional terms to
-the expansion (as was done in the second example). A careful choice of
-parameters can prevent singularities that occur with traditional
-force-fields whenever theta1 or theta2 approach 0 or 180 degrees.
-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
-numerically stable at all angles (phi, theta1, theta2). In this example,
-the coefficients 17.3, and 15.1 can be physically interpreted as the
-harmonic spring constants for theta1 and theta2 around their minima.
-The coefficient 286.1 is the harmonic spring constant for phi after
-division by sin(158)*sin(167.3) (the minima positions for theta1 and theta2).
-
-The following coefficients must be defined for each dihedral type via the
-:doc:`dihedral_coeff <dihedral_coeff>` command as in the example above, or in
-the Dihedral Coeffs section of a data file file read by the
-:doc:`read_data <read_data>` command:
-
-* n (integer >= 1)
-* C1 (energy)
-* K1 (typically an integer)
-* a1 (degrees)
-* u1 (typically 0.0 or 1.0)
-* L1 (typically an integer)
-* b1 (degrees, typically 0.0 or 90.0)
-* v1 (typically 0.0 or 1.0)
-* M1 (typically an integer)
-* c1 (degrees, typically 0.0 or 90.0)
-* w1 (typically 0.0 or 1.0)
-* ....
-* Cn (energy)
-* Kn (typically an integer)
-* an (degrees)
-* un (typically 0.0 or 1.0)
-* Ln (typically an integer)
-* bn (degrees, typically 0.0 or 90.0)
-* vn (typically 0.0 or 1.0)
-* Mn (typically an integer)
-* cn (degrees, typically 0.0 or 90.0)
-* wn (typically 0.0 or 1.0)
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This dihedral style can only be used if LAMMPS was built with the
-USER_MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_style.txt b/doc/html/_sources/dihedral_style.txt
deleted file mode 100644
index 66bbdf3f0..000000000
--- a/doc/html/_sources/dihedral_style.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-.. index:: dihedral_style
-
-dihedral_style command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style style
-
-* style = *none* or *hybrid* or *charmm* or *class2* or *harmonic* or *helix* or *multi/harmonic* or *opls*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style harmonic
- dihedral_style multi/harmonic
- dihedral_style hybrid harmonic charmm
-
-Description
-"""""""""""
-
-Set the formula(s) LAMMPS uses to compute dihedral interactions
-between quadruplets of atoms, which remain in force for the duration
-of the simulation. The list of dihedral quadruplets is read in by a
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>` command
-from a data or restart file.
-
-Hybrid models where dihedrals are computed using different dihedral
-potentials can be setup using the *hybrid* dihedral style.
-
-The coefficients associated with a dihedral style can be specified in
-a data or restart file or via the :doc:`dihedral_coeff <dihedral_coeff>`
-command.
-
-All dihedral potentials store their coefficient data in binary restart
-files which means dihedral_style and
-:doc:`dihedral_coeff <dihedral_coeff>` commands do not need to be
-re-specified in an input script that restarts a simulation. See the
-:doc:`read_restart <read_restart>` command for details on how to do
-this. The one exception is that dihedral_style *hybrid* only stores
-the list of sub-styles in the restart file; dihedral coefficients need
-to be re-specified.
-
-.. note::
-
- When both a dihedral and pair style is defined, the
- :doc:`special_bonds <special_bonds>` command often needs to be used to
- turn off (or weight) the pairwise interaction that would otherwise
- exist between 4 bonded atoms.
-
-In the formulas listed for each dihedral style, *phi* is the torsional
-angle defined by the quadruplet of atoms. This angle has a sign
-convention as shown in this diagram:
-
-.. image:: JPG/dihedral_sign.jpg
- :align: center
-
-where the I,J,K,L ordering of the 4 atoms that define the dihedral
-is from left to right.
-
-This sign convention effects several of the dihedral styles listed
-below (e.g. charmm, helix) in the sense that the energy formula
-depends on the sign of phi, which may be reflected in the value of the
-coefficients you specify.
-
-.. note::
-
- When comparing the formulas and coefficients for various LAMMPS
- dihedral styles with dihedral equations defined by other force fields,
- note that some force field implementations divide/multiply the energy
- prefactor *K* by the multiple number of torsions that contain the J-K
- bond in an I-J-K-L torsion. LAMMPS does not do this, i.e. the listed
- dihedral equation applies to each individual dihedral. Thus you need
- to define *K* appropriately via the
- :doc:`dihedral_coeff <dihedral_coeff>` command to account for this
- difference if necessary.
-
-
-----------
-
-
-Here is an alphabetic list of dihedral styles defined in LAMMPS. Click on
-the style to display the formula it computes and coefficients
-specified by the associated :doc:`dihedral_coeff <dihedral_coeff>` command.
-
-Note that there are also additional dihedral styles submitted by users
-which are included in the LAMMPS distribution. The list of these with
-links to the individual styles are given in the dihedral section of
-:ref:`this page <cmd_5>`.
-
-* :doc:`dihedral_style none <dihedral_none>` - turn off dihedral interactions
-* :doc:`dihedral_style zero <dihedral_zero>` - topology but no interactions
-* :doc:`dihedral_style hybrid <dihedral_hybrid>` - define multiple styles of dihedral interactions
-
-* :doc:`dihedral_style charmm <dihedral_charmm>` - CHARMM dihedral
-* :doc:`dihedral_style class2 <dihedral_class2>` - COMPASS (class 2) dihedral
-* :doc:`dihedral_style harmonic <dihedral_harmonic>` - harmonic dihedral
-* :doc:`dihedral_style helix <dihedral_helix>` - helix dihedral
-* :doc:`dihedral_style multi/harmonic <dihedral_multi_harmonic>` - multi-harmonic dihedral
-* :doc:`dihedral_style opls <dihedral_opls>` - OPLS dihedral
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-Dihedral styles can only be set for atom styles that allow dihedrals
-to be defined.
-
-Most dihedral styles are part of the MOLECULE package. They are only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-The doc pages for individual dihedral potentials tell if it is part of
-a package.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-Default
-"""""""
-
-dihedral_style none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_table.txt b/doc/html/_sources/dihedral_table.txt
deleted file mode 100644
index 87f146afa..000000000
--- a/doc/html/_sources/dihedral_table.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-.. index:: dihedral_style table
-
-dihedral_style table command
-============================
-
-dihedral_style table/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style table style Ntable
-
-* style = *linear* or *spline* = method of interpolation
-* Ntable = size of the internal lookup table
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style table spline 400
- dihedral_style table linear 1000
- dihedral_coeff 1 file.table DIH_TABLE1
- dihedral_coeff 2 file.table DIH_TABLE2
-
-Description
-"""""""""""
-
-The *table* dihedral style creates interpolation tables of length
-*Ntable* from dihedral potential and derivative values listed in a
-file(s) as a function of the dihedral angle "phi". The files are read
-by the :doc:`dihedral_coeff <dihedral_coeff>` command.
-
-The interpolation tables are created by fitting cubic splines to the
-file values and interpolating energy and derivative values at each of
-*Ntable* dihedral angles. During a simulation, these tables are used
-to interpolate energy and force values on individual atoms as
-needed. The interpolation is done in one of 2 styles: *linear* or
-*spline*\ .
-
-For the *linear* style, the dihedral angle (phi) is used to find 2
-surrounding table values from which an energy or its derivative is
-computed by linear interpolation.
-
-For the *spline* style, cubic spline coefficients are computed and
-stored at each of the *Ntable* evenly-spaced values in the
-interpolated table. For a given dihedral angle (phi), the appropriate
-coefficients are chosen from this list, and a cubic polynomial is used
-to compute the energy and the derivative at this angle.
-
-The following coefficients must be defined for each dihedral type via
-the :doc:`dihedral_coeff <dihedral_coeff>` command as in the example
-above.
-
-* filename
-* keyword
-
-The filename specifies a file containing tabulated energy and
-derivative values. The keyword specifies a section of the file. The
-format of this file is described below.
-
-
-----------
-
-
-The format of a tabulated file is as follows (without the
-parenthesized comments). It can begin with one or more comment
-or blank lines.
-
-.. parsed-literal::
-
- # Table of the potential and its negative derivative
-
-.. parsed-literal::
-
- DIH_TABLE1 (keyword is the first text on line)
- N 30 DEGREES (N, NOF, DEGREES, RADIANS, CHECKU/F)
- (blank line)
- 1 -168.0 -1.40351172223 0.0423346818422
- 2 -156.0 -1.70447981034 0.00811786522531
- 3 -144.0 -1.62956100432 -0.0184129719987
- ...
- 30 180.0 -0.707106781187 0.0719306095245
-
-.. parsed-literal::
-
- # Example 2: table of the potential. Forces omitted
-
-.. parsed-literal::
-
- DIH_TABLE2
- N 30 NOF CHECKU testU.dat CHECKF testF.dat
-
-.. parsed-literal::
-
- 1 -168.0 -1.40351172223
- 2 -156.0 -1.70447981034
- 3 -144.0 -1.62956100432
- ...
- 30 180.0 -0.707106781187
-
-A section begins with a non-blank line whose 1st character is not a
-"#"; blank lines or lines starting with "#" can be used as comments
-between sections. The first line begins with a keyword which
-identifies the section. The line can contain additional text, but the
-initial text must match the argument specified in the
-:doc:`dihedral_coeff <dihedral_coeff>` command. The next line lists (in
-any order) one or more parameters for the table. Each parameter is a
-keyword followed by one or more numeric values.
-
-Following a blank line, the next N lines list the tabulated values. On
-each line, the 1st value is the index from 1 to N, the 2nd value is
-the angle value, the 3rd value is the energy (in energy units), and
-the 4th is -dE/d(phi) also in energy units). The 3rd term is the
-energy of the 4-atom configuration for the specified angle. The 4th
-term (when present) is the negative derivative of the energy with
-respect to the angle (in degrees, or radians depending on whether the
-user selected DEGREES or RADIANS). Thus the units of the last term
-are still energy, not force. The dihedral angle values must increase
-from one line to the next.
-
-Dihedral table splines are cyclic. There is no discontinuity at 180
-degrees (or at any other angle). Although in the examples above, the
-angles range from -180 to 180 degrees, in general, the first angle in
-the list can have any value (positive, zero, or negative). However
-the *range* of angles represented in the table must be *strictly* less
-than 360 degrees (2pi radians) to avoid angle overlap. (You may not
-supply entries in the table for both 180 and -180, for example.) If
-the user's table covers only a narrow range of dihedral angles,
-strange numerical behavior can occur in the large remaining gap.
-
-**Parameters:**
-
-The parameter "N" is required and its value is the number of table
-entries that follow. Note that this may be different than the N
-specified in the :doc:`dihedral_style table <dihedral_style>` command.
-Let *Ntable* is the number of table entries requested dihedral_style
-command, and let *Nfile* be the parameter following "N" in the
-tabulated file ("30" in the sparse example above). What LAMMPS does
-is a preliminary interpolation by creating splines using the *Nfile*
-tabulated values as nodal points. It uses these to interpolate as
-needed to generate energy and derivative values at *Ntable* different
-points (which are evenly spaced over a 360 degree range, even if the
-angles in the file are not). The resulting tables of length *Ntable*
-are then used as described above, when computing energy and force for
-individual dihedral angles and their atoms. This means that if you
-want the interpolation tables of length *Ntable* to match exactly what
-is in the tabulated file (with effectively nopreliminary
-interpolation), you should set *Ntable* = *Nfile*\ . To insure the
-nodal points in the user's file are aligned with the interpolated
-table entries, the angles in the table should be integer multiples of
-360/\ *Ntable* degrees, or 2*PI/\ *Ntable* radians (depending on your
-choice of angle units).
-
-The optional "NOF" keyword allows the user to omit the forces
-(negative energy derivatives) from the table file (normally located in
-the 4th column). In their place, forces will be calculated
-automatically by differentiating the potential energy function
-indicated by the 3rd column of the table (using either linear or
-spline interpolation).
-
-The optional "DEGREES" keyword allows the user to specify angles in
-degrees instead of radians (default).
-
-The optional "RADIANS" keyword allows the user to specify angles in
-radians instead of degrees. (Note: This changes the way the forces
-are scaled in the 4th column of the data file.)
-
-The optional "CHECKU" keyword is followed by a filename. This allows
-the user to save all of the the *Ntable* different entries in the
-interpolated energy table to a file to make sure that the interpolated
-function agrees with the user's expectations. (Note: You can
-temporarily increase the *Ntable* parameter to a high value for this
-purpose. "\ *Ntable*\ " is explained above.)
-
-The optional "CHECKF" keyword is analogous to the "CHECKU" keyword.
-It is followed by a filename, and it allows the user to check the
-interpolated force table. This option is available even if the user
-selected the "NOF" option.
-
-Note that one file can contain many sections, each with a tabulated
-potential. LAMMPS reads the file section by section until it finds one
-that matches the specified keyword.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_6>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restrictions
-""""""""""""
-
-
-This dihedral style can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <2_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`dihedral_coeff <dihedral_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dihedral_zero.txt b/doc/html/_sources/dihedral_zero.txt
deleted file mode 100644
index c49d19f9c..000000000
--- a/doc/html/_sources/dihedral_zero.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-.. index:: dihedral_style zero
-
-dihedral_style zero command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dihedral_style zero *nocoeff*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dihedral_style zero
- dihedral_style zero nocoeff
- dihedral_coeff *
-
-Description
-"""""""""""
-
-Using a dihedral style of zero means dihedral forces and energies are
-not computed, but the geometry of dihedral quadruplets is still
-accessible to other commands.
-
-As an example, the :doc:`compute dihedral/local <compute_dihedral_local>` command can be used to
-compute the theta values for the list of quadruplets of dihedral atoms
-listed in the data file read by the :doc:`read_data <read_data>`
-command. If no dihedral style is defined, this command cannot be
-used.
-
-The optional *nocoeff* flag allows to read data files with a DihedralCoeff
-section for any dihedral style. Similarly, any dihedral_coeff commands
-will only be checked for the dihedral type number and the rest ignored.
-
-Note that the :doc:`dihedral_coeff <dihedral_coeff>` command must be
-used for all dihedral types, though no additional values are
-specified.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-:doc:`dihedral_style none <dihedral_none>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dimension.txt b/doc/html/_sources/dimension.txt
deleted file mode 100644
index 2a421360b..000000000
--- a/doc/html/_sources/dimension.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-.. index:: dimension
-
-dimension command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dimension N
-
-* N = 2 or 3
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dimension 2
-
-Description
-"""""""""""
-
-Set the dimensionality of the simulation. By default LAMMPS runs 3d
-simulations. To run a 2d simulation, this command should be used
-prior to setting up a simulation box via the
-:doc:`create_box <create_box>` or :doc:`read_data <read_data>` commands.
-Restart files also store this setting.
-
-See the discussion in :doc:`Section_howto <Section_howto>` for
-additional instructions on how to run 2d simulations.
-
-.. note::
-
- Some models in LAMMPS treat particles as finite-size spheres or
- ellipsoids, as opposed to point particles. In 2d, the particles will
- still be spheres or ellipsoids, not circular disks or ellipses,
- meaning their moment of inertia will be the same as in 3d.
-
-Restrictions
-""""""""""""
-
-
-This command must be used before the simulation box is defined by a
-:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix enforce2d <fix_enforce2d>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- dimension 3
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/displace_atoms.txt b/doc/html/_sources/displace_atoms.txt
deleted file mode 100644
index 79cc5570c..000000000
--- a/doc/html/_sources/displace_atoms.txt
+++ /dev/null
@@ -1,163 +0,0 @@
-.. index:: displace_atoms
-
-displace_atoms command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- displace_atoms group-ID style args keyword value ...
-
-* group-ID = ID of group of atoms to displace
-* style = *move* or *ramp* or *random* or *rotate*
-.. parsed-literal::
-
- *move* args = delx dely delz
- delx,dely,delz = distance to displace in each dimension (distance units)
- any of delx,dely,delz can be a variable (see below)
- *ramp* args = ddim dlo dhi dim clo chi
- ddim = *x* or *y* or *z*
- dlo,dhi = displacement distance between dlo and dhi (distance units)
- dim = *x* or *y* or *z*
- clo,chi = lower and upper bound of domain to displace (distance units)
- *random* args = dx dy dz seed
- dx,dy,dz = random displacement magnitude in each dimension (distance units)
- seed = random # seed (positive integer)
- *rotate* args = Px Py Pz Rx Ry Rz theta
- Px,Py,Pz = origin point of axis of rotation (distance units)
- Rx,Ry,Rz = axis of rotation vector
- theta = angle of rotation (degrees)
-
-* zero or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *units*
- value = *box* or *lattice*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- displace_atoms top move 0 -5 0 units box
- displace_atoms flow ramp x 0.0 5.0 y 2.0 20.5
-
-Description
-"""""""""""
-
-Displace a group of atoms. This can be used to move atoms a large
-distance before beginning a simulation or to randomize atoms initially
-on a lattice. For example, in a shear simulation, an initial strain
-can be imposed on the system. Or two groups of atoms can be brought
-into closer proximity.
-
-The *move* style displaces the group of atoms by the specified 3d
-displacement vector. Any of the 3 quantities defining the vector
-components can be specified as an equal-style or atom-style
-:doc:`variable <variable>`. If the value is a variable, it should be
-specified as v_name, where name is the variable name. In this case,
-the variable will be evaluated, and its value(s) used for the
-displacement(s). The scale factor implied by the *units* keyword will
-also be applied to the variable result.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Atom-style variables can specify the same formulas as
-equal-style variables but can also include per-atom values, such as
-atom coordinates or per-atom values read from a file. Note that if
-the variable references other :doc:`compute <compute>` or :doc:`fix <fix>`
-commands, those values must be up-to-date for the current timestep.
-See the "Variable Accuracy" section of the :doc:`variable <variable>`
-doc page for more details.
-
-The *ramp* style displaces atoms a variable amount in one dimension
-depending on the atom's coordinate in a (possibly) different
-dimension. For example, the second example command displaces atoms in
-the x-direction an amount between 0.0 and 5.0 distance units. Each
-atom's displacement depends on the fractional distance its y
-coordinate is between 2.0 and 20.5. Atoms with y-coordinates outside
-those bounds will be moved the minimum (0.0) or maximum (5.0) amount.
-
-The *random* style independently moves each atom in the group by a
-random displacement, uniformly sampled from a value between -dx and
-+dx in the x dimension, and similarly for y and z. Random numbers are
-used in such a way that the displacement of a particular atom is the
-same, regardless of how many processors are being used.
-
-The *rotate* style rotates each atom in the group by the angle *theta*
-around a rotation axis *R* = (Rx,Ry,Rz) that goes thru a point *P* =
-(Px,Py,Pz). The direction of rotation for the atoms around the
-rotation axis is consistent with the right-hand rule: if your
-right-hand thumb points along *R*\ , then your fingers wrap around the
-axis in the direction of positive theta.
-
-If the defined :doc:`atom_style <atom_style>` assigns an orientation to
-each atom (:doc:`atom styles <atom_style>` ellipsoid, line, tri, body),
-then that property is also updated appropriately to correspond to the
-atom's rotation.
-
-Distance units for displacements and the origin point of the *rotate*
-style are determined by the setting of *box* or *lattice* for the
-*units* keyword. *Box* means distance units as defined by the
-:doc:`units <units>` command - e.g. Angstroms for *real* units.
-*Lattice* means distance units are in lattice spacings. The
-:doc:`lattice <lattice>` command must have been previously used to
-define the lattice spacing.
-
-
-----------
-
-
-.. note::
-
- Care should be taken not to move atoms on top of other atoms.
- After the move, atoms are remapped into the periodic simulation box if
- needed, and any shrink-wrap boundary conditions (see the
- :doc:`boundary <boundary>` command) are enforced which may change the
- box size. Other than this effect, this command does not change the
- size or shape of the simulation box. See the
- :doc:`change_box <change_box>` command if that effect is desired.
-
-.. note::
-
- Atoms can be moved arbitrarily long distances by this command.
- If the simulation box is non-periodic and shrink-wrapped (see the
- :doc:`boundary <boundary>` command), this can change its size or shape.
- This is not a problem, except that the mapping of processors to the
- simulation box is not changed by this command from its initial 3d
- configuration; see the :doc:`processors <processors>` command. Thus, if
- the box size/shape changes dramatically, the mapping of processors to
- the simulation box may not end up as optimal as the initial mapping
- attempted to be.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-For a 2d simulation, only rotations around the a vector parallel to
-the z-axis are allowed.
-
-Related commands
-""""""""""""""""
-
-:doc:`lattice <lattice>`, :doc:`change_box <change_box>`,
-:doc:`fix move <fix_move>`
-
-Default
-"""""""
-
-The option defaults are units = lattice.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dump.txt b/doc/html/_sources/dump.txt
deleted file mode 100644
index 151986688..000000000
--- a/doc/html/_sources/dump.txt
+++ /dev/null
@@ -1,739 +0,0 @@
-.. index:: dump
-
-dump command
-============
-
-:doc:`dump custom/vtk <dump_custom_vtk>` command
-================================================
-
-:doc:`dump h5md <dump_h5md>` command
-====================================
-
-:doc:`dump image <dump_image>` command
-======================================
-
-:doc:`dump movie <dump_image>` command
-======================================
-
-:doc:`dump molfile <dump_molfile>` command
-==========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dump ID group-ID style N file args
-
-* ID = user-assigned name for the dump
-* group-ID = ID of the group of atoms to be dumped
-* style = *atom* or *atom/gz* or *atom/mpiio* or *cfg* or *cfg/gz* or *cfg/mpiio* or *dcd* or *xtc* or *xyz* or *xyz/gz* or *xyz/mpiio* or *h5md* or *image* or *movie* or *molfile* or *local* or *custom* or *custom/gz* or *custom/mpiio*
-* N = dump every this many timesteps
-* file = name of file to write dump info to
-* args = list of arguments for a particular style
-.. parsed-literal::
-
- *atom* args = none
- *atom/gz* args = none
- *atom/mpiio* args = none
- *cfg* args = same as *custom* args, see below
- *cfg/gz* args = same as *custom* args, see below
- *cfg/mpiio* args = same as *custom* args, see below
- *dcd* args = none
- *xtc* args = none
- *xyz* args = none
-
-.. parsed-literal::
-
- *xyz/gz* args = none
-
-.. parsed-literal::
-
- *xyz/mpiio* args = none
-
-.. parsed-literal::
-
- *custom/vtk* args = similar to custom args below, discussed on :doc:`dump custom/vtk <dump_custom_vtk>` doc page
-
-.. parsed-literal::
-
- *h5md* args = discussed on :doc:`dump h5md <dump_h5md>` doc page
-
-.. parsed-literal::
-
- *image* args = discussed on :doc:`dump image <dump_image>` doc page
-
-.. parsed-literal::
-
- *movie* args = discussed on :doc:`dump image <dump_image>` doc page
-
-.. parsed-literal::
-
- *molfile* args = discussed on :doc:`dump molfile <dump_molfile>` doc page
-
-.. parsed-literal::
-
- *local* args = list of local attributes
- possible attributes = index, c_ID, c_ID[I], f_ID, f_ID[I]
- index = enumeration of local values
- c_ID = local vector calculated by a compute with ID
- c_ID[I] = Ith column of local array calculated by a compute with ID, I can include wildcard (see below)
- f_ID = local vector calculated by a fix with ID
- f_ID[I] = Ith column of local array calculated by a fix with ID, I can include wildcard (see below)
-
-.. parsed-literal::
-
- *custom* or *custom/gz* or *custom/mpiio* args = list of atom attributes
- possible attributes = id, mol, proc, procp1, type, element, mass,
- x, y, z, xs, ys, zs, xu, yu, zu,
- xsu, ysu, zsu, ix, iy, iz,
- vx, vy, vz, fx, fy, fz,
- q, mux, muy, muz, mu,
- radius, diameter, omegax, omegay, omegaz,
- angmomx, angmomy, angmomz, tqx, tqy, tqz,
- c_ID, c_ID[N], f_ID, f_ID[N], v_name
-
-.. parsed-literal::
-
- id = atom ID
- mol = molecule ID
- proc = ID of processor that owns atom
- procp1 = ID+1 of processor that owns atom
- type = atom type
- element = name of atom element, as defined by :doc:`dump_modify <dump_modify>` command
- mass = atom mass
- x,y,z = unscaled atom coordinates
- xs,ys,zs = scaled atom coordinates
- xu,yu,zu = unwrapped atom coordinates
- xsu,ysu,zsu = scaled unwrapped atom coordinates
- ix,iy,iz = box image that the atom is in
- vx,vy,vz = atom velocities
- fx,fy,fz = forces on atoms
- q = atom charge
- mux,muy,muz = orientation of dipole moment of atom
- mu = magnitude of dipole moment of atom
- radius,diameter = radius,diameter of spherical particle
- omegax,omegay,omegaz = angular velocity of spherical particle
- angmomx,angmomy,angmomz = angular momentum of aspherical particle
- tqx,tqy,tqz = torque on finite-size particles
- c_ID = per-atom vector calculated by a compute with ID
- c_ID[I] = Ith column of per-atom array calculated by a compute with ID, I can include wildcard (see below)
- f_ID = per-atom vector calculated by a fix with ID
- f_ID[I] = Ith column of per-atom array calculated by a fix with ID, I can include wildcard (see below)
- v_name = per-atom vector calculated by an atom-style variable with name
- d_name = per-atom floating point vector with name, managed by fix property/atom
- i_name = per-atom integer vector with name, managed by fix property/atom
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dump myDump all atom 100 dump.atom
- dump myDump all atom/mpiio 100 dump.atom.mpiio
- dump myDump all atom/gz 100 dump.atom.gz
- dump 2 subgroup atom 50 dump.run.bin
- dump 2 subgroup atom 50 dump.run.mpiio.bin
- dump 4a all custom 100 dump.myforce.* id type x y vx fx
- dump 4b flow custom 100 dump.%.myforce id type c_myF[3] v_ke
- dump 4b flow custom 100 dump.%.myforce id type c_myF[*] v_ke
- dump 2 inner cfg 10 dump.snap.*.cfg mass type xs ys zs vx vy vz
- dump snap all cfg 100 dump.config.*.cfg mass type xs ys zs id type c_Stress[2]
- dump 1 all xtc 1000 file.xtc
-
-Description
-"""""""""""
-
-Dump a snapshot of atom quantities to one or more files every N
-timesteps in one of several styles. The *image* and *movie* styles are
-the exception: the *image* style renders a JPG, PNG, or PPM image file
-of the atom configuration every N timesteps while the *movie* style
-combines and compresses them into a movie file; both are discussed in
-detail on the :doc:`dump image <dump_image>` doc page. The timesteps on
-which dump output is written can also be controlled by a variable.
-See the :doc:`dump_modify every <dump_modify>` command.
-
-Only information for atoms in the specified group is dumped. The
-:doc:`dump_modify thresh and region <dump_modify>` commands can also
-alter what atoms are included. Not all styles support all these
-options; see details below.
-
-As described below, the filename determines the kind of output (text
-or binary or gzipped, one big file or one per timestep, one big file
-or multiple smaller files).
-
-.. note::
-
- Because periodic boundary conditions are enforced only on
- timesteps when neighbor lists are rebuilt, the coordinates of an atom
- written to a dump file may be slightly outside the simulation box.
- Re-neighbor timesteps will not typically coincide with the timesteps
- dump snapshots are written. See the :doc:`dump_modify pbc <dump_modify>` command if you with to force coordinates to be
- strictly inside the simulation box.
-
-.. note::
-
- Unless the :doc:`dump_modify sort <dump_modify>` option is
- invoked, the lines of atom information written to dump files
- (typically one line per atom) will be in an indeterminate order for
- each snapshot. This is even true when running on a single processor,
- if the :doc:`atom_modify sort <atom_modify>` option is on, which it is
- by default. In this case atoms are re-ordered periodically during a
- simulation, due to spatial sorting. It is also true when running in
- parallel, because data for a single snapshot is collected from
- multiple processors, each of which owns a subset of the atoms.
-
-For the *atom*\ , *custom*\ , *cfg*\ , and *local* styles, sorting is off by
-default. For the *dcd*\ , *xtc*\ , *xyz*\ , and *molfile* styles, sorting by
-atom ID is on by default. See the :doc:`dump_modify <dump_modify>` doc
-page for details.
-
-The *atom/gz*\ , *cfg/gz*\ , *custom/gz*\ , and *xyz/gz* styles are identical
-in command syntax to the corresponding styles without "gz", however,
-they generate compressed files using the zlib library. Thus the filename
-suffix ".gz" is mandatory. This is an alternative approach to writing
-compressed files via a pipe, as done by the regular dump styles, which
-may be required on clusters where the interface to the high-speed network
-disallows using the fork() library call (which is needed for a pipe).
-For the remainder of this doc page, you should thus consider the *atom*
-and *atom/gz* styles (etc) to be inter-changeable, with the exception
-of the required filename suffix.
-
-As explained below, the *atom/mpiio*\ , *cfg/mpiio*\ , *custom/mpiio*\ , and
-*xyz/mpiio* styles are identical in command syntax and in the format
-of the dump files they create, to the corresponding styles without
-"mpiio", except the single dump file they produce is written in
-parallel via the MPI-IO library. For the remainder of this doc page,
-you should thus consider the *atom* and *atom/mpiio* styles (etc) to
-be inter-changeable. The one exception is how the filename is
-specified for the MPI-IO styles, as explained below.
-
-The precision of values output to text-based dump files can be
-controlled by the :doc:`dump_modify format <dump_modify>` command and
-its options.
-
-
-----------
-
-
-The *style* keyword determines what atom quantities are written to the
-file and in what format. Settings made via the
-:doc:`dump_modify <dump_modify>` command can also alter the format of
-individual values and the file itself.
-
-The *atom*\ , *local*\ , and *custom* styles create files in a simple text
-format that is self-explanatory when viewing a dump file. Many of the
-LAMMPS :doc:`post-processing tools <Section_tools>`, including
-`Pizza.py <http://www.sandia.gov/~sjplimp/pizza.html>`_, work with this
-format, as does the :doc:`rerun <rerun>` command.
-
-For post-processing purposes the *atom*\ , *local*\ , and *custom* text
-files are self-describing in the following sense.
-
-The dimensions of the simulation box are included in each snapshot.
-For an orthogonal simulation box this information is is formatted as:
-
-.. parsed-literal::
-
- ITEM: BOX BOUNDS xx yy zz
- xlo xhi
- ylo yhi
- zlo zhi
-
-where xlo,xhi are the maximum extents of the simulation box in the
-x-dimension, and similarly for y and z. The "xx yy zz" represent 6
-characters that encode the style of boundary for each of the 6
-simulation box boundaries (xlo,xhi and ylo,yhi and zlo,zhi). Each of
-the 6 characters is either p = periodic, f = fixed, s = shrink wrap,
-or m = shrink wrapped with a minimum value. See the
-:doc:`boundary <boundary>` command for details.
-
-For triclinic simulation boxes (non-orthogonal), an orthogonal
-bounding box which encloses the triclinic simulation box is output,
-along with the 3 tilt factors (xy, xz, yz) of the triclinic box,
-formatted as follows:
-
-.. parsed-literal::
-
- ITEM: BOX BOUNDS xy xz yz xx yy zz
- xlo_bound xhi_bound xy
- ylo_bound yhi_bound xz
- zlo_bound zhi_bound yz
-
-The presence of the text "xy xz yz" in the ITEM line indicates that
-the 3 tilt factors will be included on each of the 3 following lines.
-This bounding box is convenient for many visualization programs. The
-meaning of the 6 character flags for "xx yy zz" is the same as above.
-
-Note that the first two numbers on each line are now xlo_bound instead
-of xlo, etc, since they repesent a bounding box. See :ref:`this section <howto_12>` of the doc pages for a geometric
-description of triclinic boxes, as defined by LAMMPS, simple formulas
-for how the 6 bounding box extents (xlo_bound,xhi_bound,etc) are
-calculated from the triclinic parameters, and how to transform those
-parameters to and from other commonly used triclinic representations.
-
-The "ITEM: ATOMS" line in each snapshot lists column descriptors for
-the per-atom lines that follow. For example, the descriptors would be
-"id type xs ys zs" for the default *atom* style, and would be the atom
-attributes you specify in the dump command for the *custom* style.
-
-For style *atom*\ , atom coordinates are written to the file, along with
-the atom ID and atom type. By default, atom coords are written in a
-scaled format (from 0 to 1). I.e. an x value of 0.25 means the atom
-is at a location 1/4 of the distance from xlo to xhi of the box
-boundaries. The format can be changed to unscaled coords via the
-:doc:`dump_modify <dump_modify>` settings. Image flags can also be
-added for each atom via dump_modify.
-
-Style *custom* allows you to specify a list of atom attributes to be
-written to the dump file for each atom. Possible attributes are
-listed above and will appear in the order specified. You cannot
-specify a quantity that is not defined for a particular simulation -
-such as *q* for atom style *bond*\ , since that atom style doesn't
-assign charges. Dumps occur at the very end of a timestep, so atom
-attributes will include effects due to fixes that are applied during
-the timestep. An explanation of the possible dump custom attributes
-is given below.
-
-For style *local*\ , local output generated by :doc:`computes <compute>`
-and :doc:`fixes <fix>` is used to generate lines of output that is
-written to the dump file. This local data is typically calculated by
-each processor based on the atoms it owns, but there may be zero or
-more entities per atom, e.g. a list of bond distances. An explanation
-of the possible dump local attributes is given below. Note that by
-using input from the :doc:`compute property/local <compute_property_local>` command with dump local,
-it is possible to generate information on bonds, angles, etc that can
-be cut and pasted directly into a data file read by the
-:doc:`read_data <read_data>` command.
-
-Style *cfg* has the same command syntax as style *custom* and writes
-extended CFG format files, as used by the
-`AtomEye <http://mt.seas.upenn.edu/Archive/Graphics/A>`_ visualization
-package. Since the extended CFG format uses a single snapshot of the
-system per file, a wildcard "*" must be included in the filename, as
-discussed below. The list of atom attributes for style *cfg* must
-begin with either "mass type xs ys zs" or "mass type xsu ysu zsu"
-since these quantities are needed to write the CFG files in the
-appropriate format (though the "mass" and "type" fields do not appear
-explicitly in the file). Any remaining attributes will be stored as
-"auxiliary properties" in the CFG files. Note that you will typically
-want to use the :doc:`dump_modify element <dump_modify>` command with
-CFG-formatted files, to associate element names with atom types, so
-that AtomEye can render atoms appropriately. When unwrapped
-coordinates *xsu*\ , *ysu*\ , and *zsu* are requested, the nominal AtomEye
-periodic cell dimensions are expanded by a large factor UNWRAPEXPAND =
-10.0, which ensures atoms that are displayed correctly for up to
-UNWRAPEXPAND/2 periodic boundary crossings in any direction. Beyond
-this, AtomEye will rewrap the unwrapped coordinates. The expansion
-causes the atoms to be drawn farther away from the viewer, but it is
-easy to zoom the atoms closer, and the interatomic distances are
-unaffected.
-
-The *dcd* style writes DCD files, a standard atomic trajectory format
-used by the CHARMM, NAMD, and XPlor molecular dynamics packages. DCD
-files are binary and thus may not be portable to different machines.
-The number of atoms per snapshot cannot change with the *dcd* style.
-The *unwrap* option of the :doc:`dump_modify <dump_modify>` command
-allows DCD coordinates to be written "unwrapped" by the image flags
-for each atom. Unwrapped means that if the atom has passed through
-a periodic boundary one or more times, the value is printed for what
-the coordinate would be if it had not been wrapped back into the
-periodic box. Note that these coordinates may thus be far outside
-the box size stored with the snapshot.
-
-The *xtc* style writes XTC files, a compressed trajectory format used
-by the GROMACS molecular dynamics package, and described
-`here <http://manual.gromacs.org/current/online/xtc.html>`_.
-The precision used in XTC files can be adjusted via the
-:doc:`dump_modify <dump_modify>` command. The default value of 1000
-means that coordinates are stored to 1/1000 nanometer accuracy. XTC
-files are portable binary files written in the NFS XDR data format,
-so that any machine which supports XDR should be able to read them.
-The number of atoms per snapshot cannot change with the *xtc* style.
-The *unwrap* option of the :doc:`dump_modify <dump_modify>` command allows
-XTC coordinates to be written "unwrapped" by the image flags for each
-atom. Unwrapped means that if the atom has passed thru a periodic
-boundary one or more times, the value is printed for what the
-coordinate would be if it had not been wrapped back into the periodic
-box. Note that these coordinates may thus be far outside the box size
-stored with the snapshot.
-
-The *xyz* style writes XYZ files, which is a simple text-based
-coordinate format that many codes can read. Specifically it has
-a line with the number of atoms, then a comment line that is
-usually ignored followed by one line per atom with the atom type
-and the x-, y-, and z-coordinate of that atom. You can use the
-:doc:`dump_modify element <dump_modify>` option to change the output
-from using the (numerical) atom type to an element name (or some
-other label). This will help many visualization programs to guess
-bonds and colors.
-
-Note that *atom*\ , *custom*\ , *dcd*\ , *xtc*\ , and *xyz* style dump files
-can be read directly by `VMD <http://www.ks.uiuc.edu/Research/vmd>`_, a
-popular molecular viewing program. See :ref:`Section tools <vmd>` of the manual and the
-tools/lmp2vmd/README.txt file for more information about support in
-VMD for reading and visualizing LAMMPS dump files.
-
-
-----------
-
-
-Dumps are performed on timesteps that are a multiple of N (including
-timestep 0) and on the last timestep of a minimization if the
-minimization converges. Note that this means a dump will not be
-performed on the initial timestep after the dump command is invoked,
-if the current timestep is not a multiple of N. This behavior can be
-changed via the :doc:`dump_modify first <dump_modify>` command, which
-can also be useful if the dump command is invoked after a minimization
-ended on an arbitrary timestep. N can be changed between runs by
-using the :doc:`dump_modify every <dump_modify>` command (not allowed
-for *dcd* style). The :doc:`dump_modify every <dump_modify>` command
-also allows a variable to be used to determine the sequence of
-timesteps on which dump files are written. In this mode a dump on the
-first timestep of a run will also not be written unless the
-:doc:`dump_modify first <dump_modify>` command is used.
-
-The specified filename determines how the dump file(s) is written.
-The default is to write one large text file, which is opened when the
-dump command is invoked and closed when an :doc:`undump <undump>`
-command is used or when LAMMPS exits. For the *dcd* and *xtc* styles,
-this is a single large binary file.
-
-Dump filenames can contain two wildcard characters. If a "*"
-character appears in the filename, then one file per snapshot is
-written and the "*" character is replaced with the timestep value.
-For example, tmp.dump.* becomes tmp.dump.0, tmp.dump.10000,
-tmp.dump.20000, etc. This option is not available for the *dcd* and
-*xtc* styles. Note that the :doc:`dump_modify pad <dump_modify>`
-command can be used to insure all timestep numbers are the same length
-(e.g. 00010), which can make it easier to read a series of dump files
-in order with some post-processing tools.
-
-If a "%" character appears in the filename, then each of P processors
-writes a portion of the dump file, and the "%" character is replaced
-with the processor ID from 0 to P-1. For example, tmp.dump.% becomes
-tmp.dump.0, tmp.dump.1, ... tmp.dump.P-1, etc. This creates smaller
-files and can be a fast mode of output on parallel machines that
-support parallel I/O for output. This option is not available for the
-*dcd*\ , *xtc*\ , and *xyz* styles.
-
-By default, P = the number of processors meaning one file per
-processor, but P can be set to a smaller value via the *nfile* or
-*fileper* keywords of the :doc:`dump_modify <dump_modify>` command.
-These options can be the most efficient way of writing out dump files
-when running on large numbers of processors.
-
-Note that using the "*" and "%" characters together can produce a
-large number of small dump files!
-
-For the *atom/mpiio*\ , *cfg/mpiio*\ , *custom/mpiio*\ , and *xyz/mpiio*
-styles, a single dump file is written in parallel via the MPI-IO
-library, which is part of the MPI standard for versions 2.0 and above.
-Using MPI-IO requires two steps. First, build LAMMPS with its MPIIO
-package installed, e.g.
-
-.. parsed-literal::
-
- make yes-mpiio # installs the MPIIO package
- make g++ # build LAMMPS for your platform
-
-Second, use a dump filename which contains ".mpiio". Note that it
-does not have to end in ".mpiio", just contain those characters.
-Unlike MPI-IO restart files, which must be both written and read using
-MPI-IO, the dump files produced by these MPI-IO styles are identical
-in format to the files produced by their non-MPI-IO style
-counterparts. This means you can write a dump file using MPI-IO and
-use the :doc:`read_dump <read_dump>` command or perform other
-post-processing, just as if the dump file was not written using
-MPI-IO.
-
-Note that MPI-IO dump files are one large file which all processors
-write to. You thus cannot use the "%" wildcard character described
-above in the filename since that specifies generation of multiple
-files. You can use the ".bin" suffix described below in an MPI-IO
-dump file; again this file will be written in parallel and have the
-same binary format as if it were written without MPI-IO.
-
-If the filename ends with ".bin", the dump file (or files, if "*" or
-"%" is also used) is written in binary format. A binary dump file
-will be about the same size as a text version, but will typically
-write out much faster. Of course, when post-processing, you will need
-to convert it back to text format (see the :ref:`binary2txt tool <binary>`) or write your own code to read the
-binary file. The format of the binary file can be understood by
-looking at the tools/binary2txt.cpp file. This option is only
-available for the *atom* and *custom* styles.
-
-If the filename ends with ".gz", the dump file (or files, if "*" or "%"
-is also used) is written in gzipped format. A gzipped dump file will
-be about 3x smaller than the text version, but will also take longer
-to write. This option is not available for the *dcd* and *xtc*
-styles.
-
-
-----------
-
-
-Note that in the discussion which follows, for styles which can
-reference values from a compute or fix, like the *custom*\ , *cfg*\ , or
-*local* styles, the bracketed index I can be specified using a
-wildcard asterisk with the index to effectively specify multiple
-values. This takes the form "*" or "*n" or "n*" or "m*n". If N = the
-size of the vector (for *mode* = scalar) or the number of columns in
-the array (for *mode* = vector), then an asterisk with no numeric
-values means all indices from 1 to N. A leading asterisk means all
-indices from 1 to n (inclusive). A trailing asterisk means all
-indices from n to N (inclusive). A middle asterisk means all indices
-from m to n (inclusive).
-
-Using a wildcard is the same as if the individual columns of the array
-had been listed one by one. E.g. these 2 dump commands are
-equivalent, since the :doc:`compute stress/atom <compute_stress/atom>`
-command creates a per-atom array with 6 columns:
-
-.. parsed-literal::
-
- compute myPress all stress/atom NULL
- dump 2 all custom 100 tmp.dump id myPress[*]
- dump 2 all custom 100 tmp.dump id myPress[1] myPress[2] myPress[3] &
- myPress[4] myPress[5] myPress[6]
-
-
-----------
-
-
-This section explains the local attributes that can be specified as
-part of the *local* style.
-
-The *index* attribute can be used to generate an index number from 1
-to N for each line written into the dump file, where N is the total
-number of local datums from all processors, or lines of output that
-will appear in the snapshot. Note that because data from different
-processors depend on what atoms they currently own, and atoms migrate
-between processor, there is no guarantee that the same index will be
-used for the same info (e.g. a particular bond) in successive
-snapshots.
-
-The *c_ID* and *c_ID[I]* attributes allow local vectors or arrays
-calculated by a :doc:`compute <compute>` to be output. The ID in the
-attribute should be replaced by the actual ID of the compute that has
-been defined previously in the input script. See the
-:doc:`compute <compute>` command for details. There are computes for
-calculating local information such as indices, types, and energies for
-bonds and angles.
-
-Note that computes which calculate global or per-atom quantities, as
-opposed to local quantities, cannot be output in a dump local command.
-Instead, global quantities can be output by the :doc:`thermo_style custom <thermo_style>` command, and per-atom quantities can be
-output by the dump custom command.
-
-If *c_ID* is used as a attribute, then the local vector calculated by
-the compute is printed. If *c_ID[I]* is used, then I must be in the
-range from 1-M, which will print the Ith column of the local array
-with M columns calculated by the compute. See the discussion above
-for how I can be specified with a wildcard asterisk to effectively
-specify multiple values.
-
-The *f_ID* and *f_ID[I]* attributes allow local vectors or arrays
-calculated by a :doc:`fix <fix>` to be output. The ID in the attribute
-should be replaced by the actual ID of the fix that has been defined
-previously in the input script.
-
-If *f_ID* is used as a attribute, then the local vector calculated by
-the fix is printed. If *f_ID[I]* is used, then I must be in the
-range from 1-M, which will print the Ith column of the local with M
-columns calculated by the fix. See the discussion above for how I can
-be specified with a wildcard asterisk to effectively specify multiple
-values.
-
-Here is an example of how to dump bond info for a system, including
-the distance and energy of each bond:
-
-.. parsed-literal::
-
- compute 1 all property/local batom1 batom2 btype
- compute 2 all bond/local dist eng
- dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_1[3] c_2[1] c_2[2]
-
-
-----------
-
-
-This section explains the atom attributes that can be specified as
-part of the *custom* and *cfg* styles.
-
-The *id*\ , *mol*\ , *proc*\ , *procp1*\ , *type*\ , *element*\ , *mass*\ , *vx*\ ,
-*vy*\ , *vz*\ , *fx*\ , *fy*\ , *fz*\ , *q* attributes are self-explanatory.
-
-*Id* is the atom ID. *Mol* is the molecule ID, included in the data
-file for molecular systems. *Proc* is the ID of the processor (0 to
-Nprocs-1) that currently owns the atom. *Procp1* is the proc ID+1,
-which can be convenient in place of a *type* attribute (1 to Ntypes)
-for coloring atoms in a visualization program. *Type* is the atom
-type (1 to Ntypes). *Element* is typically the chemical name of an
-element, which you must assign to each type via the :doc:`dump_modify element <dump_modify>` command. More generally, it can be any
-string you wish to associated with an atom type. *Mass* is the atom
-mass. *Vx*\ , *vy*\ , *vz*\ , *fx*\ , *fy*\ , *fz*\ , and *q* are components of
-atom velocity and force and atomic charge.
-
-There are several options for outputting atom coordinates. The *x*\ ,
-*y*\ , *z* attributes write atom coordinates "unscaled", in the
-appropriate distance :doc:`units <units>` (Angstroms, sigma, etc). Use
-*xs*\ , *ys*\ , *zs* if you want the coordinates "scaled" to the box size,
-so that each value is 0.0 to 1.0. If the simulation box is triclinic
-(tilted), then all atom coords will still be between 0.0 and 1.0.
-I.e. actual unscaled (x,y,z) = xs*A + ys*B + zs*C, where (A,B,C) are
-the non-orthogonal vectors of the simulation box edges, as discussed
-in :ref:`Section howto 6.12 <howto_12>`.
-
-Use *xu*\ , *yu*\ , *zu* if you want the coordinates "unwrapped" by the
-image flags for each atom. Unwrapped means that if the atom has
-passed thru a periodic boundary one or more times, the value is
-printed for what the coordinate would be if it had not been wrapped
-back into the periodic box. Note that using *xu*\ , *yu*\ , *zu* means
-that the coordinate values may be far outside the box bounds printed
-with the snapshot. Using *xsu*\ , *ysu*\ , *zsu* is similar to using
-*xu*\ , *yu*\ , *zu*\ , except that the unwrapped coordinates are scaled by
-the box size. Atoms that have passed through a periodic boundary will
-have the corresponding cooordinate increased or decreased by 1.0.
-
-The image flags can be printed directly using the *ix*\ , *iy*\ , *iz*
-attributes. For periodic dimensions, they specify which image of the
-simulation box the atom is considered to be in. An image of 0 means
-it is inside the box as defined. A value of 2 means add 2 box lengths
-to get the true value. A value of -1 means subtract 1 box length to
-get the true value. LAMMPS updates these flags as atoms cross
-periodic boundaries during the simulation.
-
-The *mux*\ , *muy*\ , *muz* attributes are specific to dipolar systems
-defined with an atom style of *dipole*\ . They give the orientation of
-the atom's point dipole moment. The *mu* attribute gives the
-magnitude of the atom's dipole moment.
-
-The *radius* and *diameter* attributes are specific to spherical
-particles that have a finite size, such as those defined with an atom
-style of *sphere*\ .
-
-The *omegax*\ , *omegay*\ , and *omegaz* attributes are specific to
-finite-size spherical particles that have an angular velocity. Only
-certain atom styles, such as *sphere* define this quantity.
-
-The *angmomx*\ , *angmomy*\ , and *angmomz* attributes are specific to
-finite-size aspherical particles that have an angular momentum. Only
-the *ellipsoid* atom style defines this quantity.
-
-The *tqx*\ , *tqy*\ , *tqz* attributes are for finite-size particles that
-can sustain a rotational torque due to interactions with other
-particles.
-
-The *c_ID* and *c_ID[I]* attributes allow per-atom vectors or arrays
-calculated by a :doc:`compute <compute>` to be output. The ID in the
-attribute should be replaced by the actual ID of the compute that has
-been defined previously in the input script. See the
-:doc:`compute <compute>` command for details. There are computes for
-calculating the per-atom energy, stress, centro-symmetry parameter,
-and coordination number of individual atoms.
-
-Note that computes which calculate global or local quantities, as
-opposed to per-atom quantities, cannot be output in a dump custom
-command. Instead, global quantities can be output by the
-:doc:`thermo_style custom <thermo_style>` command, and local quantities
-can be output by the dump local command.
-
-If *c_ID* is used as a attribute, then the per-atom vector calculated
-by the compute is printed. If *c_ID[I]* is used, then I must be in
-the range from 1-M, which will print the Ith column of the per-atom
-array with M columns calculated by the compute. See the discussion
-above for how I can be specified with a wildcard asterisk to
-effectively specify multiple values.
-
-The *f_ID* and *f_ID[I]* attributes allow vector or array per-atom
-quantities calculated by a :doc:`fix <fix>` to be output. The ID in the
-attribute should be replaced by the actual ID of the fix that has been
-defined previously in the input script. The :doc:`fix ave/atom <fix_ave_atom>` command is one that calculates per-atom
-quantities. Since it can time-average per-atom quantities produced by
-any :doc:`compute <compute>`, :doc:`fix <fix>`, or atom-style
-:doc:`variable <variable>`, this allows those time-averaged results to
-be written to a dump file.
-
-If *f_ID* is used as a attribute, then the per-atom vector calculated
-by the fix is printed. If *f_ID[I]* is used, then I must be in the
-range from 1-M, which will print the Ith column of the per-atom array
-with M columns calculated by the fix. See the discussion above for
-how I can be specified with a wildcard asterisk to effectively specify
-multiple values.
-
-The *v_name* attribute allows per-atom vectors calculated by a
-:doc:`variable <variable>` to be output. The name in the attribute
-should be replaced by the actual name of the variable that has been
-defined previously in the input script. Only an atom-style variable
-can be referenced, since it is the only style that generates per-atom
-values. Variables of style *atom* can reference individual atom
-attributes, per-atom atom attributes, thermodynamic keywords, or
-invoke other computes, fixes, or variables when they are evaluated, so
-this is a very general means of creating quantities to output to a
-dump file.
-
-The *d_name* and *i_name* attributes allow to output custom per atom
-floating point or integer properties that are managed by
-:doc:`fix property/atom <fix_property_atom>`.
-
-See :doc:`Section_modify <Section_modify>` of the manual for information
-on how to add new compute and fix styles to LAMMPS to calculate
-per-atom quantities which could then be output into dump files.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-To write gzipped dump files, you must either compile LAMMPS with the
--DLAMMPS_GZIP option or use the styles from the COMPRESS package
-- see the :ref:`Making LAMMPS <start_2>` section of
-the documentation.
-
-The *atom/gz*\ , *cfg/gz*\ , *custom/gz*\ , and *xyz/gz* styles are part
-of the COMPRESS package. They are only enabled if LAMMPS was built
-with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The *atom/mpiio*\ , *cfg/mpiio*\ , *custom/mpiio*\ , and *xyz/mpiio* styles
-are part of the MPIIO package. They are only enabled if LAMMPS was
-built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The *xtc* style is part of the MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. This is
-because some machines may not support the low-level XDR data format
-that XTC files are written with, which will result in a compile-time
-error when a low-level include file is not found. Putting this style
-in a package makes it easy to exclude from a LAMMPS build for those
-machines. However, the MISC package also includes two compatibility
-header files and associated functions, which should be a suitable
-substitute on machines that do not have the appropriate native header
-files. This option can be invoked at build time by adding
--DLAMMPS_XDR to the CCFLAGS variable in the appropriate low-level
-Makefile, e.g. src/MAKE/Makefile.foo. This compatibility mode has
-been tested successfully on Cray XT3/XT4/XT5 and IBM BlueGene/L
-machines and should also work on IBM BG/P, and Windows XP/Vista/7
-machines.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump h5md <dump_h5md>`, :doc:`dump image <dump_image>`,
-:doc:`dump molfile <dump_molfile>`, :doc:`dump_modify <dump_modify>`,
-:doc:`undump <undump>`
-
-Default
-"""""""
-
-The defaults for the *image* and *movie* styles are listed on the
-:doc:`dump image <dump_image>` doc page.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dump_custom_vtk.txt b/doc/html/_sources/dump_custom_vtk.txt
deleted file mode 100644
index bc52a63fd..000000000
--- a/doc/html/_sources/dump_custom_vtk.txt
+++ /dev/null
@@ -1,360 +0,0 @@
-.. index:: dump custom/vtk
-
-dump custom/vtk command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dump ID group-ID style N file args
-
-* ID = user-assigned name for the dump
-* group-ID = ID of the group of atoms to be dumped
-* style = *custom/vtk*
-* N = dump every this many timesteps
-* file = name of file to write dump info to
-* args = list of arguments for a particular style
-.. parsed-literal::
-
- *custom/vtk* args = list of atom attributes
- possible attributes = id, mol, proc, procp1, type, element, mass,
- x, y, z, xs, ys, zs, xu, yu, zu,
- xsu, ysu, zsu, ix, iy, iz,
- vx, vy, vz, fx, fy, fz,
- q, mux, muy, muz, mu,
- radius, diameter, omegax, omegay, omegaz,
- angmomx, angmomy, angmomz, tqx, tqy, tqz,
- spin, eradius, ervel, erforce,
- c_ID, c_ID[N], f_ID, f_ID[N], v_name
-
-.. parsed-literal::
-
- id = atom ID
- mol = molecule ID
- proc = ID of processor that owns atom
- procp1 = ID+1 of processor that owns atom
- type = atom type
- element = name of atom element, as defined by :doc:`dump_modify <dump_modify_vtk>` command
- mass = atom mass
- x,y,z = unscaled atom coordinates
- xs,ys,zs = scaled atom coordinates
- xu,yu,zu = unwrapped atom coordinates
- xsu,ysu,zsu = scaled unwrapped atom coordinates
- ix,iy,iz = box image that the atom is in
- vx,vy,vz = atom velocities
- fx,fy,fz = forces on atoms
- q = atom charge
- mux,muy,muz = orientation of dipole moment of atom
- mu = magnitude of dipole moment of atom
- radius,diameter = radius,diameter of spherical particle
- omegax,omegay,omegaz = angular velocity of spherical particle
- angmomx,angmomy,angmomz = angular momentum of aspherical particle
- tqx,tqy,tqz = torque on finite-size particles
- c_ID = per-atom vector calculated by a compute with ID
- c_ID[N] = Nth column of per-atom array calculated by a compute with ID
- f_ID = per-atom vector calculated by a fix with ID
- f_ID[N] = Nth column of per-atom array calculated by a fix with ID
- v_name = per-atom vector calculated by an atom-style variable with name
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dump dmpvtk all custom/vtk 100 dump*.myforce.vtk id type vx fx
- dump dmpvtp flow custom/vtk 100 dump*.%.displace.vtp id type c_myD[1] c_myD[2] c_myD[3] v_ke
- dump e_data all custom/vtk 100 dump*.vtu id type spin eradius fx fy fz eforce
-
-The style *custom/vtk* is similar to the :doc:`custom <dump>` style but
-uses the VTK library to write data to VTK simple legacy or XML format
-depending on the filename extension specified. This can be either
-**.vtk* for the legacy format or **.vtp* and **.vtu*\ , respectively,
-for the XML format; see the `VTK homepage <http://www.vtk.org/VTK/img/file-formats.pdf>`_ for a detailed
-description of these formats. Since this naming convention conflicts
-with the way binary output is usually specified (see below),
-:doc:`dump_modify binary <dump_modify_vtk>` allows to set the binary
-flag for this dump style explicitly.
-
-Description
-"""""""""""
-
-Dump a snapshot of atom quantities to one or more files every N
-timesteps in a format readable by the `VTK visualization toolkit <http://www.vtk.org>`_ or other visualization tools that use it,
-e.g. `ParaView <http://www.paraview.org>`_. The timesteps on which dump
-output is written can also be controlled by a variable; see the
-:doc:`dump_modify every <dump_modify_vtk>` command for details.
-
-Only information for atoms in the specified group is dumped. The
-:doc:`dump_modify thresh and region <dump_modify_vtk>` commands can also
-alter what atoms are included; see details below.
-
-As described below, special characters ("*", "%") in the filename
-determine the kind of output.
-
-.. warning::
-
- Because periodic boundary conditions are enforced only
- on timesteps when neighbor lists are rebuilt, the coordinates of an
- atom written to a dump file may be slightly outside the simulation
- box.
-
-.. warning::
-
- Unless the :doc:`dump_modify sort <dump_modify_vtk>`
- option is invoked, the lines of atom information written to dump files
- will be in an indeterminate order for each snapshot. This is even
- true when running on a single processor, if the :doc:`atom_modify sort <atom_modify>` option is on, which it is by default. In this
- case atoms are re-ordered periodically during a simulation, due to
- spatial sorting. It is also true when running in parallel, because
- data for a single snapshot is collected from multiple processors, each
- of which owns a subset of the atoms.
-
-For the *custom/vtk* style, sorting is off by default. See the
-:doc:`dump_modify <dump_modify_vtk>` doc page for details.
-
-
-----------
-
-
-The dimensions of the simulation box are written to a separate file
-for each snapshot (either in legacy VTK or XML format depending on
-the format of the main dump file) with the suffix *_boundingBox*
-appended to the given dump filename.
-
-For an orthogonal simulation box this information is saved as a
-rectilinear grid (legacy .vtk or .vtr XML format).
-
-Triclinic simulation boxes (non-orthogonal) are saved as
-hexahedrons in either legacy .vtk or .vtu XML format.
-
-Style *custom/vtk* allows you to specify a list of atom attributes
-to be written to the dump file for each atom. Possible attributes
-are listed above. In contrast to the *custom* style, the attributes
-are rearranged to ensure correct ordering of vector components
-(except for computes and fixes - these have to be given in the right
-order) and duplicate entries are removed.
-
-You cannot specify a quantity that is not defined for a particular
-simulation - such as *q* for atom style *bond*\ , since that atom style
-doesn't assign charges. Dumps occur at the very end of a timestep,
-so atom attributes will include effects due to fixes that are applied
-during the timestep. An explanation of the possible dump custom/vtk attributes
-is given below. Since position data is required to write VTK files "x y z"
-do not have to be specified explicitly.
-
-The VTK format uses a single snapshot of the system per file, thus
-a wildcard "*" must be included in the filename, as discussed below.
-Otherwise the dump files will get overwritten with the new snapshot
-each time.
-
-
-----------
-
-
-Dumps are performed on timesteps that are a multiple of N (including
-timestep 0) and on the last timestep of a minimization if the
-minimization converges. Note that this means a dump will not be
-performed on the initial timestep after the dump command is invoked,
-if the current timestep is not a multiple of N. This behavior can be
-changed via the :doc:`dump_modify first <dump_modify_vtk>` command, which
-can also be useful if the dump command is invoked after a minimization
-ended on an arbitrary timestep. N can be changed between runs by
-using the :doc:`dump_modify every <dump_modify_vtk>` command.
-The :doc:`dump_modify every <dump_modify_vtk>` command
-also allows a variable to be used to determine the sequence of
-timesteps on which dump files are written. In this mode a dump on the
-first timestep of a run will also not be written unless the
-:doc:`dump_modify first <dump_modify_vtk>` command is used.
-
-Dump filenames can contain two wildcard characters. If a "*"
-character appears in the filename, then one file per snapshot is
-written and the "*" character is replaced with the timestep value.
-For example, tmp.dump*.vtk becomes tmp.dump0.vtk, tmp.dump10000.vtk,
-tmp.dump20000.vtk, etc. Note that the :doc:`dump_modify pad <dump_modify_vtk>`
-command can be used to insure all timestep numbers are the same length
-(e.g. 00010), which can make it easier to read a series of dump files
-in order with some post-processing tools.
-
-If a "%" character appears in the filename, then each of P processors
-writes a portion of the dump file, and the "%" character is replaced
-with the processor ID from 0 to P-1 preceded by an underscore character.
-For example, tmp.dump%.vtp becomes tmp.dump_0.vtp, tmp.dump_1.vtp, ...
-tmp.dump_P-1.vtp, etc. This creates smaller files and can be a fast
-mode of output on parallel machines that support parallel I/O for output.
-
-By default, P = the number of processors meaning one file per
-processor, but P can be set to a smaller value via the *nfile* or
-*fileper* keywords of the :doc:`dump_modify <dump_modify_vtk>` command.
-These options can be the most efficient way of writing out dump files
-when running on large numbers of processors.
-
-For the legacy VTK format "%" is ignored and P = 1, i.e., only
-processor 0 does write files.
-
-Note that using the "*" and "%" characters together can produce a
-large number of small dump files!
-
-If *dump_modify binary* is used, the dump file (or files, if "*" or
-"%" is also used) is written in binary format. A binary dump file
-will be about the same size as a text version, but will typically
-write out much faster.
-
-
-----------
-
-
-This section explains the atom attributes that can be specified as
-part of the *custom/vtk* style.
-
-The *id*\ , *mol*\ , *proc*\ , *procp1*\ , *type*\ , *element*\ , *mass*\ , *vx*\ ,
-*vy*\ , *vz*\ , *fx*\ , *fy*\ , *fz*\ , *q* attributes are self-explanatory.
-
-*id* is the atom ID. *mol* is the molecule ID, included in the data
-file for molecular systems. *type* is the atom type. *element* is
-typically the chemical name of an element, which you must assign to
-each type via the :doc:`dump_modify element <dump_modify_vtk>` command.
-More generally, it can be any string you wish to associate with an
-atom type. *mass* is the atom mass. *vx*\ , *vy*\ , *vz*\ , *fx*\ , *fy*\ ,
-*fz*\ , and *q* are components of atom velocity and force and atomic
-charge.
-
-There are several options for outputting atom coordinates. The *x*\ ,
-*y*\ , *z* attributes are used to write atom coordinates "unscaled", in
-the appropriate distance :doc:`units <units>` (Angstroms, sigma, etc).
-Additionaly, you can use *xs*\ , *ys*\ , *zs* if you want to also save the
-coordinates "scaled" to the box size, so that each value is 0.0 to
-1.0. If the simulation box is triclinic (tilted), then all atom
-coords will still be between 0.0 and 1.0. Use *xu*\ , *yu*\ , *zu* if you
-want the coordinates "unwrapped" by the image flags for each atom.
-Unwrapped means that if the atom has passed through a periodic
-boundary one or more times, the value is printed for what the
-coordinate would be if it had not been wrapped back into the periodic
-box. Note that using *xu*\ , *yu*\ , *zu* means that the coordinate
-values may be far outside the box bounds printed with the snapshot.
-Using *xsu*\ , *ysu*\ , *zsu* is similar to using *xu*\ , *yu*\ , *zu*\ , except
-that the unwrapped coordinates are scaled by the box size. Atoms that
-have passed through a periodic boundary will have the corresponding
-cooordinate increased or decreased by 1.0.
-
-The image flags can be printed directly using the *ix*\ , *iy*\ , *iz*
-attributes. For periodic dimensions, they specify which image of the
-simulation box the atom is considered to be in. An image of 0 means
-it is inside the box as defined. A value of 2 means add 2 box lengths
-to get the true value. A value of -1 means subtract 1 box length to
-get the true value. LAMMPS updates these flags as atoms cross
-periodic boundaries during the simulation.
-
-The *mux*\ , *muy*\ , *muz* attributes are specific to dipolar systems
-defined with an atom style of *dipole*\ . They give the orientation of
-the atom's point dipole moment. The *mu* attribute gives the
-magnitude of the atom's dipole moment.
-
-The *radius* and *diameter* attributes are specific to spherical
-particles that have a finite size, such as those defined with an atom
-style of *sphere*\ .
-
-The *omegax*\ , *omegay*\ , and *omegaz* attributes are specific to
-finite-size spherical particles that have an angular velocity. Only
-certain atom styles, such as *sphere* define this quantity.
-
-The *angmomx*\ , *angmomy*\ , and *angmomz* attributes are specific to
-finite-size aspherical particles that have an angular momentum. Only
-the *ellipsoid* atom style defines this quantity.
-
-The *tqx*\ , *tqy*\ , *tqz* attributes are for finite-size particles that
-can sustain a rotational torque due to interactions with other
-particles.
-
-The *spin*\ , *eradius*\ , *ervel*\ , and *erforce* attributes are for
-particles that represent nuclei and electrons modeled with the
-electronic force field (EFF). See :doc:`atom_style electron <atom_style>` and :doc:`pair_style eff <pair_eff>` for more
-details.
-
-The *c_ID* and *c_ID[N]* attributes allow per-atom vectors or arrays
-calculated by a :doc:`compute <compute>` to be output. The ID in the
-attribute should be replaced by the actual ID of the compute that has
-been defined previously in the input script. See the
-:doc:`compute <compute>` command for details. There are computes for
-calculating the per-atom energy, stress, centro-symmetry parameter,
-and coordination number of individual atoms.
-
-Note that computes which calculate global or local quantities, as
-opposed to per-atom quantities, cannot be output in a dump custom/vtk
-command. Instead, global quantities can be output by the
-:doc:`thermo_style custom <thermo_style>` command, and local quantities
-can be output by the dump local command.
-
-If *c_ID* is used as an attribute, then the per-atom vector calculated
-by the compute is printed. If *c_ID[N]* is used, then N must be in
-the range from 1-M, which will print the Nth column of the M-length
-per-atom array calculated by the compute.
-
-The *f_ID* and *f_ID[N]* attributes allow vector or array per-atom
-quantities calculated by a :doc:`fix <fix>` to be output. The ID in the
-attribute should be replaced by the actual ID of the fix that has been
-defined previously in the input script. The :doc:`fix ave/atom <fix_ave_atom>` command is one that calculates per-atom
-quantities. Since it can time-average per-atom quantities produced by
-any :doc:`compute <compute>`, :doc:`fix <fix>`, or atom-style
-:doc:`variable <variable>`, this allows those time-averaged results to
-be written to a dump file.
-
-If *f_ID* is used as a attribute, then the per-atom vector calculated
-by the fix is printed. If *f_ID[N]* is used, then N must be in the
-range from 1-M, which will print the Nth column of the M-length
-per-atom array calculated by the fix.
-
-The *v_name* attribute allows per-atom vectors calculated by a
-:doc:`variable <variable>` to be output. The name in the attribute
-should be replaced by the actual name of the variable that has been
-defined previously in the input script. Only an atom-style variable
-can be referenced, since it is the only style that generates per-atom
-values. Variables of style *atom* can reference individual atom
-attributes, per-atom atom attributes, thermodynamic keywords, or
-invoke other computes, fixes, or variables when they are evaluated, so
-this is a very general means of creating quantities to output to a
-dump file.
-
-See :doc:`Section_modify <Section_modify>` of the manual for information
-on how to add new compute and fix styles to LAMMPS to calculate
-per-atom quantities which could then be output into dump files.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The *custom/vtk* style does not support writing of gzipped dump files.
-
-The *custom/vtk* dump style is part of the USER-VTK package. It is
-only enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-To use this dump style, you also must link to the VTK library. See
-the info in lib/vtk/README and insure the Makefile.lammps file in that
-directory is appropriate for your machine.
-
-The *custom/vtk* dump style neither supports buffering nor custom
-format strings.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump <dump>`, :doc:`dump image <dump_image>`,
-:doc:`dump_modify <dump_modify>`, :doc:`undump <undump>`
-
-Default
-"""""""
-
-By default, files are written in ASCII format. If the file extension
-is not one of .vtk, .vtp or .vtu, the legacy VTK file format is used.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dump_h5md.txt b/doc/html/_sources/dump_h5md.txt
deleted file mode 100644
index 2c0fa24f5..000000000
--- a/doc/html/_sources/dump_h5md.txt
+++ /dev/null
@@ -1,153 +0,0 @@
-.. index:: dump h5md
-
-dump h5md command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dump ID group-ID h5md N file.h5 args
-
-* ID = user-assigned name for the dump
-* group-ID = ID of the group of atoms to be imaged
-* h5md = style of dump command (other styles *atom* or *cfg* or *dcd* or *xtc* or *xyz* or *local* or *custom* are discussed on the :doc:`dump <dump>` doc page)
-* N = dump every this many timesteps
-* file.h5 = name of file to write to
-* args = list of data elements to dump, with their dump "subintervals".
- At least one element must be given and image may only be present if
- position is specified first.
-.. parsed-literal::
-
- position options
- image
- velocity options
- force options
- species options
- file_from ID: do not open a new file, re-use the already opened file from dump ID
- box value = *yes* or *no*
- create_group value = *yes* or *no*
- author value = quoted string
-
-For the elements *position*\ , *velocity*\ , *force* and *species*\ , one
-may specify a sub-interval to write the data only every N_element
-iterations of the dump (i.e. every N*N_element time steps). This is
-specified by the option
-
-.. parsed-literal::
-
- every N_element
-
-that follows directly the element declaration.
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dump h5md1 all h5md 100 dump_h5md.h5 position image
- dump h5md1 all h5md 100 dump_h5md.h5 position velocity every 10
- dump h5md1 all h5md 100 dump_h5md.h5 velocity author "John Doe"
-
-Description
-"""""""""""
-
-Dump a snapshot of atom coordinates every N timesteps in the
-`HDF5 <HDF5_ws_>`_ based `H5MD <h5md_>`_ file format :ref:`(de Buyl) <h5md_cpc>`.
-HDF5 files are binary, portable and self-describing. This dump style
-will write only one file, on the root node.
-
-Several dumps may write to the same file, by using file_from and
-referring to a previously defined dump. Several groups may also be
-stored within the same file by defining several dumps. A dump that
-refers (via *file_from*\ ) to an already open dump ID and that concerns
-another particle group must specify *create_group yes*\ .
-
-.. _h5md: http://nongnu.org/h5md/
-
-
-
-Each data element is written every N*N_element steps. For *image*\ , no
-subinterval is needed as it must be present at the same interval as
-*position*\ . *image* must be given after *position* in any case. The
-box information (edges in each dimension) is stored at the same
-interval than the *position* element, if present. Else it is stored
-every N steps.
-
-.. note::
-
- Because periodic boundary conditions are enforced only on
- timesteps when neighbor lists are rebuilt, the coordinates of an atom
- written to a dump file may be slightly outside the simulation box.
-
-**Use from write_dump:**
-
-It is possible to use this dump style with the
-:doc:`write_dump <write_dump>` command. In this case, the subintervals
-must not be set at all. The write_dump command can be used either to
-create a new file or to add current data to an existing dump file by
-using the *file_from* keyword.
-
-Typically, the *species* data is fixed. The following two commands
-store the position data every 100 timesteps, with the image data, and
-store once the species data in the same file.
-
-.. parsed-literal::
-
- dump h5md1 all h5md 100 dump.h5 position image
- write_dump all h5md dump.h5 file_from h5md1 species
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The number of atoms per snapshot cannot change with the h5md style.
-The position data is stored wrapped (box boundaries not enforced, see
-note above). Only orthogonal domains are currently supported. This is
-a limitation of the present dump h5md command and not of H5MD itself.
-
-The *h5md* dump style is part of the USER-H5MD package. It is only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. It also
-requires (i) building the ch5md library provided with LAMMPS (See the
-:ref:`Making LAMMPS <start_3>` section for more info.) and
-(ii) having the `HDF5 <HDF5_ws_>`_ library installed (C bindings are
-sufficient) on your system. The library ch5md is compiled with the
-h5cc wrapper provided by the HDF5 library.
-
-.. _HDF5_ws: http://www.hdfgroup.org/HDF5/
-
-
-
-
-----------
-
-
-Related commands
-""""""""""""""""
-
-:doc:`dump <dump>`, :doc:`dump_modify <dump_modify>`, :doc:`undump <undump>`
-
-
-----------
-
-
-.. _h5md_cpc:
-
-
-
-**(de Buyl)** de Buyl, Colberg and Hofling, H5MD: A structured,
-efficient, and portable file format for molecular data,
-Comp. Phys. Comm. 185(6), 1546-1553 (2014) -
-`[arXiv:1308.6382] <http://arxiv.org/abs/1308.6382/>`_.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dump_image.txt b/doc/html/_sources/dump_image.txt
deleted file mode 100644
index 12b585600..000000000
--- a/doc/html/_sources/dump_image.txt
+++ /dev/null
@@ -1,736 +0,0 @@
-.. index:: dump image
-
-dump image command
-==================
-
-dump movie command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dump ID group-ID style N file color diameter keyword value ...
-
-* ID = user-assigned name for the dump
-* group-ID = ID of the group of atoms to be imaged
-* style = *image* or *movie* = style of dump command (other styles *atom* or *cfg* or *dcd* or *xtc* or *xyz* or *local* or *custom* are discussed on the :doc:`dump <dump>` doc page)
-* N = dump every this many timesteps
-* file = name of file to write image to
-* color = atom attribute that determines color of each atom
-* diameter = atom attribute that determines size of each atom
-* zero or more keyword/value pairs may be appended
-* keyword = *atom* or *adiam* or *bond* or *line* or *tri* or *body* or *fix* or *size* or *view* or *center* or *up* or *zoom* or *persp* or *box* or *axes* or *subbox* or *shiny* or *ssao*
-.. parsed-literal::
-
- *atom* = yes/no = do or do not draw atoms
- *adiam* size = numeric value for atom diameter (distance units)
- *bond* values = color width = color and width of bonds
- color = *atom* or *type* or *none*
- width = number or *atom* or *type* or *none*
- number = numeric value for bond width (distance units)
- *line* = color width
- color = *type*
- width = numeric value for line width (distance units)
- *tri* = color tflag width
- color = *type*
- tflag = 1 for just triangle, 2 for just tri edges, 3 for both
- width = numeric value for tringle edge width (distance units)
- *body* = color bflag1 bflag2
- color = *type*
- bflag1,bflag2 = 2 numeric flags to affect how bodies are drawn
- *fix* = fixID color fflag1 fflag2
- fixID = ID of fix that generates objects to dray
- color = *type*
- fflag1,fflag2 = 2 numeric flags to affect how fix objects are drawn
- *size* values = width height = size of images
- width = width of image in # of pixels
- height = height of image in # of pixels
- *view* values = theta phi = view of simulation box
- theta = view angle from +z axis (degrees)
- phi = azimuthal view angle (degrees)
- theta or phi can be a variable (see below)
- *center* values = flag Cx Cy Cz = center point of image
- flag = "s" for static, "d" for dynamic
- Cx,Cy,Cz = center point of image as fraction of box dimension (0.5 = center of box)
- Cx,Cy,Cz can be variables (see below)
- *up* values = Ux Uy Uz = direction that is "up" in image
- Ux,Uy,Uz = components of up vector
- Ux,Uy,Uz can be variables (see below)
- *zoom* value = zfactor = size that simulation box appears in image
- zfactor = scale image size by factor > 1 to enlarge, factor < 1 to shrink
- zfactor can be a variable (see below)
- *persp* value = pfactor = amount of "perspective" in image
- pfactor = amount of perspective (0 = none, < 1 = some, > 1 = highly skewed)
- pfactor can be a variable (see below)
- *box* values = yes/no diam = draw outline of simulation box
- yes/no = do or do not draw simulation box lines
- diam = diameter of box lines as fraction of shortest box length
- *axes* values = yes/no length diam = draw xyz axes
- yes/no = do or do not draw xyz axes lines next to simulation box
- length = length of axes lines as fraction of respective box lengths
- diam = diameter of axes lines as fraction of shortest box length
- *subbox* values = yes/no diam = draw outline of processor sub-domains
- yes/no = do or do not draw sub-domain lines
- diam = diameter of sub-domain lines as fraction of shortest box length
- *shiny* value = sfactor = shinyness of spheres and cylinders
- sfactor = shinyness of spheres and cylinders from 0.0 to 1.0
- *ssao* value = yes/no seed dfactor = SSAO depth shading
- yes/no = turn depth shading on/off
- seed = random # seed (positive integer)
- dfactor = strength of shading from 0.0 to 1.0
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dump d0 all image 100 dump.*.jpg type type
- dump d1 mobile image 500 snap.*.png element element ssao yes 4539 0.6
- dump d2 all image 200 img-*.ppm type type zoom 2.5 adiam 1.5 size 1280 720
- dump m0 all movie 1000 movie.mpg type type size 640 480
- dump m1 all movie 1000 movie.avi type type size 640 480
- dump m2 all movie 100 movie.m4v type type zoom 1.8 adiam v_value size 1280 720
-
-Description
-"""""""""""
-
-Dump a high-quality rendered image of the atom configuration every N
-timesteps and save the images either as a sequence of JPEG or PNG or
-PPM files, or as a single movie file. The options for this command as
-well as the :doc:`dump_modify <dump_modify>` command control what is
-included in the image or movie and how it appears. A series of such
-images can easily be manually converted into an animated movie of your
-simulation or the process can be automated without writing the
-intermediate files using the dump movie style; see further details
-below. Other dump styles store snapshots of numerical data asociated
-with atoms in various formats, as discussed on the :doc:`dump <dump>`
-doc page.
-
-Note that a set of images or a movie can be made after a simulation
-has been run, using the :doc:`rerun <rerun>` command to read snapshots
-from an existing dump file, and using these dump commands in the rerun
-script to generate the images/movie.
-
-Here are two sample images, rendered as 1024x1024 JPEG files. Click
-to see the full-size images:
-
-.. raw:: html
-
- <DIV ALIGN=center>
-
-.. thumbnail:: JPG/dump1.jpg
-
-.. thumbnail:: JPG/dump2.jpg
-
-.. raw:: html
-
- </DIV>
-
-Only atoms in the specified group are rendered in the image. The
-:doc:`dump_modify region and thresh <dump_modify>` commands can also
-alter what atoms are included in the image.
-The filename suffix determines whether a JPEG, PNG, or PPM file is
-created with the *image* dump style. If the suffix is ".jpg" or
-".jpeg", then a JPEG format file is created, if the suffix is ".png",
-then a PNG format is created, else a PPM (aka NETPBM) format file is
-created. The JPEG and PNG files are binary; PPM has a text mode
-header followed by binary data. JPEG images have lossy compression;
-PNG has lossless compression; and PPM files are uncompressed but can
-be compressed with gzip, if LAMMPS has been compiled with
--DLAMMPS_GZIP and a ".gz" suffix is used.
-
-Similarly, the format of the resulting movie is chosen with the
-*movie* dump style. This is handled by the underlying FFmpeg converter
-and thus details have to be looked up in the FFmpeg documentation.
-Typical examples are: .avi, .mpg, .m4v, .mp4, .mkv, .flv, .mov, .gif
-Additional settings of the movie compression like bitrate and
-framerate can be set using the :doc:`dump_modify <dump_modify>` command.
-
-To write out JPEG and PNG format files, you must build LAMMPS with
-support for the corresponding JPEG or PNG library. To convert images
-into movies, LAMMPS has to be compiled with the -DLAMMPS_FFMPEG
-flag. See :ref:`this section <start_2_4>` of the manual
-for instructions on how to do this.
-
-.. note::
-
- Because periodic boundary conditions are enforced only on
- timesteps when neighbor lists are rebuilt, the coordinates of an atom
- in the image may be slightly outside the simulation box.
-
-
-----------
-
-
-Dumps are performed on timesteps that are a multiple of N (including
-timestep 0) and on the last timestep of a minimization if the
-minimization converges. Note that this means a dump will not be
-performed on the initial timestep after the dump command is invoked,
-if the current timestep is not a multiple of N. This behavior can be
-changed via the :doc:`dump_modify first <dump_modify>` command, which
-can be useful if the dump command is invoked after a minimization
-ended on an arbitrary timestep. N can be changed between runs by
-using the :doc:`dump_modify every <dump_modify>` command.
-
-Dump *image* filenames must contain a wildcard character "*", so that
-one image file per snapshot is written. The "*" character is replaced
-with the timestep value. For example, tmp.dump.*.jpg becomes
-tmp.dump.0.jpg, tmp.dump.10000.jpg, tmp.dump.20000.jpg, etc. Note
-that the :doc:`dump_modify pad <dump_modify>` command can be used to
-insure all timestep numbers are the same length (e.g. 00010), which
-can make it easier to convert a series of images into a movie in the
-correct ordering.
-
-Dump *movie* filenames on the other hand, must not have any wildcard
-character since only one file combining all images into a single
-movie will be written by the movie encoder.
-
-
-----------
-
-
-The *color* and *diameter* settings determine the color and size of
-atoms rendered in the image. They can be any atom attribute defined
-for the :doc:`dump custom <dump>` command, including *type* and
-*element*\ . This includes per-atom quantities calculated by a
-:doc:`compute <compute>`, :doc:`fix <fix>`, or :doc:`variable <variable>`,
-which are prefixed by "c_", "f_", or "v_" respectively. Note that the
-*diameter* setting can be overridden with a numeric value applied to
-all atoms by the optional *adiam* keyword.
-
-If *type* is specified for the *color* setting, then the color of each
-atom is determined by its atom type. By default the mapping of types
-to colors is as follows:
-
-* type 1 = red
-* type 2 = green
-* type 3 = blue
-* type 4 = yellow
-* type 5 = aqua
-* type 6 = cyan
-
-and repeats itself for types > 6. This mapping can be changed by the
-:doc:`dump_modify acolor <dump_modify>` command.
-
-If *type* is specified for the *diameter* setting then the diameter of
-each atom is determined by its atom type. By default all types have
-diameter 1.0. This mapping can be changed by the :doc:`dump_modify adiam <dump_modify>` command.
-
-If *element* is specified for the *color* and/or *diameter* setting,
-then the color and/or diameter of each atom is determined by which
-element it is, which in turn is specified by the element-to-type
-mapping specified by the "dump_modify element" command. By default
-every atom type is C (carbon). Every element has a color and diameter
-associated with it, which is the same as the colors and sizes used by
-the `AtomEye <atomeye_>`_ visualization package.
-
-.. _atomeye: http://mt.seas.upenn.edu/Archive/Graphics/A
-
-
-
-If other atom attributes are used for the *color* or *diameter*
-settings, they are interpreted in the following way.
-
-If "vx", for example, is used as the *color* setting, then the color
-of the atom will depend on the x-component of its velocity. The
-association of a per-atom value with a specific color is determined by
-a "color map", which can be specified via the
-:doc:`dump_modify <dump_modify>` command. The basic idea is that the
-atom-attribute will be within a range of values, and every value
-within the range is mapped to a specific color. Depending on how the
-color map is defined, that mapping can take place via interpolation so
-that a value of -3.2 is halfway between "red" and "blue", or
-discretely so that the value of -3.2 is "orange".
-
-If "vx", for example, is used as the *diameter* setting, then the atom
-will be rendered using the x-component of its velocity as the
-diameter. If the per-atom value <= 0.0, them the atom will not be
-drawn. Note that finite-size spherical particles, as defined by
-:doc:`atom_style sphere <atom_style>` define a per-particle radius or
-diameter, which can be used as the *diameter* setting.
-
-
-----------
-
-
-The various kewords listed above control how the image is rendered.
-As listed below, all of the keywords have defaults, most of which you
-will likely not need to change. The :doc:`dump modify <dump_modify>`
-also has options specific to the dump image style, particularly for
-assigning colors to atoms, bonds, and other image features.
-
-
-----------
-
-
-The *atom* keyword allow you to turn off the drawing of all atoms, if
-the specified value is *no*\ . Note that this will not turn off the
-drawing of particles that are represented as lines, triangles, or
-bodies, as discussed below. These particles can be drawn separately
-if the *line*\ , *tri*\ , or *body* keywords are used.
-
-The *adiam* keyword allows you to override the *diameter* setting to
-set a single numeric *size*\ . All atoms will be drawn with that
-diameter, e.g. 1.5, which is in whatever distance :doc:`units <units>`
-the input script defines, e.g. Angstroms.
-
-
-----------
-
-
-The *bond* keyword allows to you to alter how bonds are drawn. A bond
-is only drawn if both atoms in the bond are being drawn due to being
-in the specified group and due to other selection criteria
-(e.g. region, threshhold settings of the
-:doc:`dump_modify <dump_modify>` command). By default, bonds are drawn
-if they are defined in the input data file as read by the
-:doc:`read_data <read_data>` command. Using *none* for both the bond
-*color* and *width* value will turn off the drawing of all bonds.
-
-If *atom* is specified for the bond *color* value, then each bond is
-drawn in 2 halves, with the color of each half being the color of the
-atom at that end of the bond.
-
-If *type* is specified for the *color* value, then the color of each
-bond is determined by its bond type. By default the mapping of bond
-types to colors is as follows:
-
-* type 1 = red
-* type 2 = green
-* type 3 = blue
-* type 4 = yellow
-* type 5 = aqua
-* type 6 = cyan
-
-and repeats itself for bond types > 6. This mapping can be changed by
-the :doc:`dump_modify bcolor <dump_modify>` command.
-
-The bond *width* value can be a numeric value or *atom* or *type* (or
-*none* as indicated above).
-
-If a numeric value is specified, then all bonds will be drawn as
-cylinders with that diameter, e.g. 1.0, which is in whatever distance
-:doc:`units <units>` the input script defines, e.g. Angstroms.
-
-If *atom* is specified for the *width* value, then each bond
-will be drawn with a width corresponding to the minimum diameter
-of the 2 atoms in the bond.
-
-If *type* is specified for the *width* value then the diameter of each
-bond is determined by its bond type. By default all types have
-diameter 0.5. This mapping can be changed by the :doc:`dump_modify bdiam <dump_modify>` command.
-
-
-----------
-
-
-The *line* keyword can be used when :doc:`atom_style line <atom_style>`
-is used to define particles as line segments, and will draw them as
-lines. If this keyword is not used, such particles will be drawn as
-spheres, the same as if they were regular atoms. The only setting
-currently allowed for the *color* value is *type*\ , which will color
-the lines according to the atom type of the particle. By default the
-mapping of types to colors is as follows:
-
-* type 1 = red
-* type 2 = green
-* type 3 = blue
-* type 4 = yellow
-* type 5 = aqua
-* type 6 = cyan
-
-and repeats itself for types > 6. There is not yet an option to
-change this via the :doc:`dump_modify <dump_modify>` command.
-
-The line *width* can only be a numeric value, which specifies that all
-lines will be drawn as cylinders with that diameter, e.g. 1.0, which
-is in whatever distance :doc:`units <units>` the input script defines,
-e.g. Angstroms.
-
-
-----------
-
-
-The *tri* keyword can be used when :doc:`atom_style tri <atom_style>` is
-used to define particles as triangles, and will draw them as triangles
-or edges (3 lines) or both, depending on the setting for *tflag*\ . If
-edges are drawn, the *width* setting determines the diameters of the
-line segments. If this keyword is not used, triangle particles will
-be drawn as spheres, the same as if they were regular atoms. The only
-setting currently allowed for the *color* value is *type*\ , which will
-color the triangles according to the atom type of the particle. By
-default the mapping of types to colors is as follows:
-
-* type 1 = red
-* type 2 = green
-* type 3 = blue
-* type 4 = yellow
-* type 5 = aqua
-* type 6 = cyan
-
-and repeats itself for types > 6. There is not yet an option to
-change this via the :doc:`dump_modify <dump_modify>` command.
-
-
-----------
-
-
-The *body* keyword can be used when :doc:`atom_style body <atom_style>`
-is used to define body particles with internal state
-(e.g. sub-particles), and will drawn them in a manner specific to the
-body style. If this keyword is not used, such particles will be drawn
-as spheres, the same as if they were regular atoms.
-
-The :doc:`body <body>` doc page descibes the body styles LAMMPS
-currently supports, and provides more details as to the kind of body
-particles they represent and how they are drawn by this dump image
-command. For all the body styles, individual atoms can be either a
-body particle or a usual point (non-body) particle. Non-body
-particles will be drawn the same way they would be as a regular atom.
-The *bflag1* and *bflag2* settings are numerical values which are
-passed to the body style to affect how the drawing of a body particle
-is done. See the :doc:`body <body>` doc page for a description of what
-these parameters mean for each body style.
-
-The only setting currently allowed for the *color* value is *type*\ ,
-which will color the body particles according to the atom type of the
-particle. By default the mapping of types to colors is as follows:
-
-* type 1 = red
-* type 2 = green
-* type 3 = blue
-* type 4 = yellow
-* type 5 = aqua
-* type 6 = cyan
-
-and repeats itself for types > 6. There is not yet an option to
-change this via the :doc:`dump_modify <dump_modify>` command.
-
-
-----------
-
-
-The *fix* keyword can be used with a :doc:`fix <fix>` that produces
-objects to be drawn. An example is the :doc:`fix surface/global <fix_surface_global>` command which can draw lines
-or triangles for 2d/3d simulations.
-
-The *fflag1* and *fflag2* settings are numerical values which are
-passed to the fix to affect how the drawing of its objects is done.
-See the individual fix doc page for a description of what these
-parameters mean for a particular fix.
-
-The only setting currently allowed for the *color* value is *type*\ ,
-which will color the fix objects according to their type. By default
-the mapping of types to colors is as follows:
-
-* type 1 = red
-* type 2 = green
-* type 3 = blue
-* type 4 = yellow
-* type 5 = aqua
-* type 6 = cyan
-
-and repeats itself for types > 6. There is not yet an option to
-change this via the :doc:`dump_modify <dump_modify>` command.
-
-
-----------
-
-
-The *size* keyword sets the width and height of the created images,
-i.e. the number of pixels in each direction.
-
-
-----------
-
-
-The *view*\ , *center*\ , *up*\ , *zoom*\ , and *persp* values determine how
-3d simulation space is mapped to the 2d plane of the image. Basically
-they control how the simulation box appears in the image.
-
-All of the *view*\ , *center*\ , *up*\ , *zoom*\ , and *persp* values can be
-specified as numeric quantities, whose meaning is explained below.
-Any of them can also be specified as an :doc:`equal-style variable <variable>`, by using v_name as the value, where "name" is
-the variable name. In this case the variable will be evaluated on the
-timestep each image is created to create a new value. If the
-equal-style variable is time-dependent, this is a means of changing
-the way the simulation box appears from image to image, effectively
-doing a pan or fly-by view of your simulation.
-
-The *view* keyword determines the viewpoint from which the simulation
-box is viewed, looking towards the *center* point. The *theta* value
-is the vertical angle from the +z axis, and must be an angle from 0 to
-180 degrees. The *phi* value is an azimuthal angle around the z axis
-and can be positive or negative. A value of 0.0 is a view along the
-+x axis, towards the *center* point. If *theta* or *phi* are
-specified via variables, then the variable values should be in
-degrees.
-
-The *center* keyword determines the point in simulation space that
-will be at the center of the image. *Cx*\ , *Cy*\ , and *Cz* are
-speficied as fractions of the box dimensions, so that (0.5,0.5,0.5) is
-the center of the simulation box. These values do not have to be
-between 0.0 and 1.0, if you want the simulation box to be offset from
-the center of the image. Note, however, that if you choose strange
-values for *Cx*\ , *Cy*\ , or *Cz* you may get a blank image. Internally,
-*Cx*\ , *Cy*\ , and *Cz* are converted into a point in simulation space.
-If *flag* is set to "s" for static, then this conversion is done once,
-at the time the dump command is issued. If *flag* is set to "d" for
-dynamic then the conversion is performed every time a new image is
-created. If the box size or shape is changing, this will adjust the
-center point in simulation space.
-
-The *up* keyword determines what direction in simulation space will be
-"up" in the image. Internally it is stored as a vector that is in the
-plane perpendicular to the view vector implied by the *theta* and
-*pni* values, and which is also in the plane defined by the view
-vector and user-specified up vector. Thus this internal vector is
-computed from the user-specified *up* vector as
-
-.. parsed-literal::
-
- up_internal = view cross (up cross view)
-
-This means the only restriction on the specified *up* vector is that
-it cannot be parallel to the *view* vector, implied by the *theta* and
-*phi* values.
-
-The *zoom* keyword scales the size of the simulation box as it appears
-in the image. The default *zfactor* value of 1 should display an
-image mostly filled by the atoms in the simulation box. A *zfactor* >
-1 will make the simulation box larger; a *zfactor* < 1 will make it
-smaller. *Zfactor* must be a value > 0.0.
-
-The *persp* keyword determines how much depth perspective is present
-in the image. Depth perspective makes lines that are parallel in
-simulation space appear non-parallel in the image. A *pfactor* value
-of 0.0 means that parallel lines will meet at infininty (1.0/pfactor),
-which is an orthographic rendering with no persepctive. A *pfactor*
-value between 0.0 and 1.0 will introduce more perspective. A *pfactor*
-value > 1 will create a highly skewed image with a large amount of
-perspective.
-
-.. note::
-
- The *persp* keyword is not yet supported as an option.
-
-
-----------
-
-
-The *box* keyword determines if and how the simulation box boundaries
-are rendered as thin cylinders in the image. If *no* is set, then the
-box boundaries are not drawn and the *diam* setting is ignored. If
-*yes* is set, the 12 edges of the box are drawn, with a diameter that
-is a fraction of the shortest box length in x,y,z (for 3d) or x,y (for
-2d). The color of the box boundaries can be set with the :doc:`dump_modify boxcolor <dump_modify>` command.
-
-The *axes* keyword determines if and how the coordinate axes are
-rendered as thin cylinders in the image. If *no* is set, then the
-axes are not drawn and the *length* and *diam* settings are ignored.
-If *yes* is set, 3 thin cylinders are drawn to represent the x,y,z
-axes in colors red,green,blue. The origin of these cylinders will be
-offset from the lower left corner of the box by 10%. The *length*
-setting determines how long the cylinders will be as a fraction of the
-respective box lengths. The *diam* setting determines their thickness
-as a fraction of the shortest box length in x,y,z (for 3d) or x,y (for
-2d).
-
-The *subbox* keyword determines if and how processor sub-domain
-boundaries are rendered as thin cylinders in the image. If *no* is
-set (default), then the sub-domain boundaries are not drawn and the
-*diam* setting is ignored. If *yes* is set, the 12 edges of each
-processor sub-domain are drawn, with a diameter that is a fraction of
-the shortest box length in x,y,z (for 3d) or x,y (for 2d). The color
-of the sub-domain boundaries can be set with the :doc:`dump_modify boxcolor <dump_modify>` command.
-
-
-----------
-
-
-The *shiny* keyword determines how shiny the objects rendered in the
-image will appear. The *sfactor* value must be a value 0.0 <=
-*sfactor* <= 1.0, where *sfactor* = 1 is a highly reflective surface
-and *sfactor* = 0 is a rough non-shiny surface.
-
-The *ssao* keyword turns on/off a screen space ambient occlusion
-(SSAO) model for depth shading. If *yes* is set, then atoms further
-away from the viewer are darkened via a randomized process, which is
-perceived as depth. The calculation of this effect can increase the
-cost of computing the image by roughly 2x. The strength of the effect
-can be scaled by the *dfactor* parameter. If *no* is set, no depth
-shading is performed.
-
-
-----------
-
-
-A series of JPEG, PNG, or PPM images can be converted into a movie
-file and then played as a movie using commonly available tools. Using
-dump style *movie* automates this step and avoids the intermediate
-step of writing (many) image snapshot file. But LAMMPS has to be
-compiled with -DLAMMPS_FFMPEG and an FFmpeg executable have to be
-installed.
-
-To manually convert JPEG, PNG or PPM files into an animated GIF or
-MPEG or other movie file you can use:
-
-* a) Use the ImageMagick convert program.
-.. parsed-literal::
-
- % convert *.jpg foo.gif
- % convert -loop 1 *.ppm foo.mpg
-
-Animated GIF files from ImageMagick are unoptimized. You can use a
-program like gifsicle to optimize and massively shrink them.
-MPEG files created by ImageMagick are in MPEG-1 format with rather
-inefficient compression and low quality.
-
-* b) Use QuickTime.
-Select "Open Image Sequence" under the File menu Load the images into
-QuickTime to animate them Select "Export" under the File menu Save the
-movie as a QuickTime movie (*.mov) or in another format. QuickTime
-can generate very high quality and efficiently compressed movie
-files. Some of the supported formats require to buy a license and some
-are not readable on all platforms until specific runtime libraries are
-installed.
-
-* c) Use FFmpeg
-FFmpeg is a command line tool that is available on many platforms and
-allows extremely flexible encoding and decoding of movies.
-
-.. parsed-literal::
-
- cat snap.*.jpg | ffmpeg -y -f image2pipe -c:v mjpeg -i - -b:v 2000k movie.m4v
- cat snap.*.ppm | ffmpeg -y -f image2pipe -c:v ppm -i - -b:v 2400k movie.avi
-
-Frontends for FFmpeg exist for multiple platforms. For more
-information see the `FFmpeg homepage <http://www.ffmpeg.org/>`_
-
-
-
-
-----------
-
-
-Play the movie:
-
-* a) Use your browser to view an animated GIF movie.
-Select "Open File" under the File menu
-Load the animated GIF file
-
-* b) Use the freely available mplayer or ffplay tool to view a
- movie. Both are available for multiple OSes and support a large
- variety of file formats and decoders.
-.. parsed-literal::
-
- % mplayer foo.mpg
- % ffplay bar.avi
-
-* c) Use the `Pizza.py <http://www.sandia.gov/~sjplimp/pizza.html>`_
- `animate tool <http://www.sandia.gov/~sjplimp/pizza/doc/animate.html>`_,
- which works directly on a series of image files.
-.. parsed-literal::
-
- a = animate("foo*.jpg")
-
-* d) QuickTime and other Windows- or MacOS-based media players can
- obviously play movie files directly. Similarly for corresponding tools
- bundled with Linux desktop environments. However, due to licensing
- issues with some file formats, the formats may require installing
- additional libraries, purchasing a license, or may not be
- supported.
-
-
-----------
-
-
-See :doc:`Section_modify <Section_modify>` of the manual for information
-on how to add new compute and fix styles to LAMMPS to calculate
-per-atom quantities which could then be output into dump files.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-To write JPEG images, you must use the -DLAMMPS_JPEG switch when
-building LAMMPS and link with a JPEG library. To write PNG images, you
-must use the -DLAMMPS_PNG switch when building LAMMPS and link with a
-PNG library.
-
-To write *movie* dumps, you must use the -DLAMMPS_FFMPEG switch when
-building LAMMPS and have the FFmpeg executable available on the
-machine where LAMMPS is being run. Typically it's name is lowercase,
-i.e. ffmpeg.
-
-See the :ref:`Making LAMMPS <start_2_4>` section of the
-documentation for details on how to compile with optional switches.
-
-Note that since FFmpeg is run as an external program via a pipe,
-LAMMPS has limited control over its execution and no knowledge about
-errors and warnings printed by it. Those warnings and error messages
-will be printed to the screen only. Due to the way image data is
-communicated to FFmpeg, it will often print the message
-
-.. parsed-literal::
-
- pipe:: Input/output error
-
-which can be safely ignored. Other warnings
-and errors have to be addressed according to the FFmpeg documentation.
-One known issue is that certain movie file formats (e.g. MPEG level 1
-and 2 format streams) have video bandwith limits that can be crossed
-when rendering too large of image sizes. Typical warnings look like
-this:
-
-.. parsed-literal::
-
- [mpeg @ 0x98b5e0] packet too large, ignoring buffer limits to mux it
- [mpeg @ 0x98b5e0] buffer underflow st=0 bufi=281407 size=285018
- [mpeg @ 0x98b5e0] buffer underflow st=0 bufi=283448 size=285018
-
-In this case it is recommended to either reduce the size of the image
-or encode in a different format that is also supported by your copy of
-FFmpeg, and which does not have this limitation (e.g. .avi, .mkv,
-mp4).
-
-Related commands
-""""""""""""""""
-
-:doc:`dump <dump>`, :doc:`dump_modify <dump_modify>`, :doc:`undump <undump>`
-
-Default
-"""""""
-
-The defaults for the keywords are as follows:
-
-* adiam = not specified (use diameter setting)
-* atom = yes
-* bond = none none (if no bonds in system)
-* bond = atom 0.5 (if bonds in system)
-* size = 512 512
-* view = 60 30 (for 3d)
-* view = 0 0 (for 2d)
-* center = s 0.5 0.5 0.5
-* up = 0 0 1 (for 3d)
-* up = 0 1 0 (for 2d)
-* zoom = 1.0
-* persp = 0.0
-* box = yes 0.02
-* axes = no 0.0 0.0
-* subbox no 0.0
-* shiny = 1.0
-* ssao = no
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dump_modify.txt b/doc/html/_sources/dump_modify.txt
deleted file mode 100644
index 266207632..000000000
--- a/doc/html/_sources/dump_modify.txt
+++ /dev/null
@@ -1,975 +0,0 @@
-.. index:: dump_modify
-
-dump_modify command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dump_modify dump-ID keyword values ...
-
-* dump-ID = ID of dump to modify
-* one or more keyword/value pairs may be appended
-* these keywords apply to various dump styles
-* 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*
-.. parsed-literal::
-
- *append* arg = *yes* or *no*
- *buffer* arg = *yes* or *no*
- *element* args = E1 E2 ... EN, where N = # of atom types
- E1,...,EN = element name, e.g. C or Fe or Ga
- *every* arg = N
- N = dump every this many timesteps
- N can be a variable (see below)
- *fileper* arg = Np
- Np = write one file for every this many processors
- *first* arg = *yes* or *no*
- *format* args = *line* string, *int* string, *float* string, M string, or *none*
- string = C-style format string
- M = integer from 1 to N, where N = # of per-atom quantities being output
- *flush* arg = *yes* or *no*
- *image* arg = *yes* or *no*
- *label* arg = string
- string = character string (e.g. BONDS) to use in header of dump local file
- *nfile* arg = Nf
- Nf = write this many files, one from each of Nf processors
- *pad* arg = Nchar = # of characters to convert timestep to
- *pbc* arg = *yes* or *no* = remap atoms via periodic boundary conditions
- *precision* arg = power-of-10 value from 10 to 1000000
- *region* arg = region-ID or "none"
- *scale* arg = *yes* or *no*
- *sfactor* arg = coordinate scaling factor (> 0.0)
- *tfactor* arg = time scaling factor (> 0.0)
- *sort* arg = *off* or *id* or N or -N
- off = no sorting of per-atom lines within a snapshot
- id = sort per-atom lines by atom ID
- N = sort per-atom lines in ascending order by the Nth column
- -N = sort per-atom lines in descending order by the Nth column
- *thresh* args = attribute operation value
- attribute = same attributes (x,fy,etotal,sxx,etc) used by dump custom style
- operation = "<" or "<=" or ">" or ">=" or "==" or "!="
- value = numeric value to compare to
- these 3 args can be replaced by the word "none" to turn off thresholding
- *unwrap* arg = *yes* or *no*
-
-* these keywords apply only to the *image* and *movie* :doc:`styles <dump_image>`
-* keyword = *acolor* or *adiam* or *amap* or *backcolor* or *bcolor* or *bdiam* or *boxcolor* or *color* or *bitrate* or *framerate*
-.. parsed-literal::
-
- *acolor* args = type color
- type = atom type or range of types (see below)
- color = name of color or color1/color2/...
- *adiam* args = type diam
- type = atom type or range of types (see below)
- diam = diameter of atoms of that type (distance units)
- *amap* args = lo hi style delta N entry1 entry2 ... entryN
- lo = number or *min* = lower bound of range of color map
- hi = number or *max* = upper bound of range of color map
- style = 2 letters = "c" or "d" or "s" plus "a" or "f"
- "c" for continuous
- "d" for discrete
- "s" for sequential
- "a" for absolute
- "f" for fractional
- delta = binsize (only used for style "s", otherwise ignored)
- binsize = range is divided into bins of this width
- N = # of subsequent entries
- entry = value color (for continuous style)
- value = number or *min* or *max* = single value within range
- color = name of color used for that value
- entry = lo hi color (for discrete style)
- lo/hi = number or *min* or *max* = lower/upper bound of subset of range
- color = name of color used for that subset of values
- entry = color (for sequential style)
- color = name of color used for a bin of values
- *backcolor* arg = color
- color = name of color for background
- *bcolor* args = type color
- type = bond type or range of types (see below)
- color = name of color or color1/color2/...
- *bdiam* args = type diam
- type = bond type or range of types (see below)
- diam = diameter of bonds of that type (distance units)
- *boxcolor* arg = color
- color = name of color for simulation box lines and processor sub-domain lines
- *color* args = name R G B
- name = name of color
- R,G,B = red/green/blue numeric values from 0.0 to 1.0
- *bitrate* arg = rate
- rate = target bitrate for movie in kbps
- *framerate* arg = fps
- fps = frames per second for movie
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dump_modify 1 format line "%d %d %20.15g %g %g" scale yes
- dump_modify 1 format float %20.15g scale yes
- dump_modify myDump image yes scale no flush yes
- dump_modify 1 region mySphere thresh x < 0.0 thresh epair >= 3.2
- dump_modify xtcdump precision 10000 sfactor 0.1
- dump_modify 1 every 1000 nfile 20
- dump_modify 1 every v_myVar
- dump_modify 1 amap min max cf 0.0 3 min green 0.5 yellow max blue boxcolor red
-
-Description
-"""""""""""
-
-Modify the parameters of a previously defined dump command. Not all
-parameters are relevant to all dump styles.
-
-As explained on the :doc:`dump <dump>` doc page, the *atom/mpiio*\ ,
-*custom/mpiio*\ , and *xyz/mpiio* dump styles are identical in command
-syntax and in the format of the dump files they create, to the
-corresponding styles without "mpiio", except the single dump file they
-produce is written in parallel via the MPI-IO library. Thus if a
-dump_modify option below is valid for the *atom* style, it is also
-valid for the *atom/mpiio* style, and similarly for the other styles
-which allow for use of MPI-IO.
-
-
-
-
-
-These keywords apply to various dump styles, including the :doc:`dump image <dump_image>` and :doc:`dump movie <dump_image>` styles. The
-description gives details.
-
-
-----------
-
-
-The *append* keyword applies to all dump styles except *cfg* and *xtc*
-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
-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
-overwrite an existing file with the same name. This keyword can only
-take effect if the dump_modify command is used after the
-:doc:`dump <dump>` command, but before the first command that causes
-dump snapshots to be output, e.g. a :doc:`run <run>` or
-:doc:`minimize <minimize>` command. Once the dump file has been opened,
-this keyword has no further effect.
-
-
-----------
-
-
-The *buffer* keyword applies only to dump styles *atom*\ , *cfg*\ ,
-*custom*\ , *local*\ , and *xyz*\ . It also applies only to text output
-files, not to binary or gzipped files. If specified as *yes*\ , which
-is the default, then each processor writes its output into an internal
-text buffer, which is then sent to the processor(s) which perform file
-writes, and written by those processors(s) as one large chunk of text.
-If specified as *no*\ , each processor sends its per-atom data in binary
-format to the processor(s) which perform file wirtes, and those
-processor(s) format and write it line by line into the output file.
-
-The buffering mode is typically faster since each processor does the
-relatively expensive task of formatting the output for its own atoms.
-However it requires about twice the memory (per processor) for the
-extra buffering.
-
-
-----------
-
-
-The *element* keyword applies only to the the dump *cfg*\ , *xyz*\ , and
-*image* styles. It associates element names (e.g. H, C, Fe) with
-LAMMPS atom types. See the list of element names at the bottom of
-this page.
-
-In the case of dump *cfg*\ , this allows the `AtomEye <atomeye_>`_
-visualization package to read the dump file and render atoms with the
-appropriate size and color.
-
-In the case of dump *image*\ , the output images will follow the same
-`AtomEye <atomeye_>`_ convention. An element name is specified for each
-atom type (1 to Ntype) in the simulation. The same element name can
-be given to multiple atom types.
-
-In the case of *xyz* format dumps, there are no restrictions to what
-label can be used as an element name. Any whitespace separated text
-will be accepted.
-
-.. _atomeye: http://mt.seas.upenn.edu/Archive/Graphics/A
-
-
-
-
-----------
-
-
-The *every* keyword changes the dump frequency originally specified by
-the :doc:`dump <dump>` command to a new value. The every keyword can be
-specified in one of two ways. It can be a numeric value in which case
-it must be > 0. Or it can be an :doc:`equal-style variable <variable>`,
-which should be specified as v_name, where name is the variable name.
-
-In this case, the variable is evaluated at the beginning of a run to
-determine the next timestep at which a dump snapshot will be written
-out. On that timestep the variable will be evaluated again to
-determine the next timestep, etc. Thus the variable should return
-timestep values. See the stagger() and logfreq() and stride() math
-functions for :doc:`equal-style variables <variable>`, as examples of
-useful functions to use in this context. Other similar math functions
-could easily be added as options for :doc:`equal-style variables <variable>`. Also see the next() function, which allows
-use of a file-style variable which reads successive values from a
-file, each time the variable is evaluated. Used with the *every*
-keyword, if the file contains a list of ascending timesteps, you can
-output snapshots whenever you wish.
-
-Note that when using the variable option with the *every* keyword, you
-need to use the *first* option if you want an initial snapshot written
-to the dump file. The *every* keyword cannot be used with the dump
-*dcd* style.
-
-For example, the following commands will
-write snapshots at timesteps 0,10,20,30,100,200,300,1000,2000,etc:
-
-.. parsed-literal::
-
- variable s equal logfreq(10,3,10)
- dump 1 all atom 100 tmp.dump
- dump_modify 1 every v_s first yes
-
-The following commands would write snapshots at the timesteps listed
-in file tmp.times:
-
-.. parsed-literal::
-
- variable f file tmp.times
- variable s equal next(f)
- dump 1 all atom 100 tmp.dump
- dump_modify 1 every v_s
-
-.. note::
-
- When using a file-style variable with the *every* keyword, the
- file of timesteps must list a first timestep that is beyond the
- current timestep (e.g. it cannot be 0). And it must list one or more
- timesteps beyond the length of the run you perform. This is because
- the dump command will generate an error if the next timestep it reads
- from the file is not a value greater than the current timestep. Thus
- if you wanted output on steps 0,15,100 of a 100-timestep run, the file
- should contain the values 15,100,101 and you should also use the
- dump_modify first command. Any final value > 100 could be used in
- place of 101.
-
-
-----------
-
-
-The *first* keyword determines whether a dump snapshot is written on
-the very first timestep after the dump command is invoked. This will
-always occur if the current timestep is a multiple of N, the frequency
-specified in the :doc:`dump <dump>` command, including timestep 0. But
-if this is not the case, a dump snapshot will only be written if the
-setting of this keyword is *yes*\ . If it is *no*\ , which is the
-default, then it will not be written.
-
-
-----------
-
-
-The *flush* keyword determines whether a flush operation is invoked
-after a dump snapshot is written to the dump file. A flush insures
-the output in that file is current (no buffering by the OS), even if
-LAMMPS halts before the simulation completes. Flushes cannot be
-performed with dump style *xtc*\ .
-
-
-----------
-
-
-The *format* keyword can be used to change the default numeric format
-output by the text-based dump styles: *atom*\ , *custom*\ , *cfg*\ , and
-*xyz* styles, and their MPIIO variants. Only the *line* or *none*
-options can be used with the *atom* and *xyz* styles.
-
-All the specified format strings are C-style formats, e.g. as used by
-the C/C++ printf() command. The *line* keyword takes a single
-argument which is the format string for an entire line of output for
-each atom (do not include a trailing "\n"), with N fields, which you
-must enclose in quotes if it is more than one field. The *int* and
-*float* keywords take a single format argument and are applied to all
-integer or floating-point quantities output. The setting for *M
-string* also takes a single format argument which is used for the Mth
-value output in each line, e.g. the 5th column is output in high
-precision for "format 5 %20.15g".
-
-.. note::
-
- When using the *line* keyword for the *cfg* style, the first two
- fields (atom ID and type) are not actually written into the CFG file,
- however you must include formats for them in the format string.
-
-The *format* keyword can be used multiple times. The precedence is
-that for each value in a line of output, the *M* format (if specified)
-is used, else the *int* or *float* setting (if specified) is used,
-else the *line* setting (if specified) for that value is used, else
-the default setting is used. A setting of *none* clears all previous
-settings, reverting all values to their default format.
-
-.. note::
-
- Atom and molecule IDs are stored internally as 4-byte or 8-byte
- signed integers, depending on how LAMMPS was compiled. When
- specifying the *format int* option you can use a "%d"-style format
- identifier in the format string and LAMMPS will convert this to the
- corresponding 8-byte form it it is needed when outputting those
- values. However, when specifying the *line* option or *format M
- string* option for those values, you should specify a format string
- appropriate for an 8-byte signed integer, e.g. one with "%ld", if
- LAMMPS was compiled with the -DLAMMPS_BIGBIG option for 8-byte IDs.
-
-.. note::
-
- Any value written to a text-based dump file that is a per-atom
- quantity calculated by a :doc:`compute <compute>` or :doc:`fix <fix>` is
- stored internally as a floating-point value. If the value is actually
- an integer and you wish it to appear in the text dump file as a
- (large) integer, then you need to use an appropriate format. For
- example, these commands:
-
-.. parsed-literal::
-
- compute 1 all property/local batom1 batom2
- dump 1 all local 100 tmp.bonds index c_1[1] c_1[2]
- dump_modify 1 format "%d %0.0f %0.0f"
-
-will output the two atom IDs for atoms in each bond as integers. If
-the dump_modify command were omitted, they would appear as
-floating-point values, assuming they were large integers (more than 6
-digits). The "index" keyword should use the "%d" format since it is
-not generated by a compute or fix, and is stored internally as an
-integer.
-
-
-----------
-
-
-The *fileper* keyword is documented below with the *nfile* keyword.
-
-
-----------
-
-
-The *image* keyword applies only to the dump *atom* style. If the
-image value is *yes*\ , 3 flags are appended to each atom's coords which
-are the absolute box image of the atom in each dimension. For
-example, an x image flag of -2 with a normalized coord of 0.5 means
-the atom is in the center of the box, but has passed thru the box
-boundary 2 times and is really 2 box lengths to the left of its
-current coordinate. Note that for dump style *custom* these various
-values can be printed in the dump file by using the appropriate atom
-attributes in the dump command itself.
-
-
-----------
-
-
-The *label* keyword applies only to the dump *local* style. When
-it writes local information, such as bond or angle topology
-to a dump file, it will use the specified *label* to format
-the header. By default this includes 2 lines:
-
-.. parsed-literal::
-
- ITEM: NUMBER OF ENTRIES
- ITEM: ENTRIES ...
-
-The word "ENTRIES" will be replaced with the string specified,
-e.g. BONDS or ANGLES.
-
-
-----------
-
-
-The *nfile* or *fileper* keywords can be used in conjunction with the
-"%" wildcard character in the specified dump file name, for all dump
-styles except the *dcd*\ , *image*\ , *movie*\ , *xtc*\ , and *xyz* styles
-(for which "%" is not allowed). As explained on the :doc:`dump <dump>`
-command doc page, the "%" character causes the dump file to be written
-in pieces, one piece for each of P processors. By default P = the
-number of processors the simulation is running on. The *nfile* or
-*fileper* keyword can be used to set P to a smaller value, which can
-be more efficient when running on a large number of processors.
-
-The *nfile* keyword sets P to the specified Nf value. For example, if
-Nf = 4, and the simulation is running on 100 processors, 4 files will
-be written, by processors 0,25,50,75. Each will collect information
-from itself and the next 24 processors and write it to a dump file.
-
-For the *fileper* keyword, the specified value of Np means write one
-file for every Np processors. For example, if Np = 4, every 4th
-processor (0,4,8,12,etc) will collect information from itself and the
-next 3 processors and write it to a dump file.
-
-
-----------
-
-
-The *pad* keyword only applies when the dump filename is specified
-with a wildcard "*" character which becomes the timestep. If *pad* is
-0, which is the default, the timestep is converted into a string of
-unpadded length, e.g. 100 or 12000 or 2000000. When *pad* is
-specified with *Nchar* > 0, the string is padded with leading zeroes
-so they are all the same length = *Nchar*\ . For example, pad 7 would
-yield 0000100, 0012000, 2000000. This can be useful so that
-post-processing programs can easily read the files in ascending
-timestep order.
-
-
-----------
-
-
-The *pbc* keyword applies to all the dump styles. As explained on the
-:doc:`dump <dump>` doc page, atom coordinates in a dump file may be
-slightly outside the simulation box. This is because periodic
-boundary conditions are enforced only on timesteps when neighbor lists
-are rebuilt, which will not typically coincide with the timesteps dump
-snapshots are written. If the setting of this keyword is set to
-*yes*\ , then all atoms will be remapped to the periodic box before the
-snapshot is written, then restored to their original position. If it
-is set to *no* they will not be. The *no* setting is the default
-because it requires no extra computation.
-
-
-----------
-
-
-The *precision* keyword only applies to the dump *xtc* style. A
-specified value of N means that coordinates are stored to 1/N
-nanometer accuracy, e.g. for N = 1000, the coordinates are written to
-1/1000 nanometer accuracy.
-
-
-----------
-
-
-The *sfactor* and *tfactor* keywords only apply to the dump *xtc*
-style. They allow customization of the unit conversion factors used
-when writing to XTC files. By default they are initialized for
-whatever :doc:`units <units>` style is being used, to write out
-coordinates in nanometers and time in picoseconds. I.e. for *real*
-units, LAMMPS defines *sfactor* = 0.1 and *tfactor* = 0.001, since the
-Angstroms and fmsec used by *real* units are 0.1 nm and 0.001 psec
-respectively. If you are using a units system with distance and time
-units far from nm and psec, you may wish to write XTC files with
-different units, since the compression algorithm used in XTC files is
-most effective when the typical magnitude of position data is between
-10.0 and 0.1.
-
-
-----------
-
-
-The *region* keyword only applies to the dump *custom*\ , *cfg*\ ,
-*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
-one region can be applied as a filter (the last one specified). See
-the :doc:`region <region>` command for more details. Note that a region
-can be defined as the "inside" or "outside" of a geometric shape, and
-it can be the "union" or "intersection" of a series of simpler
-regions.
-
-
-----------
-
-
-The *scale* keyword applies only to the dump *atom* style. A scale
-value of *yes* means atom coords are written in normalized units from
-0.0 to 1.0 in each box dimension. If the simluation box is triclinic
-(tilted), then all atom coords will still be between 0.0 and 1.0. A
-value of *no* means they are written in absolute distance units
-(e.g. Angstroms or sigma).
-
-
-----------
-
-
-The *sort* keyword determines whether lines of per-atom output in a
-snapshot are sorted or not. A sort value of *off* means they will
-typically be written in indeterminate order, either in serial or
-parallel. This is the case even in serial if the :doc:`atom_modify sort <atom_modify>` option is turned on, which it is by default, to
-improve performance. A sort value of *id* means sort the output by
-atom ID. A sort value of N or -N means sort the output by the value
-in the Nth column of per-atom info in either ascending or descending
-order.
-
-The dump *local* style cannot be sorted by atom ID, since there are
-typically multiple lines of output per atom. Some dump styles, such
-as *dcd* and *xtc*\ , require sorting by atom ID to format the output
-file correctly. If multiple processors are writing the dump file, via
-the "%" wildcard in the dump filename, then sorting cannot be
-performed.
-
-.. note::
-
- Unless it is required by the dump style, sorting dump file
- output requires extra overhead in terms of CPU and communication cost,
- as well as memory, versus unsorted output.
-
-
-----------
-
-
-The *thresh* keyword only applies to the dump *custom*\ , *cfg*\ ,
-*image*\ , and *movie* styles. Multiple thresholds can be specified.
-Specifying "none" turns off all threshold criteria. If thresholds are
-specified, only atoms whose attributes meet all the threshold criteria
-are written to the dump file or included in the image. The possible
-attributes that can be tested for are the same as those that can be
-specified in the :doc:`dump custom <dump>` command, with the exception
-of the *element* attribute, since it is not a numeric value. Note
-that different attributes can be output by the dump custom command
-than are used as threshold criteria by the dump_modify command.
-E.g. you can output the coordinates and stress of atoms whose energy
-is above some threshold.
-
-
-----------
-
-
-The *unwrap* keyword only applies to the dump *dcd* and *xtc* styles.
-If set to *yes*\ , coordinates will be written "unwrapped" by the image
-flags for each atom. Unwrapped means that if the atom has passed thru
-a periodic boundary one or more times, the value is printed for what
-the coordinate would be if it had not been wrapped back into the
-periodic box. Note that these coordinates may thus be far outside the
-box size stored with the snapshot.
-
-
-
-
-
-These keywords apply only to the :doc:`dump image <dump_image>` and
-:doc:`dump movie <dump_image>` styles. Any keyword that affects an
-image, also affects a movie, since the movie is simply a collection of
-images. Some of the keywords only affect the :doc:`dump movie <dump_image>` style. The descriptions give details.
-
-
-----------
-
-
-The *acolor* keyword can be used with the :doc:`dump image <dump_image>`
-command, when its atom color setting is *type*\ , to set the color that
-atoms of each type will be drawn in the image.
-
-The specified *type* should be an integer from 1 to Ntypes = the
-number of atom types. A wildcard asterisk can be used in place of or
-in conjunction with the *type* argument to specify a range of atom
-types. This takes the form "*" or "*n" or "n*" or "m*n". If N = the
-number of atom types, then an asterisk with no numeric values means
-all types from 1 to N. A leading asterisk means all types from 1 to n
-(inclusive). A trailing asterisk means all types from n to N
-(inclusive). A middle asterisk means all types from m to n
-(inclusive).
-
-The specified *color* can be a single color which is any of the 140
-pre-defined colors (see below) or a color name defined by the
-dump_modify color option. Or it can be two or more colors separated
-by a "/" character, e.g. red/green/blue. In the former case, that
-color is assigned to all the specified atom types. In the latter
-case, the list of colors are assigned in a round-robin fashion to each
-of the specified atom types.
-
-
-----------
-
-
-The *adiam* keyword can be used with the :doc:`dump image <dump_image>`
-command, when its atom diameter setting is *type*\ , to set the size
-that atoms of each type will be drawn in the image. The specified
-*type* should be an integer from 1 to Ntypes. As with the *acolor*
-keyword, a wildcard asterisk can be used as part of the *type*
-argument to specify a range of atomt types. The specified *diam* is
-the size in whatever distance :doc:`units <units>` the input script is
-using, e.g. Angstroms.
-
-
-----------
-
-
-The *amap* keyword can be used with the :doc:`dump image <dump_image>`
-command, with its *atom* keyword, when its atom setting is an
-atom-attribute, to setup a color map. The color map is used to assign
-a specific RGB (red/green/blue) color value to an individual atom when
-it is drawn, based on the atom's attribute, which is a numeric value,
-e.g. its x-component of velocity if the atom-attribute "vx" was
-specified.
-
-The basic idea of a color map is that the atom-attribute will be
-within a range of values, and that range is associated with a a series
-of colors (e.g. red, blue, green). An atom's specific value (vx =
--3.2) can then mapped to the series of colors (e.g. halfway between
-red and blue), and a specific color is determined via an interpolation
-procedure.
-
-There are many possible options for the color map, enabled by the
-*amap* keyword. Here are the details.
-
-The *lo* and *hi* settings determine the range of values allowed for
-the atom attribute. If numeric values are used for *lo* and/or *hi*\ ,
-then values that are lower/higher than that value are set to the
-value. I.e. the range is static. If *lo* is specified as *min* or
-*hi* as *max* then the range is dynamic, and the lower and/or
-upper bound will be calculated each time an image is drawn, based
-on the set of atoms being visualized.
-
-The *style* setting is two letters, such as "ca". The first letter is
-either "c" for continuous, "d" for discrete, or "s" for sequential.
-The second letter is either "a" for absolute, or "f" for fractional.
-
-A continuous color map is one in which the color changes continuously
-from value to value within the range. A discrete color map is one in
-which discrete colors are assigned to sub-ranges of values within the
-range. A sequential color map is one in which discrete colors are
-assigned to a sequence of sub-ranges of values covering the entire
-range.
-
-An absolute color map is one in which the values to which colors are
-assigned are specified explicitly as values within the range. A
-fractional color map is one in which the values to which colors are
-assigned are specified as a fractional portion of the range. For
-example if the range is from -10.0 to 10.0, and the color red is to be
-assigned to atoms with a value of 5.0, then for an absolute color map
-the number 5.0 would be used. But for a fractional map, the number
-0.75 would be used since 5.0 is 3/4 of the way from -10.0 to 10.0.
-
-The *delta* setting must be specified for all styles, but is only used
-for the sequential style; otherwise the value is ignored. It
-specifies the bin size to use within the range for assigning
-consecutive colors to. For example, if the range is from -10.0 to
-10.0 and a *delta* of 1.0 is used, then 20 colors will be assigned to
-the range. The first will be from -10.0 <= color1 < -9.0, then 2nd
-from -9.0 <= color2 < -8.0, etc.
-
-The *N* setting is how many entries follow. The format of the entries
-depends on whether the color map style is continuous, discrete or
-sequential. In all cases the *color* setting can be any of the 140
-pre-defined colors (see below) or a color name defined by the
-dump_modify color option.
-
-For continuous color maps, each entry has a *value* and a *color*\ .
-The *value* is either a number within the range of values or *min* or
-*max*\ . The *value* of the first entry must be *min* and the *value*
-of the last entry must be *max*\ . Any entries in between must have
-increasing values. Note that numeric values can be specified either
-as absolute numbers or as fractions (0.0 to 1.0) of the range,
-depending on the "a" or "f" in the style setting for the color map.
-
-Here is how the entries are used to determine the color of an
-individual atom, given the value X of its atom attribute. X will fall
-between 2 of the entry values. The color of the atom is linearly
-interpolated (in each of the RGB values) between the 2 colors
-associated with those entries. For example, if X = -5.0 and the 2
-surrounding entries are "red" at -10.0 and "blue" at 0.0, then the
-atom's color will be halfway between "red" and "blue", which happens
-to be "purple".
-
-For discrete color maps, each entry has a *lo* and *hi* value and a
-*color*\ . The *lo* and *hi* settings are either numbers within the
-range of values or *lo* can be *min* or *hi* can be *max*\ . The *lo*
-and *hi* settings of the last entry must be *min* and *max*\ . Other
-entries can have any *lo* and *hi* values and the sub-ranges of
-different values can overlap. Note that numeric *lo* and *hi* values
-can be specified either as absolute numbers or as fractions (0.0 to
-1.0) of the range, depending on the "a" or "f" in the style setting
-for the color map.
-
-Here is how the entries are used to determine the color of an
-individual atom, given the value X of its atom attribute. The entries
-are scanned from first to last. The first time that *lo* <= X <=
-*hi*\ , X is assigned the color associated with that entry. You can
-think of the last entry as assigning a default color (since it will
-always be matched by X), and the earlier entries as colors that
-override the default. Also note that no interpolation of a color RGB
-is done. All atoms will be drawn with one of the colors in the list
-of entries.
-
-For sequential color maps, each entry has only a *color*\ . Here is how
-the entries are used to determine the color of an individual atom,
-given the value X of its atom attribute. The range is partitioned
-into N bins of width *binsize*\ . Thus X will fall in a specific bin
-from 1 to N, say the Mth bin. If it falls on a boundary between 2
-bins, it is considered to be in the higher of the 2 bins. Each bin is
-assigned a color from the E entries. If E < N, then the colors are
-repeated. For example if 2 entries with colors red and green are
-specified, then the odd numbered bins will be red and the even bins
-green. The color of the atom is the color of its bin. Note that the
-sequential color map is really a shorthand way of defining a discrete
-color map without having to specify where all the bin boundaries are.
-
-Here is an example of using a sequential color map to color all the
-atoms in individual molecules with a different color. See the
-examples/pour/in.pour.2d.molecule input script for an example of how
-this is used.
-
-.. parsed-literal::
-
- variable colors string &
- "red green blue yellow white &
- purple pink orange lime gray"
- variable mol atom mol%10
- dump 1 all image 250 image.*.jpg v_mol type &
- zoom 1.6 adiam 1.5
- dump_modify 1 pad 5 amap 0 10 sa 1 10 ${colors}
-
-In this case, 10 colors are defined, and molecule IDs are
-mapped to one of the colors, even if there are 1000s of molecules.
-
-
-----------
-
-
-The *backcolor* sets the background color of the images. The color
-name can be any of the 140 pre-defined colors (see below) or a color
-name defined by the dump_modify color option.
-
-
-----------
-
-
-The *bcolor* keyword can be used with the :doc:`dump image <dump_image>`
-command, with its *bond* keyword, when its color setting is *type*\ , to
-set the color that bonds of each type will be drawn in the image.
-
-The specified *type* should be an integer from 1 to Nbondtypes = the
-number of bond types. A wildcard asterisk can be used in place of or
-in conjunction with the *type* argument to specify a range of bond
-types. This takes the form "*" or "*n" or "n*" or "m*n". If N = the
-number of bond types, then an asterisk with no numeric values means
-all types from 1 to N. A leading asterisk means all types from 1 to n
-(inclusive). A trailing asterisk means all types from n to N
-(inclusive). A middle asterisk means all types from m to n
-(inclusive).
-
-The specified *color* can be a single color which is any of the 140
-pre-defined colors (see below) or a color name defined by the
-dump_modify color option. Or it can be two or more colors separated
-by a "/" character, e.g. red/green/blue. In the former case, that
-color is assigned to all the specified bond types. In the latter
-case, the list of colors are assigned in a round-robin fashion to each
-of the specified bond types.
-
-
-----------
-
-
-The *bdiam* keyword can be used with the :doc:`dump image <dump_image>`
-command, with its *bond* keyword, when its diam setting is *type*\ , to
-set the diameter that bonds of each type will be drawn in the image.
-The specified *type* should be an integer from 1 to Nbondtypes. As
-with the *bcolor* keyword, a wildcard asterisk can be used as part of
-the *type* argument to specify a range of bond types. The specified
-*diam* is the size in whatever distance :doc:`units <units>` you are
-using, e.g. Angstroms.
-
-
-----------
-
-
-The *bitrate* keyword can be used with the :doc:`dump movie <dump_image>` command to define the size of the resulting
-movie file and its quality via setting how many kbits per second are
-to be used for the movie file. Higher bitrates require less
-compression and will result in higher quality movies. The quality is
-also determined by the compression format and encoder. The default
-setting is 2000 kbit/s, which will result in average quality with
-older compression formats.
-
-.. note::
-
- Not all movie file formats supported by dump movie allow the
- bitrate to be set. If not, the setting is silently ignored.
-
-
-----------
-
-
-The *boxcolor* keyword sets the color of the simulation box drawn
-around the atoms in each image as well as the color of processor
-sub-domain boundaries. See the "dump image box" command for how to
-specify that a box be drawn via the *box* keyword, and the sub-domain
-boundaries via the *subbox* keyword. The color name can be any of the
-140 pre-defined colors (see below) or a color name defined by the
-dump_modify color option.
-
-
-----------
-
-
-The *color* keyword allows definition of a new color name, in addition
-to the 140-predefined colors (see below), and associates 3
-red/green/blue RGB values with that color name. The color name can
-then be used with any other dump_modify keyword that takes a color
-name as a value. The RGB values should each be floating point values
-between 0.0 and 1.0 inclusive.
-
-When a color name is converted to RGB values, the user-defined color
-names are searched first, then the 140 pre-defined color names. This
-means you can also use the *color* keyword to overwrite one of the
-pre-defined color names with new RBG values.
-
-
-----------
-
-
-The *framerate* keyword can be used with the :doc:`dump movie <dump_image>` command to define the duration of the resulting
-movie file. Movie files written by the dump *movie* command have a
-default frame rate of 24 frames per second and the images generated
-will be converted at that rate. Thus a sequence of 1000 dump images
-will result in a movie of about 42 seconds. To make a movie run
-longer you can either generate images more frequently or lower the
-frame rate. To speed a movie up, you can do the inverse. Using a
-frame rate higher than 24 is not recommended, as it will result in
-simply dropping the rendered images. It is more efficient to dump
-images less frequently.
-
-
-
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump <dump>`, :doc:`dump image <dump_image>`, :doc:`undump <undump>`
-
-Default
-"""""""
-
-The option defaults are
-
-* append = no
-* buffer = yes for dump styles *atom*\ , *custom*\ , *loca*\ , and *xyz*
-* element = "C" for every atom type
-* every = whatever it was set to via the :doc:`dump <dump>` command
-* fileper = # of processors
-* first = no
-* flush = yes
-* format = %d and %g for each integer or floating point value
-* image = no
-* label = ENTRIES
-* nfile = 1
-* pad = 0
-* pbc = no
-* precision = 1000
-* region = none
-* scale = yes
-* sort = off for dump styles *atom*\ , *custom*\ , *cfg*\ , and *local*
-* sort = id for dump styles *dcd*\ , *xtc*\ , and *xyz*
-* thresh = none
-* unwrap = no
-
-* acolor = * red/green/blue/yellow/aqua/cyan
-* adiam = * 1.0
-* amap = min max cf 0.0 2 min blue max red
-* backcolor = black
-* bcolor = * red/green/blue/yellow/aqua/cyan
-* bdiam = * 0.5
-* bitrate = 2000
-* boxcolor = yellow
-* color = 140 color names are pre-defined as listed below
-* framerate = 24
-
-
-----------
-
-
-These are the standard 109 element names that LAMMPS pre-defines for
-use with the :doc:`dump image <dump_image>` and dump_modify commands.
-
-* 1-10 = "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne"
-* 11-20 = "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca"
-* 21-30 = "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn"
-* 31-40 = "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr"
-* 41-50 = "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn"
-* 51-60 = "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", "Nd"
-* 61-70 = "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb"
-* 71-80 = "Lu", "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg"
-* 81-90 = "Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th"
-* 91-100 = "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm"
-* 101-109 = "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", "Hs", "Mt"
-
-
-----------
-
-
-These are the 140 colors that LAMMPS pre-defines for use with the
-:doc:`dump image <dump_image>` and dump_modify commands. Additional
-colors can be defined with the dump_modify color command. The 3
-numbers listed for each name are the RGB (red/green/blue) values.
-Divide each value by 255 to get the equivalent 0.0 to 1.0 value.
-
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| aliceblue = 240, 248, 255 | antiquewhite = 250, 235, 215 | aqua = 0, 255, 255 | aquamarine = 127, 255, 212 | azure = 240, 255, 255 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| beige = 245, 245, 220 | bisque = 255, 228, 196 | black = 0, 0, 0 | blanchedalmond = 255, 255, 205 | blue = 0, 0, 255 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| blueviolet = 138, 43, 226 | brown = 165, 42, 42 | burlywood = 222, 184, 135 | cadetblue = 95, 158, 160 | chartreuse = 127, 255, 0 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| chocolate = 210, 105, 30 | coral = 255, 127, 80 | cornflowerblue = 100, 149, 237 | cornsilk = 255, 248, 220 | crimson = 220, 20, 60 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| cyan = 0, 255, 255 | darkblue = 0, 0, 139 | darkcyan = 0, 139, 139 | darkgoldenrod = 184, 134, 11 | darkgray = 169, 169, 169 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| darkgreen = 0, 100, 0 | darkkhaki = 189, 183, 107 | darkmagenta = 139, 0, 139 | darkolivegreen = 85, 107, 47 | darkorange = 255, 140, 0 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| darkorchid = 153, 50, 204 | darkred = 139, 0, 0 | darksalmon = 233, 150, 122 | darkseagreen = 143, 188, 143 | darkslateblue = 72, 61, 139 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| darkslategray = 47, 79, 79 | darkturquoise = 0, 206, 209 | darkviolet = 148, 0, 211 | deeppink = 255, 20, 147 | deepskyblue = 0, 191, 255 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| dimgray = 105, 105, 105 | dodgerblue = 30, 144, 255 | firebrick = 178, 34, 34 | floralwhite = 255, 250, 240 | forestgreen = 34, 139, 34 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| fuchsia = 255, 0, 255 | gainsboro = 220, 220, 220 | ghostwhite = 248, 248, 255 | gold = 255, 215, 0 | goldenrod = 218, 165, 32 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| gray = 128, 128, 128 | green = 0, 128, 0 | greenyellow = 173, 255, 47 | honeydew = 240, 255, 240 | hotpink = 255, 105, 180 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| indianred = 205, 92, 92 | indigo = 75, 0, 130 | ivory = 255, 240, 240 | khaki = 240, 230, 140 | lavender = 230, 230, 250 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| lavenderblush = 255, 240, 245 | lawngreen = 124, 252, 0 | lemonchiffon = 255, 250, 205 | lightblue = 173, 216, 230 | lightcoral = 240, 128, 128 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| lightcyan = 224, 255, 255 | lightgoldenrodyellow = 250, 250, 210 | lightgreen = 144, 238, 144 | lightgrey = 211, 211, 211 | lightpink = 255, 182, 193 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| lightsalmon = 255, 160, 122 | lightseagreen = 32, 178, 170 | lightskyblue = 135, 206, 250 | lightslategray = 119, 136, 153 | lightsteelblue = 176, 196, 222 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| lightyellow = 255, 255, 224 | lime = 0, 255, 0 | limegreen = 50, 205, 50 | linen = 250, 240, 230 | magenta = 255, 0, 255 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| maroon = 128, 0, 0 | mediumaquamarine = 102, 205, 170 | mediumblue = 0, 0, 205 | mediumorchid = 186, 85, 211 | mediumpurple = 147, 112, 219 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| mediumseagreen = 60, 179, 113 | mediumslateblue = 123, 104, 238 | mediumspringgreen = 0, 250, 154 | mediumturquoise = 72, 209, 204 | mediumvioletred = 199, 21, 133 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| midnightblue = 25, 25, 112 | mintcream = 245, 255, 250 | mistyrose = 255, 228, 225 | moccasin = 255, 228, 181 | navajowhite = 255, 222, 173 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| navy = 0, 0, 128 | oldlace = 253, 245, 230 | olive = 128, 128, 0 | olivedrab = 107, 142, 35 | orange = 255, 165, 0 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| orangered = 255, 69, 0 | orchid = 218, 112, 214 | palegoldenrod = 238, 232, 170 | palegreen = 152, 251, 152 | paleturquoise = 175, 238, 238 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| palevioletred = 219, 112, 147 | papayawhip = 255, 239, 213 | peachpuff = 255, 239, 213 | peru = 205, 133, 63 | pink = 255, 192, 203 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| plum = 221, 160, 221 | powderblue = 176, 224, 230 | purple = 128, 0, 128 | red = 255, 0, 0 | rosybrown = 188, 143, 143 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| royalblue = 65, 105, 225 | saddlebrown = 139, 69, 19 | salmon = 250, 128, 114 | sandybrown = 244, 164, 96 | seagreen = 46, 139, 87 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| seashell = 255, 245, 238 | sienna = 160, 82, 45 | silver = 192, 192, 192 | skyblue = 135, 206, 235 | slateblue = 106, 90, 205 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| slategray = 112, 128, 144 | snow = 255, 250, 250 | springgreen = 0, 255, 127 | steelblue = 70, 130, 180 | tan = 210, 180, 140 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| teal = 0, 128, 128 | thistle = 216, 191, 216 | tomato = 253, 99, 71 | turquoise = 64, 224, 208 | violet = 238, 130, 238 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-| wheat = 245, 222, 179 | white = 255, 255, 255 | whitesmoke = 245, 245, 245 | yellow = 255, 255, 0 | yellowgreen = 154, 205, 50 |
-+-------------------------------+--------------------------------------+---------------------------------+--------------------------------+--------------------------------+
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/dump_molfile.txt b/doc/html/_sources/dump_molfile.txt
deleted file mode 100644
index 10be826c5..000000000
--- a/doc/html/_sources/dump_molfile.txt
+++ /dev/null
@@ -1,146 +0,0 @@
-.. index:: dump molfile
-
-dump molfile command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- dump ID group-ID molfile N file format path
-
-* ID = user-assigned name for the dump
-* group-ID = ID of the group of atoms to be imaged
-* molfile = style of dump command (other styles *atom* or *cfg* or *dcd* or *xtc* or *xyz* or *local* or *custom* are discussed on the :doc:`dump <dump>` doc page)
-* N = dump every this many timesteps
-* file = name of file to write to
-* format = file format to be used
-* path = file path with plugins (optional)
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- dump mf1 all molfile 10 melt1.xml hoomd
- dump mf2 all molfile 10 melt2-*.pdb pdb .
- dump mf3 all molfile 50 melt3.xyz xyz .:/home/akohlmey/vmd/plugins/LINUX/molfile
-
-Description
-"""""""""""
-
-Dump a snapshot of atom coordinates and selected additional quantities
-to one or more files every N timesteps in one of several formats.
-Only information for atoms in the specified group is dumped. This
-specific dump style uses molfile plugins that are bundled with the
-`VMD <http://www.ks.uiuc.edu/Research/vmd>`_ molecular visualization and
-analysis program. See :ref:`Section tools <vmd>` of the
-manual and the tools/lmp2vmd/README.txt file for more information
-about support in VMD for reading and visualizing native LAMMPS dump
-files.
-
-Unless the filename contains a * character, the output will be written
-to one single file with the specified format. Otherwise there will be
-one file per snapshot and the * will be replaced by the time step number
-when the snapshot is written.
-
-.. note::
-
- Because periodic boundary conditions are enforced only on
- timesteps when neighbor lists are rebuilt, the coordinates of an atom
- written to a dump file may be slightly outside the simulation box.
-
-The molfile plugin API has a few restrictions that have to be honored
-by this dump style: the number of atoms must not change, the atoms
-must be sorted, outside of the coordinates no change in atom properties
-(like type, mass, charge) will be recorded.
-
-
-----------
-
-
-The *format* keyword determines what format is used to write out the
-dump. For this to work, LAMMPS must be able to find and load a
-compatible molfile plugin that supports this format. Settings made via
-the :doc:`dump_modify <dump_modify>` command can alter per atom properties
-like element names.
-
-The *path* keyword determines which in directories. This is a "path"
-like other search paths, i.e. it can contain multiple directories
-separated by a colon (or semi-colon on windows). This keyword is
-optional and default to ".", the current directory.
-
-The *unwrap* option of the :doc:`dump_modify <dump_modify>` command allows
-coordinates to be written "unwrapped" by the image flags for each atom.
-Unwrapped means that if the atom has passed through a periodic boundary
-one or more times, the value is printed for what the coordinate would be
-if it had not been wrapped back into the periodic box. Note that these
-coordinates may thus be far outside the box size stored with the
-snapshot.
-
-
-----------
-
-
-Dumps are performed on timesteps that are a multiple of N (including
-timestep 0) and on the last timestep of a minimization if the
-minimization converges. Note that this means a dump will not be
-performed on the initial timestep after the dump command is invoked,
-if the current timestep is not a multiple of N. This behavior can be
-changed via the :doc:`dump_modify first <dump_modify>` command, which can
-be useful if the dump command is invoked after a minimization ended on
-an arbitrary timestep. N can be changed between runs by using the
-:doc:`dump_modify every <dump_modify>` command. The :doc:`dump_modify every <dump_modify>` command also allows a variable to be used to
-determine the sequence of timesteps on which dump files are written.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The *molfile* dump style is part of the USER-MOLFILE package. It is
-only enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Molfile plugins provide a consistent programming interface to read and
-write file formats commonly used in molecular simulations. The
-USER-MOLFILE package only provides the interface code, not the plugins.
-These can be obtained from a VMD installation which has to match the
-platform that you are using to compile LAMMPS for. By adding plugins
-to VMD, support for new file formats can be added to LAMMPS (or VMD
-or other programs that use them) without having to recompile the
-application itself. The plugins are installed in the directory:
-<VMDHOME>/plugins/<VMDARCH>/molfile
-
-.. note::
-
- while the programming interface (API) to the plugins is backward
- compatible, the binary interface (ABI) has been changing over time, so
- it is necessary to compile this package with the plugin header files
- from VMD that match the binary plugins. These header files in the
- directory: <VMDHOME>/plugins/include For convenience, the package ships
- with a set of header files that are compatible with VMD 1.9 and 1.9.1
- (June 2012)
-
-
-----------
-
-
-Related commands
-""""""""""""""""
-
-:doc:`dump <dump>`, :doc:`dump_modify <dump_modify>`, :doc:`undump <undump>`
-
-Default
-"""""""
-
-The default path is ".". All other properties have to be specified.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/echo.txt b/doc/html/_sources/echo.txt
deleted file mode 100644
index a3bbead62..000000000
--- a/doc/html/_sources/echo.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-.. index:: echo
-
-echo command
-============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- echo style
-
-* style = *none* or *screen* or *log* or *both*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- echo both
- echo log
-
-Description
-"""""""""""
-
-This command determines whether LAMMPS echoes each input script
-command to the screen and/or log file as it is read and processed. If
-an input script has errors, it can be useful to look at echoed output
-to see the last command processed.
-
-The :ref:`command-line switch <start_5>` -echo can be used
-in place of this command.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-Default
-"""""""
-
-.. parsed-literal::
-
- echo log
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix.txt b/doc/html/_sources/fix.txt
deleted file mode 100644
index 1a9417919..000000000
--- a/doc/html/_sources/fix.txt
+++ /dev/null
@@ -1,300 +0,0 @@
-.. index:: fix
-
-fix command
-===========
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID style args
-
-* ID = user-assigned name for the fix
-* group-ID = ID of the group of atoms to apply the fix to
-* style = one of a long list of possible style names (see below)
-* args = arguments used by a particular style
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve
- fix 3 all nvt temp 300.0 300.0 0.01
- fix mine top setforce 0.0 NULL 0.0
-
-Description
-"""""""""""
-
-Set a fix that will be applied to a group of atoms. In LAMMPS, a
-"fix" is any operation that is applied to the system during
-timestepping or minimization. Examples include updating of atom
-positions and velocities due to time integration, controlling
-temperature, applying constraint forces to atoms, enforcing boundary
-conditions, computing diagnostics, etc. There are dozens of fixes
-defined in LAMMPS and new ones can be added; see :doc:`this section <Section_modify>` for a discussion.
-
-Fixes perform their operations at different stages of the timestep.
-If 2 or more fixes operate at the same stage of the timestep, they are
-invoked in the order they were specified in the input script.
-
-The ID of a fix can only contain alphanumeric characters and
-underscores.
-
-Fixes can be deleted with the :doc:`unfix <unfix>` command.
-
-.. note::
-
- The :doc:`unfix <unfix>` command is the only way to turn off a
- fix; simply specifying a new fix with a similar style will not turn
- off the first one. This is especially important to realize for
- integration fixes. For example, using a :doc:`fix nve <fix_nve>`
- command for a second run after using a :doc:`fix nvt <fix_nh>` command
- for the first run, will not cancel out the NVT time integration
- invoked by the "fix nvt" command. Thus two time integrators would be
- in place!
-
-If you specify a new fix with the same ID and style as an existing
-fix, the old fix is deleted and the new one is created (presumably
-with new settings). This is the same as if an "unfix" command were
-first performed on the old fix, except that the new fix is kept in the
-same order relative to the existing fixes as the old one originally
-was. Note that this operation also wipes out any additional changes
-made to the old fix via the :doc:`fix_modify <fix_modify>` command.
-
-The :doc:`fix modify <fix_modify>` command allows settings for some
-fixes to be reset. See the doc page for individual fixes for details.
-
-Some fixes store an internal "state" which is written to binary
-restart files via the :doc:`restart <restart>` or
-:doc:`write_restart <write_restart>` commands. This allows the fix to
-continue on with its calculations in a restarted simulation. See the
-:doc:`read_restart <read_restart>` command for info on how to re-specify
-a fix in an input script that reads a restart file. See the doc pages
-for individual fixes for info on which ones can be restarted.
-
-
-----------
-
-
-Some fixes calculate one of three styles of quantities: global,
-per-atom, or local, which can be used by other commands or output as
-described below. A global quantity is one or more system-wide values,
-e.g. the energy of a wall interacting with particles. A per-atom
-quantity is one or more values per atom, e.g. the displacement vector
-for each atom since time 0. Per-atom values are set to 0.0 for atoms
-not in the specified fix group. Local quantities are calculated by
-each processor based on the atoms it owns, but there may be zero or
-more per atoms.
-
-Note that a single fix may produces either global or per-atom or local
-quantities (or none at all), but never more than one of these.
-
-Global, per-atom, and local quantities each come in three kinds: a
-single scalar value, a vector of values, or a 2d array of values. The
-doc page for each fix describes the style and kind of values it
-produces, e.g. a per-atom vector. Some fixes produce more than one
-kind of a single style, e.g. a global scalar and a global vector.
-
-When a fix quantity is accessed, as in many of the output commands
-discussed below, it can be referenced via the following bracket
-notation, where ID is the ID of the fix:
-
-+------------+--------------------------------------------+
-| f_ID | entire scalar, vector, or array |
-+------------+--------------------------------------------+
-| f_ID[I] | one element of vector, one column of array |
-+------------+--------------------------------------------+
-| f_ID[I][J] | one element of array |
-+------------+--------------------------------------------+
-
-In other words, using one bracket reduces the dimension of the
-quantity once (vector -> scalar, array -> vector). Using two brackets
-reduces the dimension twice (array -> scalar). Thus a command that
-uses scalar fix values as input can also process elements of a vector
-or array.
-
-Note that commands and :doc:`variables <variable>` which use fix
-quantities typically do not allow for all kinds, e.g. a command may
-require a vector of values, not a scalar. This means there is no
-ambiguity about referring to a fix quantity as f_ID even if it
-produces, for example, both a scalar and vector. The doc pages for
-various commands explain the details.
-
-
-----------
-
-
-In LAMMPS, the values generated by a fix can be used in several ways:
-
-* Global values can be output via the :doc:`thermo_style custom <thermo_style>` or :doc:`fix ave/time <fix_ave_time>` command.
- Or the values can be referenced in a :doc:`variable equal <variable>` or
- :doc:`variable atom <variable>` command.
-* Per-atom values can be output via the :doc:`dump custom <dump>` command.
- Or they can be time-averaged via the :doc:`fix ave/atom <fix_ave_atom>`
- command or reduced by the :doc:`compute reduce <compute_reduce>`
- command. Or the per-atom values can be referenced in an :doc:`atom-style variable <variable>`.
-* Local values can be reduced by the :doc:`compute reduce <compute_reduce>` command, or histogrammed by the :doc:`fix ave/histo <fix_ave_histo>` command.
-See this :ref:`howto section <howto_15>` for a summary of
-various LAMMPS output options, many of which involve fixes.
-
-The results of fixes that calculate global quantities can be either
-"intensive" or "extensive" values. Intensive means the value is
-independent of the number of atoms in the simulation,
-e.g. temperature. Extensive means the value scales with the number of
-atoms in the simulation, e.g. total rotational kinetic energy.
-:doc:`Thermodynamic output <thermo_style>` will normalize extensive
-values by the number of atoms in the system, depending on the
-"thermo_modify norm" setting. It will not normalize intensive values.
-If a fix value is accessed in another way, e.g. by a
-:doc:`variable <variable>`, you may want to know whether it is an
-intensive or extensive value. See the doc page for individual fixes
-for further info.
-
-
-----------
-
-
-Each fix style has its own documentation page which describes its
-arguments and what it does, as listed below. Here is an alphabetic
-list of fix styles available in LAMMPS. They are also given in more
-compact form in the Fix section of :ref:`this page <cmd_5>`.
-
-There are also additional fix styles (not listed here) submitted by
-users which are included in the LAMMPS distribution. The list of
-these with links to the individual styles are given in the fix section
-of :ref:`this page <cmd_5>`.
-
-* :doc:`adapt <fix_adapt>` - change a simulation parameter over time
-* :doc:`addforce <fix_addforce>` - add a force to each atom
-* :doc:`append/atoms <fix_append_atoms>` - append atoms to a running simulation
-* :doc:`atom/swap <fix_atom_swap>` - Monte Carlo atom type swapping
-* :doc:`aveforce <fix_aveforce>` - add an averaged force to each atom
-* :doc:`ave/atom <fix_ave_atom>` - compute per-atom time-averaged quantities
-* :doc:`ave/chunk <fix_ave_chunk>` - compute per-chunk time-averaged quantities
-* :doc:`ave/correlate <fix_ave_correlate>` - compute/output time correlations
-* :doc:`ave/histo <fix_ave_histo>` - compute/output time-averaged histograms
-* :doc:`ave/time <fix_ave_time>` - compute/output global time-averaged quantities
-* :doc:`balance <fix_balance>` - perform dynamic load-balancing
-* :doc:`bond/break <fix_bond_break>` - break bonds on the fly
-* :doc:`bond/create <fix_bond_create>` - create bonds on the fly
-* :doc:`bond/swap <fix_bond_swap>` - Monte Carlo bond swapping
-* :doc:`box/relax <fix_box_relax>` - relax box size during energy minimization
-* :doc:`deform <fix_deform>` - change the simulation box size/shape
-* :doc:`deposit <fix_deposit>` - add new atoms above a surface
-* :doc:`drag <fix_drag>` - drag atoms towards a defined coordinate
-* :doc:`dt/reset <fix_dt_reset>` - reset the timestep based on velocity, forces
-* :doc:`efield <fix_efield>` - impose electric field on system
-* :doc:`ehex <fix_ehex>` - ehanced heat exchange algorithm
-* :doc:`enforce2d <fix_enforce2d>` - zero out z-dimension velocity and force
-* :doc:`evaporate <fix_evaporate>` - remove atoms from simulation periodically
-* :doc:`external <fix_external>` - callback to an external driver program
-* :doc:`freeze <fix_freeze>` - freeze atoms in a granular simulation
-* :doc:`gcmc <fix_gcmc>` - grand canonical insertions/deletions
-* :doc:`gld <fix_gcmc>` - generalized Langevin dynamics integrator
-* :doc:`gravity <fix_gravity>` - add gravity to atoms in a granular simulation
-* :doc:`heat <fix_heat>` - add/subtract momentum-conserving heat
-* :doc:`indent <fix_indent>` - impose force due to an indenter
-* :doc:`langevin <fix_langevin>` - Langevin temperature control
-* :doc:`lineforce <fix_lineforce>` - constrain atoms to move in a line
-* :doc:`momentum <fix_momentum>` - zero the linear and/or angular momentum of a group of atoms
-* :doc:`move <fix_move>` - move atoms in a prescribed fashion
-* :doc:`msst <fix_msst>` - multi-scale shock technique (MSST) integration
-* :doc:`neb <fix_neb>` - nudged elastic band (NEB) spring forces
-* :doc:`nph <fix_nh>` - constant NPH time integration via Nose/Hoover
-* :doc:`nphug <fix_nphug>` - constant-stress Hugoniostat integration
-* :doc:`nph/asphere <fix_nph_asphere>` - NPH for aspherical particles
-* :doc:`nph/body <fix_nve_body>` - NPH for body particles
-* :doc:`nph/sphere <fix_nph_sphere>` - NPH for spherical particles
-* :doc:`npt <fix_nh>` - constant NPT time integration via Nose/Hoover
-* :doc:`npt/asphere <fix_npt_asphere>` - NPT for aspherical particles
-* :doc:`npt/body <fix_nve_body>` - NPT for body particles
-* :doc:`npt/sphere <fix_npt_sphere>` - NPT for spherical particles
-* :doc:`nve <fix_nve>` - constant NVE time integration
-* :doc:`nve/asphere <fix_nve_asphere>` - NVE for aspherical particles
-* :doc:`nve/asphere/noforce <fix_nve_asphere_noforce>` - NVE for aspherical particles without forces"
-* :doc:`nve/body <fix_nve_body>` - NVE for body particles
-* :doc:`nve/limit <fix_nve_limit>` - NVE with limited step length
-* :doc:`nve/line <fix_nve_line>` - NVE for line segments
-* :doc:`nve/noforce <fix_nve_noforce>` - NVE without forces (v only)
-* :doc:`nve/sphere <fix_nve_sphere>` - NVE for spherical particles
-* :doc:`nve/tri <fix_nve_tri>` - NVE for triangles
-* :doc:`nvt <fix_nh>` - constant NVT time integration via Nose/Hoover
-* :doc:`nvt/asphere <fix_nvt_asphere>` - NVT for aspherical particles
-* :doc:`nvt/body <fix_nve_body>` - NVT for body particles
-* :doc:`nvt/sllod <fix_nvt_sllod>` - NVT for NEMD with SLLOD equations
-* :doc:`nvt/sphere <fix_nvt_sphere>` - NVT for spherical particles
-* :doc:`oneway <fix_oneway>` - constrain particles on move in one direction
-* :doc:`orient/bcc <fix_orient>` - add grain boundary migration force for BCC
-* :doc:`orient/fcc <fix_orient>` - add grain boundary migration force for FCC
-* :doc:`planeforce <fix_planeforce>` - constrain atoms to move in a plane
-* :doc:`poems <fix_poems>` - constrain clusters of atoms to move as coupled rigid bodies
-* :doc:`pour <fix_pour>` - pour new atoms/molecules into a granular simulation domain
-* :doc:`press/berendsen <fix_press_berendsen>` - pressure control by Berendsen barostat
-* :doc:`print <fix_print>` - print text and variables during a simulation
-* :doc:`property/atom <fix_property_atom>` - add customized per-atom values
-* :doc:`qeq/comb <fix_qeq_comb>` - charge equilibration for COMB potential :doc:`qeq/dynamic <fix_qeq>` - charge equilibration via dynamic method :doc:`qeq/fire <fix_qeq>` - charge equilibration via FIRE minimizer :doc:`qeq/point <fix_qeq>` - charge equilibration via point method :doc:`qeq/shielded <fix_qeq>` - charge equilibration via shielded method :doc:`qeq/slater <fix_qeq>` - charge equilibration via Slater method :doc:`rattle <fix_shake>` - RATTLE constraints on bonds and/or angles
-* :doc:`reax/bonds <fix_reax_bonds>` - write out ReaxFF bond information :doc:`recenter <fix_recenter>` - constrain the center-of-mass position of a group of atoms
-* :doc:`restrain <fix_restrain>` - constrain a bond, angle, dihedral
-* :doc:`rigid <fix_rigid>` - constrain one or more clusters of atoms to move as a rigid body with NVE integration
-* :doc:`rigid/nph <fix_rigid>` - constrain one or more clusters of atoms to move as a rigid body with NPH integration
-* :doc:`rigid/npt <fix_rigid>` - constrain one or more clusters of atoms to move as a rigid body with NPT integration
-* :doc:`rigid/nve <fix_rigid>` - constrain one or more clusters of atoms to move as a rigid body with alternate NVE integration
-* :doc:`rigid/nvt <fix_rigid>` - constrain one or more clusters of atoms to move as a rigid body with NVT integration
-* :doc:`rigid/small <fix_rigid>` - constrain many small clusters of atoms to move as a rigid body with NVE integration
-* :doc:`rigid/small/nph <fix_rigid>` - constrain many small clusters of atoms to move as a rigid body with NPH integration
-* :doc:`rigid/small/npt <fix_rigid>` - constrain many small clusters of atoms to move as a rigid body with NPT integration
-* :doc:`rigid/small/nve <fix_rigid>` - constrain many small clusters of atoms to move as a rigid body with alternate NVE integration
-* :doc:`rigid/small/nvt <fix_rigid>` - constrain many small clusters of atoms to move as a rigid body with NVT integration
-* :doc:`setforce <fix_setforce>` - set the force on each atom
-* :doc:`shake <fix_shake>` - SHAKE constraints on bonds and/or angles
-* :doc:`spring <fix_spring>` - apply harmonic spring force to group of atoms
-* :doc:`spring/chunk <fix_spring_chunk>` - apply harmonic spring force to each chunk of atoms
-* :doc:`spring/rg <fix_spring_rg>` - spring on radius of gyration of group of atoms
-* :doc:`spring/self <fix_spring_self>` - spring from each atom to its origin
-* :doc:`srd <fix_srd>` - stochastic rotation dynamics (SRD)
-* :doc:`store/force <fix_store_force>` - store force on each atom
-* :doc:`store/state <fix_store_state>` - store attributes for each atom
-* :doc:`temp/berendsen <fix_temp_berendsen>` - temperature control by Berendsen thermostat
-* :doc:`temp/csld <fix_temp_csvr>` - canonical sampling thermostat with Langevin dynamics
-* :doc:`temp/csvr <fix_temp_csvr>` - canonical sampling thermostat with Hamiltonian dynamics
-* :doc:`temp/rescale <fix_temp_rescale>` - temperature control by velocity rescaling
-* :doc:`tfmc <fix_tfmc>` - perform force-bias Monte Carlo with time-stamped method
-* :doc:`thermal/conductivity <fix_thermal_conductivity>` - Muller-Plathe kinetic energy exchange for thermal conductivity calculation
-* :doc:`tmd <fix_tmd>` - guide a group of atoms to a new configuration
-* :doc:`ttm <fix_ttm>` - two-temperature model for electronic/atomic coupling
-* :doc:`tune/kspace <fix_tune_kspace>` - auto-tune KSpace parameters
-* :doc:`vector <fix_vector>` - accumulate a global vector every N timesteps
-* :doc:`viscosity <fix_viscosity>` - Muller-Plathe momentum exchange for viscosity calculation
-* :doc:`viscous <fix_viscous>` - viscous damping for granular simulations
-* :doc:`wall/colloid <fix_wall>` - Lennard-Jones wall interacting with finite-size particles
-* :doc:`wall/gran <fix_wall_gran>` - frictional wall(s) for granular simulations
-* :doc:`wall/harmonic <fix_wall>` - harmonic spring wall
-* :doc:`wall/lj1043 <fix_wall>` - Lennard-Jones 10-4-3 wall
-* :doc:`wall/lj126 <fix_wall>` - Lennard-Jones 12-6 wall
-* :doc:`wall/lj93 <fix_wall>` - Lennard-Jones 9-3 wall
-* :doc:`wall/piston <fix_wall_piston>` - moving reflective piston wall
-* :doc:`wall/reflect <fix_wall_reflect>` - reflecting wall(s)
-* :doc:`wall/region <fix_wall_region>` - use region surface as wall
-* :doc:`wall/srd <fix_wall_srd>` - slip/no-slip wall for SRD particles
-
-Restrictions
-""""""""""""
-
-
-Some fix styles are part of specific packages. They are only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-The doc pages for individual fixes tell if it is part of a package.
-
-Related commands
-""""""""""""""""
-
-:doc:`unfix <unfix>`, :doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_adapt.txt b/doc/html/_sources/fix_adapt.txt
deleted file mode 100644
index 751dd4b9c..000000000
--- a/doc/html/_sources/fix_adapt.txt
+++ /dev/null
@@ -1,300 +0,0 @@
-.. index:: fix adapt
-
-fix adapt command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID adapt N attribute args ... keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* adapt = style name of this fix command
-* N = adapt simulation settings every this many timesteps
-* one or more attribute/arg pairs may be appended
-* attribute = *pair* or *kspace* or *atom*
-.. parsed-literal::
-
- *pair* args = pstyle pparam I J v_name
- pstyle = pair style name, e.g. lj/cut
- pparam = parameter to adapt over time
- I,J = type pair(s) to set parameter for
- v_name = variable with name that calculates value of pparam
- *kspace* arg = v_name
- v_name = variable with name that calculates scale factor on K-space terms
- *atom* args = aparam v_name
- aparam = parameter to adapt over time
- v_name = variable with name that calculates value of aparam
-
-* zero or more keyword/value pairs may be appended
-* keyword = *scale* or *reset*
-.. parsed-literal::
-
- *scale* value = *no* or *yes*
- *no* = the variable value is the new setting
- *yes* = the variable value multiplies the original setting
- *reset* value = *no* or *yes*
- *no* = values will remain altered at the end of a run
- *yes* = reset altered values to their original values at the end of a run
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- 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 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
-
-Description
-"""""""""""
-
-Change or adapt one or more specific simulation attributes or settings
-over time as a simulation runs. Pair potential and K-space and atom
-attributes which can be varied by this fix are discussed below. Many
-other fixes can also be used to time-vary simulation parameters,
-e.g. the "fix deform" command will change the simulation box
-size/shape and the "fix move" command will change atom positions and
-velocities in a prescribed manner. Also note that many commands allow
-variables as arguments for specific parameters, if described in that
-manner on their doc pages. An equal-style variable can calculate a
-time-dependent quantity, so this is another way to vary a simulation
-parameter over time.
-
-If *N* is specified as 0, the specified attributes are only changed
-once, before the simulation begins. This is all that is needed if the
-associated variables are not time-dependent. If *N* > 0, then changes
-are made every *N* steps during the simulation, presumably with a
-variable that is time-dependent.
-
-Depending on the value of the *reset* keyword, attributes changed by
-this fix will or will not be reset back to their original values at
-the end of a simulation. Even if *reset* is specified as *yes*\ , a
-restart file written during a simulation will contain the modified
-settings.
-
-If the *scale* keyword is set to *no*\ , then the value the parameter is
-set to will be whatever the variable generates. If the *scale*
-keyword is set to *yes*\ , then the value of the altered parameter will
-be the initial value of that parameter multiplied by whatever the
-variable generates. I.e. the variable is now a "scale factor" applied
-in (presumably) a time-varying fashion to the parameter.
-
-Note that whether scale is *no* or *yes*\ , internally, the parameters
-themselves are actually altered by this fix. Make sure you use the
-*reset yes* option if you want the parameters to be restored to their
-initial values after the run.
-
-
-----------
-
-
-The *pair* keyword enables various parameters of potentials defined by
-the :doc:`pair_style <pair_style>` command to be changed, if the pair
-style supports it. Note that the :doc:`pair_style <pair_style>` and
-:doc:`pair_coeff <pair_coeff>` commands must be used in the usual manner
-to specify these parameters initially; the fix adapt command simply
-overrides the parameters.
-
-The *pstyle* argument is the name of the pair style. If :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is used, *pstyle* should be
-a sub-style name. If there are multiple sub-styles using the same
-pair style, then *pstyle* should be specified as "style:N" where N is
-which instance of the pair style you wish to adapt, e.g. the first,
-second, etc. For example, *pstyle* could be specified as "soft" or
-"lubricate" or "lj/cut:1" or "lj/cut:2". The *pparam* argument is the
-name of the parameter to change. This is the current list of pair
-styles and parameters that can be varied by this fix. See the doc
-pages for individual pair styles and their energy formulas for the
-meaning of these parameters:
-
-+-----------------------------------+-------------------------+------------+
-| :doc:`born <pair_born>` | a,b,c | type pairs |
-+-----------------------------------+-------------------------+------------+
-| :doc:`buck <pair_buck>` | a,c | type pairs |
-+-----------------------------------+-------------------------+------------+
-| :doc:`coul/cut <pair_coul>` | scale | type pairs |
-+-----------------------------------+-------------------------+------------+
-| :doc:`coul/debye <pair_coul>` | scale | type pairs |
-+-----------------------------------+-------------------------+------------+
-| :doc:`coul/long <pair_coul>` | scale | type pairs |
-+-----------------------------------+-------------------------+------------+
-| :doc:`lj/cut <pair_lj>` | epsilon,sigma | type pairs |
-+-----------------------------------+-------------------------+------------+
-| :doc:`lj/expand <pair_lj_expand>` | epsilon,sigma,delta | type pairs |
-+-----------------------------------+-------------------------+------------+
-| :doc:`lubricate <pair_lubricate>` | mu | global |
-+-----------------------------------+-------------------------+------------+
-| :doc:`gauss <pair_gauss>` | a | type pairs |
-+-----------------------------------+-------------------------+------------+
-| :doc:`morse <pair_morse>` | d0,r0,alpha | type pairs |
-+-----------------------------------+-------------------------+------------+
-| :doc:`soft <pair_soft>` | a | type pairs |
-+-----------------------------------+-------------------------+------------+
-| :doc:`kim <pair_kim>` | PARAM_FREE_*&#58i,j,... | global |
-+-----------------------------------+-------------------------+------------+
-
-.. note::
-
- It is easy to add new potentials and their parameters to this
- list. All it typically takes is adding an extract() method to the
- pair_*.cpp file associated with the potential.
-
-Some parameters are global settings for the pair style, e.g. the
-viscosity setting "mu" for :doc:`pair_style lubricate <pair_lubricate>`.
-For :doc:`pair_kim <pair_kim>`, all free parameters supported by the
-KIM Model are available (e.g., PARAM_FREE_sigmas provided by the
-LennardJones612_Universal__MO_826355984548_001 Model). If the free
-parameter corresponds to an array, then the particular array element
-to be adapted must be specified (e.g., "PARAM_FREE_sigmas:10", to
-adapt the tenth entry of the sigmas array).
-Other parameters apply to atom type pairs within the pair style,
-e.g. the prefactor "a" for :doc:`pair_style soft <pair_soft>`.
-
-Note that for many of the potentials, the parameter that can be varied
-is effectively a prefactor on the entire energy expression for the
-potential, e.g. the lj/cut epsilon. The parameters listed as "scale"
-are exactly that, since the energy expression for the
-:doc:`coul/cut <pair_coul>` potential (for example) has no labeled
-prefactor in its formula. To apply an effective prefactor to some
-potentials, multiple parameters need to be altered. For example, the
-:doc:`Buckingham potential <pair_buck>` needs both the A and C terms
-altered together. To scale the Buckingham potential, you should thus
-list the pair style twice, once for A and once for C.
-
-If a type pair parameter is specified, the *I* and *J* settings should
-be specified to indicate which type pairs to apply it to. If a global
-parameter is specified, the *I* and *J* settings still need to be
-specified, but are ignored.
-
-Similar to the :doc:`pair_coeff command <pair_coeff>`, I and J can be
-specified in one of two ways. Explicit numeric values can be used for
-each, as in the 1st example above. I <= J is required. LAMMPS sets
-the coefficients for the symmetric J,I interaction to the same values.
-
-A wild-card asterisk can be used in place of or in conjunction with
-the I,J arguments to set the coefficients for multiple pairs of atom
-types. This takes the form "*" or "*n" or "n*" or "m*n". If N = the
-number of atom types, then an asterisk with no numeric values means
-all types from 1 to N. A leading asterisk means all types from 1 to n
-(inclusive). A trailing asterisk means all types from n to N
-(inclusive). A middle asterisk means all types from m to n
-(inclusive). Note that only type pairs with I <= J are considered; if
-asterisks imply type pairs where J < I, they are ignored.
-
-IMPROTANT NOTE: If :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is being used, then the *pstyle* will
-be a sub-style name. You must specify I,J arguments that correspond
-to type pair values defined (via the :doc:`pair_coeff <pair_coeff>`
-command) for that sub-style.
-
-The *v_name* argument for keyword *pair* is the name of an
-:doc:`equal-style variable <variable>` which will be evaluated each time
-this fix is invoked to set the parameter to a new value. It should be
-specified as v_name, where name is the variable name. Equal-style
-variables can specify formulas with various mathematical functions,
-and include :doc:`thermo_style <thermo_style>` command keywords for the
-simulation box parameters and timestep and elapsed time. Thus it is
-easy to specify parameters that change as a function of time or span
-consecutive runs in a continuous fashion. For the latter, see the
-*start* and *stop* keywords of the :doc:`run <run>` command and the
-*elaplong* keyword of :doc:`thermo_style custom <thermo_style>` for
-details.
-
-For example, these commands would change the prefactor coefficient of
-the :doc:`pair_style soft <pair_soft>` potential from 10.0 to 30.0 in a
-linear fashion over the course of a simulation:
-
-.. parsed-literal::
-
- variable prefactor equal ramp(10,30)
- fix 1 all adapt 1 pair soft a * * v_prefactor
-
-
-----------
-
-
-The *kspace* keyword used the specified variable as a scale factor on
-the energy, forces, virial calculated by whatever K-Space solver is
-defined by the :doc:`kspace_style <kspace_style>` command. If the
-variable has a value of 1.0, then the solver is unaltered.
-
-The *kspace* keyword works this way whether the *scale* keyword
-is set to *no* or *yes*\ .
-
-
-----------
-
-
-The *atom* keyword enables various atom properties to be changed. The
-*aparam* argument is the name of the parameter to change. This is the
-current list of atom parameters that can be varied by this fix:
-
-* charge = charge on particle
-* diameter = diameter of particle
-
-The *v_name* argument of the *atom* keyword is the name of an
-:doc:`equal-style variable <variable>` which will be evaluated each time
-this fix is invoked to set the parameter to a new value. It should be
-specified as v_name, where name is the variable name. See the
-discussion above describing the formulas associated with equal-style
-variables. The new value is assigned to the corresponding attribute
-for all atoms in the fix group.
-
-.. note::
-
- The *atom* keyword works this way whether the *scale* keyword is
- set to *no* or *yes*\ . I.e. the use of scale yes is not yet supported
- by the *atom* keyword.
-
-If the atom parameter is *diameter* and per-atom density and per-atom
-mass are defined for particles (e.g. :doc:`atom_style granular <atom_style>`), then the mass of each particle is also
-changed when the diameter changes (density is assumed to stay
-constant).
-
-For example, these commands would shrink the diameter of all granular
-particles in the "center" group from 1.0 to 0.1 in a linear fashion
-over the course of a 1000-step simulation:
-
-.. parsed-literal::
-
- variable size equal ramp(1.0,0.1)
- fix 1 center adapt 10 atom diameter v_size
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-For :doc:`rRESPA time integration <run_style>`, this fix changes
-parameters on the outermost rRESPA level.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute ti <compute_ti>`
-
-Default
-"""""""
-
-The option defaults are scale = no, reset = no.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_adapt_fep.txt b/doc/html/_sources/fix_adapt_fep.txt
deleted file mode 100644
index fb3ce9d46..000000000
--- a/doc/html/_sources/fix_adapt_fep.txt
+++ /dev/null
@@ -1,294 +0,0 @@
-.. index:: fix adapt/fep
-
-fix adapt/fep command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID adapt/fep N attribute args ... keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* adapt/fep = style name of this fix command
-* N = adapt simulation settings every this many timesteps
-* one or more attribute/arg pairs may be appended
-* attribute = *pair* or *kspace* or *atom*
-.. parsed-literal::
-
- *pair* args = pstyle pparam I J v_name
- pstyle = pair style name, e.g. lj/cut
- pparam = parameter to adapt over time
- I,J = type pair(s) to set parameter for
- v_name = variable with name that calculates value of pparam
- *kspace* arg = v_name
- v_name = variable with name that calculates scale factor on K-space terms
- *atom* args = aparam v_name
- aparam = parameter to adapt over time
- I = type(s) to set parameter for
- v_name = variable with name that calculates value of aparam
-
-* zero or more keyword/value pairs may be appended
-* keyword = *scale* or *reset* or *after*
-.. parsed-literal::
-
- *scale* value = *no* or *yes*
- *no* = the variable value is the new setting
- *yes* = the variable value multiplies the original setting
- *reset* value = *no* or *yes*
- *no* = values will remain altered at the end of a run
- *yes* = reset altered values to their original values at the end
- of a run
- *after* value = *no* or *yes*
- *no* = parameters are adapted at timestep N
- *yes* = parameters are adapted one timestep after N
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all adapt/fep 1 pair soft a 1 1 v_prefactor
- fix 1 all adapt/fep 1 pair soft a 2* 3 v_prefactor
- fix 1 all adapt/fep 1 pair lj/cut epsilon * * v_scale1 coul/cut scale 3 3 v_scale2 scale yes reset yes
- fix 1 all adapt/fep 10 atom diameter 1 v_size
-
-Description
-"""""""""""
-
-Change or adapt one or more specific simulation attributes or settings
-over time as a simulation runs.
-
-This is an enhanced version of the :doc:`fix adapt <fix_adapt>` command
-with two differences,
-
-* It is possible to modify the charges of chosen atom types only,
- instead of scaling all the charges in the system.
-* There is a new option *after* for better compatibility with "fix
- ave/time".
-This version is suited for free energy calculations using
-:doc:`compute ti <compute_ti>` or :doc:`compute fep <compute_fep>`.
-
-If *N* is specified as 0, the specified attributes are only changed
-once, before the simulation begins. This is all that is needed if the
-associated variables are not time-dependent. If *N* > 0, then changes
-are made every *N* steps during the simulation, presumably with a
-variable that is time-dependent.
-
-Depending on the value of the *reset* keyword, attributes changed by
-this fix will or will not be reset back to their original values at
-the end of a simulation. Even if *reset* is specified as *yes*\ , a
-restart file written during a simulation will contain the modified
-settings.
-
-If the *scale* keyword is set to *no*\ , then the value the parameter is
-set to will be whatever the variable generates. If the *scale*
-keyword is set to *yes*\ , then the value of the altered parameter will
-be the initial value of that parameter multiplied by whatever the
-variable generates. I.e. the variable is now a "scale factor" applied
-in (presumably) a time-varying fashion to the parameter. Internally,
-the parameters themselves are actually altered; make sure you use the
-*reset yes* option if you want the parameters to be restored to their
-initial values after the run.
-
-If the *after* keyword is set to *yes*\ , then the parameters are
-changed one timestep after the multiple of N. In this manner, if a fix
-such as "fix ave/time" is used to calculate averages at every N
-timesteps, all the contributions to the average will be obtained with
-the same values of the parameters.
-
-
-----------
-
-
-The *pair* keyword enables various parameters of potentials defined by
-the :doc:`pair_style <pair_style>` command to be changed, if the pair
-style supports it. Note that the :doc:`pair_style <pair_style>` and
-:doc:`pair_coeff <pair_coeff>` commands must be used in the usual manner
-to specify these parameters initially; the fix adapt command simply
-overrides the parameters.
-
-The *pstyle* argument is the name of the pair style. If :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is used, *pstyle* should be
-a sub-style name. For example, *pstyle* could be specified as "soft"
-or "lubricate". The *pparam* argument is the name of the parameter to
-change. This is the current list of pair styles and parameters that
-can be varied by this fix. See the doc pages for individual pair
-styles and their energy formulas for the meaning of these parameters:
-
-+-----------------------------------+---------------------+------------+
-| :doc:`born <pair_born>` | a,b,c | type pairs |
-+-----------------------------------+---------------------+------------+
-| :doc:`buck <pair_buck>` | a,c | type pairs |
-+-----------------------------------+---------------------+------------+
-| :doc:`coul/cut <pair_coul>` | scale | type pairs |
-+-----------------------------------+---------------------+------------+
-| :doc:`coul/debye <pair_coul>` | scale | type pairs |
-+-----------------------------------+---------------------+------------+
-| :doc:`coul/long <pair_coul>` | scale | type pairs |
-+-----------------------------------+---------------------+------------+
-| :doc:`lj/cut <pair_lj>` | epsilon,sigma | type pairs |
-+-----------------------------------+---------------------+------------+
-| :doc:`lj/expand <pair_lj_expand>` | epsilon,sigma,delta | type pairs |
-+-----------------------------------+---------------------+------------+
-| :doc:`lubricate <pair_lubricate>` | mu | global |
-+-----------------------------------+---------------------+------------+
-| :doc:`gauss <pair_gauss>` | a | type pairs |
-+-----------------------------------+---------------------+------------+
-| :doc:`soft <pair_soft>` | a | type pairs |
-+-----------------------------------+---------------------+------------+
-
-.. note::
-
- It is easy to add new potentials and their parameters to this
- list. All it typically takes is adding an extract() method to the
- pair_*.cpp file associated with the potential.
-
-Some parameters are global settings for the pair style, e.g. the
-viscosity setting "mu" for :doc:`pair_style lubricate <pair_lubricate>`.
-Other parameters apply to atom type pairs within the pair style,
-e.g. the prefactor "a" for :doc:`pair_style soft <pair_soft>`.
-
-Note that for many of the potentials, the parameter that can be varied
-is effectively a prefactor on the entire energy expression for the
-potential, e.g. the lj/cut epsilon. The parameters listed as "scale"
-are exactly that, since the energy expression for the
-:doc:`coul/cut <pair_coul>` potential (for example) has no labeled
-prefactor in its formula. To apply an effective prefactor to some
-potentials, multiple parameters need to be altered. For example, the
-:doc:`Buckingham potential <pair_buck>` needs both the A and C terms
-altered together. To scale the Buckingham potential, you should thus
-list the pair style twice, once for A and once for C.
-
-If a type pair parameter is specified, the *I* and *J* settings should
-be specified to indicate which type pairs to apply it to. If a global
-parameter is specified, the *I* and *J* settings still need to be
-specified, but are ignored.
-
-Similar to the :doc:`pair_coeff command <pair_coeff>`, I and J can be
-specified in one of two ways. Explicit numeric values can be used for
-each, as in the 1st example above. I <= J is required. LAMMPS sets
-the coefficients for the symmetric J,I interaction to the same values.
-
-A wild-card asterisk can be used in place of or in conjunction with
-the I,J arguments to set the coefficients for multiple pairs of atom
-types. This takes the form "*" or "*n" or "n*" or "m*n". If N = the
-number of atom types, then an asterisk with no numeric values means
-all types from 1 to N. A leading asterisk means all types from 1 to n
-(inclusive). A trailing asterisk means all types from n to N
-(inclusive). A middle asterisk means all types from m to n
-(inclusive). Note that only type pairs with I <= J are considered; if
-asterisks imply type pairs where J < I, they are ignored.
-
-IMPROTANT NOTE: If :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` is being used, then the *pstyle* will
-be a sub-style name. You must specify I,J arguments that correspond
-to type pair values defined (via the :doc:`pair_coeff <pair_coeff>`
-command) for that sub-style.
-
-The *v_name* argument for keyword *pair* is the name of an
-:doc:`equal-style variable <variable>` which will be evaluated each time
-this fix is invoked to set the parameter to a new value. It should be
-specified as v_name, where name is the variable name. Equal-style
-variables can specify formulas with various mathematical functions,
-and include :doc:`thermo_style <thermo_style>` command keywords for the
-simulation box parameters and timestep and elapsed time. Thus it is
-easy to specify parameters that change as a function of time or span
-consecutive runs in a continuous fashion. For the latter, see the
-*start* and *stop* keywords of the :doc:`run <run>` command and the
-*elaplong* keyword of :doc:`thermo_style custom <thermo_style>` for
-details.
-
-For example, these commands would change the prefactor coefficient of
-the :doc:`pair_style soft <pair_soft>` potential from 10.0 to 30.0 in a
-linear fashion over the course of a simulation:
-
-.. parsed-literal::
-
- variable prefactor equal ramp(10,30)
- fix 1 all adapt 1 pair soft a * * v_prefactor
-
-
-----------
-
-
-The *kspace* keyword used the specified variable as a scale factor on
-the energy, forces, virial calculated by whatever K-Space solver is
-defined by the :doc:`kspace_style <kspace_style>` command. If the
-variable has a value of 1.0, then the solver is unaltered.
-
-The *kspace* keyword works this way whether the *scale* keyword
-is set to *no* or *yes*\ .
-
-
-----------
-
-
-The *atom* keyword enables various atom properties to be changed. The
-*aparam* argument is the name of the parameter to change. This is the
-current list of atom parameters that can be varied by this fix:
-
-* charge = charge on particle
-* diameter = diameter of particle
-
-The *I* argument indicates which atom types are affected. A wild-card
-asterisk can be used in place of or in conjunction with the I argument
-to set the coefficients for multiple atom types.
-
-The *v_name* argument of the *atom* keyword is the name of an
-:doc:`equal-style variable <variable>` which will be evaluated each time
-this fix is invoked to set the parameter to a new value. It should be
-specified as v_name, where name is the variable name. See the
-discussion above describing the formulas associated with equal-style
-variables. The new value is assigned to the corresponding attribute
-for all atoms in the fix group.
-
-If the atom parameter is *diameter* and per-atom density and per-atom
-mass are defined for particles (e.g. :doc:`atom_style granular <atom_style>`), then the mass of each particle is also
-changed when the diameter changes (density is assumed to stay
-constant).
-
-For example, these commands would shrink the diameter of all granular
-particles in the "center" group from 1.0 to 0.1 in a linear fashion
-over the course of a 1000-step simulation:
-
-.. parsed-literal::
-
- variable size equal ramp(1.0,0.1)
- fix 1 center adapt 10 atom diameter * v_size
-
-For :doc:`rRESPA time integration <run_style>`, this fix changes
-parameters on the outermost rRESPA level.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute fep <compute_fep>`, :doc:`fix adapt <fix_adapt>`, :doc:`compute ti <compute_ti>`
-
-Default
-"""""""
-
-The option defaults are scale = no, reset = no, after = no.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_addforce.txt b/doc/html/_sources/fix_addforce.txt
deleted file mode 100644
index 66b57124b..000000000
--- a/doc/html/_sources/fix_addforce.txt
+++ /dev/null
@@ -1,197 +0,0 @@
-.. index:: fix addforce
-
-fix addforce command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID addforce fx fy fz keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* addforce = style name of this fix command
-* fx,fy,fz = force component values (force units)
-.. parsed-literal::
-
- any of fx,fy,fz can be a variable (see below)
-
-* zero or more keyword/value pairs may be appended to args
-* keyword = *every* or *region* or *energy*
-.. parsed-literal::
-
- *every* value = Nevery
- Nevery = add force every this many timesteps
- *region* value = region-ID
- region-ID = ID of region atoms must be in to have added force
- *energy* value = v_name
- v_name = variable with name that calculates the potential energy of each atom in the added force field
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix kick flow addforce 1.0 0.0 0.0
- fix kick flow addforce 1.0 0.0 v_oscillate
- fix ff boundary addforce 0.0 0.0 v_push energy v_espace
-
-Description
-"""""""""""
-
-Add fx,fy,fz to the corresponding component of force for each atom in
-the group. This command can be used to give an additional push to
-atoms in a simulation, such as for a simulation of Poiseuille flow in
-a channel.
-
-Any of the 3 quantities defining the force components can be specified
-as an equal-style or atom-style :doc:`variable <variable>`, namely *fx*\ ,
-*fy*\ , *fz*\ . If the value is a variable, it should be specified as
-v_name, where name is the variable name. In this case, the variable
-will be evaluated each timestep, and its value(s) used to determine
-the force component.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent force field.
-
-Atom-style variables can specify the same formulas as equal-style
-variables but can also include per-atom values, such as atom
-coordinates. Thus it is easy to specify a spatially-dependent force
-field with optional time-dependence as well.
-
-If the *every* keyword is used, the *Nevery* setting determines how
-often the forces are applied. The default value is 1, for every
-timestep.
-
-If the *region* keyword is used, the atom must also be in the
-specified geometric :doc:`region <region>` in order to have force added
-to it.
-
-
-----------
-
-
-Adding a force to atoms implies a change in their potential energy as
-they move due to the applied force field. For dynamics via the "run"
-command, this energy can be optionally added to the system's potential
-energy for thermodynamic output (see below). For energy minimization
-via the "minimize" command, this energy must be added to the system's
-potential energy to formulate a self-consistent minimization problem
-(see below).
-
-The *energy* keyword is not allowed if the added force is a constant
-vector F = (fx,fy,fz), with all components defined as numeric
-constants and not as variables. This is because LAMMPS can compute
-the energy for each atom directly as E = -x dot F = -(x*fx + y*fy +
-z*fz), so that -Grad(E) = F.
-
-The *energy* keyword is optional if the added force is defined with
-one or more variables, and if you are performing dynamics via the
-:doc:`run <run>` command. If the keyword is not used, LAMMPS will set
-the energy to 0.0, which is typically fine for dynamics.
-
-The *energy* keyword is required if the added force is defined with
-one or more variables, and you are performing energy minimization via
-the "minimize" command. The keyword specifies the name of an
-atom-style :doc:`variable <variable>` which is used to compute the
-energy of each atom as function of its position. Like variables used
-for *fx*\ , *fy*\ , *fz*\ , the energy variable is specified as v_name,
-where name is the variable name.
-
-Note that when the *energy* keyword is used during an energy
-minimization, you must insure that the formula defined for the
-atom-style :doc:`variable <variable>` is consistent with the force
-variable formulas, i.e. that -Grad(E) = F. For example, if the force
-were a spring-like F = kx, then the energy formula should be E =
--0.5kx^2. If you don't do this correctly, the minimization will not
-converge properly.
-
-
-----------
-
-
-Styles with a 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
-:doc:`Section_accelerate <Section_accelerate>` 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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the potential "energy" inferred by the added force to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`. This is a fictitious quantity but is
-needed so that the :doc:`minimize <minimize>` command can include the
-forces added by this fix in a consistent manner. I.e. there is a
-decrease in potential energy when atoms move in the direction of the
-added force.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost
-level.
-
-This fix computes a global scalar and a global 3-vector of forces,
-which can be accessed by various :ref:`output commands <howto_15>`. The scalar is the potential
-energy discussed above. The vector is the total force on the group of
-atoms before the forces on individual atoms are changed by the fix.
-The scalar and vector values calculated by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command. You should not
-specify force components with a variable that has time-dependence for
-use with a minimizer, since the minimizer increments the timestep as
-the iteration count during the minimization.
-
-.. note::
-
- If you want the fictitious potential energy associated with the
- added forces to be included in the total potential energy of the
- system (the quantity being minimized), you MUST enable the
- :doc:`fix_modify <fix_modify>` *energy* option for this fix.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix setforce <fix_setforce>`, :doc:`fix aveforce <fix_aveforce>`
-
-Default
-"""""""
-
-The option default for the every keyword is every = 1.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_addtorque.txt b/doc/html/_sources/fix_addtorque.txt
deleted file mode 100644
index 4c7215f00..000000000
--- a/doc/html/_sources/fix_addtorque.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-.. index:: fix addtorque
-
-fix addtorque command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID addtorque Tx Ty Tz
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* addtorque = style name of this fix command
-* Tx,Ty,Tz = torque component values (torque units)
-* any of Tx,Ty,Tz can be a variable (see below)
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix kick bead addtorque 2.0 3.0 5.0
- fix kick bead addtorque 0.0 0.0 v_oscillate
-
-Description
-"""""""""""
-
-Add a set of forces to each atom in
-the group such that:
-
-* the components of the total torque applied on the group (around its
- center of mass) are Tx,Ty,Tz
-* the group would move as a rigid body in the absence of other
- forces.
-This command can be used to drive a group of atoms into rotation.
-
-Any of the 3 quantities defining the torque components can be specified
-as an equal-style :doc:`variable <variable>`, namely *Tx*\ ,
-*Ty*\ , *Tz*\ . If the value is a variable, it should be specified as
-v_name, where name is the variable name. In this case, the variable
-will be evaluated each timestep, and its value used to determine the
-torque component.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent torque.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the potential "energy" inferred by the added forces to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`. This is a fictitious quantity but is
-needed so that the :doc:`minimize <minimize>` command can include the
-forces added by this fix in a consistent manner. I.e. there is a
-decrease in potential energy when atoms move in the direction of the
-added forces.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by
-this fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its torque. Default is the outermost level.
-
-This fix computes a global scalar and a global 3-vector, which can be
-accessed by various :ref:`output commands <howto_15>`.
-The scalar is the potential energy discussed above. The vector is the
-total torque on the group of atoms before the forces on individual
-atoms are changed by the fix. The scalar and vector values calculated
-by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command. You should not
-specify force components with a variable that has time-dependence for
-use with a minimizer, since the minimizer increments the timestep as
-the iteration count during the minimization.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix addforce <fix_addforce>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_append_atoms.txt b/doc/html/_sources/fix_append_atoms.txt
deleted file mode 100644
index 239b2b3ee..000000000
--- a/doc/html/_sources/fix_append_atoms.txt
+++ /dev/null
@@ -1,126 +0,0 @@
-.. index:: fix append/atoms
-
-fix append/atoms command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID append/atoms face ... keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* append/atoms = style name of this fix command
-* face = *zhi*
-* zero or more keyword/value pairs may be appended
-* keyword = *basis* or *size* or *freq* or *temp* or *random* or *units*
-.. parsed-literal::
-
- *basis* values = M itype
- M = which basis atom
- itype = atom type (1-N) to assign to this basis atom
- *size* args = Lz
- Lz = z size of lattice region appended in a single event(distance units)
- *freq* args = freq
- freq = the number of timesteps between append events
- *temp* args = target damp seed extent
- target = target temperature for the region between zhi-extent and zhi (temperature units)
- damp = damping parameter (time units)
- seed = random number seed for langevin kicks
- extent = extent of thermostated region (distance units)
- *random* args = xmax ymax zmax seed
- *xmax*\ , *ymax*\ , *zmax* = maximum displacement in particular direction (distance units)
- *seed* = random number seed for random displacement
- *units* value = *lattice* or *box*
- *lattice* = the wall position is defined in lattice units
- *box* = the wall position is defined in simulation box units
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all append/atoms zhi size 5.0 freq 295 units lattice
- fix 4 all append/atoms zhi size 15.0 freq 5 units box
- fix A all append/atoms zhi size 1.0 freq 1000 units lattice
-
-Description
-"""""""""""
-
-This fix creates atoms on a lattice, appended on the zhi edge of the
-system box. This can be useful when a shock or wave is propagating
-from zlo. This allows the system to grow with time to accommodate an
-expanding wave. A simulation box must already exist, which is
-typically created via the :doc:`create_box <create_box>` command.
-Before using this command, a lattice must also be defined using the
-:doc:`lattice <lattice>` command.
-
-This fix will automatically freeze atoms on the zhi edge of the
-system, so that overlaps are avoided when new atoms are appended.
-
-The *basis* keyword specifies an atom type that will be assigned to
-specific basis atoms as they are created. See the
-:doc:`lattice <lattice>` command for specifics on how basis atoms are
-defined for the unit cell of the lattice. By default, all created
-atoms are assigned type = 1 unless this keyword specifies differently.
-
-The *size* keyword defines the size in z of the chunk of material to
-be added.
-
-The *random* keyword will give the atoms random displacements around
-their lattice points to simulate some initial temperature.
-
-The *temp* keyword will cause a region to be thermostated with a
-Langevin thermostat on the zhi boundary. The size of the region is
-measured from zhi and is set with the *extent* argument.
-
-The *units* keyword determines the meaning of the distance units used
-to define a wall position, but only when a numeric constant is used.
-A *box* value selects standard distance units as defined by the
-:doc:`units <units>` command, e.g. Angstroms for units = real or metal.
-A *lattice* value means the distance units are in lattice spacings.
-The :doc:`lattice <lattice>` command must have been previously used to
-define the lattice spacings.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix style is part of the SHOCK package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The boundary on which atoms are added with append/atoms must be
-shrink/minimum. The opposite boundary may be any boundary type other
-than periodic.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix wall/piston <fix_wall_piston>` command
-
-Default
-"""""""
-
-The keyword defaults are size = 0.0, freq = 0, units = lattice. All
-added atoms are of type 1 unless the basis keyword is used.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_atc.txt b/doc/html/_sources/fix_atc.txt
deleted file mode 100644
index e74f37574..000000000
--- a/doc/html/_sources/fix_atc.txt
+++ /dev/null
@@ -1,312 +0,0 @@
-.. index:: fix atc
-
-fix atc command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix <fixID> <group> atc <type> <parameter_file>
-
-* fixID = name of fix
-* group = name of group fix is to be applied
-* type = *thermal* or *two_temperature* or *hardy* or *field*
-.. parsed-literal::
-
- *thermal* = thermal coupling with fields: temperature
- *two_temperature* = electron-phonon coupling with field: temperature and electron_temperature
- *hardy* = on-the-fly post-processing using kernel localization functions (see "related" section for possible fields)
- *field* = on-the-fly post-processing using mesh-based localization functions (see "related" section for possible fields)
-
-* parameter_file = name of the file with material parameters. Note: Neither hardy nor field requires a parameter file
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix AtC internal atc thermal Ar_thermal.dat
- fix AtC internal atc two_temperature Ar_ttm.mat
- fix AtC internal atc hardy
- fix AtC internal atc field
-
-Description
-"""""""""""
-
-This fix is the beginning to creating a coupled FE/MD simulation and/or an on-the-fly estimation of continuum fields. The coupled versions of this fix do Verlet integration and the post-processing does not. After instantiating this fix, several other fix_modify commands will be needed to set up the problem, e.g. define the finite element mesh and prescribe initial and boundary conditions.
-
-.. image:: JPG/atc_nanotube.jpg
- :align: center
-
-.. parsed-literal::
-
- The following coupling example is typical, but non-exhaustive:
- # ... commands to create and initialize the MD system
-
-.. parsed-literal::
-
- # initial fix to designate coupling type and group to apply it to
- # tag group physics material_file
- fix AtC internal atc thermal Ar_thermal.mat
-
-.. parsed-literal::
-
- # create a uniform 12 x 2 x 2 mesh that covers region contain the group
- # nx ny nz region periodicity
- fix_modify AtC mesh create 12 2 2 mdRegion f p p
-
-.. parsed-literal::
-
- # specify the control method for the type of coupling
- # physics control_type
- fix_modify AtC thermal control flux
-
-.. parsed-literal::
-
- # specify the initial values for the empirical field "temperature"
- # field node_group value
- fix_modify AtC initial temperature all 30
-
-.. parsed-literal::
-
- # create an output stream for nodal fields
- # filename output_frequency
- fix_modify AtC output atc_fe_output 100
-
-.. parsed-literal::
-
- run 1000
-
-likewise for this post-processing example:
-
-.. parsed-literal::
-
- # ... commands to create and initialize the MD system
-
-.. parsed-literal::
-
- # initial fix to designate post-processing and the group to apply it to
- # no material file is allowed nor required
- fix AtC internal atc hardy
-
-.. parsed-literal::
-
- # for hardy fix, specific kernel function (function type and range) to # be used as a localization function
- fix AtC kernel quartic_sphere 10.0
-
-.. parsed-literal::
-
- # create a uniform 1 x 1 x 1 mesh that covers region contain the group
- # with periodicity this effectively creats a system average
- fix_modify AtC mesh create 1 1 1 box p p p
-
-.. parsed-literal::
-
- # change from default lagrangian map to eulerian
- # refreshed every 100 steps
- fix_modify AtC atom_element_map eulerian 100
-
-.. parsed-literal::
-
- # start with no field defined
- # add mass density, potential energy density, stress and temperature
- fix_modify AtC fields add density energy stress temperature
-
-.. parsed-literal::
-
- # create an output stream for nodal fields
- # filename output_frequency
- fix_modify AtC output nvtFE 100 text
-
-.. parsed-literal::
-
- run 1000
-
-the mesh's linear interpolation functions can be used as the localization function
- by using the field option:
-
-fix AtC internal atc field
-
-fix_modify AtC mesh create 1 1 1 box p p p
-
-...
-
-Note coupling and post-processing can be combined in the same simulations using separate fixes.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. The :doc:`fix_modify <fix_modify>` options relevant to this fix are listed below. No global scalar or vector or per-atom quantities are stored by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can be used with the *start/stop* keywords of the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-Thermal and two_temperature (coupling) types use a Verlet time-integration algorithm. The hardy type does not contain its own time-integrator and must be used with a separate fix that does contain one, e.g. nve, nvt, etc.
-
-* Currently,
-* - the coupling is restricted to thermal physics
-* - the FE computations are done in serial on each processor.
-
-Related commands
-""""""""""""""""
-
-After specifying this fix in your input script, several other :doc:`fix_modify <fix_modify>` commands are used to setup the problem, e.g. define the finite element mesh and prescribe initial and boundary conditions.
-
-fix_modify commands for setup:
-
-* `fix_modify AtC mesh create <USER/atc/man_mesh_create.html>`_
-* `fix_modify AtC mesh quadrature <USER/atc/man_mesh_quadrature.html>`_
-* `fix_modify AtC mesh read <USER/atc/man_mesh_read.html>`_
-* `fix_modify AtC mesh write <USER/atc/man_mesh_write.html>`_
-* `fix_modify AtC mesh create_nodeset <USER/atc/man_mesh_create_nodeset.html>`_
-* `fix_modify AtC mesh add_to_nodeset <USER/atc/man_mesh_add_to_nodeset.html>`_
-* `fix_modify AtC mesh create_faceset box <USER/atc/man_mesh_create_faceset_box.html>`_
-* `fix_modify AtC mesh create_faceset plane <USER/atc/man_mesh_create_faceset_plane.html>`_
-* `fix_modify AtC mesh create_elementset <USER/atc/man_mesh_create_elementset.html>`_
-* `fix_modify AtC mesh delete_elements <USER/atc/man_mesh_delete_elements.html>`_
-* `fix_modify AtC mesh nodeset_to_elementset <USER/atc/man_mesh_nodeset_to_elementset.html>`_
-* `fix_modify AtC boundary <USER/atc/man_boundary.html>`_
-* `fix_modify AtC internal_quadrature <USER/atc/man_internal_quadrature.html>`_
-* `fix_modify AtC time_integration (thermal) <USER/atc/man_thermal_time_integration.html>`_
-* `fix_modify AtC time_integration (momentum) <USER/atc/man_momentum_time_integration.html>`_
-* `fix_modify AtC extrinsic electron_integration <USER/atc/man_electron_integration.html>`_
-* `fix_modify AtC internal_element_set <USER/atc/man_internal_element_set.html>`_
-* `fix_modify AtC decomposition <USER/atc/man_decomposition.html>`_
-
-fix_modify commands for boundary and initial conditions:
-
-* `fix_modify AtC initial <USER/atc/man_initial.html>`_
-* `fix_modify AtC fix <USER/atc/man_fix_nodes.html>`_
-* `fix_modify AtC unfix <USER/atc/man_unfix_nodes.html>`_
-* `fix_modify AtC fix_flux <USER/atc/man_fix_flux.html>`_
-* `fix_modify AtC unfix_flux <USER/atc/man_unfix_flux.html>`_
-* `fix_modify AtC source <USER/atc/man_source.html>`_
-* `fix_modify AtC remove_source <USER/atc/man_remove_source.html>`_
-
-fix_modify commands for control and filtering:
-
-* `fix_modify AtC control <USER/atc/man_control.html>`_
-* `fix_modify AtC control thermal <USER/atc/man_control_thermal.html>`_
-* `fix_modify AtC control thermal correction_max_iterations <USER/atc/man_control_thermal_correction_max_iterations.html>`_
-* `fix_modify AtC control momentum <USER/atc/man_control_momentum.html>`_
-* `fix_modify AtC control localized_lambda <USER/atc/man_localized_lambda.html>`_
-* `fix_modify AtC control lumped_lambda_solve <USER/atc/man_lumped_lambda_solve.html>`_
-* `fix_modify AtC control mask_direction <USER/atc/man_mask_direction.html>`_ control
-* `fix_modify AtC filter <USER/atc/man_time_filter.html>`_
-* `fix_modify AtC filter scale <USER/atc/man_filter_scale.html>`_
-* `fix_modify AtC filter type <USER/atc/man_filter_type.html>`_
-* `fix_modify AtC equilibrium_start <USER/atc/man_equilibrium_start.html>`_
-* `fix_modify AtC extrinsic exchange <USER/atc/man_extrinsic_exchange.html>`_
-* `fix_modify AtC poisson_solver <USER/atc/man_poisson_solver.html>`_
-
-fix_modify commands for output:
-
-* `fix_modify AtC output <USER/atc/man_output.html>`_
-* `fix_modify AtC output nodeset <USER/atc/man_output_nodeset.html>`_
-* `fix_modify AtC output elementset <USER/atc/man_output_elementset.html>`_
-* `fix_modify AtC output boundary_integral <USER/atc/man_boundary_integral.html>`_
-* `fix_modify AtC output contour_integral <USER/atc/man_contour_integral.html>`_
-* `fix_modify AtC mesh output <USER/atc/man_mesh_output.html>`_
-* `fix_modify AtC write_restart <USER/atc/man_write_restart.html>`_
-* `fix_modify AtC read_restart <USER/atc/man_read_restart.html>`_
-
-fix_modify commands for post-processing:
-
-* `fix_modify AtC kernel <USER/atc/man_hardy_kernel.html>`_
-* `fix_modify AtC fields <USER/atc/man_hardy_fields.html>`_
-* `fix_modify AtC grdients <USER/atc/man_hardy_gradients.html>`_
-* `fix_modify AtC rates <USER/atc/man_hardy_rates.html>`_
-* `fix_modify AtC computes <USER/atc/man_hardy_computes.html>`_
-* `fix_modify AtC on_the_fly <USER/atc/man_hardy_on_the_fly.html>`_
-* `fix_modify AtC pair_interactions/bond_interactions <USER/atc/man_pair_interactions.html>`_
-* `fix_modify AtC sample_frequency <USER/atc/man_sample_frequency.html>`_
-* `fix_modify AtC set <USER/atc/man_set.html>`_
-
-miscellaneous fix_modify commands:
-
-* `fix_modify AtC atom_element_map <USER/atc/man_atom_element_map.html>`_
-* `fix_modify AtC atom_weight <USER/atc/man_atom_weight.html>`_
-* `fix_modify AtC write_atom_weights <USER/atc/man_write_atom_weights.html>`_
-* `fix_modify AtC reset_time <USER/atc/man_reset_time.html>`_
-* `fix_modify AtC reset_atomic_reference_positions <USER/atc/man_reset_atomic_reference_positions.html>`_
-* `fix_modify AtC fe_md_boundary <USER/atc/man_fe_md_boundary.html>`_
-* `fix_modify AtC boundary_faceset <USER/atc/man_boundary_faceset.html>`_
-* `fix_modify AtC consistent_fe_initialization <USER/atc/man_consistent_fe_initialization.html>`_
-* `fix_modify AtC mass_matrix <USER/atc/man_mass_matrix.html>`_
-* `fix_modify AtC material <USER/atc/man_material.html>`_
-* `fix_modify AtC atomic_charge <USER/atc/man_atomic_charge.html>`_
-* `fix_modify AtC source_integration <USER/atc/man_source_integration.html>`_
-* `fix_modify AtC temperature_definition <USER/atc/man_temperature_definition.html>`_
-* `fix_modify AtC track_displacement <USER/atc/man_track_displacement.html>`_
-* `fix_modify AtC boundary_dynamics <USER/atc/man_boundary_dynamics.html>`_
-* `fix_modify AtC add_species <USER/atc/man_add_species.html>`_
-* `fix_modify AtC add_molecule <USER/atc/man_add_molecule.html>`_
-* `fix_modify AtC remove_species <USER/atc/man_remove_species.html>`_
-* `fix_modify AtC remove_molecule <USER/atc/man_remove_molecule.html>`_
-
-Note: a set of example input files with the attendant material files are included with this package
-
-Default
-"""""""
-None
-
-
-----------
-
-
-For detailed exposition of the theory and algorithms please see:
-
-.. _Wagner:
-
-
-
-**(Wagner)** Wagner, GJ; Jones, RE; Templeton, JA; Parks, MA, "An atomistic-to-continuum coupling method for heat transfer in solids." Special Issue of Computer Methods and Applied Mechanics (2008) 197:3351.
-
-.. _Zimmeman2004:
-
-
-
-**(Zimmerman2004)** Zimmerman, JA; Webb, EB; Hoyt, JJ;. Jones, RE; Klein, PA; Bammann, DJ, "Calculation of stress in atomistic simulation." Special Issue of Modelling and Simulation in Materials Science and Engineering (2004), 12:S319.
-
-.. _Zimmerman2010:
-
-
-
-**(Zimmerman2010)** Zimmerman, JA; Jones, RE; Templeton, JA, "A material frame approach for evaluating continuum variables in atomistic simulations." Journal of Computational Physics (2010), 229:2364.
-
-.. _Templeton2010:
-
-
-
-**(Templeton2010)** Templeton, JA; Jones, RE; Wagner, GJ, "Application of a field-based method to spatially varying thermal transport problems in molecular dynamics." Modelling and Simulation in Materials Science and Engineering (2010), 18:085007.
-
-.. _Jones:
-
-
-
-**(Jones)** Jones, RE; Templeton, JA; Wagner, GJ; Olmsted, D; Modine, JA, "Electron transport enhanced molecular dynamics for metals and semi-metals." International Journal for Numerical Methods in Engineering (2010), 83:940.
-
-.. _Templeton2011:
-
-
-
-**(Templeton2011)** Templeton, JA; Jones, RE; Lee, JW; Zimmerman, JA; Wong, BM, "A long-range electric field solver for molecular dynamics based on atomistic-to-continuum modeling." Journal of Chemical Theory and Computation (2011), 7:1736.
-
-.. _Mandadapu:
-
-
-
-**(Mandadapu)** Mandadapu, KK; Templeton, JA; Lee, JW, "Polarization as a field variable from molecular dynamics simulations." Journal of Chemical Physics (2013), 139:054115.
-
-Please refer to the standard finite element (FE) texts, e.g. T.J.R Hughes " The finite element method ", Dover 2003, for the basics of FE simulation.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_atom_swap.txt b/doc/html/_sources/fix_atom_swap.txt
deleted file mode 100644
index ba99cfc9d..000000000
--- a/doc/html/_sources/fix_atom_swap.txt
+++ /dev/null
@@ -1,203 +0,0 @@
-.. index:: fix atom/swap
-
-fix atom/swap command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID atom/swap N X seed T keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* atom/swap = style name of this fix command
-* N = invoke this fix every N steps
-* X = number of swaps to attempt every N steps
-* seed = random # seed (positive integer)
-* T = scaling temperature of the MC swaps (temperature units)
-* one or more keyword/value pairs may be appended to args
-* keyword = *types* or *mu* or *ke* or *semi-grand* or *region*
-.. parsed-literal::
-
- *types* values = two or more atom types
- *mu* values = chemical potential of swap types (energy units)
- *ke* value = *no* or *yes*
- *no* = no conservation of kinetic energy after atom swaps
- *yes* = kinetic energy is conserved after atom swaps
- *semi-grand* value = *no* or *yes*
- *no* = particle type counts and fractions conserved
- *yes* = semi-grand canonical ensemble, particle fractions not conserved
- *region* value = region-ID
- region-ID = ID of region to use as an exchange/move volume
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 2 all atom/swap 1 1 29494 300.0 ke no types 1 2
- fix myFix all atom/swap 100 1 12345 298.0 region my_swap_region types 5 6
- fix SGMC all atom/swap 1 100 345 1.0 semi-grand yes types 1 2 3 mu 0.0 4.3 -5.0
-
-Description
-"""""""""""
-
-This fix performs Monte Carlo swaps of atoms of one given atom type
-with atoms of the other given atom types. The specified T is used in
-the Metropolis criterion dictating swap probabilities.
-
-Perform X swaps of atoms of one type with atoms of another type
-according to a Monte Carlo probability. Swap candidates must be in the
-fix group, must be in the region (if specified), and must be of one of
-the listed types. Swaps are attempted between candidates that are
-chosen randomly with equal probability among the candidate
-atoms. Swaps are not attempted between atoms of the same type since
-nothing would happen.
-
-All atoms in the simulation domain can be moved using regular time
-integration displacements, e.g. via :doc:`fix nvt <fix_nh>`, resulting
-in a hybrid MC+MD simulation. A smaller-than-usual timestep size may
-be needed when running such a hybrid simulation, especially if the
-swapped atoms are not well equilibrated.
-
-The *types* keyword is required. At least two atom types must be
-specified.
-
-The *ke* keyword can be set to *no* to turn off kinetic energy
-conservation for swaps. The default is *yes*\ , which means that swapped
-atoms have their velocities scaled by the ratio of the masses of the
-swapped atom types. This ensures that the kinetic energy of each atom
-is the same after the swap as it was before the swap, even though the
-atom masses have changed.
-
-The *semi-grand* keyword can be set to *yes* to switch to the
-semi-grand canonical ensemble as discussed in :ref:`(Sadigh) <Sadigh>`. This
-means that the total number of each particle type does not need to be
-conserved. The default is *no*\ , which means that the only kind of swap
-allowed exchanges an atom of one type with an atom of a different
-given type. In other words, the relative mole fractions of the swapped
-atoms remains constant. Whereas in the semi-grand canonical ensemble,
-the composition of the system can change. Note that when using
-*semi-grand*\ , atoms in the fix group whose type is not listed
-in the *types* keyword are ineligible for attempted
-conversion. An attempt is made to switch
-the selected atom (if eligible) to one of the other listed types
-with equal probability. Acceptance of each attempt depends upon the Metropolis criterion.
-
-The *mu* keyword allows users to specify chemical
-potentials. This is required and allowed only when using *semi-grand*\ .
-All chemical potentials are absolute, so there is one for
-each swap type listed following the *types* keyword.
-In semi-grand canonical ensemble simulations the chemical composition
-of the system is controlled by the difference in these values. So
-shifting all values by a constant amount will have no effect
-on the simulation.
-
-This command may optionally use the *region* keyword to define swap
-volume. The specified region must have been previously defined with a
-:doc:`region <region>` command. It must be defined with side = *in*\ .
-Swap attempts occur only between atoms that are both within the
-specified region. Swaps are not otherwise attempted.
-
-You should ensure you do not swap atoms belonging to a molecule, or
-LAMMPS will soon generate an error when it tries to find those atoms.
-LAMMPS will warn you if any of the atoms eligible for swapping have a
-non-zero molecule ID, but does not check for this at the time of
-swapping.
-
-If not using *semi-grand* this fix checks to ensure all atoms of the
-given types have the same atomic charge. LAMMPS doesn't enforce this
-in general, but it is needed for this fix to simplify the
-swapping procedure. Successful swaps will swap the atom type and charge
-of the swapped atoms. Conversely, when using *semi-grand*\ , it is assumed that all the atom
-types involved in switches have the same charge. Otherwise, charge
-would not be conserved. As a consequence, no checks on atomic charges are
-performed, and successful switches update the atom type but not the
-atom charge. While it is possible to use *semi-grand* with groups of
-atoms that have different charges, these charges will not be changed when the
-atom types change.
-
-Since this fix computes total potential energies before and after
-proposed swaps, so even complicated potential energy calculations are
-OK, including the following:
-
-* long-range electrostatics (kspace)
-* many body pair styles
-* hybrid pair styles
-* eam pair styles
-* triclinic systems
-* need to include potential energy contributions from other fixes
-
-Some fixes have an associated potential energy. Examples of such fixes
-include: :doc:`efield <fix_efield>`, :doc:`gravity <fix_gravity>`,
-:doc:`addforce <fix_addforce>`, :doc:`langevin <fix_langevin>`,
-:doc:`restrain <fix_restrain>`, :doc:`temp/berendsen <fix_temp_berendsen>`,
-:doc:`temp/rescale <fix_temp_rescale>`, and :doc:`wall fixes <fix_wall>`.
-For that energy to be included in the total potential energy of the
-system (the quantity used when performing GCMC moves),
-you MUST enable the :doc:`fix_modify <fix_modify>` *energy* option for
-that fix. The doc pages for individual :doc:`fix <fix>` commands
-specify if this should be done.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the fix to :doc:`binary restart files <restart>`. This includes information about the random
-number generator seed, the next timestep for MC exchanges, etc. See
-the :doc:`read_restart <read_restart>` command for info on how to
-re-specify a fix in an input script that reads a restart file, so that
-the operation of the fix continues in an uninterrupted fashion.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix.
-
-This fix computes a global vector of length 2, which can be accessed
-by various :ref:`output commands <howto_15>`. The vector
-values are the following global cumulative quantities:
-
-* 1 = swap attempts
-* 2 = swap successes
-
-The vector values calculated by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MC package. It is only enabled if LAMMPS was
-built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nvt <fix_nh>`, :doc:`neighbor <neighbor>`,
-:doc:`fix deposit <fix_deposit>`, :doc:`fix evaporate <fix_evaporate>`,
-:doc:`delete_atoms <delete_atoms>`, :doc:`fix gcmc <fix_gcmc>`
-
-Default
-"""""""
-
-The option defaults are ke = yes, semi-grand = no, mu = 0.0 for
-all atom types.
-
-
-----------
-
-
-.. _Sadigh:
-
-
-
-**(Sadigh)** B Sadigh, P Erhart, A Stukowski, A Caro, E Martinez, and
-L Zepeda-Ruiz, Phys. Rev. B, 85, 184203 (2012).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_ave_atom.txt b/doc/html/_sources/fix_ave_atom.txt
deleted file mode 100644
index e9eba202c..000000000
--- a/doc/html/_sources/fix_ave_atom.txt
+++ /dev/null
@@ -1,191 +0,0 @@
-.. index:: fix ave/atom
-
-fix ave/atom command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID ave/atom Nevery Nrepeat Nfreq value1 value2 ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* ave/atom = style name of this fix command
-* Nevery = use input values every this many timesteps
-* Nrepeat = # of times to use input values for calculating averages
-* Nfreq = calculate averages every this many timesteps
- one or more input values can be listed
-* value = x, y, z, vx, vy, vz, fx, fy, fz, c_ID, c_ID[i], f_ID, f_ID[i], v_name
-.. parsed-literal::
-
- x,y,z,vx,vy,vz,fx,fy,fz = atom attribute (position, velocity, force component)
- c_ID = per-atom vector calculated by a compute with ID
- c_ID[I] = Ith column of per-atom array calculated by a compute with ID, I can include wildcard (see below)
- f_ID = per-atom vector calculated by a fix with ID
- f_ID[I] = Ith column of per-atom array calculated by a fix with ID, I can include wildcard (see below)
- v_name = per-atom vector calculated by an atom-style variable with name
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all ave/atom 1 100 100 vx vy vz
- fix 1 all ave/atom 10 20 1000 c_my_stress[1]
- fix 1 all ave/atom 10 20 1000 c_my_stress[*]
-
-Description
-"""""""""""
-
-Use one or more per-atom vectors as inputs every few timesteps, and
-average them atom by atom over longer timescales. The resulting
-per-atom averages can be used by other :ref:`output commands <howto_15>` such as the :doc:`fix ave/chunk <fix_ave_chunk>` or :doc:`dump custom <dump>` commands.
-
-The group specified with the command means only atoms within the group
-have their averages computed. Results are set to 0.0 for atoms not in
-the group.
-
-Each input value can be an atom attribute (position, velocity, force
-component) or can be the result of a :doc:`compute <compute>` or
-:doc:`fix <fix>` or the evaluation of an atom-style
-:doc:`variable <variable>`. In the latter cases, the compute, fix, or
-variable must produce a per-atom vector, not a global quantity or
-local quantity. If you wish to time-average global quantities from a
-compute, fix, or variable, then see the :doc:`fix ave/time <fix_ave_time>` command.
-
-Each per-atom value of each input vector is averaged independently.
-
-:doc:`Computes <compute>` that produce per-atom vectors or arrays are
-those which have the word *atom* in their style name. See the doc
-pages for individual :doc:`fixes <fix>` to determine which ones produce
-per-atom vectors or arrays. :doc:`Variables <variable>` of style *atom*
-are the only ones that can be used with this fix since they produce
-per-atom vectors.
-
-Note that for values from a compute or fix, the bracketed index I can
-be specified using a wildcard asterisk with the index to effectively
-specify multiple values. This takes the form "*" or "*n" or "n*" or
-"m*n". If N = the size of the vector (for *mode* = scalar) or the
-number of columns in the array (for *mode* = vector), then an asterisk
-with no numeric values means all indices from 1 to N. A leading
-asterisk means all indices from 1 to n (inclusive). A trailing
-asterisk means all indices from n to N (inclusive). A middle asterisk
-means all indices from m to n (inclusive).
-
-Using a wildcard is the same as if the individual columns of the array
-had been listed one by one. E.g. these 2 fix ave/atom commands are
-equivalent, since the :doc:`compute stress/atom <compute_stress_atom>`
-command creates a per-atom array with 6 columns:
-
-.. parsed-literal::
-
- compute my_stress all stress/atom NULL
- fix 1 all ave/atom 10 20 1000 c_my_stress[*]
- fix 1 all ave/atom 10 20 1000 c_my_stress[1] c_my_stress[1] &
- c_my_stress[3] c_my_stress[4] &
- c_my_stress[5] c_my_stress[6]
-
-
-----------
-
-
-The *Nevery*\ , *Nrepeat*\ , and *Nfreq* arguments specify on what
-timesteps the input values will be used in order to contribute to the
-average. The final averaged quantities are generated on timesteps
-that are a multiple of *Nfreq*\ . The average is over *Nrepeat*
-quantities, computed in the preceding portion of the simulation every
-*Nevery* timesteps. *Nfreq* must be a multiple of *Nevery* and
-*Nevery* must be non-zero even if *Nrepeat* is 1. Also, the timesteps
-contributing to the average value cannot overlap,
-i.e. Nrepeat*Nevery can not exceed Nfreq.
-
-For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then values on
-timesteps 90,92,94,96,98,100 will be used to compute the final average
-on timestep 100. Similarly for timesteps 190,192,194,196,198,200 on
-timestep 200, etc.
-
-
-----------
-
-
-The atom attribute values (x,y,z,vx,vy,vz,fx,fy,fz) are
-self-explanatory. Note that other atom attributes can be used as
-inputs to this fix by using the :doc:`compute property/atom <compute_property_atom>` command and then specifying
-an input value from that compute.
-
-.. note::
-
- The x,y,z attributes are values that are re-wrapped inside the
- periodic box whenever an atom crosses a periodic boundary. Thus if
- you time average an atom that spends half its time on either side of
- the periodic box, you will get a value in the middle of the box. If
- this is not what you want, consider averaging unwrapped coordinates,
- which can be provided by the :doc:`compute property/atom <compute_property_atom>` command via its xu,yu,zu
- attributes.
-
-If a value begins with "c_", a compute ID must follow which has been
-previously defined in the input script. If no bracketed term is
-appended, the per-atom vector calculated by the compute is used. If a
-bracketed term containing an index I is appended, the Ith column of
-the per-atom array calculated by the compute is used. Users can also
-write code for their own compute styles and :doc:`add them to LAMMPS <Section_modify>`. See the discussion above for how I can
-be specified with a wildcard asterisk to effectively specify multiple
-values.
-
-If a value begins with "f_", a fix ID must follow which has been
-previously defined in the input script. If no bracketed term is
-appended, the per-atom vector calculated by the fix is used. If a
-bracketed term containing an index I is appended, the Ith column of
-the per-atom array calculated by the fix is used. Note that some
-fixes only produce their values on certain timesteps, which must be
-compatible with *Nevery*\ , else an error will result. Users can also
-write code for their own fix styles and :doc:`add them to LAMMPS <Section_modify>`. See the discussion above for how I can
-be specified with a wildcard asterisk to effectively specify multiple
-values.
-
-If a value begins with "v_", a variable name must follow which has
-been previously defined in the input script as an :doc:`atom-style variable <variable>` Variables of style *atom* can reference
-thermodynamic keywords, or invoke other computes, fixes, or variables
-when they are evaluated, so this is a very general means of generating
-per-atom quantities to time average.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global scalar or vector quantities are
-stored by this fix for access by various :ref:`output commands <howto_15>`.
-
-This fix produces a per-atom vector or array which can be accessed by
-various :ref:`output commands <howto_15>`. A vector is
-produced if only a single quantity is averaged by this fix. If two or
-more quantities are averaged, then an array of values is produced.
-The per-atom values can only be accessed on timesteps that are
-multiples of *Nfreq* since that is when averaging is performed.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute <compute>`, :doc:`fix ave/histo <fix_ave_histo>`, :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/time <fix_ave_time>`,
-:doc:`variable <variable>`,
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_ave_chunk.txt b/doc/html/_sources/fix_ave_chunk.txt
deleted file mode 100644
index 12b1dcca1..000000000
--- a/doc/html/_sources/fix_ave_chunk.txt
+++ /dev/null
@@ -1,496 +0,0 @@
-.. index:: fix ave/chunk
-
-fix ave/chunk command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID ave/chunk Nevery Nrepeat Nfreq chunkID value1 value2 ... keyword args ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* ave/chunk = style name of this fix command
-* Nevery = use input values every this many timesteps
-* Nrepeat = # of times to use input values for calculating averages
-* Nfreq = calculate averages every this many timesteps
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-* one or more input values can be listed
-* value = vx, vy, vz, fx, fy, fz, density/mass, density/number, temp, c_ID, c_ID[I], f_ID, f_ID[I], v_name
-.. parsed-literal::
-
- vx,vy,vz,fx,fy,fz = atom attribute (velocity, force component)
- density/number, density/mass = number or mass density
- temp = temperature
- c_ID = per-atom vector calculated by a compute with ID
- c_ID[I] = Ith column of per-atom array calculated by a compute with ID, I can include wildcard (see below)
- f_ID = per-atom vector calculated by a fix with ID
- f_ID[I] = Ith column of per-atom array calculated by a fix with ID, I can include wildcard (see below)
- v_name = per-atom vector calculated by an atom-style variable with name
-
-* zero or more keyword/arg pairs may be appended
-* keyword = *norm* or *ave* or *bias* or *adof* or *cdof* or *file* or *overwrite* or *title1* or *title2* or *title3*
-.. parsed-literal::
-
- *norm* arg = *all* or *sample* or *none* = how output on *Nfreq* steps is normalized
- all = output is sum of atoms across all *Nrepeat* samples, divided by atom count
- sample = output is sum of *Nrepeat* sample averages, divided by *Nrepeat*
- none = output is sum of *Nrepeat* sample sums, divided by *Nrepeat*
- *ave* args = *one* or *running* or *window M*
- one = output new average value every Nfreq steps
- running = output cumulative average of all previous Nfreq steps
- window M = output average of M most recent Nfreq steps
- *bias* arg = bias-ID
- bias-ID = ID of a temperature compute that removes a velocity bias for temperature calculation
- *adof* value = dof_per_atom
- dof_per_atom = define this many degrees-of-freedom per atom for temperature calculation
- *cdof* value = dof_per_chunk
- dof_per_chunk = define this many degrees-of-freedom per chunk for temperature calculation
- *file* arg = filename
- filename = file to write results to
- *overwrite* arg = none = overwrite output file with only latest output
- *format* arg = string
- string = C-style format string
- *title1* arg = string
- string = text to print as 1st line of output file
- *title2* arg = string
- string = text to print as 2nd line of output file
- *title3* arg = string
- string = text to print as 3rd line of output file
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all ave/chunk 10000 1 10000 binchunk c_myCentro title1 "My output values"
- fix 1 flow ave/chunk 100 10 1000 molchunk vx vz norm sample file vel.profile
- fix 1 flow ave/chunk 100 5 1000 binchunk density/mass ave running
- fix 1 flow ave/chunk 100 5 1000 binchunk density/mass ave running
-
-**NOTE:**
-
-If you are trying to replace a deprectated fix ave/spatial command
-with the newer, more flexible fix ave/chunk and :doc:`compute chunk/atom <compute_chunk_atom>` commands, you simply need to split
-the fix ave/spatial arguments across the two new commands. For
-example, this command:
-
-.. parsed-literal::
-
- fix 1 flow ave/spatial 100 10 1000 y 0.0 1.0 vx vz norm sample file vel.profile
-
-could be replaced by:
-
-.. parsed-literal::
-
- compute cc1 flow chunk/atom bin/1d y 0.0 1.0
- fix 1 flow ave/chunk 100 10 1000 cc1 vx vz norm sample file vel.profile
-
-Description
-"""""""""""
-
-Use one or more per-atom vectors as inputs every few timesteps, sum
-the values over the atoms in each chunk at each timestep, then average
-the per-chunk values over longer timescales. The resulting chunk
-averages can be used by other :ref:`output commands <howto_15>` such as :doc:`thermo_style custom <thermo_style>`, and can also be written to a file.
-
-In LAMMPS, chunks are collections of atoms defined by a :doc:`compute chunk/atom <compute_chunk_atom>` command, which assigns each atom
-to a single chunk (or no chunk). The ID for this command is specified
-as chunkID. For example, a single chunk could be the atoms in a
-molecule or atoms in a spatial bin. See the :doc:`compute chunk/atom <compute_chunk_atom>` doc page and ":ref:`Section_howto 23 <howto_23>` for details of how chunks can be
-defined and examples of how they can be used to measure properties of
-a system.
-
-Note that only atoms in the specified group contribute to the summing
-and averaging calculations. The :doc:`compute chunk/atom <compute_chunk_atom>` command defines its own group as
-well as an optional region. Atoms will have a chunk ID = 0, meaning
-they belong to no chunk, if they are not in that group or region.
-Thus you can specify the "all" group for this command if you simply
-want to use the chunk definitions provided by chunkID.
-
-Each specified per-atom value can be an atom attribute (position,
-velocity, force component), a mass or number density, or the result of
-a :doc:`compute <compute>` or :doc:`fix <fix>` or the evaluation of an
-atom-style :doc:`variable <variable>`. In the latter cases, the
-compute, fix, or variable must produce a per-atom quantity, not a
-global quantity. Note that the :doc:`compute property/atom <compute_property_atom>` command provides access to
-any attribute defined and stored by atoms. If you wish to
-time-average global quantities from a compute, fix, or variable, then
-see the :doc:`fix ave/time <fix_ave_time>` command.
-
-The per-atom values of each input vector are summed and averaged
-independently of the per-atom values in other input vectors.
-
-:doc:`Computes <compute>` that produce per-atom quantities are those
-which have the word *atom* in their style name. See the doc pages for
-individual :doc:`fixes <fix>` to determine which ones produce per-atom
-quantities. :doc:`Variables <variable>` of style *atom* are the only
-ones that can be used with this fix since all other styles of variable
-produce global quantities.
-
-Note that for values from a compute or fix, the bracketed index I can
-be specified using a wildcard asterisk with the index to effectively
-specify multiple values. This takes the form "*" or "*n" or "n*" or
-"m*n". If N = the size of the vector (for *mode* = scalar) or the
-number of columns in the array (for *mode* = vector), then an asterisk
-with no numeric values means all indices from 1 to N. A leading
-asterisk means all indices from 1 to n (inclusive). A trailing
-asterisk means all indices from n to N (inclusive). A middle asterisk
-means all indices from m to n (inclusive).
-
-Using a wildcard is the same as if the individual columns of the array
-had been listed one by one. E.g. these 2 fix ave/chunk commands are
-equivalent, since the :doc:`compute property/atom <compute_property/atom>` command creates, in this
-case, a per-atom array with 3 columns:
-
-.. parsed-literal::
-
- compute myAng all property/atom angmomx angmomy angmomz
- fix 1 all ave/chunk 100 1 100 cc1 c_myAng[*] file tmp.angmom
- fix 2 all ave/chunk 100 1 100 cc1 c_myAng[1] c_myAng[2] c_myAng[3] file tmp.angmom
-
-.. note::
-
- This fix works by creating an array of size *Nchunk* by Nvalues
- on each processor. *Nchunk* is the number of chunks which is defined
- by the :doc:`compute chunk/atom <doc/compute_chunk_atom>` command.
- Nvalues is the number of input values specified. Each processor loops
- over its atoms, tallying its values to the appropriate chunk. Then
- the entire array is summed across all processors. This means that
- using a large number of chunks will incur an overhead in memory and
- computational cost (summing across processors), so be careful to
- define a reasonable number of chunks.
-
-
-----------
-
-
-The *Nevery*\ , *Nrepeat*\ , and *Nfreq* arguments specify on what
-timesteps the input values will be accessed and contribute to the
-average. The final averaged quantities are generated on timesteps
-that are a multiples of *Nfreq*\ . The average is over *Nrepeat*
-quantities, computed in the preceding portion of the simulation every
-*Nevery* timesteps. *Nfreq* must be a multiple of *Nevery* and
-*Nevery* must be non-zero even if *Nrepeat* is 1. Also, the timesteps
-contributing to the average value cannot overlap, i.e. Nrepeat*Nevery
-can not exceed Nfreq.
-
-For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then values on
-timesteps 90,92,94,96,98,100 will be used to compute the final average
-on timestep 100. Similarly for timesteps 190,192,194,196,198,200 on
-timestep 200, etc. If Nrepeat=1 and Nfreq = 100, then no time
-averaging is done; values are simply generated on timesteps
-100,200,etc.
-
-Each input value can also be averaged over the atoms in each chunk.
-The way the averaging is done across the *Nrepeat* timesteps to
-produce output on the *Nfreq* timesteps, and across multiple *Nfreq*
-outputs, is determined by the *norm* and *ave* keyword settings, as
-discussed below.
-
-.. note::
-
- To perform per-chunk averaging within a *Nfreq* time window, the
- number of chunks *Nchunk* defined by the :doc:`compute chunk/atom <compute_chunk_atom>` command must remain constant. If
- the *ave* keyword is set to *running* or *window* then *Nchunk* must
- remain constant for the duration of the simulation. This fix forces
- the chunk/atom compute specified by chunkID to hold *Nchunk* constant
- for the appropriate time windows, by not allowing it to re-calcualte
- *Nchunk*\ , which can also affect how it assigns chunk IDs to atoms.
- More details are given on the :doc:`compute chunk/atom <compute_chunk_atom>` doc page.
-
-
-----------
-
-
-The atom attribute values (vx,vy,vz,fx,fy,fz) are self-explanatory.
-As noted above, any other atom attributes can be used as input values
-to this fix by using the :doc:`compute property/atom <compute_property_atom>` command and then specifying
-an input value from that compute.
-
-The *density/number* value means the number density is computed for
-each chunk, i.e. number/volume. The *density/mass* value means the
-mass density is computed for each chunk, i.e. total-mass/volume. The
-output values are in units of 1/volume or density (mass/volume). See
-the :doc:`units <units>` command doc page for the definition of density
-for each choice of units, e.g. gram/cm^3. If the chunks defined by
-the :doc:`compute chunk/atom <compute_chunk_atom>` command are spatial
-bins, the volume is the bin volume. Otherwise it is the volume of the
-entire simulation box.
-
-The *temp* value means the temperature is computed for each chunk, by
-the formula KE = DOF/2 k T, where KE = total kinetic energy of the
-chunk of atoms (sum of 1/2 m v^2), DOF = the total number of degrees
-of freedom for all atoms in the chunk, k = Boltzmann constant, and T =
-temperature.
-
-The DOF is calculated as N*adof + cdof, where N = number of atoms in
-the chunk, adof = degrees of freedom per atom, and cdof = degrees of
-freedom per chunk. By default adof = 2 or 3 = dimensionality of
-system, as set via the :doc:`dimension <dimension>` command, and cdof =
-0.0. This gives the usual formula for temperature.
-
-Note that currently this temperature only includes translational
-degrees of freedom for each atom. No rotational degrees of freedom
-are included for finite-size particles. Also no degrees of freedom
-are subtracted for any velocity bias or constraints that are applied,
-such as :doc:`compute temp/partial <compute_temp_partial>`, or :doc:`fix shake <fix_shake>` or :doc:`fix rigid <fix_rigid>`. This is because
-those degrees of freedom (e.g. a constrained bond) could apply to sets
-of atoms that are both included and excluded from a specific chunk,
-and hence the concept is somewhat ill-defined. In some cases, you can
-use the *adof* and *cdof* keywords to adjust the calculated degress of
-freedom appropriately, as explained below.
-
-Also note that a bias can be subtracted from atom velocities before
-they are used in the above formula for KE, by using the *bias*
-keyword. This allows, for example, a thermal temperature to be
-computed after removal of a flow velocity profile.
-
-Note that the per-chunk temperature calculated by this fix and the
-:doc:`compute temp/chunk <compute_temp_chunk>` command can be different.
-The compute calculates the temperature for each chunk for a single
-snapshot. This fix can do that but can also time average those values
-over many snapshots, or it can compute a temperature as if the atoms
-in the chunk on different timesteps were collected together as one set
-of atoms to calculate their temperature. The compute allows the
-center-of-mass velocity of each chunk to be subtracted before
-calculating the temperature; this fix does not.
-
-If a value begins with "c_", a compute ID must follow which has been
-previously defined in the input script. If no bracketed integer is
-appended, the per-atom vector calculated by the compute is used. If a
-bracketed integer is appended, the Ith column of the per-atom array
-calculated by the compute is used. Users can also write code for
-their own compute styles and :doc:`add them to LAMMPS <Section_modify>`.
-See the discussion above for how I can be specified with a wildcard
-asterisk to effectively specify multiple values.
-
-If a value begins with "f_", a fix ID must follow which has been
-previously defined in the input script. If no bracketed integer is
-appended, the per-atom vector calculated by the fix is used. If a
-bracketed integer is appended, the Ith column of the per-atom array
-calculated by the fix is used. Note that some fixes only produce
-their values on certain timesteps, which must be compatible with
-*Nevery*\ , else an error results. Users can also write code for their
-own fix styles and :doc:`add them to LAMMPS <Section_modify>`. See the
-discussion above for how I can be specified with a wildcard asterisk
-to effectively specify multiple values.
-
-If a value begins with "v_", a variable name must follow which has
-been previously defined in the input script. Variables of style
-*atom* can reference thermodynamic keywords and various per-atom
-attributes, or invoke other computes, fixes, or variables when they
-are evaluated, so this is a very general means of generating per-atom
-quantities to average within chunks.
-
-
-----------
-
-
-Additional optional keywords also affect the operation of this fix
-and its outputs.
-
-The *norm* keyword affects how averaging is done for the per-chunk
-values that are output every *Nfreq* timesteps.
-
-It the *norm* setting is *all*\ , which is the default, a chunk value is
-summed over all atoms in all *Nrepeat* samples, as is the count of
-atoms in the chunk. The averaged output value for the chunk on the
-*Nfreq* timesteps is Total-sum / Total-count. In other words it is an
-average over atoms across the entire *Nfreq* timescale.
-
-If the *norm* setting is *sample*\ , the chunk value is summed over atoms
-for each sample, as is the count, and an "average sample value" is
-computed for each sample, i.e. Sample-sum / Sample-count. The output
-value for the chunk on the *Nfreq* timesteps is the average of the
-*Nrepeat* "average sample values", i.e. the sum of *Nrepeat* "average
-sample values" divided by *Nrepeat*\ . In other words it is an average
-of an average.
-
-If the *norm* setting is *none*\ , a similar computation as for the
-*sample* seting is done, except the individual "average sample values"
-are "summed sample values". A summed sample value is simply the chunk
-value summed over atoms in the sample, without dividing by the number
-of atoms in the sample. The output value for the chunk on the
-*Nfreq* timesteps is the average of the *Nrepeat* "summed sample
-values", i.e. the sum of *Nrepeat* "summed sample values" divided by
-*Nrepeat*\ .
-
-The *ave* keyword determines how the per-chunk values produced every
-*Nfreq* steps are averaged with values produced on previous steps that
-were multiples of *Nfreq*\ , before they are accessed by another output
-command or written to a file.
-
-If the *ave* setting is *one*\ , which is the default, then the chunk
-values produced on timesteps that are multiples of *Nfreq* are
-independent of each other; they are output as-is without further
-averaging.
-
-If the *ave* setting is *running*\ , then the chunk values produced on
-timesteps that are multiples of *Nfreq* are summed and averaged in a
-cumulative sense before being output. Each output chunk value is thus
-the average of the chunk value produced on that timestep with all
-preceding values for the same chunk. This running average begins when
-the fix is defined; it can only be restarted by deleting the fix via
-the :doc:`unfix <unfix>` command, or re-defining the fix by
-re-specifying it.
-
-If the *ave* setting is *window*\ , then the chunk values produced on
-timesteps that are multiples of *Nfreq* are summed and averaged within
-a moving "window" of time, so that the last M values for the same
-chunk are used to produce the output. E.g. if M = 3 and Nfreq = 1000,
-then the output on step 10000 will be the average of the individual
-chunk values on steps 8000,9000,10000. Outputs on early steps will
-average over less than M values if they are not available.
-
-The *bias* keyword specifies the ID of a temperature compute that
-removes a "bias" velocity from each atom, specified as *bias-ID*\ . It
-is only used when the *temp* value is calculated, to compute the
-thermal temperature of each chunk after the translational kinetic
-energy components have been altered in a prescribed way, e.g. to
-remove a flow velocity profile. See the doc pages for individual
-computes that calculate a temperature to see which ones implement a
-bias.
-
-The *adof* and *cdof* keywords define the values used in the degree of
-freedom (DOF) formula described above for for temperature calculation
-for each chunk. They are only used when the *temp* value is
-calculated. They can be used to calculate a more appropriate
-temperature for some kinds of chunks. Here are 3 examples:
-
-If spatially binned chunks contain some number of water molecules and
-:doc:`fix shake <fix_shake>` is used to make each molecule rigid, then
-you could calculate a temperature with 6 degrees of freedom (DOF) (3
-translational, 3 rotational) per molecule by setting *adof* to 2.0.
-
-If :doc:`compute temp/partial <compute_temp_partial>` is used with the
-*bias* keyword to only allow the x component of velocity to contribute
-to the temperature, then *adof* = 1.0 would be appropriate.
-
-If each chunk consists of a large molecule, with some number of its
-bonds constrained by :doc:`fix shake <fix_shake>` or the entire molecule
-by :doc:`fix rigid/small <fix_rigid>`, *adof* = 0.0 and *cdof* could be
-set to the remaining degrees of freedom for the entire molecule
-(entire chunk in this case), e.g. 6 for 3d, or 3 for 2d, for a rigid
-molecule.
-
-The *file* keyword allows a filename to be specified. Every *Nfreq*
-timesteps, a section of chunk info will be written to a text file in
-the following format. A line with the timestep and number of chunks
-is written. Then one line per chunk is written, containing the chunk
-ID (1-Nchunk), an optional original ID value, optional coordinate
-values for chunks that represent spatial bins, the number of atoms in
-the chunk, and one or more calculated values. More explanation of the
-optional values is given below. The number of values in each line
-corresponds to the number of values specified in the fix ave/chunk
-command. The number of atoms and the value(s) are summed or average
-quantities, as explained above.
-
-The *overwrite* keyword will continuously overwrite the output file
-with the latest output, so that it only contains one timestep worth of
-output. This option can only be used with the *ave running* setting.
-
-The *format* keyword sets the numeric format of each value when it is
-printed to a file via the *file* keyword. Note that all values are
-floating point quantities. The default format is %g. You can specify
-a higher precision if desired, e.g. %20.16g.
-
-The *title1* and *title2* and *title3* keywords allow specification of
-the strings that will be printed as the first 3 lines of the output
-file, assuming the *file* keyword was used. LAMMPS uses default
-values for each of these, so they do not need to be specified.
-
-By default, these header lines are as follows:
-
-.. parsed-literal::
-
- # Chunk-averaged data for fix ID and group name
- # Timestep Number-of-chunks
- # Chunk (OrigID) (Coord1) (Coord2) (Coord3) Ncount value1 value2 ...
-
-In the first line, ID and name are replaced with the fix-ID and group
-name. The second line describes the two values that are printed at
-the first of each section of output. In the third line the values are
-replaced with the appropriate value names, e.g. fx or c_myCompute\ **2**\ .
-
-The words in parenthesis only appear with corresponding columns if the
-chunk style specified for the :doc:`compute chunk/atom <compute_chunk_atom>` command supports them. The OrigID
-column is only used if the *compress* keyword was set to *yes* for the
-:doc:`compute chunk/atom <compute_chunk_atom>` command. This means that
-the original chunk IDs (e.g. molecule IDs) will have been compressed
-to remove chunk IDs with no atoms assigned to them. Thus a compresed
-chunk ID of 3 may correspond to an original chunk ID or molecule ID of
-415. The OrigID column will list 415 for the 3rd chunk.
-
-The CoordN columns only appear if a *binning* style was used in the
-:doc:`compute chunk/atom <compute_chunk_atom>` command. For *bin/1d*\ ,
-*bin/2d*\ , and *bin/3d* styles the column values are the center point
-of the bin in the corresponding dimension. Just Coord1 is used for
-*bin/1d*\ , Coord2 is added for *bin/2d*\ , Coord3 is added for *bin/3d*\ .
-For *bin/sphere*\ , just Coord1 is used, and it is the radial
-coordinate. For *bin/cylinder*\ , Coord1 and Coord2 are used. Coord1
-is the radial coordinate (away from the cylinder axis), and coord2 is
-the coordinate along the cylinder axis.
-
-Note that if the value of the *units* keyword used in the :doc:`compute chunk/atom command <compute_chunk_atom>` is *box* or *lattice*\ , the
-coordinate values will be in distance :doc:`units <units>`. If the
-value of the *units* keyword is *reduced*\ , the coordinate values will
-be in unitless reduced units (0-1). This is not true for the Coord1 value
-of style *bin/sphere* or *bin/cylinder* which both represent radial
-dimensions. Those values are always in distance :doc:`units <units>`.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global array of values which can be accessed by
-various :ref:`output commands <howto_15>`. The values can
-only be accessed on timesteps that are multiples of *Nfreq* since that
-is when averaging is performed. The global array has # of rows =
-the number of chunks *Nchunk* as calculated by the specified :doc:`compute chunk/atom <compute_chunk_atom>` command. The # of columns =
-M+1+Nvalues, where M = 1 to 4, depending on whether the optional
-columns for OrigID and CoordN are used, as explained above.
-Following the optional columns, the next column contains the count of
-atoms in the chunk, and the remaining columns are the Nvalue
-quantities. When the array is accessed with a row I that exceeds the
-current number of chunks, than a 0.0 is returned by the fix instead of
-an error, since the number of chunks can vary as a simulation runs
-depending on how that value is computed by the compute chunk/atom
-command.
-
-The array values calculated by this fix are treated as "intensive",
-since they are typically already normalized by the count of atoms in
-each chunk.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute <compute>`, :doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/histo <fix_ave_histo>`, :doc:`fix ave/time <fix_ave_time>`,
-:doc:`variable <variable>`, :doc:`fix ave/correlate <fix_ave_correlate>`
-
-Default
-"""""""
-
-The option defaults are norm = all, ave = one, bias = none, no file output, and
-title 1,2,3 = strings as described above.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_ave_correlate.txt b/doc/html/_sources/fix_ave_correlate.txt
deleted file mode 100644
index a9dfffa37..000000000
--- a/doc/html/_sources/fix_ave_correlate.txt
+++ /dev/null
@@ -1,382 +0,0 @@
-.. index:: fix ave/correlate
-
-fix ave/correlate command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID ave/correlate Nevery Nrepeat Nfreq value1 value2 ... keyword args ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* ave/correlate = style name of this fix command
-* Nevery = use input values every this many timesteps
-* Nrepeat = # of correlation time windows to accumulate
-* Nfreq = calculate time window averages every this many timesteps
-* one or more input values can be listed
-* value = c_ID, c_ID[N], f_ID, f_ID[N], v_name
-.. parsed-literal::
-
- c_ID = global scalar calculated by a compute with ID
- c_ID[I] = Ith component of global vector calculated by a compute with ID, I can include wildcard (see below)
- f_ID = global scalar calculated by a fix with ID
- f_ID[I] = Ith component of global vector calculated by a fix with ID, I can include wildcard (see below)
- v_name = global value calculated by an equal-style variable with name
- v_name[I] = Ith component of a vector-style variable with name
-
-* zero or more keyword/arg pairs may be appended
-* keyword = *type* or *ave* or *start* or *prefactor* or *file* or *overwrite* or *title1* or *title2* or *title3*
-.. parsed-literal::
-
- *type* arg = *auto* or *upper* or *lower* or *auto/upper* or *auto/lower* or *full*
- auto = correlate each value with itself
- upper = correlate each value with each succeeding value
- lower = correlate each value with each preceding value
- auto/upper = auto + upper
- auto/lower = auto + lower
- full = correlate each value with every other value, including itself = auto + upper + lower
- *ave* args = *one* or *running*
- one = zero the correlation accumulation every Nfreq steps
- running = accumulate correlations continuously
- *start* args = Nstart
- Nstart = start accumulating correlations on this timestep
- *prefactor* args = value
- value = prefactor to scale all the correlation data by
- *file* arg = filename
- filename = name of file to output correlation data to
- *overwrite* arg = none = overwrite output file with only latest output
- *title1* arg = string
- string = text to print as 1st line of output file
- *title2* arg = string
- string = text to print as 2nd line of output file
- *title3* arg = string
- string = text to print as 3rd line of output file
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all ave/correlate 5 100 1000 c_myTemp file temp.correlate
- fix 1 all ave/correlate 1 50 10000 &
- c_thermo_press[1] c_thermo_press[2] c_thermo_press[3] &
- type upper ave running title1 "My correlation data"
-
-fix 1 all ave/correlate 1 50 10000 c_thermo_press[*]
-
-Description
-"""""""""""
-
-Use one or more global scalar values as inputs every few timesteps,
-calculate time correlations bewteen them at varying time intervals,
-and average the correlation data over longer timescales. The
-resulting correlation values can be time integrated by
-:doc:`variables <variable>` or used by other :ref:`output commands <howto_15>` such as :doc:`thermo_style custom <thermo_style>`, and can also be written to a file. See the
-:doc:`fix ave/correlate/long <fix_ave_correlate_long>` command for an
-alternate method for computing correlation functions efficiently over
-very long time windows.
-
-The group specified with this command is ignored. However, note that
-specified values may represent calculations performed by computes and
-fixes which store their own "group" definitions.
-
-Each listed value can be the result of a :doc:`compute <compute>` or
-:doc:`fix <fix>` or the evaluation of an equal-style or vector-style
-:doc:`variable <variable>`. In each case, the compute, fix, or variable
-must produce a global quantity, not a per-atom or local quantity. If
-you wish to spatial- or time-average or histogram per-atom quantities
-from a compute, fix, or variable, then see the :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/atom <fix_ave_atom>`, or
-:doc:`fix ave/histo <fix_ave_histo>` commands. If you wish to convert a
-per-atom quantity into a single global value, see the :doc:`compute reduce <compute_reduce>` command.
-
-The input values must either be all scalars. What kinds of
-correlations between input values are calculated is determined by the
-*type* keyword as discussed below.
-
-:doc:`Computes <compute>` that produce global quantities are those which
-do not have the word *atom* in their style name. Only a few
-:doc:`fixes <fix>` produce global quantities. See the doc pages for
-individual fixes for info on which ones produce such values.
-:doc:`Variables <variable>` of style *equal* and *vector* are the only
-ones that can be used with this fix. Variables of style *atom* cannot
-be used, since they produce per-atom values.
-
-Note that for values from a compute or fix, the bracketed index I can
-be specified using a wildcard asterisk with the index to effectively
-specify multiple values. This takes the form "*" or "*n" or "n*" or
-"m*n". If N = the size of the vector (for *mode* = scalar) or the
-number of columns in the array (for *mode* = vector), then an asterisk
-with no numeric values means all indices from 1 to N. A leading
-asterisk means all indices from 1 to n (inclusive). A trailing
-asterisk means all indices from n to N (inclusive). A middle asterisk
-means all indices from m to n (inclusive).
-
-Using a wildcard is the same as if the individual elements of the
-vector had been listed one by one. E.g. these 2 fix ave/correlate
-commands are equivalent, since the :doc:`compute pressure <compute_pressure>` command creates a global vector with 6
-values.
-
-.. parsed-literal::
-
- compute myPress all pressure NULL
- fix 1 all ave/correlate 1 50 10000 c_myPress[*]
- fix 1 all ave/correlate 1 50 10000 &
- c_myPress[1] c_myPress[2] c_myPress[3] &
- c_myPress[4] c_myPress[5] c_myPress[6]
-
-
-----------
-
-
-The *Nevery*\ , *Nrepeat*\ , and *Nfreq* arguments specify on what
-timesteps the input values will be used to calculate correlation data.
-The input values are sampled every *Nevery* timesteps. The
-correlation data for the preceding samples is computed on timesteps
-that are a multiple of *Nfreq*\ . Consider a set of samples from some
-initial time up to an output timestep. The initial time could be the
-beginning of the simulation or the last output time; see the *ave*
-keyword for options. For the set of samples, the correlation value
-Cij is calculated as:
-
-.. parsed-literal::
-
- Cij(delta) = ave(Vi(t)*Vj(t+delta))
-
-which is the correlation value between input values Vi and Vj,
-separated by time delta. Note that the second value Vj in the pair is
-always the one sampled at the later time. The ave() represents an
-average over every pair of samples in the set that are separated by
-time delta. The maximum delta used is of size (\ *Nrepeat*\ -1)*\ *Nevery*\ .
-Thus the correlation between a pair of input values yields *Nrepeat*
-correlation datums:
-
-.. parsed-literal::
-
- Cij(0), Cij(Nevery), Cij(2*Nevery), ..., Cij((Nrepeat-1)*Nevery)
-
-For example, if Nevery=5, Nrepeat=6, and Nfreq=100, then values on
-timesteps 0,5,10,15,...,100 will be used to compute the final averages
-on timestep 100. Six averages will be computed: Cij(0), Cij(5),
-Cij(10), Cij(15), Cij(20), and Cij(25). Cij(10) on timestep 100 will
-be the average of 19 samples, namely Vi(0)*Vj(10), Vi(5)*Vj(15),
-Vi(10)*V j20), Vi(15)*Vj(25), ..., Vi(85)*Vj(95), Vi(90)*Vj(100).
-
-*Nfreq* must be a multiple of *Nevery*\ ; *Nevery* and *Nrepeat* must be
-non-zero. Also, if the *ave* keyword is set to *one* which is the
-default, then *Nfreq* >= (\ *Nrepeat*\ -1)*\ *Nevery* is required.
-
-
-----------
-
-
-If a value begins with "c_", a compute ID must follow which has been
-previously defined in the input script. If no bracketed term is
-appended, the global scalar calculated by the compute is used. If a
-bracketed term is appended, the Ith element of the global vector
-calculated by the compute is used. See the discussion above for how I
-can be specified with a wildcard asterisk to effectively specify
-multiple values.
-
-Note that there is a :doc:`compute reduce <compute_reduce>` command
-which can sum per-atom quantities into a global scalar or vector which
-can thus be accessed by fix ave/correlate. Or it can be a compute
-defined not in your input script, but by :doc:`thermodynamic output <thermo_style>` or other fixes such as :doc:`fix nvt <fix_nh>`
-or :doc:`fix temp/rescale <fix_temp_rescale>`. See the doc pages for
-these commands which give the IDs of these computes. Users can also
-write code for their own compute styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If a value begins with "f_", a fix ID must follow which has been
-previously defined in the input script. If no bracketed term is
-appended, the global scalar calculated by the fix is used. If a
-bracketed term is appended, the Ith element of the global vector
-calculated by the fix is used. See the discussion above for how I can
-be specified with a wildcard asterisk to effectively specify multiple
-values.
-
-Note that some fixes only produce their values on certain timesteps,
-which must be compatible with *Nevery*\ , else an error will result.
-Users can also write code for their own fix styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If a value begins with "v_", a variable name must follow which has
-been previously defined in the input script. Only equal-style or
-vector-style variables can be referenced; the latter requires a
-bracketed term to specify the Ith element of the vector calculated by
-the variable. See the :doc:`variable <variable>` command for details.
-Note that variables of style *equal* or *vector* define a formula
-which can reference individual atom properties or thermodynamic
-keywords, or they can invoke other computes, fixes, or variables when
-they are evaluated, so this is a very general means of specifying
-quantities to time correlate.
-
-
-----------
-
-
-Additional optional keywords also affect the operation of this fix.
-
-The *type* keyword determines which pairs of input values are
-correlated with each other. For N input values Vi, for i = 1 to N,
-let the number of pairs = Npair. Note that the second value in the
-pair Vi(t)*Vj(t+delta) is always the one sampled at the later time.
-
-* If *type* is set to *auto* then each input value is correlated with
- itself. I.e. Cii = Vi*Vi, for i = 1 to N, so Npair = N.
-* If *type* is set
- to *upper* then each input value is correlated with every succeeding
- value. I.e. Cij = Vi*Vj, for i < j, so Npair = N*(N-1)/2.
-* If *type* is set
- to *lower* then each input value is correlated with every preceeding
- value. I.e. Cij = Vi*Vj, for i > j, so Npair = N*(N-1)/2.
-* If *type* is set to *auto/upper* then each input value is correlated
- with itself and every succeeding value. I.e. Cij = Vi*Vj, for i >= j,
- so Npair = N*(N+1)/2.
-* If *type* is set to *auto/lower* then each input value is correlated
- with itself and every preceding value. I.e. Cij = Vi*Vj, for i <= j,
- so Npair = N*(N+1)/2.
-* If *type* is set to *full* then each input value is correlated with
- itself and every other value. I.e. Cij = Vi*Vj, for i,j = 1,N so
- Npair = N^2.
-The *ave* keyword determines what happens to the accumulation of
-correlation samples every *Nfreq* timesteps. If the *ave* setting is
-*one*\ , then the accumulation is restarted or zeroed every *Nfreq*
-timesteps. Thus the outputs on successive *Nfreq* timesteps are
-essentially independent of each other. The exception is that the
-Cij(0) = Vi(T)*Vj(T) value at a timestep T, where T is a multiple of
-*Nfreq*\ , contributes to the correlation output both at time T and at
-time T+Nfreq.
-
-If the *ave* setting is *running*\ , then the accumulation is never
-zeroed. Thus the output of correlation data at any timestep is the
-average over samples accumulated every *Nevery* steps since the fix
-was defined. it can only be restarted by deleting the fix via the
-:doc:`unfix <unfix>` command, or by re-defining the fix by re-specifying
-it.
-
-The *start* keyword specifies what timestep the accumulation of
-correlation samples will begin on. The default is step 0. Setting it
-to a larger value can avoid adding non-equilibrated data to the
-correlation averages.
-
-The *prefactor* keyword specifies a constant which will be used as a
-multiplier on the correlation data after it is averaged. It is
-effectively a scale factor on Vi*Vj, which can be used to account for
-the size of the time window or other unit conversions.
-
-The *file* keyword allows a filename to be specified. Every *Nfreq*
-steps, an array of correlation data is written to the file. The
-number of rows is *Nrepeat*\ , as described above. The number of
-columns is the Npair+2, also as described above. Thus the file ends
-up to be a series of these array sections.
-
-The *overwrite* keyword will continuously overwrite the output file
-with the latest output, so that it only contains one timestep worth of
-output. This option can only be used with the *ave running* setting.
-
-The *title1* and *title2* and *title3* keywords allow specification of
-the strings that will be printed as the first 3 lines of the output
-file, assuming the *file* keyword was used. LAMMPS uses default
-values for each of these, so they do not need to be specified.
-
-By default, these header lines are as follows:
-
-.. parsed-literal::
-
- # Time-correlated data for fix ID
- # TimeStep Number-of-time-windows
- # Index TimeDelta Ncount valueI*valueJ valueI*valueJ ...
-
-In the first line, ID is replaced with the fix-ID. The second line
-describes the two values that are printed at the first of each section
-of output. In the third line the value pairs are replaced with the
-appropriate fields from the fix ave/correlate command.
-
-
-----------
-
-
-Let Sij = a set of time correlation data for input values I and J,
-namely the *Nrepeat* values:
-
-.. parsed-literal::
-
- Sij = Cij(0), Cij(Nevery), Cij(2*Nevery), ..., Cij(*Nrepeat-1)*Nevery)
-
-As explained below, these datums are output as one column of a global
-array, which is effectively the correlation matrix.
-
-The *trap* function defined for :doc:`equal-style variables <variable>`
-can be used to perform a time integration of this vector of datums,
-using a trapezoidal rule. This is useful for calculating various
-quantities which can be derived from time correlation data. If a
-normalization factor is needed for the time integration, it can be
-included in the variable formula or via the *prefactor* keyword.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global array of values which can be accessed by
-various :ref:`output commands <howto_15>`. The values can
-only be accessed on timesteps that are multiples of *Nfreq* since that
-is when averaging is performed. The global array has # of rows =
-*Nrepeat* and # of columns = Npair+2. The first column has the time
-delta (in timesteps) between the pairs of input values used to
-calculate the correlation, as described above. The 2nd column has the
-number of samples contributing to the correlation average, as
-described above. The remaining Npair columns are for I,J pairs of the
-N input values, as determined by the *type* keyword, as described
-above.
-
-* For *type* = *auto*\ , the Npair = N columns are ordered: C11, C22, ...,
- CNN.
-* For *type* = *upper*\ , the Npair = N*(N-1)/2 columns are ordered: C12,
- C13, ..., C1N, C23, ..., C2N, C34, ..., CN-1N.
-* For *type* = *lower*\ , the Npair = N*(N-1)/2 columns are ordered: C21,
- C31, C32, C41, C42, C43, ..., CN1, CN2, ..., CNN-1.
-* For *type* = *auto/upper*\ , the Npair = N*(N+1)/2 columns are ordered:
- C11, C12, C13, ..., C1N, C22, C23, ..., C2N, C33, C34, ..., CN-1N,
- CNN.
-* For *type* = *auto/lower*\ , the Npair = N*(N+1)/2 columns are ordered:
- C11, C21, C22, C31, C32, C33, C41, ..., C44, CN1, CN2, ..., CNN-1,
- CNN.
-* For *type* = *full*\ , the Npair = N^2 columns are ordered: C11, C12,
- ..., C1N, C21, C22, ..., C2N, C31, ..., C3N, ..., CN1, ..., CNN-1,
- CNN.
-The array values calculated by this fix are treated as intensive. If
-you need to divide them by the number of atoms, you must do this in a
-later processing step, e.g. when using them in a
-:doc:`variable <variable>`.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix ave/correlate/long <fix_ave_correlate_long>`,
-:doc:`compute <compute>`, :doc:`fix ave/time <fix_ave_time>`, :doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/chunk <fix_ave_chunk>`,
-:doc:`fix ave/histo <fix_ave_histo>`, :doc:`variable <variable>`
-
-**Default:** none
-
-The option defaults are ave = one, type = auto, start = 0, no file
-output, title 1,2,3 = strings as described above, and prefactor = 1.0.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_ave_correlate_long.txt b/doc/html/_sources/fix_ave_correlate_long.txt
deleted file mode 100644
index 0231b6d15..000000000
--- a/doc/html/_sources/fix_ave_correlate_long.txt
+++ /dev/null
@@ -1,159 +0,0 @@
-.. index:: fix ave/correlate/long
-
-fix ave/correlate/long command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID ave/correlate/long Nevery Nfreq value1 value2 ... keyword args ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* ave/correlate/long = style name of this fix command
-* Nevery = use input values every this many timesteps
-* Nfreq = save state of the time correlation functions every this many timesteps
-* one or more input values can be listed
-* value = c_ID, c_ID[N], f_ID, f_ID[N], v_name
-.. parsed-literal::
-
- c_ID = global scalar calculated by a compute with ID
- c_ID[I] = Ith component of global vector calculated by a compute with ID
- f_ID = global scalar calculated by a fix with ID
- f_ID[I] = Ith component of global vector calculated by a fix with ID
- v_name = global value calculated by an equal-style variable with name
-
-* zero or more keyword/arg pairs may be appended
-* keyword = *type* or *start* or *file* or *overwrite* or *title1* or *title2* or *ncorr* or *p* or *m*
-.. parsed-literal::
-
- *type* arg = *auto* or *upper* or *lower* or *auto/upper* or *auto/lower* or *full*
- auto = correlate each value with itself
- upper = correlate each value with each succeeding value
- lower = correlate each value with each preceding value
- auto/upper = auto + upper
- auto/lower = auto + lower
- full = correlate each value with every other value, including itself = auto + upper + lower
- *start* args = Nstart
- Nstart = start accumulating correlations on this timestep
- *file* arg = filename
- filename = name of file to output correlation data to
- *overwrite* arg = none = overwrite output file with only latest output
- *title1* arg = string
- string = text to print as 1st line of output file
- *title2* arg = string
- string = text to print as 2nd line of output file
- *ncorr* arg = Ncorrelators
- Ncorrelators = number of correlators to store
- *nlen* args = Nlen
- Nlen = length of each correlator
- *ncount* args = Ncount
- Ncount = number of values over which succesive correlators are averaged
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all ave/correlate/long 5 1000 c_myTemp file temp.correlate
- fix 1 all ave/correlate/long 1 10000 &
- c_thermo_press[1] c_thermo_press[2] c_thermo_press[3] &
- type upper title1 "My correlation data" nlen 15 ncount 3
-
-Description
-"""""""""""
-
-This fix is similar in spirit and syntax to the :doc:`fix ave/correlate <fix_ave_correlate>`. However, this fix allows the
-efficient calculation of time correlation functions on the fly over
-extremely long time windows without too much CPU overhead, using a
-multiple-tau method :ref:`(Ramirez) <Ramirez>` that decreases the resolution
-of the stored correlation function with time.
-
-The group specified with this command is ignored. However, note that
-specified values may represent calculations performed by computes and
-fixes which store their own "group" definitions.
-
-Each listed value can be the result of a compute or fix or the
-evaluation of an equal-style variable. See the :doc:`fix ave/correlate <fix_ave_correlate>` doc page for details.
-
-The *Nevery* and *Nfreq* arguments specify on what timesteps the input
-values will be used to calculate correlation data, and the frequency
-with which the time correlation functions will be output to a file.
-Note that there is no *Nrepeat* argument, unlike the :doc:`fix ave/correlate <fix_ave_correlate>` command.
-
-The optional keywords *ncorr*\ , *nlen*\ , and *ncount* are unique to this
-command and determine the number of correlation points calculated and
-the memory and CPU overhead used by this calculation. *Nlen* and
-*ncount* determine the amount of averaging done at longer correlation
-times. The default values *nlen=16*\ , *ncount=2* ensure that the
-systematic error of the multiple-tau correlator is always below the
-level of the statistical error of a typical simulation (which depends
-on the ensemble size and the simulation length).
-
-The maximum correlation time (in time steps) that can be reached is
-given by the formula (nlen-1) * ncount^(ncorr-1). Longer correlation
-times are discarded and not calculated. With the default values of
-the parameters (ncorr=20, nlen=16 and ncount=2), this corresponds to
-7864320 time steps. If longer correlation times are needed, the value
-of ncorr should be increased. Using nlen=16 and ncount=2, with
-ncorr=30, the maximum number of steps that can be correlated is
-80530636808. If ncorr=40, correlation times in excess of 8e12 time
-steps can be calculated.
-
-The total memory needed for each correlation pair is roughly
-4*ncorr*nlen*8 bytes. With the default values of the parameters, this
-corresponds to about 10 KB.
-
-For the meaning of the additional optional keywords, see the :doc:`fix ave/correlate <fix_ave_correlate>` doc page.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-Since this fix in intended for the calculation of time correlation
-functions over very long MD simulations, the information about this
-fix is written automatically to binary restart files, so that the time
-correlation calculation can continue in subsequent simulations. None
-of the fix_modify options are relevant to this fix.
-
-No parameter of this fix can be used with the start/stop keywords of
-the run command. This fix is not invoked during energy minimization.
-
-Restrictions
-""""""""""""
-
-
-This compute is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix ave/correlate <fix_ave_correlate>`
-
-**Default:** none
-
-The option defaults for keywords that are also keywords for the :doc:`fix ave/correlate <fix_ave_correlate>` command are as follows: type =
-auto, start = 0, no file output, title 1,2 = strings as described on
-the :doc:`fix ave/correlate <fix_ave_correlate>` doc page.
-
-The option defaults for keywords unique to this command are as
-follows: ncorr=20, nlen=16, ncount=2.
-
-
-----------
-
-
-.. _Ramirez:
-
-
-
-**(Ramirez)** J. Ramirez, S.K. Sukumaran, B. Vorselaars and
-A.E. Likhtman, J. Chem. Phys. 133, 154103 (2010).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_ave_histo.txt b/doc/html/_sources/fix_ave_histo.txt
deleted file mode 100644
index 69e51ce15..000000000
--- a/doc/html/_sources/fix_ave_histo.txt
+++ /dev/null
@@ -1,379 +0,0 @@
-.. index:: fix ave/histo
-
-fix ave/histo command
-=====================
-
-fix ave/histo/weight command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID style Nevery Nrepeat Nfreq lo hi Nbin value1 value2 ... keyword args ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* style = *ave/histo* or *ave/histo/weight* = style name of this fix command
-* Nevery = use input values every this many timesteps
-* Nrepeat = # of times to use input values for calculating histogram
-* Nfreq = calculate histogram every this many timesteps
-* lo,hi = lo/hi bounds within which to histogram
-* Nbin = # of histogram bins
-* one or more input values can be listed
-* value = x, y, z, vx, vy, vz, fx, fy, fz, c_ID, c_ID[N], f_ID, f_ID[N], v_name
-.. parsed-literal::
-
- x,y,z,vx,vy,vz,fx,fy,fz = atom attribute (position, velocity, force component)
- c_ID = scalar or vector calculated by a compute with ID
- c_ID[I] = Ith component of vector or Ith column of array calculated by a compute with ID, I can include wildcard (see below)
- f_ID = scalar or vector calculated by a fix with ID
- f_ID[I] = Ith component of vector or Ith column of array calculated by a fix with ID, I can include wildcard (see below)
- v_name = value(s) calculated by an equal-style or vector-style or atom-style variable with name
- v_name[I] = value calculated by a vector-style variable with name
-
-* zero or more keyword/arg pairs may be appended
-* keyword = *mode* or *file* or *ave* or *start* or *beyond* or *overwrite* or *title1* or *title2* or *title3*
-.. parsed-literal::
-
- *mode* arg = *scalar* or *vector*
- scalar = all input values are scalars
- vector = all input values are vectors
- *file* arg = filename
- filename = name of file to output histogram(s) to
- *ave* args = *one* or *running* or *window*
- one = output a new average value every Nfreq steps
- running = output cumulative average of all previous Nfreq steps
- window M = output average of M most recent Nfreq steps
- *start* args = Nstart
- Nstart = start averaging on this timestep
- *beyond* arg = *ignore* or *end* or *extra*
- ignore = ignore values outside histogram lo/hi bounds
- end = count values outside histogram lo/hi bounds in end bins
- extra = create 2 extra bins for value outside histogram lo/hi bounds
- *overwrite* arg = none = overwrite output file with only latest output
- *title1* arg = string
- string = text to print as 1st line of output file
- *title2* arg = string
- string = text to print as 2nd line of output file
- *title3* arg = string
- string = text to print as 3rd line of output file, only for vector mode
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all ave/histo 100 5 1000 0.5 1.5 50 c_myTemp file temp.histo ave running
- fix 1 all ave/histo 100 5 1000 -5 5 100 c_thermo_press[2] c_thermo_press[3] title1 "My output values"
- fix 1 all ave/histo 100 5 1000 -5 5 100 c_thermo_press[*]
- fix 1 all ave/histo 1 100 1000 -2.0 2.0 18 vx vy vz mode vector ave running beyond extra
- fix 1 all ave/histo/weight 1 1 1 10 100 2000 c_XRD[1] c_XRD[2]
-
-Description
-"""""""""""
-
-Use one or more values as inputs every few timesteps to create a
-single histogram. The histogram can then be averaged over longer
-timescales. The resulting histogram can be used by other :ref:`output commands <howto_15>`, and can also be written to a
-file. The fix ave/histo/weight command has identical syntax to fix
-ave/histo, except that exactly two values must be specified. See
-details below.
-
-The group specified with this command is ignored for global and local
-input values. For per-atom input values, only atoms in the group
-contribute to the histogram. Note that regardless of the specified
-group, specified values may represent calculations performed by
-computes and fixes which store their own "group" definition.
-
-A histogram is simply a count of the number of values that fall within
-a histogram bin. *Nbins* are defined, with even spacing between *lo*
-and *hi*\ . Values that fall outside the lo/hi bounds can be treated in
-different ways; see the discussion of the *beyond* keyword below.
-
-Each input value can be an atom attribute (position, velocity, force
-component) or can be the result of a :doc:`compute <compute>` or
-:doc:`fix <fix>` or the evaluation of an equal-style or vector-style or
-atom-style :doc:`variable <variable>`. The set of input values can be
-either all global, all per-atom, or all local quantities. Inputs of
-different kinds (e.g. global and per-atom) cannot be mixed. Atom
-attributes are per-atom vector values. See the doc page for
-individual "compute" and "fix" commands to see what kinds of
-quantities they generate.
-
-Note that the output of this command is a single histogram for all
-input values combined together, not one histogram per input value.
-See below for details on the format of the output of this fix.
-
-The input values must either be all scalars or all vectors (or
-arrays), depending on the setting of the *mode* keyword.
-
-If *mode* = scalar, then the input values must be scalars, or vectors
-with a bracketed term appended, indicating the Ith value of the vector
-is used.
-
-If *mode* = vector, then the input values must be vectors, or arrays
-with a bracketed term appended, indicating the Ith column of the array
-is used.
-
-Note that for values from a compute or fix, the bracketed index I can
-be specified using a wildcard asterisk with the index to effectively
-specify multiple values. This takes the form "*" or "*n" or "n*" or
-"m*n". If N = the size of the vector (for *mode* = scalar) or the
-number of columns in the array (for *mode* = vector), then an asterisk
-with no numeric values means all indices from 1 to N. A leading
-asterisk means all indices from 1 to n (inclusive). A trailing
-asterisk means all indices from n to N (inclusive). A middle asterisk
-means all indices from m to n (inclusive).
-
-Using a wildcard is the same as if the individual elements of the
-vector or columns of the array had been listed one by one. E.g. these
-2 fix ave/histo commands are equivalent, since the :doc:`compute com/chunk <compute_com_chunk>` command creates a global array with
-3 columns:
-
-.. parsed-literal::
-
- compute myCOM all com/chunk
- fix 1 all ave/histo 100 1 100 c_myCOM[*] file tmp1.com mode vector
- fix 2 all ave/histo 100 1 100 c_myCOM[1] c_myCOM[2] c_myCOM[3] file tmp2.com mode vector
-
-If the fix ave/histo/weight command is used, exactly two values must
-be specified. If the values are vectors, they must be the same
-length. The first value (a scalar or vector) is what is histogrammed
-into bins, in the same manner the fix ave/histo command operates. The
-second value (a scalar or vector) is used as a "weight". This means
-that instead of each value tallying a "1" to its bin, the
-corresponding weight is tallied. E.g. The Nth entry (weight) in the
-second vector is tallied to the bin corresponding to the Nth entry in
-the first vector.
-
-
-----------
-
-
-The *Nevery*\ , *Nrepeat*\ , and *Nfreq* arguments specify on what
-timesteps the input values will be used in order to contribute to the
-histogram. The final histogram is generated on timesteps that are
-multiple of *Nfreq*\ . It is averaged over *Nrepeat* histograms,
-computed in the preceding portion of the simulation every *Nevery*
-timesteps. *Nfreq* must be a multiple of *Nevery* and *Nevery* must
-be non-zero even if *Nrepeat* is 1. Also, the timesteps
-contributing to the histogram value cannot overlap,
-i.e. Nrepeat*Nevery can not exceed Nfreq.
-
-For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then input values
-on timesteps 90,92,94,96,98,100 will be used to compute the final
-histogram on timestep 100. Similarly for timesteps
-190,192,194,196,198,200 on timestep 200, etc. If Nrepeat=1 and Nfreq
-= 100, then no time averaging of the histogram is done; a histogram is
-simply generated on timesteps 100,200,etc.
-
-
-----------
-
-
-The atom attribute values (x,y,z,vx,vy,vz,fx,fy,fz) are
-self-explanatory. Note that other atom attributes can be used as
-inputs to this fix by using the :doc:`compute property/atom <compute_property_atom>` command and then specifying
-an input value from that compute.
-
-If a value begins with "c_", a compute ID must follow which has been
-previously defined in the input script. If *mode* = scalar, then if
-no bracketed term is appended, the global scalar calculated by the
-compute is used. If a bracketed term is appended, the Ith element of
-the global vector calculated by the compute is used. If *mode* =
-vector, then if no bracketed term is appended, the global or per-atom
-or local vector calculated by the compute is used. If a bracketed
-term is appended, the Ith column of the global or per-atom or local
-array calculated by the compute is used. See the discussion above for
-how I can be specified with a wildcard asterisk to effectively specify
-multiple values.
-
-Note that there is a :doc:`compute reduce <compute_reduce>` command
-which can sum per-atom quantities into a global scalar or vector which
-can thus be accessed by fix ave/histo. Or it can be a compute defined
-not in your input script, but by :doc:`thermodynamic output <thermo_style>` or other fixes such as :doc:`fix nvt <fix_nh>` or :doc:`fix temp/rescale <fix_temp_rescale>`. See
-the doc pages for these commands which give the IDs of these computes.
-Users can also write code for their own compute styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If a value begins with "f_", a fix ID must follow which has been
-previously defined in the input script. If *mode* = scalar, then if
-no bracketed term is appended, the global scalar calculated by the fix
-is used. If a bracketed term is appended, the Ith element of the
-global vector calculated by the fix is used. If *mode* = vector, then
-if no bracketed term is appended, the global or per-atom or local
-vector calculated by the fix is used. If a bracketed term is
-appended, the Ith column of the global or per-atom or local array
-calculated by the fix is used. See the discussion above for how I can
-be specified with a wildcard asterisk to effectively specify multiple
-values.
-
-Note that some fixes only produce their values on certain timesteps,
-which must be compatible with *Nevery*\ , else an error will result.
-Users can also write code for their own fix styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If a value begins with "v_", a variable name must follow which has
-been previously defined in the input script. If *mode* = scalar, then
-only equal-style or vector-style variables can be used, which both
-produce global values. In this mode, a vector-style variable requires
-a bracketed term to specify the Ith element of the vector calculated
-by the variable. If *mode* = vector, then only vector-style or
-atom-style variables can be used, which produce a global or per-atom
-vector respectively. The vector-style variable must be used without a
-bracketed term. See the :doc:`variable <variable>` command for details.
-
-Note that variables of style *equal*\ , *vector*\ , and *atom* define a
-formula which can reference individual atom properties or
-thermodynamic keywords, or they can invoke other computes, fixes, or
-variables when they are evaluated, so this is a very general means of
-specifying quantities to histogram.
-
-
-----------
-
-
-Additional optional keywords also affect the operation of this fix.
-
-If the *mode* keyword is set to *scalar*\ , then all input values must
-be global scalars, or elements of global vectors. If the *mode*
-keyword is set to *vector*\ , then all input values must be global or
-per-atom or local vectors, or columns of global or per-atom or local
-arrays.
-
-The *beyond* keyword determines how input values that fall outside the
-*lo* to *hi* bounds are treated. Values such that *lo* <= value <=
-*hi* are assigned to one bin. Values on a bin boundary are assigned
-to the lower of the 2 bins. If *beyond* is set to *ignore* then
-values < *lo* and values > *hi* are ignored, i.e. they are not binned.
-If *beyond* is set to *end* then values < *lo* are counted in the
-first bin and values > *hi* are counted in the last bin. If *beyond*
-is set to *extend* then two extra bins are created, so that there are
-Nbins+2 total bins. Values < *lo* are counted in the first bin and
-values > *hi* are counted in the last bin (Nbins+1). Values between
-*lo* and *hi* (inclusive) are counted in bins 2 thru Nbins+1. The
-"coordinate" stored and printed for these two extra bins is *lo* and
-*hi*\ .
-
-The *ave* keyword determines how the histogram produced every *Nfreq*
-steps are averaged with histograms produced on previous steps that
-were multiples of *Nfreq*\ , before they are accessed by another output
-command or written to a file.
-
-If the *ave* setting is *one*\ , then the histograms produced on
-timesteps that are multiples of *Nfreq* are independent of each other;
-they are output as-is without further averaging.
-
-If the *ave* setting is *running*\ , then the histograms produced on
-timesteps that are multiples of *Nfreq* are summed and averaged in a
-cumulative sense before being output. Each bin value in the histogram
-is thus the average of the bin value produced on that timestep with
-all preceding values for the same bin. This running average begins
-when the fix is defined; it can only be restarted by deleting the fix
-via the :doc:`unfix <unfix>` command, or by re-defining the fix by
-re-specifying it.
-
-If the *ave* setting is *window*\ , then the histograms produced on
-timesteps that are multiples of *Nfreq* are summed within a moving
-"window" of time, so that the last M histograms are used to produce
-the output. E.g. if M = 3 and Nfreq = 1000, then the output on step
-10000 will be the combined histogram of the individual histograms on
-steps 8000,9000,10000. Outputs on early steps will be sums over less
-than M histograms if they are not available.
-
-The *start* keyword specifies what timestep histogramming will begin
-on. The default is step 0. Often input values can be 0.0 at time 0,
-so setting *start* to a larger value can avoid including a 0.0 in
-a running or windowed histogram.
-
-The *file* keyword allows a filename to be specified. Every *Nfreq*
-steps, one histogram is written to the file. This includes a leading
-line that contains the timestep, number of bins, the total count of
-values contributing to the histogram, the count of values that were
-not histogrammed (see the *beyond* keyword), the minimum value
-encountered, and the maximum value encountered. The min/max values
-include values that were not histogrammed. Following the leading
-line, one line per bin is written into the file. Each line contains
-the bin #, the coordinate for the center of the bin (between *lo* and
-*hi*\ ), the count of values in the bin, and the normalized count. The
-normalized count is the bin count divided by the total count (not
-including values not histogrammed), so that the normalized values sum
-to 1.0 across all bins.
-
-The *overwrite* keyword will continuously overwrite the output file
-with the latest output, so that it only contains one timestep worth of
-output. This option can only be used with the *ave running* setting.
-
-The *title1* and *title2* and *title3* keywords allow specification of
-the strings that will be printed as the first 3 lines of the output
-file, assuming the *file* keyword was used. LAMMPS uses default
-values for each of these, so they do not need to be specified.
-
-By default, these header lines are as follows:
-
-.. parsed-literal::
-
- # Histogram for fix ID
- # TimeStep Number-of-bins Total-counts Missing-counts Min-value Max-value
- # Bin Coord Count Count/Total
-
-In the first line, ID is replaced with the fix-ID. The second line
-describes the six values that are printed at the first of each section
-of output. The third describes the 4 values printed for each bin in
-the histogram.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix produces a global vector and global array which can be
-accessed by various :ref:`output commands <howto_15>`.
-The values can only be accessed on timesteps that are multiples of
-*Nfreq* since that is when a histogram is generated. The global
-vector has 4 values:
-
-* 1 = total counts in the histogram
-* 2 = values that were not histogrammed (see *beyond* keyword)
-* 3 = min value of all input values, including ones not histogrammed
-* 4 = max value of all input values, including ones not histogrammed
-
-The global array has # of rows = Nbins and # of columns = 3. The
-first column has the bin coordinate, the 2nd column has the count of
-values in that histogram bin, and the 3rd column has the bin count
-divided by the total count (not including missing counts), so that the
-values in the 3rd column sum to 1.0.
-
-The vector and array values calculated by this fix are all treated as
-intensive. If this is not the case, e.g. due to histogramming
-per-atom input values, then you will need to account for that when
-interpreting the values produced by this fix.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute <compute>`, :doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/time <fix_ave_time>`,
-:doc:`variable <variable>`, :doc:`fix ave/correlate <fix_ave_correlate>`,
-
-**Default:** none
-
-The option defaults are mode = scalar, ave = one, start = 0, no file
-output, beyond = ignore, and title 1,2,3 = strings as described above.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_ave_time.txt b/doc/html/_sources/fix_ave_time.txt
deleted file mode 100644
index a52578bde..000000000
--- a/doc/html/_sources/fix_ave_time.txt
+++ /dev/null
@@ -1,369 +0,0 @@
-.. index:: fix ave/time
-
-fix ave/time command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID ave/time Nevery Nrepeat Nfreq value1 value2 ... keyword args ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* ave/time = style name of this fix command
-* Nevery = use input values every this many timesteps
-* Nrepeat = # of times to use input values for calculating averages
-* Nfreq = calculate averages every this many timesteps
-* one or more input values can be listed
-* value = c_ID, c_ID[N], f_ID, f_ID[N], v_name
-.. parsed-literal::
-
- c_ID = global scalar or vector calculated by a compute with ID
- c_ID[I] = Ith component of global vector or Ith column of global array calculated by a compute with ID, I can include wildcard (see below)
- f_ID = global scalar or vector calculated by a fix with ID
- f_ID[I] = Ith component of global vector or Ith column of global array calculated by a fix with ID, I can include wildcard (see below)
- v_name = value(s) calculated by an equal-style or vector-style variable with name
- v_name[I] = value calculated by a vector-style variable with name
-
-* zero or more keyword/arg pairs may be appended
-* keyword = *mode* or *file* or *ave* or *start* or *off* or *overwrite* or *title1* or *title2* or *title3*
-.. parsed-literal::
-
- *mode* arg = *scalar* or *vector*
- scalar = all input values are global scalars
- vector = all input values are global vectors or global arrays
- *ave* args = *one* or *running* or *window M*
- one = output a new average value every Nfreq steps
- running = output cummulative average of all previous Nfreq steps
- window M = output average of M most recent Nfreq steps
- *start* args = Nstart
- Nstart = start averaging on this timestep
- *off* arg = M = do not average this value
- M = value # from 1 to Nvalues
- *file* arg = filename
- filename = name of file to output time averages to
- *overwrite* arg = none = overwrite output file with only latest output
- *format* arg = string
- string = C-style format string
- *title1* arg = string
- string = text to print as 1st line of output file
- *title2* arg = string
- string = text to print as 2nd line of output file
- *title3* arg = string
- string = text to print as 3rd line of output file, only for vector mode
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all ave/time 100 5 1000 c_myTemp c_thermo_temp file temp.profile
- fix 1 all ave/time 100 5 1000 c_thermo_press[2] ave window 20 &
- title1 "My output values"
- fix 1 all ave/time 100 5 1000 c_thermo_press[*]
- fix 1 all ave/time 1 100 1000 f_indent f_indent[1] file temp.indent off 1
-
-Description
-"""""""""""
-
-Use one or more global values as inputs every few timesteps, and
-average them over longer timescales. The resulting averages can be
-used by other :ref:`output commands <howto_15>` such as
-:doc:`thermo_style custom <thermo_style>`, and can also be written to a
-file. Note that if no time averaging is done, this command can be
-used as a convenient way to simply output one or more global values to
-a file.
-
-The group specified with this command is ignored. However, note that
-specified values may represent calculations performed by computes and
-fixes which store their own "group" definitions.
-
-Each listed value can be the result of a :doc:`compute <compute>` or
-:doc:`fix <fix>` or the evaluation of an equal-style or vector-style
-:doc:`variable <variable>`. In each case, the compute, fix, or variable
-must produce a global quantity, not a per-atom or local quantity. If
-you wish to spatial- or time-average or histogram per-atom quantities
-from a compute, fix, or variable, then see the :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/atom <fix_ave_atom>`,
-or :doc:`fix ave/histo <fix_ave_histo>` commands. If you wish to sum a
-per-atom quantity into a single global quantity, see the :doc:`compute reduce <compute_reduce>` command.
-
-:doc:`Computes <compute>` that produce global quantities are those which
-do not have the word *atom* in their style name. Only a few
-:doc:`fixes <fix>` produce global quantities. See the doc pages for
-individual fixes for info on which ones produce such values.
-:doc:`Variables <variable>` of style *equal* and *vector* are the only
-ones that can be used with this fix. Variables of style *atom* cannot
-be used, since they produce per-atom values.
-
-The input values must either be all scalars or all vectors depending
-on the setting of the *mode* keyword. In both cases, the averaging is
-performed independently on each input value. I.e. each input scalar
-is averaged independently or each element of each input vector is
-averaged independently.
-
-If *mode* = scalar, then the input values must be scalars, or vectors
-with a bracketed term appended, indicating the Ith value of the vector
-is used.
-
-If *mode* = vector, then the input values must be vectors, or arrays
-with a bracketed term appended, indicating the Ith column of the array
-is used. All vectors must be the same length, which is the length of
-the vector or number of rows in the array.
-
-Note that for values from a compute or fix, the bracketed index I can
-be specified using a wildcard asterisk with the index to effectively
-specify multiple values. This takes the form "*" or "*n" or "n*" or
-"m*n". If N = the size of the vector (for *mode* = scalar) or the
-number of columns in the array (for *mode* = vector), then an asterisk
-with no numeric values means all indices from 1 to N. A leading
-asterisk means all indices from 1 to n (inclusive). A trailing
-asterisk means all indices from n to N (inclusive). A middle asterisk
-means all indices from m to n (inclusive).
-
-Using a wildcard is the same as if the individual elements of the
-vector or columns of the array had been listed one by one. E.g. these
-2 fix ave/time commands are equivalent, since the :doc:`compute rdf <compute_rdf>` command creates, in this case, a global array
-with 3 columns, each of length 50:
-
-.. parsed-literal::
-
- compute myRDF all rdf 50 1 2
- fix 1 all ave/time 100 1 100 c_myRDF[*] file tmp1.rdf mode vector
- fix 2 all ave/time 100 1 100 c_myRDF[1] c_myRDF[2] c_myRDF[3] file tmp2.rdf mode vector
-
-
-----------
-
-
-The *Nevery*\ , *Nrepeat*\ , and *Nfreq* arguments specify on what
-timesteps the input values will be used in order to contribute to the
-average. The final averaged quantities are generated on timesteps
-that are a mlutiple of *Nfreq*\ . The average is over *Nrepeat*
-quantities, computed in the preceding portion of the simulation every
-*Nevery* timesteps. *Nfreq* must be a multiple of *Nevery* and
-*Nevery* must be non-zero even if *Nrepeat* is 1. Also, the timesteps
-contributing to the average value cannot overlap,
-i.e. Nrepeat*Nevery can not exceed Nfreq.
-
-For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then values on
-timesteps 90,92,94,96,98,100 will be used to compute the final average
-on timestep 100. Similarly for timesteps 190,192,194,196,198,200 on
-timestep 200, etc. If Nrepeat=1 and Nfreq = 100, then no time
-averaging is done; values are simply generated on timesteps
-100,200,etc.
-
-
-----------
-
-
-If a value begins with "c_", a compute ID must follow which has been
-previously defined in the input script. If *mode* = scalar, then if
-no bracketed term is appended, the global scalar calculated by the
-compute is used. If a bracketed term is appended, the Ith element of
-the global vector calculated by the compute is used. If *mode* =
-vector, then if no bracketed term is appended, the global vector
-calculated by the compute is used. If a bracketed term is appended,
-the Ith column of the global array calculated by the compute is used.
-See the discussion above for how I can be specified with a wildcard
-asterisk to effectively specify multiple values.
-
-Note that there is a :doc:`compute reduce <compute_reduce>` command
-which can sum per-atom quantities into a global scalar or vector which
-can thus be accessed by fix ave/time. Or it can be a compute defined
-not in your input script, but by :doc:`thermodynamic output <thermo_style>` or other fixes such as :doc:`fix nvt <fix_nh>` or :doc:`fix temp/rescale <fix_temp_rescale>`. See
-the doc pages for these commands which give the IDs of these computes.
-Users can also write code for their own compute styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If a value begins with "f_", a fix ID must follow which has been
-previously defined in the input script. If *mode* = scalar, then if
-no bracketed term is appended, the global scalar calculated by the fix
-is used. If a bracketed term is appended, the Ith element of the
-global vector calculated by the fix is used. If *mode* = vector, then
-if no bracketed term is appended, the global vector calculated by the
-fix is used. If a bracketed term is appended, the Ith column of the
-global array calculated by the fix is used. See the discussion above
-for how I can be specified with a wildcard asterisk to effectively
-specify multiple values.
-
-Note that some fixes only produce their values on certain timesteps,
-which must be compatible with *Nevery*\ , else an error will result.
-Users can also write code for their own fix styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If a value begins with "v_", a variable name must follow which has
-been previously defined in the input script. If *mode* = scalar, then
-only equal-style or vector-style variables can be used, which both
-produce global values. In this mode, a vector-style variable requires
-a bracketed term to specify the Ith element of the vector calculated
-by the variable. If *mode* = vector, then only a vector-style
-variable can be used, without a bracketed term. See the
-:doc:`variable <variable>` command for details.
-
-Note that variables of style *equal* and *vector* define a formula
-which can reference individual atom properties or thermodynamic
-keywords, or they can invoke other computes, fixes, or variables when
-they are evaluated, so this is a very general means of specifying
-quantities to time average.
-
-
-----------
-
-
-Additional optional keywords also affect the operation of this fix.
-
-If the *mode* keyword is set to *scalar*\ , then all input values must
-be global scalars, or elements of global vectors. If the *mode*
-keyword is set to *vector*\ , then all input values must be global
-vectors, or columns of global arrays. They can also be global arrays,
-which are converted into a series of global vectors (one per column),
-as explained above.
-
-The *ave* keyword determines how the values produced every *Nfreq*
-steps are averaged with values produced on previous steps that were
-multiples of *Nfreq*\ , before they are accessed by another output
-command or written to a file.
-
-If the *ave* setting is *one*\ , then the values produced on timesteps
-that are multiples of *Nfreq* are independent of each other; they are
-output as-is without further averaging.
-
-If the *ave* setting is *running*\ , then the values produced on
-timesteps that are multiples of *Nfreq* are summed and averaged in a
-cummulative sense before being output. Each output value is thus the
-average of the value produced on that timestep with all preceding
-values. This running average begins when the fix is defined; it can
-only be restarted by deleting the fix via the :doc:`unfix <unfix>`
-command, or by re-defining the fix by re-specifying it.
-
-If the *ave* setting is *window*\ , then the values produced on
-timesteps that are multiples of *Nfreq* are summed and averaged within
-a moving "window" of time, so that the last M values are used to
-produce the output. E.g. if M = 3 and Nfreq = 1000, then the output
-on step 10000 will be the average of the individual values on steps
-8000,9000,10000. Outputs on early steps will average over less than M
-values if they are not available.
-
-The *start* keyword specifies what timestep averaging will begin on.
-The default is step 0. Often input values can be 0.0 at time 0, so
-setting *start* to a larger value can avoid including a 0.0 in a
-running or windowed average.
-
-The *off* keyword can be used to flag any of the input values. If a
-value is flagged, it will not be time averaged. Instead the most
-recent input value will always be stored and output. This is useful
-if one of more of the inputs produced by a compute or fix or variable
-are effectively constant or are simply current values. E.g. they are
-being written to a file with other time-averaged values for purposes
-of creating well-formatted output.
-
-The *file* keyword allows a filename to be specified. Every *Nfreq*
-steps, one quantity or vector of quantities is written to the file for
-each input value specified in the fix ave/time command. For *mode* =
-scalar, this means a single line is written each time output is
-performed. Thus the file ends up to be a series of lines, i.e. one
-column of numbers for each input value. For *mode* = vector, an array
-of numbers is written each time output is performed. The number of
-rows is the length of the input vectors, and the number of columns is
-the number of values. Thus the file ends up to be a series of these
-array sections.
-
-The *overwrite* keyword will continuously overwrite the output file
-with the latest output, so that it only contains one timestep worth of
-output. This option can only be used with the *ave running* setting.
-
-The *format* keyword sets the numeric format of each value when it is
-printed to a file via the *file* keyword. Note that all values are
-floating point quantities. The default format is %g. You can specify
-a higher precision if desired, e.g. %20.16g.
-
-The *title1* and *title2* and *title3* keywords allow specification of
-the strings that will be printed as the first 2 or 3 lines of the
-output file, assuming the *file* keyword was used. LAMMPS uses
-default values for each of these, so they do not need to be specified.
-
-By default, these header lines are as follows for *mode* = scalar:
-
-.. parsed-literal::
-
- # Time-averaged data for fix ID
- # TimeStep value1 value2 ...
-
-In the first line, ID is replaced with the fix-ID. In the second line
-the values are replaced with the appropriate fields from the fix
-ave/time command. There is no third line in the header of the file,
-so the *title3* setting is ignored when *mode* = scalar.
-
-By default, these header lines are as follows for *mode* = vector:
-
-.. parsed-literal::
-
- # Time-averaged data for fix ID
- # TimeStep Number-of-rows
- # Row value1 value2 ...
-
-In the first line, ID is replaced with the fix-ID. The second line
-describes the two values that are printed at the first of each section
-of output. In the third line the values are replaced with the
-appropriate fields from the fix ave/time command.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix produces a global scalar or global vector or global array
-which can be accessed by various :ref:`output commands <howto_15>`. The values can only be
-accessed on timesteps that are multiples of *Nfreq* since that is when
-averaging is performed.
-
-A scalar is produced if only a single input value is averaged and
-*mode* = scalar. A vector is produced if multiple input values are
-averaged for *mode* = scalar, or a single input value for *mode* =
-vector. In the first case, the length of the vector is the number of
-inputs. In the second case, the length of the vector is the same as
-the length of the input vector. An array is produced if multiple
-input values are averaged and *mode* = vector. The global array has #
-of rows = length of the input vectors and # of columns = number of
-inputs.
-
-If the fix prouduces a scalar or vector, then the scalar and each
-element of the vector can be either "intensive" or "extensive",
-depending on whether the values contributing to the scalar or vector
-element are "intensive" or "extensive". If the fix produces an array,
-then all elements in the array must be the same, either "intensive" or
-"extensive". If a compute or fix provides the value being time
-averaged, then the compute or fix determines whether the value is
-intensive or extensive; see the doc page for that compute or fix for
-further info. Values produced by a variable are treated as intensive.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute <compute>`, :doc:`fix ave/atom <fix_ave_atom>`, :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix ave/histo <fix_ave_histo>`,
-:doc:`variable <variable>`, :doc:`fix ave/correlate <fix_ave_correlate>`,
-
-Default
-"""""""
-
-The option defaults are mode = scalar, ave = one, start = 0, no file
-output, format = %g, title 1,2,3 = strings as described above, and no
-off settings for any input values.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_aveforce.txt b/doc/html/_sources/fix_aveforce.txt
deleted file mode 100644
index 1252c10c5..000000000
--- a/doc/html/_sources/fix_aveforce.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-.. index:: fix aveforce
-
-fix aveforce command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID aveforce fx fy fz keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* aveforce = style name of this fix command
-* fx,fy,fz = force component values (force units)
-.. parsed-literal::
-
- any of fx,fy,fz can be a variable (see below)
-
-* zero or more keyword/value pairs may be appended to args
-* keyword = *region*
-.. parsed-literal::
-
- *region* value = region-ID
- region-ID = ID of region atoms must be in to have added force
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix pressdown topwall aveforce 0.0 -1.0 0.0
- fix 2 bottomwall aveforce NULL -1.0 0.0 region top
- fix 2 bottomwall aveforce NULL -1.0 v_oscillate region top
-
-Description
-"""""""""""
-
-Apply an additional external force to a group of atoms in such a way
-that every atom experiences the same force. This is useful for
-pushing on wall or boundary atoms so that the structure of the wall
-does not change over time.
-
-The existing force is averaged for the group of atoms, component by
-component. The actual force on each atom is then set to the average
-value plus the component specified in this command. This means each
-atom in the group receives the same force.
-
-Any of the fx,fy,fz values can be specified as NULL which means the
-force in that dimension is not changed. Note that this is not the
-same as specifying a 0.0 value, since that sets all forces to the same
-average value without adding in any additional force.
-
-Any of the 3 quantities defining the force components can be specified
-as an equal-style :doc:`variable <variable>`, namely *fx*\ , *fy*\ , *fz*\ .
-If the value is a variable, it should be specified as v_name, where
-name is the variable name. In this case, the variable will be
-evaluated each timestep, and its value used to determine the average
-force.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent average force.
-
-If the *region* keyword is used, the atom must also be in the
-specified geometric :doc:`region <region>` in order to have force added
-to it.
-
-
-----------
-
-
-Styles with a 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
-:doc:`Section_accelerate <Section_accelerate>` 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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-This fix computes a global 3-vector of forces, which can be accessed
-by various :ref:`output commands <howto_15>`. This is the
-total force on the group of atoms before the forces on individual
-atoms are changed by the fix. The vector values calculated by this
-fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command. You should not
-specify force components with a variable that has time-dependence for
-use with a minimizer, since the minimizer increments the timestep as
-the iteration count during the minimization.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix setforce <fix_setforce>`, :doc:`fix addforce <fix_addforce>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_balance.txt b/doc/html/_sources/fix_balance.txt
deleted file mode 100644
index 9490cf385..000000000
--- a/doc/html/_sources/fix_balance.txt
+++ /dev/null
@@ -1,384 +0,0 @@
-.. index:: fix balance
-
-fix balance command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID balance Nfreq thresh style args keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* balance = style name of this fix command
-* Nfreq = perform dynamic load balancing every this many steps
-* thresh = imbalance threshhold that must be exceeded to perform a re-balance
-* style = *shift* or *rcb*
-.. parsed-literal::
-
- shift args = dimstr Niter stopthresh
- dimstr = sequence of letters containing "x" or "y" or "z", each not more than once
- Niter = # of times to iterate within each dimension of dimstr sequence
- stopthresh = stop balancing when this imbalance threshhold is reached
- rcb args = none
-
-* zero or more keyword/value pairs may be appended
-* keyword = *out*
-.. parsed-literal::
-
- *out* value = filename
- filename = write each processor's sub-domain to a file, at each re-balancing
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 2 all balance 1000 1.05 shift x 10 1.05
- fix 2 all balance 100 0.9 shift xy 20 1.1 out tmp.balance
- fix 2 all balance 1000 1.1 rcb
-
-Description
-"""""""""""
-
-This command adjusts the size and shape of processor sub-domains
-within the simulation box, to attempt to balance the number of
-particles and thus the computational cost (load) evenly across
-processors. The load balancing is "dynamic" in the sense that
-rebalancing is performed periodically during the simulation. To
-perform "static" balancing, before or between runs, see the
-:doc:`balance <balance>` command.
-
-Load-balancing is typically only useful if the particles in the
-simulation box have a spatially-varying density distribution. E.g. a
-model of a vapor/liquid interface, or a solid with an irregular-shaped
-geometry containing void regions. In this case, the LAMMPS default of
-dividing the simulation box volume into a regular-spaced grid of 3d
-bricks, with one equal-volume sub-domain per processor, may assign
-very different numbers of particles per processor. This can lead to
-poor performance when the simulation is run in parallel.
-
-Note that the :doc:`processors <processors>` command allows some control
-over how the box volume is split across processors. Specifically, for
-a Px by Py by Pz grid of processors, it allows choice of Px, Py, and
-Pz, subject to the constraint that Px * Py * Pz = P, the total number
-of processors. This is sufficient to achieve good load-balance for
-some problems on some processor counts. However, all the processor
-sub-domains will still have the same shape and same volume.
-
-On a particular timestep, a load-balancing operation is only performed
-if the current "imbalance factor" in particles owned by each processor
-exceeds the specified *thresh* parameter. The imbalance factor is
-defined as the maximum number of particles owned by any processor,
-divided by the average number of particles per processor. Thus an
-imbalance factor of 1.0 is perfect balance.
-
-As an example, for 10000 particles running on 10 processors, if the
-most heavily loaded processor has 1200 particles, then the factor is
-1.2, meaning there is a 20% imbalance. Note that re-balances can be
-forced even if the current balance is perfect (1.0) be specifying a
-*thresh* < 1.0.
-
-.. note::
-
- This command attempts to minimize the imbalance factor, as
- defined above. But depending on the method a perfect balance (1.0)
- may not be achieved. For example, "grid" methods (defined below) that
- create a logical 3d grid cannot achieve perfect balance for many
- irregular distributions of particles. Likewise, if a portion of the
- system is a perfect lattice, e.g. the initial system is generated by
- the :doc:`create_atoms <create_atoms>` command, then "grid" methods may
- be unable to achieve exact balance. This is because entire lattice
- planes will be owned or not owned by a single processor.
-
-.. note::
-
- The imbalance factor is also an estimate of the maximum speed-up
- you can hope to achieve by running a perfectly balanced simulation
- versus an imbalanced one. In the example above, the 10000 particle
- simulation could run up to 20% faster if it were perfectly balanced,
- versus when imbalanced. However, computational cost is not strictly
- proportional to particle count, and changing the relative size and
- shape of processor sub-domains may lead to additional computational
- and communication overheads, e.g. in the PPPM solver used via the
- :doc:`kspace_style <kspace_style>` command. Thus you should benchmark
- the run times of a simulation before and after balancing.
-
-
-----------
-
-
-The method used to perform a load balance is specified by one of the
-listed styles, which are described in detail below. There are 2 kinds
-of styles.
-
-The *shift* style is a "grid" method which produces a logical 3d grid
-of processors. It operates by changing the cutting planes (or lines)
-between processors in 3d (or 2d), to adjust the volume (area in 2d)
-assigned to each processor, as in the following 2d diagram where
-processor sub-domains are shown and atoms are colored by the processor
-that owns them. The leftmost diagram is the default partitioning of
-the simulation box across processors (one sub-box for each of 16
-processors); the middle diagram is after a "grid" method has been
-applied.
-
-.. thumbnail:: JPG/balance_uniform.jpg
- :align: center
-.. thumbnail:: JPG/balance_nonuniform.jpg
- :align: center
-.. thumbnail:: JPG/balance_rcb.jpg
- :align: center
-The *rcb* style is a "tiling" method which does not produce a logical
-3d grid of processors. Rather it tiles the simulation domain with
-rectangular sub-boxes of varying size and shape in an irregular
-fashion so as to have equal numbers of particles in each sub-box, as
-in the rightmost diagram above.
-
-The "grid" methods can be used with either of the
-:doc:`comm_style <comm_style>` command options, *brick* or *tiled*\ . The
-"tiling" methods can only be used with :doc:`comm_style tiled <comm_style>`.
-
-When a "grid" method is specified, the current domain partitioning can
-be either a logical 3d grid or a tiled partitioning. In the former
-case, the current logical 3d grid is used as a starting point and
-changes are made to improve the imbalance factor. In the latter case,
-the tiled partitioning is discarded and a logical 3d grid is created
-with uniform spacing in all dimensions. This is the starting point
-for the balancing operation.
-
-When a "tiling" method is specified, the current domain partitioning
-("grid" or "tiled") is ignored, and a new partitioning is computed
-from scratch.
-
-
-----------
-
-
-The *group-ID* is currently ignored. In the future it may be used to
-determine what particles are considered for balancing. Normally it
-would only makes sense to use the *all* group. But in some cases it
-may be useful to balance on a subset of the particles, e.g. when
-modeling large nanoparticles in a background of small solvent
-particles.
-
-The *Nfreq* setting determines how often a rebalance is performed. If
-*Nfreq* > 0, then rebalancing will occur every *Nfreq* steps. Each
-time a rebalance occurs, a reneighboring is triggered, so *Nfreq*
-should not be too small. If *Nfreq* = 0, then rebalancing will be
-done every time reneighboring normally occurs, as determined by the
-the :doc:`neighbor <neighbor>` and :doc:`neigh_modify <neigh_modify>`
-command settings.
-
-On rebalance steps, rebalancing will only be attempted if the current
-imbalance factor, as defined above, exceeds the *thresh* setting.
-
-
-----------
-
-
-The *shift* style invokes a "grid" method for balancing, as described
-above. It changes the positions of cutting planes between processors
-in an iterative fashion, seeking to reduce the imbalance factor.
-
-The *dimstr* argument is a string of characters, each of which must be
-an "x" or "y" or "z". Eacn character can appear zero or one time,
-since there is no advantage to balancing on a dimension more than
-once. You should normally only list dimensions where you expect there
-to be a density variation in the particles.
-
-Balancing proceeds by adjusting the cutting planes in each of the
-dimensions listed in *dimstr*\ , one dimension at a time. For a single
-dimension, the balancing operation (described below) is iterated on up
-to *Niter* times. After each dimension finishes, the imbalance factor
-is re-computed, and the balancing operation halts if the *stopthresh*
-criterion is met.
-
-A rebalance operation in a single dimension is performed using a
-density-dependent recursive multisectioning algorithm, where the
-position of each cutting plane (line in 2d) in the dimension is
-adjusted independently. This is similar to a recursive bisectioning
-for a single value, except that the bounds used for each bisectioning
-take advantage of information from neighboring cuts if possible, as
-well as counts of particles at the bounds on either side of each cuts,
-which themselves were cuts in previous iterations. The latter is used
-to infer a density of pariticles near each of the current cuts. At
-each iteration, the count of particles on either side of each plane is
-tallied. If the counts do not match the target value for the plane,
-the position of the cut is adjusted based on the local density. The
-low and high bounds are adjusted on each iteration, using new count
-information, so that they become closer together over time. Thus as
-the recursion progresses, the count of particles on either side of the
-plane gets closer to the target value.
-
-The density-dependent part of this algorithm is often an advantage
-when you rebalance a system that is already nearly balanced. It
-typically converges more quickly than the geometric bisectioning
-algorithm used by the :doc:`balance <balance>` command. However, if can
-be a disadvantage if you attempt to rebalance a system that is far
-from balanced, and converge more slowly. In this case you probably
-want to use the :doc:`balance <balance>` command before starting a run,
-so that you begin the run with a balanced system.
-
-Once the rebalancing is complete and final processor sub-domains
-assigned, particles migrate to their new owning processor as part of
-the normal reneighboring procedure.
-
-.. note::
-
- At each rebalance operation, the bisectioning for each cutting
- plane (line in 2d) typcially starts with low and high bounds separated
- by the extent of a processor's sub-domain in one dimension. The size
- of this bracketing region shrinks based on the local density, as
- described above, which should typically be 1/2 or more every
- iteration. Thus if *Niter* is specified as 10, the cutting plane will
- typically be positioned to better than 1 part in 1000 accuracy
- (relative to the perfect target position). For *Niter* = 20, it will
- be accurate to better than 1 part in a million. Thus there is no need
- to set *Niter* to a large value. This is especially true if you are
- rebalancing often enough that each time you expect only an incremental
- adjustement in the cutting planes is necessary. LAMMPS will check if
- the threshold accuracy is reached (in a dimension) is less iterations
- than *Niter* and exit early.
-
-
-----------
-
-
-The *rcb* style invokes a "tiled" method for balancing, as described
-above. It performs a recursive coordinate bisectioning (RCB) of the
-simulation domain. The basic idea is as follows.
-
-The simulation domain is cut into 2 boxes by an axis-aligned cut in
-the longest dimension, leaving one new box on either side of the cut.
-All the processors are also partitioned into 2 groups, half assigned
-to the box on the lower side of the cut, and half to the box on the
-upper side. (If the processor count is odd, one side gets an extra
-processor.) The cut is positioned so that the number of atoms in the
-lower box is exactly the number that the processors assigned to that
-box should own for load balance to be perfect. This also makes load
-balance for the upper box perfect. The positioning is done
-iteratively, by a bisectioning method. Note that counting atoms on
-either side of the cut requires communication between all processors
-at each iteration.
-
-That is the procedure for the first cut. Subsequent cuts are made
-recursively, in exactly the same manner. The subset of processors
-assigned to each box make a new cut in the longest dimension of that
-box, splitting the box, the subset of processsors, and the atoms in
-the box in two. The recursion continues until every processor is
-assigned a sub-box of the entire simulation domain, and owns the atoms
-in that sub-box.
-
-
-----------
-
-
-The *out* keyword writes a text file to the specified *filename* with
-the results of each rebalancing operation. The file contains the
-bounds of the sub-domain for each processor after the balancing
-operation completes. The format of the file is compatible with the
-`Pizza.py <pizza>`_ *mdump* tool which has support for manipulating and
-visualizing mesh files. An example is shown here for a balancing by 4
-processors for a 2d problem:
-
-.. parsed-literal::
-
- ITEM: TIMESTEP
- 0
- ITEM: NUMBER OF NODES
- 16
- ITEM: BOX BOUNDS
- 0 10
- 0 10
- 0 10
- ITEM: NODES
- 1 1 0 0 0
- 2 1 5 0 0
- 3 1 5 5 0
- 4 1 0 5 0
- 5 1 5 0 0
- 6 1 10 0 0
- 7 1 10 5 0
- 8 1 5 5 0
- 9 1 0 5 0
- 10 1 5 5 0
- 11 1 5 10 0
- 12 1 10 5 0
- 13 1 5 5 0
- 14 1 10 5 0
- 15 1 10 10 0
- 16 1 5 10 0
- ITEM: TIMESTEP
- 0
- ITEM: NUMBER OF SQUARES
- 4
- ITEM: SQUARES
- 1 1 1 2 3 4
- 2 1 5 6 7 8
- 3 1 9 10 11 12
- 4 1 13 14 15 16
-
-The coordinates of all the vertices are listed in the NODES section, 5
-per processor. Note that the 4 sub-domains share vertices, so there
-will be duplicate nodes in the list.
-
-The "SQUARES" section lists the node IDs of the 4 vertices in a
-rectangle for each processor (1 to 4).
-
-For a 3d problem, the syntax is similar with 8 vertices listed for
-each processor, instead of 4, and "SQUARES" replaced by "CUBES".
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global scalar which is the imbalance factor
-after the most recent rebalance and a global vector of length 3 with
-additional information about the most recent rebalancing. The 3
-values in the vector are as follows:
-
-* 1 = max # of particles per processor
-* 2 = total # iterations performed in last rebalance
-* 3 = imbalance factor right before the last rebalance was performed
-
-As explained above, the imbalance factor is the ratio of the maximum
-number of particles on any processor to the average number of
-particles per processor.
-
-These quantities can be accessed by various :ref:`output commands <howto_15>`. The scalar and vector values
-calculated by this fix are "intensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-For 2d simulations, a "z" cannot appear in *dimstr* for the *shift*
-style.
-
-Related commands
-""""""""""""""""
-
-:doc:`processors <processors>`, :doc:`balance <balance>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_bond_break.txt b/doc/html/_sources/fix_bond_break.txt
deleted file mode 100644
index 59db28a21..000000000
--- a/doc/html/_sources/fix_bond_break.txt
+++ /dev/null
@@ -1,160 +0,0 @@
-.. index:: fix bond/break
-
-fix bond/break command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID bond/break Nevery bondtype Rmax keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* bond/break = style name of this fix command
-* Nevery = attempt bond breaking every this many steps
-* bondtype = type of bonds to break
-* Rmax = bond longer than Rmax can break (distance units)
-* zero or more keyword/value pairs may be appended to args
-* keyword = *prob*
-.. parsed-literal::
-
- *prob* values = fraction seed
- fraction = break a bond with this probability if otherwise eligible
- seed = random number seed (positive integer)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 5 all bond/break 10 2 1.2
- fix 5 polymer bond/break 1 1 2.0 prob 0.5 49829
-
-Description
-"""""""""""
-
-Break bonds between pairs of atoms as a simulation runs according to
-specified criteria. This can be used to model the dissolution of a
-polymer network due to stretching of the simulation box or other
-deformations. In this context, a bond means an interaction between a
-pair of atoms computed by the :doc:`bond_style <bond_style>` command.
-Once the bond is broken it will be permanently deleted, as will all
-angle, dihedral, and improper interactions that bond is part of.
-
-This is different than a :doc:`pairwise <pair_style>` bond-order
-potential such as Tersoff or AIREBO which infers bonds and many-body
-interactions based on the current geometry of a small cluster of atoms
-and effectively creates and destroys bonds and higher-order many-body
-interactions from timestep to timestep as atoms move.
-
-A check for possible bond breakage is performed every *Nevery*
-timesteps. If two bonded atoms I,J are further than a distance *Rmax*
-of each other, if the bond is of type *bondtype*\ , and if both I and J
-are in the specified fix group, then I,J is labeled as a "possible"
-bond to break.
-
-If several bonds involving an atom are stretched, it may have multiple
-possible bonds to break. Every atom checks its list of possible bonds
-to break and labels the longest such bond as its "sole" bond to break.
-After this is done, if atom I is bonded to atom J in its sole bond,
-and atom J is bonded to atom I in its sole bond, then the I,J bond is
-"eligible" to be broken.
-
-Note that these rules mean an atom will only be part of at most one
-broken bond on a given timestep. It also means that if atom I chooses
-atom J as its sole partner, but atom J chooses atom K is its sole
-partner (due to Rjk > Rij), then this means atom I will not be part of
-a broken bond on this timestep, even if it has other possible bond
-partners.
-
-The *prob* keyword can effect whether an eligible bond is actually
-broken. The *fraction* setting must be a value between 0.0 and 1.0.
-A uniform random number between 0.0 and 1.0 is generated and the
-eligible bond is only broken if the random number < fraction.
-
-When a bond is broken, data structures within LAMMPS that store bond
-topology are updated to reflect the breakage. Likewise, if the bond
-is part of a 3-body (angle) or 4-body (dihedral, improper)
-interaction, that interaction is removed as well. These changes
-typically affect pairwise interactions between atoms that used to be
-part of bonds, angles, etc.
-
-.. note::
-
- One data structure that is not updated when a bond breaks are
- the molecule IDs stored by each atom. Even though one molecule
- becomes two moleclues due to the broken bond, all atoms in both new
- moleclues retain their original molecule IDs.
-
-Computationally, each timestep this fix operates, it loops over all
-the bonds in the system and computes distances between pairs of bonded
-atoms. It also communicates between neighboring processors to
-coordinate which bonds are broken. Moreover, if any bonds are broken,
-neighbor lists must be immediately updated on the same timestep. This
-is to insure that any pairwise interactions that should be turned "on"
-due to a bond breaking, because they are no longer excluded by the
-presence of the bond and the settings of the
-:doc:`special_bonds <special_bonds>` command, will be immediately
-recognized. All of these operations increase the cost of a timestep.
-Thus you should be cautious about invoking this fix too frequently.
-
-You can dump out snapshots of the current bond topology via the :doc:`dump local <dump>` command.
-
-.. note::
-
- Breaking a bond typically alters the energy of a system. You
- should be careful not to choose bond breaking criteria that induce a
- dramatic change in energy. For example, if you define a very stiff
- harmonic bond and break it when 2 atoms are separated by a distance
- far from the equilibribum bond length, then the 2 atoms will be
- dramatically released when the bond is broken. More generally, you
- may need to thermostat your system to compensate for energy changes
- resulting from broken bonds (and angles, dihedrals, impropers).
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes two statistics which it stores in a global vector of
-length 2, which can be accessed by various :ref:`output commands <howto_15>`. The vector values calculated
-by this fix are "intensive".
-
-These are the 2 quantities:
-
-* (1) # of bonds broken on the most recent breakage timestep
-* (2) cummulative # of bonds broken
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MC package. It is only enabled if LAMMPS was
-built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix bond/create <fix_bond_create>`, :doc:`fix bond/swap <fix_bond_swap>`, :doc:`dump local <dump>`,
-:doc:`special_bonds <special_bonds>`
-
-Default
-"""""""
-
-The option defaults are prob = 1.0.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_bond_create.txt b/doc/html/_sources/fix_bond_create.txt
deleted file mode 100644
index 6038ae7f4..000000000
--- a/doc/html/_sources/fix_bond_create.txt
+++ /dev/null
@@ -1,263 +0,0 @@
-.. index:: fix bond/create
-
-fix bond/create command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID bond/create Nevery itype jtype Rmin bondtype keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* bond/create = style name of this fix command
-* Nevery = attempt bond creation every this many steps
-* itype,jtype = atoms of itype can bond to atoms of jtype
-* Rmin = 2 atoms separated by less than Rmin can bond (distance units)
-* bondtype = type of created bonds
-* zero or more keyword/value pairs may be appended to args
-* keyword = *iparam* or *jparam* or *prob* or *atype* or *dtype* or *itype*
-.. parsed-literal::
-
- *iparam* values = maxbond, newtype
- maxbond = max # of bonds of bondtype the itype atom can have
- newtype = change the itype atom to this type when maxbonds exist
- *jparam* values = maxbond, newtype
- maxbond = max # of bonds of bondtype the jtype atom can have
- newtype = change the jtype atom to this type when maxbonds exist
- *prob* values = fraction seed
- fraction = create a bond with this probability if otherwise eligible
- seed = random number seed (positive integer)
- *atype* value = angletype
- angletype = type of created angles
- *dtype* value = dihedraltype
- dihedraltype = type of created dihedrals
- *itype* value = impropertype
- impropertype = type of created impropers
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 5 all bond/create 10 1 2 0.8 1
- fix 5 all bond/create 1 3 3 0.8 1 prob 0.5 85784 iparam 2 3
- fix 5 all bond/create 1 3 3 0.8 1 prob 0.5 85784 iparam 2 3 atype 1 dtype 2
-
-Description
-"""""""""""
-
-Create bonds between pairs of atoms as a simulation runs according to
-specified criteria. This can be used to model cross-linking of
-polymers, the formation of a percolation network, etc. In this
-context, a bond means an interaction between a pair of atoms computed
-by the :doc:`bond_style <bond_style>` command. Once the bond is created
-it will be permanently in place. Optionally, the creation of a bond
-can also create angle, dihedral, and improper interactions that bond
-is part of. See the discussion of the *atype*\ , *dtype*\ , and *itype*
-keywords below.
-
-This is different than a :doc:`pairwise <pair_style>` bond-order
-potential such as Tersoff or AIREBO which infers bonds and many-body
-interactions based on the current geometry of a small cluster of atoms
-and effectively creates and destroys bonds and higher-order many-body
-interactions from timestep to timestep as atoms move.
-
-A check for possible new bonds is performed every *Nevery* timesteps.
-If two atoms I,J are within a distance *Rmin* of each other, if I is
-of atom type *itype*\ , if J is of atom type *jtype*\ , if both I and J
-are in the specified fix group, if a bond does not already exist
-between I and J, and if both I and J meet their respective *maxbond*
-requirement (explained below), then I,J is labeled as a "possible"
-bond pair.
-
-If several atoms are close to an atom, it may have multiple possible
-bond partners. Every atom checks its list of possible bond partners
-and labels the closest such partner as its "sole" bond partner. After
-this is done, if atom I has atom J as its sole partner, and atom J has
-atom I as its sole partner, then the I,J bond is "eligible" to be
-formed.
-
-Note that these rules mean an atom will only be part of at most one
-created bond on a given timestep. It also means that if atom I
-chooses atom J as its sole partner, but atom J chooses atom K is its
-sole partner (due to Rjk < Rij), then this means atom I will not form
-a bond on this timestep, even if it has other possible bond partners.
-
-It is permissible to have *itype* = *jtype*\ . *Rmin* must be <= the
-pairwise cutoff distance between *itype* and *jtype* atoms, as defined
-by the :doc:`pair_style <pair_style>` command.
-
-The *iparam* and *jparam* keywords can be used to limit the bonding
-functionality of the participating atoms. Each atom keeps track of
-how many bonds of *bondtype* it already has. If atom I of
-itype already has *maxbond* bonds (as set by the *iparam*
-keyword), then it will not form any more. Likewise for atom J. If
-*maxbond* is set to 0, then there is no limit on the number of bonds
-that can be formed with that atom.
-
-The *newtype* value for *iparam* and *jparam* can be used to change
-the atom type of atom I or J when it reaches *maxbond* number of bonds
-of type *bondtype*\ . This means it can now interact in a pairwise
-fashion with other atoms in a different way by specifying different
-:doc:`pair_coeff <pair_coeff>` coefficients. If you do not wish the
-atom type to change, simply specify *newtype* as *itype* or *jtype*\ .
-
-The *prob* keyword can also effect whether an eligible bond is
-actually created. The *fraction* setting must be a value between 0.0
-and 1.0. A uniform random number between 0.0 and 1.0 is generated and
-the eligible bond is only created if the random number < fraction.
-
-Any bond that is created is assigned a bond type of *bondtype*
-
-When a bond is created, data structures within LAMMPS that store bond
-topology are updated to reflect the creation. If the bond is part of
-new 3-body (angle) or 4-body (dihedral, improper) interactions, you
-can choose to create new angles, dihedrals, impropers as well, using
-the *atype*\ , *dtype*\ , and *itype* keywords. All of these changes
-typically affect pairwise interactions between atoms that are now part
-of new bonds, angles, etc.
-
-.. note::
-
- One data structure that is not updated when a bond breaks are
- the molecule IDs stored by each atom. Even though two molecules
- become one moleclue due to the created bond, all atoms in the new
- moleclue retain their original molecule IDs.
-
-If the *atype* keyword is used and if an angle potential is defined
-via the :doc:`angle_style <angle>` command, then any new 3-body
-interactions inferred by the creation of a bond will create new angles
-of type *angletype*\ , with parameters assigned by the corresponding
-:doc:`angle_coeff <angle_coeff>` command. Likewise, the *dtype* and
-*itype* keywords will create new dihedrals and impropers of type
-*dihedraltype* and *impropertype*\ .
-
-.. note::
-
- To create a new bond, the internal LAMMPS data structures that
- store this information must have space for it. When LAMMPS is
- initialized from a data file, the list of bonds is scanned and the
- maximum number of bonds per atom is tallied. If some atom will
- acquire more bonds than this limit as this fix operates, then the
- "extra bond per atom" parameter must be set to allow for it. Ditto
- for "extra angle per atom", "extra dihedral per atom", and "extra
- improper per atom" if angles, dihedrals, or impropers are being added
- when bonds are created. See the :doc:`read_data <read_data>` or
- :doc:`create_box <create_box>` command for more details. Note that a
- data file with no atoms can be used if you wish to add unbonded atoms
- via the :doc:`create atoms <create_atoms>` command, e.g. for a
- percolation simulation.
-
-.. note::
-
- LAMMPS stores and maintains a data structure with a list of the
- 1st, 2nd, and 3rd neighbors of each atom (within the bond topology of
- the system) for use in weighting pairwise interactions for bonded
- atoms. Note that adding a single bond always adds a new 1st neighbor
- but may also induce *many* new 2nd and 3rd neighbors, depending on the
- molecular topology of your system. The "extra special per atom"
- parameter must typically be set to allow for the new maximum total
- size (1st + 2nd + 3rd neighbors) of this per-atom list. There are 3
- ways to do this. See the :doc:`read_data <read_data>` or
- :doc:`create_box <create_box>` or "special_bonds extra" commands for
- details.
-
-.. note::
-
- Even if you do not use the *atype*\ , *dtype*\ , or *itype*
- keywords, the list of topological neighbors is updated for atoms
- affected by the new bond. This in turn affects which neighbors are
- considered for pairwise interactions, using the weighting rules set by
- the :doc:`special_bonds <special_bonds>` command. Consider a new bond
- created between atoms I,J. If J has a bonded neighbor K, then K
- becomes a 2nd neighbor of I. Even if the *atype* keyword is not used
- to create angle I-J-K, the pairwise interaction between I and K will
- be potentially turned off or weighted by the 1-3 weighting specified
- by the :doc:`special_bonds <special_bonds>` command. This is the case
- even if the "angle yes" option was used with that command. The same
- is true for 3rd neighbors (1-4 interactions), the *dtype* keyword, and
- the "dihedral yes" option used with the
- :doc:`special_bonds <special_bonds>` command.
-
-Note that even if your simulation starts with no bonds, you must
-define a :doc:`bond_style <bond_style>` and use the
-:doc:`bond_coeff <bond_coeff>` command to specify coefficients for the
-*bondtype*\ . Similarly, if new atom types are specified by the
-*iparam* or *jparam* keywords, they must be within the range of atom
-types allowed by the simulation and pairwise coefficients must be
-specified for the new types.
-
-Computationally, each timestep this fix operates, it loops over
-neighbor lists and computes distances between pairs of atoms in the
-list. It also communicates between neighboring processors to
-coordinate which bonds are created. Moreover, if any bonds are
-created, neighbor lists must be immediately updated on the same
-timestep. This is to insure that any pairwise interactions that
-should be turned "off" due to a bond creation, because they are now
-excluded by the presence of the bond and the settings of the
-:doc:`special_bonds <special_bonds>` command, will be immediately
-recognized. All of these operations increase the cost of a timestep.
-Thus you should be cautious about invoking this fix too frequently.
-
-You can dump out snapshots of the current bond topology via the :doc:`dump local <dump>` command.
-
-.. note::
-
- Creating a bond typically alters the energy of a system. You
- should be careful not to choose bond creation criteria that induce a
- dramatic change in energy. For example, if you define a very stiff
- harmonic bond and create it when 2 atoms are separated by a distance
- far from the equilibribum bond length, then the 2 atoms will oscillate
- dramatically when the bond is formed. More generally, you may need to
- thermostat your system to compensate for energy changes resulting from
- created bonds (and angles, dihedrals, impropers).
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes two statistics which it stores in a global vector of
-length 2, which can be accessed by various :ref:`output commands <howto_15>`. The vector values calculated
-by this fix are "intensive".
-
-These are the 2 quantities:
-
-* (1) # of bonds created on the most recent creation timestep
-* (2) cummulative # of bonds created
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MC package. It is only enabled if LAMMPS was
-built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix bond/break <fix_bond_break>`, :doc:`fix bond/swap <fix_bond_swap>`, :doc:`dump local <dump>`,
-:doc:`special_bonds <special_bonds>`
-
-Default
-"""""""
-
-The option defaults are iparam = (0,itype), jparam = (0,jtype), and
-prob = 1.0.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_bond_swap.txt b/doc/html/_sources/fix_bond_swap.txt
deleted file mode 100644
index d809a2118..000000000
--- a/doc/html/_sources/fix_bond_swap.txt
+++ /dev/null
@@ -1,212 +0,0 @@
-.. index:: fix bond/swap
-
-fix bond/swap command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID bond/swap Nevery fraction cutoff seed
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* bond/swap = style name of this fix command
-* Nevery = attempt bond swapping every this many steps
-* fraction = fraction of group atoms to consider for swapping
-* cutoff = distance at which swapping will be considered (distance units)
-* seed = random # seed (positive integer)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all bond/swap 50 0.5 1.3 598934
-
-Description
-"""""""""""
-
-In a simulation of polymer chains, this command attempts to swap bonds
-between two different chains, effectively grafting the end of one
-chain onto another chain and vice versa. This is done via Monte Carlo
-rules using the Boltzmann acceptance criterion. The purpose is to
-equilibrate the polymer chain conformations more rapidly than dynamics
-alone would do it, by enabling instantaneous large conformational
-changes in a dense polymer melt. The polymer chains should thus more
-rapidly converge to the proper end-to-end distances and radii of
-gyration. It is designed for use with systems of
-:doc:`FENE <bond_fene>` or :doc:`harmonic <bond_harmonic>` bead-spring
-polymer chains where each polymer is a linear chain of monomers, but
-LAMMPS does not enforce this requirement, i.e. any
-:doc:`bond_style <bond_style>` can be used.
-
-A schematic of the kinds of bond swaps that can occur is shown here:
-
-.. image:: JPG/bondswap.jpg
- :align: center
-
-On the left, the red and blue chains have two monomers A1 and B1 close
-to each other, which are currently bonded to monomers A2 and B2
-respectively within their own chains. The bond swap operation will
-attempt to delete the A1-A2 and B1-B2 bonds and replace them with
-A1-B2 and B1-A2 bonds. If the swap is energetically favorable, the
-two chains on the right are the result and each polymer chain has
-undergone a dramatic conformational change. This reference,
-:ref:`(Sides) <Sides>` provides more details on how the algorithm works and
-its application:
-
-The bond swapping operation is invoked every *Nevery* timesteps. If
-any bond is swapped, a re-build of the neighbor lists is triggered,
-since a swap alters the list of which neighbors are considered for
-pairwise interaction. At each invocation, each processor considers a
-random specified *fraction* of its atoms as potential swapping
-monomers for this timestep. Choosing a small *fraction* value can
-reduce the likelihood of a reverse swap occurring soon after an
-initial swap.
-
-For each monomer A1, its neighbors are examined to find a possible B1
-monomer. Both A1 and B1 must be in the fix group, their separation
-must be less than the specified *cutoff*\ , and the molecule IDs of A1
-and B1 must be the same (see below). If a suitable partner is found,
-the energy change due to swapping the 2 bonds is computed. This
-includes changes in pairwise, bond, and angle energies due to the
-altered connectivity of the 2 chains. Dihedral and improper
-interactions are not allowed to be defined when this fix is used.
-
-If the energy decreases due to the swap operation, the bond swap is
-accepted. If the energy increases it is accepted with probability
-exp(-delta/kT) where delta is the increase in energy, k is the
-Boltzmann constant, and T is the current temperature of the system.
-Whether the swap is accepted or rejected, no other swaps are attempted
-by this processor on this timestep.
-
-The criterion for matching molecule IDs is how bond swaps performed by
-this fix conserve chain length. To use this features you must setup
-the molecule IDs for your polymer chains in a certain way, typically
-in the data file, read by the :doc:`read_data <read_data>` comand.
-Consider a system of 6-mer chains. You have 2 choices. If the
-molecule IDs for monomers on each chain are set to 1,2,3,4,5,6 then
-swaps will conserve chain length. For a particular momoner there will
-be only one other monomer on another chain which is a potential swap
-partner. If the molecule IDs for monomers on each chain are set to
-1,2,3,3,2,1 then swaps will conserve chain length but swaps will be
-able to occur at either end of a chain. Thus for a particular monomer
-there will be 2 possible swap partners on another chain. In this
-scenario, swaps can also occur within a single chain, i.e. the two
-ends of a chain swap with each other.
-
-.. note::
-
- If your simulation uses molecule IDs in the usual way, where all
- monomers on a single chain are assigned the same ID (different for
- each chain), then swaps will only occur within the same chain. If you
- assign the same molecule ID to all monomers in all chains then
- inter-chain swaps will occur, but they will not conserve chain length.
- Neither of these scenarios is probably what you want for this fix.
-
-.. note::
-
- When a bond swap occurs the image flags of monomers in the new
- polymer chains can become inconsistent. See the :doc:`dump <dump>`
- command for a discussion of image flags. This is not an issue for
- running dynamics, but can affect calculation of some diagnostic
- quantities or the printing of unwrapped coordinates to a dump file.
-
-
-----------
-
-
-This fix computes a temperature each time it is invoked for use by the
-Boltzmann criterion. To do this, the fix creates its own compute of
-style *temp*\ , as if this command had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp all temp
-
-See the :doc:`compute temp <compute_temp>` command for details. Note
-that the ID of the new compute is the fix-ID with underscore + "temp"
-appended and the group for the new compute is "all", so that the
-temperature of the entire system is used.
-
-Note that this is NOT the compute used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*\ .
-This means you can change the attributes of this fix's temperature
-(e.g. its degrees-of-freedom) via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-during thermodyanmic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* will have no
-effect on this fix.
-
-
-----------
-
-
-**Restart, fix_modify, thermo output, run start/stop, minimize info:**
-
-No information about this fix is written to :doc:`binary restart files <restart>`. Because the state of the random number generator
-is not saved in restart files, this means you cannot do "exact"
-restarts with this fix, where the simulation continues on the same as
-if no restart had taken place. However, in a statistical sense, a
-restarted simulation should produce the same behavior. Also note that
-each processor generates possible swaps independently of other
-processors. Thus if you repeat the same simulation on a different number
-of processors, the specific swaps performed will be different.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a :doc:`compute <compute>` you have
-defined to this fix which will be used to compute the temperature for
-the Boltzmann criterion.
-
-This fix computes two statistical quantities as a global 2-vector of
-output, which can be accessed by various :ref:`output commands <howto_15>`. The first component of the
-vector is the cummulative number of swaps performed by all processors.
-The second component of the vector is the cummulative number of swaps
-attempted (whether accepted or rejected). Note that a swap "attempt"
-only occurs when swap partners meeting the criteria described above
-are found on a particular timestep. The vector values calculated by
-this fix are "intensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MC package. It is only enabled if LAMMPS was
-built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The setings of the "special_bond" command must be 0,1,1 in order to
-use this fix, which is typical of bead-spring chains with FENE or
-harmonic bonds. This means that pairwise interactions between bonded
-atoms are turned off, but are turned on between atoms two or three
-hops away along the chain backbone.
-
-Currently, energy changes in dihedral and improper interactions due to
-a bond swap are not considered. Thus a simulation that uses this fix
-cannot use a dihedral or improper potential.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix atom/swap <fix_atom_swap>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Sides:
-
-
-
-**(Sides)** Sides, Grest, Stevens, Plimpton, J Polymer Science B, 42,
-199-208 (2004).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_box_relax.txt b/doc/html/_sources/fix_box_relax.txt
deleted file mode 100644
index c461114b9..000000000
--- a/doc/html/_sources/fix_box_relax.txt
+++ /dev/null
@@ -1,425 +0,0 @@
-.. index:: fix box/relax
-
-fix box/relax command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID box/relax keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* box/relax = style name of this fix command
-.. parsed-literal::
-
- one or more keyword value pairs may be appended
- keyword = *iso* or *aniso* or *tri* or *x* or *y* or *z* or *xy* or *yz* or *xz* or *couple* or *nreset* or *vmax* or *dilate* or *scaleyz* or *scalexz* or *scalexy* or *fixedpoint*
- *iso* or *aniso* or *tri* value = Ptarget = desired pressure (pressure units)
- *x* or *y* or *z* or *xy* or *yz* or *xz* value = Ptarget = desired pressure (pressure units)
- *couple* = *none* or *xyz* or *xy* or *yz* or *xz*
- *nreset* value = reset reference cell every this many minimizer iterations
- *vmax* value = fraction = max allowed volume change in one iteration
- *dilate* value = *all* or *partial*
- *scaleyz* value = *yes* or *no* = scale yz with lz
- *scalexz* value = *yes* or *no* = scale xz with lz
- *scalexy* value = *yes* or *no* = scale xy with ly
- *fixedpoint* values = x y z
- x,y,z = perform relaxation dilation/contraction around this point (distance units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all box/relax iso 0.0 vmax 0.001
- fix 2 water box/relax aniso 0.0 dilate partial
- fix 2 ice box/relax tri 0.0 couple xy nreset 100
-
-Description
-"""""""""""
-
-Apply an external pressure or stress tensor to the simulation box
-during an :doc:`energy minimization <minimize>`. This allows the box
-size and shape to vary during the iterations of the minimizer so that
-the final configuration will be both an energy minimum for the
-potential energy of the atoms, and the system pressure tensor will be
-close to the specified external tensor. Conceptually, specifying a
-positive pressure is like squeezing on the simulation box; a negative
-pressure typically allows the box to expand.
-
-
-----------
-
-
-The external pressure tensor is specified using one or more of the
-*iso*\ , *aniso*\ , *tri*\ , *x*\ , *y*\ , *z*\ , *xy*\ , *xz*\ , *yz*\ , and *couple*
-keywords. These keywords give you the ability to specify all 6
-components of an external stress tensor, and to couple various of
-these components together so that the dimensions they represent are
-varied together during the mimimization.
-
-Orthogonal simulation boxes have 3 adjustable dimensions (x,y,z).
-Triclinic (non-orthogonal) simulation boxes have 6 adjustable
-dimensions (x,y,z,xy,xz,yz). The :doc:`create_box <create_box>`, :doc:`read data <read_data>`, and :doc:`read_restart <read_restart>` commands
-specify whether the simulation box is orthogonal or non-orthogonal
-(triclinic) and explain the meaning of the xy,xz,yz tilt factors.
-
-The target pressures *Ptarget* for each of the 6 components of the
-stress tensor can be specified independently via the *x*\ , *y*\ , *z*\ ,
-*xy*\ , *xz*\ , *yz* keywords, which correspond to the 6 simulation box
-dimensions. For example, if the *y* keyword is used, the y-box length
-will change during the minimization. If the *xy* keyword is used, the
-xy tilt factor will change. A box dimension will not change if that
-component is not specified.
-
-Note that in order to use the *xy*\ , *xz*\ , or *yz* keywords, the
-simulation box must be triclinic, even if its initial tilt factors are
-0.0.
-
-When the size of the simulation box changes, all atoms are re-scaled
-to new positions, unless the keyword *dilate* is specified with a
-value of *partial*\ , in which case only the atoms in the fix group are
-re-scaled. This can be useful for leaving the coordinates of atoms in
-a solid substrate unchanged and controlling the pressure of a
-surrounding fluid.
-
-The *scaleyz*\ , *scalexz*\ , and *scalexy* keywords control whether or
-not the corresponding tilt factors are scaled with the associated box
-dimensions when relaxing triclinic periodic cells. The default
-values *yes* will turn on scaling, which corresponds to adjusting the
-linear dimensions of the cell while preserving its shape. Choosing
-*no* ensures that the tilt factors are not scaled with the box
-dimensions. See below for restrictions and default values in different
-situations. In older versions of LAMMPS, scaling of tilt factors was
-not performed. The old behavior can be recovered by setting all three
-scale keywords to *no*\ .
-
-The *fixedpoint* keyword specifies the fixed point for cell relaxation.
-By default, it is the center of the box. Whatever point is
-chosen will not move during the simulation. For example, if the lower
-periodic boundaries pass through (0,0,0), and this point is provided
-to *fixedpoint*\ , then the lower periodic boundaries will remain at
-(0,0,0), while the upper periodic boundaries will move twice as
-far. In all cases, the particle positions at each iteration are
-unaffected by the chosen value, except that all particles are
-displaced by the same amount, different on each iteration.
-
-.. note::
-
- Appling an external pressure to tilt dimensions *xy*\ , *xz*\ , *yz*
- can sometimes result in arbitrarily large values of the tilt factors,
- i.e. a dramatically deformed simulation box. This typically indicates
- that there is something badly wrong with how the simulation was
- constructed. The two most common sources of this error are applying a
- shear stress to a liquid system or specifying an external shear stress
- tensor that exceeds the yield stress of the solid. In either case the
- minimization may converge to a bogus conformation or not converge at
- all. Also note that if the box shape tilts to an extreme shape,
- LAMMPS will run less efficiently, due to the large volume of
- communication needed to acquire ghost atoms around a processor's
- irregular-shaped sub-domain. For extreme values of tilt, LAMMPS may
- also lose atoms and generate an error.
-
-.. note::
-
- Performing a minimization with this fix is not a mathematically
- well-defined minimization problem. This is because the objective
- function being minimized changes if the box size/shape changes. In
- practice this means the minimizer can get "stuck" before you have
- reached the desired tolerance. The solution to this is to restart the
- minmizer from the new adjusted box size/shape, since that creates a
- new objective function valid for the new box size/shape. Repeat as
- necessary until the box size/shape has reached its new equilibrium.
-
-
-
-
-
-
-----------
-
-
-The *couple* keyword allows two or three of the diagonal components of
-the pressure tensor to be "coupled" together. The value specified
-with the keyword determines which are coupled. For example, *xz*
-means the *Pxx* and *Pzz* components of the stress tensor are coupled.
-*Xyz* means all 3 diagonal components are coupled. Coupling means two
-things: the instantaneous stress will be computed as an average of the
-corresponding diagonal components, and the coupled box dimensions will
-be changed together in lockstep, meaning coupled dimensions will be
-dilated or contracted by the same percentage every timestep. The
-*Ptarget* values for any coupled dimensions must be identical.
-*Couple xyz* can be used for a 2d simulation; the *z* dimension is
-simply ignored.
-
-
-----------
-
-
-The *iso*\ , *aniso*\ , and *tri* keywords are simply shortcuts that are
-equivalent to specifying several other keywords together.
-
-The keyword *iso* means couple all 3 diagonal components together when
-pressure is computed (hydrostatic pressure), and dilate/contract the
-dimensions together. Using "iso Ptarget" is the same as specifying
-these 4 keywords:
-
-.. parsed-literal::
-
- x Ptarget
- y Ptarget
- z Ptarget
- couple xyz
-
-The keyword *aniso* means *x*\ , *y*\ , and *z* dimensions are controlled
-independently using the *Pxx*\ , *Pyy*\ , and *Pzz* components of the
-stress tensor as the driving forces, and the specified scalar external
-pressure. Using "aniso Ptarget" is the same as specifying these 4
-keywords:
-
-.. parsed-literal::
-
- x Ptarget
- y Ptarget
- z Ptarget
- couple none
-
-The keyword *tri* means *x*\ , *y*\ , *z*\ , *xy*\ , *xz*\ , and *yz* dimensions
-are controlled independently using their individual stress components
-as the driving forces, and the specified scalar pressure as the
-external normal stress. Using "tri Ptarget" is the same as specifying
-these 7 keywords:
-
-.. parsed-literal::
-
- x Ptarget
- y Ptarget
- z Ptarget
- xy 0.0
- yz 0.0
- xz 0.0
- couple none
-
-
-----------
-
-
-The *vmax* keyword can be used to limit the fractional change in the
-volume of the simulation box that can occur in one iteration of the
-minimizer. If the pressure is not settling down during the
-minimization this can be because the volume is fluctuating too much.
-The specified fraction must be greater than 0.0 and should be << 1.0.
-A value of 0.001 means the volume cannot change by more than 1/10 of a
-percent in one iteration when *couple xyz* has been specified. For
-any other case it means no linear dimension of the simulation box can
-change by more than 1/10 of a percent.
-
-
-----------
-
-
-With this fix, the potential energy used by the minimizer is augmented
-by an additional energy provided by the fix. The overall objective
-function then is:
-
-.. image:: Eqs/fix_box_relax1.jpg
- :align: center
-
-where *U* is the system potential energy, *P*\ _t is the desired
-hydrostatic pressure, *V* and *V*\ _0 are the system and reference
-volumes, respectively. *E*\ _\ *strain* is the strain energy expression
-proposed by Parrinello and Rahman :ref:`(Parrinello1981) <Parrinello1981>`.
-Taking derivatives of *E* w.r.t. the box dimensions, and setting these
-to zero, we find that at the minimum of the objective function, the
-global system stress tensor **P** will satisfy the relation:
-
-.. image:: Eqs/fix_box_relax2.jpg
- :align: center
-
-where **I** is the identity matrix, **h**\ _0 is the box dimension tensor of
-the reference cell, and **h**\ _0\ *d* is the diagonal part of
-**h**\ _0. **S**\ _\ *t* is a symmetric stress tensor that is chosen by LAMMPS
-so that the upper-triangular components of **P** equal the stress tensor
-specified by the user.
-
-This equation only applies when the box dimensions are equal to those
-of the reference dimensions. If this is not the case, then the
-converged stress tensor will not equal that specified by the user. We
-can resolve this problem by periodically resetting the reference
-dimensions. The keyword *nreset_ref* controls how often this is done.
-If this keyword is not used, or is given a value of zero, then the
-reference dimensions are set to those of the initial simulation domain
-and are never changed. A value of *nstep* means that every *nstep*
-minimization steps, the reference dimensions are set to those of the
-current simulation domain. Note that resetting the reference
-dimensions changes the objective function and gradients, which
-sometimes causes the minimization to fail. This can be resolved by
-changing the value of *nreset*\ , or simply continuing the minimization
-from a restart file.
-
-.. note::
-
- As normally computed, pressure includes a kinetic- energy or
- temperature-dependent component; see the :doc:`compute pressure <compute_pressure>` command. However, atom velocities are
- ignored during a minimization, and the applied pressure(s) specified
- with this command are assumed to only be the virial component of the
- pressure (the non-kinetic portion). Thus if atoms have a non-zero
- temperature and you print the usual thermodynamic pressure, it may not
- appear the system is converging to your specified pressure. The
- solution for this is to either (a) zero the velocities of all atoms
- before performing the minimization, or (b) make sure you are
- monitoring the pressure without its kinetic component. The latter can
- be done by outputting the pressure from the fix this command creates
- (see below) or a pressure fix you define yourself.
-
-.. note::
-
- Because pressure is often a very sensitive function of volume,
- it can be difficult for the minimizer to equilibrate the system the
- desired pressure with high precision, particularly for solids. Some
- techniques that seem to help are (a) use the "min_modify line
- quadratic" option when minimizing with box relaxations, (b) minimize
- several times in succession if need be, to drive the pressure closer
- to the target pressure, (c) relax the atom positions before relaxing
- the box, and (d) relax the box to the target hydrostatic pressure
- before relaxing to a target shear stress state. Also note that some
- systems (e.g. liquids) will not sustain a non-hydrostatic applied
- pressure, which means the minimizer will not converge.
-
-
-----------
-
-
-This fix computes a temperature and pressure each timestep. The
-temperature is used to compute the kinetic contribution to the
-pressure, even though this is subsequently ignored by default. To do
-this, the fix creates its own computes of style "temp" and "pressure",
-as if these commands had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp
- compute fix-ID_press group-ID pressure fix-ID_temp virial
-
-See the :doc:`compute temp <compute_temp>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
-IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
-+ underscore + "press", and the group for the new computes is the same
-as the fix group. Also note that the pressure compute does not
-include a kinetic component.
-
-Note that these are NOT the computes used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*
-and *thermo_press*\ . This means you can change the attributes of this
-fix's temperature or pressure via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-or pressure during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* or
-*thermo_press* will have no effect on this fix.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *temp* and *press* options are
-supported by this fix. You can use them to assign a
-:doc:`compute <compute>` you have defined to this fix which will be used
-in its temperature and pressure calculation, as described above. Note
-that as described above, if you assign a pressure compute to this fix
-that includes a kinetic energy component it will affect the
-minimization, most likely in an undesirable way.
-
-.. note::
-
- If both the *temp* and *press* keywords are used in a single
- thermo_modify command (or in two separate commands), then the order in
- which the keywords are specified is important. Note that a :doc:`pressure compute <compute_pressure>` defines its own temperature compute as
- an argument when it is specified. The *temp* keyword will override
- this (for the pressure compute being used by fix npt), but only if the
- *temp* keyword comes after the *press* keyword. If the *temp* keyword
- comes before the *press* keyword, then the new pressure compute
- specified by the *press* keyword will be unaffected by the *temp*
- setting.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-pressure-volume energy, plus the strain energy, if it exists.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is given
-by the energy expression shown above. The energy values reported
-at the end of a minimization run under "Minimization stats" include
-this energy, and so differ from what LAMMPS normally reports as
-potential energy. This fix does not support the
-:doc:`fix_modify <fix_modify>` *energy* option,
-because that would result in double-counting of the fix energy in the
-minimization energy. Instead, the fix energy can be explicitly
-added to the potential energy using one of these two variants:
-
-.. parsed-literal::
-
- variable emin equal pe+f_1
-
-.. parsed-literal::
-
- variable emin equal pe+f_1/atoms
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-This fix is invoked during :doc:`energy minimization <minimize>`, but
-not for the purpose of adding a contribution to the energy or forces
-being minimized. Instead it alters the simulation box geometry as
-described above.
-
-Restrictions
-""""""""""""
-
-
-Only dimensions that are available can be adjusted by this fix.
-Non-periodic dimensions are not available. *z*\ , *xz*\ , and *yz*\ , are
-not available for 2D simulations. *xy*\ , *xz*\ , and *yz* are only
-available if the simulation domain is non-orthogonal. The
-:doc:`create_box <create_box>`, :doc:`read data <read_data>`, and
-:doc:`read_restart <read_restart>` commands specify whether the
-simulation box is orthogonal or non-orthogonal (triclinic) and explain
-the meaning of the xy,xz,yz tilt factors.
-
-The *scaleyz yes* and *scalexz yes* keyword/value pairs can not be used
-for 2D simulations. *scaleyz yes*\ , *scalexz yes*\ , and *scalexy yes* options
-can only be used if the 2nd dimension in the keyword is periodic,
-and if the tilt factor is not coupled to the barostat via keywords
-*tri*\ , *yz*\ , *xz*\ , and *xy*\ .
-
-Related commands
-""""""""""""""""
-
-:doc:`fix npt <fix_nh>`, :doc:`minimize <minimize>`
-
-Default
-"""""""
-
-The keyword defaults are dilate = all, vmax = 0.0001, nreset = 0.
-
-
-----------
-
-
-.. _Parrinello1981:
-
-
-
-**(Parrinello1981)** Parrinello and Rahman, J Appl Phys, 52, 7182 (1981).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_colvars.txt b/doc/html/_sources/fix_colvars.txt
deleted file mode 100644
index 79a4bc284..000000000
--- a/doc/html/_sources/fix_colvars.txt
+++ /dev/null
@@ -1,158 +0,0 @@
-.. index:: fix colvars
-
-fix colvars command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID colvars configfile keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* colvars = style name of this fix command
-* configfile = the configuration file for the colvars module
-* keyword = *input* or *output* or *seed* or *tstat*
-.. parsed-literal::
-
- *input* arg = colvars.state file name or prefix or NULL (default: NULL)
- *output* arg = output filename prefix (default: out)
- *seed* arg = seed for random number generator (default: 1966)
- *unwrap* arg = *yes* or *no*
- use unwrapped coordinates in collective variables (default: yes)
- *tstat* arg = fix id of a thermostat or NULL (default: NULL)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix mtd all colvars peptide.colvars.inp seed 2122 input peptide.colvars.state output peptide
- fix abf all colvars colvars.inp tstat 1
-
-Description
-"""""""""""
-
-This fix interfaces LAMMPS to a "collective variables" or "colvars"
-module library which allows to calculate potentials of mean force
-(PMFs) for any set of colvars, using different sampling methods:
-currently implemented are the Adaptive Biasing Force (ABF) method,
-metadynamics, Steered Molecular Dynamics (SMD) and Umbrella Sampling
-(US) via a flexible harmonic restraint bias. The colvars library is
-hosted at `http://colvars.github.io/ <http://colvars.github.io/>`_
-
-This documentation describes only the fix colvars command itself and
-LAMMPS specific parts of the code. The full documentation of the
-colvars library is available as `this supplementary PDF document <PDF/colvars-refman-lammps.pdf>`_
-
-A detailed discussion of the implementation of the portable collective
-variable library is in :ref:`(Fiorin) <Fiorin>`. Additional information can
-be found in :ref:`(Henin) <Henin>`.
-
-There are some example scripts for using this package with LAMMPS in the
-examples/USER/colvars directory.
-
-
-----------
-
-
-The only mandatory argument to the fix is the filename to the colvars
-input file that contains the input that is independent from the MD
-program in which the colvars library has been integrated.
-
-The *group-ID* entry is ignored. The collective variable module will
-always apply to the entire system and there can only be one instance
-of the colvars fix at a time. The colvars fix will only communicate
-the minimum information necessary and the colvars library supports
-multiple, completely independent collective variables, so there is
-no restriction to functionaliry by limiting the number of colvars fixes.
-
-The *input* keyword allows to specify a state file that would contain
-the restart information required in order to continue a calculation from
-a prerecorded state. Fix colvars records it state in :doc:`binary restart <restart>`
-files, so when using the :doc:`read_restart <read_restart>` command,
-this is usually not needed.
-
-The *output* keyword allows to specify the output prefix. All output
-files generated will use this prefix followed by the ".colvars." and
-a word like "state" or "traj".
-
-The *seed* keyword contains the seed for the random number generator
-that will be used in the colvars module.
-
-The *unwrap* keyword controls whether wrapped or unwrapped coordinates
-are passed to the colvars library for calculation of the collective
-variables and the resulting forces. The default is *yes*\ , i.e. to use
-the image flags to reconstruct the absolute atom positions.
-Setting this to *no* will use the current local coordinates that are
-wrapped back into the simulation cell at each re-neighboring instead.
-
-The *tstat* keyword can be either NULL or the label of a thermostating
-fix that thermostats all atoms in the fix colvars group. This will be
-used to provide the colvars module with the current thermostat target
-temperature.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the current status of the colvars module into
-:doc:`binary restart files <restart>`. This is in addition to the text
-mode status file that is written by the colvars module itself and the
-kind of information in both files is identical.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change from the biasing force added by the fix
-to the system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-cummulative energy change due to this fix. The scalar value
-calculated by this fix is "extensive".
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-COLVARS package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-There can only be one colvars fix active at a time. Since the interface
-communicates only the minimum amount of information and colvars module
-itself can handle an arbitrary number of collective variables, this is
-not a limitation of functionality.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix smd <fix_smd>`
-
-Default
-"""""""
-
-The default options are input = NULL, output = out, seed = 1966, unwrap yes,
-and tstat = NULL.
-
-
-----------
-
-
-.. _Fiorin:
-
-
-
-**(Fiorin)** Fiorin , Klein, Henin, Mol. Phys., DOI:10.1080/00268976.2013.813594
-
-.. _Henin:
-
-
-
-**(Henin)** Henin, Fiorin, Chipot, Klein, J. Chem. Theory Comput., 6,
-35-47 (2010)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_controller.txt b/doc/html/_sources/fix_controller.txt
deleted file mode 100644
index 565a335c6..000000000
--- a/doc/html/_sources/fix_controller.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-.. index:: fix controller
-
-fix controller command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID controller Nevery alpha Kp Ki Kd pvar setpoint cvar
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* controller = style name of this fix command
-* Nevery = invoke controller every this many timesteps
-* alpha = coupling constant for PID equation (see units discussion below)
-* Kp = proportional gain in PID equation (unitless)
-* Ki = integral gain in PID equation (unitless)
-* Kd = derivative gain in PID equation (unitless)
-* pvar = process variable of form c_ID, c_ID[I], f_ID, f_ID[I], or v_name
-.. parsed-literal::
-
- c_ID = global scalar calculated by a compute with ID
- c_ID[I] = Ith component of global vector calculated by a compute with ID
- f_ID = global scalar calculated by a fix with ID
- f_ID[I] = Ith component of global vector calculated by a fix with ID
- v_name = value calculated by an equal-style variable with name
-
-* setpoint = desired value of process variable (same units as process variable)
-* cvar = name of control variable
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all controller 100 1.0 0.5 0.0 0.0 c_thermo_temp 1.5 tcontrol
- fix 1 all controller 100 0.2 0.5 0 100.0 v_pxxwall 1.01325 xwall
- fix 1 all controller 10000 0.2 0.5 0 2000 v_avpe -3.785 tcontrol
-
-Description
-"""""""""""
-
-This fix enables control of a LAMMPS simulation using a control loop
-feedback mechanism known as a proportional-integral-derivative (PID)
-controller. The basic idea is to define a "process variable" which is
-a quantity that can be monitored during a running simulation. A
-desired target value is chosen for the process variable. A "control
-variable" is also defined which is an adjustable attribute of the
-running simulation, which the process variable will respond to. The
-PID controller continuously adjusts the control variable based on the
-difference between the process variable and the target.
-
-Here are examples of ways in which this fix can be used. The
-examples/pid directory contains a script that implements the simple
-thermostat.
-
-+-----------------------------------------+---------------------+---------------------+
-| Goal | process variable | control variable |
-+-----------------------------------------+---------------------+---------------------+
-| Simple thermostat | instantaneous T | thermostat target T |
-+-----------------------------------------+---------------------+---------------------+
-| Find melting temperature | average PE per atom | thermostat target T |
-+-----------------------------------------+---------------------+---------------------+
-| Control pressure in non-periodic system | force on wall | position of wall |
-+-----------------------------------------+---------------------+---------------------+
-| | | |
-+-----------------------------------------+---------------------+---------------------+
-
-.. note::
-
- For this fix to work, the control variable must actually induce
- a change in a running LAMMPS simulation. Typically this will only
- occur if there is some other command (e.g. a thermostat fix) which
- uses the control variable as an input parameter. This could be done
- directly or indirectly, e.g. the other command uses a variable as
- input whose formula uses the control variable. The other command
- should alter its behavior dynamically as the variable changes.
-
-.. note::
-
- If there is a command you think could be used in this fashion,
- but does not currently allow a variable as an input parameter, please
- notify the LAMMPS developers. It is often not difficult to enable a
- command to use a variable as an input parameter.
-
-The group specified with this command is ignored. However, note that
-the process variable may be defined by calculations performed by
-computes and fixes which store their own "group" definitions.
-
-The PID controller is invoked once each *Nevery* timesteps.
-
-The PID controller is implemented as a discretized version of
-the following dynamic equation:
-
-.. image:: Eqs/fix_controller1.jpg
- :align: center
-
-where *c* is the continuous time analog of the control variable,
-*e*\ =\ *pvar*\ -\ *setpoint* is the error in the process variable, and
-*alpha*\ , *Kp*\ , *Ki*\ , and *Kd* are constants set by the corresponding
-keywords described above. The discretized version of this equation is:
-
-.. image:: Eqs/fix_controller2.jpg
- :align: center
-
-where *tau* = *Nevery* * *timestep* is the time interval between updates,
-and the subscripted variables indicate the values of *c* and *e* at
-successive updates.
-
-From the first equation, it is clear that if the three gain values
-*Kp*\ , *Ki*\ , *Kd* are dimensionless constants, then *alpha* must have
-units of [unit *cvar*\ ]/[unit *pvar*\ ]/[unit time] e.g. [ eV/K/ps
-]. The advantage of this unit scheme is that the value of the
-constants should be invariant under a change of either the MD timestep
-size or the value of *Nevery*\ . Similarly, if the LAMMPS :doc:`unit style <units>` is changed, it should only be necessary to change
-the value of *alpha* to reflect this, while leaving *Kp*\ , *Ki*\ , and
-*Kd* unaltered.
-
-When choosing the values of the four constants, it is best to first
-pick a value and sign for *alpha* that is consistent with the
-magnitudes and signs of *pvar* and *cvar*\ . The magnitude of *Kp*
-should then be tested over a large positive range keeping *Ki*\ =\ *Kd*\ =0.
-A good value for *Kp* will produce a fast reponse in *pvar*\ , without
-overshooting the *setpoint*\ . For many applications, proportional
-feedback is sufficient, and so *Ki*\ =\ *Kd*\ =0 can be used. In cases where
-there is a substantial lag time in the response of *pvar* to a change
-in *cvar*\ , this can be counteracted by increasing *Kd*\ . In situations
-where *pvar* plateaus without reaching *setpoint*\ , this can be
-counteracted by increasing *Ki*\ . In the language of Charles Dickens,
-*Kp* represents the error of the present, *Ki* the error of the past,
-and *Kd* the error yet to come.
-
-Because this fix updates *cvar*\ , but does not initialize its value,
-the initial value is that assigned by the user in the input script via
-the :doc:`internal-style variable <variable>` command. This value is
-used (by the other LAMMPS command that used the variable) until this
-fix performs its first update of *cvar* after *Nevery* timesteps. On
-the first update, the value of the derivative term is set to zero,
-because the value of *e_n-1* is not yet defined.
-
-
-----------
-
-
-The process variable *pvar* can be specified as the output of a
-:doc:`compute <compute>` or :doc:`fix <fix>` or the evaluation of a
-:doc:`variable <variable>`. In each case, the compute, fix, or variable
-must produce a global quantity, not a per-atom or local quantity.
-
-If *pvar* begins with "c_", a compute ID must follow which has been
-previously defined in the input script and which generates a global
-scalar or vector. See the individual :doc:`compute <compute>` doc page
-for details. If no bracketed integer is appended, the scalar
-calculated by the compute is used. If a bracketed integer is
-appended, the Ith value of the vector calculated by the compute is
-used. Users can also write code for their own compute styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If *pvar* begins with "f_", a fix ID must follow which has been
-previously defined in the input script and which generates a global
-scalar or vector. See the individual :doc:`fix <fix>` doc page for
-details. Note that some fixes only produce their values on certain
-timesteps, which must be compatible with when fix controller
-references the values, or else an error results. If no bracketed integer
-is appended, the scalar calculated by the fix is used. If a bracketed
-integer is appended, the Ith value of the vector calculated by the fix
-is used. Users can also write code for their own fix style and :doc:`add them to LAMMPS <Section_modify>`.
-
-If *pvar* begins with "v_", a variable name must follow which has been
-previously defined in the input script. Only equal-style variables
-can be referenced. See the :doc:`variable <variable>` command for
-details. Note that variables of style *equal* define a formula which
-can reference individual atom properties or thermodynamic keywords, or
-they can invoke other computes, fixes, or variables when they are
-evaluated, so this is a very general means of specifying the process
-variable.
-
-The target value *setpoint* for the process variable must be a numeric
-value, in whatever units *pvar* is defined for.
-
-The control variable *cvar* must be the name of an :doc:`internal-style variable <variable>` previously defined in the input script. Note
-that it is not specified with a "v_" prefix, just the name of the
-variable. It must be an internal-style variable, because this fix
-updates its value directly. Note that other commands can use an
-equal-style versus internal-style variable interchangeably.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-Currenlty, no information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix produces a global vector with 3 values which can be accessed
-by various :ref:`output commands <howto_15>`. The values
-can be accessed on any timestep, though they are only updated on
-timesteps that are a multiple of *Nevery*\ .
-
-The three values are the most recent updates made to the control
-variable by each of the 3 terms in the PID equation above. The first
-value is the proportional term, the second is the integral term, the
-third is the derivative term.
-
-The units of the vector values will be whatever units the control
-variable is in. The vector values calculated by this fix are
-"extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix adapt <fix_adapt>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_deform.txt b/doc/html/_sources/fix_deform.txt
deleted file mode 100644
index 7a66b955d..000000000
--- a/doc/html/_sources/fix_deform.txt
+++ /dev/null
@@ -1,628 +0,0 @@
-.. index:: fix deform
-
-fix deform command
-==================
-
-fix deform/kk command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID deform N parameter args ... keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* deform = style name of this fix command
-* N = perform box deformation every this many timesteps
-* one or more parameter/arg pairs may be appended
-.. parsed-literal::
-
- parameter = *x* or *y* or *z* or *xy* or *xz* or *yz*
- *x*\ , *y*\ , *z* args = style value(s)
- style = *final* or *delta* or *scale* or *vel* or *erate* or *trate* or *volume* or *wiggle* or *variable*
- *final* values = lo hi
- lo hi = box boundaries at end of run (distance units)
- *delta* values = dlo dhi
- dlo dhi = change in box boundaries at end of run (distance units)
- *scale* values = factor
- factor = multiplicative factor for change in box length at end of run
- *vel* value = V
- V = change box length at this velocity (distance/time units),
- effectively an engineering strain rate
- *erate* value = R
- R = engineering strain rate (1/time units)
- *trate* value = R
- R = true strain rate (1/time units)
- *volume* value = none = adjust this dim to preserve volume of system
- *wiggle* values = A Tp
- A = amplitude of oscillation (distance units)
- Tp = period of oscillation (time units)
- *variable* values = v_name1 v_name2
- v_name1 = variable with name1 for box length change as function of time
- v_name2 = variable with name2 for change rate as function of time
- *xy*\ , *xz*\ , *yz* args = style value
- style = *final* or *delta* or *vel* or *erate* or *trate* or *wiggle*
- *final* value = tilt
- tilt = tilt factor at end of run (distance units)
- *delta* value = dtilt
- dtilt = change in tilt factor at end of run (distance units)
- *vel* value = V
- V = change tilt factor at this velocity (distance/time units),
- effectively an engineering shear strain rate
- *erate* value = R
- R = engineering shear strain rate (1/time units)
- *trate* value = R
- R = true shear strain rate (1/time units)
- *wiggle* values = A Tp
- A = amplitude of oscillation (distance units)
- Tp = period of oscillation (time units)
- *variable* values = v_name1 v_name2
- v_name1 = variable with name1 for tilt change as function of time
- v_name2 = variable with name2 for change rate as function of time
-
-* zero or more keyword/value pairs may be appended
-* keyword = *remap* or *flip* or *units*
-.. parsed-literal::
-
- *remap* value = *x* or *v* or *none*
- x = remap coords of atoms in group into deforming box
- v = remap velocities of all atoms when they cross periodic boundaries
- none = no remapping of x or v
- *flip* value = *yes* or *no*
- allow or disallow box flips when it becomes highly skewed
- *units* value = *lattice* or *box*
- lattice = distances are defined in lattice units
- box = distances are defined in simulation box units
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all deform 1 x final 0.0 9.0 z final 0.0 5.0 units box
- fix 1 all deform 1 x trate 0.1 y volume z volume
- fix 1 all deform 1 xy erate 0.001 remap v
- fix 1 all deform 10 y delta -0.5 0.5 xz vel 1.0
-
-Description
-"""""""""""
-
-Change the volume and/or shape of the simulation box during a dynamics
-run. Orthogonal simulation boxes have 3 adjustable parameters
-(x,y,z). Triclinic (non-orthogonal) simulation boxes have 6
-adjustable parameters (x,y,z,xy,xz,yz). Any or all of them can be
-adjusted independently and simultaneously by this command. This fix
-can be used to perform non-equilibrium MD (NEMD) simulations of a
-continuously strained system. See the :doc:`fix nvt/sllod <fix_nvt_sllod>` and :doc:`compute temp/deform <compute_temp_deform>` commands for more details.
-
-For the *x*\ , *y*\ , *z* parameters, the associated dimension cannot be
-shrink-wrapped. For the *xy*\ , *yz*\ , *xz* parameters, the associated
-2nd dimension cannot be shrink-wrapped. Dimensions not varied by this
-command can be periodic or non-periodic. Dimensions corresponding to
-unspecified parameters can also be controlled by a :doc:`fix npt <fix_nh>` or :doc:`fix nph <fix_nh>` command.
-
-The size and shape of the simulation box at the beginning of the
-simulation run were either specified by the
-:doc:`create_box <create_box>` or :doc:`read_data <read_data>` or
-:doc:`read_restart <read_restart>` command used to setup the simulation
-initially if it is the first run, or they are the values from the end
-of the previous run. The :doc:`create_box <create_box>`, :doc:`read data <read_data>`, and :doc:`read_restart <read_restart>` commands
-specify whether the simulation box is orthogonal or non-orthogonal
-(triclinic) and explain the meaning of the xy,xz,yz tilt factors. If
-fix deform changes the xy,xz,yz tilt factors, then the simulation box
-must be triclinic, even if its initial tilt factors are 0.0.
-
-As described below, the desired simulation box size and shape at the
-end of the run are determined by the parameters of the fix deform
-command. Every Nth timestep during the run, the simulation box is
-expanded, contracted, or tilted to ramped values between the initial
-and final values.
-
-
-----------
-
-
-For the *x*\ , *y*\ , and *z* parameters, this is the meaning of their
-styles and values.
-
-The *final*\ , *delta*\ , *scale*\ , *vel*\ , and *erate* styles all change
-the specified dimension of the box via "constant displacement" which
-is effectively a "constant engineering strain rate". This means the
-box dimension changes linearly with time from its initial to final
-value.
-
-For style *final*\ , the final lo and hi box boundaries of a dimension
-are specified. The values can be in lattice or box distance units.
-See the discussion of the units keyword below.
-
-For style *delta*\ , plus or minus changes in the lo/hi box boundaries
-of a dimension are specified. The values can be in lattice or box
-distance units. See the discussion of the units keyword below.
-
-For style *scale*\ , a multiplicative factor to apply to the box length
-of a dimension is specified. For example, if the initial box length
-is 10, and the factor is 1.1, then the final box length will be 11. A
-factor less than 1.0 means compression.
-
-For style *vel*\ , a velocity at which the box length changes is
-specified in units of distance/time. This is effectively a "constant
-engineering strain rate", where rate = V/L0 and L0 is the initial box
-length. The distance can be in lattice or box distance units. See
-the discussion of the units keyword below. For example, if the
-initial box length is 100 Angstroms, and V is 10 Angstroms/psec, then
-after 10 psec, the box length will have doubled. After 20 psec, it
-will have tripled.
-
-The *erate* style changes a dimension of the the box at a "constant
-engineering strain rate". The units of the specified strain rate are
-1/time. See the :doc:`units <units>` command for the time units
-associated with different choices of simulation units,
-e.g. picoseconds for "metal" units). Tensile strain is unitless and
-is defined as delta/L0, where L0 is the original box length and delta
-is the change relative to the original length. The box length L as a
-function of time will change as
-
-.. parsed-literal::
-
- L(t) = L0 (1 + erate*dt)
-
-where dt is the elapsed time (in time units). Thus if *erate* R is
-specified as 0.1 and time units are picoseconds, this means the box
-length will increase by 10% of its original length every picosecond.
-I.e. strain after 1 psec = 0.1, strain after 2 psec = 0.2, etc. R =
--0.01 means the box length will shrink by 1% of its original length
-every picosecond. Note that for an "engineering" rate the change is
-based on the original box length, so running with R = 1 for 10
-picoseconds expands the box length by a factor of 11 (strain of 10),
-which is different that what the *trate* style would induce.
-
-The *trate* style changes a dimension of the box at a "constant true
-strain rate". Note that this is not an "engineering strain rate", as
-the other styles are. Rather, for a "true" rate, the rate of change
-is constant, which means the box dimension changes non-linearly with
-time from its initial to final value. The units of the specified
-strain rate are 1/time. See the :doc:`units <units>` command for the
-time units associated with different choices of simulation units,
-e.g. picoseconds for "metal" units). Tensile strain is unitless and
-is defined as delta/L0, where L0 is the original box length and delta
-is the change relative to the original length.
-
-The box length L as a function of time will change as
-
-.. parsed-literal::
-
- L(t) = L0 exp(trate*dt)
-
-where dt is the elapsed time (in time units). Thus if *trate* R is
-specified as ln(1.1) and time units are picoseconds, this means the
-box length will increase by 10% of its current (not original) length
-every picosecond. I.e. strain after 1 psec = 0.1, strain after 2 psec
-= 0.21, etc. R = ln(2) or ln(3) means the box length will double or
-triple every picosecond. R = ln(0.99) means the box length will
-shrink by 1% of its current length every picosecond. Note that for a
-"true" rate the change is continuous and based on the current length,
-so running with R = ln(2) for 10 picoseconds does not expand the box
-length by a factor of 11 as it would with *erate*\ , but by a factor of
-1024 since the box length will double every picosecond.
-
-Note that to change the volume (or cross-sectional area) of the
-simulation box at a constant rate, you can change multiple dimensions
-via *erate* or *trate*\ . E.g. to double the box volume in a picosecond
-picosecond, you could set "x erate M", "y erate M", "z erate M", with
-M = pow(2,1/3) - 1 = 0.26, since if each box dimension grows by 26%,
-the box volume doubles. Or you could set "x trate M", "y trate M", "z
-trate M", with M = ln(1.26) = 0.231, and the box volume would double
-every picosecond.
-
-The *volume* style changes the specified dimension in such a way that
-the box volume remains constant while other box dimensions are changed
-explicitly via the styles discussed above. For example, "x scale 1.1
-y scale 1.1 z volume" will shrink the z box length as the x,y box
-lengths increase, to keep the volume constant (product of x,y,z
-lengths). If "x scale 1.1 z volume" is specified and parameter *y* is
-unspecified, then the z box length will shrink as x increases to keep
-the product of x,z lengths constant. If "x scale 1.1 y volume z
-volume" is specified, then both the y,z box lengths will shrink as x
-increases to keep the volume constant (product of x,y,z lengths). In
-this case, the y,z box lengths shrink so as to keep their relative
-aspect ratio constant.
-
-For solids or liquids, note that when one dimension of the box is
-expanded via fix deform (i.e. tensile strain), it may be physically
-undesirable to hold the other 2 box lengths constant (unspecified by
-fix deform) since that implies a density change. Using the *volume*
-style for those 2 dimensions to keep the box volume constant may make
-more physical sense, but may also not be correct for materials and
-potentials whose Poisson ratio is not 0.5. An alternative is to use
-:doc:`fix npt aniso <fix_nh>` with zero applied pressure on those 2
-dimensions, so that they respond to the tensile strain dynamically.
-
-The *wiggle* style oscillates the specified box length dimension
-sinusoidally with the specified amplitude and period. I.e. the box
-length L as a function of time is given by
-
-.. parsed-literal::
-
- L(t) = L0 + A sin(2*pi t/Tp)
-
-where L0 is its initial length. If the amplitude A is a positive
-number the box initially expands, then contracts, etc. If A is
-negative then the box initially contracts, then expands, etc. The
-amplitude can be in lattice or box distance units. See the discussion
-of the units keyword below.
-
-The *variable* style changes the specified box length dimension by
-evaluating a variable, which presumably is a function of time. The
-variable with *name1* must be an :doc:`equal-style variable <variable>`
-and should calculate a change in box length in units of distance.
-Note that this distance is in box units, not lattice units; see the
-discussion of the *units* keyword below. The formula associated with
-variable *name1* can reference the current timestep. Note that it
-should return the "change" in box length, not the absolute box length.
-This means it should evaluate to 0.0 when invoked on the initial
-timestep of the run following the definition of fix deform. It should
-evaluate to a value > 0.0 to dilate the box at future times, or a
-value < 0.0 to compress the box.
-
-The variable *name2* must also be an :doc:`equal-style variable <variable>` and should calculate the rate of box length
-change, in units of distance/time, i.e. the time-derivative of the
-*name1* variable. This quantity is used internally by LAMMPS to reset
-atom velocities when they cross periodic boundaries. It is computed
-internally for the other styles, but you must provide it when using an
-arbitrary variable.
-
-Here is an example of using the *variable* style to perform the same
-box deformation as the *wiggle* style formula listed above, where we
-assume that the current timestep = 0.
-
-.. parsed-literal::
-
- variable A equal 5.0
- variable Tp equal 10.0
- variable displace equal "v_A * sin(2*PI * step*dt/v_Tp)"
- variable rate equal "2*PI*v_A/v_Tp * cos(2*PI * step*dt/v_Tp)"
- fix 2 all deform 1 x variable v_displace v_rate remap v
-
-For the *scale*\ , *vel*\ , *erate*\ , *trate*\ , *volume*\ , *wiggle*\ , and
-*variable* styles, the box length is expanded or compressed around its
-mid point.
-
-
-----------
-
-
-For the *xy*\ , *xz*\ , and *yz* parameters, this is the meaning of their
-styles and values. Note that changing the tilt factors of a triclinic
-box does not change its volume.
-
-The *final*\ , *delta*\ , *vel*\ , and *erate* styles all change the shear
-strain at a "constant engineering shear strain rate". This means the
-tilt factor changes linearly with time from its initial to final
-value.
-
-For style *final*\ , the final tilt factor is specified. The value
-can be in lattice or box distance units. See the discussion of the
-units keyword below.
-
-For style *delta*\ , a plus or minus change in the tilt factor is
-specified. The value can be in lattice or box distance units. See
-the discussion of the units keyword below.
-
-For style *vel*\ , a velocity at which the tilt factor changes is
-specified in units of distance/time. This is effectively an
-"engineering shear strain rate", where rate = V/L0 and L0 is the
-initial box length perpendicular to the direction of shear. The
-distance can be in lattice or box distance units. See the discussion
-of the units keyword below. For example, if the initial tilt factor
-is 5 Angstroms, and the V is 10 Angstroms/psec, then after 1 psec, the
-tilt factor will be 15 Angstroms. After 2 psec, it will be 25
-Angstroms.
-
-The *erate* style changes a tilt factor at a "constant engineering
-shear strain rate". The units of the specified shear strain rate are
-1/time. See the :doc:`units <units>` command for the time units
-associated with different choices of simulation units,
-e.g. picoseconds for "metal" units). Shear strain is unitless and is
-defined as offset/length, where length is the box length perpendicular
-to the shear direction (e.g. y box length for xy deformation) and
-offset is the displacement distance in the shear direction (e.g. x
-direction for xy deformation) from the unstrained orientation.
-
-The tilt factor T as a function of time will change as
-
-.. parsed-literal::
-
- T(t) = T0 + L0*erate*dt
-
-where T0 is the initial tilt factor, L0 is the original length of the
-box perpendicular to the shear direction (e.g. y box length for xy
-deformation), and dt is the elapsed time (in time units). Thus if
-*erate* R is specified as 0.1 and time units are picoseconds, this
-means the shear strain will increase by 0.1 every picosecond. I.e. if
-the xy shear strain was initially 0.0, then strain after 1 psec = 0.1,
-strain after 2 psec = 0.2, etc. Thus the tilt factor would be 0.0 at
-time 0, 0.1*ybox at 1 psec, 0.2*ybox at 2 psec, etc, where ybox is the
-original y box length. R = 1 or 2 means the tilt factor will increase
-by 1 or 2 every picosecond. R = -0.01 means a decrease in shear
-strain by 0.01 every picosecond.
-
-The *trate* style changes a tilt factor at a "constant true shear
-strain rate". Note that this is not an "engineering shear strain
-rate", as the other styles are. Rather, for a "true" rate, the rate
-of change is constant, which means the tilt factor changes
-non-linearly with time from its initial to final value. The units of
-the specified shear strain rate are 1/time. See the
-:doc:`units <units>` command for the time units associated with
-different choices of simulation units, e.g. picoseconds for "metal"
-units). Shear strain is unitless and is defined as offset/length,
-where length is the box length perpendicular to the shear direction
-(e.g. y box length for xy deformation) and offset is the displacement
-distance in the shear direction (e.g. x direction for xy deformation)
-from the unstrained orientation.
-
-The tilt factor T as a function of time will change as
-
-.. parsed-literal::
-
- T(t) = T0 exp(trate*dt)
-
-where T0 is the initial tilt factor and dt is the elapsed time (in
-time units). Thus if *trate* R is specified as ln(1.1) and time units
-are picoseconds, this means the shear strain or tilt factor will
-increase by 10% every picosecond. I.e. if the xy shear strain was
-initially 0.1, then strain after 1 psec = 0.11, strain after 2 psec =
-0.121, etc. R = ln(2) or ln(3) means the tilt factor will double or
-triple every picosecond. R = ln(0.99) means the tilt factor will
-shrink by 1% every picosecond. Note that the change is continuous, so
-running with R = ln(2) for 10 picoseconds does not change the tilt
-factor by a factor of 10, but by a factor of 1024 since it doubles
-every picosecond. Note that the initial tilt factor must be non-zero
-to use the *trate* option.
-
-Note that shear strain is defined as the tilt factor divided by the
-perpendicular box length. The *erate* and *trate* styles control the
-tilt factor, but assume the perpendicular box length remains constant.
-If this is not the case (e.g. it changes due to another fix deform
-parameter), then this effect on the shear strain is ignored.
-
-The *wiggle* style oscillates the specified tilt factor sinusoidally
-with the specified amplitude and period. I.e. the tilt factor T as a
-function of time is given by
-
-.. parsed-literal::
-
- T(t) = T0 + A sin(2*pi t/Tp)
-
-where T0 is its initial value. If the amplitude A is a positive
-number the tilt factor initially becomes more positive, then more
-negative, etc. If A is negative then the tilt factor initially
-becomes more negative, then more positive, etc. The amplitude can be
-in lattice or box distance units. See the discussion of the units
-keyword below.
-
-The *variable* style changes the specified tilt factor by evaluating a
-variable, which presumably is a function of time. The variable with
-*name1* must be an :doc:`equal-style variable <variable>` and should
-calculate a change in tilt in units of distance. Note that this
-distance is in box units, not lattice units; see the discussion of the
-*units* keyword below. The formula associated with variable *name1*
-can reference the current timestep. Note that it should return the
-"change" in tilt factor, not the absolute tilt factor. This means it
-should evaluate to 0.0 when invoked on the initial timestep of the run
-following the definition of fix deform.
-
-The variable *name2* must also be an :doc:`equal-style variable <variable>` and should calculate the rate of tilt change,
-in units of distance/time, i.e. the time-derivative of the *name1*
-variable. This quantity is used internally by LAMMPS to reset atom
-velocities when they cross periodic boundaries. It is computed
-internally for the other styles, but you must provide it when using an
-arbitrary variable.
-
-Here is an example of using the *variable* style to perform the same
-box deformation as the *wiggle* style formula listed above, where we
-assume that the current timestep = 0.
-
-.. parsed-literal::
-
- variable A equal 5.0
- variable Tp equal 10.0
- variable displace equal "v_A * sin(2*PI * step*dt/v_Tp)"
- variable rate equal "2*PI*v_A/v_Tp * cos(2*PI * step*dt/v_Tp)"
- fix 2 all deform 1 xy variable v_displace v_rate remap v
-
-
-----------
-
-
-All of the tilt styles change the xy, xz, yz tilt factors during a
-simulation. In LAMMPS, tilt factors (xy,xz,yz) for triclinic boxes
-are normally bounded by half the distance of the parallel box length.
-See the discussion of the *flip* keyword below, to allow this bound to
-be exceeded, if desired.
-
-For example, if xlo = 2 and xhi = 12, then the x box length is 10 and
-the xy tilt factor must be between -5 and 5. Similarly, both xz and
-yz must be between -(xhi-xlo)/2 and +(yhi-ylo)/2. Note that this is
-not a limitation, since if the maximum tilt factor is 5 (as in this
-example), then configurations with tilt = ..., -15, -5, 5, 15, 25,
-... are all equivalent.
-
-To obey this constraint and allow for large shear deformations to be
-applied via the *xy*\ , *xz*\ , or *yz* parameters, the following
-algorithm is used. If *prd* is the associated parallel box length (10
-in the example above), then if the tilt factor exceeds the accepted
-range of -5 to 5 during the simulation, then the box is flipped to the
-other limit (an equivalent box) and the simulation continues. Thus
-for this example, if the initial xy tilt factor was 0.0 and "xy final
-100.0" was specified, then during the simulation the xy tilt factor
-would increase from 0.0 to 5.0, the box would be flipped so that the
-tilt factor becomes -5.0, the tilt factor would increase from -5.0 to
-5.0, the box would be flipped again, etc. The flip occurs 10 times
-and the final tilt factor at the end of the simulation would be 0.0.
-During each flip event, atoms are remapped into the new box in the
-appropriate manner.
-
-The one exception to this rule is if the 1st dimension in the tilt
-factor (x for xy) is non-periodic. In that case, the limits on the
-tilt factor are not enforced, since flipping the box in that dimension
-does not change the atom positions due to non-periodicity. In this
-mode, if you tilt the system to extreme angles, the simulation will
-simply become inefficient due to the highly skewed simulation box.
-
-
-----------
-
-
-Each time the box size or shape is changed, the *remap* keyword
-determines whether atom positions are remapped to the new box. If
-*remap* is set to *x* (the default), atoms in the fix group are
-remapped; otherwise they are not. Note that their velocities are not
-changed, just their positions are altered. If *remap* is set to *v*\ ,
-then any atom in the fix group that crosses a periodic boundary will
-have a delta added to its velocity equal to the difference in
-velocities between the lo and hi boundaries. Note that this velocity
-difference can include tilt components, e.g. a delta in the x velocity
-when an atom crosses the y periodic boundary. If *remap* is set to
-*none*\ , then neither of these remappings take place.
-
-Conceptually, setting *remap* to *x* forces the atoms to deform via an
-affine transformation that exactly matches the box deformation. This
-setting is typically appropriate for solids. Note that though the
-atoms are effectively "moving" with the box over time, it is not due
-to their having a velocity that tracks the box change, but only due to
-the remapping. By contrast, setting *remap* to *v* is typically
-appropriate for fluids, where you want the atoms to respond to the
-change in box size/shape on their own and acquire a velocity that
-matches the box change, so that their motion will naturally track the
-box without explicit remapping of their coordinates.
-
-.. note::
-
- When non-equilibrium MD (NEMD) simulations are performed using
- this fix, the option "remap v" should normally be used. This is
- because :doc:`fix nvt/sllod <fix_nvt_sllod>` adjusts the atom positions
- and velocities to induce a velocity profile that matches the changing
- box size/shape. Thus atom coordinates should NOT be remapped by fix
- deform, but velocities SHOULD be when atoms cross periodic boundaries,
- since that is consistent with maintaining the velocity profile already
- created by fix nvt/sllod. LAMMPS will warn you if the *remap* setting
- is not consistent with fix nvt/sllod.
-
-.. note::
-
- For non-equilibrium MD (NEMD) simulations using "remap v" it is
- usually desirable that the fluid (or flowing material, e.g. granular
- particles) stream with a velocity profile consistent with the
- deforming box. As mentioned above, using a thermostat such as :doc:`fix nvt/sllod <fix_nvt_sllod>` or :doc:`fix lavgevin <doc/fix_langevin>`
- (with a bias provided by :doc:`compute temp/deform <compute_temp_deform>`), will typically accomplish
- that. If you do not use a thermostat, then there is no driving force
- pushing the atoms to flow in a manner consistent with the deforming
- box. E.g. for a shearing system the box deformation velocity may vary
- from 0 at the bottom to 10 at the top of the box. But the stream
- velocity profile of the atoms may vary from -5 at the bottom to +5 at
- the top. You can monitor these effects using the :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`compute temp/deform <compute_temp_deform>`, and :doc:`compute temp/profile <compute_temp_profile>` commands. One way to induce
- atoms to stream consistent with the box deformation is to give them an
- initial velocity profile, via the :doc:`velocity ramp <velocity>`
- command, that matches the box deformation rate. This also typically
- helps the system come to equilibrium more quickly, even if a
- thermostat is used.
-
-.. note::
-
- If a :doc:`fix rigid <fix_rigid>` is defined for rigid bodies, and
- *remap* is set to *x*\ , then the center-of-mass coordinates of rigid
- bodies will be remapped to the changing simulation box. This will be
- done regardless of whether atoms in the rigid bodies are in the fix
- deform group or not. The velocity of the centers of mass are not
- remapped even if *remap* is set to *v*\ , since :doc:`fix nvt/sllod <fix_nvt_sllod>` does not currently do anything special
- for rigid particles. If you wish to perform a NEMD simulation of
- rigid particles, you can either thermostat them independently or
- include a background fluid and thermostat the fluid via :doc:`fix nvt/sllod <fix_nvt_sllod>`.
-
-The *flip* keyword allows the tilt factors for a triclinic box to
-exceed half the distance of the parallel box length, as discussed
-above. If the *flip* value is set to *yes*\ , the bound is enforced by
-flipping the box when it is exceeded. If the *flip* value is set to
-*no*\ , the tilt will continue to change without flipping. Note that if
-you apply large deformations, this means the box shape can tilt
-dramatically LAMMPS will run less efficiently, due to the large volume
-of communication needed to acquire ghost atoms around a processor's
-irregular-shaped sub-domain. For extreme values of tilt, LAMMPS may
-also lose atoms and generate an error.
-
-The *units* keyword determines the meaning of the distance units used
-to define various arguments. A *box* value selects standard distance
-units as defined by the :doc:`units <units>` command, e.g. Angstroms for
-units = real or metal. A *lattice* value means the distance units are
-in lattice spacings. The :doc:`lattice <lattice>` command must have
-been previously used to define the lattice spacing. Note that the
-units choice also affects the *vel* style parameters since it is
-defined in terms of distance/time. Also note that the units keyword
-does not affect the *variable* style. You should use the *xlat*\ ,
-*ylat*\ , *zlat* keywords of the :doc:`thermo_style <thermo_style>`
-command if you want to include lattice spacings in a variable formula.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`.
-
-This fix can perform deformation over multiple runs, using the *start*
-and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-You cannot apply x, y, or z deformations to a dimension that is
-shrink-wrapped via the :doc:`boundary <boundary>` comamnd.
-
-You cannot apply xy, yz, or xz deformations to a 2nd dimension (y in
-xy) that is shrink-wrapped via the :doc:`boundary <boundary>` comamnd.
-
-Related commands
-""""""""""""""""
-
-:doc:`change_box <change_box>`
-
-Default
-"""""""
-
-The option defaults are remap = x, flip = yes, and units = lattice.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_deposit.txt b/doc/html/_sources/fix_deposit.txt
deleted file mode 100644
index dc3e575fe..000000000
--- a/doc/html/_sources/fix_deposit.txt
+++ /dev/null
@@ -1,302 +0,0 @@
-.. index:: fix deposit
-
-fix deposit command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID deposit N type M seed keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* deposit = style name of this fix command
-* N = # of atoms or molecules to insert
-* type = atom type to assign to inserted atoms (offset for moleclue insertion)
-* M = insert a single atom or molecule every M steps
-* seed = random # seed (positive integer)
-* one or more keyword/value pairs may be appended to args
-* keyword = *region* or *id* or *global* or *local* or *near* or *gaussian* or *attempt* or *rate* or *vx* or *vy* or *vz* or *mol* or *rigid* or *shake* or *units*
-.. parsed-literal::
-
- *region* value = region-ID
- region-ID = ID of region to use as insertion volume
- *id* value = *max* or *next*
- max = atom ID for new atom(s) is max ID of all current atoms plus one
- next = atom ID for new atom(s) increments by one for every deposition
- *global* values = lo hi
- lo,hi = put new atom/molecule a distance lo-hi above all other atoms (distance units)
- *local* values = lo hi delta
- lo,hi = put new atom/molecule a distance lo-hi above any nearby atom beneath it (distance units)
- delta = lateral distance within which a neighbor is considered "nearby" (distance units)
- *near* value = R
- R = only insert atom/molecule if further than R from existing particles (distance units)
- *gaussian* values = xmid ymid zmid sigma
- xmid,ymid,zmid = center of the gaussian distribution (distance units)
- sigma = width of gaussian distribution (distance units)
- *attempt* value = Q
- Q = attempt a single insertion up to Q times
- *rate* value = V
- V = z velocity (y in 2d) at which insertion volume moves (velocity units)
- *vx* values = vxlo vxhi
- vxlo,vxhi = range of x velocities for inserted atom/molecule (velocity units)
- *vy* values = vylo vyhi
- vylo,vyhi = range of y velocities for inserted atom/molecule (velocity units)
- *vz* values = vzlo vzhi
- vzlo,vzhi = range of z velocities for inserted atom/molecule (velocity units)
- *target* values = tx ty tz
- tx,ty,tz = location of target point (distance units)
- *mol* value = template-ID
- template-ID = ID of molecule template specified in a separate :doc:`molecule <molecule>` command
- *molfrac* values = f1 f2 ... fN
- f1 to fN = relative probability of creating each of N molecules in template-ID
- *rigid* value = fix-ID
- fix-ID = ID of :doc:`fix rigid/small <fix_rigid>` command
- *shake* value = fix-ID
- fix-ID = ID of :doc:`fix shake <fix_shake>` command
- *units* value = *lattice* or *box*
- lattice = the geometry is defined in lattice units
- box = the geometry is defined in simulation box units
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 3 all deposit 1000 2 100 29494 region myblock local 1.0 1.0 1.0 units box
- fix 2 newatoms deposit 10000 1 500 12345 region disk near 2.0 vz -1.0 -0.8
- fix 4 sputter deposit 1000 2 500 12235 region sphere vz -1.0 -1.0 target 5.0 5.0 0.0 units lattice
- fix 5 insert deposit 200 2 100 777 region disk gaussian 5.0 5.0 9.0 1.0 units box
-
-Description
-"""""""""""
-
-Insert a single atom or molecule into the simulation domain every M
-timesteps until N atoms or molecules have been inserted. This is
-useful for simulating deposition onto a surface. For the remainder of
-this doc page, a single inserted atom or molecule is referred to as a
-"particle".
-
-If inserted particles are individual atoms, they are assigned the
-specified atom type. If they are molecules, the type of each atom in
-the inserted molecule is specified in the file read by the
-:doc:`molecule <molecule>` command, and those values are added to the
-specified atom type. E.g. if the file specifies atom types 1,2,3, and
-those are the atom types you want for inserted molecules, then specify
-*type* = 0. If you specify *type* = 2, the in the inserted molecule
-will have atom types 3,4,5.
-
-All atoms in the inserted particle are assigned to two groups: the
-default group "all" and the group specified in the fix deposit command
-(which can also be "all").
-
-If you are computing temperature values which include inserted
-particles, you will want to use the
-:doc:`compute_modify <compute_modify>` dynamic option, which insures the
-current number of atoms is used as a normalizing factor each time the
-temperature is computed.
-
-Care must be taken that inserted particles are not too near existing
-atoms, using the options described below. When inserting particles
-above a surface in a non-periodic box (see the
-:doc:`boundary <boundary>` command), the possibility of a particle
-escaping the surface and flying upward should be considered, since the
-particle may be lost or the box size may grow infinitely large. A
-:doc:`fix wall/reflect <fix_wall_reflect>` command can be used to
-prevent this behavior. Note that if a shrink-wrap boundary is used,
-it is OK to insert the new particle outside the box, however the box
-will immediately be expanded to include the new particle. When
-simulating a sputtering experiment it is probably more realistic to
-ignore those atoms using the :doc:`thermo_modify <thermo_modify>`
-command with the *lost ignore* option and a fixed
-:doc:`boundary <boundary>`.
-
-The fix deposit command must use the *region* keyword to define an
-insertion volume. The specified region must have been previously
-defined with a :doc:`region <region>` command. It must be defined with
-side = *in*\ .
-
-.. note::
-
- LAMMPS checks that the specified region is wholly inside the
- simulation box. It can do this correctly for orthonormal simulation
- boxes. However for :ref:`triclinic boxes <howto_12>`, it
- only tests against the larger orthonormal box that bounds the tilted
- simulation box. If the specified region includes volume outside the
- tilted box, then an insertion will likely fail, leading to a "lost
- atoms" error. Thus for triclinic boxes you should insure the
- specified region is wholly inside the simulation box.
-
-The locations of inserted particles are taken from uniform distributed
-random numbers, unless the *gaussian* keyword is used. Then the
-individual coordinates are taken from a gaussian distribution of
-width *sigma* centered on *xmid,ymid,zmid*\ .
-
-Individual atoms are inserted, unless the *mol* keyword is used. It
-specifies a *template-ID* previously defined using the
-:doc:`molecule <molecule>` command, which reads files that define one or
-more molecules. The coordinates, atom types, charges, etc, as well as
-any bond/angle/etc and special neighbor information for the molecule
-can be specified in the molecule file. See the
-:doc:`molecule <molecule>` command for details. The only settings
-required to be in each file are the coordinates and types of atoms in
-the molecule.
-
-If the molecule template contains more than one molecule, the relative
-probability of depositing each molecule can be specified by the
-*molfrac* keyword. N relative probablities, each from 0.0 to 1.0, are
-specified, where N is the number of molecules in the template. Each
-time a molecule is deposited, a random number is used to sample from
-the list of relative probabilities. The N values must sum to 1.0.
-
-If you wish to insert molecules via the *mol* keyword, that will be
-treated as rigid bodies, use the *rigid* keyword, specifying as its
-value the ID of a separate :doc:`fix rigid/small <fix_rigid_small>`
-command which also appears in your input script.
-
-If you wish to insert molecules via the *mol* keyword, that will have
-their bonds or angles constrained via SHAKE, use the *shake* keyword,
-specifying as its value the ID of a separate :doc:`fix shake <fix_shake>` command which also appears in your input script.
-
-Each timestep a particle is inserted, the coordinates for its atoms
-are chosen as follows. For insertion of individual atoms, the
-"position" referred to in the following description is the coordinate
-of the atom. For insertion of molecule, the "position" is the
-geometric center of the molecule; see the :doc:`molecule <molecule>` doc
-page for details. A random rotation of the molecule around its center
-point is performed, which determines the coordinates all the
-individual atoms.
-
-A random position within the region insertion volume is generated. If
-neither the *global* or *local* keyword is used, the random position
-is the trial position. If the *global* keyword is used, the random
-x,y values are used, but the z position of the new particle is set
-above the highest current atom in the simulation by a distance
-randomly chosen between lo/hi. (For a 2d simulation, this is done for
-the y position.) If the *local* keyword is used, the z position is
-set a distance between lo/hi above the highest current atom in the
-simulation that is "nearby" the chosen x,y position. In this context,
-"nearby" means the lateral distance (in x,y) between the new and old
-particles is less than the *delta* setting.
-
-Once a trial x,y,z position has been selected, the insertion is only
-performed if no current atom in the simulation is within a distance R
-of any atom in the new particle, including the effect of periodic
-boundary conditions if applicable. R is defined by the *near*
-keyword. Note that the default value for R is 0.0, which will allow
-atoms to strongly overlap if you are inserting where other atoms are
-present. This distance test is performed independently for each atom
-in an inserted molecule, based on the randomly rotated configuration
-of the molecule. If this test fails, a new random position within the
-insertion volume is chosen and another trial is made. Up to Q
-attempts are made. If the particle is not successfully inserted,
-LAMMPS prints a warning message.
-
-.. note::
-
- If you are inserting finite size particles or a molecule or
- rigid body consisting of finite-size particles, then you should
- typically set R larger than the distance at which any inserted
- particle may overlap with either a previouly inserted particle or an
- existing particle. LAMMPS will issue a warning if R is smaller than
- this value, based on the radii of existing and inserted particles.
-
-The *rate* option moves the insertion volume in the z direction (3d)
-or y direction (2d). This enables particles to be inserted from a
-successively higher height over time. Note that this parameter is
-ignored if the *global* or *local* keywords are used, since those
-options choose a z-coordinate for insertion independently.
-
-The vx, vy, and vz components of velocity for the inserted particle
-are set using the values specified for the *vx*\ , *vy*\ , and *vz*
-keywords. Note that normally, new particles should be a assigned a
-negative vertical velocity so that they move towards the surface. For
-molecules, the same velocity is given to every particle (no rotation
-or bond vibration).
-
-If the *target* option is used, the velocity vector of the inserted
-particle is changed so that it points from the insertion position
-towards the specified target point. The magnitude of the velocity is
-unchanged. This can be useful, for example, for simulating a
-sputtering process. E.g. the target point can be far away, so that
-all incident particles strike the surface as if they are in an
-incident beam of particles at a prescribed angle.
-
-The *id* keyword determines how atom IDs and molecule IDs are assigned
-to newly deposited particles. Molecule IDs are only assigned if
-molecules are being inserted. For the *max* setting, the atom and
-molecule IDs of all current atoms are checked. Atoms in the new
-particle are assigned IDs starting with the current maximum plus one.
-If a molecule is inserted it is assigned an ID = current maximum plus
-one. This means that if particles leave the system, the new IDs may
-replace the lost ones. For the *next* setting, the maximum ID of any
-atom and molecule is stored at the time the fix is defined. Each time
-a new particle is added, this value is incremented to assign IDs to
-the new atom(s) or molecule. Thus atom and molecule IDs for deposited
-particles will be consecutive even if particles leave the system over
-time.
-
-The *units* keyword determines the meaning of the distance units used
-for the other deposition parameters. A *box* value selects standard
-distance units as defined by the :doc:`units <units>` command,
-e.g. Angstroms for units = real or metal. A *lattice* value means the
-distance units are in lattice spacings. The :doc:`lattice <lattice>`
-command must have been previously used to define the lattice spacing.
-Note that the units choice affects all the keyword values that have
-units of distance or velocity.
-
-.. note::
-
- If you are monitoring the temperature of a system where the atom
- count is changing due to adding particles, you typically should use
- the :doc:`compute_modify dynamic yes <compute_modify>` command for the
- temperature compute you are using.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the deposition to :doc:`binary restart files <restart>`. This includes information about how many
-particles have been depositied, the random number generator seed, the
-next timestep for deposition, etc. See the
-:doc:`read_restart <read_restart>` command for info on how to re-specify
-a fix in an input script that reads a restart file, so that the
-operation of the fix continues in an uninterrupted fashion.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix. No global or per-atom quantities are stored by this fix for
-access by various :ref:`output commands <howto_15>`. No
-parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MISC package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The specified insertion region cannot be a "dynamic" region, as
-defined by the :doc:`region <region>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix pour <fix_pour>`, :doc:`region <region>`
-
-Default
-"""""""
-
-Insertions are performed for individual atoms, i.e. no *mol* setting
-is defined. If the *mol* keyword is used, the default for *molfrac*
-is an equal probabilities for all molecules in the template.
-Additional option defaults are id = max, delta = 0.0, near = 0.0,
-attempt = 10, rate = 0.0, vx = 0.0 0.0, vy = 0.0 0.0, vz = 0.0 0.0,
-and units = lattice.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_drag.txt b/doc/html/_sources/fix_drag.txt
deleted file mode 100644
index 400abf7fc..000000000
--- a/doc/html/_sources/fix_drag.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-.. index:: fix drag
-
-fix drag command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID drag x y z fmag delta
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* drag = style name of this fix command
-* x,y,z = coord to drag atoms towards
-* fmag = magnitude of force to apply to each atom (force units)
-* delta = cutoff distance inside of which force is not applied (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix center small-molecule drag 0.0 10.0 0.0 5.0 2.0
-
-Description
-"""""""""""
-
-Apply a force to each atom in a group to drag it towards the point
-(x,y,z). The magnitude of the force is specified by fmag. If an atom
-is closer than a distance delta to the point, then the force is not
-applied.
-
-Any of the x,y,z values can be specified as NULL which means do not
-include that dimension in the distance calculation or force
-application.
-
-This command can be used to steer one or more atoms to a new location
-in the simulation.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-This fix computes a global 3-vector of forces, which can be accessed
-by various :ref:`output commands <howto_15>`. This is the
-total force on the group of atoms by the drag force. The vector
-values calculated by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix spring <fix_spring>`, :doc:`fix spring/self <fix_spring_self>`,
-:doc:`fix spring/rg <fix_spring_rg>`, :doc:`fix smd <fix_smd>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_drude.txt b/doc/html/_sources/fix_drude.txt
deleted file mode 100644
index 4cc41f791..000000000
--- a/doc/html/_sources/fix_drude.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-.. index:: fix drude
-
-fix drude command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID drude flag1 flag2 ... flagN
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* drude = style name of this fix command
-* flag1 flag2 ... flagN = Drude flag for each atom type (1 to N) in the system
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all drude 1 1 0 1 0 2 2 2
- fix 1 all drude C C N C N D D D
-
-Description
-"""""""""""
-
-Assign each atom type in the system to be one of 3 kinds of atoms
-within the Drude polarization model. This fix is designed to be
-used with the :doc:`thermalized Drude oscillator model <tutorial_drude>`. Polarizable models in LAMMPS
-are described in :ref:`this Section <howto_25>`.
-
-The three possible types can be designated with an integer (0,1,2)
-or capital letter (N,C,D):
-
-* 0 or N = non-polarizable atom (not part of Drude model)
-* 1 or C = Drude core
-* 2 or D = Drude electron
-
-Restrictions
-""""""""""""
-
-
-This fix should be invoked before any other commands that implement
-the Drude oscillator model, such as :doc:`fix langevin/drude <fix_langevin_drude>`, :doc:`fix drude/transform <fix_drude_transform>`, :doc:`compute temp/drude <compute_temp_drude>`, :doc:`pair_style thole <pair_thole>`.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix langevin/drude <fix_langevin_drude>`, :doc:`fix drude/transform <fix_drude_transform>`, :doc:`compute temp/drude <compute_temp_drude>`, :doc:`pair_style thole <pair_thole>`
-
-**Default:** None
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_drude_transform.txt b/doc/html/_sources/fix_drude_transform.txt
deleted file mode 100644
index 866ef8649..000000000
--- a/doc/html/_sources/fix_drude_transform.txt
+++ /dev/null
@@ -1,227 +0,0 @@
-.. index:: fix drude/transform/direct
-
-fix drude/transform/direct command
-==================================
-
-fix drude/transform/inverse command
-===================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID style keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* style = *drude/transform/direct* or *drude/transform/inverse*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 3 all drude/transform/direct
- fix 1 all drude/transform/inverse
-
-Description
-"""""""""""
-
-Transform the coordinates of Drude oscillators from real to reduced
-and back for thermalizing the Drude oscillators as described in
-:ref:`(Lamoureux) <Lamoureux>` using a Nose-Hoover thermostat. This fix is
-designed to be used with the :doc:`thermalized Drude oscillator model <tutorial_drude>`. Polarizable models in LAMMPS are
-described in :ref:`this Section <howto_25>`.
-
-Drude oscillators are a pair of atoms representing a single
-polarizable atom. Ideally, the mass of Drude particles would vanish
-and their positions would be determined self-consistently by iterative
-minimization of the energy, the cores' positions being fixed. It is
-however more efficient and it yields comparable results, if the Drude
-oscillators (the motion of the Drude particle relative to the core)
-are thermalized at a low temperature. In that case, the Drude
-particles need a small mass.
-
-The thermostats act on the reduced degrees of freedom, which are
-defined by the following equations. Note that in these equations
-upper case denotes atomic or center of mass values and lower case
-denotes Drude particle or dipole values. Primes denote the transformed
-(reduced) values, while bare letters denote the original values.
-
-Masses:
-
-.. math::
-
- \begin{equation} M' = M + m \end{equation}
-
-
-.. math::
-
- \begin{equation} m' = \frac {M\, m } {M'} \end{equation}
-
-Positions:
-
-.. math::
-
- \begin{equation} X' = \frac {M\, X + m\, x} {M'}\end{equation}
-
-
-.. math::
-
- \begin{equation} x' = x - X \end{equation}
-
-Velocities:
-
-.. math::
-
- \begin{equation} V' = \frac {M\, V + m\, v} {M'}\end{equation}
-
-
-.. math::
-
- \begin{equation} v' = v - V \end{equation}
-
-Forces:
-
-.. math::
-
- \begin{equation} F' = F + f \end{equation}
-
-
-.. math::
-
- \begin{equation} f' = \frac { M\, f - m\, F} {M'}\end{equation}
-
-This transform conserves the total kinetic energy
-
-.. math::
-
- \begin{equation} \frac 1 2 \, (M\, V^2\ + m\, v^2)
- = \frac 1 2 \, (M'\, V'^2\ + m'\, v'^2) \end{equation}
-
-and the virial defined with absolute positions
-
-.. math::
-
- \begin{equation} X\, F + x\, f = X'\, F' + x'\, f' \end{equation}
-
-
-----------
-
-
-This fix requires each atom know whether it is a Drude particle or
-not. You must therefore use the :doc:`fix drude <fix_drude>` command to
-specify the Drude status of each atom type.
-
-.. note::
-
- only the Drude core atoms need to be in the group specified for
- this fix. A Drude electron will be transformed together with its core
- even if it is not itself in the group. It is safe to include Drude
- electrons or non-polarizable atoms in the group. The non-polarizable
- atoms will simply not be transformed.
-
-
-----------
-
-
-This fix does NOT perform time integration. It only transform masses,
-coordinates, velocities and forces. Thus you must use separate time
-integration fixes, like :doc:`fix nve <fix_nve>` or :doc:`fix npt <fix_nh>` to actually update the velocities and positions of
-atoms. In order to thermalize the reduced degrees of freedom at
-different temperatures, two Nose-Hoover thermostats must be defined,
-acting on two distinct groups.
-
-.. note::
-
- The *fix drude/transform/direct* command must appear before any
- Nose-Hoover thermostating fixes. The *fix drude/transform/inverse*
- command must appear after any Nose-Hoover thermostating fixes.
-
-Example:
-
-.. parsed-literal::
-
- fix fDIRECT all drude/transform/direct
- fix fNVT gCORES nvt temp 300.0 300.0 100
- fix fNVT gDRUDES nvt temp 1.0 1.0 100
- fix fINVERSE all drude/transform/inverse
- compute TDRUDE all temp/drude
- thermo_style custom step cpu etotal ke pe ebond ecoul elong press vol temp c_TDRUDE[1] c_TDRUDE[2]
-
-In this example, *gCORES* is the group of the atom cores and *gDRUDES*
-is the group of the Drude particles (electrons). The centers of mass
-of the Drude oscillators will be thermostated at 300.0 and the
-internal degrees of freedom will be thermostated at 1.0. The
-temperatures of cores and Drude particles, in center-of-mass and
-relative coordinates, are calculated using :doc:`compute temp/drude <compute_temp_drude>`
-
-In addition, if you want to use a barostat to simulate a system at
-constant pressure, only one of the Nose-Hoover fixes must be *npt*\ ,
-the other one should be *nvt*\ . You must add a *compute temp/com* and a
-*fix_modify* command so that the temperature of the *npt* fix be just
-that of its group (the Drude cores) but the pressure be the overall
-pressure *thermo_press*\ .
-
-Example:
-
-.. parsed-literal::
-
- compute cTEMP_CORE gCORES temp/com
- fix fDIRECT all drude/transform/direct
- fix fNPT gCORES npt temp 298.0 298.0 100 iso 1.0 1.0 500
- fix_modify fNPT temp cTEMP_CORE press thermo_press
- fix fNVT gDRUDES nvt temp 5.0 5.0 100
- fix fINVERSE all drude/transform/inverse
-
-In this example, *gCORES* is the group of the atom cores and *gDRUDES*
-is the group of the Drude particles. The centers of mass of the Drude
-oscillators will be thermostated at 298.0 and the internal degrees of
-freedom will be thermostated at 5.0. The whole system will be
-barostated at 1.0.
-
-In order to avoid the flying ice cube problem (irreversible transfer
-of linear momentum to the center of mass of the system), you may need
-to add a *fix momentum* command:
-
-.. parsed-literal::
-
- fix fMOMENTUM all momentum 100 linear 1 1 1
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix drude <fix_drude>`,
-:doc:`fix langevin/drude <fix_langevin_drude>`,
-:doc:`compute temp/drude <compute_temp_drude>`,
-:doc:`pair_style thole <pair_thole>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Lamoureux:
-
-
-
-**(Lamoureux)** Lamoureux and Roux, J Chem Phys, 119, 3025-3039 (2003).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_dt_reset.txt b/doc/html/_sources/fix_dt_reset.txt
deleted file mode 100644
index d0eb8d1f3..000000000
--- a/doc/html/_sources/fix_dt_reset.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-.. index:: fix dt/reset
-
-fix dt/reset command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID dt/reset N Tmin Tmax Xmax keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* dt/reset = style name of this fix command
-* N = recompute dt every N timesteps
-* Tmin = minimum dt allowed which can be NULL (time units)
-* Tmax = maximum dt allowed which can be NULL (time units)
-* Xmax = maximum distance for an atom to move in one timestep (distance units)
-* zero or more keyword/value pairs may be appended
-* keyword = *units*
-
-.. parsed-literal::
-
- *units* value = *lattice* or *box*
- lattice = Xmax is defined in lattice units
- box = Xmax is defined in simulation box units
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 5 all dt/reset 10 1.0e-5 0.01 0.1
- fix 5 all dt/reset 10 0.01 2.0 0.2 units box
-
-Description
-"""""""""""
-
-Reset the timestep size every N steps during a run, so that no atom
-moves further than Xmax, based on current atom velocities and forces.
-This can be useful when starting from a configuration with overlapping
-atoms, where forces will be large. Or it can be useful when running
-an impact simulation where one or more high-energy atoms collide with
-a solid, causing a damage cascade.
-
-This fix overrides the timestep size setting made by the
-:doc:`timestep <timestep>` command. The new timestep size *dt* is
-computed in the following manner.
-
-For each atom, the timestep is computed that would cause it to
-displace *Xmax* on the next integration step, as a function of its
-current velocity and force. Since performing this calculation exactly
-would require the solution to a quartic equation, a cheaper estimate
-is generated. The estimate is conservative in that the atom's
-displacement is guaranteed not to exceed *Xmax*\ , though it may be
-smaller.
-
-Given this putative timestep for each atom, the minimum timestep value
-across all atoms is computed. Then the *Tmin* and *Tmax* bounds are
-applied, if specified. If one (or both) is specified as NULL, it is
-not applied.
-
-When the :doc:`run style <run_style>` is *respa*\ , this fix resets the
-outer loop (largest) timestep, which is the same timestep that the
-:doc:`timestep <timestep>` command sets.
-
-Note that the cumulative simulation time (in time units), which
-accounts for changes in the timestep size as a simulation proceeds,
-can be accessed by the :doc:`thermo_style time <thermo_style>` keyword.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar stores
-the last timestep on which the timestep was reset to a new value.
-
-The scalar value calculated by this fix is "intensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`timestep <timestep>`
-
-Default
-"""""""
-
-The option defaults is units = lattice.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_efield.txt b/doc/html/_sources/fix_efield.txt
deleted file mode 100644
index d0bce7043..000000000
--- a/doc/html/_sources/fix_efield.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-.. index:: fix efield
-
-fix efield command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID efield ex ey ez keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* efield = style name of this fix command
-* ex,ey,ez = E-field component values (electric field units)
-* any of ex,ey,ez can be a variable (see below)
-* zero or more keyword/value pairs may be appended to args
-* keyword = *region* or *energy*
-.. parsed-literal::
-
- *region* value = region-ID
- region-ID = ID of region atoms must be in to have added force
- *energy* value = v_name
- v_name = variable with name that calculates the potential energy of each atom in the added E-field
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix kick external-field efield 1.0 0.0 0.0
- fix kick external-field efield 0.0 0.0 v_oscillate
-
-Description
-"""""""""""
-
-Add a force F = qE to each charged atom in the group due to an
-external electric field being applied to the system. If the system
-contains point-dipoles, also add a torque on the dipoles due to the
-external electric field.
-
-For charges, any of the 3 quantities defining the E-field components
-can be specified as an equal-style or atom-style
-:doc:`variable <variable>`, namely *ex*\ , *ey*\ , *ez*\ . If the value is a
-variable, it should be specified as v_name, where name is the variable
-name. In this case, the variable will be evaluated each timestep, and
-its value used to determine the E-field component.
-
-For point-dipoles, equal-style variables can be used, but atom-style
-variables are not currently supported, since they imply a spatial
-gradient in the electric field which means additional terms with
-gradients of the field are required for the force and torque on
-dipoles.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent E-field.
-
-Atom-style variables can specify the same formulas as equal-style
-variables but can also include per-atom values, such as atom
-coordinates. Thus it is easy to specify a spatially-dependent E-field
-with optional time-dependence as well.
-
-If the *region* keyword is used, the atom must also be in the
-specified geometric :doc:`region <region>` in order to have force added
-to it.
-
-
-----------
-
-
-Adding a force or torque to atoms implies a change in their potential
-energy as they move or rotate due to the applied E-field.
-
-For dynamics via the "run" command, this energy can be optionally
-added to the system's potential energy for thermodynamic output (see
-below). For energy minimization via the "minimize" command, this
-energy must be added to the system's potential energy to formulate a
-self-consistent minimization problem (see below).
-
-The *energy* keyword is not allowed if the added field is a constant
-vector (ex,ey,ez), with all components defined as numeric constants
-and not as variables. This is because LAMMPS can compute the energy
-for each charged particle directly as E = -x dot qE = -q (x*ex + y*ey
-+ z*ez), so that -Grad(E) = F. Similarly for point-dipole particles
-the energy can be computed as E = -mu dot E = -(mux*ex + muy*ey +
-muz*ez).
-
-The *energy* keyword is optional if the added force is defined with
-one or more variables, and if you are performing dynamics via the
-:doc:`run <run>` command. If the keyword is not used, LAMMPS will set
-the energy to 0.0, which is typically fine for dynamics.
-
-The *energy* keyword is required if the added force is defined with
-one or more variables, and you are performing energy minimization via
-the "minimize" command for charged particles. It is not required for
-point-dipoles, but a warning is issued since the minimizer in LAMMPS
-does not rotate dipoles, so you should not expect to be able to
-minimize the orientation of dipoles in an applied electric field.
-
-The *energy* keyword specifies the name of an atom-style
-:doc:`variable <variable>` which is used to compute the energy of each
-atom as function of its position. Like variables used for *ex*\ , *ey*\ ,
-*ez*\ , the energy variable is specified as v_name, where name is the
-variable name.
-
-Note that when the *energy* keyword is used during an energy
-minimization, you must insure that the formula defined for the
-atom-style :doc:`variable <variable>` is consistent with the force
-variable formulas, i.e. that -Grad(E) = F. For example, if the force
-due to the electric field were a spring-like F = kx, then the energy
-formula should be E = -0.5kx^2. If you don't do this correctly, the
-minimization will not converge properly.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the potential "energy" inferred by the added force due to
-the electric field to the system's potential energy as part of
-:doc:`thermodynamic output <thermo_style>`. This is a fictitious
-quantity but is needed so that the :doc:`minimize <minimize>` command
-can include the forces added by this fix in a consistent manner.
-I.e. there is a decrease in potential energy when atoms move in the
-direction of the added force due to the electric field.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix adding its forces. Default is the outermost level.
-
-This fix computes a global scalar and a global 3-vector of forces,
-which can be accessed by various :ref:`output commands <howto_15>`. The scalar is the potential
-energy discussed above. The vector is the total force added to the
-group of atoms. The scalar and vector values calculated by this fix
-are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command. You should not
-specify force components with a variable that has time-dependence for
-use with a minimizer, since the minimizer increments the timestep as
-the iteration count during the minimization.
-
-.. note::
-
- If you want the fictitious potential energy associated with the
- added forces to be included in the total potential energy of the
- system (the quantity being minimized), you MUST enable the
- :doc:`fix_modify <fix_modify>` *energy* option for this fix.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MISC package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix addforce <fix_addforce>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_ehex.txt b/doc/html/_sources/fix_ehex.txt
deleted file mode 100644
index 87148a44e..000000000
--- a/doc/html/_sources/fix_ehex.txt
+++ /dev/null
@@ -1,211 +0,0 @@
-.. index:: fix ehex
-
-fix ehex command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID ehex nevery F keyword value
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* ehex = style name of this fix command
-* nevery = add/subtract heat every this many timesteps
-* F = energy flux into the reservoir (energy/time units)
-* zero or more keyword/value pairs may be appended to args
-* keyword = *region* or *constrain* or *com* or *hex*
-.. parsed-literal::
-
- *region* value = region-ID
- region-ID = ID of region (reservoir) atoms must be in for added thermostatting force
- *constrain* value = none
- apply the constraint algorithm (SHAKE or RATTLE) again at the end of the timestep
- *com* value = none
- rescale all sites of a constrained cluster of atom if its COM is in the reservoir
- *hex* value = none
- omit the coordinate correction to recover the HEX algorithm
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- # Lennard-Jones, from examples/in.ehex.lj
-
-.. parsed-literal::
-
- fix fnve all nve
- # specify regions rhot and rcold
- ...
- fix fhot all ehex 1 0.15 region rhot
- fix fcold all ehex 1 -0.15 region rcold
-
-.. parsed-literal::
-
- # SPC/E water, from examples/in.ehex.spce
- fix fnve all nve
- # specify regions rhot and rcold
- ...
- fix fhot all ehex 1 0.075 region rhot constrain com
- fix fcold all ehex 1 -0.075 region rcold constrain com
- fix frattle all rattle 1e-10 400 0 b 1 a 1
-
-Description
-"""""""""""
-
-This fix implements the asymmetric version of the enhanced heat
-exchange algorithm :ref:`(Wirnsberger) <Wirnsberger>`. The eHEX algorithm is
-an extension of the heat exchange algorithm :ref:`(Ikeshoji) <Ikeshoji>` and
-adds an additional coordinate integration to account for higher-order
-truncation terms in the operator splitting. The original HEX
-algorithm (implemented as :doc:`fix heat <fix_heat>`) is known to
-exhibit a slight energy drift limiting the accessible simulation times
-to a few nanoseconds. This issue is greatly improved by the new
-algorithm decreasing the energy drift by at least a factor of a
-hundred (LJ and SPC/E water) with little computational overhead.
-
-In both algorithms (non-translational) kinetic energy is constantly
-swapped between regions (reservoirs) to impose a heat flux onto the
-system. The equations of motion are therefore modified if a particle
-:math:`i` is located inside a reservoir :math:`\Gamma_k` where :math:`k>0`. We
-use :math:`\Gamma_0` to label those parts of the simulation box which
-are not thermostatted.) The input parameter *region-ID* of this fix
-corresponds to :math:`k`. The energy swap is modelled by introducing an
-additional thermostatting force to the equations of motion, such that
-the time evolution of coordinates and momenta of particle :math:`i`
-becomes :ref:`(Wirnsberger) <Wirnsberger>`
-
-.. image:: Eqs/fix_ehex_eom.jpg
- :align: center
-
-The thermostatting force is given by
-
-.. image:: Eqs/fix_ehex_f.jpg
- :align: center
-
-where :math:`m_i` is the mass and :math:`k(\mathbf r_i)` maps the particle
-position to the respective reservoir. The quantity
-:math:`F_{\Gamma_{k(\mathbf r_i)}}` corresponds to the input parameter
-*F*\ , which is the energy flux into the reservoir. Furthermore,
-:math:`K_{\Gamma_{k(\mathbf r_i)}}` and :math:`v_{\Gamma_{k(\mathbf r_i)}}`
-denote the non-translational kinetic energy and the centre of mass
-velocity of that reservoir. The thermostatting force does not affect
-the centre of mass velocities of the individual reservoirs and the
-entire simulation box. A derivation of the equations and details on
-the numerical implementation with velocity Verlet in LAMMPS can be
-found in reference "(Wirnsberger)"#_Wirnsberger.
-
-.. note::
-
- This fix only integrates the thermostatting force and must be
- combined with another integrator, such as :doc:`fix nve <fix_nve>`, to
- solve the full equations of motion.
-
-This fix is different from a thermostat such as :doc:`fix nvt <fix_nh>`
-or :doc:`fix temp/rescale <fix_temp_rescale>` in that energy is
-added/subtracted continually. Thus if there isn't another mechanism
-in place to counterbalance this effect, the entire system will heat or
-cool continuously.
-
-.. note::
-
- If heat is subtracted from the system too aggressively so that
- the group's kinetic energy would go to zero, then LAMMPS will halt
- with an error message. Increasing the value of *nevery* means that
- heat is added/subtracted less frequently but in larger portions. The
- resulting temperature profile will therefore be the same.
-
-This fix will default to :doc:`fix_heat <fix_heat>` (HEX algorithm) if
-the keyword *hex* is specified.
-
-
-----------
-
-
-**Compatibility with SHAKE and RATTLE (rigid molecules)**\ :
-
-This fix is compatible with :doc:`fix shake <fix_shake>` and :doc:`fix rattle <fix_rattle>`. If either of these constraining algorithms is
-specified in the input script and the keyword *constrain* is set, the
-bond distances will be corrected a second time at the end of the
-integration step. It is recommended to specify the keyword *com* in
-addition to the keyword *constrain*\ . With this option all sites of a
-constrained cluster are rescaled, if its centre of mass is located
-inside the region. Rescaling all sites of a cluster by the same factor
-does not introduce any velocity components along fixed bonds. No
-rescaling takes place if the centre of mass lies outside the region.
-
-.. note::
-
- You can only use the keyword *com* along with *constrain*\ .
-
-To achieve the highest accuracy it is recommended to use :doc:`fix rattle <fix_rattle>` with the keywords *constrain* and *com* as
-shown in the second example. Only if RATTLE is employed, the velocity
-constraints will be satisfied.
-
-.. note::
-
- Even if RATTLE is used and the keywords *com* and *constrain*
- are both set, the coordinate constraints will not necessarily be
- satisfied up to the target precision. The velocity constraints are
- satisfied as long as all sites of a cluster are rescaled (keyword
- *com*\ ) and the cluster does not span adjacent reservoirs. The current
- implementation of the eHEX algorithm introduces a small error in the
- bond distances, which goes to zero with order three in the
- timestep. For example, in a simulation of SPC/E water with a timestep
- of 2 fs the maximum relative error in the bond distances was found to
- be on the order of :math:`10^{-7}` for relatively large
- temperature gradients. A higher precision can be achieved by
- decreasing the timestep.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the RIGID package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix heat <fix_heat>`, :doc:`fix thermal/conductivity <fix_thermal_conductivity>`, :doc:`compute temp <compute_temp>`, :doc:`compute temp/region <compute_temp_region>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Ikeshoji:
-
-
-
-**(Ikeshoji)** Ikeshoji and Hafskjold, Molecular Physics, 81, 251-261 (1994).
-
-.. _Wirnsberger:
-
-
-
-**(Wirnsberger)** Wirnsberger, Frenkel, and Dellago, J Chem Phys, 143,
-124104 (2015).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_enforce2d.txt b/doc/html/_sources/fix_enforce2d.txt
deleted file mode 100644
index fda7b043d..000000000
--- a/doc/html/_sources/fix_enforce2d.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-.. index:: fix enforce2d
-
-fix enforce2d command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID enforce2d
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* enforce2d = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 5 all enforce2d
-
-Description
-"""""""""""
-
-Zero out the z-dimension velocity and force on each atom in the group.
-This is useful when running a 2d simulation to insure that atoms do
-not move from their initial z coordinate.
-
-
-----------
-
-
-Styles with a 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
-:doc:`Section_accelerate <Section_accelerate>` 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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_eos_cv.txt b/doc/html/_sources/fix_eos_cv.txt
deleted file mode 100644
index d1b1fc559..000000000
--- a/doc/html/_sources/fix_eos_cv.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-.. index:: fix eos/cv
-
-fix eos/cv command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID eos/cv cv
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* eos/cv = style name of this fix command
-* cv = constant-volume heat capacity (energy/temperature units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all eos/cv 0.01
-
-Description
-"""""""""""
-
-Fix *eos/cv* applies a mesoparticle equation of state to relate the
-particle internal energy (u_i) to the particle internal temperature
-(dpdTheta_i). The *eos/cv* mesoparticle equation of state requires
-the constant-volume heat capacity, and is defined as follows:
-
-.. image:: Eqs/fix_eos-cv.jpg
- :align: center
-
-where Cv is the constant-volume heat capacity, u_cond is the internal
-conductive energy, and u_mech is the internal mechanical energy. Note
-that alternative definitions of the mesoparticle equation of state are
-possible.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-DPD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This command also requires use of the :doc:`atom_style dpd <atom_style>`
-command.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix shardlow <fix_shardlow>`, :doc:`pair dpd/fdt <pair_dpd_fdt>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Larentzos:
-
-
-
-**(Larentzos)** J.P. Larentzos, J.K. Brennan, J.D. Moore, and
-W.D. Mattson, "LAMMPS Implementation of Constant Energy Dissipative
-Particle Dynamics (DPD-E)", ARL-TR-6863, U.S. Army Research
-Laboratory, Aberdeen Proving Ground, MD (2014).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_eos_table.txt b/doc/html/_sources/fix_eos_table.txt
deleted file mode 100644
index c6fc22510..000000000
--- a/doc/html/_sources/fix_eos_table.txt
+++ /dev/null
@@ -1,133 +0,0 @@
-.. index:: fix eos/table
-
-fix eos/table command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID eos/table style file N keyword
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* eos/table = style name of this fix command
-* style = *linear* = method of interpolation
-* file = filename containing the tabulated equation of state
-* N = use N values in *linear* tables
-* keyword = name of table keyword correponding to table file
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all eos/table linear eos.table 100000 KEYWORD
-
-Description
-"""""""""""
-
-Fix *eos/table* applies a tabulated mesoparticle equation of state to
-relate the particle internal energy (u_i) to the particle internal
-temperature (dpdTheta_i).
-
-Fix *eos/table* creates interpolation tables of length *N* from
-internal energy values listed in a file as a function of internal
-temperature.
-
-The interpolation tables are created by fitting cubic splines to the
-file values and interpolating energy values at each of *N* internal
-temperatures, and vice-versa. During a simulation, these tables are
-used to interpolate internal energy or temperature values as needed.
-The interpolation is done with the *linear* style.
-
-For the *linear* style, the internal temperature is used to find 2
-surrounding table values from which an internal energy is computed by
-linear interpolation, and vice-versa.
-
-The filename specifies a file containing tabulated internal
-temperature and internal energy values. The keyword specifies a
-section of the file. The format of this file is described below.
-
-
-----------
-
-
-The format of a tabulated file is as follows (without the
-parenthesized comments):
-
-.. parsed-literal::
-
- # EOS TABLE (one or more comment or blank lines)
-
-.. parsed-literal::
-
- KEYWORD (keyword is first text on line)
- N 500 (N parameter)
- (blank)
- 1 1.00 0.000 (index, internal temperature, internal energy)
- 2 1.02 0.001
- ...
- 500 10.0 0.500
-
-A section begins with a non-blank line whose 1st character is not a
-"#"; blank lines or lines starting with "#" can be used as comments
-between sections. The first line begins with a keyword which
-identifies the section. The line can contain additional text, but the
-initial text must match the argument specified in the fix command.
-
-The next line lists the number of table entries. The parameter "N" is
-required and its value is the number of table entries that follow.
-Note that this may be different than the *N* specified in the :doc:`fix eos/table <fix_style>` command. Let Ntable = *N* in the fix
-command, and Nfile = "N" in the tabulated file. What LAMMPS does is a
-preliminary interpolation by creating splines using the Nfile
-tabulated values as nodal points. It uses these to interpolate as
-needed to generate energy and temperature values at Ntable different
-points. The resulting tables of length Ntable are then used as
-described above, when computing energy and temperature relationships.
-This means that if you want the interpolation tables of length Ntable
-to match exactly what is in the tabulated file (with effectively no
-preliminary interpolation), you should set Ntable = Nfile.
-
-Following a blank line, the next N lines list the tabulated values.
-On each line, the 1st value is the index from 1 to N, the 2nd value is
-the internal temperature (in temperature units), the 3rd value is the
-internal energy (in energy units).
-
-Note that the internal temperature and internal energy values must
-increase from one line to the next.
-
-Note that one file can contain many sections, each with a tabulated
-potential. LAMMPS reads the file section by section until it finds
-one that matches the specified keyword.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-DPD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This command also requires use of the :doc:`atom_style dpd <atom_style>`
-command.
-
-The equation of state must be a monotonically increasing function.
-
-An error will occur if the internal temperature or internal energies
-are not within the table cutoffs.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix shardlow <fix_shardlow>`, :doc:`pair dpd/fdt <dpd_fdt>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_eos_table_rx.txt b/doc/html/_sources/fix_eos_table_rx.txt
deleted file mode 100644
index 9a46afd95..000000000
--- a/doc/html/_sources/fix_eos_table_rx.txt
+++ /dev/null
@@ -1,169 +0,0 @@
-.. index:: fix eos/table/rx
-
-fix eos/table/rx command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID eos/table/rx style file1 N keyword file2
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* eos/table/rx = style name of this fix command
-* style = *linear* = method of interpolation
-* file1 = filename containing the tabulated equation of state
-* N = use N values in *linear* tables
-* keyword = name of table keyword correponding to table file
-* file2 = filename containing the heats of formation of each species
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all eos/table/rx linear eos.table 10000 KEYWORD thermo.table
-
-Description
-"""""""""""
-
-Fix *eos/table/rx* applies a tabulated mesoparticle equation
-of state to relate the concentration-dependent particle internal
-energy (u_i) to the particle internal temperature (dpdTheta_i).
-
-The concentration-dependent particle internal energy (u_i) is
-computed according to the following relation:
-
-.. image:: Eqs/fix_eos_table_rx.jpg
- :align: center
-
-where *m* is the number of species, *c_i,j* is the concentration of
-species *j* in particle *i*\ , *u_j* is the internal energy of species j,
-*DeltaH_f,j* is the heat of formation of species *j*\ , N is the number of
-molecules represented by the coarse-grained particle, kb is the
-Boltzmann constant, and T is the temperature of the system.
-
-Fix *eos/table/rx* creates interpolation tables of length *N* from *m*
-internal energy values of each species *u_j* listed in a file as a
-function of internal temperature. During a simulation, these tables
-are used to interpolate internal energy or temperature values as needed.
-The interpolation is done with the *linear* style. For the *linear* style,
-the internal temperature is used to find 2 surrounding table values from
-which an internal energy is computed by linear interpolation. A secant
-solver is used to determine the internal temperature from the internal energy.
-
-The first filename specifies a file containing tabulated internal
-temperature and *m* internal energy values for each species *u_j*\ .
-The keyword specifies a section of the file. The format of this
-file is described below.
-
-The second filename specifies a file containing heat of formation
-*DeltaH_f,j* for each species.
-
-
-----------
-
-
-The format of a tabulated file is as follows (without the
-parenthesized comments):
-
-.. parsed-literal::
-
- # EOS TABLE (one or more comment or blank lines)
-
-.. parsed-literal::
-
- KEYWORD (keyword is first text on line)
- N 500 h2 no2 n2 ... no (N parameter species1 species2 ... speciesN)
- (blank)
- 1 1.00 0.000 ... 0.0000 (index, internal temperature, internal energy of species 1, ..., internal energy of species m)
- 2 1.02 0.001 ... 0.0002
- ...
- 500 10.0 0.500 ... 1.0000
-
-A section begins with a non-blank line whose 1st character is not a
-"#"; blank lines or lines starting with "#" can be used as comments
-between sections. The first line begins with a keyword which
-identifies the section. The line can contain additional text, but the
-initial text must match the argument specified in the fix command.
-
-The next line lists the number of table entries and the species names
-that correspond with all the species listed in the reaction equations
-through the *fix rx* command.
-The parameter "N" is required and its value is the number of table
-entries that follow. Let Nfile = "N" in the tabulated file.
-What LAMMPS does is a preliminary interpolation by creating splines
-using the Nfile tabulated values as nodal points.
-
-Following a blank line, the next N lines list the tabulated values.
-On each line, the 1st value is the index from 1 to N, the 2nd value is
-the internal temperature (in temperature units), the 3rd value until
-the *m+3* value are the internal energies of the m species (in energy units).
-
-Note that all internal temperature and internal energy values must
-increase from one line to the next.
-
-Note that one file can contain many sections, each with a tabulated
-potential. LAMMPS reads the file section by section until it finds
-one that matches the specified keyword.
-
-
-----------
-
-
-The format of a heat of formation file is as follows (without the
-parenthesized comments):
-
-.. parsed-literal::
-
- # HEAT OF FORMATION TABLE (one or more comment or blank lines)
-
-.. parsed-literal::
-
- (blank)
- h2 0.00 (species name, heat of formation)
- no2 0.34
- n2 0.00
- ...
- no 0.93
-
-Note that the species can be listed in any order. The tag that is
-used as the species name must correspond with the tags used to define
-the reactions with the :doc:`fix rx <fix_rx>` command.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-DPD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This command also requires use of the :doc:`atom_style dpd <atom_style>`
-command.
-
-The equation of state must be a monotonically increasing function.
-
-An error will occur if the internal temperature or internal energies
-are not within the table cutoffs.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix rx <fix_rx>`,
-:doc:`pair dpd/fdt <dpd_fdt>`
-
-**Default:** none
-
-
-----------
-
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_evaporate.txt b/doc/html/_sources/fix_evaporate.txt
deleted file mode 100644
index 757e30408..000000000
--- a/doc/html/_sources/fix_evaporate.txt
+++ /dev/null
@@ -1,110 +0,0 @@
-.. index:: fix evaporate
-
-fix evaporate command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID evaporate N M region-ID seed
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* evaporate = style name of this fix command
-* N = delete atoms every this many timesteps
-* M = number of atoms to delete each time
-* region-ID = ID of region within which to perform deletions
-* seed = random number seed to use for choosing atoms to delete
-* zero or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *molecule*
- *molecule* value = *no* or *yes*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 solvent evaporate 1000 10 surface 49892
- fix 1 solvent evaporate 1000 10 surface 38277 molecule yes
-
-Description
-"""""""""""
-
-Remove M atoms from the simulation every N steps. This can be used,
-for example, to model evaporation of solvent particles or moleclues
-(i.e. drying) of a system. Every N steps, the number of atoms in the
-fix group and within the specifed region are counted. M of these are
-chosen at random and deleted. If there are less than M eligible
-particles, then all of them are deleted.
-
-If the setting for the *molecule* keyword is *no*\ , then only single
-atoms are deleted. In this case, you should insure you do not delete
-only a portion of a molecule (only some of its atoms), or LAMMPS will
-soon generate an error when it tries to find those atoms. LAMMPS will
-warn you if any of the atoms eligible for deletion have a non-zero
-molecule ID, but does not check for this at the time of deletion.
-
-If the setting for the *molecule* keyword is *yes*\ , then when an atom
-is chosen for deletion, the entire molecule it is part of is deleted.
-The count of deleted atoms is incremented by the number of atoms in
-the molecule, which may make it exceed *M*\ . If the molecule ID of the
-chosen atom is 0, then it is assumed to not be part of a molecule, and
-just the single atom is deleted.
-
-As an example, if you wish to delete 10 water molecules every *N*
-steps, you should set *M* to 30. If only the water's oxygen atoms
-were in the fix group, then two hydrogen atoms would be deleted when
-an oxygen atom is selected for deletion, whether the hydrogens are
-inside the evaporation region or not.
-
-Note that neighbor lists are re-built on timesteps that atoms are
-removed. Thus you should not remove atoms too frequently or you will
-incur overhead due to the cost of building neighbor lists.
-
-.. note::
-
- If you are monitoring the temperature of a system where the atom
- count is changing due to evaporation, you typically should use the
- :doc:`compute_modify dynamic yes <compute_modify>` command for the
- temperature compute you are using.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global scalar, which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-cummulative number of deleted atoms. The scalar value calculated by
-this fix is "intensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MISC package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix deposit <fix_deposit>`
-
-Default
-"""""""
-
-The option defaults are molecule = no.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_external.txt b/doc/html/_sources/fix_external.txt
deleted file mode 100644
index 7fde4b187..000000000
--- a/doc/html/_sources/fix_external.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-.. index:: fix external
-
-fix external command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID external mode args
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* external = style name of this fix command
-* mode = *pf/callback* or *pf/array*
-.. parsed-literal::
-
- *pf/callback* args = Ncall Napply
- Ncall = make callback every Ncall steps
- Napply = apply callback forces every Napply steps
- *pf/array* args = Napply
- Napply = apply array forces every Napply steps
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all external pf/callback 1 1
- fix 1 all external pf/callback 100 1
- fix 1 all external pf/array 10
-
-Description
-"""""""""""
-
-This fix allows external programs that are running LAMMPS through its
-:ref:`library interface <howto_19>` to modify certain
-LAMMPS properties on specific timesteps, similar to the way other
-fixes do. The external driver can be a :ref:`C/C++ or Fortran program <howto_19>` or a :doc:`Python script <Section_python>`.
-
-
-----------
-
-
-If mode is *pf/callback* then the fix will make a callback every
-*Ncall* timesteps or minimization iterations to the external program.
-The external program computes forces on atoms by setting values in an
-array owned by the fix. The fix then adds these forces to each atom
-in the group, once every *Napply* steps, similar to the way the :doc:`fix addforce <fix_addforce>` command works. Note that if *Ncall* >
-*Napply*\ , the force values produced by one callback will persist, and
-be used multiple times to update atom forces.
-
-The callback function "foo" is invoked by the fix as:
-
-.. parsed-literal::
-
- foo(void *ptr, bigint timestep, int nlocal, int *ids, double **x, double **fexternal);
-
-The arguments are as follows:
-
-* ptr = pointer provided by and simply passed back to external driver
-* timestep = current LAMMPS timestep
-* nlocal = # of atoms on this processor
-* ids = list of atom IDs on this processor
-* x = coordinates of atoms on this processor
-* fexternal = forces to add to atoms on this processor
-
-Note that timestep is a "bigint" which is defined in src/lmptype.h,
-typically as a 64-bit integer.
-
-Fexternal are the forces returned by the driver program.
-
-The fix has a set_callback() method which the external driver can call
-to pass a pointer to its foo() function. See the
-couple/lammps_quest/lmpqst.cpp file in the LAMMPS distribution for an
-example of how this is done. This sample application performs
-classical MD using quantum forces computed by a density functional
-code `Quest <quest_>`_.
-
-.. _quest: http://dft.sandia.gov/Quest
-
-
-
-
-----------
-
-
-If mode is *pf/array* then the fix simply stores force values in an
-array. The fix adds these forces to each atom in the group, once
-every *Napply* steps, similar to the way the :doc:`fix addforce <fix_addforce>` command works.
-
-The name of the public force array provided by the FixExternal
-class is
-
-.. parsed-literal::
-
- double **fexternal;
-
-It is allocated by the FixExternal class as an (N,3) array where N is
-the number of atoms owned by a processor. The 3 corresponds to the
-fx, fy, fz components of force.
-
-It is up to the external program to set the values in this array to
-the desired quantities, as often as desired. For example, the driver
-program might perform an MD run in stages of 1000 timesteps each. In
-between calls to the LAMMPS :doc:`run <run>` command, it could retrieve
-atom coordinates from LAMMPS, compute forces, set values in fexternal,
-etc.
-
-
-----------
-
-
-To use this fix during energy minimization, the energy corresponding
-to the added forces must also be set so as to be consistent with the
-added forces. Otherwise the minimization will not converge correctly.
-
-This can be done from the external driver by calling this public
-method of the FixExternal class:
-
-.. parsed-literal::
-
- void set_energy(double eng);
-
-where eng is the potential energy. Eng is an extensive quantity,
-meaning it should be the sum over per-atom energies of all affected
-atoms. It should also be provided in :doc:`energy units <units>`
-consistent with the simulation. See the details below for how to
-insure this energy setting is used appropriately in a minimization.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the potential "energy" set by the external driver to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`. This is a fictitious quantity but is
-needed so that the :doc:`minimize <minimize>` command can include the
-forces added by this fix in a consistent manner. I.e. there is a
-decrease in potential energy when atoms move in the direction of the
-added force.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-potential energy discussed above. The scalar stored by this fix
-is "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command.
-
-.. note::
-
- If you want the fictitious potential energy associated with the
- added forces to be included in the total potential energy of the
- system (the quantity being minimized), you MUST enable the
- :doc:`fix_modify <fix_modify>` *energy* option for this fix.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_freeze.txt b/doc/html/_sources/fix_freeze.txt
deleted file mode 100644
index 830c22ab3..000000000
--- a/doc/html/_sources/fix_freeze.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-.. index:: fix freeze
-
-fix freeze command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID freeze
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* freeze = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 2 bottom freeze
-
-Description
-"""""""""""
-
-Zero out the force and torque on a granular particle. This is useful
-for preventing certain particles from moving in a simulation. The
-:doc:`granular pair styles <pair_gran>` also detect if this fix has been
-defined and compute interactions between frozen and non-frozen
-particles appropriately, as if the frozen particle has infinite mass.
-A similar functionality for normal (point) particles can be obtained
-using :doc:`fix setforce <fix_setforce>`.
-
-
-----------
-
-
-Styles with a 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
-:doc:`Section_accelerate <Section_accelerate>` 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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global 3-vector of forces, which can be accessed
-by various :ref:`output commands <howto_15>`. This is the
-total force on the group of atoms before the forces on individual
-atoms are changed by the fix. The vector values calculated by this
-fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the GRANULAR package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-There can only be a single freeze fix defined. This is because other
-the :doc:`granular pair styles <pair_gran>` treat frozen particles
-differently and need to be able to reference a single group to which
-this fix is applied.
-
-Related commands
-""""""""""""""""
-
-:doc:`atom_style sphere <atom_style>`, :doc:`fix setforce <fix_setforce>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_gcmc.txt b/doc/html/_sources/fix_gcmc.txt
deleted file mode 100644
index 318f58466..000000000
--- a/doc/html/_sources/fix_gcmc.txt
+++ /dev/null
@@ -1,375 +0,0 @@
-.. index:: fix gcmc
-
-fix gcmc command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID gcmc N X M type seed T mu displace keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* gcmc = style name of this fix command
-* N = invoke this fix every N steps
-* X = average number of GCMC exchanges to attempt every N steps
-* M = average number of MC moves to attempt every N steps
-* type = atom type for inserted atoms (must be 0 if mol keyword used)
-* seed = random # seed (positive integer)
-* T = temperature of the ideal gas reservoir (temperature units)
-* mu = chemical potential of the ideal gas reservoir (energy units)
-* translate = maximum Monte Carlo translation distance (length units)
-* zero or more keyword/value pairs may be appended to args
-.. parsed-literal::
-
- keyword = *mol*\ , *region*\ , *maxangle*\ , *pressure*\ , *fugacity_coeff*\ , *full_energy*\ , *charge*\ , *group*\ , *grouptype*\ , *intra_energy*\ , or *tfac_insert*
- *mol* value = template-ID
- template-ID = ID of molecule template specified in a separate :doc:`molecule <molecule>` command
- *shake* value = fix-ID
- fix-ID = ID of :doc:`fix shake <fix_shake>` command
- *region* value = region-ID
- region-ID = ID of region where MC moves are allowed
- *maxangle* value = maximum molecular rotation angle (degrees)
- *pressure* value = pressure of the gas reservoir (pressure units)
- *fugacity_coeff* value = fugacity coefficient of the gas reservoir (unitless)
- *full_energy* = compute the entire system energy when performing MC moves
- *charge* value = charge of inserted atoms (charge units)
- *group* value = group-ID
- group-ID = group-ID for inserted atoms (string)
- *grouptype* values = type group-ID
- type = atom type (int)
- group-ID = group-ID for inserted atoms (string)
- *intra_energy* value = intramolecular energy (energy units)
- *tfac_insert* value = scale up/down temperature of inserted atoms (unitless)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 2 gas gcmc 10 1000 1000 2 29494 298.0 -0.5 0.01
- fix 3 water gcmc 10 100 100 0 3456543 3.0 -2.5 0.1 mol my_one_water maxangle 180 full_energy
- fix 4 my_gas gcmc 1 10 10 1 123456543 300.0 -12.5 1.0 region disk
-
-Description
-"""""""""""
-
-This fix performs grand canonical Monte Carlo (GCMC) exchanges of
-atoms or molecules of the given type with an imaginary ideal gas reservoir at
-the specified T and chemical potential (mu) as discussed in
-:ref:`(Frenkel) <Frenkel>`. If used with the :doc:`fix nvt <fix_nh>` command,
-simulations in the grand canonical ensemble (muVT, constant chemical
-potential, constant volume, and constant temperature) can be
-performed. Specific uses include computing isotherms in microporous
-materials, or computing vapor-liquid coexistence curves.
-
-Every N timesteps the fix attempts a number of GCMC exchanges (insertions
-or deletions) of gas atoms or molecules of
-the given type between the simulation cell and the imaginary
-reservoir. It also attempts a number of Monte Carlo
-moves (translations and molecule rotations) of gas of the given type
-within the simulation cell or region. The average number of
-attempted GCMC exchanges is X. The average number of attempted MC moves is M.
-M should typically be chosen to be
-approximately equal to the expected number of gas atoms or molecules
-of the given type within the simulation cell or region,
-which will result in roughly one
-MC translation per atom or molecule per MC cycle.
-
-For MC moves of molecular gasses, rotations and translations are each
-attempted with 50% probability. For MC moves of atomic gasses,
-translations are attempted 100% of the time. For MC exchanges of
-either molecular or atomic gasses, deletions and insertions are each
-attempted with 50% probability.
-
-All inserted particles are always assigned to two groups: the default group
-"all" and the group specified in the fix gcmc command (which can also
-be "all"). In addition, particles are also added to any groups specified
-by the *group* and *grouptype* keywords.
-If inserted particles are individual atoms, they are
-assigned the atom type given by the type argument. If they are molecules,
-the type argument has no effect and must be set to zero. Instead,
-the type of each atom in the inserted molecule is specified
-in the file read by the :doc:`molecule <molecule>` command.
-
-This fix cannot be used to perform MC insertions of gas atoms or
-molecules other than the exchanged type, but MC deletions,
-translations, and rotations can be performed on any atom/molecule in
-the fix group. All atoms in the simulation cell can be moved using
-regular time integration translations, e.g. via
-:doc:`fix nvt <fix_nh>`, resulting in a hybrid GCMC+MD simulation. A
-smaller-than-usual timestep size may be needed when running such a
-hybrid simulation, especially if the inserted molecules are not well
-equilibrated.
-
-This command may optionally use the *region* keyword to define an
-exchange and move volume. The specified region must have been
-previously defined with a :doc:`region <region>` command. It must be
-defined with side = *in*\ . Insertion attempts occur only within the
-specified region. For non-rectangular regions, random trial
-points are generated within the rectangular bounding box until a point is found
-that lies inside the region. If no valid point is generated after 1000 trials,
-no insertion is performed, but it is counted as an attempted insertion.
-Move and deletion attempt candidates are selected
-from gas atoms or molecules within the region. If there are no candidates,
-no move or deletion is performed, but it is counted as an attempt move
-or deletion. If an attempted move places the atom or molecule center-of-mass outside
-the specified region, a new attempted move is generated. This process is repeated
-until the atom or molecule center-of-mass is inside the specified region.
-
-If used with :doc:`fix nvt <fix_nh>`, the temperature of the imaginary
-reservoir, T, should be set to be equivalent to the target temperature
-used in fix nvt. Otherwise, the imaginary reservoir
-will not be in thermal equilibrium with the simulation cell. Also,
-it is important that the temperature used by fix nvt be dynamic,
-which can be achieved as follows:
-
-.. parsed-literal::
-
- compute mdtemp mdatoms temp
- compute_modify mdtemp dynamic yes
- fix mdnvt mdatoms nvt temp 300.0 300.0 10.0
- fix_modify mdnvt temp mdtemp
-
-Note that neighbor lists are re-built every timestep that this fix is
-invoked, so you should not set N to be too small. However, periodic
-rebuilds are necessary in order to avoid dangerous rebuilds and missed
-interactions. Specifically, avoid performing so many MC translations
-per timestep that atoms can move beyond the neighbor list skin
-distance. See the :doc:`neighbor <neighbor>` command for details.
-
-When an atom or molecule is to be inserted, its
-coordinates are chosen at a random position within the current
-simulation cell or region, and new atom velocities are randomly chosen from
-the specified temperature distribution given by T. The effective
-temperature for new atom velocities can be increased or decreased
-using the optional keyword *tfac_insert* (see below). Relative
-coordinates for atoms in a molecule are taken from the template
-molecule provided by the user. The center of mass of the molecule
-is placed at the insertion point. The orientation of the molecule
-is chosen at random by rotating about this point.
-
-Individual atoms are inserted, unless the *mol* keyword is used. It
-specifies a *template-ID* previously defined using the
-:doc:`molecule <molecule>` command, which reads a file that defines the
-molecule. The coordinates, atom types, charges, etc, as well as any
-bond/angle/etc and special neighbor information for the molecule can
-be specified in the molecule file. See the :doc:`molecule <molecule>`
-command for details. The only settings required to be in this file
-are the coordinates and types of atoms in the molecule.
-
-When not using the *mol* keyword, you should ensure you do not delete
-atoms that are bonded to other atoms, or LAMMPS will
-soon generate an error when it tries to find bonded neighbors. LAMMPS will
-warn you if any of the atoms eligible for deletion have a non-zero
-molecule ID, but does not check for this at the time of deletion.
-
-If you wish to insert molecules via the *mol* keyword, that will have
-their bonds or angles constrained via SHAKE, use the *shake* keyword,
-specifying as its value the ID of a separate :doc:`fix shake <fix_shake>` command which also appears in your input script.
-
-Optionally, users may specify the maximum rotation angle for
-molecular rotations using the *maxangle* keyword and specifying
-the angle in degrees. Rotations are performed by generating a random
-point on the unit sphere and a random rotation angle on the
-range [0,maxangle). The molecule is then rotated by that angle about an
-axis passing through the molecule center of mass. The axis is parallel
-to the unit vector defined by the point on the unit sphere.
-The same procedure is used for randomly rotating molecules when they
-are inserted, except that the maximum angle is 360 degrees.
-
-Note that fix GCMC does not use configurational bias
-MC or any other kind of sampling of intramolecular degrees of freedom.
-Inserted molecules can have different orientations, but they will all
-have the same intramolecular configuration,
-which was specified in the molecule command input.
-
-For atomic gasses, inserted atoms have the specified atom type, but
-deleted atoms are any atoms that have been inserted or that belong
-to the user-specified fix group. For molecular gasses, exchanged
-molecules use the same atom types as in the template molecule
-supplied by the user. In both cases, exchanged
-atoms/molecules are assigned to two groups: the default group "all"
-and the group specified in the fix gcmc command (which can also be
-"all").
-
-The gas reservoir pressure can be specified using the *pressure*
-keyword, in which case the user-specified chemical potential is
-ignored. For non-ideal gas reservoirs, the user may also specify the
-fugacity coefficient using the *fugacity_coeff* keyword.
-
-The *full_energy* option means that fix GCMC will compute the total
-potential energy of the entire simulated system. The total system
-energy before and after the proposed GCMC move is then used in the
-Metropolis criterion to determine whether or not to accept the
-proposed GCMC move. By default, this option is off, in which case
-only partial energies are computed to determine the difference in
-energy that would be caused by the proposed GCMC move.
-
-The *full_energy* option is needed for systems with complicated
-potential energy calculations, including the following:
-
-* long-range electrostatics (kspace)
-* many-body pair styles
-* hybrid pair styles
-* eam pair styles
-* triclinic systems
-* need to include potential energy contributions from other fixes
-
-In these cases, LAMMPS will automatically apply the *full_energy*
-keyword and issue a warning message.
-
-When the *mol* keyword is used, the *full_energy* option also includes
-the intramolecular energy of inserted and deleted molecules. If this
-is not desired, the *intra_energy* keyword can be used to define an
-amount of energy that is subtracted from the final energy when a molecule
-is inserted, and added to the initial energy when a molecule is
-deleted. For molecules that have a non-zero intramolecular energy, this
-will ensure roughly the same behavior whether or not the *full_energy*
-option is used.
-
-Inserted atoms and molecules are assigned random velocities based on the
-specified temperature T. Because the relative velocity of
-all atoms in the molecule is zero, this may result in inserted molecules
-that are systematically too cold. In addition, the intramolecular potential
-energy of the inserted molecule may cause the kinetic energy
-of the molecule to quickly increase or decrease after insertion.
-The *tfac_insert* keyword allows the user to counteract these effects
-by changing the temperature used to assign velocities to
-inserted atoms and molecules by a constant factor. For a
-particular application, some experimentation may be required
-to find a value of *tfac_insert* that results in inserted molecules that
-equilibrate quickly to the correct temperature.
-
-Some fixes have an associated potential energy. Examples of such fixes
-include: :doc:`efield <fix_efield>`, :doc:`gravity <fix_gravity>`,
-:doc:`addforce <fix_addforce>`, :doc:`langevin <fix_langevin>`,
-:doc:`restrain <fix_restrain>`, :doc:`temp/berendsen <fix_temp_berendsen>`,
-:doc:`temp/rescale <fix_temp_rescale>`, and :doc:`wall fixes <fix_wall>`.
-For that energy to be included in the total potential energy of the
-system (the quantity used when performing GCMC moves),
-you MUST enable the :doc:`fix_modify <fix_modify>` *energy* option for
-that fix. The doc pages for individual :doc:`fix <fix>` commands
-specify if this should be done.
-
-Use the *charge* option to insert atoms with a user-specified point
-charge. Note that doing so will cause the system to become non-neutral.
-LAMMPS issues a warning when using long-range electrostatics (kspace)
-with non-neutral systems. See the
-:doc:`compute group/group <compute_group_group>` documentation for more
-details about simulating non-neutral systems with kspace on.
-
-Use of this fix typically will cause the number of atoms to fluctuate,
-therefore, you will want to use the
-:doc:`compute_modify <compute_modify>` command to insure that the
-current number of atoms is used as a normalizing factor each time
-temperature is computed. Here is the necessary command:
-
-.. parsed-literal::
-
- compute_modify thermo_temp dynamic yes
-
-If LJ units are used, note that a value of 0.18292026 is used by this
-fix as the reduced value for Planck's constant. This value was
-derived from LJ parameters for argon, where h* = h/sqrt(sigma^2 *
-epsilon * mass), sigma = 3.429 angstroms, epsilon/k = 121.85 K, and
-mass = 39.948 amu.
-
-The *group* keyword assigns all inserted atoms to the :doc:`group <group>`
-of the group-ID value. The *grouptype* keyword assigns all
-inserted atoms of the specified type to the :doc:`group <group>`
-of the group-ID value.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the fix to :doc:`binary restart files <restart>`. This includes information about the random
-number generator seed, the next timestep for MC exchanges, etc. See
-the :doc:`read_restart <read_restart>` command for info on how to
-re-specify a fix in an input script that reads a restart file, so that
-the operation of the fix continues in an uninterrupted fashion.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix.
-
-This fix computes a global vector of length 8, which can be accessed
-by various :ref:`output commands <howto_15>`. The vector
-values are the following global cumulative quantities:
-
-* 1 = translation attempts
-* 2 = translation successes
-* 3 = insertion attempts
-* 4 = insertion successes
-* 5 = deletion attempts
-* 6 = deletion successes
-* 7 = rotation attempts
-* 8 = rotation successes
-
-The vector values calculated by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MC package. It is only enabled if LAMMPS was
-built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Do not set "neigh_modify once yes" or else this fix will never be
-called. Reneighboring is required.
-
-Can be run in parallel, but aspects of the GCMC part will not scale
-well in parallel. Only usable for 3D simulations.
-
-Note that very lengthy simulations involving insertions/deletions of
-billions of gas molecules may run out of atom or molecule IDs and
-trigger an error, so it is better to run multiple shorter-duration
-simulations. Likewise, very large molecules have not been tested
-and may turn out to be problematic.
-
-Use of multiple fix gcmc commands in the same input script can be
-problematic if using a template molecule. The issue is that the
-user-referenced template molecule in the second fix gcmc command
-may no longer exist since it might have been deleted by the first
-fix gcmc command. An existing template molecule will need to be
-referenced by the user for each subsequent fix gcmc command.
-
-Because molecule insertion does not work in combination with
-fix rigid, simulataneous use of fix rigid or fix rigid/small
-with this fix is not allowed.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix atom/swap <fix_atom_swap>`,
-:doc:`fix nvt <fix_nh>`, :doc:`neighbor <neighbor>`,
-:doc:`fix deposit <fix_deposit>`, :doc:`fix evaporate <fix_evaporate>`,
-:doc:`delete_atoms <delete_atoms>`
-
-Default
-"""""""
-
-The option defaults are mol = no, maxangle = 10, full_energy = no,
-except for the situations where full_energy is required, as
-listed above.
-
-
-----------
-
-
-.. _Frenkel:
-
-
-
-**(Frenkel)** Frenkel and Smit, Understanding Molecular Simulation,
-Academic Press, London, 2002.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_gld.txt b/doc/html/_sources/fix_gld.txt
deleted file mode 100644
index f0672158e..000000000
--- a/doc/html/_sources/fix_gld.txt
+++ /dev/null
@@ -1,178 +0,0 @@
-.. index:: fix gld
-
-fix gld command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID gld Tstart Tstop N_k seed series c_1 tau_1 ... c_N_k tau_N_k keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* gld = style name of this fix command
-* Tstart,Tstop = desired temperature at start/end of run (temperature units)
-* N_k = number of terms in the Prony series representation of the memory kernel
-* seed = random number seed to use for white noise (positive integer)
-* series = *pprony* is presently the only available option
-* c_k = the weight of the kth term in the Prony series (mass per time units)
-* tau_k = the time constant of the kth term in the Prony series (time units)
-* zero or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *frozen* or *zero*
- *frozen* value = *no* or *yes*
- *no* = initialize extended variables using values drawn from equilibrium distribution at Tstart
- *yes* = initialize extended variables to zero (i.e., from equilibrium distribution at zero temperature)
- *zero* value = *no* or *yes*
- *no* = do not set total random force to zero
- *yes* = set total random force to zero
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all gld 1.0 1.0 2 82885 pprony 0.5 1.0 1.0 2.0 frozen yes zero yes
- fix 3 rouse gld 7.355 7.355 4 48823 pprony 107.1 0.02415 186.0 0.04294 428.6 0.09661 1714 0.38643
-
-Description
-"""""""""""
-
-Applies Generalized Langevin Dynamics to a group of atoms, as
-described in :ref:`(Baczewski) <Baczewski>`. This is intended to model the
-effect of an implicit solvent with a temporally non-local dissipative
-force and a colored Gaussian random force, consistent with the
-Fluctuation-Dissipation Theorem. The functional form of the memory
-kernel associated with the temporally non-local force is constrained
-to be a Prony series.
-
-.. note::
-
- While this fix bears many similarities to :doc:`fix langevin <fix_langevin>`, it has one significant
- difference. Namely, :doc:`fix gld <fix_gld>` performs time integration,
- whereas :doc:`fix langevin <fix_langevin>` does NOT. To this end, the
- specification of another fix to perform time integration, such as :doc:`fix nve <fix_nve>`, is NOT necessary.
-
-With this fix active, the force on the *j*\ th atom is given as
-
-.. image:: Eqs/fix_gld1.jpg
- :align: center
-
-Here, the first term is representative of all conservative (pairwise,
-bonded, etc) forces external to this fix, the second is the temporally
-non-local dissipative force given as a Prony series, and the third is
-the colored Gaussian random force.
-
-The Prony series form of the memory kernel is chosen to enable an
-extended variable formalism, with a number of exemplary mathematical
-features discussed in :ref:`(Baczewski) <Baczewski>`. In particular, 3N_k
-extended variables are added to each atom, which effect the action of
-the memory kernel without having to explicitly evaluate the integral
-over time in the second term of the force. This also has the benefit
-of requiring the generation of uncorrelated random forces, rather than
-correlated random forces as specified in the third term of the force.
-
-Presently, the Prony series coefficients are limited to being greater
-than or equal to zero, and the time constants are limited to being
-greater than zero. To this end, the value of series MUST be set to
-*pprony*\ , for now. Future updates will allow for negative coefficients
-and other representations of the memory kernel. It is with these
-updates in mind that the series option was included.
-
-The units of the Prony series coefficients are chosen to be mass per
-time to ensure that the numerical integration scheme stably approaches
-the Newtonian and Langevin limits. Details of these limits, and the
-associated numerical concerns are discussed in
-:ref:`(Baczewski) <Baczewski>`.
-
-The desired temperature at each timestep is ramped from *Tstart* to
-*Tstop* over the course of the next run.
-
-The random # *seed* must be a positive integer. A Marsaglia random
-number generator is used. Each processor uses the input seed to
-generate its own unique seed and its own stream of random
-numbers. Thus the dynamics of the system will not be identical on two
-runs on different numbers of processors.
-
-
-----------
-
-
-The keyword/value option pairs are used in the following ways.
-
-The keyword *frozen* can be used to specify how the extended variables
-associated with the GLD memory kernel are initialized. Specifying no
-(the default), the initial values are drawn at random from an
-equilibrium distribution at *Tstart*\ , consistent with the
-Fluctuation-Dissipation Theorem. Specifying yes, initializes the
-extended variables to zero.
-
-The keyword *zero* can be used to eliminate drift due to the
-thermostat. Because the random forces on different atoms are
-independent, they do not sum exactly to zero. As a result, this fix
-applies a small random force to the entire system, and the
-center-of-mass of the system undergoes a slow random walk. If the
-keyword *zero* is set to *yes*\ , the total random force is set exactly
-to zero by subtracting off an equal part of it from each atom in the
-group. As a result, the center-of-mass of a system with zero initial
-momentum will not drift over time.
-
-
-----------
-
-
-**Restart, run start/stop, minimize info:**
-
-The instantaneous values of the extended variables are written to
-:doc:`binary restart files <restart>`. Because the state of the random
-number generator is not saved in restart files, this means you cannot
-do "exact" restarts with this fix, where the simulation continues on
-the same as if no restart had taken place. However, in a statistical
-sense, a restarted simulation should produce the same behavior.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix. No global or per-atom quantities are stored by this fix for
-access by various :ref:`output commands <howto_15>`.
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MISC package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix langevin <fix_langevin>`, :doc:`fix viscous <fix_viscous>`,
-:doc:`pair_style dpd/tstat <pair_dpd>`
-
-Default
-"""""""
-
-The option defaults are frozen = no, zero = no.
-
-
-----------
-
-
-.. _Baczewski:
-
-
-
-**(Baczewski)** A.D. Baczewski and S.D. Bond, J. Chem. Phys. 139, 044107 (2013).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_gle.txt b/doc/html/_sources/fix_gle.txt
deleted file mode 100644
index d3deb9336..000000000
--- a/doc/html/_sources/fix_gle.txt
+++ /dev/null
@@ -1,170 +0,0 @@
-.. index:: fix gle
-
-fix gle command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID id-group gle Ns Tstart Tstop seed Amatrix [noneq Cmatrix] [every stride]
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* gle = style name of this fix command
-* Ns = number of additional fictitious momenta
-* Tstart, Tstop = temperature ramp during the run
-* Amatrix = file to read the drift matrix A from
-* seed = random number seed to use for generating noise (positive integer)
-* zero or more keyword/value pairs may be appended
-keyword = *noneq* and/or *every*
- *noneq* Cmatrix = file to read the non-equilibrium covariance matrix from
- *every* stride = apply the GLE once every time steps. Reduces the accuracy
- of the integration of the GLE, but has *no effect* on the accuracy of equilibrium
- sampling. It might change sampling properties when used together with *noneq*\ .
-
-Examples
-""""""""
-
-fix 3 boundary gle 6 300 300 31415 smart.A
-fix 1 all gle 6 300 300 31415 qt-300k.A noneq qt-300k.C
-
-Description
-"""""""""""
-
-Apply a Generalized Langevin Equation (GLE) thermostat as described
-in :ref:`(Ceriotti) <Ceriotti>`. The formalism allows one to obtain a number
-of different effects ranging from efficient sampling of all
-vibrational modes in the system to inexpensive (approximate)
-modelling of nuclear quantum effects. Contrary to
-:doc:`fix langevin <fix_langevin>`, this fix performs both
-thermostatting and evolution of the Hamiltonian equations of motion, so it
-should not be used together with :doc:`fix nve <fix_nve>` -- at least not
-on the same atom groups.
-
-Each degree of freedom in the thermostatted group is supplemented
-with Ns additional degrees of freedom s, and the equations of motion
-become
-
-dq/dt=p/m
-d(p,s)/dt=(F,0) - A(p,s) + B dW/dt
-
-where F is the physical force, A is the drift matrix (that generalizes
-the friction in Langevin dynamics), B is the diffusion term and dW/dt
-un-correlated Gaussian random forces. The A matrix couples the physical
-(q,p) dynamics with that of the additional degrees of freedom,
-and makes it possible to obtain effectively a history-dependent
-noise and friction kernel.
-
-The drift matrix should be given as an external file *Afile*\ ,
-as a (Ns+1 x Ns+1) matrix in inverse time units. Matrices that are
-optimal for a given application and the system of choice can be
-obtained from :ref:`(GLE4MD) <GLE4MD>`.
-
-Equilibrium sampling a temperature T is obtained by specifiying the
-target value as the *Tstart* and *Tstop* arguments, so that the diffusion
-matrix that gives canonical sampling for a given A is computed automatically.
-However, the GLE framework also allow for non-equilibrium sampling, that
-can be used for instance to model inexpensively zero-point energy
-effects :ref:`(Ceriotti2) <Ceriotti2>`. This is achieved specifying the
-*noneq* keyword followed by the name of the file that contains the
-static covariance matrix for the non-equilibrium dynamics.
-
-Since integrating GLE dynamics can be costly when used together with
-simple potentials, one can use the *every* optional keyword to
-apply the Langevin terms only once every several MD steps, in a
-multiple time-step fashion. This should be used with care when doing
-non-equilibrium sampling, but should have no effect on equilibrium
-averages when using canonical sampling.
-
-The random number *seed* must be a positive integer. A Marsaglia random
-number generator is used. Each processor uses the input seed to
-generate its own unique seed and its own stream of random numbers.
-Thus the dynamics of the system will not be identical on two runs on
-different numbers of processors.
-
-Note also that the Generalized Langevin Dynamics scheme that is
-implemented by the :doc:`fix gld <fix_gld>` scheme is closely related
-to the present one. In fact, it should be always possible to cast the
-Prony series form of the memory kernel used by GLD into an appropriate
-input matrix for :doc:`fix gle <fix_gle>`. While the GLE scheme is more
-general, the form used by :doc:`fix gld <fix_gld>` can be more directly
-related to the representation of an implicit solvent environment.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-The instantaneous values of the extended variables are written to
-:doc:`binary restart files <restart>`. Because the state of the random
-number generator is not saved in restart files, this means you cannot
-do "exact" restarts with this fix, where the simulation continues on
-the same as if no restart had taken place. However, in a statistical
-sense, a restarted simulation should produce the same behavior.
-Note however that you should use a different seed each time you
-restart, otherwise the same sequence of random numbers will be used
-each time, which might lead to stochastic synchronization and
-subtle artefacts in the sampling.
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Langevin thermostatting to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-cummulative energy change due to this fix. The scalar value
-calculated by this fix is "extensive".
-
-Restrictions
-""""""""""""
-
-
-The GLE thermostat in its current implementation should not be used
-with rigid bodies, SHAKE or RATTLE. It is expected that all the
-thermostatted degrees of freedom are fully flexible, and the sampled
-ensemble will not be correct otherwise.
-
-In order to perform constant-pressure simulations please use
-:doc:`fix press/berendsen <fix_press_berendsen>`, rather than
-:doc:`fix npt <fix_nh>`, to avoid duplicate integration of the
-equations of motion.
-
-This fix is part of the USER-MISC package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix viscous <fix_viscous>`, :doc:`fix nvt <fix_nh>`, :doc:`pair_style dpd/tstat <pair_dpd>`, :doc:`fix gld <fix_gld>`
-
-
-----------
-
-
-.. _Ceriotti:
-
-
-
-**(Ceriotti)** Ceriotti, Bussi and Parrinello, J Chem Theory Comput 6,
-1170-80 (2010)
-
-.. _GLE4MD:
-
-
-
-**(GLE4MD)** `http://epfl-cosmo.github.io/gle4md/ <http://epfl-cosmo.github.io/gle4md/>`_
-
-.. _Ceriotti2:
-
-
-
-**(Ceriotti2)** Ceriotti, Bussi and Parrinello, Phys Rev Lett 103,
-030603 (2009)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_gravity.txt b/doc/html/_sources/fix_gravity.txt
deleted file mode 100644
index f476aa7ef..000000000
--- a/doc/html/_sources/fix_gravity.txt
+++ /dev/null
@@ -1,159 +0,0 @@
-.. index:: fix gravity
-
-fix gravity command
-===================
-
-fix gravity/omp command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group gravity magnitude style args
-
-* ID, group are documented in :doc:`fix <fix>` command
-* gravity = style name of this fix command
-* magnitude = size of acceleration (force/mass units)
-* magnitude can be a variable (see below)
-* style = *chute* or *spherical* or *gradient* or *vector*
-.. parsed-literal::
-
- *chute* args = angle
- angle = angle in +x away from -z or -y axis in 3d/2d (in degrees)
- angle can be a variable (see below)
- *spherical* args = phi theta
- phi = azimuthal angle from +x axis (in degrees)
- theta = angle from +z or +y axis in 3d/2d (in degrees)
- phi or theta can be a variable (see below)
- *vector* args = x y z
- x y z = vector direction to apply the acceleration
- x or y or z can be a variable (see below)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all gravity 1.0 chute 24.0
- fix 1 all gravity v_increase chute 24.0
- fix 1 all gravity 1.0 spherical 0.0 -180.0
- fix 1 all gravity 10.0 spherical v_phi v_theta
- fix 1 all gravity 100.0 vector 1 1 0
-
-Description
-"""""""""""
-
-Impose an additional acceleration on each particle in the group. This
-fix is typically used with granular systems to include a "gravity"
-term acting on the macroscopic particles. More generally, it can
-represent any kind of driving field, e.g. a pressure gradient inducing
-a Poiseuille flow in a fluid. Note that this fix operates differently
-than the :doc:`fix addforce <fix_addforce>` command. The addforce fix
-adds the same force to each atom, independent of its mass. This
-command imparts the same acceleration to each atom (force/mass).
-
-The *magnitude* of the acceleration is specified in force/mass units.
-For granular systems (LJ units) this is typically 1.0. See the
-:doc:`units <units>` command for details.
-
-Style *chute* is typically used for simulations of chute flow where
-the specified *angle* is the chute angle, with flow occurring in the +x
-direction. For 3d systems, the tilt is away from the z axis; for 2d
-systems, the tilt is away from the y axis.
-
-Style *spherical* allows an arbitrary 3d direction to be specified for
-the acceleration vector. *Phi* and *theta* are defined in the usual
-spherical coordinates. Thus for acceleration acting in the -z
-direction, *theta* would be 180.0 (or -180.0). *Theta* = 90.0 and
-*phi* = -90.0 would mean acceleration acts in the -y direction. For
-2d systems, *phi* is ignored and *theta* is an angle in the xy plane
-where *theta* = 0.0 is the y-axis.
-
-Style *vector* imposes an acceleration in the vector direction given
-by (x,y,z). Only the direction of the vector is important; it's
-length is ignored. For 2d systems, the *z* component is ignored.
-
-Any of the quantities *magnitude*\ , *angle*\ , *phi*\ , *theta*\ , *x*\ , *y*\ ,
-*z* which define the gravitational magnitude and direction, can be
-specified as an equal-style :doc:`variable <variable>`. If the value is
-a variable, it should be specified as v_name, where name is the
-variable name. In this case, the variable will be evaluated each
-timestep, and its value used to determine the quantity. You should
-insure that the variable calculates a result in the approriate units,
-e.g. force/mass or degrees.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent gravitational
-field.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the gravitational potential energy of the system to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. This scalar is the
-gravitational potential energy of the particles in the defined field,
-namely mass * (g dot x) for each particles, where x and mass are the
-particles position and mass, and g is the gravitational field. The
-scalar value calculated by this fix is "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`atom_style sphere <atom_style>`, :doc:`fix addforce <fix_addforce>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_heat.txt b/doc/html/_sources/fix_heat.txt
deleted file mode 100644
index eba5738c8..000000000
--- a/doc/html/_sources/fix_heat.txt
+++ /dev/null
@@ -1,143 +0,0 @@
-.. index:: fix heat
-
-fix heat command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID heat N eflux
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* heat = style name of this fix command
-* N = add/subtract heat every this many timesteps
-* eflux = rate of heat addition or subtraction (energy/time units)
-* eflux can be a variable (see below)
-* zero or more keyword/value pairs may be appended to args
-* keyword = *region*
-.. parsed-literal::
-
- *region* value = region-ID
- region-ID = ID of region atoms must be in to have added force
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 3 qin heat 1 1.0
- fix 3 qin heat 10 v_flux
- fix 4 qout heat 1 -1.0 region top
-
-Description
-"""""""""""
-
-Add non-translational kinetic energy (heat) to a group of atoms in a
-manner that conserves their aggregate momentum. Two of these fixes
-can be used to establish a temperature gradient across a simulation
-domain by adding heat (energy) to one group of atoms (hot reservoir)
-and subtracting heat from another (cold reservoir). E.g. a simulation
-sampling from the McDLT ensemble.
-
-If the *region* keyword is used, the atom must be in both the group
-and the specified geometric :doc:`region <region>` in order to have
-energy added or subtracted to it. If not specified, then the atoms in
-the group are affected wherever they may move to.
-
-Heat addition/subtraction is performed every N timesteps. The *eflux*
-parameter can be specified as a numeric constant or as a variable (see
-below). If it is a numeric constant or equal-style variable which
-evaluates to a scalar value, then the *eflux* determines the change in
-aggregate energy of the entire group of atoms per unit time, e.g. in
-eV/psec for :doc:`metal units <units>`. In this case it is an
-"extensive" quantity, meaning its magnitude should be scaled with the
-number of atoms in the group. Note that since *eflux* has per-time
-units (i.e. it is a flux), this means that a larger value of N will
-add/subtract a larger amount of energy each time the fix is invoked.
-
-.. note::
-
- The heat-exchange (HEX) algorithm implemented by this fix is
- known to exhibit a pronounced energy drift. An improved algorithm
- (eHEX) is available as a :doc:`fix ehex <fix_ehex>` command and might be
- preferable if energy conservation is important.
-
-If *eflux* is specified as an atom-style variable (see below), then
-the variable computes one value per atom. In this case, each value is
-the energy flux for a single atom, again in units of energy per unit
-time. In this case, each value is an "intensive" quantity, which need
-not be scaled with the number of atoms in the group.
-
-As mentioned above, the *eflux* parameter can be specified as an
-equal-style or atom_style :doc:`variable <variable>`. If the value is a
-variable, it should be specified as v_name, where name is the variable
-name. In this case, the variable will be evaluated each timestep, and
-its value(s) used to determine the flux.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent flux.
-
-Atom-style variables can specify the same formulas as equal-style
-variables but can also include per-atom values, such as atom
-coordinates. Thus it is easy to specify a spatially-dependent flux
-with optional time-dependence as well.
-
-.. note::
-
- If heat is subtracted from the system too aggressively so that
- the group's kinetic energy would go to zero, or any individual atom's
- kinetic energy would go to zero for the case where *eflux* is an
- atom-style variable, then LAMMPS will halt with an error message.
-
-Fix heat is different from a thermostat such as :doc:`fix nvt <fix_nh>`
-or :doc:`fix temp/rescale <fix_temp_rescale>` in that energy is
-added/subtracted continually. Thus if there isn't another mechanism
-in place to counterbalance this effect, the entire system will heat or
-cool continuously. You can use multiple heat fixes so that the net
-energy change is 0.0 or use :doc:`fix viscous <fix_viscous>` to drain
-energy from the system.
-
-This fix does not change the coordinates of its atoms; it only scales
-their velocities. Thus you must still use an integration fix
-(e.g. :doc:`fix nve <fix_nve>`) on the affected atoms. This fix should
-not normally be used on atoms that have their temperature controlled
-by another fix - e.g. :doc:`fix nvt <fix_nh>` or :doc:`fix langevin <fix_langevin>` fix.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. This scalar is the
-most recent value by which velocites were scaled. The scalar value
-calculated by this fix is "intensive". If *eflux* is specified as
-an atom-style variable, this fix computes the average value by which
-the velocities were scaled for all of the atoms that had their
-velocities scaled.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix ehex <fix_ehex>`, :doc:`compute temp <compute_temp>`, :doc:`compute temp/region <compute_temp_region>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_imd.txt b/doc/html/_sources/fix_imd.txt
deleted file mode 100644
index b88b1b00f..000000000
--- a/doc/html/_sources/fix_imd.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-.. index:: fix imd
-
-fix imd command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID imd trate port keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* imd = style name of this fix command
-* port = port number on which the fix listens for an IMD client
-* keyword = *unwrap* or *fscale* or *trate*
-.. parsed-literal::
-
- *unwrap* arg = *on* or *off*
- off = coordinates are wrapped back into the principal unit cell (default)
- on = "unwrapped" coordinates using the image flags used
- *fscale* arg = factor
- factor = floating point number to scale IMD forces (default: 1.0)
- *trate* arg = transmission rate of coordinate data sets (default: 1)
- *nowait* arg = *on* or *off*
- off = LAMMPS waits to be connected to an IMD client before continuing (default)
- on = LAMMPS listens for an IMD client, but continues with the run
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix vmd all imd 5678
- fix comm all imd 8888 trate 5 unwrap on fscale 10.0
-
-Description
-"""""""""""
-
-This fix implements the "Interactive MD" (IMD) protocol which allows
-realtime visualization and manipulation of MD simulations through the
-IMD protocol, as initially implemented in VMD and NAMD. Specifically
-it allows LAMMPS to connect an IMD client, for example the `VMD visualization program <VMD_>`_, so that it can monitor the progress of the
-simulation and interactively apply forces to selected atoms.
-
-If LAMMPS is compiled with the preprocessor flag -DLAMMPS_ASYNC_IMD
-then fix imd will use POSIX threads to spawn a IMD communication
-thread on MPI rank 0 in order to offload data reading and writing
-from the main execution thread and potentially lower the inferred
-latencies for slow communication links. This feature has only been
-tested under linux.
-
-There are example scripts for using this package with LAMMPS in
-examples/USER/imd. Additional examples and a driver for use with the
-Novint Falcon game controller as haptic device can be found at:
-http://sites.google.com/site/akohlmey/software/vrpn-icms.
-
-The source code for this fix includes code developed by the
-Theoretical and Computational Biophysics Group in the Beckman
-Institute for Advanced Science and Technology at the University of
-Illinois at Urbana-Champaign. We thank them for providing a software
-interface that allows codes like LAMMPS to hook to `VMD <VMD_>`_.
-
-Upon initialization of the fix, it will open a communication port on
-the node with MPI task 0 and wait for an incoming connection. As soon
-as an IMD client is connected, the simulation will continue and the
-fix will send the current coordinates of the fix's group to the IMD
-client at every trate MD step. When using r-RESPA, trate applies to
-the steps of the outmost RESPA level. During a run with an active IMD
-connection also the IMD client can request to apply forces to selected
-atoms of the fix group.
-
-The port number selected must be an available network port number. On
-many machines, port numbers < 1024 are reserved for accounts with
-system manager privilege and specific applications. If multiple imd
-fixes would be active at the same time, each needs to use a different
-port number.
-
-The *nowait* keyword controls the behavior of the fix when no IMD
-client is connected. With the default setting of *off*\ , LAMMPS will
-wait until a connection is made before continuing with the
-execution. Setting *nowait* to *on* will have the LAMMPS code be ready
-to connect to a client, but continue with the simulation. This can for
-example be used to monitor the progress of an ongoing calculation
-without the need to be permanently connected or having to download a
-trajectory file.
-
-The *trate* keyword allows to select how often the coordinate data is
-sent to the IMD client. It can also be changed on request of the IMD
-client through an IMD protocol message. The *unwrap* keyword allows
-to send "unwrapped" coordinates to the IMD client that undo the
-wrapping back of coordinates into the principle unit cell, as done by
-default in LAMMPS. The *fscale* keyword allows to apply a scaling
-factor to forces transmitted by the IMD client. The IMD protocols
-stipulates that forces are transferred in kcal/mol/angstrom under the
-assumption that coordinates are given in angstrom. For LAMMPS runs
-with different units or as a measure to tweak the forces generated by
-the manipulation of the IMD client, this option allows to make
-adjustments.
-
-To connect VMD to a listening LAMMPS simulation on the same machine
-with fix imd enabled, one needs to start VMD and load a coordinate or
-topology file that matches the fix group. When the VMD command
-prompts appears, one types the command line:
-
-.. parsed-literal::
-
- imd connect localhost 5678
-
-This assumes that *fix imd* was started with 5678 as a port
-number for the IMD protocol.
-
-The steps to do interactive manipulation of a running simulation in
-VMD are the following:
-
-In the Mouse menu of the VMD Main window, select "Mouse -> Force ->
-Atom". You may alternately select "Residue", or "Fragment" to apply
-forces to whole residues or fragments. Your mouse can now be used to
-apply forces to your simulation. Click on an atom, residue, or
-fragment and drag to apply a force. Click quickly without moving the
-mouse to turn the force off. You can also use a variety of 3D position
-trackers to apply forces to your simulation. Game controllers or haptic
-devices with force-feedback such as the Novint Falcon or Sensable
-PHANTOM allow you to feel the resistance due to inertia or interactions
-with neighbors that the atoms experience you are trying to move, as if
-they were real objects. See the `VMD IMD Homepage <imdvmd_>`_ and the
-`VRPN-ICMS Homepage <vrpnicms_>`_ for more details.
-
-If IMD control messages are received, a line of text describing the
-message and its effect will be printed to the LAMMPS output screen, if
-screen output is active.
-
-.. _VMD: http://www.ks.uiuc.edu/Research/vmd
-
-
-
-.. _imdvmd: http://www.ks.uiuc.edu/Research/vmd/imd/
-
-
-
-.. _vrpnicms: http://sites.google.com/site/akohlmey/software/vrpn-icms
-
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global scalar or vector or per-atom
-quantities are stored by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-When used in combination with VMD, a topology or coordinate file has
-to be loaded, which matches (in number and ordering of atoms) the
-group the fix is applied to. The fix internally sorts atom IDs by
-ascending integer value; in VMD (and thus the IMD protocol) those will
-be assigned 0-based consecutive index numbers.
-
-When using multiple active IMD connections at the same time, each
-needs to use a different port number.
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_indent.txt b/doc/html/_sources/fix_indent.txt
deleted file mode 100644
index 8c2618865..000000000
--- a/doc/html/_sources/fix_indent.txt
+++ /dev/null
@@ -1,227 +0,0 @@
-.. index:: fix indent
-
-fix indent command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID indent K keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* indent = style name of this fix command
-* K = force constant for indenter surface (force/distance^2 units)
-* one or more keyword/value pairs may be appended
-* keyword = *sphere* or *cylinder* or *plane* or *side* or *units*
-.. parsed-literal::
-
- *sphere* args = x y z R
- x,y,z = initial position of center of indenter (distance units)
- R = sphere radius of indenter (distance units)
- any of x,y,z,R can be a variable (see below)
- *cylinder* args = dim c1 c2 R
- dim = *x* or *y* or *z* = axis of cylinder
- c1,c2 = coords of cylinder axis in other 2 dimensions (distance units)
- R = cylinder radius of indenter (distance units)
- any of c1,c2,R can be a variable (see below)
- *plane* args = dim pos side
- dim = *x* or *y* or *z* = plane perpendicular to this dimension
- pos = position of plane in dimension x, y, or z (distance units)
- pos can be a variable (see below)
- side = *lo* or *hi*
- *side* value = *in* or *out*
- *in* = the indenter acts on particles inside the sphere or cylinder
- *out* = the indenter acts on particles outside the sphere or cylinder
- *units* value = *lattice* or *box*
- lattice = the geometry is defined in lattice units
- box = the geometry is defined in simulation box units
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all indent 10.0 sphere 0.0 0.0 15.0 3.0
- fix 1 all indent 10.0 sphere v_x v_y 0.0 v_radius side in
- fix 2 flow indent 10.0 cylinder z 0.0 0.0 10.0 units box
-
-Description
-"""""""""""
-
-Insert an indenter within a simulation box. The indenter repels all
-atoms in the group that touch it, so it can be used to push into a
-material or as an obstacle in a flow. Or it can be used as a
-constraining wall around a simulation; see the discussion of the
-*side* keyword below.
-
-The indenter can either be spherical or cylindrical or planar. You
-must set one of those 3 keywords.
-
-A spherical indenter exerts a force of magnitude
-
-.. parsed-literal::
-
- F(r) = - K (r - R)^2
-
-on each atom where *K* is the specified force constant, *r* is the
-distance from the atom to the center of the indenter, and *R* is the
-radius of the indenter. The force is repulsive and F(r) = 0 for *r* >
-*R*\ .
-
-A cylindrical indenter exerts the same force, except that *r* is the
-distance from the atom to the center axis of the cylinder. The
-cylinder extends infinitely along its axis.
-
-Spherical and cylindrical indenters account for periodic boundaries in
-two ways. First, the center point of a spherical indenter (x,y,z) or
-axis of a cylindrical indenter (c1,c2) is remapped back into the
-simulation box, if the box is periodic in a particular dimension.
-This occurs every timestep if the indenter geometry is specified with
-a variable (see below), e.g. it is moving over time. Second, the
-calculation of distance to the indenter center or axis accounts for
-periodic boundaries. Both of these mean that an indenter can
-effectively move through and straddle one or more periodic boundaries.
-
-A planar indenter is really an axis-aligned infinite-extent wall
-exerting the same force on atoms in the system, where *R* is the
-position of the plane and *r-R* is the distance from the plane. If
-the *side* parameter of the plane is specified as *lo* then it will
-indent from the lo end of the simulation box, meaning that atoms with
-a coordinate less than the plane's current position will be pushed
-towards the hi end of the box and atoms with a coordinate higher than
-the plane's current position will feel no force. Vice versa if *side*
-is specified as *hi*\ .
-
-Any of the 4 quantities defining a spherical indenter's geometry can
-be specified as an equal-style :doc:`variable <variable>`, namely *x*\ ,
-*y*\ , *z*\ , or *R*\ . Similarly, for a cylindrical indenter, any of *c1*\ ,
-*c2*\ , or *R*\ , can be a variable. For a planar indenter, *pos* can be
-a variable. If the value is a variable, it should be specified as
-v_name, where name is the variable name. In this case, the variable
-will be evaluated each timestep, and its value used to define the
-indenter geometry.
-
-Note that equal-style variables can specify formulas with various
-mathematical functions, and include :doc:`thermo_style <thermo_style>`
-command keywords for the simulation box parameters and timestep and
-elapsed time. Thus it is easy to specify indenter properties that
-change as a function of time or span consecutive runs in a continuous
-fashion. For the latter, see the *start* and *stop* keywords of the
-:doc:`run <run>` command and the *elaplong* keyword of :doc:`thermo_style custom <thermo_style>` for details.
-
-For example, if a spherical indenter's x-position is specfied as v_x,
-then this variable definition will keep it's center at a relative
-position in the simulation box, 1/4 of the way from the left edge to
-the right edge, even if the box size changes:
-
-.. parsed-literal::
-
- variable x equal "xlo + 0.25*lx"
-
-Similarly, either of these variable definitions will move the indenter
-from an initial position at 2.5 at a constant velocity of 5:
-
-.. parsed-literal::
-
- variable x equal "2.5 + 5*elaplong*dt"
- variable x equal vdisplace(2.5,5)
-
-If a spherical indenter's radius is specified as v_r, then these
-variable definitions will grow the size of the indenter at a specfied
-rate.
-
-.. parsed-literal::
-
- variable r0 equal 0.0
- variable rate equal 1.0
- variable r equal "v_r0 + step*dt*v_rate"
-
-If the *side* keyword is specified as *out*\ , which is the default,
-then particles outside the indenter are pushded away from its outer
-surface, as described above. This only applies to spherical or
-cylindrical indenters. If the *side* keyword is specified as *in*\ ,
-the action of the indenter is reversed. Particles inside the indenter
-are pushed away from its inner surface. In other words, the indenter
-is now a containing wall that traps the particles inside it. If the
-radius shrinks over time, it will squeeze the particles.
-
-The *units* keyword determines the meaning of the distance units used
-to define the indenter geometry. A *box* value selects standard
-distance units as defined by the :doc:`units <units>` command,
-e.g. Angstroms for units = real or metal. A *lattice* value means the
-distance units are in lattice spacings. The :doc:`lattice <lattice>`
-command must have been previously used to define the lattice spacing.
-The (x,y,z) coords of the indenter position are scaled by the x,y,z
-lattice spacings respectively. The radius of a spherical or
-cylindrical indenter is scaled by the x lattice spacing.
-
-Note that the units keyword only affects indenter geometry parameters
-specified directly with numbers, not those specified as variables. In
-the latter case, you should use the *xlat*\ , *ylat*\ , *zlat* keywords of
-the :doc:`thermo_style <thermo_style>` command if you want to include
-lattice spacings in a variable formula.
-
-The force constant *K* is not affected by the *units* keyword. It is
-always in force/distance^2 units where force and distance are defined
-by the :doc:`units <units>` command. If you wish K to be scaled by the
-lattice spacing, you can define K with a variable whose formula
-contains *xlat*\ , *ylat*\ , *zlat* keywords of the
-:doc:`thermo_style <thermo_style>` command, e.g.
-
-.. parsed-literal::
-
- variable k equal 100.0/xlat/xlat
- fix 1 all indent $k sphere ...
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy of interaction between atoms and the indenter to
-the system's potential energy as part of :doc:`thermodynamic output <thermo_style>`. The energy of each particle interacting
-with the indenter is K/3 (r - R)^3.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-This fix computes a global scalar energy and a global 3-vector of
-forces (on the indenter), which can be accessed by various :ref:`output commands <howto_15>`. The scalar and vector values
-calculated by this fix are "extensive".
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command. Note that if you
-define the indenter geometry with a variable using a time-dependent
-formula, LAMMPS uses the iteration count in the minimizer as the
-timestep. But it is almost certainly a bad idea to have the indenter
-change its position or size during a minimization. LAMMPS does not
-check if you have done this.
-
-.. note::
-
- If you want the atom/indenter interaction energy to be included
- in the total potential energy of the system (the quantity being
- minimized), you must enable the :doc:`fix_modify <fix_modify>` *energy*
- option for this fix.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-Default
-"""""""
-
-The option defaults are side = out and units = lattice.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_ipi.txt b/doc/html/_sources/fix_ipi.txt
deleted file mode 100644
index e7356bf4c..000000000
--- a/doc/html/_sources/fix_ipi.txt
+++ /dev/null
@@ -1,107 +0,0 @@
-.. index:: fix ipi
-
-fix ipi command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID ipi address port [unix]
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* ipi = style name of this fix command
-* address = internet address (FQDN or IP), or UNIX socket name
-* port = port number (ignored for UNIX sockets)
-* optional keyword = *unix*\ , if present uses a unix socket
-
-Examples
-""""""""
-
-fix 1 all ipi my.server.com 12345
-fix 1 all ipi mysocket 666 unix
-
-Description
-"""""""""""
-
-This fix enables LAMMPS to be run as a client for the i-PI Python
-wrapper :ref:`(IPI) <IPI>` for performing a path integral molecular dynamics
-(PIMD) simulation. The philosophy behind i-PI is described in the
-following publication :ref:`(IPI-CPC) <IPICPC>`.
-
-A version of the i-PI package, containing only files needed for use
-with LAMMPS, is provided in the tools/i-pi directory. See the
-tools/i-pi/manual.pdf for an introduction to i-PI. The
-examples/USER/i-pi directory contains example scripts for using i-PI
-with LAMMPS.
-
-In brief, the path integral molecular dynamics is performed by the
-Python wrapper, while the client (LAMMPS in this case) simply computes
-forces and energy for each configuration. The communication between
-the two components takes place using sockets, and is reduced to the
-bare minimum. All the parameters of the dynamics are specified in the
-input of i-PI, and all the parameters of the force field must be
-specified as LAMMPS inputs, preceding the *fix ipi* command.
-
-The server address must be specified by the *address* argument, and
-can be either the IP address, the fully-qualified name of the server,
-or the name of a UNIX socket for local, faster communication. In the
-case of internet sockets, the *port* argument specifies the port
-number on which i-PI is listening, while the *unix* optional switch
-specifies that the socket is a UNIX socket.
-
-Note that there is no check of data integrity, or that the atomic
-configurations make sense. It is assumed that the species in the i-PI
-input are listed in the same order as in the data file of LAMMPS. The
-initial configuration is ignored, as it will be substituted with the
-coordinates received from i-PI before forces are ever evaluated.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-There is no restart information associated with this fix, since all
-the dynamical parameters are dealt with by i-PI.
-
-Restrictions
-""""""""""""
-
-
-Using this fix on anything other than all atoms requires particular
-care, since i-PI will know nothing on atoms that are not those whose
-coordinates are transferred. However, one could use this strategy to
-define an external potential acting on the atoms that are moved by
-i-PI.
-
-This fix is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. Because of
-the use of UNIX domain sockets, this fix will only work in a UNIX
-environment.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`
-
-
-----------
-
-
-.. _IPICPC:
-
-
-
-**(IPI-CPC)** Ceriotti, More and Manolopoulos, Comp Phys Comm, 185,
-1019-1026 (2014).
-
-.. _IPI:
-
-
-
-**(IPI)**
-`http://epfl-cosmo.github.io/gle4md/index.html?page=ipi <http://epfl-cosmo.github.io/gle4md/index.html?page=ipi>`_
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_langevin.txt b/doc/html/_sources/fix_langevin.txt
deleted file mode 100644
index ef9d7d616..000000000
--- a/doc/html/_sources/fix_langevin.txt
+++ /dev/null
@@ -1,374 +0,0 @@
-.. index:: fix langevin
-
-fix langevin command
-====================
-
-fix langevin/kk command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID langevin Tstart Tstop damp seed keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* langevin = style name of this fix command
-* Tstart,Tstop = desired temperature at start/end of run (temperature units)
-* Tstart can be a variable (see below)
-* damp = damping parameter (time units)
-* seed = random number seed to use for white noise (positive integer)
-* zero or more keyword/value pairs may be appended
-* keyword = *angmom* or *omega* or *scale* or *tally* or *zero*
-.. parsed-literal::
-
- *angmom* value = *no* or factor
- *no* = do not thermostat rotational degrees of freedom via the angular momentum
- factor = do thermostat rotational degrees of freedom via the angular momentum and apply numeric scale factor as discussed below
- *gjf* value = *no* or *yes*
- *no* = use standard formulation
- *yes* = use Gronbech-Jensen/Farago formulation
- *omega* value = *no* or *yes*
- *no* = do not thermostat rotational degrees of freedom via the angular velocity
- *yes* = do thermostat rotational degrees of freedom via the angular velocity
- *scale* values = type ratio
- type = atom type (1-N)
- ratio = factor by which to scale the damping coefficient
- *tally* value = *no* or *yes*
- *no* = do not tally the energy added/subtracted to atoms
- *yes* = do tally the energy added/subtracted to atoms
- *zero* value = *no* or *yes*
- *no* = do not set total random force to zero
- *yes* = set total random force to zero
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 3 boundary langevin 1.0 1.0 1000.0 699483
- fix 1 all langevin 1.0 1.1 100.0 48279 scale 3 1.5
- fix 1 all langevin 1.0 1.1 100.0 48279 angmom 3.333
-
-Description
-"""""""""""
-
-Apply a Langevin thermostat as described in :ref:`(Schneider) <Schneider>`
-to a group of atoms which models an interaction with a background
-implicit solvent. Used with :doc:`fix nve <fix_nve>`, this command
-performs Brownian dynamics (BD), since the total force on each atom
-will have the form:
-
-.. parsed-literal::
-
- F = Fc + Ff + Fr
- Ff = - (m / damp) v
- Fr is proportional to sqrt(Kb T m / (dt damp))
-
-Fc is the conservative force computed via the usual inter-particle
-interactions (:doc:`pair_style <pair_style>`,
-:doc:`bond_style <bond_style>`, etc).
-
-The Ff and Fr terms are added by this fix on a per-particle basis.
-See the :doc:`pair_style dpd/tstat <pair_dpd>` command for a
-thermostatting option that adds similar terms on a pairwise basis to
-pairs of interacting particles.
-
-Ff is a frictional drag or viscous damping term proportional to the
-particle's velocity. The proportionality constant for each atom is
-computed as m/damp, where m is the mass of the particle and damp is
-the damping factor specified by the user.
-
-Fr is a force due to solvent atoms at a temperature T randomly bumping
-into the particle. As derived from the fluctuation/dissipation
-theorem, its magnitude as shown above is proportional to sqrt(Kb T m /
-dt damp), where Kb is the Boltzmann constant, T is the desired
-temperature, m is the mass of the particle, dt is the timestep size,
-and damp is the damping factor. Random numbers are used to randomize
-the direction and magnitude of this force as described in
-:ref:`(Dunweg) <Dunweg>`, where a uniform random number is used (instead of
-a Gaussian random number) for speed.
-
-Note that unless you use the *omega* or *angmom* keywords, the
-thermostat effect of this fix is applied to only the translational
-degrees of freedom for the particles, which is an important
-consideration for finite-size particles, which have rotational degrees
-of freedom, are being thermostatted. The translational degrees of
-freedom can also have a bias velocity removed from them before
-thermostatting takes place; see the description below.
-
-.. note::
-
- Unlike the :doc:`fix nvt <fix_nh>` command which performs
- Nose/Hoover thermostatting AND time integration, this fix does NOT
- perform time integration. It only modifies forces to effect
- thermostatting. Thus you must use a separate time integration fix,
- like :doc:`fix nve <fix_nve>` to actually update the velocities and
- positions of atoms using the modified forces. Likewise, this fix
- should not normally be used on atoms that also have their temperature
- controlled by another fix - e.g. by :doc:`fix nvt <fix_nh>` or :doc:`fix temp/rescale <fix_temp_rescale>` commands.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-The desired temperature at each timestep is a ramped value during the
-run from *Tstart* to *Tstop*\ .
-
-*Tstart* can be specified as an equal-style or atom-style
-:doc:`variable <variable>`. In this case, the *Tstop* setting is
-ignored. If the value is a variable, it should be specified as
-v_name, where name is the variable name. In this case, the variable
-will be evaluated each timestep, and its value used to determine the
-target temperature.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent temperature.
-
-Atom-style variables can specify the same formulas as equal-style
-variables but can also include per-atom values, such as atom
-coordinates. Thus it is easy to specify a spatially-dependent
-temperature with optional time-dependence as well.
-
-Like other fixes that perform thermostatting, this fix can be used
-with :doc:`compute commands <compute>` that remove a "bias" from the
-atom velocities. E.g. removing the center-of-mass velocity from a
-group of atoms or removing the x-component of velocity from the
-calculation. This is not done by default, but only if the
-:doc:`fix_modify <fix_modify>` command is used to assign a temperature
-compute to this fix that includes such a bias term. See the doc pages
-for individual :doc:`compute commands <compute>` to determine which ones
-include a bias. In this case, the thermostat works in the following
-manner: bias is removed from each atom, thermostatting is performed on
-the remaining thermal degrees of freedom, and the bias is added back
-in.
-
-The *damp* parameter is specified in time units and determines how
-rapidly the temperature is relaxed. For example, a value of 100.0
-means to relax the temperature in a timespan of (roughly) 100 time
-units (tau or fmsec or psec - see the :doc:`units <units>` command).
-The damp factor can be thought of as inversely related to the
-viscosity of the solvent. I.e. a small relaxation time implies a
-hi-viscosity solvent and vice versa. See the discussion about gamma
-and viscosity in the documentation for the :doc:`fix viscous <fix_viscous>` command for more details.
-
-The random # *seed* must be a positive integer. A Marsaglia random
-number generator is used. Each processor uses the input seed to
-generate its own unique seed and its own stream of random numbers.
-Thus the dynamics of the system will not be identical on two runs on
-different numbers of processors.
-
-
-----------
-
-
-The keyword/value option pairs are used in the following ways.
-
-The keyword *angmom* and *omega* keywords enable thermostatting of
-rotational degrees of freedom in addition to the usual translational
-degrees of freedom. This can only be done for finite-size particles.
-
-A simulation using atom_style sphere defines an omega for finite-size
-spheres. A simulation using atom_style ellipsoid defines a finite
-size and shape for aspherical particles and an angular momentum.
-The Langevin formulas for thermostatting the rotational degrees of
-freedom are the same as those above, where force is replaced by
-torque, m is replaced by the moment of inertia I, and v is replaced by
-omega (which is derived from the angular momentum in the case of
-aspherical particles).
-
-The rotational temperature of the particles can be monitored by the
-:doc:`compute temp/sphere <compute_temp_sphere>` and :doc:`compute temp/asphere <compute_temp_asphere>` commands with their rotate
-options.
-
-For the *omega* keyword there is also a scale factor of 10.0/3.0 that
-is applied as a multiplier on the Ff (damping) term in the equation
-above and of sqrt(10.0/3.0) as a multiplier on the Fr term. This does
-not affect the thermostatting behaviour of the Langevin formalism but
-insures that the randomized rotational diffusivity of spherical
-particles is correct.
-
-For the *angmom* keyword a similar scale factor is needed which is
-10.0/3.0 for spherical particles, but is anisotropic for aspherical
-particles (e.g. ellipsoids). Currently LAMMPS only applies an
-isotropic scale factor, and you can choose its magnitude as the
-specified value of the *angmom* keyword. If your aspherical particles
-are (nearly) spherical than a value of 10.0/3.0 = 3.333 is a good
-choice. If they are highly aspherical, a value of 1.0 is as good a
-choice as any, since the effects on rotational diffusivity of the
-particles will be incorrect regardless. Note that for any reasonable
-scale factor, the thermostatting effect of the *angmom* keyword on the
-rotational temperature of the aspherical particles should still be
-valid.
-
-The keyword *scale* allows the damp factor to be scaled up or down by
-the specified factor for atoms of that type. This can be useful when
-different atom types have different sizes or masses. It can be used
-multiple times to adjust damp for several atom types. Note that
-specifying a ratio of 2 increases the relaxation time which is
-equivalent to the solvent's viscosity acting on particles with 1/2 the
-diameter. This is the opposite effect of scale factors used by the
-:doc:`fix viscous <fix_viscous>` command, since the damp factor in fix
-*langevin* is inversely related to the gamma factor in fix *viscous*\ .
-Also note that the damping factor in fix *langevin* includes the
-particle mass in Ff, unlike fix *viscous*\ . Thus the mass and size of
-different atom types should be accounted for in the choice of ratio
-values.
-
-The keyword *tally* enables the calculation of the cumulative energy
-added/subtracted to the atoms as they are thermostatted. Effectively
-it is the energy exchanged between the infinite thermal reservoir and
-the particles. As described below, this energy can then be printed
-out or added to the potential energy of the system to monitor energy
-conservation.
-
-.. note::
-
- this accumulated energy does NOT include kinetic energy removed
- by the *zero* flag. LAMMPS will print a warning when both options are
- active.
-
-The keyword *zero* can be used to eliminate drift due to the
-thermostat. Because the random forces on different atoms are
-independent, they do not sum exactly to zero. As a result, this fix
-applies a small random force to the entire system, and the
-center-of-mass of the system undergoes a slow random walk. If the
-keyword *zero* is set to *yes*\ , the total random force is set exactly
-to zero by subtracting off an equal part of it from each atom in the
-group. As a result, the center-of-mass of a system with zero initial
-momentum will not drift over time.
-
-The keyword *gjf* can be used to run the :ref:`Gronbech-Jensen/Farago <Gronbech-Jensen>` time-discretization of the Langevin model. As
-described in the papers cited below, the purpose of this method is to
-enable longer timesteps to be used (up to the numerical stability
-limit of the integrator), while still producing the correct Boltzmann
-distribution of atom positions. It is implemented within LAMMPS, by
-changing how the the random force is applied so that it is composed of
-the average of two random forces representing half-contributions from
-the previous and current time intervals.
-
-In common with all methods based on Verlet integration, the
-discretized velocities generated by this method in conjunction with
-velocity-Verlet time integration are not exactly conjugate to the
-positions. As a result the temperature (computed from the discretized
-velocities) will be systematically lower than the target temperature,
-by a small amount which grows with the timestep. Nonetheless, the
-distribution of atom positions will still be consistent with the
-target temperature.
-
-As an example of using the *gjf* keyword, for molecules containing C-H
-bonds, configurational properties generated with dt = 2.5 fs and tdamp
-= 100 fs are indistinguishable from dt = 0.5 fs. Because the velocity
-distribution systematically decreases with increasing timestep, the
-method should not be used to generate properties that depend on the
-velocity distribution, such as the velocity autocorrelation function
-(VACF). In this example, the velocity distribution at dt = 2.5fs
-generates an average temperature of 220 K, instead of 300 K.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. Because the state of the random number generator
-is not saved in restart files, this means you cannot do "exact"
-restarts with this fix, where the simulation continues on the same as
-if no restart had taken place. However, in a statistical sense, a
-restarted simulation should produce the same behavior.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a temperature :doc:`compute <compute>`
-you have defined to this fix which will be used in its thermostatting
-procedure, as described above. For consistency, the group used by
-this fix and by the compute should be the same.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Langevin thermostatting to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`. Note that use of this option requires
-setting the *tally* keyword to *yes*\ .
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-cummulative energy change due to this fix. The scalar value
-calculated by this fix is "extensive". Note that calculation of this
-quantity requires setting the *tally* keyword to *yes*\ .
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix viscous <fix_viscous>`, :doc:`fix nvt <fix_nh>`, :doc:`pair_style dpd/tstat <pair_dpd>`
-
-Default
-"""""""
-
-The option defaults are angmom = no, omega = no, scale = 1.0 for all
-types, tally = no, zero = no, gjf = no.
-
-
-----------
-
-
-.. _Dunweg:
-
-
-
-**(Dunweg)** Dunweg and Paul, Int J of Modern Physics C, 2, 817-27 (1991).
-
-.. _Schneider:
-
-
-
-**(Schneider)** Schneider and Stoll, Phys Rev B, 17, 1302 (1978).
-
-.. _Gronbech-Jensen:
-
-
-
-**(Gronbech-Jensen)** Gronbech-Jensen and Farago, Mol Phys, 111, 983
-(2013); Gronbech-Jensen, Hayre, and Farago, Comp Phys Comm,
-185, 524 (2014)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_langevin_drude.txt b/doc/html/_sources/fix_langevin_drude.txt
deleted file mode 100644
index fe6d67f53..000000000
--- a/doc/html/_sources/fix_langevin_drude.txt
+++ /dev/null
@@ -1,318 +0,0 @@
-.. index:: fix langevin/drude
-
-fix langevin/drude command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID langevin/drude Tcom damp_com seed_com Tdrude damp_drude seed_drude keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* langevin/drude = style name of this fix command
-* Tcom = desired temperature of the centers of mass (temperature units)
-* damp_com = damping parameter for the thermostat on centers of mass (time units)
-* seed_com = random number seed to use for white noise of the thermostat on centers of mass (positive integer)
-* Tdrude = desired temperature of the Drude oscillators (temperature units)
-* damp_drude = damping parameter for the thermostat on Drude oscillators (time units)
-* seed_drude = random number seed to use for white noise of the thermostat on Drude oscillators (positive integer)
-* zero or more keyword/value pairs may be appended
-* keyword = *zero*
-.. parsed-literal::
-
- *zero* value = *no* or *yes*
- *no* = do not set total random force on centers of mass to zero
- *yes* = set total random force on centers of mass to zero
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 3 all langevin/drude 300.0 100.0 19377 1.0 20.0 83451
- fix 1 all langevin/drude 298.15 100.0 19377 5.0 10.0 83451 zero yes
-
-Description
-"""""""""""
-
-Apply two Langevin thermostats as described in :ref:`(Jiang) <Jiang>` for
-thermalizing the reduced degrees of freedom of Drude oscillators.
-This link describes how to use the :doc:`thermalized Drude oscillator model <tutorial_drude>` in LAMMPS and polarizable models in LAMMPS
-are discussed in :ref:`this Section <howto_25>`.
-
-Drude oscillators are a way to simulate polarizables atoms, by
-splitting them into a core and a Drude particle bound by a harmonic
-bond. The thermalization works by transforming the particles degrees
-of freedom by these equations. In these equations upper case denotes
-atomic or center of mass values and lower case denotes Drude particle
-or dipole values. Primes denote the transformed (reduced) values,
-while bare letters denote the original values.
-
-Velocities:
-
-.. math::
-
- \begin{equation} V' = \frac {M\, V + m\, v} {M'} \end{equation}
-
-
-.. math::
-
- \begin{equation} v' = v - V \end{equation}
-
-Masses:
-
-.. math::
-
- \begin{equation} M' = M + m \end{equation}
-
-
-.. math::
-
- \begin{equation} m' = \frac {M\, m } {M'} \end{equation}
-
-The Langevin forces are computed as
-
-.. math::
-
- \begin{equation} F' = - \frac {M'} {\mathtt{damp\_com}}\, V' + F_r' \end{equation}
-
-
-.. math::
-
- \begin{equation} f' = - \frac {m'} {\mathtt{damp\_drude}}\, v' + f_r' \end{equation}
-
-:math:`F_r'` is a random force proportional to
-:math:`\sqrt { \frac {2\, k_B \mathtt{Tcom}\, m'} {\mathrm dt\, \mathtt{damp\_com} } }`. :b:math:`f_r'` is a random force proportional to
-:math:`\sqrt { \frac {2\, k_B \mathtt{Tdrude}\, m'} {\mathrm dt\, \mathtt{damp\_drude} } }`.
-Then the real forces acting on the particles are computed from the inverse
-transform:
-
-.. math::
-
- \begin{equation} F = \frac M {M'}\, F' - f' \end{equation}
-
-
-.. math::
-
- \begin{equation} f = \frac m {M'}\, F' + f' \end{equation}
-
-This fix also thermostates non-polarizable atoms in the group at
-temperature *Tcom*\ , as if they had a massless Drude partner. The
-Drude particles themselves need not be in the group. The center of
-mass and the dipole are thermostated iff the core atom is in the
-group.
-
-Note that the thermostat effect of this fix is applied to only the
-translational degrees of freedom of the particles, which is an
-important consideration if finite-size particles, which have
-rotational degrees of freedom, are being thermostated. The
-translational degrees of freedom can also have a bias velocity removed
-from them before thermostating takes place; see the description below.
-
-.. note::
-
- Like the :doc:`fix langevin <fix_langevin>` command, this fix does
- NOT perform time integration. It only modifies forces to effect
- thermostating. Thus you must use a separate time integration fix, like
- :doc:`fix nve <fix_nve>` or :doc:`fix nph <fix_nh>` to actually update the
- velocities and positions of atoms using the modified forces.
- Likewise, this fix should not normally be used on atoms that also have
- their temperature controlled by another fix - e.g. by :doc:`fix nvt <fix_nh>` or :doc:`fix temp/rescale <fix_temp_rescale>` commands.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostating.
-
-
-----------
-
-
-This fix requires each atom know whether it is a Drude particle or
-not. You must therefore use the :doc:`fix drude <fix_drude>` command to
-specify the Drude status of each atom type.
-
-.. note::
-
- only the Drude core atoms need to be in the group specified for
- this fix. A Drude electron will be transformed together with its cores
- even if it is not itself in the group. It is safe to include Drude
- electrons or non-polarizable atoms in the group. The non-polarizable
- atoms will simply be thermostatted as if they had a massless Drude
- partner (electron).
-
-.. note::
-
- Ghost atoms need to know their velocity for this fix to act
- correctly. You must use the :doc:`comm_modify <comm_modify>` command to
- enable this, e.g.
-
-.. parsed-literal::
-
- comm_modify vel yes
-
-
-----------
-
-
-*Tcom* is the target temperature of the centers of mass, which would
-be used to thermostate the non-polarizable atoms. *Tdrude* is the
-(normally low) target temperature of the core-Drude particle pairs
-(dipoles). *Tcom* and *Tdrude* can be specified as an equal-style
-:doc:`variable <variable>`. If the value is a variable, it should be
-specified as v_name, where name is the variable name. In this case,
-the variable will be evaluated each timestep, and its value used to
-determine the target temperature.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent temperature.
-
-Like other fixes that perform thermostating, this fix can be used with
-:doc:`compute commands <compute>` that remove a "bias" from the atom
-velocities. E.g. removing the center-of-mass velocity from a group of
-atoms. This is not done by default, but only if the
-:doc:`fix_modify <fix_modify>` command is used to assign a temperature
-compute to this fix that includes such a bias term. See the doc pages
-for individual :doc:`compute commands <compute>` to determine which ones
-include a bias. In this case, the thermostat works in the following
-manner: bias is removed from each atom, thermostating is performed on
-the remaining thermal degrees of freedom, and the bias is added back
-in. NOTE: this feature has not been tested.
-
-Note: The temperature thermostating the core-Drude particle pairs
-should be chosen low enough, so as to mimic as closely as possible the
-self-consistent minimization. It must however be high enough, so that
-the dipoles can follow the local electric field exerted by the
-neighbouring atoms. The optimal value probably depends on the
-temperature of the centers of mass and on the mass of the Drude
-particles.
-
-*damp_com* is the characteristic time for reaching thermal equilibrium
-of the centers of mass. For example, a value of 100.0 means to relax
-the temperature of the centers of mass in a timespan of (roughly) 100
-time units (tau or fmsec or psec - see the :doc:`units <units>`
-command). *damp_drude* is the characteristic time for reaching
-thermal equilibrium of the dipoles. It is typically a few timesteps.
-
-The number *seed_com* and *seed_drude* are positive integers. They set
-the seeds of the Marsaglia random number generators used for
-generating the random forces on centers of mass and on the
-dipoles. Each processor uses the input seed to generate its own unique
-seed and its own stream of random numbers. Thus the dynamics of the
-system will not be identical on two runs on different numbers of
-processors.
-
-The keyword *zero* can be used to eliminate drift due to the
-thermostat on centers of mass. Because the random forces on different
-centers of mass are independent, they do not sum exactly to zero. As
-a result, this fix applies a small random force to the entire system,
-and the momentum of the total center of mass of the system undergoes a
-slow random walk. If the keyword *zero* is set to *yes*\ , the total
-random force on the centers of mass is set exactly to zero by
-subtracting off an equal part of it from each center of mass in the
-group. As a result, the total center of mass of a system with zero
-initial momentum will not drift over time.
-
-The actual temperatures of cores and Drude particles, in
-center-of-mass and relative coordinates, respectively, can be
-calculated using the :doc:`compute temp/drude <compute_temp_drude>`
-command.
-
-
-----------
-
-
-Usage example for rigid bodies in the NPT ensemble:
-
-.. parsed-literal::
-
- comm_modify vel yes
- fix TEMP all langevin/drude 300. 100. 1256 1. 20. 13977 zero yes
- fix NPH ATOMS rigid/nph/small molecule iso 1. 1. 500.
- fix NVE DRUDES nve
- compute TDRUDE all temp/drude
- thermo_style custom step cpu etotal ke pe ebond ecoul elong press vol temp c_TDRUDE[1] c_TDRUDE[2]
-
-Comments:
-
-* Drude particles should not be in the rigid group, otherwise the Drude
- oscillators will be frozen and the system will lose its
- polarizability.
-* *zero yes* avoids a drift of the center of mass of
- the system, but is a bit slower.
-* Use two different random seeds to avoid unphysical correlations.
-* Temperature is controlled by the fix *langevin/drude*\ , so the
- time-integration fixes do not thermostate. Don't forget to
- time-integrate both cores and Drude particles.
-* Pressure is time-integrated only once by using *nve* for Drude
- particles and *nph* for atoms/cores (or vice versa). Do not use *nph*
- for both.
-* The temperatures of cores and Drude particles are calculated by
- :doc:`compute temp/drude <compute_temp_drude>`
-* Contrary to the alternative thermostating using Nose-Hoover thermostat
- fix *npt* and :doc:`fix drude/transform <fix_drude_transform>`, the
- *fix_modify* command is not required here, because the fix *nph*
- computes the global pressure even if its group is *ATOMS*\ . This is
- what we want. If we thermostated *ATOMS* using *npt*\ , the pressure
- should be the global one, but the temperature should be only that of
- the cores. That's why the command *fix_modify* should be called in
- that case.
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. Because the state of the random number generator
-is not saved in restart files, this means you cannot do "exact"
-restarts with this fix, where the simulation continues on the same as
-if no restart had taken place. However, in a statistical sense, a
-restarted simulation should produce the same behavior.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a temperature :doc:`compute <compute>`
-you have defined to this fix which will be used in its thermostating
-procedure, as described above. For consistency, the group used by the
-compute should include the group of this fix and the Drude particles.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix langevin <fix_langevin>`,
-:doc:`fix drude <fix_drude>`,
-:doc:`fix drude/transform <fix_drude_transform>`,
-:doc:`compute temp/drude <compute_temp_drude>`,
-:doc:`pair_style thole <pair_thole>`
-
-Default
-"""""""
-
-The option defaults are zero = no.
-
-
-----------
-
-
-.. _Jiang:
-
-
-
-**(Jiang)** Jiang, Hardy, Phillips, MacKerell, Schulten, and Roux, J
-Phys Chem Lett, 2, 87-92 (2011).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_langevin_eff.txt b/doc/html/_sources/fix_langevin_eff.txt
deleted file mode 100644
index c3ae38c16..000000000
--- a/doc/html/_sources/fix_langevin_eff.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-.. index:: fix langevin/eff
-
-fix langevin/eff command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID langevin/eff Tstart Tstop damp seed keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* langevin/eff = style name of this fix command
-* Tstart,Tstop = desired temperature at start/end of run (temperature units)
-* damp = damping parameter (time units)
-* seed = random number seed to use for white noise (positive integer)
-* zero or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *scale* or *tally* or *zero*
- *scale* values = type ratio
- type = atom type (1-N)
- ratio = factor by which to scale the damping coefficient
- *tally* values = *no* or *yes*
- *no* = do not tally the energy added/subtracted to atoms
- *yes* = do tally the energy added/subtracted to atoms
-
-.. parsed-literal::
-
- *zero* value = *no* or *yes*
- *no* = do not set total random force to zero
- *yes* = set total random force to zero
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 3 boundary langevin/eff 1.0 1.0 10.0 699483
- fix 1 all langevin/eff 1.0 1.1 10.0 48279 scale 3 1.5
-
-Description
-"""""""""""
-
-Apply a Langevin thermostat as described in :ref:`(Schneider) <Schneider>`
-to a group of nuclei and electrons in the :doc:`electron force field <pair_eff>` model. Used with :doc:`fix nve/eff <fix_nve_eff>`,
-this command performs Brownian dynamics (BD), since the total force on
-each atom will have the form:
-
-.. parsed-literal::
-
- F = Fc + Ff + Fr
- Ff = - (m / damp) v
- Fr is proportional to sqrt(Kb T m / (dt damp))
-
-Fc is the conservative force computed via the usual inter-particle
-interactions (:doc:`pair_style <pair_style>`).
-
-The Ff and Fr terms are added by this fix on a per-particle basis.
-
-The operation of this fix is exactly like that described by the :doc:`fix langevin <fix_langevin>` command, except that the thermostatting
-is also applied to the radial electron velocity for electron
-particles.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. Because the state of the random number generator
-is not saved in restart files, this means you cannot do "exact"
-restarts with this fix, where the simulation continues on the same as
-if no restart had taken place. However, in a statistical sense, a
-restarted simulation should produce the same behavior.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a temperature :doc:`compute <compute>`
-you have defined to this fix which will be used in its thermostatting
-procedure, as described above. For consistency, the group used by
-this fix and by the compute should be the same.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Langevin thermostatting to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`. Note that use of this option requires
-setting the *tally* keyword to *yes*\ .
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-cummulative energy change due to this fix. The scalar value
-calculated by this fix is "extensive". Note that calculation of this
-quantity requires setting the *tally* keyword to *yes*\ .
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-This fix is part of the USER-EFF package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix langevin <fix_langevin>`
-
-Default
-"""""""
-
-The option defaults are scale = 1.0 for all types and tally = no.
-
-
-----------
-
-
-.. _Dunweg:
-
-
-
-**(Dunweg)** Dunweg and Paul, Int J of Modern Physics C, 2, 817-27 (1991).
-
-.. _Schneider:
-
-
-
-**(Schneider)** Schneider and Stoll, Phys Rev B, 17, 1302 (1978).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_lb_fluid.txt b/doc/html/_sources/fix_lb_fluid.txt
deleted file mode 100644
index 5ab17b5c0..000000000
--- a/doc/html/_sources/fix_lb_fluid.txt
+++ /dev/null
@@ -1,410 +0,0 @@
-.. index:: fix lb/fluid
-
-fix lb/fluid command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID lb/fluid nevery LBtype viscosity density keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* lb/fluid = style name of this fix command
-* nevery = update the lattice-Boltzmann fluid every this many timesteps
-* LBtype = 1 to use the standard finite difference LB integrator,
- 2 to use the LB integrator of :ref:`Ollila et al. <Ollila>`
-* viscosity = the fluid viscosity (units of mass/(time*length)).
-* density = the fluid density.
-* zero or more keyword/value pairs may be appended
-* keyword = *setArea* or *setGamma* or *scaleGamma* or *dx* or *dm* or *a0* or *noise* or *calcforce* or *trilinear* or *D3Q19* or *read_restart* or *write_restart* or *zwall_velocity* or *bodyforce* or *printfluid*
-.. parsed-literal::
-
- *setArea* values = type node_area
- type = atom type (1-N)
- node_area = portion of the surface area of the composite object associated with the particular atom type (used when the force coupling constant is set by default).
- *setGamma* values = gamma
- gamma = user set value for the force coupling constant.
- *scaleGamma* values = type gammaFactor
- type = atom type (1-N)
- gammaFactor = factor to scale the *setGamma* gamma value by, for the specified atom type.
- *dx* values = dx_LB = the lattice spacing.
- *dm* values = dm_LB = the lattice-Boltzmann mass unit.
- *a0* values = a_0_real = the square of the speed of sound in the fluid.
- *noise* values = Temperature seed
- Temperature = fluid temperature.
- seed = random number generator seed (positive integer)
- *calcforce* values = N forcegroup-ID
- N = output the force and torque every N timesteps
- forcegroup-ID = ID of the particle group to calculate the force and torque of
- *trilinear* values = none (used to switch from the default Peskin interpolation stencil to the trilinear stencil).
- *D3Q19* values = none (used to switch from the default D3Q15, 15 velocity lattice, to the D3Q19, 19 velocity lattice).
- *read_restart* values = restart file = name of the restart file to use to restart a fluid run.
- *write_restart* values = N = write a restart file every N MD timesteps.
- *zwall_velocity* values = velocity_bottom velocity_top = velocities along the y-direction of the bottom and top walls (located at z=zmin and z=zmax).
- *bodyforce* values = bodyforcex bodyforcey bodyforcez = the x,y and z components of a constant body force added to the fluid.
- *printfluid* values = N = print the fluid density and velocity at each grid point every N timesteps.
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all lb/fluid 1 2 1.0 1.0 setGamma 13.0 dx 4.0 dm 10.0 calcforce sphere1
- fix 1 all lb/fluid 1 1 1.0 0.0009982071 setArea 1 1.144592082 dx 2.0 dm 0.3 trilinear noise 300.0 8979873
-
-Description
-"""""""""""
-
-Implement a lattice-Boltzmann fluid on a uniform mesh covering the LAMMPS
-simulation domain. The MD particles described by *group-ID* apply a velocity
-dependent force to the fluid.
-
-The lattice-Boltzmann algorithm solves for the fluid motion governed by
-the Navier Stokes equations,
-
-.. image:: Eqs/fix_lb_fluid_navierstokes.jpg
- :align: center
-
-with,
-
-.. image:: Eqs/fix_lb_fluid_viscosity.jpg
- :align: center
-
-where rho is the fluid density, u is the local fluid velocity, sigma
-is the stress tensor, F is a local external force, and eta and Lambda
-are the shear and bulk viscosities respectively. Here, we have
-implemented
-
-.. image:: Eqs/fix_lb_fluid_stress.jpg
- :align: center
-
-with a_0 set to 1/3 (dx/dt)^2 by default.
-
-The algorithm involves tracking the time evolution of a set of partial
-distribution functions which evolve according to a velocity
-discretized version of the Boltzmann equation,
-
-.. image:: Eqs/fix_lb_fluid_boltzmann.jpg
- :align: center
-
-where the first term on the right hand side represents a single time
-relaxation towards the equilibrium distribution function, and tau is a
-parameter physically related to the viscosity. On a technical note,
-we have implemented a 15 velocity model (D3Q15) as default; however,
-the user can switch to a 19 velocity model (D3Q19) through the use of
-the *D3Q19* keyword. This fix provides the user with the choice of
-two algorithms to solve this equation, through the specification of
-the keyword *LBtype*\ . If *LBtype* is set equal to 1, the standard
-finite difference LB integrator is used. If *LBtype* is set equal to
-2, the algorithm of :ref:`Ollila et al. <Ollila>` is used.
-
-Physical variables are then defined in terms of moments of the distribution
-functions,
-
-.. image:: Eqs/fix_lb_fluid_properties.jpg
- :align: center
-
-Full details of the lattice-Boltzmann algorithm used can be found in
-:ref:`Mackay et al. <fluid-Mackay>`.
-
-The fluid is coupled to the MD particles described by *group-ID*
-through a velocity dependent force. The contribution to the fluid
-force on a given lattice mesh site j due to MD particle alpha is
-calculated as:
-
-.. image:: Eqs/fix_lb_fluid_fluidforce.jpg
- :align: center
-
-where v_n is the velocity of the MD particle, u_f is the fluid
-velocity interpolated to the particle location, and gamma is the force
-coupling constant. Zeta is a weight assigned to the grid point,
-obtained by distributing the particle to the nearest lattice sites.
-For this, the user has the choice between a trilinear stencil, which
-provides a support of 8 lattice sites, or the immersed boundary method
-Peskin stencil, which provides a support of 64 lattice sites. While
-the Peskin stencil is seen to provide more stable results, the
-trilinear stencil may be better suited for simulation of objects close
-to walls, due to its smaller support. Therefore, by default, the
-Peskin stencil is used; however the user may switch to the trilinear
-stencil by specifying the keyword, *trilinear*\ .
-
-By default, the force coupling constant, gamma, is calculated according to
-
-.. image:: Eqs/fix_lb_fluid_gammadefault.jpg
- :align: center
-
-Here, m_v is the mass of the MD particle, m_u is a representative
-fluid mass at the particle location, and dt_collision is a collision
-time, chosen such that tau/dt_collision = 1 (see :ref:`Mackay and Denniston <Mackay2>` for full details). In order to calculate m_u, the
-fluid density is interpolated to the MD particle location, and
-multiplied by a volume, node_area*dx_lb, where node_area represents
-the portion of the surface area of the composite object associated
-with a given MD particle. By default, node_area is set equal to
-dx_lb*dx_lb; however specific values for given atom types can be set
-using the *setArea* keyword.
-
-The user also has the option of specifying their own value for the
-force coupling constant, for all the MD particles associated with the
-fix, through the use of the *setGamma* keyword. This may be useful
-when modelling porous particles. See :ref:`Mackay et al. <fluid-Mackay>` for a
-detailed description of the method by which the user can choose an
-appropriate gamma value.
-
-.. note::
-
- while this fix applies the force of the particles on the fluid,
- it does not apply the force of the fluid to the particles. When the
- force coupling constant is set using the default method, there is only
- one option to include this hydrodynamic force on the particles, and
- that is through the use of the :doc:`lb/viscous <fix_lb_viscous>` fix.
- This fix adds the hydrodynamic force to the total force acting on the
- particles, after which any of the built-in LAMMPS integrators can be
- used to integrate the particle motion. However, if the user specifies
- their own value for the force coupling constant, as mentioned in
- :ref:`Mackay et al. <fluid-Mackay>`, the built-in LAMMPS integrators may prove to
- be unstable. Therefore, we have included our own integrators :doc:`fix lb/rigid/pc/sphere <fix_lb_rigid_pc_sphere>`, and :doc:`fix lb/pc <fix_lb_pc>`, to solve for the particle motion in these
- cases. These integrators should not be used with the
- :doc:`lb/viscous <fix_lb_viscous>` fix, as they add hydrodynamic forces
- to the particles directly. In addition, they can not be used if the
- force coupling constant has been set the default way.
-
-.. note::
-
- if the force coupling constant is set using the default method,
- and the :doc:`lb/viscous <fix_lb_viscous>` fix is NOT used to add the
- hydrodynamic force to the total force acting on the particles, this
- physically corresponds to a situation in which an infinitely massive
- particle is moving through the fluid (since collisions between the
- particle and the fluid do not act to change the particle's velocity).
- Therefore, the user should set the mass of the particle to be
- significantly larger than the mass of the fluid at the particle
- location, in order to approximate an infinitely massive particle (see
- the dragforce test run for an example).
-
-
-----------
-
-
-Inside the fix, parameters are scaled by the lattice-Boltzmann
-timestep, dt, grid spacing, dx, and mass unit, dm. dt is set equal to
-(nevery*dt_MD), where dt_MD is the MD timestep. By default, dm is set
-equal to 1.0, and dx is chosen so that tau/(dt) =
-(3*eta*dt)/(rho*dx^2) is approximately equal to 1. However, the user
-has the option of specifying their own values for dm, and dx, by using
-the optional keywords *dm*\ , and *dx* respectively.
-
-.. note::
-
- Care must be taken when choosing both a value for dx, and a
- simulation domain size. This fix uses the same subdivision of the
- simulation domain among processors as the main LAMMPS program. In
- order to uniformly cover the simulation domain with lattice sites, the
- lengths of the individual LAMMPS subdomains must all be evenly
- divisible by dx. If the simulation domain size is cubic, with equal
- lengths in all dimensions, and the default value for dx is used, this
- will automatically be satisfied.
-
-Physical parameters describing the fluid are specified through
-*viscosity*\ , *density*\ , and *a0*\ . If the force coupling constant is
-set the default way, the surface area associated with the MD particles
-is specified using the *setArea* keyword. If the user chooses to
-specify a value for the force coupling constant, this is set using the
-*setGamma* keyword. These parameters should all be given in terms of
-the mass, distance, and time units chosen for the main LAMMPS run, as
-they are scaled by the LB timestep, lattice spacing, and mass unit,
-inside the fix.
-
-
-----------
-
-
-The *setArea* keyword allows the user to associate a surface area with
-a given atom type. For example if a spherical composite object of
-radius R is represented as a spherical shell of N evenly distributed
-MD particles, all of the same type, the surface area per particle
-associated with that atom type should be set equal to 4*pi*R^2/N.
-This keyword should only be used if the force coupling constant,
-gamma, is set the default way.
-
-The *setGamma* keyword allows the user to specify their own value for
-the force coupling constant, gamma, instead of using the default
-value.
-
-The *scaleGamma* keyword should be used in conjunction with the
-*setGamma* keyword, when the user wishes to specify different gamma
-values for different atom types. This keyword allows the user to
-scale the *setGamma* gamma value by a factor, gammaFactor, for a given
-atom type.
-
-The *dx* keyword allows the user to specify a value for the LB grid
-spacing.
-
-The *dm* keyword allows the user to specify the LB mass unit.
-
-If the *a0* keyword is used, the value specified is used for the
-square of the speed of sound in the fluid. If this keyword is not
-present, the speed of sound squared is set equal to (1/3)*(dx/dt)^2.
-Setting a0 > (dx/dt)^2 is not allowed, as this may lead to
-instabilities.
-
-If the *noise* keyword is used, followed by a a positive temperature
-value, and a positive integer random number seed, a thermal
-lattice-Boltzmann algorithm is used. If *LBtype* is set equal to 1
-(i.e. the standard LB integrator is chosen), the thermal LB algorithm
-of :ref:`Adhikari et al. <Adhikari>` is used; however if *LBtype* is set
-equal to 2 both the LB integrator, and thermal LB algorithm described
-in :ref:`Ollila et al. <Ollila>` are used.
-
-If the *calcforce* keyword is used, both the fluid force and torque
-acting on the specified particle group are printed to the screen every
-N timesteps.
-
-If the keyword *trilinear* is used, the trilinear stencil is used to
-interpolate the particle nodes onto the fluid mesh. By default, the
-immersed boundary method, Peskin stencil is used. Both of these
-interpolation methods are described in :ref:`Mackay et al. <fluid-Mackay>`.
-
-If the keyword *D3Q19* is used, the 19 velocity (D3Q19) lattice is
-used by the lattice-Boltzmann algorithm. By default, the 15 velocity
-(D3Q15) lattice is used.
-
-If the keyword *write_restart* is used, followed by a positive
-integer, N, a binary restart file is printed every N LB timesteps.
-This restart file only contains information about the fluid.
-Therefore, a LAMMPS restart file should also be written in order to
-print out full details of the simulation.
-
-.. note::
-
- When a large number of lattice grid points are used, the restart
- files may become quite large.
-
-In order to restart the fluid portion of the simulation, the keyword
-*read_restart* is specified, followed by the name of the binary
-lb_fluid restart file to be used.
-
-If the *zwall_velocity* keyword is used y-velocities are assigned to
-the lower and upper walls. This keyword requires the presence of
-walls in the z-direction. This is set by assigning fixed boundary
-conditions in the z-direction. If fixed boundary conditions are
-present in the z-direction, and this keyword is not used, the walls
-are assumed to be stationary.
-
-If the *bodyforce* keyword is used, a constant body force is added to
-the fluid, defined by it's x, y and z components.
-
-If the *printfluid* keyword is used, followed by a positive integer, N,
-the fluid densities and velocities at each lattice site are printed to the
-screen every N timesteps.
-
-
-----------
-
-
-For further details, as well as descriptions and results of several
-test runs, see :ref:`Mackay et al. <fluid-Mackay>`. Please include a citation to
-this paper if the lb_fluid fix is used in work contributing to
-published research.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-Due to the large size of the fluid data, this fix writes it's own
-binary restart files, if requested, independent of the main LAMMPS
-:doc:`binary restart files <restart>`; no information about *lb_fluid*
-is written to the main LAMMPS :doc:`binary restart files <restart>`.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix. No global or per-atom quantities are stored by this fix for
-access by various :ref:`output commands <howto_15>`. No
-parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-LB package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix can only be used with an orthogonal simulation domain.
-
-Walls have only been implemented in the z-direction. Therefore, the
-boundary conditions, as specified via the main LAMMPS boundary command
-must be periodic for x and y, and either fixed or periodic for z.
-Shrink-wrapped boundary conditions are not permitted with this fix.
-
-This fix must be used before any of :doc:`fix lb/viscous <fix_lb_viscous>`, :doc:`fix lb/momentum <fix_lb_momentum>`, :doc:`fix lb/rigid/pc/sphere <fix_lb_rigid_pc_sphere>`, and/ or :doc:`fix lb/pc <fix_lb_pc>` , as the fluid needs to be initialized before
-any of these routines try to access its properties. In addition, in
-order for the hydrodynamic forces to be added to the particles, this
-fix must be used in conjunction with the
-:doc:`lb/viscous <fix_lb_viscous>` fix if the force coupling constant is
-set by default, or either the :doc:`lb/viscous <fix_lb_viscous>` fix or
-one of the :doc:`lb/rigid/pc/sphere <fix_lb_rigid_pc_sphere>` or
-:doc:`lb/pc <fix_lb_pc>` integrators, if the user chooses to specifiy
-their own value for the force coupling constant.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix lb/viscous <fix_lb_viscous>`, :doc:`fix lb/momentum <fix_lb_momentum>`, :doc:`fix lb/rigid/pc/sphere <fix_lb_rigid_pc_sphere>`, :doc:`fix lb/pc <fix_lb_pc>`
-
-Default
-"""""""
-
-By default, the force coupling constant is set according to
-
-.. image:: Eqs/fix_lb_fluid_gammadefault.jpg
- :align: center
-
-and an area of dx_lb^2 per node, used to calculate the fluid mass at
-the particle node location, is assumed.
-
-dx is chosen such that tau/(delta t_LB) =
-(3 eta dt_LB)/(rho dx_lb^2) is approximately equal to 1.
-dm is set equal to 1.0.
-a0 is set equal to (1/3)*(dx_lb/dt_lb)^2.
-The Peskin stencil is used as the default interpolation method.
-The D3Q15 lattice is used for the lattice-Boltzmann algorithm.
-If walls are present, they are assumed to be stationary.
-
-
-----------
-
-
-.. _Ollila:
-
-
-
-**(Ollila et al.)** Ollila, S.T.T., Denniston, C., Karttunen, M., and Ala-Nissila, T., Fluctuating lattice-Boltzmann model for complex fluids, J. Chem. Phys. 134 (2011) 064902.
-
-.. _fluid-Mackay:
-
-
-
-**(Mackay et al.)** Mackay, F. E., Ollila, S.T.T., and Denniston, C., Hydrodynamic Forces Implemented into LAMMPS through a lattice-Boltzmann fluid, Computer Physics Communications 184 (2013) 2021-2031.
-
-.. _Mackay2:
-
-
-
-**(Mackay and Denniston)** Mackay, F. E., and Denniston, C., Coupling MD particles to a lattice-Boltzmann fluid through the use of conservative forces, J. Comput. Phys. 237 (2013) 289-298.
-
-.. _Adhikari:
-
-
-
-**(Adhikari et al.)** Adhikari, R., Stratford, K., Cates, M. E., and Wagner, A. J., Fluctuating lattice Boltzmann, Europhys. Lett. 71 (2005) 473-479.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_lb_momentum.txt b/doc/html/_sources/fix_lb_momentum.txt
deleted file mode 100644
index 08a2c3fe6..000000000
--- a/doc/html/_sources/fix_lb_momentum.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-.. index:: fix lb/momentum
-
-fix lb/momentum command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID lb/momentum nevery keyword values ...
-
-* ID, group-ID are documented in the :doc:`fix <fix>` command
-* lb/momentum = style name of this fix command
-* nevery = adjust the momentum every this many timesteps
-* zero or more keyword/value pairs may be appended
-* keyword = *linear*
-.. parsed-literal::
-
- *linear* values = xflag yflag zflag
- xflag,yflag,zflag = 0/1 to exclude/include each dimension.
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 sphere lb/momentum
- fix 1 all lb/momentum linear 1 1 0
-
-Description
-"""""""""""
-
-This fix is based on the :doc:`fix momentum <fix_momentum>` command, and
-was created to be used in place of that command, when a
-lattice-Boltzmann fluid is present.
-
-Zero the total linear momentum of the system, including both the atoms
-specified by group-ID and the lattice-Boltzmann fluid every nevery
-timesteps. This is accomplished by adjusting the particle velocities
-and the fluid velocities at each lattice site.
-
-.. note::
-
- This fix only considers the linear momentum of the system.
-
-By default, the subtraction is performed for each dimension. This can
-be changed by specifying the keyword *linear*\ , along with a set of
-three flags set to 0/1 in order to exclude/ include the corresponding
-dimension.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <4_15>`. No parameter of this fix can be
-used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-Can only be used if a lattice-Boltzmann fluid has been created via the
-:doc:`fix lb/fluid <fix_lb_fluid>` command, and must come after this
-command.
-
-This fix is part of the USER-LB package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix momentum <fix_momentum>`, :doc:`fix lb/fluid <fix_lb_fluid>`
-
-Default
-"""""""
-
-Zeros the total system linear momentum in each dimension.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_lb_pc.txt b/doc/html/_sources/fix_lb_pc.txt
deleted file mode 100644
index 37e45494d..000000000
--- a/doc/html/_sources/fix_lb_pc.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-.. index:: fix lb/pc
-
-fix lb/pc command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID lb/pc
-
-* ID, group-ID are documented in the :doc:`fix <fix>` command
-* lb/pc = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all lb/pc
-
-Description
-"""""""""""
-
-Update the positions and velocities of the individual particles
-described by *group-ID*\ , experiencing velocity-dependent hydrodynamic
-forces, using the integration algorithm described in :ref:`Mackay et al. <Mackay>`. This integration algorithm should only be used if a
-user-specified value for the force-coupling constant used in :doc:`fix lb/fluid <fix_lb_fluid>` has been set; do not use this integration
-algorithm if the force coupling constant has been set by default.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <4_15>`. No parameter of this fix can be
-used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-LB package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Can only be used if a lattice-Boltzmann fluid has been created via the
-:doc:`fix lb/fluid <fix_lb_fluid>` command, and must come after this
-command.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix lb/fluid <fix_lb_fluid>` :doc:`fix lb/rigid/pc/sphere <fix_lb_rigid_pc_sphere>`
-
-**Default:** None.
-
-
-----------
-
-
-.. _Mackay:
-
-
-
-**(Mackay et al.)** Mackay, F. E., Ollila, S.T.T., and Denniston, C., Hydrodynamic Forces Implemented into LAMMPS through a lattice-Boltzmann fluid, Computer Physics Communications 184 (2013) 2021-2031.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_lb_rigid_pc_sphere.txt b/doc/html/_sources/fix_lb_rigid_pc_sphere.txt
deleted file mode 100644
index 4d73349d7..000000000
--- a/doc/html/_sources/fix_lb_rigid_pc_sphere.txt
+++ /dev/null
@@ -1,167 +0,0 @@
-.. index:: fix lb/rigid/pc/sphere
-
-fix lb/rigid/pc/sphere command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID lb/rigid/pc/sphere bodystyle args keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* lb/rigid/pc/sphere = style name of this fix command
-* bodystyle = *single* or *molecule* or *group*
-* *single* args = none
- *molecule* args = none
- *group* args = N groupID1 groupID2 ...
- N = # of groups
- zero or more keyword/value pairs may be appended
-* keyword = *force* or *torque* or *innerNodes*
-.. parsed-literal::
-
- *force* values = M xflag yflag zflag
- M = which rigid body from 1-Nbody (see asterisk form below)
- xflag,yflag,zflag = off/on if component of center-of-mass force is active
- *torque* values = M xflag yflag zflag
- M = which rigid body from 1-Nbody (see asterisk form below)
- xflag,yflag,zflag = off/on if component of center-of-mass torque is active
- *innerNodes* values = innergroup-ID
- innergroup-ID = ID of the atom group which does not experience a hydrodynamic force from the lattice-Boltzmann fluid
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 spheres lb/rigid/pc/sphere
- fix 1 all lb/rigid/pc/sphere force 1 0 0 innerNodes ForceAtoms
-
-Description
-"""""""""""
-
-This fix is based on the :doc:`fix rigid <fix_rigid>` command, and was
-created to be used in place of that fix, to integrate the equations of
-motion of spherical rigid bodies when a lattice-Boltzmann fluid is
-present with a user-specified value of the force-coupling constant.
-The fix uses the integration algorithm described in :ref:`Mackay et al. <Mackay>` to update the positions, velocities, and orientations of
-a set of spherical rigid bodies experiencing velocity dependent
-hydrodynamic forces. The spherical bodies are assumed to rotate as
-solid, uniform density spheres, with moments of inertia calculated
-using the combined sum of the masses of all the constituent particles
-(which are assumed to be point particles).
-
-
-----------
-
-
-By default, all of the atoms that this fix acts on experience a
-hydrodynamic force due to the presence of the lattice-Boltzmann fluid.
-However, the *innerNodes* keyword allows the user to specify atoms
-belonging to a rigid object which do not interact with the
-lattice-Boltzmann fluid (i.e. these atoms do not feel a hydrodynamic
-force from the lattice-Boltzmann fluid). This can be used to
-distinguish between atoms on the surface of a non-porous object, and
-those on the inside.
-
-This feature can be used, for example, when implementing a hard sphere
-interaction between two spherical objects. Instead of interactions
-occurring between the particles on the surfaces of the two spheres, it
-is desirable simply to place an atom at the center of each sphere,
-which does not contribute to the hydrodynamic force, and have these
-central atoms interact with one another.
-
-
-----------
-
-
-Apart from the features described above, this fix is very similar to
-the rigid fix (although it includes fewer optional arguments, and
-assumes the constituent atoms are point particles); see
-:doc:`fix rigid <fix_rigid>` for a complete documentation.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about the *rigid* and *rigid/nve* fixes are written to
-:doc:`binary restart files <restart>`.
-
-Similar to the :doc:`fix rigid <fix_rigid>` command: The rigid
-fix computes a global scalar which can be accessed by various :ref:`output commands <howto_15>`. The scalar value calculated by
-these fixes is "intensive". The scalar is the current temperature of
-the collection of rigid bodies. This is averaged over all rigid
-bodies and their translational and rotational degrees of freedom. The
-translational energy of a rigid body is 1/2 m v^2, where m = total
-mass of the body and v = the velocity of its center of mass. The
-rotational energy of a rigid body is 1/2 I w^2, where I = the moment
-of inertia tensor of the body and w = its angular velocity. Degrees
-of freedom constrained by the *force* and *torque* keywords are
-removed from this calculation.
-
-All of these fixes compute a global array of values which can be
-accessed by various :ref:`output commands <howto_15>`.
-The number of rows in the array is equal to the number of rigid
-bodies. The number of columns is 15. Thus for each rigid body, 15
-values are stored: the xyz coords of the center of mass (COM), the xyz
-components of the COM velocity, the xyz components of the force acting
-on the COM, the xyz components of the torque acting on the COM, and
-the xyz image flags of the COM, which have the same meaning as image
-flags for atom positions (see the "dump" command). The force and
-torque values in the array are not affected by the *force* and
-*torque* keywords in the fix rigid command; they reflect values before
-any changes are made by those keywords.
-
-The ordering of the rigid bodies (by row in the array) is as follows.
-For the *single* keyword there is just one rigid body. For the
-*molecule* keyword, the bodies are ordered by ascending molecule ID.
-For the *group* keyword, the list of group IDs determines the ordering
-of bodies.
-
-The array values calculated by these fixes are "intensive", meaning
-they are independent of the number of atoms in the simulation.
-
-No parameter of these fixes can be used with the *start/stop* keywords
-of the :doc:`run <run>` command. These fixes are not invoked during
-:doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-LB package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Can only be used if a lattice-Boltzmann fluid has been created via the
-:doc:`fix lb/fluid <fix_lb_fluid>` command, and must come after this
-command. Should only be used if the force coupling constant used in
-:doc:`fix lb/fluid <fix_lb_fluid>` has been set by the user; this
-integration fix cannot be used if the force coupling constant is set
-by default.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix lb/fluid <fix_lb_fluid>`, :doc:`fix lb/pc <fix_lb_pc>`
-
-Default
-"""""""
-
-The defaults are force * on on on, and torque * on on on.
-
-
-----------
-
-
-.. _Mackay:
-
-
-
-**(Mackay et al.)** Mackay, F. E., Ollila, S.T.T., and Denniston, C., Hydrodynamic Forces Implemented into LAMMPS through a lattice-Boltzmann fluid, Computer Physics Communications 184 (2013) 2021-2031.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_lb_viscous.txt b/doc/html/_sources/fix_lb_viscous.txt
deleted file mode 100644
index f32fffbf6..000000000
--- a/doc/html/_sources/fix_lb_viscous.txt
+++ /dev/null
@@ -1,107 +0,0 @@
-.. index:: fix lb/viscous
-
-fix lb/viscous command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID lb/viscous
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* lb/viscous = style name of this fix command
-
-Examples
-""""""""
-
-fix 1 flow lb/viscous
-
-Description
-"""""""""""
-
-This fix is similar to the :doc:`fix viscous <fix_viscous>` command, and
-is to be used in place of that command when a lattice-Boltzmann fluid
-is present, and the user wishes to integrate the particle motion using
-one of the built in LAMMPS integrators.
-
-This fix adds a force, F = - Gamma*(velocity-fluid_velocity), to each
-atom, where Gamma is the force coupling constant described in the :doc:`fix lb/fluid <fix_lb_fluid>` command (which applies an equal and
-opposite force to the fluid).
-
-.. note::
-
- This fix should only be used in conjunction with one of the
- built in LAMMPS integrators; it should not be used with the :doc:`fix lb/pc <fix_lb_pc>` or :doc:`fix lb/rigid/pc/sphere <fix_lb_rigid_pc_sphere>` integrators, which
- already include the hydrodynamic forces. These latter fixes should
- only be used if the force coupling constant has been set by the user
- (instead of using the default value); if the default force coupling
- value is used, then this fix provides the only method for adding the
- hydrodynamic forces to the particles.
-
-
-----------
-
-
-For further details, as well as descriptions and results of several
-test runs, see :ref:`Mackay et al. <Mackay>`. Please include a citation to
-this paper if this fix is used in work contributing to published
-research.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-As described in the :doc:`fix viscous <fix_viscous>` documentation:
-
-"No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command. This fix should only
-be used with damped dynamics minimizers that allow for
-non-conservative forces. See the :doc:`min_style <min_style>` command
-for details."
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-LB package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Can only be used if a lattice-Boltzmann fluid has been created via the
-:doc:`fix lb/fluid <fix_lb_fluid>` command, and must come after this
-command.
-
-This fix should not be used if either the :doc:`fix lb/pc <fix_lb_pc>`
-or :doc:`fix lb/rigid/pc/sphere <fix_lb_rigid_pc_sphere>` integrator is
-used.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix lb/fluid <fix_lb_fluid>`, :doc:`fix lb/pc <fix_lb_pc>`, :doc:`fix lb/rigid/pc/sphere <fix_lb_rigid_pc_sphere>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Mackay:
-
-
-
-**(Mackay et al.)** Mackay, F. E., Ollila, S.T.T., and Denniston, C., Hydrodynamic Forces Implemented into LAMMPS through a lattice-Boltzmann fluid, Computer Physics Communications 184 (2013) 2021-2031.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_lineforce.txt b/doc/html/_sources/fix_lineforce.txt
deleted file mode 100644
index 4894a4a7d..000000000
--- a/doc/html/_sources/fix_lineforce.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-.. index:: fix lineforce
-
-fix lineforce command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID lineforce x y z
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* lineforce = style name of this fix command
-* x y z = direction of line as a 3-vector
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix hold boundary lineforce 0.0 1.0 1.0
-
-Description
-"""""""""""
-
-Adjust the forces on each atom in the group so that only the component
-of force along the linear direction specified by the vector (x,y,z)
-remains. This is done by subtracting out components of force in the
-plane perpendicular to the line.
-
-If the initial velocity of the atom is 0.0 (or along the line), then
-it should continue to move along the line thereafter.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix planeforce <fix_planeforce>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_manifoldforce.txt b/doc/html/_sources/fix_manifoldforce.txt
deleted file mode 100644
index 75c643e65..000000000
--- a/doc/html/_sources/fix_manifoldforce.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-.. index:: fix manifoldforce
-
-fix manifoldforce command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID manifoldforce manifold manifold-args ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* manifold = name of the manifold
-* manifold-args = parameters for the manifold
-
-
-Examples
-""""""""
-
-fix constrain all manifoldforce sphere 5.0
-
-Description
-"""""""""""
-
-This fix subtracts each time step from the force the component along the normal of the specified :doc:`manifold <manifolds>`.
-This can be used in combination with :doc:`minimize <minimize>` to remove overlap between particles while
-keeping them (roughly) constrained to the given manifold, e.g. to set up a run with :doc:`fix nve/manifold/rattle <fix_nve_manifold_rattle>`.
-I have found that only *hftn* and *quickmin* with a very small time step perform adequately though.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is invoked during :doc:`energy minimization <minimize>`.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-MANIFOLD package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Only use this with *min_style hftn* or *min_style quickmin*\ . If not, the constraints
-will not be satisfied very well at all. A warning is generated if the *min_style* is
-incompatible but no error.
-
-
-----------
-
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve/manifold/rattle <fix_nve_manifold_rattle>`, :doc:`fix nvt/manifold/rattle <fix_nvt_manifold_rattle>`
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_meso.txt b/doc/html/_sources/fix_meso.txt
deleted file mode 100644
index 42d8658b4..000000000
--- a/doc/html/_sources/fix_meso.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-.. index:: fix meso
-
-fix meso command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID meso
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* meso = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all meso
-
-Description
-"""""""""""
-
-Perform time integration to update position, velocity, internal energy
-and local density for atoms in the group each timestep. This fix is
-needed to time-integrate mesoscopic systems where particles carry
-internal variables such as SPH or DPDE.
-
-See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in
-LAMMPS.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SPH package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-"fix meso/stationary"
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_meso_stationary.txt b/doc/html/_sources/fix_meso_stationary.txt
deleted file mode 100644
index 6fcdbcd44..000000000
--- a/doc/html/_sources/fix_meso_stationary.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-.. index:: fix meso/stationary
-
-fix meso/stationary command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID meso/stationary
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* meso = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 boundary meso/stationary
-
-Description
-"""""""""""
-
-Perform time integration to update internal energy and local density,
-but not position or velocity for atoms in the group each timestep.
-This fix is needed for SPH simulations to correctly time-integrate
-fixed boundary particles which constrain a fluid to a given region in
-space.
-
-See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in
-LAMMPS.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SPH package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-"fix meso"
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_modify.txt b/doc/html/_sources/fix_modify.txt
deleted file mode 100644
index 206974ff0..000000000
--- a/doc/html/_sources/fix_modify.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-.. index:: fix_modify
-
-fix_modify command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix_modify fix-ID keyword value ...
-
-* fix-ID = ID of the fix to modify
-* one or more keyword/value pairs may be appended
-* keyword = *temp* or *press* or *energy* or *respa*
-.. parsed-literal::
-
- *temp* value = compute ID that calculates a temperature
- *press* value = compute ID that calculates a pressure
- *energy* value = *yes* or *no*
- *respa* value = *1* to *max respa level* or *0* (for outermost level)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix_modify 3 temp myTemp press myPress
- fix_modify 1 energy yes
- fix_modify tether respa 2
-
-Description
-"""""""""""
-
-Modify one or more parameters of a previously defined fix. Only
-specific fix styles support specific parameters. See the doc pages
-for individual fix commands for info on which ones support which
-fix_modify parameters.
-
-The *temp* keyword is used to determine how a fix computes
-temperature. The specified compute ID must have been previously
-defined by the user via the :doc:`compute <compute>` command and it must
-be a style of compute that calculates a temperature. All fixes that
-compute temperatures define their own compute by default, as described
-in their documentation. Thus this option allows the user to override
-the default method for computing T.
-
-The *press* keyword is used to determine how a fix computes pressure.
-The specified compute ID must have been previously defined by the user
-via the :doc:`compute <compute>` command and it must be a style of
-compute that calculates a pressure. All fixes that compute pressures
-define their own compute by default, as described in their
-documentation. Thus this option allows the user to override the
-default method for computing P.
-
-For fixes that calculate a contribution to the potential energy of the
-system, the *energy* keyword will include that contribution in
-thermodynamic output of potential energy. This is because the *energy
-yes* setting must be specfied to include the fix's global or per-atom
-energy in the calculation performed by the :doc:`compute pe <compute_pe>` or :doc:`compute pe/atom <compute_pe_atom>`
-commands. See the :doc:`thermo_style <thermo_style>` command for info
-on how potential energy is output. For fixes that tally a global
-energy, it can be printed by using the keyword f_ID in the
-thermo_style custom command, where ID is the fix-ID of the appropriate
-fix.
-
-.. note::
-
- You must also specify the *energy yes* setting for a fix if you
- are using it when performing an :doc:`energy minimization <minimize>`
- and if you want the energy and forces it produces to be part of the
- optimization criteria.
-
-For fixes that set or modify forces, it may be possible to select at
-which :doc:`r-RESPA <run_style>` level the fix operates via the *respa*
-keyword. The RESPA level at which the fix is active can be selected.
-This is a number ranging from 1 to the number of levels. If the RESPA
-level is larger than the current maximum, the outermost level will be
-used, which is also the default setting. This default can be restored
-using a value of *0* for the RESPA level. The affected fix has to be
-enabled to support this feature; if not, *fix_modify* will report an
-error. Active fixes with a custom RESPA level setting are reported
-with their specified level at the beginning of a r-RESPA run.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix <fix>`, :doc:`compute temp <compute_temp>`, :doc:`compute pressure <compute_pressure>`, :doc:`thermo_style <thermo_style>`
-
-Default
-"""""""
-
-The option defaults are temp = ID defined by fix, press = ID defined
-by fix, energy = no, respa = 0.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_momentum.txt b/doc/html/_sources/fix_momentum.txt
deleted file mode 100644
index ce6d67b81..000000000
--- a/doc/html/_sources/fix_momentum.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-.. index:: fix momentum
-
-fix momentum command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID momentum N keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* momentum = style name of this fix command
-* N = adjust the momentum every this many timesteps
- one or more keyword/value pairs may be appended
-* keyword = *linear* or *angular* or *rescale*
-.. parsed-literal::
-
- *linear* values = xflag yflag zflag
- xflag,yflag,zflag = 0/1 to exclude/include each dimension
- *angular* values = none
-
-.. parsed-literal::
-
- *rescale* values = none
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all momentum 1 linear 1 1 0
- fix 1 all momentum 1 linear 1 1 1 rescale
- fix 1 all momentum 100 linear 1 1 1 angular
-
-Description
-"""""""""""
-
-Zero the linear and/or angular momentum of the group of atoms every N
-timesteps by adjusting the velocities of the atoms. One (or both) of
-the *linear* or *angular* keywords must be specified.
-
-If the *linear* keyword is used, the linear momentum is zeroed by
-subtracting the center-of-mass velocity of the group from each atom.
-This does not change the relative velocity of any pair of atoms. One
-or more dimensions can be excluded from this operation by setting the
-corresponding flag to 0.
-
-If the *angular* keyword is used, the angular momentum is zeroed by
-subtracting a rotational component from each atom.
-
-This command can be used to insure the entire collection of atoms (or
-a subset of them) does not drift or rotate during the simulation due
-to random perturbations (e.g. :doc:`fix langevin <fix_langevin>`
-thermostatting).
-
-The *rescale* keyword enables conserving the kinetic energy of the group
-of atoms by rescaling the velocities after the momentum was removed.
-
-Note that the :doc:`velocity <velocity>` command can be used to create
-initial velocities with zero aggregate linear and/or angular momentum.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix recenter <fix_recenter>`, :doc:`velocity <velocity>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_move.txt b/doc/html/_sources/fix_move.txt
deleted file mode 100644
index 96d3cb183..000000000
--- a/doc/html/_sources/fix_move.txt
+++ /dev/null
@@ -1,257 +0,0 @@
-.. index:: fix move
-
-fix move command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID move style args keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* move = style name of this fix command
-* style = *linear* or *wiggle* or *rotate* or *variable*
-.. parsed-literal::
-
- *linear* args = Vx Vy Vz
- Vx,Vy,Vz = components of velocity vector (velocity units), any component can be specified as NULL
- *wiggle* args = Ax Ay Az period
- Ax,Ay,Az = components of amplitude vector (distance units), any component can be specified as NULL
- period = period of oscillation (time units)
- *rotate* args = Px Py Pz Rx Ry Rz period
- Px,Py,Pz = origin point of axis of rotation (distance units)
- Rx,Ry,Rz = axis of rotation vector
- period = period of rotation (time units)
- *variable* args = v_dx v_dy v_dz v_vx v_vy v_vz
- v_dx,v_dy,v_dz = 3 variable names that calculate x,y,z displacement as function of time, any component can be specified as NULL
- v_vx,v_vy,v_vz = 3 variable names that calculate x,y,z velocity as function of time, any component can be specified as NULL
-
-* zero or more keyword/value pairs may be appended
-* keyword = *units*
-.. parsed-literal::
-
- *units* value = *box* or *lattice*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 boundary move wiggle 3.0 0.0 0.0 1.0 units box
- fix 2 boundary move rotate 0.0 0.0 0.0 0.0 0.0 1.0 5.0
- fix 2 boundary move variable v_myx v_myy NULL v_VX v_VY NULL
-
-Description
-"""""""""""
-
-Perform updates of position and velocity for atoms in the group each
-timestep using the specified settings or formulas, without regard to
-forces on the atoms. This can be useful for boundary or other atoms,
-whose movement can influence nearby atoms.
-
-.. note::
-
- The atoms affected by this fix should not normally be time
- integrated by other fixes (e.g. :doc:`fix nve <fix_nve>`, :doc:`fix nvt <fix_nh>`), since that will change their positions and
- velocities twice.
-
-.. note::
-
- As atoms move due to this fix, they will pass thru periodic
- boundaries and be remapped to the other side of the simulation box,
- just as they would during normal time integration (e.g. via the :doc:`fix nve <fix_nve>` command). It is up to you to decide whether
- periodic boundaries are appropriate with the kind of atom motion you
- are prescribing with this fix.
-
-.. note::
-
- As dicsussed below, atoms are moved relative to their initial
- position at the time the fix is specified. These initial coordinates
- are stored by the fix in "unwrapped" form, by using the image flags
- associated with each atom. See the :doc:`dump custom <dump>` command
- for a discussion of "unwrapped" coordinates. See the Atoms section of
- the :doc:`read_data <read_data>` command for a discussion of image flags
- and how they are set for each atom. You can reset the image flags
- (e.g. to 0) before invoking this fix by using the :doc:`set image <set>`
- command.
-
-
-----------
-
-
-The *linear* style moves atoms at a constant velocity, so that their
-position *X* = (x,y,z) as a function of time is given in vector
-notation as
-
-.. parsed-literal::
-
- X(t) = X0 + V * delta
-
-where *X0* = (x0,y0,z0) is their position at the time the fix is
-specified, *V* is the specified velocity vector with components
-(Vx,Vy,Vz), and *delta* is the time elapsed since the fix was
-specified. This style also sets the velocity of each atom to V =
-(Vx,Vy,Vz). If any of the velocity components is specified as NULL,
-then the position and velocity of that component is time integrated
-the same as the :doc:`fix nve <fix_nve>` command would perform, using
-the corresponding force component on the atom.
-
-Note that the *linear* style is identical to using the *variable*
-style with an :doc:`equal-style variable <variable>` that uses the
-vdisplace() function. E.g.
-
-.. parsed-literal::
-
- variable V equal 10.0
- variable x equal vdisplace(0.0,$V)
- fix 1 boundary move variable v_x NULL NULL v_V NULL NULL
-
-The *wiggle* style moves atoms in an oscillatory fashion, so that
-their position *X* = (x,y,z) as a function of time is given in vector
-notation as
-
-.. parsed-literal::
-
- X(t) = X0 + A sin(omega*delta)
-
-where *X0* = (x0,y0,z0) is their position at the time the fix is
-specified, *A* is the specified amplitude vector with components
-(Ax,Ay,Az), *omega* is 2 PI / *period*\ , and *delta* is the time
-elapsed since the fix was specified. This style also sets the
-velocity of each atom to the time derivative of this expression. If
-any of the amplitude components is specified as NULL, then the
-position and velocity of that component is time integrated the same as
-the :doc:`fix nve <fix_nve>` command would perform, using the
-corresponding force component on the atom.
-
-Note that the *wiggle* style is identical to using the *variable*
-style with :doc:`equal-style variables <variable>` that use the
-swiggle() and cwiggle() functions. E.g.
-
-.. parsed-literal::
-
- variable A equal 10.0
- variable T equal 5.0
- variable omega equal 2.0*PI/$T
- variable x equal swiggle(0.0,$A,$T)
- variable v equal v_omega*($A-cwiggle(0.0,$A,$T))
- fix 1 boundary move variable v_x NULL NULL v_v NULL NULL
-
-The *rotate* style rotates atoms around a rotation axis *R* =
-(Rx,Ry,Rz) that goes thru a point *P* = (Px,Py,Pz). The *period* of
-the rotation is also specified. The direction of rotation for the
-atoms around the rotation axis is consistent with the right-hand rule:
-if your right-hand thumb points along *R*\ , then your fingers wrap
-around the axis in the direction of rotation.
-
-This style also sets the velocity of each atom to (omega cross Rperp)
-where omega is its angular velocity around the rotation axis and Rperp
-is a perpendicular vector from the rotation axis to the atom. If the
-defined :doc:`atom_style <atom_style>` assigns an angular velocity or
-angular moementum or orientation to each atom (:doc:`atom styles <atom_style>` sphere, ellipsoid, line, tri, body), then
-those properties are also updated appropriately to correspond to the
-atom's motion and rotation over time.
-
-The *variable* style allows the position and velocity components of
-each atom to be set by formulas specified via the
-:doc:`variable <variable>` command. Each of the 6 variables is
-specified as an argument to the fix as v_name, where name is the
-variable name that is defined elsewhere in the input script.
-
-Each variable must be of either the *equal* or *atom* style.
-*Equal*\ -style variables compute a single numeric quantity, that can be
-a function of the timestep as well as of other simulation values.
-*Atom*\ -style variables compute a numeric quantity for each atom, that
-can be a function per-atom quantities, such as the atom's position, as
-well as of the timestep and other simulation values. Note that this
-fix stores the original coordinates of each atom (see note below) so
-that per-atom quantity can be used in an atom-style variable formula.
-See the :doc:`variable <variable>` command for details.
-
-The first 3 variables (v_dx,v_dy,v_dz) specified for the *variable*
-style are used to calculate a displacement from the atom's original
-position at the time the fix was specified. The second 3 variables
-(v_vx,v_vy,v_vz) specified are used to compute a velocity for each
-atom.
-
-Any of the 6 variables can be specified as NULL. If both the
-displacement and velocity variables for a particular x,y,z component
-are specified as NULL, then the position and velocity of that
-component is time integrated the same as the :doc:`fix nve <fix_nve>`
-command would perform, using the corresponding force component on the
-atom. If only the velocity variable for a component is specified as
-NULL, then the displacement variable will be used to set the position
-of the atom, and its velocity component will not be changed. If only
-the displacement variable for a component is specified as NULL, then
-the velocity variable will be used to set the velocity of the atom,
-and the position of the atom will be time integrated using that
-velocity.
-
-The *units* keyword determines the meaning of the distance units used
-to define the *linear* velocity and *wiggle* amplitude and *rotate*
-origin. This setting is ignored for the *variable* style. A *box*
-value selects standard units as defined by the :doc:`units <units>`
-command, e.g. velocity in Angstroms/fmsec and amplitude and position
-in Angstroms for units = real. A *lattice* value means the velocity
-units are in lattice spacings per time and the amplitude and position
-are in lattice spacings. The :doc:`lattice <lattice>` command must have
-been previously used to define the lattice spacing. Each of these 3
-quantities may be dependent on the x,y,z dimension, since the lattice
-spacings can be different in x,y,z.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the original coordinates of moving atoms to :doc:`binary restart files <restart>`, as well as the initial timestep, so that
-the motion can be continuous in a restarted simulation. See the
-:doc:`read_restart <read_restart>` command for info on how to re-specify
-a fix in an input script that reads a restart file, so that the
-operation of the fix continues in an uninterrupted fashion.
-
-.. note::
-
- Because the move positions are a function of the current
- timestep and the initial timestep, you cannot reset the timestep to a
- different value after reading a restart file, if you expect a fix move
- command to work in an uninterrupted fashion.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix.
-
-This fix produces a per-atom array which can be accessed by various
-:ref:`output commands <howto_15>`. The number of columns
-for each atom is 3, and the columns store the original unwrapped x,y,z
-coords of each atom. The per-atom values can be accessed on any
-timestep.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-For :doc:`rRESPA time integration <run_style>`, this fix adjusts the
-position and velocity of atoms on the outermost rRESPA level.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`displace_atoms <displace_atoms>`
-
-**Default:** none
-
-The option default is units = lattice.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_msst.txt b/doc/html/_sources/fix_msst.txt
deleted file mode 100644
index 5dfbae5b2..000000000
--- a/doc/html/_sources/fix_msst.txt
+++ /dev/null
@@ -1,178 +0,0 @@
-.. index:: fix msst
-
-fix msst command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID msst dir shockvel keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* msst = style name of this fix
-* dir = *x* or *y* or *z*
-* shockvel = shock velocity (strictly positive, distance/time units)
-* zero or more keyword value pairs may be appended
-* keyword = *q* or *mu* or *p0* or *v0* or *e0* or *tscale*
-.. parsed-literal::
-
- *q* value = cell mass-like parameter (mass^2/distance^4 units)
- *mu* value = artificial viscosity (mass/length/time units)
- *p0* value = initial pressure in the shock equations (pressure units)
- *v0* value = initial simulation cell volume in the shock equations (distance^3 units)
- *e0* value = initial total energy (energy units)
- *tscale* value = reduction in initial temperature (unitless fraction between 0.0 and 1.0)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- 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
-
-Description
-"""""""""""
-
-This command performs the Multi-Scale Shock Technique (MSST)
-integration to update positions and velocities each timestep to mimic
-a compressive shock wave passing over the system. See :ref:`(Reed) <Reed>`
-for a detailed description of this method. The MSST varies the cell
-volume and temperature in such a way as to restrain the system to the
-shock Hugoniot and the Rayleigh line. These restraints correspond to
-the macroscopic conservation laws dictated by a shock
-front. *shockvel* determines the steady shock velocity that will be
-simulated.
-
-To perform a simulation, choose a value of *q* that provides volume
-compression on the timescale of 100 fs to 1 ps. If the volume is not
-compressing, either the shock speed is chosen to be below the material
-sound speed or *p0* has been chosen inaccurately. Volume compression
-at the start can be sped up by using a non-zero value of *tscale*\ . Use
-the smallest value of *tscale* that results in compression.
-
-Under some special high-symmetry conditions, the pressure (volume)
-and/or temperature of the system may oscillate for many cycles even
-with an appropriate choice of mass-like parameter *q*\ . Such
-oscillations have physical significance in some cases. The optional
-*mu* keyword adds an artificial viscosity that helps break the system
-symmetry to equilibrate to the shock Hugoniot and Rayleigh line more
-rapidly in such cases.
-
-*tscale* is a factor between 0 and 1 that determines what fraction of
-thermal kinetic energy is converted to compressive strain kinetic
-energy at the start of the simulation. Setting this parameter to a
-non-zero value may assist in compression at the start of simulations
-where it is slow to occur.
-
-If keywords *e0*\ , *p0*\ ,or *v0* are not supplied, these quantities will
-be calculated on the first step, after the energy specified by
-*tscale* is removed. The value of *e0* is not used in the dynamical
-equations, but is used in calculating the deviation from the Hugoniot.
-
-Values of shockvel less than a critical value determined by the
-material response will not have compressive solutions. This will be
-reflected in lack of significant change of the volume in the MSST.
-
-For all pressure styles, the simulation box stays orthogonal in shape.
-Parrinello-Rahman boundary conditions (tilted box) are supported by
-LAMMPS, but are not implemented for MSST.
-
-This fix computes a temperature and pressure each timestep. To do
-this, the fix creates its own computes of style "temp" and "pressure",
-as if these commands had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp
- compute fix-ID_press group-ID pressure fix-ID_temp
-
-See the :doc:`compute temp <compute_temp>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
-IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
-+ underscore + "press". The group for the new computes is "all".
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of all internal variables to :doc:`binary restart files <restart>`. See the :doc:`read_restart <read_restart>` command
-for info on how to re-specify a fix in an input script that reads a
-restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-The progress of the MSST can be monitored by printing the global
-scalar and global vector quantities computed by the fix.
-
-The scalar is the cumulative energy change due to the fix. This is
-also the energy added to the potential energy by the
-:doc:`fix_modify <fix_modify>` *energy* command. With this command, the
-thermo keyword *etotal* prints the conserved quantity of the MSST
-dynamic equations. This can be used to test if the MD timestep is
-sufficiently small for accurate integration of the dynamic
-equations. See also :doc:`thermo_style <thermo_style>` command.
-
-The global vector contains four values in this order:
-
-[\ *dhugoniot*\ , *drayleigh*\ , *lagrangian_speed*\ , *lagrangian_position*\ ]
-
-1. *dhugoniot* is the departure from the Hugoniot (temperature units).
-2. *drayleigh* is the departure from the Rayleigh line (pressure units).
-3. *lagrangian_speed* is the laboratory-frame Lagrangian speed (particle velocity) of the computational cell (velocity units).
-4. *lagrangian_position* is the computational cell position in the reference frame moving at the shock speed. This is usually a good estimate of distance of the computational cell behind the shock front.
-
-To print these quantities to the log file with descriptive column
-headers, the following LAMMPS commands are suggested:
-
-.. parsed-literal::
-
- fix msst all msst z
- fix_modify msst energy yes
- variable dhug equal f_msst[1]
- variable dray equal f_msst[2]
- variable lgr_vel equal f_msst[3]
- variable lgr_pos equal f_msst[4]
- thermo_style custom step temp ke pe lz pzz etotal v_dhug v_dray v_lgr_vel v_lgr_pos f_msst
-
-These fixes compute a global scalar and a global vector of 4
-quantities, which can be accessed by various :ref:`output commands <howto_15>`. The scalar values calculated
-by this fix are "extensive"; the vector values are "intensive".
-
-Restrictions
-""""""""""""
-
-
-This fix style is part of the SHOCK package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-All cell dimensions must be periodic. This fix can not be used with a
-triclinic cell. The MSST fix has been tested only for the group-ID
-all.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nphug <fix_nphug>`, :doc:`fix deform <fix_deform>`
-
-Default
-"""""""
-
-The keyword defaults are q = 10, mu = 0, tscale = 0.01. p0, v0, and e0
-are calculated on the first step.
-
-
-----------
-
-
-.. _Reed:
-
-
-
-**(Reed)** Reed, Fried, and Joannopoulos, Phys. Rev. Lett., 90, 235503 (2003).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_neb.txt b/doc/html/_sources/fix_neb.txt
deleted file mode 100644
index 8f2cd6b41..000000000
--- a/doc/html/_sources/fix_neb.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-.. index:: fix neb
-
-fix neb command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID neb Kspring
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* neb = style name of this fix command
-* Kspring = inter-replica spring constant (force/distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 active neb 10.0
-
-Description
-"""""""""""
-
-Add inter-replica forces to atoms in the group for a multi-replica
-simulation run via the :doc:`neb <neb>` command to perform a nudged
-elastic band (NEB) calculation for transition state finding. Hi-level
-explanations of NEB are given with the :doc:`neb <neb>` command and in
-:ref:`Section_howto 5 <howto_5>` of the manual. The fix
-neb command must be used with the "neb" command to define how
-inter-replica forces are computed.
-
-Only the N atoms in the fix group experience inter-replica forces.
-Atoms in the two end-point replicas do not experience these forces,
-but those in intermediate replicas do. During the initial stage of
-NEB, the 3N-length vector of interatomic forces Fi = -Grad(V) acting
-on the atoms of each intermediate replica I is altered, as described
-in the :ref:`(Henkelman1) <Henkelman1>` paper, to become:
-
-.. parsed-literal::
-
- Fi = -Grad(V) + (Grad(V) dot That) That + Kspring (|Ri+i - Ri| - |Ri - Ri-1|) That
-
-Ri are the atomic coordinates of replica I; Ri-1 and Ri+1 are the
-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
-roughly in the direction of (Ri+i - Ri-1); see the
-:ref:`(Henkelman1) <Henkelman1>` paper for details.
-
-The first two terms in the above equation are the component of the
-interatomic forces perpendicular to the tangent vector. The last term
-is a spring force between replica I and its neighbors, parallel to the
-tangent vector direction with the specified spring constant *Kspring*\ .
-
-The effect of the first two terms is to push the atoms of each replica
-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
-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
-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
-:ref:`(Henkelman2) <Henkelman2>` paper, and become:
-
-.. parsed-literal::
-
- Fi = -Grad(V) + 2 (Grad(V) dot That) That
-
-The inter-replica forces for the other replicas are unchanged from the
-first equation.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-as invoked by the :doc:`minimize <minimize>` command via the
-:doc:`neb <neb>` command.
-
-Restrictions
-""""""""""""
-
-
-This command can only be used if LAMMPS was built with the REPLICA
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`neb <neb>`
-
-**Default:** none
-
-.. _Henkelman:
-
-
-
-**(Henkelman1)** Henkelman and Jonsson, J Chem Phys, 113, 9978-9985 (2000).
-
-.. _Henkelman:
-
-
-
-**(Henkelman2)** Henkelman, Uberuaga, Jonsson, J Chem Phys, 113,
-9901-9904 (2000).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nh.txt b/doc/html/_sources/fix_nh.txt
deleted file mode 100644
index 5368bed27..000000000
--- a/doc/html/_sources/fix_nh.txt
+++ /dev/null
@@ -1,739 +0,0 @@
-.. index:: fix nvt
-
-fix nvt command
-===============
-
-fix nvt/intel command
-=====================
-
-fix nvt/kk command
-==================
-
-fix nvt/omp command
-===================
-
-fix npt command
-===============
-
-fix npt/intel command
-=====================
-
-fix npt/kk command
-==================
-
-fix npt/omp command
-===================
-
-fix nph command
-===============
-
-fix nph/kk command
-==================
-
-fix nph/omp command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID style_name keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* style_name = *nvt* or *npt* or *nph*
-* one or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *temp* or *iso* or *aniso* or *tri* or *x* or *y* or *z* or *xy* or *yz* or *xz* or *couple* or *tchain* or *pchain* or *mtk* or *tloop* or *ploop* or *nreset* or *drag* or *dilate* or *scalexy* or *scaleyz* or *scalexz* or *flip* or *fixedpoint* or *update*
- *temp* values = Tstart Tstop Tdamp
- Tstart,Tstop = external temperature at start/end of run
- Tdamp = temperature damping parameter (time units)
- *iso* or *aniso* or *tri* values = Pstart Pstop Pdamp
- Pstart,Pstop = scalar external pressure at start/end of run (pressure units)
- Pdamp = pressure damping parameter (time units)
- *x* or *y* or *z* or *xy* or *yz* or *xz* values = Pstart Pstop Pdamp
- Pstart,Pstop = external stress tensor component at start/end of run (pressure units)
- Pdamp = stress damping parameter (time units)
- *couple* = *none* or *xyz* or *xy* or *yz* or *xz*
- *tchain* value = N
- N = length of thermostat chain (1 = single thermostat)
- *pchain* values = N
- N length of thermostat chain on barostat (0 = no thermostat)
- *mtk* value = *yes* or *no* = add in MTK adjustment term or not
- *tloop* value = M
- M = number of sub-cycles to perform on thermostat
- *ploop* value = M
- M = number of sub-cycles to perform on barostat thermostat
- *nreset* value = reset reference cell every this many timesteps
- *drag* value = Df
- Df = drag factor added to barostat/thermostat (0.0 = no drag)
- *dilate* value = dilate-group-ID
- dilate-group-ID = only dilate atoms in this group due to barostat volume changes
- *scalexy* value = *yes* or *no* = scale xy with ly
- *scaleyz* value = *yes* or *no* = scale yz with lz
- *scalexz* value = *yes* or *no* = scale xz with lz
- *flip* value = *yes* or *no* = allow or disallow box flips when it becomes highly skewed
- *fixedpoint* values = x y z
- x,y,z = perform barostat dilation/contraction around this point (distance units)
- *update* value = *dipole* or *dipole/dlm*
- dipole = update dipole orientation (only for sphere variants)
- dipole/dlm = use DLM integrator to update dipole orientation (only for sphere variants)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nvt temp 300.0 300.0 100.0
- fix 1 water npt temp 300.0 300.0 100.0 iso 0.0 0.0 1000.0
- fix 2 jello npt temp 300.0 300.0 100.0 tri 5.0 5.0 1000.0
- fix 2 ice nph x 1.0 1.0 0.5 y 2.0 2.0 0.5 z 3.0 3.0 0.5 yz 0.1 0.1 0.5 xz 0.2 0.2 0.5 xy 0.3 0.3 0.5 nreset 1000
-
-Description
-"""""""""""
-
-These commands perform time integration on Nose-Hoover style
-non-Hamiltonian equations of motion which are designed to generate
-positions and velocities sampled from the canonical (nvt),
-isothermal-isobaric (npt), and isenthalpic (nph) ensembles. This
-updates the position and velocity for atoms in the group each
-timestep.
-
-The thermostatting and barostatting is achieved by adding some dynamic
-variables which are coupled to the particle velocities
-(thermostatting) and simulation domain dimensions (barostatting). In
-addition to basic thermostatting and barostatting, these fixes can
-also create a chain of thermostats coupled to the particle thermostat,
-and another chain of thermostats coupled to the barostat
-variables. The barostat can be coupled to the overall box volume, or
-to individual dimensions, including the *xy*\ , *xz* and *yz* tilt
-dimensions. The external pressure of the barostat can be specified as
-either a scalar pressure (isobaric ensemble) or as components of a
-symmetric stress tensor (constant stress ensemble). When used
-correctly, the time-averaged temperature and stress tensor of the
-particles will match the target values specified by Tstart/Tstop and
-Pstart/Pstop.
-
-The equations of motion used are those of Shinoda et al in
-:ref:`(Shinoda) <nh-Shinoda>`, which combine the hydrostatic equations of
-Martyna, Tobias and Klein in :ref:`(Martyna) <nh-Martyna>` with the strain
-energy proposed by Parrinello and Rahman in
-:ref:`(Parrinello) <nh-Parrinello>`. The time integration schemes closely
-follow the time-reversible measure-preserving Verlet and rRESPA
-integrators derived by Tuckerman et al in :ref:`(Tuckerman) <nh-Tuckerman>`.
-
-
-----------
-
-
-The thermostat parameters for fix styles *nvt* and *npt* is specified
-using the *temp* keyword. Other thermostat-related keywords are
-*tchain*\ , *tloop* and *drag*\ , which are discussed below.
-
-The thermostat is applied to only the translational degrees of freedom
-for the particles. The translational degrees of freedom can also have
-a bias velocity removed before thermostatting takes place; see the
-description below. The desired temperature at each timestep is a
-ramped value during the run from *Tstart* to *Tstop*\ . The *Tdamp*
-parameter is specified in time units and determines how rapidly the
-temperature is relaxed. For example, a value of 10.0 means to relax
-the temperature in a timespan of (roughly) 10 time units (e.g. tau or
-fmsec or psec - see the :doc:`units <units>` command). The atoms in the
-fix group are the only ones whose velocities and positions are updated
-by the velocity/position update portion of the integration.
-
-.. note::
-
- A Nose-Hoover thermostat will not work well for arbitrary values
- of *Tdamp*\ . If *Tdamp* is too small, the temperature can fluctuate
- wildly; if it is too large, the temperature will take a very long time
- to equilibrate. A good choice for many models is a *Tdamp* of around
- 100 timesteps. Note that this is NOT the same as 100 time units for
- most :doc:`units <units>` settings.
-
-
-----------
-
-
-The barostat parameters for fix styles *npt* and *nph* is specified
-using one or more of the *iso*\ , *aniso*\ , *tri*\ , *x*\ , *y*\ , *z*\ , *xy*\ ,
-*xz*\ , *yz*\ , and *couple* keywords. These keywords give you the
-ability to specify all 6 components of an external stress tensor, and
-to couple various of these components together so that the dimensions
-they represent are varied together during a constant-pressure
-simulation.
-
-Other barostat-related keywords are *pchain*\ , *mtk*\ , *ploop*\ ,
-*nreset*\ , *drag*\ , and *dilate*\ , which are discussed below.
-
-Orthogonal simulation boxes have 3 adjustable dimensions (x,y,z).
-Triclinic (non-orthogonal) simulation boxes have 6 adjustable
-dimensions (x,y,z,xy,xz,yz). The :doc:`create_box <create_box>`, :doc:`read data <read_data>`, and :doc:`read_restart <read_restart>` commands
-specify whether the simulation box is orthogonal or non-orthogonal
-(triclinic) and explain the meaning of the xy,xz,yz tilt factors.
-
-The target pressures for each of the 6 components of the stress tensor
-can be specified independently via the *x*\ , *y*\ , *z*\ , *xy*\ , *xz*\ , *yz*
-keywords, which correspond to the 6 simulation box dimensions. For
-each component, the external pressure or tensor component at each
-timestep is a ramped value during the run from *Pstart* to *Pstop*\ .
-If a target pressure is specified for a component, then the
-corresponding box dimension will change during a simulation. For
-example, if the *y* keyword is used, the y-box length will change. If
-the *xy* keyword is used, the xy tilt factor will change. A box
-dimension will not change if that component is not specified, although
-you have the option to change that dimension via the :doc:`fix deform <fix_deform>` command.
-
-Note that in order to use the *xy*\ , *xz*\ , or *yz* keywords, the
-simulation box must be triclinic, even if its initial tilt factors are
-0.0.
-
-For all barostat keywords, the *Pdamp* parameter operates like the
-*Tdamp* parameter, determining the time scale on which pressure is
-relaxed. For example, a value of 10.0 means to relax the pressure in
-a timespan of (roughly) 10 time units (e.g. tau or fmsec or psec - see
-the :doc:`units <units>` command).
-
-.. note::
-
- A Nose-Hoover barostat will not work well for arbitrary values
- of *Pdamp*\ . If *Pdamp* is too small, the pressure and volume can
- fluctuate wildly; if it is too large, the pressure will take a very
- long time to equilibrate. A good choice for many models is a *Pdamp*
- of around 1000 timesteps. However, note that *Pdamp* is specified in
- time units, and that timesteps are NOT the same as time units for most
- :doc:`units <units>` settings.
-
-Regardless of what atoms are in the fix group (the only atoms which
-are time integrated), a global pressure or stress tensor is computed
-for all atoms. Similarly, when the size of the simulation box is
-changed, all atoms are re-scaled to new positions, unless the keyword
-*dilate* is specified with a *dilate-group-ID* for a group that
-represents a subset of the atoms. This can be useful, for example, to
-leave the coordinates of atoms in a solid substrate unchanged and
-controlling the pressure of a surrounding fluid. This option should
-be used with care, since it can be unphysical to dilate some atoms and
-not others, because it can introduce large, instantaneous
-displacements between a pair of atoms (one dilated, one not) that are
-far from the dilation origin. Also note that for atoms not in the fix
-group, a separate time integration fix like :doc:`fix nve <fix_nve>` or
-:doc:`fix nvt <fix_nh>` can be used on them, independent of whether they
-are dilated or not.
-
-
-----------
-
-
-The *couple* keyword allows two or three of the diagonal components of
-the pressure tensor to be "coupled" together. The value specified
-with the keyword determines which are coupled. For example, *xz*
-means the *Pxx* and *Pzz* components of the stress tensor are coupled.
-*Xyz* means all 3 diagonal components are coupled. Coupling means two
-things: the instantaneous stress will be computed as an average of the
-corresponding diagonal components, and the coupled box dimensions will
-be changed together in lockstep, meaning coupled dimensions will be
-dilated or contracted by the same percentage every timestep. The
-*Pstart*\ , *Pstop*\ , *Pdamp* parameters for any coupled dimensions must
-be identical. *Couple xyz* can be used for a 2d simulation; the *z*
-dimension is simply ignored.
-
-
-----------
-
-
-The *iso*\ , *aniso*\ , and *tri* keywords are simply shortcuts that are
-equivalent to specifying several other keywords together.
-
-The keyword *iso* means couple all 3 diagonal components together when
-pressure is computed (hydrostatic pressure), and dilate/contract the
-dimensions together. Using "iso Pstart Pstop Pdamp" is the same as
-specifying these 4 keywords:
-
-.. parsed-literal::
-
- x Pstart Pstop Pdamp
- y Pstart Pstop Pdamp
- z Pstart Pstop Pdamp
- couple xyz
-
-The keyword *aniso* means *x*\ , *y*\ , and *z* dimensions are controlled
-independently using the *Pxx*\ , *Pyy*\ , and *Pzz* components of the
-stress tensor as the driving forces, and the specified scalar external
-pressure. Using "aniso Pstart Pstop Pdamp" is the same as specifying
-these 4 keywords:
-
-.. parsed-literal::
-
- x Pstart Pstop Pdamp
- y Pstart Pstop Pdamp
- z Pstart Pstop Pdamp
- couple none
-
-The keyword *tri* means *x*\ , *y*\ , *z*\ , *xy*\ , *xz*\ , and *yz* dimensions
-are controlled independently using their individual stress components
-as the driving forces, and the specified scalar pressure as the
-external normal stress. Using "tri Pstart Pstop Pdamp" is the same as
-specifying these 7 keywords:
-
-.. parsed-literal::
-
- x Pstart Pstop Pdamp
- y Pstart Pstop Pdamp
- z Pstart Pstop Pdamp
- xy 0.0 0.0 Pdamp
- yz 0.0 0.0 Pdamp
- xz 0.0 0.0 Pdamp
- couple none
-
-
-----------
-
-
-In some cases (e.g. for solids) the pressure (volume) and/or
-temperature of the system can oscillate undesirably when a Nose/Hoover
-barostat and thermostat is applied. The optional *drag* keyword will
-damp these oscillations, although it alters the Nose/Hoover equations.
-A value of 0.0 (no drag) leaves the Nose/Hoover formalism unchanged.
-A non-zero value adds a drag term; the larger the value specified, the
-greater the damping effect. Performing a short run and monitoring the
-pressure and temperature is the best way to determine if the drag term
-is working. Typically a value between 0.2 to 2.0 is sufficient to
-damp oscillations after a few periods. Note that use of the drag
-keyword will interfere with energy conservation and will also change
-the distribution of positions and velocities so that they do not
-correspond to the nominal NVT, NPT, or NPH ensembles.
-
-An alternative way to control initial oscillations is to use chain
-thermostats. The keyword *tchain* determines the number of thermostats
-in the particle thermostat. A value of 1 corresponds to the original
-Nose-Hoover thermostat. The keyword *pchain* specifies the number of
-thermostats in the chain thermostatting the barostat degrees of
-freedom. A value of 0 corresponds to no thermostatting of the
-barostat variables.
-
-The *mtk* keyword controls whether or not the correction terms due to
-Martyna, Tuckerman, and Klein are included in the equations of motion
-:ref:`(Martyna) <nh-Martyna>`. Specifying *no* reproduces the original
-Hoover barostat, whose volume probability distribution function
-differs from the true NPT and NPH ensembles by a factor of 1/V. Hence
-using *yes* is more correct, but in many cases the difference is
-negligible.
-
-The keyword *tloop* can be used to improve the accuracy of integration
-scheme at little extra cost. The initial and final updates of the
-thermostat variables are broken up into *tloop* substeps, each of
-length *dt*\ /\ *tloop*\ . This corresponds to using a first-order
-Suzuki-Yoshida scheme :ref:`(Tuckerman) <nh-Tuckerman>`. The keyword *ploop*
-does the same thing for the barostat thermostat.
-
-The keyword *nreset* controls how often the reference dimensions used
-to define the strain energy are reset. If this keyword is not used,
-or is given a value of zero, then the reference dimensions are set to
-those of the initial simulation domain and are never changed. If the
-simulation domain changes significantly during the simulation, then
-the final average pressure tensor will differ significantly from the
-specified values of the external stress tensor. A value of *nstep*
-means that every *nstep* timesteps, the reference dimensions are set
-to those of the current simulation domain.
-
-The *scaleyz*\ , *scalexz*\ , and *scalexy* keywords control whether or
-not the corresponding tilt factors are scaled with the associated box
-dimensions when barostatting triclinic periodic cells. The default
-values *yes* will turn on scaling, which corresponds to adjusting the
-linear dimensions of the cell while preserving its shape. Choosing
-*no* ensures that the tilt factors are not scaled with the box
-dimensions. See below for restrictions and default values in different
-situations. In older versions of LAMMPS, scaling of tilt factors was
-not performed. The old behavior can be recovered by setting all three
-scale keywords to *no*\ .
-
-The *flip* keyword allows the tilt factors for a triclinic box to
-exceed half the distance of the parallel box length, as discussed
-below. If the *flip* value is set to *yes*\ , the bound is enforced by
-flipping the box when it is exceeded. If the *flip* value is set to
-*no*\ , the tilt will continue to change without flipping. Note that if
-applied stress induces large deformations (e.g. in a liquid), this
-means the box shape can tilt dramatically and LAMMPS will run less
-efficiently, due to the large volume of communication needed to
-acquire ghost atoms around a processor's irregular-shaped sub-domain.
-For extreme values of tilt, LAMMPS may also lose atoms and generate an
-error.
-
-The *fixedpoint* keyword specifies the fixed point for barostat volume
-changes. By default, it is the center of the box. Whatever point is
-chosen will not move during the simulation. For example, if the lower
-periodic boundaries pass through (0,0,0), and this point is provided
-to *fixedpoint*\ , then the lower periodic boundaries will remain at
-(0,0,0), while the upper periodic boundaries will move twice as
-far. In all cases, the particle trajectories are unaffected by the
-chosen value, except for a time-dependent constant translation of
-positions.
-
-If the *update* keyword is used with the *dipole* value, then the
-orientation of the dipole moment of each particle is also updated
-during the time integration. This option should be used for models
-where a dipole moment is assigned to finite-size particles,
-e.g. spheroids via use of the :doc:`atom_style hybrid sphere dipole <atom_style>` command.
-
-The default dipole orientation integrator can be changed to the
-Dullweber-Leimkuhler-McLachlan integration scheme
-:ref:`(Dullweber) <nh-Dullweber>` when using *update* with the value
-*dipole/dlm*\ . This integrator is symplectic and time-reversible,
-giving better energy conservation and allows slightly longer timesteps
-at only a small additional computational cost.
-
-
-----------
-
-
-.. note::
-
- Using a barostat coupled to tilt dimensions *xy*\ , *xz*\ , *yz* can
- sometimes result in arbitrarily large values of the tilt dimensions,
- i.e. a dramatically deformed simulation box. LAMMPS allows the tilt
- factors to grow a small amount beyond the normal limit of half the box
- length (0.6 times the box length), and then performs a box "flip" to
- an equivalent periodic cell. See the discussion of the *flip* keyword
- above, to allow this bound to be exceeded, if desired.
-
-The flip operation is described in more detail in the doc page for
-:doc:`fix deform <fix_deform>`. Both the barostat dynamics and the atom
-trajectories are unaffected by this operation. However, if a tilt
-factor is incremented by a large amount (1.5 times the box length) on
-a single timestep, LAMMPS can not accomodate this event and will
-terminate the simulation with an error. This error typically indicates
-that there is something badly wrong with how the simulation was
-constructed, such as specifying values of *Pstart* that are too far
-from the current stress value, or specifying a timestep that is too
-large. Triclinic barostatting should be used with care. This also is
-true for other barostat styles, although they tend to be more
-forgiving of insults. In particular, it is important to recognize that
-equilibrium liquids can not support a shear stress and that
-equilibrium solids can not support shear stresses that exceed the
-yield stress.
-
-One exception to this rule is if the 1st dimension in the tilt factor
-(x for xy) is non-periodic. In that case, the limits on the tilt
-factor are not enforced, since flipping the box in that dimension does
-not change the atom positions due to non-periodicity. In this mode,
-if you tilt the system to extreme angles, the simulation will simply
-become inefficient due to the highly skewed simulation box.
-
-.. note::
-
- Unlike the :doc:`fix temp/berendsen <fix_temp_berendsen>` command
- which performs thermostatting but NO time integration, these fixes
- perform thermostatting/barostatting AND time integration. Thus you
- should not use any other time integration fix, such as :doc:`fix nve <fix_nve>` on atoms to which this fix is applied. Likewise,
- fix nvt and fix npt should not normally be used on atoms that also
- have their temperature controlled by another fix - e.g. by :doc:`fix langevin <fix_nh>` or :doc:`fix temp/rescale <fix_temp_rescale>`
- commands.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting and barostatting.
-
-
-----------
-
-
-These fixes compute a temperature and pressure each timestep. To do
-this, the fix creates its own computes of style "temp" and "pressure",
-as if one of these two sets of commands had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp
- compute fix-ID_press group-ID pressure fix-ID_temp
-
-.. parsed-literal::
-
- compute fix-ID_temp all temp
- compute fix-ID_press all pressure fix-ID_temp
-
-See the :doc:`compute temp <compute_temp>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
-IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
-+ underscore + "press". For fix nvt, the group for the new computes
-is the same as the fix group. For fix nph and fix npt, the group for
-the new computes is "all" since pressure is computed for the entire
-system.
-
-Note that these are NOT the computes used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*
-and *thermo_press*\ . This means you can change the attributes of this
-fix's temperature or pressure via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-or pressure during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* or
-*thermo_press* will have no effect on this fix.
-
-Like other fixes that perform thermostatting, fix nvt and fix npt can
-be used with :doc:`compute commands <compute>` that calculate a
-temperature after removing a "bias" from the atom velocities.
-E.g. removing the center-of-mass velocity from a group of atoms or
-only calculating temperature on the x-component of velocity or only
-calculating temperature for atoms in a geometric region. This is not
-done by default, but only if the :doc:`fix_modify <fix_modify>` command
-is used to assign a temperature compute to this fix that includes such
-a bias term. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias. In
-this case, the thermostat works in the following manner: the current
-temperature is calculated taking the bias into account, bias is
-removed from each atom, thermostatting is performed on the remaining
-thermal degrees of freedom, and the bias is added back in.
-
-
-----------
-
-
-These fixes can be used with either the *verlet* or *respa*
-:doc:`integrators <run_style>`. When using one of the barostat fixes
-with *respa*\ , LAMMPS uses an integrator constructed
-according to the following factorization of the Liouville propagator
-(for two rRESPA levels):
-
-.. image:: Eqs/fix_nh1.jpg
- :align: center
-
-This factorization differs somewhat from that of Tuckerman et al, in
-that the barostat is only updated at the outermost rRESPA level,
-whereas Tuckerman's factorization requires splitting the pressure into
-pieces corresponding to the forces computed at each rRESPA level. In
-theory, the latter method will exhibit better numerical stability. In
-practice, because Pdamp is normally chosen to be a large multiple of
-the outermost rRESPA timestep, the barostat dynamics are not the
-limiting factor for numerical stability. Both factorizations are
-time-reversible and can be shown to preserve the phase space measure
-of the underlying non-Hamiltonian equations of motion.
-
-.. note::
-
- This implementation has been shown to conserve linear momentum
- up to machine precision under NVT dynamics. Under NPT dynamics,
- for a system with zero initial total linear momentum, the total
- momentum fluctuates close to zero. It may occasionally undergo brief
- excursions to non-negligible values, before returning close to zero.
- Over long simulations, this has the effect of causing the center-of-mass
- to undergo a slow random walk. This can be mitigated by resetting
- the momentum at infrequent intervals using the
- :doc:`fix momentum <fix_momentum>` command.
-
-.. note::
-
- This implementation has been shown to conserve linear momentum
- up to machine precision under NVT dynamics. Under NPT dynamics,
- for a system with zero initial total linear momentum, the total
- momentum fluctuates close to zero. It may occasionally undergo brief
- excursions to non-negligible values, before returning close to zero.
- Over long simulations, this has the effect of causing the center-of-mass
- to undergo a slow random walk. This can be mitigated by resetting
- the momentum at infrequent intervals using the
- :doc:`fix momentum <fix_momentum>` command.
-
-
-----------
-
-
-The fix npt and fix nph commands can be used with rigid bodies or
-mixtures of rigid bodies and non-rigid particles (e.g. solvent). But
-there are also :doc:`fix rigid/npt <fix_rigid>` and :doc:`fix rigid/nph <fix_rigid>` commands, which are typically a more natural
-choice. See the doc page for those commands for more discussion of
-the various ways to do this.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-These fixes writes the state of all the thermostat and barostat
-variables to :doc:`binary restart files <restart>`. See the
-:doc:`read_restart <read_restart>` command for info on how to re-specify
-a fix in an input script that reads a restart file, so that the
-operation of the fix continues in an uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* and *press* options are
-supported by these fixes. You can use them to assign a
-:doc:`compute <compute>` you have defined to this fix which will be used
-in its thermostatting or barostatting procedure, as described above.
-If you do this, note that the kinetic energy derived from the compute
-temperature should be consistent with the virial term computed using
-all atoms for the pressure. LAMMPS will warn you if you choose to
-compute temperature on a subset of atoms.
-
-.. note::
-
- If both the *temp* and *press* keywords are used in a single
- thermo_modify command (or in two separate commands), then the order in
- which the keywords are specified is important. Note that a :doc:`pressure compute <compute_pressure>` defines its own temperature compute as
- an argument when it is specified. The *temp* keyword will override
- this (for the pressure compute being used by fix npt), but only if the
- *temp* keyword comes after the *press* keyword. If the *temp* keyword
- comes before the *press* keyword, then the new pressure compute
- specified by the *press* keyword will be unaffected by the *temp*
- setting.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by these
-fixes to add the energy change induced by Nose/Hoover thermostatting
-and barostatting to the system's potential energy as part of
-:doc:`thermodynamic output <thermo_style>`.
-
-These fixes compute a global scalar and a global vector of quantities,
-which can be accessed by various :ref:`output commands <howto_15>`. The scalar value calculated by
-these fixes is "extensive"; the vector values are "intensive".
-
-The scalar is the cumulative energy change due to the fix.
-
-The vector stores internal Nose/Hoover thermostat and barostat
-variables. The number and meaning of the vector values depends on
-which fix is used and the settings for keywords *tchain* and *pchain*\ ,
-which specify the number of Nose/Hoover chains for the thermostat and
-barostat. If no thermostatting is done, then *tchain* is 0. If no
-barostatting is done, then *pchain* is 0. In the following list,
-"ndof" is 0, 1, 3, or 6, and is the number of degrees of freedom in
-the barostat. Its value is 0 if no barostat is used, else its value
-is 6 if any off-diagonal stress tensor component is barostatted, else
-its value is 1 if *couple xyz* is used or *couple xy* for a 2d
-simulation, otherwise its value is 3.
-
-The order of values in the global vector and their meaning is as
-follows. The notation means there are tchain values for eta, followed
-by tchain for eta_dot, followed by ndof for omega, etc:
-
-* eta[tchain] = particle thermostat displacements (unitless)
-* eta_dot[tchain] = particle thermostat velocities (1/time units)
-* omega[ndof] = barostat displacements (unitless)
-* omega_dot[ndof] = barostat velocities (1/time units)
-* etap[pchain] = barostat thermostat displacements (unitless)
-* etap_dot[pchain] = barostat thermostat velocities (1/time units)
-* PE_eta[tchain] = potential energy of each particle thermostat displacement (energy units)
-* KE_eta_dot[tchain] = kinetic energy of each particle thermostat velocity (energy units)
-* PE_omega[ndof] = potential energy of each barostat displacement (energy units)
-* KE_omega_dot[ndof] = kinetic energy of each barostat velocity (energy units)
-* PE_etap[pchain] = potential energy of each barostat thermostat displacement (energy units)
-* KE_etap_dot[pchain] = kinetic energy of each barostat thermostat velocity (energy units)
-* PE_strain[1] = scalar strain energy (energy units)
-
-These fixes can ramp their external temperature and pressure over
-multiple runs, using the *start* and *stop* keywords of the
-:doc:`run <run>` command. See the :doc:`run <run>` command for details of
-how to do this.
-
-These fixes are not invoked during :doc:`energy minimization <minimize>`.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-*X*\ , *y*\ , *z* cannot be barostatted if the associated dimension is not
-periodic. *Xy*\ , *xz*\ , and *yz* can only be barostatted if the
-simulation domain is triclinic and the 2nd dimension in the keyword
-(\ *y* dimension in *xy*\ ) is periodic. *Z*\ , *xz*\ , and *yz*\ , cannot be
-barostatted for 2D simulations. The :doc:`create_box <create_box>`,
-:doc:`read data <read_data>`, and :doc:`read_restart <read_restart>`
-commands specify whether the simulation box is orthogonal or
-non-orthogonal (triclinic) and explain the meaning of the xy,xz,yz
-tilt factors.
-
-For the *temp* keyword, the final Tstop cannot be 0.0 since it would
-make the external T = 0.0 at some timestep during the simulation which
-is not allowed in the Nose/Hoover formulation.
-
-The *scaleyz yes* and *scalexz yes* keyword/value pairs can not be used
-for 2D simulations. *scaleyz yes*\ , *scalexz yes*\ , and *scalexy yes* options
-can only be used if the 2nd dimension in the keyword is periodic,
-and if the tilt factor is not coupled to the barostat via keywords
-*tri*\ , *yz*\ , *xz*\ , and *xy*\ .
-
-These fixes can be used with dynamic groups as defined by the
-:doc:`group <group>` command. Likewise they can be used with groups to
-which atoms are added or deleted over time, e.g. a deposition
-simulation. However, the conservation properties of the thermostat
-and barostat are defined for systems with a static set of atoms. You
-may observe odd behavior if the atoms in a group vary dramatically
-over time or the atom count becomes very small.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix_modify <fix_modify>`,
-:doc:`run_style <run_style>`
-
-Default
-"""""""
-
-The keyword defaults are tchain = 3, pchain = 3, mtk = yes, tloop =
-ploop = 1, nreset = 0, drag = 0.0, dilate = all, couple = none,
-scaleyz = scalexz = scalexy = yes if periodic in 2nd dimension and
-not coupled to barostat, otherwise no.
-
-
-----------
-
-
-.. _nh-Martyna:
-
-
-
-**(Martyna)** Martyna, Tobias and Klein, J Chem Phys, 101, 4177 (1994).
-
-.. _nh-Parrinello:
-
-
-
-**(Parrinello)** Parrinello and Rahman, J Appl Phys, 52, 7182 (1981).
-
-.. _nh-Tuckerman:
-
-
-
-**(Tuckerman)** Tuckerman, Alejandre, Lopez-Rendon, Jochim, and
-Martyna, J Phys A: Math Gen, 39, 5629 (2006).
-
-.. _nh-Shinoda:
-
-
-
-**(Shinoda)** Shinoda, Shiga, and Mikami, Phys Rev B, 69, 134103 (2004).
-
-.. _nh-Dullweber:
-
-
-
-**(Dullweber)** Dullweber, Leimkuhler and McLachlan, J Chem Phys, 107,
-5840 (1997).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nh_eff.txt b/doc/html/_sources/fix_nh_eff.txt
deleted file mode 100644
index e22eae703..000000000
--- a/doc/html/_sources/fix_nh_eff.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-.. index:: fix nvt/eff
-
-fix nvt/eff command
-===================
-
-fix npt/eff command
-===================
-
-fix nph/eff command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID style_name keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* style_name = *nvt/eff* or *npt/eff* or *nph/eff*
-.. parsed-literal::
-
- one or more keyword value pairs may be appended
- keyword = *temp* or *iso* or *aniso* or *tri* or *x* or *y* or *z* or *xy* or *yz* or *xz* or *couple* or *tchain* or *pchain* or *mtk* or *tloop* or *ploop* or *nreset* or *drag* or *dilate*
- *temp* values = Tstart Tstop Tdamp
- Tstart,Tstop = external temperature at start/end of run
- Tdamp = temperature damping parameter (time units)
- *iso* or *aniso* or *tri* values = Pstart Pstop Pdamp
- Pstart,Pstop = scalar external pressure at start/end of run (pressure units)
- Pdamp = pressure damping parameter (time units)
- *x* or *y* or *z* or *xy* or *yz* or *xz* values = Pstart Pstop Pdamp
- Pstart,Pstop = external stress tensor component at start/end of run (pressure units)
- Pdamp = stress damping parameter (time units)
- *couple* = *none* or *xyz* or *xy* or *yz* or *xz*
- *tchain* value = length of thermostat chain (1 = single thermostat)
- *pchain* values = length of thermostat chain on barostat (0 = no thermostat)
- *mtk* value = *yes* or *no* = add in MTK adjustment term or not
- *tloop* value = number of sub-cycles to perform on thermostat
- *ploop* value = number of sub-cycles to perform on barostat thermostat
- *nreset* value = reset reference cell every this many timesteps
- *drag* value = drag factor added to barostat/thermostat (0.0 = no drag)
- *dilate* value = *all* or *partial*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nvt/eff temp 300.0 300.0 0.1
- fix 1 part npt/eff temp 300.0 300.0 0.1 iso 0.0 0.0 1.0
- fix 2 part npt/eff temp 300.0 300.0 0.1 tri 5.0 5.0 1.0
- fix 2 ice nph/eff x 1.0 1.0 0.5 y 2.0 2.0 0.5 z 3.0 3.0 0.5 yz 0.1 0.1 0.5 xz 0.2 0.2 0.5 xy 0.3 0.3 0.5 nreset 1000
-
-Description
-"""""""""""
-
-These commands perform time integration on Nose-Hoover style
-non-Hamiltonian equations of motion for nuclei and electrons in the
-group for the :doc:`electron force field <pair_eff>` model. The fixes
-are designed to generate positions and velocities sampled from the
-canonical (nvt), isothermal-isobaric (npt), and isenthalpic (nph)
-ensembles. This is achieved by adding some dynamic variables which
-are coupled to the particle velocities (thermostatting) and simulation
-domain dimensions (barostatting). In addition to basic thermostatting
-and barostatting, these fixes can also create a chain of thermostats
-coupled to the particle thermostat, and another chain of thermostats
-coupled to the barostat variables. The barostat can be coupled to the
-overall box volume, or to individual dimensions, including the *xy*\ ,
-*xz* and *yz* tilt dimensions. The external pressure of the barostat
-can be specified as either a scalar pressure (isobaric ensemble) or as
-components of a symmetric stress tensor (constant stress ensemble).
-When used correctly, the time-averaged temperature and stress tensor
-of the particles will match the target values specified by
-Tstart/Tstop and Pstart/Pstop.
-
-The operation of these fixes is exactly like that described by the
-:doc:`fix nvt, npt, and nph <fix_nh>` commands, except that the radius
-and radial velocity of electrons are also updated. Likewise the
-temperature and pressure calculated by the fix, using the computes it
-creates (as discussed in the :doc:`fix nvt, npt, and nph <fix_nh>`
-doc page), are performed with computes that include the eFF contribution
-to the temperature or kinetic energy from the electron radial velocity.
-
-.. note::
-
- there are two different pressures that can be reported for eFF
- when defining the pair_style (see :doc:`pair eff/cut <pair_eff_cut>` to
- understand these settings), one (default) that considers electrons do
- not contribute radial virial components (i.e. electrons treated as
- incompressible 'rigid' spheres) and one that does. The radial
- electronic contributions to the virials are only tallied if the
- flexible pressure option is set, and this will affect both global and
- per-atom quantities. In principle, the true pressure of a system is
- somewhere in between the rigid and the flexible eFF pressures, but,
- for most cases, the difference between these two pressures will not be
- significant over long-term averaged runs (i.e. even though the energy
- partitioning changes, the total energy remains similar).
-
-.. note::
-
- currently, there is no available option for the user to set or
- create temperature distributions that include the radial electronic
- degrees of freedom with the :doc:`velocity <velocity>` command, so the
- the user must allow for these degrees of freedom to equilibrate
- (i.e. equi-partitioning of energy) through time integration.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-See the doc page for the :doc:`fix nvt, npt, and nph <fix_nh>` commands
-for details.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-EFF package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Other restriction discussed on the doc page for the :doc:`fix nvt, npt, and nph <fix_nh>` commands also apply.
-
-.. note::
-
- The temperature for systems (regions or groups) with only
- electrons and no nuclei is 0.0 (i.e. not defined) in the current
- temperature calculations, a practical example would be a uniform
- electron gas or a very hot plasma, where electrons remain delocalized
- from the nuclei. This is because, even though electron virials are
- included in the temperature calculation, these are averaged over the
- nuclear degrees of freedom only. In such cases a corrective term must
- be added to the pressure to get the correct kinetic contribution.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nvt <fix_nh>`, :doc:`fix nph <fix_nh>`, :doc:`fix npt <fix_nh>`,
-:doc:`fix_modify <fix_modify>`, :doc:`run_style <run_style>`
-
-Default
-"""""""
-
-The keyword defaults are tchain = 3, pchain = 3, mtk = yes, tloop =
-ploop = 1, nreset = 0, drag = 0.0, dilate = all, and couple = none.
-
-
-----------
-
-
-.. _Martyna:
-
-
-
-**(Martyna)** Martyna, Tobias and Klein, J Chem Phys, 101, 4177 (1994).
-
-.. _Parrinello:
-
-
-
-**(Parrinello)** Parrinello and Rahman, J Appl Phys, 52, 7182 (1981).
-
-.. _Tuckerman:
-
-
-
-**(Tuckerman)** Tuckerman, Alejandre, Lopez-Rendon, Jochim, and
-Martyna, J Phys A: Math Gen, 39, 5629 (2006).
-
-.. _Shinoda:
-
-
-
-**(Shinoda)** Shinoda, Shiga, and Mikami, Phys Rev B, 69, 134103 (2004).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nph_asphere.txt b/doc/html/_sources/fix_nph_asphere.txt
deleted file mode 100644
index c61575bb8..000000000
--- a/doc/html/_sources/fix_nph_asphere.txt
+++ /dev/null
@@ -1,163 +0,0 @@
-.. index:: fix nph/asphere
-
-fix nph/asphere command
-=======================
-
-fix nph/asphere/omp command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nph/asphere args keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nph/asphere = style name of this fix command
-* additional barostat related keyword/value pairs from the :doc:`fix nph <fix_nh>` command can be appended
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nph/asphere iso 0.0 0.0 1000.0
- fix 2 all nph/asphere x 5.0 5.0 1000.0
- fix 2 all nph/asphere x 5.0 5.0 1000.0 drag 0.2
- fix 2 water nph/asphere aniso 0.0 0.0 1000.0 dilate partial
-
-Description
-"""""""""""
-
-Perform constant NPH integration to update position, velocity,
-orientation, and angular velocity each timestep for aspherical or
-ellipsoidal particles in the group using a Nose/Hoover pressure
-barostat. P is pressure; H is enthalpy. This creates a system
-trajectory consistent with the isenthalpic ensemble.
-
-This fix differs from the :doc:`fix nph <fix_nh>` command, which assumes
-point particles and only updates their position and velocity.
-
-Additional parameters affecting the barostat are specified by keywords
-and values documented with the :doc:`fix nph <fix_nh>` command. See,
-for example, discussion of the *aniso*\ , and *dilate* keywords.
-
-The particles in the fix group are the only ones whose velocities and
-positions are updated by the velocity/position update portion of the
-NPH integration.
-
-Regardless of what particles are in the fix group, a global pressure is
-computed for all particles. Similarly, when the size of the simulation
-box is changed, all particles are re-scaled to new positions, unless the
-keyword *dilate* is specified with a value of *partial*\ , in which case
-only the particles in the fix group are re-scaled. The latter can be
-useful for leaving the coordinates of particles in a solid substrate
-unchanged and controlling the pressure of a surrounding fluid.
-
-
-----------
-
-
-This fix computes a temperature and pressure each timestep. To do
-this, the fix creates its own computes of style "temp/asphere" and
-"pressure", as if these commands had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp all temp/asphere
- compute fix-ID_press all pressure fix-ID_temp
-
-See the :doc:`compute temp/asphere <compute_temp_asphere>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
-IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
-+ underscore + "press", and the group for the new computes is "all"
-since pressure is computed for the entire system.
-
-Note that these are NOT the computes used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*
-and *thermo_press*\ . This means you can change the attributes of this
-fix's temperature or pressure via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-or pressure during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* or
-*thermo_press* will have no effect on this fix.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the Nose/Hoover barostat to :doc:`binary restart files <restart>`. See the :doc:`read_restart <read_restart>`
-command for info on how to re-specify a fix in an input script that
-reads a restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* and *press* options are
-supported by this fix. You can use them to assign a
-:doc:`compute <compute>` you have defined to this fix which will be used
-in its thermostatting or barostatting procedure. If you do this, note
-that the kinetic energy derived from the compute temperature should be
-consistent with the virial term computed using all atoms for the
-pressure. LAMMPS will warn you if you choose to compute temperature
-on a subset of atoms.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Nose/Hoover barostatting to
-the system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes the same global scalar and global vector of
-quantities as does the :doc:`fix nph <fix_nh>` command.
-
-This fix can ramp its target pressure over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the ASPHERE package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires that atoms store torque and angular momementum and a
-quaternion as defined by the :doc:`atom_style ellipsoid <atom_style>`
-command.
-
-All particles in the group must be finite-size. They cannot be point
-particles, but they can be aspherical or spherical as defined by their
-shape attribute.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nph <fix_nh>`, :doc:`fix nve_asphere <fix_nve_asphere>`, :doc:`fix nvt_asphere <fix_nvt_asphere>`, :doc:`fix npt_asphere <fix_npt_asphere>`, :doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nph_body.txt b/doc/html/_sources/fix_nph_body.txt
deleted file mode 100644
index 6e559773b..000000000
--- a/doc/html/_sources/fix_nph_body.txt
+++ /dev/null
@@ -1,156 +0,0 @@
-.. index:: fix nph/body
-
-fix nph/body command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nph/body args keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nph/body = style name of this fix command
-* additional barostat related keyword/value pairs from the :doc:`fix nph <fix_nh>` command can be appended
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nph/body iso 0.0 0.0 1000.0
- fix 2 all nph/body x 5.0 5.0 1000.0
- fix 2 all nph/body x 5.0 5.0 1000.0 drag 0.2
- fix 2 water nph/body aniso 0.0 0.0 1000.0 dilate partial
-
-Description
-"""""""""""
-
-Perform constant NPH integration to update position, velocity,
-orientation, and angular velocity each timestep for body
-particles in the group using a Nose/Hoover pressure
-barostat. P is pressure; H is enthalpy. This creates a system
-trajectory consistent with the isenthalpic ensemble.
-
-This fix differs from the :doc:`fix nph <fix_nh>` command, which assumes
-point particles and only updates their position and velocity.
-
-Additional parameters affecting the barostat are specified by keywords
-and values documented with the :doc:`fix nph <fix_nh>` command. See,
-for example, discussion of the *aniso*\ , and *dilate* keywords.
-
-The particles in the fix group are the only ones whose velocities and
-positions are updated by the velocity/position update portion of the
-NPH integration.
-
-Regardless of what particles are in the fix group, a global pressure is
-computed for all particles. Similarly, when the size of the simulation
-box is changed, all particles are re-scaled to new positions, unless the
-keyword *dilate* is specified with a value of *partial*\ , in which case
-only the particles in the fix group are re-scaled. The latter can be
-useful for leaving the coordinates of particles in a solid substrate
-unchanged and controlling the pressure of a surrounding fluid.
-
-
-----------
-
-
-This fix computes a temperature and pressure each timestep. To do
-this, the fix creates its own computes of style "temp/body" and
-"pressure", as if these commands had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp all temp/body
- compute fix-ID_press all pressure fix-ID_temp
-
-See the :doc:`compute temp/body <compute_temp_body>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
-IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
-+ underscore + "press", and the group for the new computes is "all"
-since pressure is computed for the entire system.
-
-Note that these are NOT the computes used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*
-and *thermo_press*\ . This means you can change the attributes of this
-fix's temperature or pressure via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-or pressure during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* or
-*thermo_press* will have no effect on this fix.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the Nose/Hoover barostat to :doc:`binary restart files <restart>`. See the :doc:`read_restart <read_restart>`
-command for info on how to re-specify a fix in an input script that
-reads a restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* and *press* options are
-supported by this fix. You can use them to assign a
-:doc:`compute <compute>` you have defined to this fix which will be used
-in its thermostatting or barostatting procedure. If you do this, note
-that the kinetic energy derived from the compute temperature should be
-consistent with the virial term computed using all atoms for the
-pressure. LAMMPS will warn you if you choose to compute temperature
-on a subset of atoms.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Nose/Hoover barostatting to
-the system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes the same global scalar and global vector of
-quantities as does the :doc:`fix nph <fix_nh>` command.
-
-This fix can ramp its target pressure over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the BODY package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires that atoms store torque and angular momementum and a
-quaternion as defined by the :doc:`atom_style body <atom_style>`
-command.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nph <fix_nh>`, :doc:`fix nve_body <fix_nve_body>`, :doc:`fix nvt_body <fix_nvt_body>`, :doc:`fix npt_body <fix_npt_body>`, :doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nph_sphere.txt b/doc/html/_sources/fix_nph_sphere.txt
deleted file mode 100644
index 5bc528082..000000000
--- a/doc/html/_sources/fix_nph_sphere.txt
+++ /dev/null
@@ -1,160 +0,0 @@
-.. index:: fix nph/sphere
-
-fix nph/sphere command
-======================
-
-fix nph/sphere/omp command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nph/sphere args keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nph/sphere = style name of this fix command
-* additional barostat related keyword/value pairs from the :doc:`fix nph <fix_nh>` command can be appended
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nph/sphere iso 0.0 0.0 1000.0
- fix 2 all nph/sphere x 5.0 5.0 1000.0
- fix 2 all nph/sphere x 5.0 5.0 1000.0 drag 0.2
- fix 2 water nph/sphere aniso 0.0 0.0 1000.0 dilate partial
-
-Description
-"""""""""""
-
-Perform constant NPH integration to update position, velocity, and
-angular velocity each timestep for finite-size spherical particles in
-the group using a Nose/Hoover pressure barostat. P is pressure; H is
-enthalpy. This creates a system trajectory consistent with the
-isenthalpic ensemble.
-
-This fix differs from the :doc:`fix nph <fix_nh>` command, which assumes
-point particles and only updates their position and velocity.
-
-Additional parameters affecting the barostat are specified by keywords
-and values documented with the :doc:`fix nph <fix_nh>` command. See,
-for example, discussion of the *aniso*\ , and *dilate* keywords.
-
-The particles in the fix group are the only ones whose velocities and
-positions are updated by the velocity/position update portion of the
-NPH integration.
-
-Regardless of what particles are in the fix group, a global pressure is
-computed for all particles. Similarly, when the size of the simulation
-box is changed, all particles are re-scaled to new positions, unless the
-keyword *dilate* is specified with a value of *partial*\ , in which case
-only the particles in the fix group are re-scaled. The latter can be
-useful for leaving the coordinates of particles in a solid substrate
-unchanged and controlling the pressure of a surrounding fluid.
-
-
-----------
-
-
-This fix computes a temperature and pressure each timestep. To do
-this, the fix creates its own computes of style "temp/sphere" and
-"pressure", as if these commands had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp all temp/sphere
- compute fix-ID_press all pressure fix-ID_temp
-
-See the :doc:`compute temp/sphere <compute_temp_sphere>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
-IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
-+ underscore + "press", and the group for the new computes is "all"
-since pressure is computed for the entire system.
-
-Note that these are NOT the computes used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*
-and *thermo_press*\ . This means you can change the attributes of this
-fix's temperature or pressure via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-or pressure during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* or
-*thermo_press* will have no effect on this fix.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the Nose/Hoover barostat to :doc:`binary restart files <restart>`. See the :doc:`read_restart <read_restart>`
-command for info on how to re-specify a fix in an input script that
-reads a restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* and *press* options are
-supported by this fix. You can use them to assign a
-:doc:`compute <compute>` you have defined to this fix which will be used
-in its thermostatting or barostatting procedure. If you do this, note
-that the kinetic energy derived from the compute temperature should be
-consistent with the virial term computed using all atoms for the
-pressure. LAMMPS will warn you if you choose to compute temperature
-on a subset of atoms.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Nose/Hoover barostatting to
-the system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes the same global scalar and global vector of
-quantities as does the :doc:`fix nph <fix_nh>` command.
-
-This fix can ramp its target pressure over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix requires that atoms store torque and angular velocity (omega)
-and a radius as defined by the :doc:`atom_style sphere <atom_style>`
-command.
-
-All particles in the group must be finite-size spheres. They cannot
-be point particles.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nph <fix_nh>`, :doc:`fix nve_sphere <fix_nve_sphere>`, :doc:`fix nvt_sphere <fix_nvt_sphere>`, :doc:`fix npt_sphere <fix_npt_sphere>`,
-:doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nphug.txt b/doc/html/_sources/fix_nphug.txt
deleted file mode 100644
index a2a16fb10..000000000
--- a/doc/html/_sources/fix_nphug.txt
+++ /dev/null
@@ -1,258 +0,0 @@
-.. index:: fix nphug
-
-fix nphug command
-=================
-
-fix nphug/omp command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nphug keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-.. parsed-literal::
-
- one or more keyword value pairs may be appended
- keyword = *temp* or *iso* or *aniso* or *tri* or *x* or *y* or *z* or *couple* or *tchain* or *pchain* or *mtk* or *tloop* or *ploop* or *nreset* or *drag* or *dilate* or *scaleyz* or *scalexz* or *scalexy*
- *temp* values = Value1 Value2 Tdamp
- Value1, Value2 = Nose-Hoover target temperatures, ignored by Hugoniostat
- Tdamp = temperature damping parameter (time units)
- *iso* or *aniso* or *tri* values = Pstart Pstop Pdamp
- Pstart,Pstop = scalar external pressures, must be equal (pressure units)
- Pdamp = pressure damping parameter (time units)
- *x* or *y* or *z* or *xy* or *yz* or *xz* values = Pstart Pstop Pdamp
- Pstart,Pstop = external stress tensor components, must be equal (pressure units)
- Pdamp = stress damping parameter (time units)
- *couple* = *none* or *xyz* or *xy* or *yz* or *xz*
- *tchain* value = length of thermostat chain (1 = single thermostat)
- *pchain* values = length of thermostat chain on barostat (0 = no thermostat)
- *mtk* value = *yes* or *no* = add in MTK adjustment term or not
- *tloop* value = number of sub-cycles to perform on thermostat
- *ploop* value = number of sub-cycles to perform on barostat thermostat
- *nreset* value = reset reference cell every this many timesteps
- *drag* value = drag factor added to barostat/thermostat (0.0 = no drag)
- *dilate* value = *all* or *partial*
- *scaleyz* value = *yes* or *no* = scale yz with lz
- *scalexz* value = *yes* or *no* = scale xz with lz
- *scalexy* value = *yes* or *no* = scale xy with ly
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix myhug all nphug temp 1.0 1.0 10.0 z 40.0 40.0 70.0
- fix myhug all nphug temp 1.0 1.0 10.0 iso 40.0 40.0 70.0 drag 200.0 tchain 1 pchain 0
-
-Description
-"""""""""""
-
-This command is a variant of the Nose-Hoover
-:doc:`fix npt <fix_nh>` fix style.
-It performs time integration of the Hugoniostat equations
-of motion developed by Ravelo et al. :ref:`(Ravelo) <Ravelo>`.
-These equations compress the system to a state with average
-axial stress or pressure equal to the specified target value
-and that satisfies the Rankine-Hugoniot (RH)
-jump conditions for steady shocks.
-
-The compression can be performed
-either
-hydrostatically (using keyword *iso*\ , *aniso*\ , or *tri*\ ) or uniaxially
-(using keywords *x*\ , *y*\ , or *z*\ ). In the hydrostatic case,
-the cell dimensions change dynamically so that the average axial stress
-in all three directions converges towards the specified target value.
-In the uniaxial case, the chosen cell dimension changes dynamically
-so that the average
-axial stress in that direction converges towards the target value. The
-other two cell dimensions are kept fixed (zero lateral strain).
-
-This leads to the following additional restrictions on the keywords:
-
-* One and only one of the following keywords should be used: *iso*\ , *aniso*\ , *tri*\ , *x*\ , *y*\ , *z*
-* The specified initial and final target pressures must be the same.
-* The keywords *xy*\ , *xz*\ , *yz* may not be used.
-* The only admissible value for the couple keyword is *xyz*\ , which has the same effect as keyword *iso*
-* The *temp* keyword must be used to specify the time constant for kinetic energy relaxation, but initial and final target temperature values are ignored.
-
-Essentially, a Hugoniostat simulation is an NPT simulation in which the
-user-specified target temperature is replaced with a time-dependent
-target temperature Tt obtained from the following equation:
-
-.. image:: Eqs/fix_nphug.jpg
- :align: center
-
-where T and Tt are the instantaneous and target temperatures,
-P and P0 are the instantaneous and reference pressures or axial stresses,
-depending on whether hydrostatic or uniaxial compression is being
-performed, V and V0 are the instantaneous and reference volumes,
-E and E0 are the instantaneous and reference internal energy (potential
-plus kinetic), Ndof is the number of degrees of freedom used in the
-definition of temperature, and kB is the Boltzmann constant. Delta is the
-negative deviation of the instantaneous temperature from the target temperature.
-When the system reaches a stable equilibrium, the value of Delta should
-fluctuate about zero.
-
-The values of E0, V0, and P0 are the instantaneous values at the start of
-the simulation. These can be overridden using the fix_modify keywords *e0*\ ,
-*v0*\ , and *p0* described below.
-
-
-----------
-
-
-.. note::
-
- Unlike the :doc:`fix temp/berendsen <fix_temp_berendsen>` command
- which performs thermostatting but NO time integration, this fix
- performs thermostatting/barostatting AND time integration. Thus you
- should not use any other time integration fix, such as :doc:`fix nve <fix_nve>` on atoms to which this fix is applied. Likewise,
- this fix should not be used on atoms that have their temperature
- controlled by another fix - e.g. by :doc:`fix langevin <fix_nh>` or :doc:`fix temp/rescale <fix_temp_rescale>` commands.
-
-
-----------
-
-
-This fix computes a temperature and pressure at each timestep. To do
-this, the fix creates its own computes of style "temp" and "pressure",
-as if one of these two sets of commands had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp
- compute fix-ID_press group-ID pressure fix-ID_temp
-
-.. parsed-literal::
-
- compute fix-ID_temp all temp
- compute fix-ID_press all pressure fix-ID_temp
-
-See the :doc:`compute temp <compute_temp>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
-IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
-+ underscore + "press". The group for
-the new computes is "all" since pressure is computed for the entire
-system.
-
-Note that these are NOT the computes used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*
-and *thermo_press*\ . This means you can change the attributes of this
-fix's temperature or pressure via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-or pressure during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* or
-*thermo_press* will have no effect on this fix.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the values of E0, V0, and P0, as well as the
-state of all the thermostat and barostat
-variables to :doc:`binary restart files <restart>`. See the
-:doc:`read_restart <read_restart>` command for info on how to re-specify
-a fix in an input script that reads a restart file, so that the
-operation of the fix continues in an uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *e0*\ , *v0* and *p0* keywords
-can be used to define the values of E0, V0, and P0. Note the
-the values for *e0* and *v0* are extensive, and so must correspond
-to the total energy and volume of the entire system, not energy and
-volume per atom. If any of these quantities are not specified, then the
-instantaneous value in the system at the start of the simulation is used.
-
-The :doc:`fix_modify <fix_modify>` *temp* and *press* options are
-supported by these fixes. You can use them to assign a
-:doc:`compute <compute>` you have defined to this fix which will be used
-in its thermostatting or barostatting procedure, as described above.
-If you do this, note that the kinetic energy derived from the compute
-temperature should be consistent with the virial term computed using
-all atoms for the pressure. LAMMPS will warn you if you choose to
-compute temperature on a subset of atoms.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by these
-fixes to add the energy change induced by Nose/Hoover thermostatting
-and barostatting to the system's potential energy as part of
-:doc:`thermodynamic output <thermo_style>`. Either way, this energy is *not*
-included in the definition of internal energy E when calculating the value
-of Delta in the above equation.
-
-These fixes compute a global scalar and a global vector of quantities,
-which can be accessed by various :ref:`output commands <howto_15>`. The scalar value calculated by
-these fixes is "extensive"; the vector values are "intensive".
-
-The scalar is the cumulative energy change due to the fix.
-
-The vector stores three quantities unique to this fix (Delta, Us, and up),
-followed by all the internal Nose/Hoover thermostat and barostat
-variables defined for :doc:`fix npt <fix_nh>`. Delta is the deviation
-of the temperature from the target temperature, given by the above equation.
-Us and up are the shock and particle velocity corresponding to a steady
-shock calculated from the RH conditions. They have units of distance/time.
-
-Restrictions
-""""""""""""
-
-
-This fix style is part of the SHOCK package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-All the usual restrictions for :doc:`fix npt <fix_nh>` apply,
-plus the additional ones mentioned above.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix msst <fix_msst>`, :doc:`fix npt <fix_nh>`, :doc:`fix_modify <fix_modify>`
-
-Default
-"""""""
-
-The keyword defaults are the same as those for :doc:`fix npt <fix_nh>`
-
-
-----------
-
-
-.. _Ravelo:
-
-
-
-**(Ravelo)** Ravelo, Holian, Germann and Lomdahl, Phys Rev B, 70, 014103 (2004).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_npt_asphere.txt b/doc/html/_sources/fix_npt_asphere.txt
deleted file mode 100644
index 799faeaff..000000000
--- a/doc/html/_sources/fix_npt_asphere.txt
+++ /dev/null
@@ -1,188 +0,0 @@
-.. index:: fix npt/asphere
-
-fix npt/asphere command
-=======================
-
-fix npt/asphere/omp command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID npt/asphere keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* npt/asphere = style name of this fix command
-* additional thermostat and barostat related keyword/value pairs from the :doc:`fix npt <fix_nh>` command can be appended
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all npt/asphere temp 300.0 300.0 100.0 iso 0.0 0.0 1000.0
- fix 2 all npt/asphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0
- fix 2 all npt/asphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0 drag 0.2
- fix 2 water npt/asphere temp 300.0 300.0 100.0 aniso 0.0 0.0 1000.0 dilate partial
-
-Description
-"""""""""""
-
-Perform constant NPT integration to update position, velocity,
-orientation, and angular velocity each timestep for aspherical or
-ellipsoidal particles in the group using a Nose/Hoover temperature
-thermostat and Nose/Hoover pressure barostat. P is pressure; T is
-temperature. This creates a system trajectory consistent with the
-isothermal-isobaric ensemble.
-
-This fix differs from the :doc:`fix npt <fix_nh>` command, which
-assumes point particles and only updates their position and velocity.
-
-The thermostat is applied to both the translational and rotational
-degrees of freedom for the aspherical particles, assuming a compute is
-used which calculates a temperature that includes the rotational
-degrees of freedom (see below). The translational degrees of freedom
-can also have a bias velocity removed from them before thermostatting
-takes place; see the description below.
-
-Additional parameters affecting the thermostat and barostat are
-specified by keywords and values documented with the :doc:`fix npt <fix_nh>` command. See, for example, discussion of the *temp*\ ,
-*iso*\ , *aniso*\ , and *dilate* keywords.
-
-The particles in the fix group are the only ones whose velocities and
-positions are updated by the velocity/position update portion of the
-NPT integration.
-
-Regardless of what particles are in the fix group, a global pressure is
-computed for all particles. Similarly, when the size of the simulation
-box is changed, all particles are re-scaled to new positions, unless the
-keyword *dilate* is specified with a value of *partial*\ , in which case
-only the particles in the fix group are re-scaled. The latter can be
-useful for leaving the coordinates of particles in a solid substrate
-unchanged and controlling the pressure of a surrounding fluid.
-
-
-----------
-
-
-This fix computes a temperature and pressure each timestep. To do
-this, the fix creates its own computes of style "temp/asphere" and
-"pressure", as if these commands had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp all temp/asphere
- compute fix-ID_press all pressure fix-ID_temp
-
-See the :doc:`compute temp/asphere <compute_temp_asphere>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
-IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
-+ underscore + "press", and the group for the new computes is "all"
-since pressure is computed for the entire system.
-
-Note that these are NOT the computes used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*
-and *thermo_press*\ . This means you can change the attributes of this
-fix's temperature or pressure via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-or pressure during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* or
-*thermo_press* will have no effect on this fix.
-
-Like other fixes that perform thermostatting, this fix can be used
-with :doc:`compute commands <compute>` that calculate a temperature
-after removing a "bias" from the atom velocities. E.g. removing the
-center-of-mass velocity from a group of atoms or only calculating
-temperature on the x-component of velocity or only calculating
-temperature for atoms in a geometric region. This is not done by
-default, but only if the :doc:`fix_modify <fix_modify>` command is used
-to assign a temperature compute to this fix that includes such a bias
-term. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias. In
-this case, the thermostat works in the following manner: the current
-temperature is calculated taking the bias into account, bias is
-removed from each atom, thermostatting is performed on the remaining
-thermal degrees of freedom, and the bias is added back in.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the Nose/Hoover thermostat and barostat
-to :doc:`binary restart files <restart>`. See the
-:doc:`read_restart <read_restart>` command for info on how to re-specify
-a fix in an input script that reads a restart file, so that the
-operation of the fix continues in an uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* and *press* options are
-supported by this fix. You can use them to assign a
-:doc:`compute <compute>` you have defined to this fix which will be used
-in its thermostatting or barostatting procedure. If you do this, note
-that the kinetic energy derived from the compute temperature should be
-consistent with the virial term computed using all atoms for the
-pressure. LAMMPS will warn you if you choose to compute temperature
-on a subset of atoms.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Nose/Hoover thermostatting and
-barostatting to the system's potential energy as part of
-:doc:`thermodynamic output <thermo_style>`.
-
-This fix computes the same global scalar and global vector of
-quantities as does the :doc:`fix npt <fix_nh>` command.
-
-This fix can ramp its target temperature and pressure over multiple
-runs, using the *start* and *stop* keywords of the :doc:`run <run>`
-command. See the :doc:`run <run>` command for details of how to do
-this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the ASPHERE package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires that atoms store torque and angular momementum and a
-quaternion as defined by the :doc:`atom_style ellipsoid <atom_style>`
-command.
-
-All particles in the group must be finite-size. They cannot be point
-particles, but they can be aspherical or spherical as defined by their
-shape attribute.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix npt <fix_nh>`, :doc:`fix nve_asphere <fix_nve_asphere>`, :doc:`fix nvt_asphere <fix_nvt_asphere>`, :doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_npt_body.txt b/doc/html/_sources/fix_npt_body.txt
deleted file mode 100644
index 6a93279c4..000000000
--- a/doc/html/_sources/fix_npt_body.txt
+++ /dev/null
@@ -1,181 +0,0 @@
-.. index:: fix npt/body
-
-fix npt/body command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID npt/body keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* npt/body = style name of this fix command
-* additional thermostat and barostat related keyword/value pairs from the :doc:`fix npt <fix_nh>` command can be appended
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all npt/body temp 300.0 300.0 100.0 iso 0.0 0.0 1000.0
- fix 2 all npt/body temp 300.0 300.0 100.0 x 5.0 5.0 1000.0
- fix 2 all npt/body temp 300.0 300.0 100.0 x 5.0 5.0 1000.0 drag 0.2
- fix 2 water npt/body temp 300.0 300.0 100.0 aniso 0.0 0.0 1000.0 dilate partial
-
-Description
-"""""""""""
-
-Perform constant NPT integration to update position, velocity,
-orientation, and angular velocity each timestep for body
-particles in the group using a Nose/Hoover temperature
-thermostat and Nose/Hoover pressure barostat. P is pressure; T is
-temperature. This creates a system trajectory consistent with the
-isothermal-isobaric ensemble.
-
-This fix differs from the :doc:`fix npt <fix_nh>` command, which
-assumes point particles and only updates their position and velocity.
-
-The thermostat is applied to both the translational and rotational
-degrees of freedom for the body particles, assuming a compute is
-used which calculates a temperature that includes the rotational
-degrees of freedom (see below). The translational degrees of freedom
-can also have a bias velocity removed from them before thermostatting
-takes place; see the description below.
-
-Additional parameters affecting the thermostat and barostat are
-specified by keywords and values documented with the :doc:`fix npt <fix_nh>` command. See, for example, discussion of the *temp*\ ,
-*iso*\ , *aniso*\ , and *dilate* keywords.
-
-The particles in the fix group are the only ones whose velocities and
-positions are updated by the velocity/position update portion of the
-NPT integration.
-
-Regardless of what particles are in the fix group, a global pressure is
-computed for all particles. Similarly, when the size of the simulation
-box is changed, all particles are re-scaled to new positions, unless the
-keyword *dilate* is specified with a value of *partial*\ , in which case
-only the particles in the fix group are re-scaled. The latter can be
-useful for leaving the coordinates of particles in a solid substrate
-unchanged and controlling the pressure of a surrounding fluid.
-
-
-----------
-
-
-This fix computes a temperature and pressure each timestep. To do
-this, the fix creates its own computes of style "temp/body" and
-"pressure", as if these commands had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp all temp/body
- compute fix-ID_press all pressure fix-ID_temp
-
-See the :doc:`compute temp/body <compute_temp_body>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
-IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
-+ underscore + "press", and the group for the new computes is "all"
-since pressure is computed for the entire system.
-
-Note that these are NOT the computes used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*
-and *thermo_press*\ . This means you can change the attributes of this
-fix's temperature or pressure via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-or pressure during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* or
-*thermo_press* will have no effect on this fix.
-
-Like other fixes that perform thermostatting, this fix can be used
-with :doc:`compute commands <compute>` that calculate a temperature
-after removing a "bias" from the atom velocities. E.g. removing the
-center-of-mass velocity from a group of atoms or only calculating
-temperature on the x-component of velocity or only calculating
-temperature for atoms in a geometric region. This is not done by
-default, but only if the :doc:`fix_modify <fix_modify>` command is used
-to assign a temperature compute to this fix that includes such a bias
-term. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias. In
-this case, the thermostat works in the following manner: the current
-temperature is calculated taking the bias into account, bias is
-removed from each atom, thermostatting is performed on the remaining
-thermal degrees of freedom, and the bias is added back in.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the Nose/Hoover thermostat and barostat
-to :doc:`binary restart files <restart>`. See the
-:doc:`read_restart <read_restart>` command for info on how to re-specify
-a fix in an input script that reads a restart file, so that the
-operation of the fix continues in an uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* and *press* options are
-supported by this fix. You can use them to assign a
-:doc:`compute <compute>` you have defined to this fix which will be used
-in its thermostatting or barostatting procedure. If you do this, note
-that the kinetic energy derived from the compute temperature should be
-consistent with the virial term computed using all atoms for the
-pressure. LAMMPS will warn you if you choose to compute temperature
-on a subset of atoms.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Nose/Hoover thermostatting and
-barostatting to the system's potential energy as part of
-:doc:`thermodynamic output <thermo_style>`.
-
-This fix computes the same global scalar and global vector of
-quantities as does the :doc:`fix npt <fix_nh>` command.
-
-This fix can ramp its target temperature and pressure over multiple
-runs, using the *start* and *stop* keywords of the :doc:`run <run>`
-command. See the :doc:`run <run>` command for details of how to do
-this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the BODY package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires that atoms store torque and angular momementum and a
-quaternion as defined by the :doc:`atom_style body <atom_style>`
-command.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix npt <fix_nh>`, :doc:`fix nve_body <fix_nve_body>`, :doc:`fix nvt_body <fix_nvt_body>`, :doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_npt_sphere.txt b/doc/html/_sources/fix_npt_sphere.txt
deleted file mode 100644
index 6675cfbcd..000000000
--- a/doc/html/_sources/fix_npt_sphere.txt
+++ /dev/null
@@ -1,183 +0,0 @@
-.. index:: fix npt/sphere
-
-fix npt/sphere command
-======================
-
-fix npt/sphere/omp command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID npt/sphere keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* npt/sphere = style name of this fix command
-* additional thermostat and barostat related keyword/value pairs from the :doc:`fix npt <fix_nh>` command can be appended
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all npt/sphere temp 300.0 300.0 100.0 iso 0.0 0.0 1000.0
- fix 2 all npt/sphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0
- fix 2 all npt/sphere temp 300.0 300.0 100.0 x 5.0 5.0 1000.0 drag 0.2
- fix 2 water npt/sphere temp 300.0 300.0 100.0 aniso 0.0 0.0 1000.0 dilate partial
-
-Description
-"""""""""""
-
-Perform constant NPT integration to update position, velocity, and
-angular velocity each timestep for finite-sizex spherical particles in
-the group using a Nose/Hoover temperature thermostat and Nose/Hoover
-pressure barostat. P is pressure; T is temperature. This creates a
-system trajectory consistent with the isothermal-isobaric ensemble.
-
-This fix differs from the :doc:`fix npt <fix_nh>` command, which
-assumes point particles and only updates their position and velocity.
-
-The thermostat is applied to both the translational and rotational
-degrees of freedom for the spherical particles, assuming a compute is
-used which calculates a temperature that includes the rotational
-degrees of freedom (see below). The translational degrees of freedom
-can also have a bias velocity removed from them before thermostatting
-takes place; see the description below.
-
-Additional parameters affecting the thermostat and barostat are
-specified by keywords and values documented with the :doc:`fix npt <fix_nh>` command. See, for example, discussion of the *temp*\ ,
-*iso*\ , *aniso*\ , and *dilate* keywords.
-
-The particles in the fix group are the only ones whose velocities and
-positions are updated by the velocity/position update portion of the
-NPT integration.
-
-Regardless of what particles are in the fix group, a global pressure is
-computed for all particles. Similarly, when the size of the simulation
-box is changed, all particles are re-scaled to new positions, unless the
-keyword *dilate* is specified with a value of *partial*\ , in which case
-only the particles in the fix group are re-scaled. The latter can be
-useful for leaving the coordinates of particles in a solid substrate
-unchanged and controlling the pressure of a surrounding fluid.
-
-
-----------
-
-
-This fix computes a temperature and pressure each timestep. To do
-this, the fix creates its own computes of style "temp/sphere" and
-"pressure", as if these commands had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp all temp/sphere
- compute fix-ID_press all pressure fix-ID_temp
-
-See the :doc:`compute temp/sphere <compute_temp_sphere>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
-IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
-+ underscore + "press", and the group for the new computes is "all"
-since pressure is computed for the entire system.
-
-Note that these are NOT the computes used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*
-and *thermo_press*\ . This means you can change the attributes of this
-fix's temperature or pressure via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-or pressure during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* or
-*thermo_press* will have no effect on this fix.
-
-Like other fixes that perform thermostatting, this fix can be used
-with :doc:`compute commands <compute>` that calculate a temperature
-after removing a "bias" from the atom velocities. E.g. removing the
-center-of-mass velocity from a group of atoms or only calculating
-temperature on the x-component of velocity or only calculating
-temperature for atoms in a geometric region. This is not done by
-default, but only if the :doc:`fix_modify <fix_modify>` command is used
-to assign a temperature compute to this fix that includes such a bias
-term. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias. In
-this case, the thermostat works in the following manner: the current
-temperature is calculated taking the bias into account, bias is
-removed from each atom, thermostatting is performed on the remaining
-thermal degrees of freedom, and the bias is added back in.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the Nose/Hoover thermostat and barostat
-to :doc:`binary restart files <restart>`. See the
-:doc:`read_restart <read_restart>` command for info on how to re-specify
-a fix in an input script that reads a restart file, so that the
-operation of the fix continues in an uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* and *press* options are
-supported by this fix. You can use them to assign a
-:doc:`compute <compute>` you have defined to this fix which will be used
-in its thermostatting or barostatting procedure. If you do this, note
-that the kinetic energy derived from the compute temperature should be
-consistent with the virial term computed using all atoms for the
-pressure. LAMMPS will warn you if you choose to compute temperature
-on a subset of atoms.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Nose/Hoover thermostatting and
-barostatting to the system's potential energy as part of
-:doc:`thermodynamic output <thermo_style>`.
-
-This fix computes the same global scalar and global vector of
-quantities as does the :doc:`fix npt <fix_nh>` command.
-
-This fix can ramp its target temperature and pressure over multiple
-runs, using the *start* and *stop* keywords of the :doc:`run <run>`
-command. See the :doc:`run <run>` command for details of how to do
-this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix requires that atoms store torque and angular velocity (omega)
-and a radius as defined by the :doc:`atom_style sphere <atom_style>`
-command.
-
-All particles in the group must be finite-size spheres. They cannot
-be point particles.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix npt <fix_nh>`, :doc:`fix nve_sphere <fix_nve_sphere>`, :doc:`fix nvt_sphere <fix_nvt_sphere>`, :doc:`fix npt_asphere <fix_npt_asphere>`, :doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nve.txt b/doc/html/_sources/fix_nve.txt
deleted file mode 100644
index 11611c5bb..000000000
--- a/doc/html/_sources/fix_nve.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-.. index:: fix nve
-
-fix nve command
-===============
-
-fix nve/intel command
-=====================
-
-fix nve/kk command
-==================
-
-fix nve/omp command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nve
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nve = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve
-
-Description
-"""""""""""
-
-Perform constant NVE integration to update position and velocity for
-atoms in the group each timestep. V is volume; E is energy. This
-creates a system trajectory consistent with the microcanonical
-ensemble.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nvt <fix_nh>`, :doc:`fix npt <fix_nh>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nve_asphere.txt b/doc/html/_sources/fix_nve_asphere.txt
deleted file mode 100644
index 56e558667..000000000
--- a/doc/html/_sources/fix_nve_asphere.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-.. index:: fix nve/asphere
-
-fix nve/asphere command
-=======================
-
-fix nve/asphere/intel command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nve/asphere
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nve/asphere = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve/asphere
-
-Description
-"""""""""""
-
-Perform constant NVE integration to update position, velocity,
-orientation, and angular velocity for aspherical particles in the
-group each timestep. V is volume; E is energy. This creates a system
-trajectory consistent with the microcanonical ensemble.
-
-This fix differs from the :doc:`fix nve <fix_nve>` command, which
-assumes point particles and only updates their position and velocity.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the ASPHERE package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires that atoms store torque and angular momementum and a
-quaternion as defined by the :doc:`atom_style ellipsoid <atom_style>`
-command.
-
-All particles in the group must be finite-size. They cannot be point
-particles, but they can be aspherical or spherical as defined by their
-shape attribute.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nve/sphere <fix_nve_sphere>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nve_asphere_noforce.txt b/doc/html/_sources/fix_nve_asphere_noforce.txt
deleted file mode 100644
index a5a5b1e76..000000000
--- a/doc/html/_sources/fix_nve_asphere_noforce.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-.. index:: fix nve/asphere/noforce
-
-fix nve/asphere/noforce command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nve/asphere/noforce
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nve/asphere/noforce = style name of this fix command
-
-Examples
-""""""""
-
-fix 1 all nve/asphere/noforce
-
-Description
-"""""""""""
-
-Perform updates of position and orientation, but not velocity or
-angular momentum for atoms in the group each timestep. In other
-words, the force and torque on the atoms is ignored and their velocity
-and angular momentum are not updated. The atom velocities and
-angularm momenta are used to update their positions and orientation.
-
-This is useful as an implicit time integrator for Fast Lubrication
-Dynamics, since the velocity and angular momentum are updated by the
-`pair_style lubricuteU <pair_lubricateU.txt>`_ command.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the ASPHERE package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires that atoms store torque and angular momementum and a
-quaternion as defined by the :doc:`atom_style ellipsoid <atom_style>`
-command.
-
-All particles in the group must be finite-size. They cannot be point
-particles, but they can be aspherical or spherical as defined by their
-shape attribute.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve/noforce <fix_nve_noforce>`, :doc:`fix nve/asphere <fix_nve_asphere>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nve_body.txt b/doc/html/_sources/fix_nve_body.txt
deleted file mode 100644
index 1dae9fb8a..000000000
--- a/doc/html/_sources/fix_nve_body.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-.. index:: fix nve/body
-
-fix nve/body command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nve/body
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nve/body = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve/body
-
-Description
-"""""""""""
-
-Perform constant NVE integration to update position, velocity,
-orientation, and angular velocity for body particles in the group each
-timestep. V is volume; E is energy. This creates a system trajectory
-consistent with the microcanonical ensemble. See :ref:`Section_howto 14 <howto_14>` of the manual and the :doc:`body <body>`
-doc page for more details on using body particles.
-
-This fix differs from the :doc:`fix nve <fix_nve>` command, which
-assumes point particles and only updates their position and velocity.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the BODY package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires that atoms store torque and angular momementum and a
-quaternion as defined by the :doc:`atom_style body <atom_style>`
-command.
-
-All particles in the group must be body particles. They cannot be
-point particles.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nve/sphere <fix_nve_sphere>`, :doc:`fix nve/asphere <fix_nve_asphere>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nve_eff.txt b/doc/html/_sources/fix_nve_eff.txt
deleted file mode 100644
index 3bb827d4d..000000000
--- a/doc/html/_sources/fix_nve_eff.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-.. index:: fix nve/eff
-
-fix nve/eff command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nve/eff
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nve/eff = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve/eff
-
-Description
-"""""""""""
-
-Perform constant NVE integration to update position and velocity for
-nuclei and electrons in the group for the :doc:`electron force field <pair_eff>` model. V is volume; E is energy. This creates a
-system trajectory consistent with the microcanonical ensemble.
-
-The operation of this fix is exactly like that described by the :doc:`fix nve <fix_nve>` command, except that the radius and radial velocity
-of electrons are also updated.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-EFF package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nvt/eff <fix_nh_eff>`, :doc:`fix npt/eff <fix_nh_eff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nve_limit.txt b/doc/html/_sources/fix_nve_limit.txt
deleted file mode 100644
index 849e16af2..000000000
--- a/doc/html/_sources/fix_nve_limit.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-.. index:: fix nve/limit
-
-fix nve/limit command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nve/limit xmax
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nve = style name of this fix command
-* xmax = maximum distance an atom can move in one timestep (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve/limit 0.1
-
-Description
-"""""""""""
-
-Perform constant NVE updates of position and velocity for atoms in the
-group each timestep. A limit is imposed on the maximum distance an
-atom can move in one timestep. This is useful when starting a
-simulation with a configuration containing highly overlapped atoms.
-Normally this would generate huge forces which would blow atoms out of
-the simulation box, causing LAMMPS to stop with an error.
-
-Using this fix can overcome that problem. Forces on atoms must still
-be computable (which typically means 2 atoms must have a separation
-distance > 0.0). But large velocities generated by large forces are
-reset to a value that corresponds to a displacement of length *xmax*
-in a single timestep. *Xmax* is specified in distance units; see the
-:doc:`units <units>` command for details. The value of *xmax* should be
-consistent with the neighbor skin distance and the frequency of
-neighbor list re-building, so that pairwise interactions are not
-missed on successive timesteps as atoms move. See the
-:doc:`neighbor <neighbor>` and :doc:`neigh_modify <neigh_modify>` commands
-for details.
-
-Note that if a velocity reset occurs the integrator will not conserve
-energy. On steps where no velocity resets occur, this integrator is
-exactly like the :doc:`fix nve <fix_nve>` command. Since forces are
-unaltered, pressures computed by thermodynamic output will still be
-very large for overlapped configurations.
-
-.. note::
-
- You should not use :doc:`fix shake <fix_shake>` in conjunction
- with this fix. That is because fix shake applies contraint forces
- based on the predicted postitions of atoms after the next timestep.
- It has no way of knowing the timestep may change due to this fix,
- which will cause the constraint forces to be invalid. A better
- strategy is to turn off fix shake when performing initial dynamics
- that need this fix, then turn fix shake on when doing normal dynamics
- with a fixed-size timestep.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-count of how many updates of atom's velocity/position were limited by
-the maximum distance criterion. This should be roughly the number of
-atoms so affected, except that updates occur at both the beginning and
-end of a timestep in a velocity Verlet timestepping algorithm. This
-is a cumulative quantity for the current run, but is re-initialized to
-zero each time a run is performed. The scalar value calculated by
-this fix is "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nve/noforce <fix_nve_noforce>`,
-:doc:`pair_style soft <pair_soft>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nve_line.txt b/doc/html/_sources/fix_nve_line.txt
deleted file mode 100644
index 576cc1a67..000000000
--- a/doc/html/_sources/fix_nve_line.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-.. index:: fix nve/line
-
-fix nve/line command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nve/line
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nve/line = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve/line
-
-Description
-"""""""""""
-
-Perform constant NVE integration to update position, velocity,
-orientation, and angular velocity for line segment particles in the
-group each timestep. V is volume; E is energy. This creates a system
-trajectory consistent with the microcanonical ensemble. See
-:doc:`Section_howto 14 <Section_howto>` of the manual for an overview of
-using line segment particles.
-
-This fix differs from the :doc:`fix nve <fix_nve>` command, which
-assumes point particles and only updates their position and velocity.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the ASPHERE package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires that particles be line segments as defined by the
-:doc:`atom_style line <atom_style>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nve/asphere <fix_nve_asphere>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nve_manifold_rattle.txt b/doc/html/_sources/fix_nve_manifold_rattle.txt
deleted file mode 100644
index 51e05cf25..000000000
--- a/doc/html/_sources/fix_nve_manifold_rattle.txt
+++ /dev/null
@@ -1,124 +0,0 @@
-.. index:: fix nve/manifold/rattle
-
-fix nve/manifold/rattle command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nve/manifold/rattle tol maxit manifold manifold-args keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nve/manifold/rattle = style name of this fix command
-* tol = tolerance to which Newton iteration must converge
-* maxit = maximum number of iterations to perform
-* manifold = name of the manifold
-* manifold-args = parameters for the manifold
-* one or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *every*
- *every* values = N
- N = print info about iteration every N steps. N = 0 means no output
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve/manifold/rattle 1e-4 10 sphere 5.0
- fix step all nve/manifold/rattle 1e-8 100 ellipsoid 2.5 2.5 5.0 every 25
-
-Description
-"""""""""""
-
-Perform constant NVE integration to update position and velocity for
-atoms constrained to a curved surface (manifold) in the group each timestep. The constraint
-is handled by RATTLE :ref:`(Andersen) <Andersen>` written out for the special case of
-single-particle constraints as explained in :ref:`(Paquay) <Paquay>`.
-V is volume; E is energy. This way, the dynamics of particles constrained to
-curved surfaces can be studied. If combined with :doc:`fix langevin <fix_langevin>`, this generates
-Brownian motion of particles constrained to a curved surface. For a list of currently supported
-manifolds and their parameters, see :doc:`manifolds <manifolds>`.
-
-Note that the particles must initially be close to the manifold in question. If not, RATTLE will
-not be able to iterate until the constraint is satisfied, and an error is generated. For simple
-manifolds this can be achieved with *region* and *create_atoms* commands, but for more complex
-surfaces it might be more useful to write a script.
-
-The manifold args may be equal-style variables, like so:
-
-.. parsed-literal::
-
- variable R equal "ramp(5.0,3.0)"
- fix shrink_sphere all nve/manifold/rattle 1e-4 10 sphere v_R
-
-In this case, the manifold parameter will change in time according to the variable.
-This is not a problem for the time integrator as long as the change of the manifold is slow with respect to the dynamics of the particles.
-Note that if the manifold has to exert work on the particles because of these changes, the total energy might not be conserved.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-MANIFOLD package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Only use this with *min_style hftn* or *min_style quickmin*\ . If not, the constraints
-will not be satisfied very well at all. A warning is generated if the *min_style* is
-incompatible but no error.
-
-
-----------
-
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nvt/manifold/rattle <fix_nvt_manifold_rattle>`, :doc:`fix manifoldforce <fix_manifoldforce>`
-
-**Default:** every = 0, tchain = 3
-
-
-----------
-
-
-.. _Andersen:
-
-
-
-**(Andersen)** Andersen, J. Comp. Phys. 52, 24, (1983).
-
-.. _Paquay:
-
-
-
-**(Paquay)** Paquay and Kusters, Biophys. J., 110, ???, (2016), to be published,
-preprint available at `arXiv:1411.3019 <http://arxiv.org/abs/1411.3019/>`_.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nve_noforce.txt b/doc/html/_sources/fix_nve_noforce.txt
deleted file mode 100644
index 84e3c5455..000000000
--- a/doc/html/_sources/fix_nve_noforce.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-.. index:: fix nve/noforce
-
-fix nve/noforce command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nve
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nve/noforce = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 3 wall nve/noforce
-
-Description
-"""""""""""
-
-Perform updates of position, but not velocity for atoms in the group
-each timestep. In other words, the force on the atoms is ignored and
-their velocity is not updated. The atom velocities are used to update
-their positions.
-
-This can be useful for wall atoms, when you set their velocities, and
-want the wall to move (or stay stationary) in a prescribed fashion.
-
-This can also be accomplished via the :doc:`fix setforce <fix_setforce>`
-command, but with fix nve/noforce, the forces on the wall atoms are
-unchanged, and can thus be printed by the :doc:`dump <dump>` command or
-queried with an equal-style :doc:`variable <variable>` that uses the
-fcm() group function to compute the total force on the group of atoms.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nve_sphere.txt b/doc/html/_sources/fix_nve_sphere.txt
deleted file mode 100644
index 62c336267..000000000
--- a/doc/html/_sources/fix_nve_sphere.txt
+++ /dev/null
@@ -1,131 +0,0 @@
-.. index:: fix nve/sphere
-
-fix nve/sphere command
-======================
-
-fix nve/sphere/omp command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nve/sphere
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nve/sphere = style name of this fix command
-* zero or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *update*
- *update* value = *dipole* or *dipole/dlm*
- dipole = update orientation of dipole moment during integration
- dipole/dlm = use DLM integrator to update dipole orientation
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve/sphere
- fix 1 all nve/sphere update dipole
- fix 1 all nve/sphere update dipole/dlm
-
-Description
-"""""""""""
-
-Perform constant NVE integration to update position, velocity, and
-angular velocity for finite-size spherical particles in the group each
-timestep. V is volume; E is energy. This creates a system trajectory
-consistent with the microcanonical ensemble.
-
-This fix differs from the :doc:`fix nve <fix_nve>` command, which
-assumes point particles and only updates their position and velocity.
-
-If the *update* keyword is used with the *dipole* value, then the
-orientation of the dipole moment of each particle is also updated
-during the time integration. This option should be used for models
-where a dipole moment is assigned to finite-size particles,
-e.g. spheroids via use of the :doc:`atom_style hybrid sphere dipole <atom_style>` command.
-
-The default dipole orientation integrator can be changed to the
-Dullweber-Leimkuhler-McLachlan integration scheme
-:ref:`(Dullweber) <nh-Dullweber>` when using *update* with the value
-*dipole/dlm*\ . This integrator is symplectic and time-reversible,
-giving better energy conservation and allows slightly longer timesteps
-at only a small additional computational cost.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix requires that atoms store torque and angular velocity (omega)
-and a radius as defined by the :doc:`atom_style sphere <atom_style>`
-command. If the *dipole* keyword is used, then they must also store a
-dipole moment as defined by the :doc:`atom_style dipole <atom_style>`
-command.
-
-All particles in the group must be finite-size spheres. They cannot
-be point particles.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nve/asphere <fix_nve_asphere>`
-
-**Default:** none
-
-
-----------
-
-
-.. _nve-Dullweber:
-
-
-
-**(Dullweber)** Dullweber, Leimkuhler and McLachlan, J Chem Phys, 107,
-5840 (1997).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nve_tri.txt b/doc/html/_sources/fix_nve_tri.txt
deleted file mode 100644
index 44ad68ae2..000000000
--- a/doc/html/_sources/fix_nve_tri.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-.. index:: fix nve/tri
-
-fix nve/tri command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nve/tri
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nve/tri = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve/tri
-
-Description
-"""""""""""
-
-Perform constant NVE integration to update position, velocity,
-orientation, and angular momentum for triangular particles in the
-group each timestep. V is volume; E is energy. This creates a system
-trajectory consistent with the microcanonical ensemble. See
-:doc:`Section_howto 14 <Section_howto>` of the manual for an overview of
-using triangular particles.
-
-This fix differs from the :doc:`fix nve <fix_nve>` command, which
-assumes point particles and only updates their position and velocity.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the ASPHERE package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires that particles be triangles as defined by the
-:doc:`atom_style tri <atom_style>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nve/asphere <fix_nve_asphere>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nvt_asphere.txt b/doc/html/_sources/fix_nvt_asphere.txt
deleted file mode 100644
index f03eb7ac8..000000000
--- a/doc/html/_sources/fix_nvt_asphere.txt
+++ /dev/null
@@ -1,162 +0,0 @@
-.. index:: fix nvt/asphere
-
-fix nvt/asphere command
-=======================
-
-fix nvt/asphere/omp command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nvt/asphere keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nvt/asphere = style name of this fix command
-* additional thermostat related keyword/value pairs from the :doc:`fix nvt <fix_nh>` command can be appended
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nvt/asphere temp 300.0 300.0 100.0
- fix 1 all nvt/asphere temp 300.0 300.0 100.0 drag 0.2
-
-Description
-"""""""""""
-
-Perform constant NVT integration to update position, velocity,
-orientation, and angular velocity each timestep for aspherical or
-ellipsoidal particles in the group using a Nose/Hoover temperature
-thermostat. V is volume; T is temperature. This creates a system
-trajectory consistent with the canonical ensemble.
-
-This fix differs from the :doc:`fix nvt <fix_nh>` command, which
-assumes point particles and only updates their position and velocity.
-
-The thermostat is applied to both the translational and rotational
-degrees of freedom for the aspherical particles, assuming a compute is
-used which calculates a temperature that includes the rotational
-degrees of freedom (see below). The translational degrees of freedom
-can also have a bias velocity removed from them before thermostatting
-takes place; see the description below.
-
-Additional parameters affecting the thermostat are specified by
-keywords and values documented with the :doc:`fix nvt <fix_nh>`
-command. See, for example, discussion of the *temp* and *drag*
-keywords.
-
-This fix computes a temperature each timestep. To do this, the fix
-creates its own compute of style "temp/asphere", as if this command
-had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp/asphere
-
-See the :doc:`compute temp/asphere <compute_temp_asphere>` command for
-details. Note that the ID of the new compute is the fix-ID +
-underscore + "temp", and the group for the new compute is the same as
-the fix group.
-
-Note that this is NOT the compute used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*\ .
-This means you can change the attributes of this fix's temperature
-(e.g. its degrees-of-freedom) via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* will have no
-effect on this fix.
-
-Like other fixes that perform thermostatting, this fix can be used
-with :doc:`compute commands <compute>` that calculate a temperature
-after removing a "bias" from the atom velocities. E.g. removing the
-center-of-mass velocity from a group of atoms or only calculating
-temperature on the x-component of velocity or only calculating
-temperature for atoms in a geometric region. This is not done by
-default, but only if the :doc:`fix_modify <fix_modify>` command is used
-to assign a temperature compute to this fix that includes such a bias
-term. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias. In
-this case, the thermostat works in the following manner: the current
-temperature is calculated taking the bias into account, bias is
-removed from each atom, thermostatting is performed on the remaining
-thermal degrees of freedom, and the bias is added back in.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the Nose/Hoover thermostat to :doc:`binary restart files <restart>`. See the :doc:`read_restart <read_restart>`
-command for info on how to re-specify a fix in an input script that
-reads a restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a :doc:`compute <compute>` you have
-defined to this fix which will be used in its thermostatting
-procedure.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Nose/Hoover thermostatting to
-the system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes the same global scalar and global vector of
-quantities as does the :doc:`fix nvt <fix_nh>` command.
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the ASPHERE package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires that atoms store torque and angular momementum and a
-quaternion as defined by the :doc:`atom_style ellipsoid <atom_style>`
-command.
-
-All particles in the group must be finite-size. They cannot be point
-particles, but they can be aspherical or spherical as defined by their
-shape attribute.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nvt <fix_nh>`, :doc:`fix nve_asphere <fix_nve_asphere>`, :doc:`fix npt_asphere <fix_npt_asphere>`, :doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nvt_body.txt b/doc/html/_sources/fix_nvt_body.txt
deleted file mode 100644
index 63e9f8053..000000000
--- a/doc/html/_sources/fix_nvt_body.txt
+++ /dev/null
@@ -1,155 +0,0 @@
-.. index:: fix nvt/body
-
-fix nvt/body command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nvt/body keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nvt/body = style name of this fix command
-* additional thermostat related keyword/value pairs from the :doc:`fix nvt <fix_nh>` command can be appended
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nvt/body temp 300.0 300.0 100.0
- fix 1 all nvt/body temp 300.0 300.0 100.0 drag 0.2
-
-Description
-"""""""""""
-
-Perform constant NVT integration to update position, velocity,
-orientation, and angular velocity each timestep for body
-particles in the group using a Nose/Hoover temperature
-thermostat. V is volume; T is temperature. This creates a system
-trajectory consistent with the canonical ensemble.
-
-This fix differs from the :doc:`fix nvt <fix_nh>` command, which
-assumes point particles and only updates their position and velocity.
-
-The thermostat is applied to both the translational and rotational
-degrees of freedom for the body particles, assuming a compute is
-used which calculates a temperature that includes the rotational
-degrees of freedom (see below). The translational degrees of freedom
-can also have a bias velocity removed from them before thermostatting
-takes place; see the description below.
-
-Additional parameters affecting the thermostat are specified by
-keywords and values documented with the :doc:`fix nvt <fix_nh>`
-command. See, for example, discussion of the *temp* and *drag*
-keywords.
-
-This fix computes a temperature each timestep. To do this, the fix
-creates its own compute of style "temp/body", as if this command
-had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp/body
-
-See the :doc:`compute temp/body <compute_temp_body>` command for
-details. Note that the ID of the new compute is the fix-ID +
-underscore + "temp", and the group for the new compute is the same as
-the fix group.
-
-Note that this is NOT the compute used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*\ .
-This means you can change the attributes of this fix's temperature
-(e.g. its degrees-of-freedom) via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* will have no
-effect on this fix.
-
-Like other fixes that perform thermostatting, this fix can be used
-with :doc:`compute commands <compute>` that calculate a temperature
-after removing a "bias" from the atom velocities. E.g. removing the
-center-of-mass velocity from a group of atoms or only calculating
-temperature on the x-component of velocity or only calculating
-temperature for atoms in a geometric region. This is not done by
-default, but only if the :doc:`fix_modify <fix_modify>` command is used
-to assign a temperature compute to this fix that includes such a bias
-term. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias. In
-this case, the thermostat works in the following manner: the current
-temperature is calculated taking the bias into account, bias is
-removed from each atom, thermostatting is performed on the remaining
-thermal degrees of freedom, and the bias is added back in.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the Nose/Hoover thermostat to :doc:`binary restart files <restart>`. See the :doc:`read_restart <read_restart>`
-command for info on how to re-specify a fix in an input script that
-reads a restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a :doc:`compute <compute>` you have
-defined to this fix which will be used in its thermostatting
-procedure.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Nose/Hoover thermostatting to
-the system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes the same global scalar and global vector of
-quantities as does the :doc:`fix nvt <fix_nh>` command.
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the BODY package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires that atoms store torque and angular momementum and a
-quaternion as defined by the :doc:`atom_style body <atom_style>`
-command.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nvt <fix_nh>`, :doc:`fix nve_body <fix_nve_body>`, :doc:`fix npt_body <fix_npt_body>`, :doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nvt_manifold_rattle.txt b/doc/html/_sources/fix_nvt_manifold_rattle.txt
deleted file mode 100644
index cbaf93831..000000000
--- a/doc/html/_sources/fix_nvt_manifold_rattle.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-.. index:: fix nvt/manifold/rattle
-
-fix nvt/manifold/rattle command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nvt/manifold/rattle tol maxit manifold manifold-args keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nvt/manifold/rattle = style name of this fix command
-* tol = tolerance to which Newton iteration must converge
-* maxit = maximum number of iterations to perform
-* manifold = name of the manifold
-* manifold-args = parameters for the manifold
-* one or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *temp* or *tchain* or *every*
- *temp* values = Tstart Tstop Tdamp
- Tstart, Tstop = external temperature at start/end of run
- Tdamp = temperature damping parameter (time units)
- *tchain* value = N
- N = length of thermostat chain (1 = single thermostat)
- *every* value = N
- N = print info about iteration every N steps. N = 0 means no output
-
-
-
-Examples
-""""""""
-
-fix 1 all nvt/manifold/rattle 1e-4 10 cylinder 3.0 temp 1.0 1.0 10.0
-
-Description
-"""""""""""
-
-This fix combines the RATTLE-based :ref:`(Andersen) <Andersen>` time integrator of :doc:`fix nve/manifold/rattle <fix_nve_manifold_rattle>` :ref:`(Paquay) <Paquay>` with a Nose-Hoover-chain thermostat to sample the
-canonical ensemble of particles constrained to a curved surface (manifold). This sampling does suffer from discretization bias of O(dt).
-For a list of currently supported manifolds and their parameters, see :doc:`manifolds <manifolds>`
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-MANIFOLD package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Only use this with *min_style hftn* or *min_style quickmin*\ . If not, the constraints
-will not be satisfied very well at all. A warning is generated if the *min_style* is
-incompatible but no error.
-
-
-----------
-
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve/manifold/rattle <fix_nvt_manifold_rattle>`, :doc:`fix manifoldforce <fix_manifoldforce>`
-**Default:** every = 0
-
-
-----------
-
-
-.. _Andersen:
-
-
-
-**(Andersen)** Andersen, J. Comp. Phys. 52, 24, (1983).
-
-.. _Paquay:
-
-
-
-**(Paquay)** Paquay and Kusters, Biophys. J., 110, ???, (2016), to be published,
-preprint available at `arXiv:1411.3019 <http://arxiv.org/abs/1411.3019/>`_.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nvt_sllod.txt b/doc/html/_sources/fix_nvt_sllod.txt
deleted file mode 100644
index 63c80417c..000000000
--- a/doc/html/_sources/fix_nvt_sllod.txt
+++ /dev/null
@@ -1,200 +0,0 @@
-.. index:: fix nvt/sllod
-
-fix nvt/sllod command
-=====================
-
-fix nvt/sllod/intel command
-===========================
-
-fix nvt/sllod/omp command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nvt/sllod keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nvt/sllod = style name of this fix command
-* additional thermostat related keyword/value pairs from the :doc:`fix nvt <fix_nh>` command can be appended
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nvt/sllod temp 300.0 300.0 100.0
- fix 1 all nvt/sllod temp 300.0 300.0 100.0 drag 0.2
-
-Description
-"""""""""""
-
-Perform constant NVT integration to update positions and velocities
-each timestep for atoms in the group using a Nose/Hoover temperature
-thermostat. V is volume; T is temperature. This creates a system
-trajectory consistent with the canonical ensemble.
-
-This thermostat is used for a simulation box that is changing size
-and/or shape, for example in a non-equilibrium MD (NEMD) simulation.
-The size/shape change is induced by use of the :doc:`fix deform <fix_deform>` command, so each point in the simulation box
-can be thought of as having a "streaming" velocity. This
-position-dependent streaming velocity is subtracted from each atom's
-actual velocity to yield a thermal velocity which is used for
-temperature computation and thermostatting. For example, if the box
-is being sheared in x, relative to y, then points at the bottom of the
-box (low y) have a small x velocity, while points at the top of the
-box (hi y) have a large x velocity. These velocities do not
-contribute to the thermal "temperature" of the atom.
-
-.. note::
-
- :doc:`Fix deform <fix_deform>` has an option for remapping either
- atom coordinates or velocities to the changing simulation box. To use
- fix nvt/sllod, fix deform should NOT remap atom positions, because fix
- nvt/sllod adjusts the atom positions and velocities to create a
- velocity profile that matches the changing box size/shape. Fix deform
- SHOULD remap atom velocities when atoms cross periodic boundaries
- since that is consistent with maintaining the velocity profile created
- by fix nvt/sllod. LAMMPS will give an error if this setting is not
- consistent.
-
-The SLLOD equations of motion, originally proposed by Hoover and Ladd
-(see :ref:`(Evans and Morriss) <Evans>`), were proven to be equivalent to
-Newton's equations of motion for shear flow by :ref:`(Evans and Morriss) <Evans>`. They were later shown to generate the desired
-velocity gradient and the correct production of work by stresses for
-all forms of homogeneous flow by :ref:`(Daivis and Todd) <Daivis>`. As
-implemented in LAMMPS, they are coupled to a Nose/Hoover chain
-thermostat in a velocity Verlet formulation, closely following the
-implementation used for the :doc:`fix nvt <fix_nh>` command.
-
-Additional parameters affecting the thermostat are specified by
-keywords and values documented with the :doc:`fix nvt <fix_nh>`
-command. See, for example, discussion of the *temp* and *drag*
-keywords.
-
-This fix computes a temperature each timestep. To do this, the fix
-creates its own compute of style "temp/deform", as if this command had
-been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp/deform
-
-See the :doc:`compute temp/deform <compute_temp_deform>` command for
-details. Note that the ID of the new compute is the fix-ID +
-underscore + "temp", and the group for the new compute is the same as
-the fix group.
-
-Note that this is NOT the compute used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*\ .
-This means you can change the attributes of this fix's temperature
-(e.g. its degrees-of-freedom) via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* will have no
-effect on this fix.
-
-Like other fixes that perform thermostatting, this fix can be used
-with :doc:`compute commands <compute>` that calculate a temperature
-after removing a "bias" from the atom velocities. E.g. removing the
-center-of-mass velocity from a group of atoms or only calculating
-temperature on the x-component of velocity or only calculating
-temperature for atoms in a geometric region. This is not done by
-default, but only if the :doc:`fix_modify <fix_modify>` command is used
-to assign a temperature compute to this fix that includes such a bias
-term. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias. In
-this case, the thermostat works in the following manner: the current
-temperature is calculated taking the bias into account, bias is
-removed from each atom, thermostatting is performed on the remaining
-thermal degrees of freedom, and the bias is added back in.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the Nose/Hoover thermostat to :doc:`binary restart files <restart>`. See the :doc:`read_restart <read_restart>`
-command for info on how to re-specify a fix in an input script that
-reads a restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a :doc:`compute <compute>` you have
-defined to this fix which will be used in its thermostatting
-procedure.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Nose/Hoover thermostatting to
-the system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes the same global scalar and global vector of
-quantities as does the :doc:`fix nvt <fix_nh>` command.
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix works best without Nose-Hoover chain thermostats, i.e. using
-tchain = 1. Setting tchain to larger values can result in poor
-equilibration.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix langevin <fix_langevin>`,
-:doc:`fix_modify <fix_modify>`, :doc:`compute temp/deform <compute_temp_deform>`
-
-Default
-"""""""
-
-Same as :doc:`fix nvt <fix_nh>`, except tchain = 1.
-
-
-----------
-
-
-.. _Evans:
-
-
-
-**(Evans and Morriss)** Evans and Morriss, Phys Rev A, 30, 1528 (1984).
-
-.. _Daivis:
-
-
-
-**(Daivis and Todd)** Daivis and Todd, J Chem Phys, 124, 194103 (2006).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nvt_sllod_eff.txt b/doc/html/_sources/fix_nvt_sllod_eff.txt
deleted file mode 100644
index c22198ba7..000000000
--- a/doc/html/_sources/fix_nvt_sllod_eff.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-.. index:: fix nvt/sllod/eff
-
-fix nvt/sllod/eff command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nvt/sllod/eff keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nvt/sllod/eff = style name of this fix command
-* additional thermostat related keyword/value pairs from the :doc:`fix nvt/eff <fix_nh_eff>` command can be appended
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nvt/sllod/eff temp 300.0 300.0 0.1
- fix 1 all nvt/sllod/eff temp 300.0 300.0 0.1 drag 0.2
-
-Description
-"""""""""""
-
-Perform constant NVT integration to update positions and velocities
-each timestep for nuclei and electrons in the group for the :doc:`electron force field <pair_eff>` model, using a Nose/Hoover temperature
-thermostat. V is volume; T is temperature. This creates a system
-trajectory consistent with the canonical ensemble.
-
-The operation of this fix is exactly like that described by the :doc:`fix nvt/sllod <fix_nvt_sllod>` command, except that the radius and
-radial velocity of electrons are also updated and thermostatted.
-Likewise the temperature calculated by the fix, using the compute it
-creates (as discussed in the :doc:`fix nvt, npt, and nph <fix_nh>` doc
-page), is performed with a :doc:`compute temp/deform/eff <compute_temp_deform_eff>` commmand that includes
-the eFF contribution to the temperature from the electron radial
-velocity.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the Nose/Hoover thermostat to :doc:`binary restart files <restart>`. See the :doc:`read_restart <read_restart>`
-command for info on how to re-specify a fix in an input script that
-reads a restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a :doc:`compute <compute>` you have
-defined to this fix which will be used in its thermostatting
-procedure.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Nose/Hoover thermostatting to
-the system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes the same global scalar and global vector of
-quantities as does the :doc:`fix nvt/eff <fix_nh_eff>` command.
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-EFF package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix works best without Nose-Hoover chain thermostats, i.e. using
-tchain = 1. Setting tchain to larger values can result in poor
-equilibration.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve/eff <fix_nve_eff>`, :doc:`fix nvt/eff <fix_nh_eff>`, :doc:`fix langevin/eff <fix_langevin_eff>`, :doc:`fix nvt/sllod <fix_nvt_sllod>`, :doc:`fix_modify <fix_modify>`, :doc:`compute temp/deform/eff <compute_temp_deform_eff>`
-
-Default
-"""""""
-
-Same as :doc:`fix nvt/eff <fix_nh_eff>`, except tchain = 1.
-
-
-----------
-
-
-.. _Tuckerman:
-
-
-
-**(Tuckerman)** Tuckerman, Mundy, Balasubramanian, Klein, J Chem Phys,
-106, 5615 (1997).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_nvt_sphere.txt b/doc/html/_sources/fix_nvt_sphere.txt
deleted file mode 100644
index cdc2bbdb2..000000000
--- a/doc/html/_sources/fix_nvt_sphere.txt
+++ /dev/null
@@ -1,158 +0,0 @@
-.. index:: fix nvt/sphere
-
-fix nvt/sphere command
-======================
-
-fix nvt/sphere/omp command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID nvt/sphere keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nvt/sphere = style name of this fix command
-* additional thermostat related keyword/value pairs from the :doc:`fix nvt <fix_nh>` command can be appended
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nvt/sphere temp 300.0 300.0 100.0
- fix 1 all nvt/sphere temp 300.0 300.0 100.0 drag 0.2
-
-Description
-"""""""""""
-
-Perform constant NVT integration to update position, velocity, and
-angular velocity each timestep for finite-size spherical particles in
-the group using a Nose/Hoover temperature thermostat. V is volume; T
-is temperature. This creates a system trajectory consistent with the
-canonical ensemble.
-
-This fix differs from the :doc:`fix nvt <fix_nh>` command, which
-assumes point particles and only updates their position and velocity.
-
-The thermostat is applied to both the translational and rotational
-degrees of freedom for the spherical particles, assuming a compute is
-used which calculates a temperature that includes the rotational
-degrees of freedom (see below). The translational degrees of freedom
-can also have a bias velocity removed from them before thermostatting
-takes place; see the description below.
-
-Additional parameters affecting the thermostat are specified by
-keywords and values documented with the :doc:`fix nvt <fix_nh>`
-command. See, for example, discussion of the *temp* and *drag*
-keywords.
-
-This fix computes a temperature each timestep. To do this, the fix
-creates its own compute of style "temp/sphere", as if this command
-had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp/sphere
-
-See the :doc:`compute temp/sphere <compute_temp_sphere>` command for
-details. Note that the ID of the new compute is the fix-ID +
-underscore + "temp", and the group for the new compute is the same as
-the fix group.
-
-Note that this is NOT the compute used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*\ .
-This means you can change the attributes of this fix's temperature
-(e.g. its degrees-of-freedom) via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* will have no
-effect on this fix.
-
-Like other fixes that perform thermostatting, this fix can be used
-with :doc:`compute commands <compute>` that calculate a temperature
-after removing a "bias" from the atom velocities. E.g. removing the
-center-of-mass velocity from a group of atoms or only calculating
-temperature on the x-component of velocity or only calculating
-temperature for atoms in a geometric region. This is not done by
-default, but only if the :doc:`fix_modify <fix_modify>` command is used
-to assign a temperature compute to this fix that includes such a bias
-term. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias. In
-this case, the thermostat works in the following manner: the current
-temperature is calculated taking the bias into account, bias is
-removed from each atom, thermostatting is performed on the remaining
-thermal degrees of freedom, and the bias is added back in.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the state of the Nose/Hoover thermostat to :doc:`binary restart files <restart>`. See the :doc:`read_restart <read_restart>`
-command for info on how to re-specify a fix in an input script that
-reads a restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a :doc:`compute <compute>` you have
-defined to this fix which will be used in its thermostatting
-procedure.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change induced by Nose/Hoover thermostatting to
-the system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes the same global scalar and global vector of
-quantities as does the :doc:`fix nvt <fix_nh>` command.
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix requires that atoms store torque and angular velocity (omega)
-and a radius as defined by the :doc:`atom_style sphere <atom_style>`
-command.
-
-All particles in the group must be finite-size spheres. They cannot
-be point particles.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nvt <fix_nh>`, :doc:`fix nve_sphere <fix_nve_sphere>`, :doc:`fix nvt_asphere <fix_nvt_asphere>`, :doc:`fix npt_sphere <fix_npt_sphere>`, :doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_oneway.txt b/doc/html/_sources/fix_oneway.txt
deleted file mode 100644
index 8a3285e6d..000000000
--- a/doc/html/_sources/fix_oneway.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-.. index:: fix oneway
-
-fix oneway command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID oneway N region-ID direction
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* oneway = style name of this fix command
-* N = apply this fix every this many timesteps
-* region-ID = ID of region where fix is active
-* direction = *x* or *-x* or *y* or *-y* or *z* or *-z* = coordinate and direction of the oneway constraint
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix ions oneway 10 semi -x
- fix all oneway 1 left -z
- fix all oneway 1 right z
-
-Description
-"""""""""""
-
-Enforce that particles in the group and in a given region can only
-move in one direction. This is done by reversing a particle's
-velocity component, if it has the wrong sign in the specified
-dimension. The effect is that the particle moves in one direction
-only.
-
-This can be used, for example, as a simple model of a semi-permeable
-membrane, or as an implementation of Maxwell's demon.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix wall/reflect <fix_wall_reflect>` command
-
-**Default:** none
-
-
-----------
-
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_orient.txt b/doc/html/_sources/fix_orient.txt
deleted file mode 100644
index 461cea938..000000000
--- a/doc/html/_sources/fix_orient.txt
+++ /dev/null
@@ -1,228 +0,0 @@
-.. index:: fix orient/fcc
-
-fix orient/fcc command
-======================
-
-fix orient/bcc command
-======================
-
-.. parsed-literal::
-
- fix ID group-ID orient/fcc nstats dir alat dE cutlo cuthi file0 file1
- fix ID group-ID orient/bcc nstats dir alat dE cutlo cuthi file0 file1
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* nstats = print stats every this many steps, 0 = never
-* dir = 0/1 for which crystal is used as reference
-* alat = fcc/bcc cubic lattice constant (distance units)
-* dE = energy added to each atom (energy units)
-* cutlo,cuthi = values between 0.0 and 1.0, cutlo < cuthi
-* file0,file1 = files that specify orientation of each grain
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix gb all orient/fcc 0 1 4.032008 0.001 0.25 0.75 xi.vec chi.vec
- fix gb all orient/bcc 0 1 2.882 0.001 0.25 0.75 ngb.left ngb.right
-
-Description
-"""""""""""
-
-The fix applies an orientation-dependent force to atoms near a planar
-grain boundary which can be used to induce grain boundary migration
-(in the direction perpendicular to the grain boundary plane). The
-motivation and explanation of this force and its application are
-described in :ref:`(Janssens) <Janssens>`. The adaptiation to bcc crystals
-is described in :ref:`(Wicaksono1) <Wicaksono1>`. The computed force is only
-applied to atoms in the fix group.
-
-The basic idea is that atoms in one grain (on one side of the
-boundary) have a potential energy dE added to them. Atoms in the
-other grain have 0.0 potential energy added. Atoms near the boundary
-(whose neighbor environment is intermediate between the two grain
-orientations) have an energy between 0.0 and dE added. This creates
-an effective driving force to reduce the potential energy of atoms
-near the boundary by pushing them towards one of the grain
-orientations. For dir = 1 and dE > 0, the boundary will thus move so
-that the grain described by file0 grows and the grain described by
-file1 shrinks. Thus this fix is designed for simulations of two-grain
-systems, either with one grain boundary and free surfaces parallel to
-the boundary, or a system with periodic boundary conditions and two
-equal and opposite grain boundaries. In either case, the entire
-system can displace during the simulation, and such motion should be
-accounted for in measuring the grain boundary velocity.
-
-The potential energy added to atom I is given by these formulas
-
-.. image:: Eqs/fix_orient_fcc.jpg
- :align: center
-
-which are fully explained in :ref:`(Janssens) <Janssens>`. For fcc crystals
-this order parameter Xi for atom I in equation (1) is a sum over the
-12 nearest neighbors of atom I. For bcc crystals it is the
-corresponding sum of the 8 nearest neighbors. Rj is the vector from
-atom I to its neighbor J, and RIj is a vector in the reference
-(perfect) crystal. That is, if dir = 0/1, then RIj is a vector to an
-atom coord from file 0/1. Equation (2) gives the expected value of
-the order parameter XiIJ in the other grain. Hi and lo cutoffs are
-defined in equations (3) and (4), using the input parameters *cutlo*
-and *cuthi* as thresholds to avoid adding grain boundary energy when
-the deviation in the order parameter from 0 or 1 is small (e.g. due to
-thermal fluctuations in a perfect crystal). The added potential
-energy Ui for atom I is given in equation (6) where it is interpolated
-between 0 and dE using the two threshold Xi values and the Wi value of
-equation (5).
-
-The derivative of this energy expression gives the force on each atom
-which thus depends on the orientation of its neighbors relative to the
-2 grain orientations. Only atoms near the grain boundary feel a net
-force which tends to drive them to one of the two grain orientations.
-
-In equation (1), the reference vector used for each neighbor is the
-reference vector closest to the actual neighbor position. This means
-it is possible two different neighbors will use the same reference
-vector. In such cases, the atom in question is far from a perfect
-orientation and will likely receive the full dE addition, so the
-effect of duplicate reference vector usage is small.
-
-The *dir* parameter determines which grain wants to grow at the
-expense of the other. A value of 0 means the first grain will shrink;
-a value of 1 means it will grow. This assumes that *dE* is positive.
-The reverse will be true if *dE* is negative.
-
-The *alat* parameter is the cubic lattice constant for the fcc or bcc
-material and is only used to compute a cutoff distance of 1.57 * alat
-/ sqrt(2) for finding the 12 or 8 nearest neighbors of each atom
-(which should be valid for an fcc or bcc crystal). A longer/shorter
-cutoff can be imposed by adjusting *alat*\ . If a particular atom has
-less than 12 or 8 neighbors within the cutoff, the order parameter of
-equation (1) is effectively multiplied by 12 or 8 divided by the
-actual number of neighbors within the cutoff.
-
-The *dE* parameter is the maximum amount of additional energy added to
-each atom in the grain which wants to shrink.
-
-The *cutlo* and *cuthi* parameters are used to reduce the force added
-to bulk atoms in each grain far away from the boundary. An atom in
-the bulk surrounded by neighbors at the ideal grain orientation would
-compute an order parameter of 0 or 1 and have no force added.
-However, thermal vibrations in the solid will cause the order
-parameters to be greater than 0 or less than 1. The cutoff parameters
-mask this effect, allowing forces to only be added to atoms with
-order-parameters between the cutoff values.
-
-*File0* and *file1* are filenames for the two grains which each
-contain 6 vectors (6 lines with 3 values per line) which specify the
-grain orientations. Each vector is a displacement from a central atom
-(0,0,0) to a nearest neighbor atom in an fcc lattice at the proper
-orientation. The vector lengths should all be identical since an fcc
-lattice has a coordination number of 12. Only 6 are listed due to
-symmetry, so the list must include one from each pair of
-equal-and-opposite neighbors. A pair of orientation files for a
-Sigma=5 tilt boundary are shown below. A tutorial that can help for
-writing the orientation files is given in :ref:`(Wicaksono2) <Wicaksono2>`
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the potential energy of atom interactions with the grain
-boundary driving force to the system's potential energy as part of
-:doc:`thermodynamic output <thermo_style>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by these
-fixes. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator a fix is adding its forces. Default is the outermost level.
-
-This fix calculates a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-potential energy change due to this fix. The scalar value calculated
-by this fix is "extensive".
-
-This fix also calculates a per-atom array which can be accessed by
-various :ref:`output commands <howto_15>`. The array
-stores the order parameter Xi and normalized order parameter (0 to 1)
-for each atom. The per-atom values can be accessed on any timestep.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MISC package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix should only be used with fcc or bcc lattices.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Janssens:
-
-
-
-**(Janssens)** Janssens, Olmsted, Holm, Foiles, Plimpton, Derlet, Nature
-Materials, 5, 124-127 (2006).
-
-.. _Wicaksono1:
-
-
-
-**(Wicaksono1)** Wicaksono, Sinclair, Militzer, Computational Materials
-Science, 117, 397-405 (2016).
-
-.. _Wicaksono2:
-
-
-
-**(Wicaksono2)** Wicaksono, figshare,
-https://dx.doi.org/10.6084/m9.figshare.1488628.v1 (2015).
-
-
-----------
-
-
-For illustration purposes, here are example files that specify a
-Sigma=5 <100> tilt boundary. This is for a lattice constant of 3.5706
-Angs.
-
-file0:
-
-.. parsed-literal::
-
- 0.798410432046075 1.785300000000000 1.596820864092150
- -0.798410432046075 1.785300000000000 -1.596820864092150
- 2.395231296138225 0.000000000000000 0.798410432046075
- 0.798410432046075 0.000000000000000 -2.395231296138225
- 1.596820864092150 1.785300000000000 -0.798410432046075
- 1.596820864092150 -1.785300000000000 -0.798410432046075
-
-file1:
-
-.. parsed-literal::
-
- -0.798410432046075 1.785300000000000 1.596820864092150
- 0.798410432046075 1.785300000000000 -1.596820864092150
- 0.798410432046075 0.000000000000000 2.395231296138225
- 2.395231296138225 0.000000000000000 -0.798410432046075
- 1.596820864092150 1.785300000000000 0.798410432046075
- 1.596820864092150 -1.785300000000000 0.798410432046075
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_phonon.txt b/doc/html/_sources/fix_phonon.txt
deleted file mode 100644
index 1184eb3a2..000000000
--- a/doc/html/_sources/fix_phonon.txt
+++ /dev/null
@@ -1,237 +0,0 @@
-.. index:: fix phonon
-
-fix phonon command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID phonon N Noutput Nwait map_file prefix keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* phonon = style name of this fix command
-* N = measure the Green's function every this many timesteps
-* Noutput = output the dynamical matrix every this many measurements
-* Nwait = wait this many timesteps before measuring
-* map_file = *file* or *GAMMA*
-.. parsed-literal::
-
- *file* is the file that contains the mapping info between atom ID and the lattice indices.
-
-.. parsed-literal::
-
- *GAMMA* flags to treate the whole simulation box as a unit cell, so that the mapping
- info can be generated internally. In this case, dynamical matrix at only the gamma-point
- will/can be evaluated.
-
-* prefix = prefix for output files
-* one or none keyword/value pairs may be appended
-* keyword = *sysdim* or *nasr*
-.. parsed-literal::
-
- *sysdim* value = d
- d = dimension of the system, usually the same as the MD model dimension
- *nasr* value = n
- n = number of iterations to enforce the acoustic sum rule
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all phonon 20 5000 200000 map.in LJ1D sysdim 1
- fix 1 all phonon 20 5000 200000 map.in EAM3D
- fix 1 all phonon 10 5000 500000 GAMMA EAM0D nasr 100
-
-Description
-"""""""""""
-
-Calculate the dynamical matrix from molecular dynamics simulations
-based on fluctuation-dissipation theory for a group of atoms.
-
-Consider a crystal with :math:`N` unit cells in three dimensions labelled :math:`l = (l_1, l_2, l_3)` where :math:`l_i`
-are integers. Each unit cell is defined by three linearly independent
-vectors :math:`\mathbf{a}_1`, :math:`\mathbf{a}_2`, :math:`\mathbf{a}_3` forming a
-parallelipiped, containing :math:`K` basis atoms labeled :math:`k`.
-
-Based on fluctuation-dissipation theory, the force constant
-coefficients of the system in reciprocal space are given by
-(:ref:`Campana <Campana>` , :ref:`Kong <Kong>`)
-
-
-.. math::
-
- \begin{equation}\mathbf{\Phi}_{k\alpha,k^\prime \beta}(\mathbf{q}) = k_B T \mathbf{G}^{-1}_{k\alpha,k^\prime \beta}(\mathbf{q})\end{equation}
-
-where :math:`\mathbf{G}` is the Green's functions coefficients given by
-
-
-.. math::
-
- \begin{equation}\mathbf{G}_{k\alpha,k^\prime \beta}(\mathbf{q}) = \left< \mathbf{u}_{k\alpha}(\mathbf{q}) \bullet \mathbf{u}_{k^\prime \beta}^*(\mathbf{q}) \right>\end{equation}
-
-where :math:`\left< \ldots \right>` denotes the ensemble average, and
-
-
-.. math::
-
- \begin{equation}\mathbf{u}_{k\alpha}(\mathbf{q}) = \sum_l \mathbf{u}_{l k \alpha} \exp{(i\mathbf{qr}_l)}\end{equation}
-
-is the :math:`\alpha` component of the atomic displacement for the :math:`k` th atom
-in the unit cell in reciprocal space at :math:`\mathbf{q}`. In practice, the Green's
-functions coefficients can also be measured according to the following
-formula,
-
-
-.. math::
-
- \begin{equation}\mathbf{G}_{k\alpha,k^\prime \beta}(\mathbf{q}) =
- \left< \mathbf{R}_{k \alpha}(\mathbf{q}) \bullet \mathbf{R}^*_{k^\prime \beta}(\mathbf{q}) \right>
- - \left<\mathbf{R}\right>_{k \alpha}(\mathbf{q}) \bullet \left<\mathbf{R}\right>^*_{k^\prime \beta}(\mathbf{q})\end{equation}
-
-where :math:`\mathbf{R}` is the instantaneous positions of atoms, and :math:`\left<\mathbf{R}\right>` is the
-averaged atomic positions. It gives essentially the same results as
-the displacement method and is easier to implement in an MD code.
-
-Once the force constant matrix is known, the dynamical matrix :math:`\mathbf{D}` can
-then be obtained by
-
-
-.. math::
-
- \begin{equation}\mathbf{D}_{k\alpha, k^\prime\beta}(\mathbf{q}) =
- (m_k m_{k^\prime})^{-\frac{1}{2}} \mathbf{\Phi}_{k \alpha, k^\prime \beta}(\mathbf{q})\end{equation}
-
-whose eigenvalues are exactly the phonon frequencies at :math:`\mathbf{q}`.
-
-This fix uses positions of atoms in the specified group and calculates
-two-point correlations. To achieve this. the positions of the atoms
-are examined every *Nevery* steps and are Fourier-transformed into
-reciprocal space, where the averaging process and correlation
-computation is then done. After every *Noutput* measurements, the
-matrix :math:`\mathbf{G}(\mathbf{q})` is calculated and inverted to obtain the elastic
-stiffness coefficients. The dynamical matrices are then constructed
-and written to *prefix*\ .bin.timestep files in binary format and to the
-file *prefix*\ .log for each wavevector :math:`\mathbf{q}`.
-
-A detailed description of this method can be found in
-(:ref:`Kong2011 <Kong2011>`).
-
-The *sysdim* keyword is optional. If specified with a value smaller
-than the dimensionality of the LAMMPS simulation, its value is used
-for the dynamical matrix calculation. For example, using LAMMPS ot
-model a 2D or 3D system, the phonon dispersion of a 1D atomic chain
-can be computed using *sysdim* = 1.
-
-The *nasr* keyword is optional. An iterative procedure is employed to
-enforce the acoustic sum rule on :math:`\Phi` at :math:`\Gamma`, and the number
-provided by keyword *nasr* gives the total number of iterations. For a
-system whose unit cell has only one atom, *nasr* = 1 is sufficient;
-for other systems, *nasr* = 10 is typically sufficient.
-
-The *map_file* contains the mapping information between the lattice
-indices and the atom IDs, which tells the code which atom sits at
-which lattice point; the lattice indices start from 0. An auxiliary
-code, `latgen <http://code.google.com/p/latgen>`_, can be employed to
-generate the compatible map file for various crystals.
-
-In case one simulates an aperiodic system, where the whole simulation box
-is treated as a unit cell, one can set *map_file* as *GAMMA*\ , so that the mapping
-info will be generated internally and a file is not needed. In this case, the
-dynamical matrix at only the gamma-point will/can be evaluated. Please keep in
-mind that fix-phonon is designed for cyrstals, it will be inefficient and
-even degrade the performance of lammps in case the unit cell is too large.
-
-The calculated dynamical matrix elements are written out in
-:doc:`energy/distance^2/mass <units>` units. The coordinates for *q*
-points in the log file is in the units of the basis vectors of the
-corresponding reciprocal lattice.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to change the temperature compute from thermo_temp
-to the one that reflects the true temperature of atoms in the group.
-
-No global scalar or vector or per-atom quantities are stored by this
-fix for access by various :ref:`output commands <4_15>`.
-
-Instead, this fix outputs its initialization information (including
-mapping information) and the calculated dynamical matrices to the file
-*prefix*\ .log, with the specified *prefix*\ . The dynamical matrices are
-also written to files *prefix*\ .bin.timestep in binary format. These
-can be read by the post-processing tool in tools/phonon to compute the
-phonon density of states and/or phonon dispersion curves.
-
-No parameter of this fix can be used with the *start/stop* keywords
-of the :doc:`run <run>` command.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix assumes a crystalline system with periodical lattice. The
-temperature of the system should not exceed the melting temperature to
-keep the system in its solid state.
-
-This fix is part of the USER-PHONON package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix requires LAMMPS be built with an FFT library. See the
-:ref:`Making LAMMPS <start_2>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute msd <compute_msd>`
-
-Default
-"""""""
-
-The option defaults are sysdim = the same dimemsion as specified by
-the `dimension <dimension>`_ command, and nasr = 20.
-
-
-----------
-
-
-.. _Campana:
-
-
-
-**(Campana)** C. Campana and
-M. H. Muser, *Practical Green's function approach to the
-simulation of elastic semi-infinite solids*\ , `Phys. Rev. B [74], 075420 (2006) <http://dx.doi.org/10.1103/PhysRevB.74.075420>`_
-
-.. _Kong:
-
-
-
-**(Kong)** L.T. Kong, G. Bartels, C. Campana,
-C. Denniston, and Martin H. Muser, *Implementation of Green's
-function molecular dynamics: An extension to LAMMPS*\ , `Computer Physics Communications [180](6):1004-1010 (2009). <http://dx.doi.org/10.1016/j.cpc.2008.12.035>`_
-
-L.T. Kong, C. Denniston, and Martin H. Muser,
-*An improved version of the Green's function molecular dynamics
-method*\ , `Computer Physics Communications [182](2):540-541 (2011). <http://dx.doi.org/10.1016/j.cpc.2010.10.006>`_
-
-.. _Kong2011:
-
-
-
-**(Kong2011)** L.T. Kong, *Phonon dispersion measured directly from
-molecular dynamics simulations*\ , `Computer Physics Communications [182](10):2201-2207, (2011). <http://dx.doi.org/10.1016/j.cpc.2011.04.019>`_
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_pimd.txt b/doc/html/_sources/fix_pimd.txt
deleted file mode 100644
index 7bc5d4dde..000000000
--- a/doc/html/_sources/fix_pimd.txt
+++ /dev/null
@@ -1,222 +0,0 @@
-.. index:: fix pimd
-
-fix pimd command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID pimd keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* pimd = style name of this fix command
-* zero or more keyword/value pairs may be appended
-* keyword = *method* or *fmass* or *sp* or *temp* or *nhc*
-.. parsed-literal::
-
- *method* value = *pimd* or *nmpimd* or *cmd*
- *fmass* value = scaling factor on mass
- *sp* value = scaling factor on Planck constant
- *temp* value = temperature (temperarate units)
- *nhc* value = Nc = number of chains in Nose-Hoover thermostat
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all pimd method nmpimd fmass 1.0 sp 2.0 temp 300.0 nhc 4
-
-Description
-"""""""""""
-
-This command performs quantum molecular dynamics simulations based on
-the Feynman path integral to include effects of tunneling and
-zero-point motion. In this formalism, the isomorphism of a quantum
-partition function for the original system to a classical partition
-function for a ring-polymer system is exploited, to efficiently sample
-configurations from the canonical ensemble :ref:`(Feynman) <Feynman>`.
-The classical partition function and its components are given
-by the following equations:
-
-.. image:: Eqs/fix_pimd.jpg
- :align: center
-
-The interested user is referred to any of the numerous references on
-this methodology, but briefly, each quantum particle in a path
-integral simulation is represented by a ring-polymer of P quasi-beads,
-labeled from 1 to P. During the simulation, each quasi-bead interacts
-with beads on the other ring-polymers with the same imaginary time
-index (the second term in the effective potential above). The
-quasi-beads also interact with the two neighboring quasi-beads through
-the spring potential in imaginary-time space (first term in effective
-potential). To sample the canonical ensemble, a Nose-Hoover massive
-chain thermostat is applied :ref:`(Tuckerman) <pimd-Tuckerman>`. With the
-massive chain algorithm, a chain of NH thermostats is coupled to each
-degree of freedom for each quasi-bead. The keyword *temp* sets the
-target temperature for the system and the keyword *nhc* sets the
-number *Nc* of thermostats in each chain. For example, for a
-simulation of N particles with P beads in each ring-polymer, the total
-number of NH thermostats would be 3 x N x P x Nc.
-
-.. note::
-
- This fix implements a complete velocity-verlet integrator
- combined with NH massive chain thermostat, so no other time
- integration fix should be used.
-
-The *method* keyword determines what style of PIMD is performed. A
-value of *pimd* is standard PIMD. A value of *nmpimd* is for
-normal-mode PIMD. A value of *cmd* is for centroid molecular dynamics
-(CMD). The difference between the styles is as follows.
-
-In standard PIMD, the value used for a bead's fictitious mass is
-arbitrary. A common choice is to use Mi = m/P, which results in the
-mass of the entire ring-polymer being equal to the real quantum
-particle. But it can be difficult to efficiently integrate the
-equations of motion for the stiff harmonic interactions in the ring
-polymers.
-
-A useful way to resolve this issue is to integrate the equations of
-motion in a normal mode representation, using Normal Mode
-Path-Integral Molecular Dynamics (NMPIMD) :ref:`(Cao1) <Cao1>`. In NMPIMD,
-the NH chains are attached to each normal mode of the ring-polymer and
-the fictitious mass of each mode is chosen as Mk = the eigenvalue of
-the Kth normal mode for k > 0. The k = 0 mode, referred to as the
-zero-frequency mode or centroid, corresponds to overall translation of
-the ring-polymer and is assigned the mass of the real particle.
-
-Motion of the centroid can be effectively uncoupled from the other
-normal modes by scaling the fictitious masses to achieve a partial
-adiabatic separation. This is called a Centroid Molecular Dynamics
-(CMD) approximation :ref:`(Cao2) <Cao2>`. The time-evolution (and resulting
-dynamics) of the quantum particles can be used to obtain centroid time
-correlation functions, which can be further used to obtain the true
-quantum correlation function for the original system. The CMD method
-also uses normal modes to evolve the system, except only the k > 0
-modes are thermostatted, not the centroid degrees of freedom.
-
-The keyword *fmass* sets a further scaling factor for the fictitious
-masses of beads, which can be used for the Partial Adiabatic CMD
-:ref:`(Hone) <Hone>`, or to be set as P, which results in the fictitious
-masses to be equal to the real particle masses.
-
-The keyword *sp* is a scaling factor on Planck's constant, which can
-be useful for debugging or other purposes. The default value of 1.0
-is appropriate for most situations.
-
-The PIMD algorithm in LAMMPS is implemented as a hyper-parallel scheme
-as described in :ref:`(Calhoun) <Calhoun>`. In LAMMPS this is done by using
-:ref:`multi-replica feature <howto_5>` in LAMMPS, where
-each quasi-particle system is stored and simulated on a separate
-partition of processors. The following diagram illustrates this
-approach. The original system with 2 ring polymers is shown in red.
-Since each ring has 4 quasi-beads (imaginary time slices), there are 4
-replicas of the system, each running on one of the 4 partitions of
-processors. Each replica (shown in green) owns one quasi-bead in each
-ring.
-
-.. image:: JPG/pimd.jpg
- :align: center
-
-To run a PIMD simulation with M quasi-beads in each ring polymer using
-N MPI tasks for each partition's domain-decomposition, you would use P
-= MxN processors (cores) and run the simulation as follows:
-
-.. parsed-literal::
-
- mpirun -np P lmp_mpi -partition MxN -in script
-
-Note that in the LAMMPS input script for a multi-partition simulation,
-it is often very useful to define a :doc:`uloop-style variable <variable>` such as
-
-.. parsed-literal::
-
- variable ibead uloop M pad
-
-where M is the number of quasi-beads (partitions) used in the
-calculation. The uloop variable can then be used to manage I/O
-related tasks for each of the partitions, e.g.
-
-.. parsed-literal::
-
- dump dcd all dcd 10 system_${ibead}.dcd
- restart 1000 system_${ibead}.restart1 system_${ibead}.restart2
- read_restart system_${ibead}.restart2
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-A PIMD simulation can be initialized with a single data file read via
-the :doc:`read_data <read_data>` command. However, this means all
-quasi-beads in a ring polymer will have identical positions and
-velocities, resulting in identical trajectories for all quasi-beads.
-To avoid this, users can simply initialize velocities with different
-random number seeds assigned to each partition, as defined by the
-uloop variable, e.g.
-
-.. parsed-literal::
-
- velocity all create 300.0 1234${ibead} rot yes dist gaussian
-
-Default
-"""""""
-
-The keyword defaults are method = pimd, fmass = 1.0, sp = 1.0, temp = 300.0,
-and nhc = 2.
-
-
-----------
-
-
-.. _Feynman:
-
-
-
-**(Feynman)** R. Feynman and A. Hibbs, Chapter 7, Quantum Mechanics and
-Path Integrals, McGraw-Hill, New York (1965).
-
-.. _pimd-Tuckerman:
-
-
-
-**(Tuckerman)** M. Tuckerman and B. Berne, J Chem Phys, 99, 2796 (1993).
-
-.. _Cao1:
-
-
-
-**(Cao1)** J. Cao and B. Berne, J Chem Phys, 99, 2902 (1993).
-
-.. _Cao2:
-
-
-
-**(Cao2)** J. Cao and G. Voth, J Chem Phys, 100, 5093 (1994).
-
-.. _Hone:
-
-
-
-**(Hone)** T. Hone, P. Rossky, G. Voth, J Chem Phys, 124,
-154103 (2006).
-
-.. _Calhoun:
-
-
-
-**(Calhoun)** A. Calhoun, M. Pavese, G. Voth, Chem Phys Letters, 262,
-415 (1996).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_planeforce.txt b/doc/html/_sources/fix_planeforce.txt
deleted file mode 100644
index 71672b51b..000000000
--- a/doc/html/_sources/fix_planeforce.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-.. index:: fix planeforce
-
-fix planeforce command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID planeforce x y z
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* planeforce = style name of this fix command
-* x y z = 3-vector that is normal to the plane
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix hold boundary planeforce 1.0 0.0 0.0
-
-Description
-"""""""""""
-
-Adjust the forces on each atom in the group so that only the
-components of force in the plane specified by the normal vector
-(x,y,z) remain. This is done by subtracting out the component of
-force perpendicular to the plane.
-
-If the initial velocity of the atom is 0.0 (or in the plane), then it
-should continue to move in the plane thereafter.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix lineforce <fix_lineforce>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_poems.txt b/doc/html/_sources/fix_poems.txt
deleted file mode 100644
index dab8dccd6..000000000
--- a/doc/html/_sources/fix_poems.txt
+++ /dev/null
@@ -1,149 +0,0 @@
-fix poems
-=========
-
-Syntax:
-
-.. parsed-literal::
-
- fix ID group-ID poems keyword values
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* poems = style name of this fix command
-* keyword = *group* or *file* or *molecule*
-.. parsed-literal::
-
- *group* values = list of group IDs
- *molecule* values = none
- *file* values = filename
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 3 fluid poems group clump1 clump2 clump3
- fix 3 fluid poems file cluster.list
-
-Description
-"""""""""""
-
-Treats one or more sets of atoms as coupled rigid bodies. This means
-that each timestep the total force and torque on each rigid body is
-computed and the coordinates and velocities of the atoms are updated
-so that the collection of bodies move as a coupled set. This can be
-useful for treating a large biomolecule as a collection of connected,
-coarse-grained particles.
-
-The coupling, associated motion constraints, and time integration is
-performed by the software package `Parallelizable Open source Efficient Multibody Software (POEMS) <poems_>`_ which computes the
-constrained rigid-body motion of articulated (jointed) multibody
-systems :ref:`(Anderson) <Anderson>`. POEMS was written and is distributed
-by Prof Kurt Anderson, his graduate student Rudranarayan Mukherjee,
-and other members of his group at Rensselaer Polytechnic Institute
-(RPI). Rudranarayan developed the LAMMPS/POEMS interface. For
-copyright information on POEMS and other details, please refer to the
-documents in the poems directory distributed with LAMMPS.
-
-.. _poems: http://www.rpi.edu/~anderk5/lab
-
-
-
-This fix updates the positions and velocities of the rigid atoms with
-a constant-energy time integration, so you should not update the same
-atoms via other fixes (e.g. nve, nvt, npt, temp/rescale, langevin).
-
-Each body must have a non-degenerate inertia tensor, which means if
-must contain at least 3 non-collinear atoms. Which atoms are in which
-bodies can be defined via several options.
-
-For option *group*\ , each of the listed groups is treated as a rigid
-body. Note that only atoms that are also in the fix group are
-included in each rigid body.
-
-For option *molecule*\ , each set of atoms in the group with a different
-molecule ID is treated as a rigid body.
-
-For option *file*\ , sets of atoms are read from the specified file and
-each set is treated as a rigid body. Each line of the file specifies
-a rigid body in the following format:
-
-ID type atom1-ID atom2-ID atom3-ID ...
-
-ID as an integer from 1 to M (the number of rigid bodies). Type is
-any integer; it is not used by the fix poems command. The remaining
-arguments are IDs of atoms in the rigid body, each typically from 1 to
-N (the number of atoms in the system). Only atoms that are also in
-the fix group are included in each rigid body. Blank lines and lines
-that begin with '#' are skipped.
-
-A connection between a pair of rigid bodies is inferred if one atom is
-common to both bodies. The POEMS solver treats that atom as a
-spherical joint with 3 degrees of freedom. Currently, a collection of
-bodies can only be connected by joints as a linear chain. The entire
-collection of rigid bodies can represent one or more chains. Other
-connection topologies (tree, ring) are not allowed, but will be added
-later. Note that if no joints exist, it is more efficient to use the
-:doc:`fix rigid <fix_rigid>` command to simulate the system.
-
-When the poems fix is defined, it will print out statistics on the
-total # of clusters, bodies, joints, atoms involved. A cluster in
-this context means a set of rigid bodies connected by joints.
-
-For computational efficiency, you should turn off pairwise and bond
-interactions within each rigid body, as they no longer contribute to
-the motion. The "neigh_modify exclude" and "delete_bonds" commands
-can be used to do this if each rigid body is a group.
-
-For computational efficiency, you should only define one fix poems
-which includes all the desired rigid bodies. LAMMPS will allow
-multiple poems fixes to be defined, but it is more expensive.
-
-The degrees-of-freedom removed by coupled rigid bodies are accounted
-for in temperature and pressure computations. Similarly, the rigid
-body contribution to the pressure virial is also accounted for. The
-latter is only correct if forces within the bodies have been turned
-off, and there is only a single fix poems defined.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the POEMS package. It is only enabled if LAMMPS
-was built with that package, which also requires the POEMS library be
-built and linked with LAMMPS. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix rigid <fix_rigid>`, :doc:`delete_bonds <delete_bonds>`,
-:doc:`neigh_modify <neigh_modify>` exclude
-
-**Default:** none
-
-
-----------
-
-
-.. _Anderson:
-
-
-
-**(Anderson)** Anderson, Mukherjee, Critchley, Ziegler, and Lipton
-"POEMS: Parallelizable Open-source Efficient Multibody Software ",
-Engineering With Computers (2006). (`link to paper <http://dx.doi.org/10.1007/s00366-006-0026-x>`_)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_pour.txt b/doc/html/_sources/fix_pour.txt
deleted file mode 100644
index 8c6851aa9..000000000
--- a/doc/html/_sources/fix_pour.txt
+++ /dev/null
@@ -1,281 +0,0 @@
-.. index:: fix pour
-
-fix pour command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID pour N type seed keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* pour = style name of this fix command
-* N = # of particles to insert
-* type = atom type to assign to inserted particles (offset for molecule insertion)
-* seed = random # seed (positive integer)
-* one or more keyword/value pairs may be appended to args
-* keyword = *region* or *diam* or *vol* or *rate* or *dens* or *vel* or *mol* or *rigid* or *shake* or *ignore*
-.. parsed-literal::
-
- *region* value = region-ID
- region-ID = ID of region to use as insertion volume
- *diam* values = dstyle args
- dstyle = *one* or *range* or *poly*
- *one* args = D
- D = single diameter for inserted particles (distance units)
- *range* args = Dlo Dhi
- Dlo,Dhi = range of diameters for inserted particles (distance units)
- *poly* args = Npoly D1 P1 D2 P2 ...
- Npoly = # of (D,P) pairs
- D1,D2,... = diameter for subset of inserted particles (distance units)
- P1,P2,... = percentage of inserted particles with this diameter (0-1)
- *id* values = idflag
- idflag = *max* or *next* = how to choose IDs for inserted particles and molecules
- *vol* values = fraction Nattempt
- fraction = desired volume fraction for filling insertion volume
- Nattempt = max # of insertion attempts per particle
- *rate* value = V
- V = z velocity (3d) or y velocity (2d) at which
- insertion volume moves (velocity units)
- *dens* values = Rholo Rhohi
- Rholo,Rhohi = range of densities for inserted particles (mass/volume units)
- *vel* values (3d) = vxlo vxhi vylo vyhi vz
- *vel* values (2d) = vxlo vxhi vy
- vxlo,vxhi = range of x velocities for inserted particles (velocity units)
- vylo,vyhi = range of y velocities for inserted particles (velocity units)
- vz = z velocity (3d) assigned to inserted particles (velocity units)
- vy = y velocity (2d) assigned to inserted particles (velocity units)
- *mol* value = template-ID
- template-ID = ID of molecule template specified in a separate :doc:`molecule <molecule>` command
- *molfrac* values = f1 f2 ... fN
- f1 to fN = relative probability of creating each of N molecules in template-ID
- *rigid* value = fix-ID
- fix-ID = ID of :doc:`fix rigid/small <fix_rigid>` command
- *shake* value = fix-ID
- fix-ID = ID of :doc:`fix shake <fix_shake>` command
- *ignore* value = none
- skip any line or triangle particles when detecting possible
- overlaps with inserted particles
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 3 all pour 1000 2 29494 region myblock
- fix 2 all pour 10000 1 19985583 region disk vol 0.33 100 rate 1.0 diam range 0.9 1.1
- fix 2 all pour 10000 1 19985583 region disk diam poly 2 0.7 0.4 1.5 0.6
- fix ins all pour 500 1 4767548 vol 0.8 10 region slab mol object rigid myRigid
-
-Description
-"""""""""""
-
-Insert finite-size particles or molecules into the simulation box
-every few timesteps within a specified region until N particles or
-molecules have been inserted. This is typically used to model the
-pouring of granular particles into a container under the influence of
-gravity. For the remainder of this doc page, a single inserted atom
-or molecule is referred to as a "particle".
-
-If inserted particles are individual atoms, they are assigned the
-specified atom type. If they are molecules, the type of each atom in
-the inserted molecule is specified in the file read by the
-:doc:`molecule <molecule>` command, and those values are added to the
-specified atom type. E.g. if the file specifies atom types 1,2,3, and
-those are the atom types you want for inserted molecules, then specify
-*type* = 0. If you specify *type* = 2, the in the inserted molecule
-will have atom types 3,4,5.
-
-All atoms in the inserted particle are assigned to two groups: the
-default group "all" and the group specified in the fix pour command
-(which can also be "all").
-
-This command must use the *region* keyword to define an insertion
-volume. The specified region must have been previously defined with a
-:doc:`region <region>` command. It must be of type *block* or a z-axis
-*cylinder* and must be defined with side = *in*\ . The cylinder style
-of region can only be used with 3d simulations.
-
-Individual atoms are inserted, unless the *mol* keyword is used. It
-specifies a *template-ID* previously defined using the
-:doc:`molecule <molecule>` command, which reads a file that defines the
-molecule. The coordinates, atom types, center-of-mass, moments of
-inertia, etc, as well as any bond/angle/etc and special neighbor
-information for the molecule can be specified in the molecule file.
-See the :doc:`molecule <molecule>` command for details. The only
-settings required to be in this file are the coordinates and types of
-atoms in the molecule.
-
-If the molecule template contains more than one molecule, the relative
-probability of depositing each molecule can be specified by the
-*molfrac* keyword. N relative probablities, each from 0.0 to 1.0, are
-specified, where N is the number of molecules in the template. Each
-time a molecule is inserted, a random number is used to sample from
-the list of relative probabilities. The N values must sum to 1.0.
-
-If you wish to insert molecules via the *mol* keyword, that will be
-treated as rigid bodies, use the *rigid* keyword, specifying as its
-value the ID of a separate :doc:`fix rigid/small <fix_rigid_small>`
-command which also appears in your input script.
-
-If you wish to insert molecules via the *mol* keyword, that will have
-their bonds or angles constrained via SHAKE, use the *shake* keyword,
-specifying as its value the ID of a separate :doc:`fix shake <fix_shake>` command which also appears in your input script.
-
-Each timestep particles are inserted, they are placed randomly inside
-the insertion volume so as to mimic a stream of poured particles. If
-they are molecules they are also oriented randomly. Each atom in the
-particle is tested for overlaps with existing particles, including
-effects due to periodic boundary conditions if applicable. If an
-overlap is detected, another random insertion attempt is made; see the
-*vol* keyword discussion below. The larger the volume of the
-insertion region, the more particles that can be inserted at any one
-timestep. Particles are inserted again after enough time has elapsed
-that the previously inserted particles fall out of the insertion
-volume under the influence of gravity. Insertions continue every so
-many timesteps until the desired # of particles has been inserted.
-
-.. note::
-
- If you are monitoring the temperature of a system where the
- particle count is changing due to adding particles, you typically
- should use the :doc:`compute_modify dynamic yes <compute_modify>`
- command for the temperature compute you are using.
-
-
-----------
-
-
-All other keywords are optional with defaults as shown below.
-
-The *diam* option is only used when inserting atoms and specifes the
-diameters of inserted particles. There are 3 styles: *one*\ , *range*\ ,
-or *poly*\ . For *one*\ , all particles will have diameter *D*\ . For
-*range*\ , the diameter of each particle will be chosen randomly and
-uniformly between the specified *Dlo* and *Dhi* bounds. For *poly*\ , a
-series of *Npoly* diameters is specified. For each diameter a
-percentage value from 0.0 to 1.0 is also specified. The *Npoly*
-percentages must sum to 1.0. For the example shown above with "diam 2
-0.7 0.4 1.5 0.6", all inserted particles will have a diameter of 0.7
-or 1.5. 40% of the particles will be small; 60% will be large.
-
-Note that for molecule insertion, the diameters of individual atoms in
-the molecule can be specified in the file read by the
-:doc:`molecule <molecule>` command. If not specified, the diameter of
-each atom in the molecule has a default diameter of 1.0.
-
-The *id* option has two settings which are used to determine the atom
-or molecule IDs to assign to inserted particles/molecules. In both
-cases a check is done of the current system to find the maximum
-current atom and molecule ID of any existing particle. Newly inserted
-particles and molecules are assigned IDs that increment those max
-values. For the *max* setting, which is the default, this check is
-done at every insertion step, which allows for particles to leave the
-system, and their IDs to potentially be re-used. For the *next*
-setting this check is done only once when the fix is specified, which
-can be more efficient if you are sure particles will not be added in
-some other way.
-
-The *vol* option specifies what volume fraction of the insertion
-volume will be filled with particles. For particles with a size
-specified by the *diam range* keyword, they are assumed to all be of
-maximum diamter *Dhi* for purposes of computing their contribution to
-the volume fraction.
-
-The higher the volume fraction value, the more particles are inserted
-each timestep. Since inserted particles cannot overlap, the maximum
-volume fraction should be no higher than about 0.6. Each timestep
-particles are inserted, LAMMPS will make up to a total of M tries to
-insert the new particles without overlaps, where M = # of inserted
-particles * Nattempt. If LAMMPS is unsuccessful at completing all
-insertions, it prints a warning.
-
-The *dens* and *vel* options enable inserted particles to have a range
-of densities or xy velocities. The specific values for a particular
-inserted particle will be chosen randomly and uniformly between the
-specified bounds. Internally, the density value for a particle is
-converted to a mass, based on the radius (volume) of the particle.
-The *vz* or *vy* value for option *vel* assigns a z-velocity (3d) or
-y-velocity (2d) to each inserted particle.
-
-The *rate* option moves the insertion volume in the z direction (3d)
-or y direction (2d). This enables pouring particles from a
-successively higher height over time.
-
-The *ignore* option is useful when running a simulation that used line
-segment (2d) or triangle (3d) particles, typically to define
-boundaries for spherical granular particles to interact with. See the
-:doc:`atom_style line or tri <atom_style>` command for details. Lines
-and triangles store their size, and if the size is large it may
-overlap (in a spherical sense) with the insertion region, even if the
-line/triangle is oriented such that there is no actual overlap. This
-can prevent particles from being inserted. The *ignore* keyword
-causes the overlap check to skip any line or triangle particles.
-Obviously you should only use it if there is in fact no overlap of the
-line or triangle particles with the insertion region.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. This means you must be careful when restarting a
-pouring simulation, when the restart file was written in the middle of
-the pouring operation. Specifically, you should use a new fix pour
-command in the input script for the restarted simulation that
-continues the operation. You will need to adjust the arguments of the
-original fix pour command to do this.
-
-Also note that because the state of the random number generator is not
-saved in restart files, you cannot do "exact" restarts with this fix,
-where the simulation continues on the same as if no restart had taken
-place. However, in a statistical sense, a restarted simulation should
-produce the same behavior if you adjust the fix pour parameters
-appropriately.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix. No global or per-atom quantities are stored by this fix for
-access by various :ref:`output commands <howto_15>`. No
-parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the GRANULAR package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-For 3d simulations, a gravity fix in the -z direction must be defined
-for use in conjunction with this fix. For 2d simulations, gravity
-must be defined in the -y direction.
-
-The specified insertion region cannot be a "dynamic" region, as
-defined by the :doc:`region <region>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix deposit <fix_deposit>`, :doc:`fix gravity <fix_gravity>`,
-:doc:`region <region>`
-
-Default
-"""""""
-
-Insertions are performed for individual particles, i.e. no *mol*
-setting is defined. If the *mol* keyword is used, the default for
-*molfrac* is an equal probabilities for all molecules in the template.
-Additional option defaults are diam = one 1.0, dens = 1.0 1.0, vol =
-0.25 50, rate = 0.0, vel = 0.0 0.0 0.0 0.0 0.0 (for 3d), vel = 0.0 0.0 0.0
-(for 2d), and id = max.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_press_berendsen.txt b/doc/html/_sources/fix_press_berendsen.txt
deleted file mode 100644
index 49e321cb1..000000000
--- a/doc/html/_sources/fix_press_berendsen.txt
+++ /dev/null
@@ -1,258 +0,0 @@
-.. index:: fix press/berendsen
-
-fix press/berendsen command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID press/berendsen keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* press/berendsen = style name of this fix command
-.. parsed-literal::
-
- one or more keyword value pairs may be appended
- keyword = *iso* or *aniso* or *x* or *y* or *z* or *couple* or *dilate* or *modulus*
- *iso* or *aniso* values = Pstart Pstop Pdamp
- Pstart,Pstop = scalar external pressure at start/end of run (pressure units)
- Pdamp = pressure damping parameter (time units)
- *x* or *y* or *z* values = Pstart Pstop Pdamp
- Pstart,Pstop = external stress tensor component at start/end of run (pressure units)
- Pdamp = stress damping parameter (time units)
- *couple* = *none* or *xyz* or *xy* or *yz* or *xz*
- *modulus* value = bulk modulus of system (pressure units)
- *dilate* value = *all* or *partial*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all press/berendsen iso 0.0 0.0 1000.0
- fix 2 all press/berendsen aniso 0.0 0.0 1000.0 dilate partial
-
-Description
-"""""""""""
-
-Reset the pressure of the system by using a Berendsen barostat
-:ref:`(Berendsen) <Berendsen>`, which rescales the system volume and
-(optionally) the atoms coordinates within the simulation box every
-timestep.
-
-Regardless of what atoms are in the fix group, a global pressure is
-computed for all atoms. Similarly, when the size of the simulation
-box is changed, all atoms are re-scaled to new positions, unless the
-keyword *dilate* is specified with a value of *partial*\ , in which case
-only the atoms in the fix group are re-scaled. The latter can be
-useful for leaving the coordinates of atoms in a solid substrate
-unchanged and controlling the pressure of a surrounding fluid.
-
-.. note::
-
- Unlike the :doc:`fix npt <fix_nh>` or :doc:`fix nph <fix_nh>`
- commands which perform Nose/Hoover barostatting AND time integration,
- this fix does NOT perform time integration. It only modifies the box
- size and atom coordinates to effect barostatting. Thus you must use a
- separate time integration fix, like :doc:`fix nve <fix_nve>` or :doc:`fix nvt <fix_nh>` to actually update the positions and velocities of
- atoms. This fix can be used in conjunction with thermostatting fixes
- to control the temperature, such as :doc:`fix nvt <fix_nh>` or :doc:`fix langevin <fix_langevin>` or :doc:`fix temp/berendsen <fix_temp_berendsen>`.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting and barostatting.
-
-
-----------
-
-
-The barostat is specified using one or more of the *iso*\ , *aniso*\ ,
-*x*\ , *y*\ , *z*\ , and *couple* keywords. These keywords give you the
-ability to specify the 3 diagonal components of an external stress
-tensor, and to couple various of these components together so that the
-dimensions they represent are varied together during a
-constant-pressure simulation. Unlike the :doc:`fix npt <fix_nh>` and
-:doc:`fix nph <fix_nh>` commands, this fix cannot be used with triclinic
-(non-orthogonal) simulation boxes to control all 6 components of the
-general pressure tensor.
-
-The target pressures for each of the 3 diagonal components of the
-stress tensor can be specified independently via the *x*\ , *y*\ , *z*\ ,
-keywords, which correspond to the 3 simulation box dimensions. For
-each component, the external pressure or tensor component at each
-timestep is a ramped value during the run from *Pstart* to *Pstop*\ .
-If a target pressure is specified for a component, then the
-corresponding box dimension will change during a simulation. For
-example, if the *y* keyword is used, the y-box length will change. A
-box dimension will not change if that component is not specified,
-although you have the option to change that dimension via the :doc:`fix deform <fix_deform>` command.
-
-For all barostat keywords, the *Pdamp* parameter determines the time
-scale on which pressure is relaxed. For example, a value of 10.0
-means to relax the pressure in a timespan of (roughly) 10 time units
-(tau or fmsec or psec - see the :doc:`units <units>` command).
-
-.. note::
-
- A Berendsen barostat will not work well for arbitrary values of
- *Pdamp*\ . If *Pdamp* is too small, the pressure and volume can
- fluctuate wildly; if it is too large, the pressure will take a very
- long time to equilibrate. A good choice for many models is a *Pdamp*
- of around 1000 timesteps. However, note that *Pdamp* is specified in
- time units, and that timesteps are NOT the same as time units for most
- :doc:`units <units>` settings.
-
-.. note::
-
- The relaxation time is actually also a function of the bulk
- modulus of the system (inverse of isothermal compressibility). The
- bulk modulus has units of pressure and is the amount of pressure that
- would need to be applied (isotropically) to reduce the volume of the
- system by a factor of 2 (assuming the bulk modulus was a constant,
- independent of density, which it's not). The bulk modulus can be set
- via the keyword *modulus*\ . The *Pdamp* parameter is effectively
- multiplied by the bulk modulus, so if the pressure is relaxing faster
- than expected or desired, increasing the bulk modulus has the same
- effect as increasing *Pdamp*\ . The converse is also true. LAMMPS does
- not attempt to guess a correct value of the bulk modulus; it just uses
- 10.0 as a default value which gives reasonable relaxation for a
- Lennard-Jones liquid, but will be way off for other materials and way
- too small for solids. Thus you should experiment to find appropriate
- values of *Pdamp* and/or the *modulus* when using this fix.
-
-
-----------
-
-
-The *couple* keyword allows two or three of the diagonal components of
-the pressure tensor to be "coupled" together. The value specified
-with the keyword determines which are coupled. For example, *xz*
-means the *Pxx* and *Pzz* components of the stress tensor are coupled.
-*Xyz* means all 3 diagonal components are coupled. Coupling means two
-things: the instantaneous stress will be computed as an average of the
-corresponding diagonal components, and the coupled box dimensions will
-be changed together in lockstep, meaning coupled dimensions will be
-dilated or contracted by the same percentage every timestep. The
-*Pstart*\ , *Pstop*\ , *Pdamp* parameters for any coupled dimensions must
-be identical. *Couple xyz* can be used for a 2d simulation; the *z*
-dimension is simply ignored.
-
-
-----------
-
-
-The *iso* and *aniso* keywords are simply shortcuts that are
-equivalent to specifying several other keywords together.
-
-The keyword *iso* means couple all 3 diagonal components together when
-pressure is computed (hydrostatic pressure), and dilate/contract the
-dimensions together. Using "iso Pstart Pstop Pdamp" is the same as
-specifying these 4 keywords:
-
-.. parsed-literal::
-
- x Pstart Pstop Pdamp
- y Pstart Pstop Pdamp
- z Pstart Pstop Pdamp
- couple xyz
-
-The keyword *aniso* means *x*\ , *y*\ , and *z* dimensions are controlled
-independently using the *Pxx*\ , *Pyy*\ , and *Pzz* components of the
-stress tensor as the driving forces, and the specified scalar external
-pressure. Using "aniso Pstart Pstop Pdamp" is the same as specifying
-these 4 keywords:
-
-.. parsed-literal::
-
- x Pstart Pstop Pdamp
- y Pstart Pstop Pdamp
- z Pstart Pstop Pdamp
- couple none
-
-
-----------
-
-
-This fix computes a temperature and pressure each timestep. To do
-this, the fix creates its own computes of style "temp" and "pressure",
-as if these commands had been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp
- compute fix-ID_press group-ID pressure fix-ID_temp
-
-See the :doc:`compute temp <compute_temp>` and :doc:`compute pressure <compute_pressure>` commands for details. Note that the
-IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID
-+ underscore + "press", and the group for the new computes is the same
-as the fix group.
-
-Note that these are NOT the computes used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*
-and *thermo_press*\ . This means you can change the attributes of this
-fix's temperature or pressure via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-or pressure during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* or
-*thermo_press* will have no effect on this fix.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *temp* and *press* options are
-supported by this fix. You can use them to assign a
-:doc:`compute <compute>` you have defined to this fix which will be used
-in its temperature and pressure calculations. If you do this, note
-that the kinetic energy derived from the compute temperature should be
-consistent with the virial term computed using all atoms for the
-pressure. LAMMPS will warn you if you choose to compute temperature
-on a subset of atoms.
-
-No global or per-atom quantities are stored by this fix for access by
-various :ref:`output commands <howto_15>`.
-
-This fix can ramp its target pressure over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-Any dimension being adjusted by this fix must be periodic.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nph <fix_nh>`, :doc:`fix npt <fix_nh>`, :doc:`fix temp/berendsen <fix_temp_berendsen>`,
-:doc:`fix_modify <fix_modify>`
-
-Default
-"""""""
-
-The keyword defaults are dilate = all, modulus = 10.0 in units of
-pressure for whatever :doc:`units <units>` are defined.
-
-
-----------
-
-
-.. _Berendsen:
-
-
-
-**(Berendsen)** Berendsen, Postma, van Gunsteren, DiNola, Haak, J Chem
-Phys, 81, 3684 (1984).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_print.txt b/doc/html/_sources/fix_print.txt
deleted file mode 100644
index 01a999d01..000000000
--- a/doc/html/_sources/fix_print.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-.. index:: fix print
-
-fix print command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID print N string keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* print = style name of this fix command
-* N = print every N steps
-* string = text string to print with optional variable names
-* zero or more keyword/value pairs may be appended
-* keyword = *file* or *append* or *screen* or *title*
-.. parsed-literal::
-
- *file* value = filename
- *append* value = filename
- *screen* value = *yes* or *no*
- *title* value = string
- string = text to print as 1st line of output file
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix extra all print 100 "Coords of marker atom = $x $y $z"
- fix extra all print 100 "Coords of marker atom = $x $y $z" file coord.txt
-
-Description
-"""""""""""
-
-Print a text string every N steps during a simulation run. This can
-be used for diagnostic purposes or as a debugging tool to monitor some
-quantity during a run. The text string must be a single argument, so
-it should be enclosed in double quotes if it is more than one word.
-If it contains variables it must be enclosed in double quotes to
-insure they are not evaluated when the input script line is read, but
-will instead be evaluated each time the string is printed.
-
-The specified group-ID is ignored by this fix.
-
-See the :doc:`variable <variable>` command for a description of *equal*
-style variables which are the most useful ones to use with the fix
-print command, since they are evaluated afresh each timestep that the
-fix print line is output. Equal-style variables calculate formulas
-involving mathematical operations, atom properties, group properties,
-thermodynamic properties, global values calculated by a
-:doc:`compute <compute>` or :doc:`fix <fix>`, or references to other
-:doc:`variables <variable>`.
-
-If the *file* or *append* keyword is used, a filename is specified to
-which the output generated by this fix will be written. If *file* is
-used, then the filename is overwritten if it already exists. If
-*append* is used, then the filename is appended to if it already
-exists, or created if it does not exist.
-
-If the *screen* keyword is used, output by this fix to the screen and
-logfile can be turned on or off as desired.
-
-The *title* keyword allow specification of the string that will be
-printed as the first line of the output file, assuming the *file*
-keyword was used. By default, the title line is as follows:
-
-.. parsed-literal::
-
- # Fix print output for fix ID
-
-where ID is replaced with the fix-ID.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`variable <variable>`, :doc:`print <print>`
-
-Default
-"""""""
-
-The option defaults are no file output, screen = yes, and title string
-as described above.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_property_atom.txt b/doc/html/_sources/fix_property_atom.txt
deleted file mode 100644
index 5bed283fc..000000000
--- a/doc/html/_sources/fix_property_atom.txt
+++ /dev/null
@@ -1,303 +0,0 @@
-.. index:: fix property/atom
-
-fix property/atom command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID property/atom vec1 vec2 ... keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* property/atom = style name of this fix command
-* vec1,vec2,... = *mol* or *q* or *rmass* or *i_name* or *d_name*
-.. parsed-literal::
-
- *mol* = molecule IDs
- *q* = charge
- *rmass* = per-atom mass
- *i_name* = new integer vector referenced by name
- *d_name* = new floating-point vector referenced by name
-
-* zero of more keyword/value pairs may be appended
-* keyword = *ghost*
-.. parsed-literal::
-
- *ghost* value = *no* or *yes* for whether ghost atom info in communicated
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all property/atom mol
- fix 1 all property/atom i_myflag1 i_myflag2
- fix 1 all property/atom d_sx d_sy d_sz
-
-Description
-"""""""""""
-
-Create one or more additional per-atom vectors to store information
-about atoms and to use during a simulation. The specified *group-ID*
-is ignored by this fix.
-
-The atom style used for a simulation defines a set of per-atom
-properties, as explained on the :doc:`atom_style <atom_style>` and
-:doc:`read_data <read_data>` doc pages. The latter command allows these
-properties to be defined for each atom in the system when a data file
-is read. This fix will augment the set of properties with new custom
-ones. This can be useful in several scenarios.
-
-If the atom style does not define molecule IDs, per-atom charge,
-or per-atom mass, they can be added using the *mol*\ , *q* or *rmass*
-keywords. This can be useful, e.g, to define "molecules" to use as
-rigid bodies with the :doc:`fix rigid <fix_rigid>` command, or just to
-carry around an extra flag with the atoms (stored as a molecule ID)
-that can be used to group atoms without having to use the group
-command (which is limited to a total of 32 groups including *all*\ ).
-
-Another application would be to use the *rmass* flag in order to have
-per-atom masses instead of per-type masses, for example this can be
-useful to study isotope effects with partial isotope substitution.
-Please :ref:`see below <isotopes>` for an example of simulating a mixture
-of light and heavy water with the TIP4P water potential.
-
-An alternative to using fix *property/atom* in these ways is to
-use an atom style that does define molecule IDs or charge or per-atom
-mass (indirectly via diameter and density) or to use a hybrid atom
-style that combines two or more atom styles
-to provide the union of all atom properties. However, this has two
-practical drawbacks: first, it typically necessitates changing the
-format of the data file, which can be tedious for large systems;
-and second, it may define additional properties that are not needed
-such as bond lists, which has some overhead when there are no bonds.
-
-In the future, we may add additional per-atom properties similar to
-*mol*\ , *q* or *rmass*\ , which "turn-on" specific properties defined
-by some atom styles, so they can be used by atom styles that do not
-define them.
-
-More generally, the *i_name* and *d_name* vectors allow one or more
-new custom per-atom properties to be defined. Each name must be
-unique and can use alphanumeric or underscore characters. These
-vectors can store whatever values you decide are useful in your
-simulation. As explained below there are several ways to initialize
-and access and output these values, both via input script commands and
-in new code that you add to LAMMPS.
-
-This is effectively a simple way to add per-atom properties to a model
-without needing to write code for a new :doc:`atom style <atom_style>`
-that defines the properties. Note however that implementing a new
-atom style allows new atom properties to be more tightly and
-seamlessly integrated with the rest of the code.
-
-The new atom properties encode values that migrate with atoms to new
-processors and are written to restart files. If you want the new
-properties to also be defined for ghost atoms, then use the *ghost*
-keyword with a value of *yes*\ . This will invoke extra communication
-when ghost atoms are created (at every re-neighboring) to insure the
-new properties are also defined for the ghost atoms.
-
-.. note::
-
- If you use this command with the *mol*\ , *q* or *rmass* vectors,
- then you most likely want to set *ghost* yes, since these properties
- are stored with ghost atoms if you use an :doc:`atom_style <atom_style>`
- that defines them, and many LAMMPS operations that use molecule IDs or
- charge, such as neighbor lists and pair styles, will expect ghost
- atoms to have these valuse. LAMMPS will issue a warning it you define
- those vectors but do not set *ghost* yes.
-
-.. note::
-
- The properties for ghost atoms are not updated every timestep,
- but only once every few steps when neighbor lists are re-built. Thus
- the *ghost* keyword is suitable for static properties, like molecule
- IDs, but not for dynamic properties that change every step. For the
- latter, the code you add to LAMMPS to change the properties will also
- need to communicate their new values to/from ghost atoms, an operation
- that can be invoked from within a :doc:`pair style <pair_style>` or
- :doc:`fix <fix>` or :doc:`compute <compute>` that you write.
-
-
-----------
-
-
-This fix is one of a small number that can be defined in an input
-script before the simulation box is created or atoms are defined.
-This is so it can be used with the :doc:`read_data <read_data>` command
-as described below.
-
-Per-atom properties that are defined by the :doc:`atom style <atom_style>` are initialized when atoms are created, e.g. by
-the :doc:`read_data <read_data>` or :doc:`create_atoms <create_atoms>`
-commands. The per-atom properaties defined by this fix are not. So
-you need to initialize them explicitly. This can be done by the
-:doc:`read_data <read_data>` command, using its *fix* keyword and
-passing it the fix-ID of this fix.
-
-Thus these commands:
-
-.. parsed-literal::
-
- fix prop all property/atom mol d_flag
- read_data data.txt fix prop NULL Molecules
-
-would allow a data file to have a section like this:
-
-.. parsed-literal::
-
- Molecules
-
-.. parsed-literal::
-
- 1 4 1.5
- 2 4 3.0
- 3 10 1.0
- 4 10 1.0
- 5 10 1.0
- ...
- N 763 4.5
-
-where N is the number of atoms, and the first field on each line is
-the atom-ID, followed by a molecule-ID and a floating point value that
-will be stored in a new property called "flag". Note that the list of
-per-atom properties can be in any order.
-
-Another way of initializing the new properties is via the
-:doc:`set <set>` command. For example, if you wanted molecules
-defined for every set of 10 atoms, based on their atom-IDs,
-these commands could be used:
-
-.. parsed-literal::
-
- fix prop all property/atom mol
- variable cluster atom ((id-1)/10)+1
- set id * mol v_cluster
-
-The :doc:`atom-style variable <variable>` will create values for atoms
-with IDs 31,32,33,...40 that are 4.0,4.1,4.2,...,4.9. When the
-:doc:`set <set>` commands assigns them to the molecule ID for each atom,
-they will be truncated to an integer value, so atoms 31-40 will all be
-assigned a molecule ID of 4.
-
-Note that :doc:`atomfile-style variables <variable>` can also be used in
-place of atom-style variables, which means in this case that the
-molecule IDs could be read-in from a separate file and assinged by the
-:doc:`set <set>` command. This allows you to initialize new per-atom
-properties in a completely general fashion.
-
-
-----------
-
-
-For new atom properties specified as *i_name* or *d_name*\ , the
-:doc:`compute property/atom <compute_property_atom>` command can access
-their values. This means that the values can be output via the :doc:`dump custom <dump>` command, accessed by fixes like :doc:`fix ave/atom <fix_ave_atom>`, accessed by other computes like :doc:`compute reduce <compute_reduce>`, or used in `atom-style variables <variables>`_.
-
-For example, these commands will output two new properties to a custom
-dump file:
-
-.. parsed-literal::
-
- fix prop all property/atom i_flag1 d_flag2
- compute 1 all property/atom i_flag1 d_flag2
- dump 1 all custom 100 tmp.dump id x y z c_1[1] c_1[2]
-
-
-----------
-
-
-If you wish to add new :doc:`pair styles <pair_style>`,
-:doc:`fixes <fix>`, or :doc:`computes <compute>` that use the per-atom
-properties defined by this fix, see :ref:`Section modify <mod_1>` of the manual which has some details
-on how the properties can be accessed from added classes.
-
-
-----------
-
-
-.. _isotopes:
-
-
-
-Example for using per-atom masses with TIP4P water to study isotope
-effects. When setting up simulations with the :ref:`TIP4P pair styles <howto_8>` for water, you have to provide
-exactly one atom type each to identify the water oxygen and hydrogen
-atoms. Since the atom mass is normally tied to the atom type, this
-makes it impossible to study multiple isotopes in the same simulation.
-With *fix property/atom rmass* however, the per-type masses are
-replaced by per-atom masses. Asumming you have a working input deck
-for regular TIP4P water, where water oxygen is atom type 1 and
-water hydrogen is atom type 2, the following lines of input script
-convert this to using per-atom masses:
-
-.. parsed-literal::
-
- fix Isotopes all property/atom rmass ghost yes
- set type 1 mass 15.9994
- set type 2 mass 1.008
-
-When writing out the system data with the :doc:`write_data <write_data>`
-command, there will be a new section named with the fix-ID
-(i.e. *Isotopes* in this case). Alternatively, you can take an
-existing data file and just add this *Isotopes* section with
-one line per atom containing atom-ID and mass. Either way, the
-extended data file can be read back with:
-
-.. parsed-literal::
-
- fix Isotopes all property/atom rmass ghost yes
- read_data tip4p-isotopes.data fix Isotopes NULL Isotopes
-
-Please note that the first *Isotopes* refers to the fix-ID
-and the second to the name of the section. The following input
-script code will now change the first 100 water molecules in this
-example to heavy water:
-
-.. parsed-literal::
-
- group hwat id 2:300:3
- group hwat id 3:300:3
- set group hwat mass 2.0141018
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the per-atom values it stores to :doc:`binary restart files <restart>`, so that the values can be restored when a
-simulation is restarted. See the :doc:`read_restart <read_restart>`
-command for info on how to re-specify a fix in an input script that
-reads a restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`read_data <read_data>`, :doc:`set <set>`, :doc:`compute property/atom <compute_property_atom>`
-
-Default
-"""""""
-
-The default keyword values are ghost = no.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_qbmsst.txt b/doc/html/_sources/fix_qbmsst.txt
deleted file mode 100644
index 94dfc8373..000000000
--- a/doc/html/_sources/fix_qbmsst.txt
+++ /dev/null
@@ -1,253 +0,0 @@
-.. index:: fix qbmsst
-
-fix qbmsst command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID qbmsst dir shockvel keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* qbmsst = style name of this fix
-* dir = *x* or *y* or *z*
-* shockvel = shock velocity (strictly positive, velocity units)
-* zero or more keyword/value pairs may be appended
-* keyword = *q* or *mu* or *p0* or *v0* or *e0* or *tscale* or *damp* or *seed*\ or *f_max* or *N_f* or *eta* or *beta* or *T_init*
-.. parsed-literal::
-
- *q* value = cell mass-like parameter (mass^2/distance^4 units)
- *mu* value = artificial viscosity (mass/distance/time units)
- *p0* value = initial pressure in the shock equations (pressure units)
- *v0* value = initial simulation cell volume in the shock equations (distance^3 units)
- *e0* value = initial total energy (energy units)
- *tscale* value = reduction in initial temperature (unitless fraction between 0.0 and 1.0)
- *damp* value = damping parameter (time units) inverse of friction <i>&gamma;</i>
- *seed* value = random number seed (positive integer)
- *f_max* value = upper cutoff frequency of the vibration spectrum (1/time units)
- *N_f* value = number of frequency bins (positive integer)
- *eta* value = coupling constant between the shock system and the quantum thermal bath (positive unitless)
- *beta* value = the quantum temperature is updated every beta time steps (positive integer)
- *T_init* value = quantum temperature for the initial state (temperature units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all qbmsst z 0.122 q 25 mu 0.9 tscale 0.01 damp 200 seed 35082 f_max 0.3 N_f 100 eta 1 beta 400 T_init 110 (liquid methane modeled with the REAX force field, real units)
- fix 2 all qbmsst z 72 q 40 tscale 0.05 damp 1 seed 47508 f_max 120.0 N_f 100 eta 1.0 beta 500 T_init 300 (quartz modeled with the BKS force field, metal units)
-
-Two example input scripts are given, including shocked alpha quartz
-and shocked liquid methane. The input script first equilibrate an
-initial state with the quantum thermal bath at the target temperature
-and then apply the qbmsst to simulate shock compression with quantum
-nuclear correction. The following two figures plot related quantities
-for shocked alpha quartz.
-
-.. image:: JPG/qbmsst_init.jpg
- :align: center
-
-Figure 1. Classical temperature <i>T</i><sup>cl</sup> = &sum;
-<i>m<sub>i</sub>v<sub>i</sub><sup>2</sup>/3Nk</i><sub>B</sub> vs. time
-for coupling the alpha quartz initial state with the quantum thermal
-bath at target quantum temperature <i>T</i><sup>qm</sup> = 300 K. The
-NpH ensemble is used for time integration while QTB provides the
-colored random force. <i>T</i><sup>cl</sup> converges at the timescale
-of *damp* which is set to be 1 ps.
-
-.. image:: JPG/qbmsst_shock.jpg
- :align: center
-
-Figure 2. Quantum temperature and pressure vs. time for simulating
-shocked alpha quartz with the QBMSST. The shock propagates along the z
-direction. Restart of the QBMSST command is demonstrated in the
-example input script. Thermodynamic quantities stay continuous before
-and after the restart.
-
-Description
-"""""""""""
-
-This command performs the Quantum-Bath coupled Multi-Scale Shock
-Technique (QBMSST) integration. See :ref:`(Qi) <Qi>` for a detailed
-description of this method. The QBMSST provides description of the
-thermodynamics and kinetics of shock processes while incorporating
-quantum nuclear effects. The *shockvel* setting determines the steady
-shock velocity that will be simulated along direction *dir*\ .
-
-Quantum nuclear effects :doc:`(fix qtb) <fix_qtb>` can be crucial
-especially when the temperature of the initial state is below the
-classical limit or there is a great change in the zero point energies
-between the initial and final states. Theoretical post processing
-quantum corrections of shock compressed water and methane have been
-reported as much as 30% of the temperatures :ref:`(Goldman) <Goldman>`. A
-self-consistent method that couples the shock to a quantum thermal
-bath described by a colored noise Langevin thermostat has been
-developed by Qi et al :ref:`(Qi) <Qi>` and applied to shocked methane. The
-onset of chemistry is reported to be at a pressure on the shock
-Hugoniot that is 40% lower than observed with classical molecular
-dynamics.
-
-It is highly recommended that the system be already in an equilibrium
-state with a quantum thermal bath at temperature of *T_init*\ . The fix
-command :doc:`fix qtb <fix_qtb>` at constant temperature *T_init* could
-be used before applying this command to introduce self-consistent
-quantum nuclear effects into the initial state.
-
-The parameters *q*\ , *mu*\ , *e0*\ , *p0*\ , *v0* and *tscale* are described
-in the command :doc:`fix msst <fix_msst>`. The values of *e0*\ , *p0*\ , or
-*v0* will be calculated on the first step if not specified. The
-parameter of *damp*\ , *f_max*\ , and *N_f* are described in the command
-:doc:`fix qtb <fix_qtb>`.
-
-The fix qbmsst command couples the shock system to a quantum thermal
-bath with a rate that is proportional to the change of the total
-energy of the shock system, <i>etot</i> - <i>etot</i><sub>0</sub>.
-Here <i>etot</i> consists of both the system energy and a thermal
-term, see :ref:`(Qi) <Qi>`, and <i>etot</i><sub>0</sub> = *e0* is the
-initial total energy.
-
-The *eta* (<i>&eta;</i>) parameter is a unitless coupling constant
-between the shock system and the quantum thermal bath. A small *eta*
-value cannot adjust the quantum temperature fast enough during the
-temperature ramping period of shock compression while large *eta*
-leads to big temperature oscillation. A value of *eta* between 0.3 and
-1 is usually appropriate for simulating most systems under shock
-compression. We observe that different values of *eta* lead to almost
-the same final thermodynamic state behind the shock, as expected.
-
-The quantum temperature is updated every *beta* (<i>&beta;</i>) steps
-with an integration time interval *beta* times longer than the
-simulation time step. In that case, <i>etot</i> is taken as its
-average over the past *beta* steps. The temperature of the quantum
-thermal bath <i>T</i><sup>qm</sup> changes dynamically according to
-the following equation where &Delta;<i>t</i> is the MD time step and
-<i>&gamma;</i> is the friction constant which is equal to the inverse
-of the *damp* parameter.
-
-.. raw:: html
-
- <center><font size="4"> <i>dT</i><sup>qm</sup>/<i>dt =
- &gamma;&eta;</i>&sum;<i><sup>&beta;</sup><sub>l =
- 1</sub></i>[<i>etot</i>(<i>t-l</i>&Delta;<i>t</i>)-<i>etot</i><sub>0</sub>]/<i>3&beta;Nk</i><sub>B</sub>
- </font></center>
-
-The parameter *T_init* is the initial temperature of the quantum
-thermal bath and the system before shock loading.
-
-For all pressure styles, the simulation box stays orthorhombic in
-shape. Parrinello-Rahman boundary conditions (tilted box) are
-supported by LAMMPS, but are not implemented for QBMSST.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-Because the state of the random number generator is not written to
-:doc:`binary restart files <restart>`, this fix cannot be restarted
-"exactly" in an uninterrupted fashion. However, in a statistical
-sense, a restarted simulation should produce similar behaviors of the
-system as if it is not interrupted. To achieve such a restart, one
-should write explicitly the same value for *q*\ , *mu*\ , *damp*\ , *f_max*\ ,
-*N_f*\ , *eta*\ , and *beta* and set *tscale* = 0 if the system is
-compressed during the first run.
-
-The progress of the QBMSST can be monitored by printing the global
-scalar and global vector quantities computed by the fix. The global
-vector contains five values in this order:
-
-[\ *dhugoniot*\ , *drayleigh*\ , *lagrangian_speed*\ , *lagrangian_position*\ ,
-*quantum_temperature*\ ]
-
-1. *dhugoniot* is the departure from the Hugoniot (temperature units).
-2. *drayleigh* is the departure from the Rayleigh line (pressure units).
-3. *lagrangian_speed* is the laboratory-frame Lagrangian speed (particle velocity) of the computational cell (velocity units).
-4. *lagrangian_position* is the computational cell position in the reference frame moving at the shock speed. This is the distance of the computational cell behind the shock front.
-5. *quantum_temperature* is the temperature of the quantum thermal bath <i>T</i><sup>qm</sup>.
-
-To print these quantities to the log file with descriptive column
-headers, the following LAMMPS commands are suggested. Here the
-:doc:`fix_modify <fix_modify>` energy command is also enabled to allow
-the thermo keyword *etotal* to print the quantity <i>etot</i>. See
-also the :doc:`thermo_style <thermo_style>` command.
-
-.. parsed-literal::
-
- fix fix_id all msst z
- fix_modify fix_id energy yes
- variable dhug equal f_fix_id[1]
- variable dray equal f_fix_id[2]
- variable lgr_vel equal f_fix_id[3]
- variable lgr_pos equal f_fix_id[4]
- variable T_qm equal f_fix_id[5]
- thermo_style custom step temp ke pe lz pzz etotal v_dhug v_dray v_lgr_vel v_lgr_pos v_T_qm f_fix_id
-
-The global scalar under the entry f_fix_id is the quantity of thermo
-energy as an extra part of <i>etot</i>. This global scalar and the
-vector of 5 quantities can be accessed by various :ref:`output commands <howto_15>`. It is worth noting that the
-temp keyword under the :doc:`thermo_style <thermo_style>` command print
-the instantaneous classical temperature <i>T</i><sup>cl</sup> as
-described in the command :doc:`fix qtb <fix_qtb>`.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This fix style is part of the USER-QTB package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-All cell dimensions must be periodic. This fix can not be used with a
-triclinic cell. The QBMSST fix has been tested only for the group-ID
-all.
-
-
-----------
-
-
-Related commands
-""""""""""""""""
-
-:doc:`fix qtb <fix_qtb>`, :doc:`fix msst <fix_msst>`
-
-
-----------
-
-
-Default
-"""""""
-
-The keyword defaults are q = 10, mu = 0, tscale = 0.01, damp = 1, seed
-= 880302, f_max = 200.0, N_f = 100, eta = 1.0, beta = 100, and
-T_init=300.0. e0, p0, and v0 are calculated on the first step.
-
-
-----------
-
-
-.. _Goldman:
-
-
-
-**(Goldman)** Goldman, Reed and Fried, J. Chem. Phys. 131, 204103 (2009)
-
-.. _Qi:
-
-
-
-**(Qi)** Qi and Reed, J. Phys. Chem. A 116, 10451 (2012).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_qeq.txt b/doc/html/_sources/fix_qeq.txt
deleted file mode 100644
index 6f8950f79..000000000
--- a/doc/html/_sources/fix_qeq.txt
+++ /dev/null
@@ -1,259 +0,0 @@
-.. index:: fix qeq/point
-
-fix qeq/point command
-=====================
-
-fix qeq/shielded command
-========================
-
-fix qeq/slater command
-======================
-
-fix qeq/dynamic command
-=======================
-
-fix qeq/fire command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID style Nevery cutoff tolerance maxiter qfile keyword ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* style = *qeq/point* or *qeq/shielded* or *qeq/slater* or *qeq/dynamic* or *qeq/fire*
-* Nevery = perform charge equilibration every this many steps
-* cutoff = global cutoff for charge-charge interactions (distance unit)
-* tolerance = precision to which charges will be equilibrated
-* maxiter = maximum iterations to perform charge equilibration
-* qfile = a filename with QEq parameters
-* zero or more keyword/value pairs may be appended
-* keyword = *alpha* or *qdamp* or *qstep*
-.. parsed-literal::
-
- *alpha* value = Slater type orbital exponent (qeq/slater only)
- *qdamp* value = damping factor for damped dynamics charge solver (qeq/dynamic and qeq/fire only)
- *qstep* value = time step size for damped dynamics charge solver (qeq/dynamic and qeq/fire only)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all qeq/point 1 10 1.0e-6 200 param.qeq1
- fix 1 qeq qeq/shielded 1 8 1.0e-6 100 param.qeq2
- fix 1 all qeq/slater 5 10 1.0e-6 100 params alpha 0.2
- fix 1 qeq qeq/dynamic 1 12 1.0e-3 100 my_qeq
- fix 1 all qeq/fire 1 10 1.0e-3 100 my_qeq qdamp 0.2 qstep 0.1
-
-Description
-"""""""""""
-
-Perform the charge equilibration (QEq) method as described in :ref:`(Rappe and Goddard) <Rappe>` and formulated in :ref:`(Nakano) <Nakano>` (also known
-as the matrix inversion method) and in :ref:`(Rick and Stuart) <Rick>` (also
-known as the extended Lagrangian method) based on the
-electronegativity equilization principle.
-
-These fixes can be used with any :doc:`pair style <pair_style>` in
-LAMMPS, so long as per-atom charges are defined. The most typical
-use-case is in conjunction with a :doc:`pair style <pair_style>` that
-performs charge equilibration periodically (e.g. every timestep), such
-as the ReaxFF or Streitz-Mintmire potential.
-But these fixes can also be used with
-potentials that normally assume per-atom charges are fixed, e.g. a
-:doc:`Buckingham <pair_buck>` or :doc:`LJ/Coulombic <pair_lj>` potential.
-
-Because the charge equilibration calculation is effectively
-independent of the pair style, these fixes can also be used to perform
-a one-time assignment of charges to atoms. For example, you could
-define the QEq fix, perform a zero-timestep run via the :doc:`run <run>`
-command without any pair style defined which would set per-atom
-charges (based on the current atom configuration), then remove the fix
-via the :doc:`unfix <unfix>` command before performing further dynamics.
-
-.. note::
-
- Computing and using charge values different from published
- values defined for a fixed-charge potential like Buckingham or CHARMM
- or AMBER, can have a strong effect on energies and forces, and
- produces a different model than the published versions.
-
-.. note::
-
- The :doc:`fix qeq/comb <fix_qeq_comb>` command must still be used
- to perform charge equliibration with the :doc:`COMB potential <pair_comb>`. The :doc:`fix qeq/reax <fix_qeq_reax>`
- command can be used to perform charge equilibration with the :doc:`ReaxFF force field <pair_reax_c>`, although fix qeq/shielded yields the
- same results as fix qeq/reax if *Nevery*\ , *cutoff*\ , and *tolerance*
- are the same. Eventually the fix qeq/reax command will be deprecated.
-
-The QEq method minimizes the electrostatic energy of the system (or
-equalizes the derivative of energy with respect to charge of all the
-atoms) by adjusting the partial charge on individual atoms based on
-interactions with their neighbors within *cutoff*\ . It reqires a few
-parameters, in *metal* units, for each atom type which provided in a
-file specified by *qfile*\ . The file has the following format
-
-.. parsed-literal::
-
- 1 chi eta gamma zeta qcore
- 2 chi eta gamma zeta qcore
- ...
- Ntype chi eta gamma zeta qcore
-
-There is one line per atom type with the following parameters.
-Only a subset of the parameters is used by each QEq style as descibed
-below, thus the others can be set to 0.0 if desired.
-
-* *chi* = electronegativity in energy units
-* *eta* = self-Coulomb potential in energy units
-* *gamma* = shielded Coulomb constant defined by :ref:`ReaxFF force field <vanDuin>` in distance units
-* *zeta* = Slater type orbital exponent defined by the :ref:`Streitz-Mintmire <Streitz>` potential in reverse distance units
-* *qcore* = charge of the nucleus defined by the :ref:`Streitz-Mintmire potential <Streitz>` potential in charge units
-
-The *qeq/point* style describes partial charges on atoms as point
-charges. Interaction between a pair of charged particles is 1/r,
-which is the simplest description of the interaction between charges.
-Only the *chi* and *eta* parameters from the *qfile* file are used.
-Note that Coulomb catastrophe can occur if repulsion between the pair
-of charged particles is too weak. This style solves partial charges
-on atoms via the matrix inversion method. A tolerance of 1.0e-6 is
-usually a good number.
-
-The *qeq/shielded* style describes partial charges on atoms also as
-point charges, but uses a shielded Coulomb potential to describe the
-interaction between a pair of charged particles. Interaction through
-the shielded Coulomb is given by equation (13) of the :ref:`ReaxFF force field <vanDuin>` paper. The shielding accounts for charge overlap
-between charged particles at small separation. This style is the same
-as :doc:`fix qeq/reax <fix_qeq_reax>`, and can be used with :doc:`pair_style reax/c <pair_reax_c>`. Only the *chi*\ , *eta*\ , and *gamma*
-parameters from the *qfile* file are used. This style solves partial
-charges on atoms via the matrix inversion method. A tolerance of
-1.0e-6 is usually a good number.
-
-The *qeq/slater* style describes partial charges on atoms as spherical
-charge densities centered around atoms via the Slater 1\ *s* orbital, so
-that the interaction between a pair of charged particles is the
-product of two Slater 1\ *s* orbitals. The expression for the Slater
-1\ *s* orbital is given under equation (6) of the
-:ref:`Streitz-Mintmire <Streitz>` paper. Only the *chi*\ , *eta*\ , *zeta*\ , and
-*qcore* parameters from the *qfile* file are used. This style solves
-partial charges on atoms via the matrix inversion method. A tolerance
-of 1.0e-6 is usually a good number. Keyword *alpha* can be used to
-change the Slater type orbital exponent.
-
-The *qeq/dynamic* style describes partial charges on atoms as point
-charges that interact through 1/r, but the extended Lagrangian method
-is used to solve partial charges on atoms. Only the *chi* and *eta*
-parameters from the *qfile* file are used. Note that Coulomb
-catastrophe can occur if repulsion between the pair of charged
-particles is too weak. A tolerance of 1.0e-3 is usually a good
-number. Keyword *qdamp* can be used to change the damping factor, while
-keyword *qstep* can be used to change the time step size.
-
-The :ref:`\ *qeq/fire*\ <Shan>` style describes the same charge model and charge
-solver as the *qeq/dynamic* style, but employs a FIRE minimization
-algorithm to solve for equilibrium charges.
-Keyword *qdamp* can be used to change the damping factor, while
-keyword *qstep* can be used to change the time step size.
-
-Note that *qeq/point*\ , *qeq/shielded*\ , and *qeq/slater* describe
-different charge models, whereas the matrix inversion method and the
-extended Lagrangian method (\ *qeq/dynamic* and *qeq/fire*\ ) are
-different solvers.
-
-Note that *qeq/point*\ , *qeq/dynamic* and *qeq/fire* styles all describe
-charges as point charges that interact through 1/r relationship, but
-solve partial charges on atoms using different solvers. These three
-styles should yield comparable results if
-the QEq parameters and *Nevery*\ , *cutoff*\ , and *tolerance* are the
-same. Style *qeq/point* is typically faster, *qeq/dynamic* scales
-better on larger sizes, and *qeq/fire* is faster than *qeq/dynamic*\ .
-
-.. note::
-
- To avoid the evaluation of the derivative of charge with respect
- to position, which is typically ill-defined, the system should have a
- zero net charge.
-
-.. note::
-
- Developing QEq parameters (chi, eta, gamma, zeta, and qcore) is
- non-trivial. Charges on atoms are not guaranteed to equilibrate with
- arbitrary choices of these parameters. We do not develop these QEq
- paramters. See the examples/qeq directory for some examples.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about these fixes is written to :doc:`binary restart files <restart>`. No global scalar or vector or per-atom
-quantities are stored by these fixes for access by various :ref:`output commands <howto_15>`. No parameter of these fixes
-can be used with the *start/stop* keywords of the :doc:`run <run>`
-command.
-
-Thexe fixes are invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-These fixes are part of the QEQ package. They are only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix qeq/reax <fix_qeq_reax>`, :doc:`fix qeq/comb <fix_qeq_comb>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Rappe:
-
-
-
-**(Rappe and Goddard)** A. K. Rappe and W. A. Goddard III, J Physical
-Chemistry, 95, 3358-3363 (1991).
-
-.. _Nakano:
-
-
-
-**(Nakano)** A. Nakano, Computer Physics Communications, 104, 59-69 (1997).
-
-.. _Rick:
-
-
-
-**(Rick and Stuart)** S. W. Rick, S. J. Stuart, B. J. Berne, J Chemical Physics
-101, 16141 (1994).
-
-.. _Streitz:
-
-
-
-**(Streitz-Mintmire)** F. H. Streitz, J. W. Mintmire, Physical Review B, 50,
-16, 11996 (1994)
-
-.. _vanDuin:
-
-
-
-**(ReaxFF)** A. C. T. van Duin, S. Dasgupta, F. Lorant, W. A. Goddard III, J
-Physical Chemistry, 105, 9396-9049 (2001)
-
-.. _Shan:
-
-
-
-**(QEq/Fire)** T.-R. Shan, A. P. Thompson, S. J. Plimpton, in preparation
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_qeq_comb.txt b/doc/html/_sources/fix_qeq_comb.txt
deleted file mode 100644
index 1658bdd80..000000000
--- a/doc/html/_sources/fix_qeq_comb.txt
+++ /dev/null
@@ -1,164 +0,0 @@
-.. index:: fix qeq/comb
-
-fix qeq/comb command
-====================
-
-fix qeq/comb/omp command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID qeq/comb Nevery precision keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* qeq/comb = style name of this fix command
-* Nevery = perform charge equilibration every this many steps
-* precision = convergence criterion for charge equilibration
-* zero or more keyword/value pairs may be appended
-* keyword = *file*
-.. parsed-literal::
-
- *file* value = filename
- filename = name of file to write QEQ equilibration info to
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 surface qeq/comb 10 0.0001
-
-Description
-"""""""""""
-
-Perform charge equilibration (QeQ) in conjunction with the COMB
-(Charge-Optimized Many-Body) potential as described in
-:ref:`(COMB_1) <COMB_1>` and :ref:`(COMB_2) <COMB_2>`. It performs the charge
-equilibration portion of the calculation using the so-called QEq
-method, whereby the charge on each atom is adjusted to minimize the
-energy of the system. This fix can only be used with the COMB
-potential; see the :doc:`fix qeq/reax <fix_qeq_reax>` command for a QeQ
-calculation that can be used with any potential.
-
-Only charges on the atoms in the specified group are equilibrated.
-The fix relies on the pair style (COMB in this case) to calculate the
-per-atom electronegativity (effective force on the charges). An
-electronegativity equalization calculation (or QEq) is performed in an
-interative fashion, which in parallel requires communication at each
-iteration for processors to exchange charge information about nearby
-atoms with each other. See :ref:`Rappe_and_Goddard <Rappe_and_Goddard>` and
-:ref:`Rick_and_Stuart <Rick_and_Stuart>` for details.
-
-During a run, charge equilibration is peformed every *Nevery* time
-steps. Charge equilibration is also always enforced on the first step
-of each run. The *precision* argument controls the tolerance for the
-difference in electronegativity for all atoms during charge
-equilibration. *Precision* is a trade-off between the cost of
-performing charge equilibration (more iterations) and accuracy.
-
-If the *file* keyword is used, then information about each
-equilibration calculation is written to the specifed file.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is performing charge equilibration. Default is
-the outermost level.
-
-This fix produces a per-atom vector which can be accessed by various
-:ref:`output commands <howto_15>`. The vector stores the
-gradient of the charge on each atom. The per-atom values be accessed
-on any timestep.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-This fix can be invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix command currently only supports :doc:`pair style *comb*\ <pair_comb>`.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style comb <pair_comb>`
-
-Default
-"""""""
-
-No file output is performed.
-
-
-----------
-
-
-.. _COMB_1:
-
-
-
-**(COMB_1)** J. Yu, S. B. Sinnott, S. R. Phillpot, Phys Rev B, 75, 085311 (2007),
-
-.. _COMB_2:
-
-
-
-**(COMB_2)** T.-R. Shan, B. D. Devine, T. W. Kemper, S. B. Sinnott, S. R.
-Phillpot, Phys Rev B, 81, 125328 (2010).
-
-.. _Rappe_and_Goddard:
-
-
-
-**(Rappe_and_Goddard)** A. K. Rappe, W. A. Goddard, J Phys Chem 95, 3358
-(1991).
-
-.. _Rick_and_Stuart:
-
-
-
-**(Rick_and_Stuart)** S. W. Rick, S. J. Stuart, B. J. Berne, J Chem Phys
-101, 16141 (1994).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_qeq_reax.txt b/doc/html/_sources/fix_qeq_reax.txt
deleted file mode 100644
index afdb10a19..000000000
--- a/doc/html/_sources/fix_qeq_reax.txt
+++ /dev/null
@@ -1,147 +0,0 @@
-.. index:: fix qeq/reax
-
-fix qeq/reax command
-====================
-
-fix qeq/reax/kk command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID qeq/reax Nevery cutlo cuthi tolerance params
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* qeq/reax = style name of this fix command
-* Nevery = perform QEq every this many steps
-* cutlo,cuthi = lo and hi cutoff for Taper radius
-* tolerance = precision to which charges will be equilibrated
-* params = reax/c or a filename
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all qeq/reax 1 0.0 10.0 1.0e-6 reax/c
- fix 1 all qeq/reax 1 0.0 10.0 1.0e-6 param.qeq
-
-Description
-"""""""""""
-
-Perform the charge equilibration (QEq) method as described in :ref:`(Rappe and Goddard) <Rappe>` and formulated in :ref:`(Nakano) <Nakano>`. It is
-typically used in conjunction with the ReaxFF force field model as
-implemented in the :doc:`pair_style reax/c <pair_reax_c>` command, but
-it can be used with any potential in LAMMPS, so long as it defines and
-uses charges on each atom. The :doc:`fix qeq/comb <fix_qeq_comb>`
-command should be used to perform charge equliibration with the :doc:`COMB potential <pair_comb>`. For more technical details about the
-charge equilibration performed by fix qeq/reax, see the
-:ref:`(Aktulga) <Aktulga>` paper.
-
-The QEq method minimizes the electrostatic energy of the system by
-adjusting the partial charge on individual atoms based on interactions
-with their neighbors. It reqires some parameters for each atom type.
-If the *params* setting above is the word "reax/c", then these are
-extracted from the :doc:`pair_style reax/c <pair_reax_c>` command and
-the ReaxFF force field file it reads in. If a file name is specified
-for *params*\ , then the parameters are taken from the specified file
-and the file must contain one line for each atom type. The latter
-form must be used when performing QeQ with a non-ReaxFF potential.
-Each line should be formatted as follows:
-
-.. parsed-literal::
-
- itype chi eta gamma
-
-where *itype* is the atom type from 1 to Ntypes, *chi* denotes the
-electronegativity in eV, *eta* denotes the self-Coulomb
-potential in eV, and *gamma* denotes the valence orbital
-exponent. Note that these 3 quantities are also in the ReaxFF
-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
-of this fix are hard-coded to be A, eV, and electronic charge.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. No global scalar or vector or per-atom
-quantities are stored by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-
-This fix is invoked during :doc:`energy minimization <minimize>`.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-REAXC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix does not correctly handle interactions
-involving multiple periodic images of the same atom. Hence, it should not
-be used for periodic cell dimensions less than 10 angstroms.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style reax/c <pair_reax_c>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Rappe:
-
-
-
-**(Rappe)** Rappe and Goddard III, Journal of Physical Chemistry, 95,
-3358-3363 (1991).
-
-.. _Nakano:
-
-
-
-**(Nakano)** Nakano, Computer Physics Communications, 104, 59-69 (1997).
-
-.. _Aktulga:
-
-
-
-(Aktulga) Aktulga, Fogarty, Pandit, Grama, Parallel Computing, 38,
-245-259 (2012).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_qmmm.txt b/doc/html/_sources/fix_qmmm.txt
deleted file mode 100644
index dbee374df..000000000
--- a/doc/html/_sources/fix_qmmm.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-.. index:: fix qmmm
-
-fix qmmm command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID qmmm
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* qmmm = style name of this fix command
-
-Examples
-""""""""
-
-fix 1 qmol qmmm
-
-Description
-"""""""""""
-
-This fix provides functionality to enable a quantum
-mechanics/molecular mechanice (QM/MM) coupling of LAMMPS to a quantum
-mechanical code. The current implementation only supports an ONIOM
-style mechanical coupling to the `Quantum ESPRESSO <espresso_>`_ plane
-wave DFT package. Electrostatic coupling is in preparation and the
-interface has been written in a manner that coupling to other QM codes
-should be possible without changes to LAMMPS itself.
-
-.. _espresso: http://www.quantum-espresso.org
-
-
-
-The interface code for this is in the lib/qmmm directory of the LAMMPS
-distribution and is being made available at this early stage of
-development in order to encourage contributions for interfaces to
-other QM codes. This will allow the LAMMPS side of the implementation
-to be adapted if necessary before being finalized.
-
-Details about how to use this fix are currently documented in the
-description of the QM/MM interface code itself in lib/qmmm/README.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global scalar or vector or per-atom
-quantities are stored by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-QMMM package. It is only enabled if
-LAMMPS was built with that package. It also requires building a
-library provided with LAMMPS. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The fix is only functional when LAMMPS is built as a library and
-linked with a compatible QM program and a QM/MM frontend into a QM/MM
-executable. See the lib/qmmm/README file for details.
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_qtb.txt b/doc/html/_sources/fix_qtb.txt
deleted file mode 100644
index 6d82cd50f..000000000
--- a/doc/html/_sources/fix_qtb.txt
+++ /dev/null
@@ -1,215 +0,0 @@
-.. index:: fix qtb
-
-fix qtb command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID qtb keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* qtb = style name of this fix
-* zero or more keyword/value pairs may be appended
-* keyword = *temp* or *damp* or *seed* or *f_max* or *N_f*
-.. parsed-literal::
-
- *temp* value = target quantum temperature (temperature units)
- *damp* value = damping parameter (time units) inverse of friction <i>&gamma</i>;
- *seed* value = random number seed (positive integer)
- *f_max* value = upper cutoff frequency of the vibration spectrum (1/time units)
- *N_f* value = number of frequency bins (positive integer)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve
- fix 1 all qtb temp 110 damp 200 seed 35082 f_max 0.3 N_f 100 (liquid methane modeled with the REAX force field, real units)
- fix 2 all nph iso 1.01325 1.01325 1
- fix 2 all qtb temp 300 damp 1 seed 47508 f_max 120.0 N_f 100 (quartz modeled with the BKS force field, metal units)
-
-Description
-"""""""""""
-
-This command performs the quantum thermal bath scheme proposed by
-:ref:`(Dammak) <Dammak>` to include self-consistent quantum nuclear effects,
-when used in conjunction with the :doc:`fix nve <fix_nve>` or :doc:`fix nph <fix_nh>` commands.
-
-Classical molecular dynamics simulation does not include any quantum
-nuclear effect. Quantum treatment of the vibrational modes will
-introduce zero point energy into the system, alter the energy power
-spectrum and bias the heat capacity from the classical limit. Missing
-all the quantum nuclear effects, classical MD cannot model systems at
-temperatures lower than their classical limits. This effect is
-especially important for materials with a large population of hydrogen
-atoms and thus higher classical limits.
-
-The equation of motion implemented by this command follows a Langevin
-form:
-
-.. raw:: html
-
- <center><font size="4"><i> m<sub>i</sub>a<sub>i</sub> = f<sub>i</sub>
- + R<sub>i</sub> -
- m<sub>i</sub>&gamma;v<sub>i</sub>. </i></font></center>
-
-Here <i>m<sub>i</sub></i>, <i>a<sub>i</sub></i>, <i>f<sub>i</sub>
-</i>, <i>R<sub>i</sub></i>, <i>&gamma;</i> and <i>v<sub>i</sub> </i>
-represent mass, acceleration, force exerted by all other atoms, random
-force, frictional coefficient (the inverse of damping parameter damp),
-and velocity. The random force <i>R<sub>i</sub></i> is "colored" so
-that any vibrational mode with frequency <i>&omega;</i> will have a
-temperature-sensitive energy <i>&theta;</i>(<i>&omega;,T</i>) which
-resembles the energy expectation for a quantum harmonic oscillator
-with the same natural frequency:
-
-.. raw:: html
-
- <center><font size="4"> <i>&theta;</i>(<i>&omega;,T</i>) =
- &#8463;&omega;/2 +
- &#8463;&omega;[</i>exp(<i>&#8463;&omega;/k</i><sub>B</sub><i>T</i>)<i>-1</i>]<i><sup>-1</sup></i>
- </font></center>
-
-To efficiently generate the random forces, we employ the method
-of :ref:`(Barrat) <Barrat>`, that circumvents the need to generate all
-random forces for all times before the simulation. The memory
-requirement of this approach is less demanding and independent
-of the simulation duration. Since the total random force <i>R</i><sub>tot</sub>
-does not necessarily vanish for a finite number of atoms,
-<i>R<sub>i</sub></i> is replaced by <i>R<sub>i</sub></i> - <i>R</i><sub>tot</sub>/<i>N</i><sub>tot</sub>
-to avoid collective motion of the system.
-
-The *temp* parameter sets the target quantum temperature. LAMMPS will
-still have an output temperature in its thermo style. That is the
-instantaneous classical temperature <i>T</i><sup>cl</sup> derived from
-the atom velocities at thermal equilibrium. A non-zero
-<i>T</i><sup>cl</sup> will be present even when the quantum
-temperature approaches zero. This is associated with zero-point energy
-at low temperatures.
-
-.. raw:: html
-
- <center><font size="4"> <i>T</i><sup>cl</sup> = &sum;
- <i>m<sub>i</sub>v<sub>i</sub><sup>2</sup>/3Nk</i><sub>B</sub>
- </font></center>
-
-The *damp* parameter is specified in time units, and it equals the
-inverse of the frictional coefficient <i>&gamma;</i>. <i>&gamma;</i>
-should be as small as possible but slightly larger than the timescale
-of anharmonic coupling in the system which is about 10 ps to 100
-ps. When <i>&gamma;</i> is too large, it gives an energy spectrum that
-differs from the desired Bose-Einstein spectrum. When <i>&gamma;</i>
-is too small, the quantum thermal bath coupling to the system will be
-less significant than anharmonic effects, reducing to a classical
-limit. We find that setting <i>&gamma;</i> between 5 THz and 1 THz
-could be appropriate depending on the system.
-
-The random number *seed* is a positive integer used to initiate a
-Marsaglia random number generator. Each processor uses the input seed
-to generate its own unique seed and its own stream of random
-numbers. Thus the dynamics of the system will not be identical on two
-runs on different numbers of processors.
-
-The *f_max* parameter truncate the noise frequency domain so that
-vibrational modes with frequencies higher than *f_max* will not be
-modulated. If we denote &Delta;<i>t</i> as the time interval for the
-MD integration, *f_max* is always reset by the code to make
-<i>&alpha;</i> = (int)(2\ *f_max*\ &Delta;<i>t</i>)<sup><i>-1</i></sup> a
-positive integer and print out relative information. An appropriate
-value for the cutoff frequency *f_max* would be around 2~3
-<i>f</i><sub>D</sub>, where <i>f</i><sub>D</sub> is the Debye
-frequency.
-
-The *N_f* parameter is the frequency grid size, the number of points
-from 0 to *f_max* in the frequency domain that will be
-sampled. <i>3&times;2</i> *N_f* per-atom random numbers are required
-in the random force generation and there could be as many atoms as in
-the whole simulation that can migrate into every individual
-processor. A larger *N_f* provides a more accurate sampling of the
-spectrum while consumes more memory. With fixed *f_max* and
-<i>&gamma;</i>, *N_f* should be big enough to converge the classical
-temperature <i>T</i><sup>cl</sup> as a function of target quantum bath
-temperature. Memory usage per processor could be from 10 to 100
-Mbytes.
-
-.. note::
-
- Unlike the :doc:`fix nvt <fix_nh>` command which performs
- Nose/Hoover thermostatting AND time integration, this fix does NOT
- perform time integration. It only modifies forces to a colored
- thermostat. Thus you must use a separate time integration fix, like
- :doc:`fix nve <fix_nve>` or :doc:`fix nph <fix_nh>` to actually update the
- velocities and positions of atoms (as shown in the
- examples). Likewise, this fix should not normally be used with other
- fixes or commands that also specify system temperatures , e.g. :doc:`fix nvt <fix_nh>` and :doc:`fix temp/rescale <fix_temp_rescale>`.
-
-
-----------
-
-
-**Restart, fix_modify, output, run start/stop, minimizie info:**
-
-No information about this fix is written to :doc:`binary restart files <restart>`. Because the state of the random number generator
-is not saved in restart files, this means you cannot do "exact"
-restarts with this fix. However, in a statistical sense, a restarted
-simulation should produce similar behaviors of the system.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This fix style is part of the USER-QTB package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-
-----------
-
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nph <fix_nh>`, :doc:`fix langevin <fix_langevin>`, :doc:`fix qbmsst <fix_qbmsst>`
-
-
-----------
-
-
-Default
-"""""""
-
-The keyword defaults are temp = 300, damp = 1, seed = 880302,
-f_max=200.0 and N_f = 100.
-
-
-----------
-
-
-.. _Dammak:
-
-
-
-**(Dammak)** Dammak, Chalopin, Laroche, Hayoun, and Greffet, Phys Rev
-Lett, 103, 190601 (2009).
-
-.. _Barrat:
-
-
-
-**(Barrat)** Barrat and Rodney, J. Stat. Phys, 144, 679 (2011).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_reax_bonds.txt b/doc/html/_sources/fix_reax_bonds.txt
deleted file mode 100644
index c10987afc..000000000
--- a/doc/html/_sources/fix_reax_bonds.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-.. index:: fix reax/bonds
-
-fix reax/bonds command
-======================
-
-fix reax/c/bonds command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID reax/bonds Nevery filename
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* reax/bonds = style name of this fix command
-* Nevery = output interval in timesteps
-* filename = name of output file
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all reax/bonds 100 bonds.tatb
- fix 1 all reax/c/bonds 100 bonds.reaxc
-
-Description
-"""""""""""
-
-Write out the bond information computed by the ReaxFF potential
-specified by :doc:`pair_style reax <pair_reax>` or :doc:`pair_style reax/c <pair_reax_c>` in the exact same format as the original
-stand-alone ReaxFF code of Adri van Duin. The bond information is
-written to *filename* on timesteps that are multiples of *Nevery*\ ,
-including timestep 0. For time-averaged chemical species analysis,
-please see the :doc:`fix species <fix_species>` command.
-
-The format of the output file should be self-explantory.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-The fix reax/bonds command requires that the :doc:`pair_style reax <pair_reax>` be invoked. This fix is part of the REAX
-package. It is only enabled if LAMMPS was built with that package,
-which also requires the REAX library be built and linked with LAMMPS.
-The fix reax/c/bonds command requires that the :doc:`pair_style reax/c <pair_reax_c>` be invoked. This fix is part of the
-USER-REAXC package. It is only enabled if LAMMPS was built with that
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style reax <pair_reax>`, :doc:`pair_style reax/c <pair_reax_c>`, :doc:`fix reax/c/species <fix_reaxc_species>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_reaxc_species.txt b/doc/html/_sources/fix_reaxc_species.txt
deleted file mode 100644
index 2c15fa9e0..000000000
--- a/doc/html/_sources/fix_reaxc_species.txt
+++ /dev/null
@@ -1,166 +0,0 @@
-.. index:: fix reax/c/species
-
-fix reax/c/species command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID reax/c/species Nevery Nrepeat Nfreq filename keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* reax/c/species = style name of this command
-* Nevery = sample bond-order every this many timesteps
-* Nrepeat = # of bond-order samples used for calculating averages
-* Nfreq = calculate average bond-order every this many timesteps
-* filename = name of output file
-* zero or more keyword/value pairs may be appended
-* keyword = *cutoff* or *element* or *position*
-.. parsed-literal::
-
- *cutoff* value = I J Cutoff
- I, J = atom types
- Cutoff = Bond-order cutoff value for this pair of atom types
- *element* value = Element1, Element2, ...
- *position* value = posfreq filepos
- posfreq = write position files every this many timestep
- filepos = name of position output file
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all reax/c/species 10 10 100 species.out
- fix 1 all reax/c/species 1 2 20 species.out cutoff 1 1 0.40 cutoff 1 2 0.55
- fix 1 all reax/c/species 1 100 100 species.out element Au O H position 1000 AuOH.pos
-
-Description
-"""""""""""
-
-Write out the chemical species information computed by the ReaxFF
-potential specified by :doc:`pair_style reax/c <pair_reax_c>`.
-Bond-order values (either averaged or instantaneous, depending on
-value of *Nrepeat*\ ) are used to determine chemical bonds. Every
-*Nfreq* timesteps, chemical species information is written to
-*filename* as a two line output. The first line is a header
-containing labels. The second line consists of the following:
-timestep, total number of molecules, total number of distinct species,
-number of molecules of each species. In this context, "species" means
-a unique molecule. The chemical formula of each species is given in
-the first line.
-
-Optional keyword *cutoff* can be assigned to change the minimum
-bond-order values used in identifying chemical bonds between pairs of
-atoms. Bond-order cutoffs should be carefully chosen, as bond-order
-cutoffs that are too small may include too many bonds (which will
-result in an error), while cutoffs that are too large will result in
-fragmented molecules. The default cutoff of 0.3 usually gives good
-results.
-
-The optional keyword *element* can be used to specify the chemical
-symbol printed for each LAMMPS atom type. The number of symbols must
-match the number of LAMMPS atom types and each symbol must consist of
-1 or 2 alphanumeric characters. Normally, these symbols should be
-chosen to match the chemical identity of each LAMMPS atom type, as
-specified using the :doc:`reax/c pair_coeff <pair_reax_c>` command and
-the ReaxFF force field file.
-
-The optional keyword *position* writes center-of-mass positions of
-each identified molecules to file *filepos* every *posfreq* timesteps.
-The first line contains information on timestep, total number of
-molecules, total number of distinct species, and box dimensions. The
-second line is a header containing labels. From the third line
-downward, each molecule writes a line of output containing the
-following information: molecule ID, number of atoms in this molecule,
-chemical formula, total charge, and center-of-mass xyz positions of
-this molecule. The xyz positions are in fractional coordinates
-relative to the box dimensions.
-
-For the keyword *position*\ , the *filepos* is the name of the output
-file. It can contain the wildcard character "*". If the "*"
-character appears in *filepos*\ , then one file per snapshot is written
-at *posfreq* and the "*" character is replaced with the timestep
-value. For example, AuO.pos.* becomes AuO.pos.0, AuO.pos.1000, etc.
-
-
-----------
-
-
-The *Nevery*\ , *Nrepeat*\ , and *Nfreq* arguments specify on what
-timesteps the bond-order values are sampled to get the average bond
-order. The species analysis is performed using the average bond-order
-on timesteps that are a multiple of *Nfreq*\ . The average is over
-*Nrepeat* bond-order samples, computed in the preceding portion of the
-simulation every *Nevery* timesteps. *Nfreq* must be a multiple of
-*Nevery* and *Nevery* must be non-zero even if *Nrepeat* is 1.
-Also, the timesteps
-contributing to the average bond-order cannot overlap,
-i.e. Nrepeat*Nevery can not exceed Nfreq.
-
-For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then bond-order
-values on timesteps 90,92,94,96,98,100 will be used to compute the
-average bond-order for the species analysis output on timestep 100.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes both a global vector of length 2 and a per-atom
-vector, either of which can be accessed by various :ref:`output commands <howto_15>`. The values in the global
-vector are "intensive".
-
-The 2 values in the global vector are as follows:
-
-* 1 = total number of molecules
-* 2 = total number of distinct species
-
-The per-atom vector stores the molecule ID for each atom as identified
-by the fix. If an atom is not in a molecule, its ID will be 0.
-For atoms in the same molecule, the molecule ID for all of them
-will be the same and will be equal to the smallest atom ID of
-any atom in the molecule.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-The fix species currently only works with
-:doc:`pair_style reax/c <pair_reax_c>` and it requires that the :doc:`pair_style reax/c <pair_reax_c>` be invoked. This fix is part of the
-USER-REAXC package. It is only enabled if LAMMPS was built with that
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info.
-
-It should be possible to extend it to other reactive pair_styles (such as
-:doc:`rebo <pair_airebo>`, :doc:`airebo <pair_airebo>`,
-:doc:`comb <pair_comb>`, and :doc:`bop <pair_bop>`), but this has not yet been done.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style reax/c <pair_reax_c>`, :doc:`fix reax/bonds <fix_reax_bonds>`
-
-Default
-"""""""
-
-The default values for bond-order cutoffs are 0.3 for all I-J pairs. The
-default element symbols are C, H, O, N. Position files are not written
-by default.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_recenter.txt b/doc/html/_sources/fix_recenter.txt
deleted file mode 100644
index c9e6bd955..000000000
--- a/doc/html/_sources/fix_recenter.txt
+++ /dev/null
@@ -1,141 +0,0 @@
-.. index:: fix recenter
-
-fix recenter command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID recenter x y z keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* recenter = style name of this fix command
-* x,y,z = constrain center-of-mass to these coords (distance units), any coord can also be NULL or INIT (see below)
-* zero or more keyword/value pairs may be appended
-* keyword = *shift* or *units*
-.. parsed-literal::
-
- *shift* value = group-ID
- group-ID = group of atoms whose coords are shifted
- *units* value = *box* or *lattice* or *fraction*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all recenter 0.0 0.5 0.0
- fix 1 all recenter INIT INIT NULL
- fix 1 all recenter INIT 0.0 0.0 units box
-
-Description
-"""""""""""
-
-Constrain the center-of-mass position of a group of atoms by adjusting
-the coordinates of the atoms every timestep. This is simply a small
-shift that does not alter the dynamics of the system or change the
-relative coordinates of any pair of atoms in the group. This can be
-used to insure the entire collection of atoms (or a portion of them)
-do not drift during the simulation due to random perturbations
-(e.g. :doc:`fix langevin <fix_langevin>` thermostatting).
-
-Distance units for the x,y,z values are determined by the setting of
-the *units* keyword, as discussed below. One or more x,y,z values can
-also be specified as NULL, which means exclude that dimension from
-this operation. Or it can be specified as INIT which means to
-constrain the center-of-mass to its initial value at the beginning of
-the run.
-
-The center-of-mass (COM) is computed for the group specified by the
-fix. If the current COM is different than the specified x,y,z, then a
-group of atoms has their coordinates shifted by the difference. By
-default the shifted group is also the group specified by the fix. A
-different group can be shifted by using the *shift* keyword. For
-example, the COM could be computed on a protein to keep it in the
-center of the simulation box. But the entire system (protein + water)
-could be shifted.
-
-If the *units* keyword is set to *box*\ , then the distance units of
-x,y,z are defined by the :doc:`units <units>` command - e.g. Angstroms
-for *real* units. A *lattice* value means the distance units are in
-lattice spacings. The :doc:`lattice <lattice>` command must have been
-previously used to define the lattice spacing. A *fraction* value
-means a fractional distance between the lo/hi box boundaries, e.g. 0.5
-= middle of the box. The default is to use lattice units.
-
-Note that the :doc:`velocity <velocity>` command can be used to create
-velocities with zero aggregate linear and/or angular momentum.
-
-.. note::
-
- This fix performs its operations at the same point in the
- timestep as other time integration fixes, such as :doc:`fix nve <fix_nve>`, :doc:`fix nvt <fix_nh>`, or :doc:`fix npt <fix_nh>`.
- Thus fix recenter should normally be the last such fix specified in
- the input script, since the adjustments it makes to atom coordinates
- should come after the changes made by time integration. LAMMPS will
- warn you if your fixes are not ordered this way.
-
-.. note::
-
- If you use this fix on a small group of atoms (e.g. a molecule
- in solvent) without using the *shift* keyword to adjust the positions
- of all atoms in the system, then the results can be unpredictable.
- For example, if the molecule is pushed consistently in one direction
- by a flowing solvent, its velocity will increase. But its coordinates
- will be recentered, meaning it is moved back towards the force. Thus
- over time, the velocity and effective temperature of the molecule
- could become very large, though it won't actually be moving due to the
- recentering. If you are thermostatting the entire system, then the
- solvent would be cooled to compensate. A better solution for this
- simulation scenario is to use the :doc:`fix spring <fix_spring>` command
- to tether the molecule in place.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-distance the group is moved by fix recenter.
-
-This fix also computes global 3-vector which can be accessed by
-various :ref:`output commands <howto_15>`. The 3
-quantities in the vector are xyz components of displacement applied to
-the group of atoms by the fix.
-
-The scalar and vector values calculated by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix should not be used with an x,y,z setting that causes a large
-shift in the system on the 1st timestep, due to the requested COM
-being very different from the initial COM. This could cause atoms to
-be lost, especially in parallel. Instead, use the
-:doc:`displace_atoms <displace_atoms>` command, which can be used to
-move atoms a large distance.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix momentum <fix_momentum>`, :doc:`velocity <velocity>`
-
-Default
-"""""""
-
-The option defaults are shift = fix group-ID, and units = lattice.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_restrain.txt b/doc/html/_sources/fix_restrain.txt
deleted file mode 100644
index a7b2aa99a..000000000
--- a/doc/html/_sources/fix_restrain.txt
+++ /dev/null
@@ -1,213 +0,0 @@
-.. index:: fix restrain
-
-fix restrain command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID restrain keyword args ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* restrain = style name of this fix command
-* one or more keyword/arg pairs may be appended
-* keyword = *bond* or *angle* or *dihedral*
-.. parsed-literal::
-
- *bond* args = atom1 atom2 Kstart Kstop r0
- atom1,atom2 = IDs of 2 atoms in bond
- Kstart,Kstop = restraint coefficients at start/end of run (energy units)
- r0 = equilibrium bond distance (distance units)
- *angle* args = atom1 atom2 atom3 Kstart Kstop theta0
- atom1,atom2,atom3 = IDs of 3 atoms in angle, atom2 = middle atom
- Kstart,Kstop = restraint coefficients at start/end of run (energy units)
- theta0 = equilibrium angle theta (degrees)
- *dihedral* args = atom1 atom2 atom3 atom4 Kstart Kstop phi0
- atom1,atom2,atom3,atom4 = IDs of 4 atoms in dihedral in linear order
- Kstart,Kstop = restraint coefficients at start/end of run (energy units)
- phi0 = equilibrium dihedral angle phi (degrees)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix holdem all restrain bond 45 48 2000.0 2000.0 2.75
- fix holdem all restrain dihedral 1 2 3 4 2000.0 2000.0 120.0
- fix holdem all restrain bond 45 48 2000.0 2000.0 2.75 dihedral 1 2 3 4 2000.0 2000.0 120.0
- fix texas_holdem all restrain dihedral 1 2 3 4 0.0 2000.0 120.0 dihedral 1 2 3 5 0.0 2000.0 -120.0 dihedral 1 2 3 6 0.0 2000.0 0.0
-
-Description
-"""""""""""
-
-Restrain the motion of the specified sets of atoms by making them part
-of a bond or angle or dihedral interaction whose strength can vary
-over time during a simulation. This is functionally equivalent to
-creating a bond or angle or dihedral for the same atoms in a data
-file, as specified by the :doc:`read_data <read_data>` command, albeit
-with a time-varying pre-factor coefficient. For the purpose of
-forcefield parameter-fitting or mapping a molecular potential energy
-surface, this fix reduces the hassle and risk associated with
-modifying data files. In other words, use this fix to temporarily
-force a molecule to adopt a particular conformation. To create a
-permanent bond or angle or dihedral, you should modify the data file.
-
-The group-ID specified by this fix is ignored.
-
-The second example above applies a restraint to hold the dihedral
-angle formed by atoms 1, 2, 3, and 4 near 120 degrees using a constant
-restraint coefficient. The fourth example applies similar restraints
-to multiple dihedral angles using a restraint coefficient that
-increases from 0.0 to 2000.0 over the course of the run.
-
-.. note::
-
- Adding a force to atoms implies a change in their potential
- energy as they move due to the applied force field. For dynamics via
- the :doc:`run <run>` command, this energy can be added to the system's
- potential energy for thermodynamic output (see below). For energy
- minimization via the :doc:`minimize <minimize>` command, this energy
- must be added to the system's potential energy to formulate a
- self-consistent minimization problem (see below).
-
-In order for a restraint to be effective, the restraint force must
-typically be significantly larger than the forces associated with
-conventional forcefield terms. If the restraint is applied during a
-dynamics run (as opposed to during an energy minimization), a large
-restraint coefficient can significantly reduce the stable timestep
-size, especially if the atoms are initially far from the preferred
-conformation. You may need to experiment to determine what value of K
-works best for a given application.
-
-For the case of finding a minimum energy structure for a single
-molecule with particular restratins (e.g. for fitting forcefield
-parameters or constructing a potential energy surface), commands such
-as the following may be useful:
-
-.. parsed-literal::
-
- # minimize molecule energy with restraints
- velocity all create 600.0 8675309 mom yes rot yes dist gaussian
- fix NVE all nve
- fix TFIX all langevin 600.0 0.0 100 24601
- fix REST all restrain dihedral 2 1 3 8 0.0 5000.0 ${angle1} dihedral 3 1 2 9 0.0 5000.0 ${angle2}
- fix_modify REST energy yes
- run 10000
- fix TFIX all langevin 0.0 0.0 100 24601
- fix REST all restrain dihedral 2 1 3 8 5000.0 5000.0 ${angle1} dihedral 3 1 2 9 5000.0 5000.0 ${angle2}
- fix_modify REST energy yes
- run 10000
- # sanity check for convergence
- minimize 1e-6 1e-9 1000 100000
- # report unrestrained energies
- unfix REST
- run 0
-
-
-----------
-
-
-The *bond* keyword applies a bond restraint to the specified atoms
-using the same functional form used by the :doc:`bond_style harmonic <bond_harmonic>` command. The potential associated with
-the restraint is
-
-.. image:: Eqs/bond_harmonic.jpg
- :align: center
-
-with the following coefficients:
-
-* K (energy/distance^2)
-* r0 (distance)
-
-K and r0 are specified with the fix. Note that the usual 1/2 factor
-is included in K.
-
-
-----------
-
-
-The *angle* keyword applies an angle restraint to the specified atoms
-using the same functional form used by the :doc:`angle_style harmonic <angle_harmonic>` command. The potential associated with
-the restraint is
-
-.. image:: Eqs/angle_harmonic.jpg
- :align: center
-
-with the following coefficients:
-
-* K (energy/radian^2)
-* theta0 (degrees)
-
-K and theta0 are specified with the fix. Note that the usual 1/2
-factor is included in K.
-
-
-----------
-
-
-The *dihedral* keyword applies a dihedral restraint to the specified
-atoms using a simplified form of the function used by the
-:doc:`dihedral_style charmm <dihedral_charmm>` command. The potential
-associated with the restraint is
-
-.. image:: Eqs/dihedral_charmm.jpg
- :align: center
-
-with the following coefficients:
-
-* K (energy)
-* n = 1
-* d (degrees) = phi0 + 180
-
-K and phi0 are specified with the fix. Note that the value of n is
-hard-wired to 1. Also note that the energy will be a minimum when the
-current dihedral angle phi is equal to phi0.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the potential energy associated with this fix to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-.. note::
-
- If you want the fictitious potential energy associated with the
- added forces to be included in the total potential energy of the
- system (the quantity being minimized), you MUST enable the
- :doc:`fix_modify <fix_modify>` *energy* option for this fix.
-
-This fix computes a global scalar, which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-potential energy for all the restraints as discussed above. The scalar
-value calculated by this fix is "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_rigid.txt b/doc/html/_sources/fix_rigid.txt
deleted file mode 100644
index 5cd39b475..000000000
--- a/doc/html/_sources/fix_rigid.txt
+++ /dev/null
@@ -1,880 +0,0 @@
-.. index:: fix rigid
-
-fix rigid command
-=================
-
-fix rigid/nve command
-=====================
-
-fix rigid/nvt command
-=====================
-
-fix rigid/npt command
-=====================
-
-fix rigid/nph command
-=====================
-
-fix rigid/small command
-=======================
-
-fix rigid/nve/small command
-===========================
-
-fix rigid/nvt/small command
-===========================
-
-fix rigid/npt/small command
-===========================
-
-fix rigid/nph/small command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID style bodystyle args keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* style = *rigid* or *rigid/nve* or *rigid/nvt* or *rigid/npt* or *rigid/nph* or *rigid/small* or *rigid/nve/small* or *rigid/nvt/small* or *rigid/npt/small* or *rigid/nph/small*
-* bodystyle = *single* or *molecule* or *group*
-.. parsed-literal::
-
- *single* args = none
- *molecule* args = none
- *group* args = N groupID1 groupID2 ...
- N = # of groups
- groupID1, groupID2, ... = list of N group IDs
-
-* zero or more keyword/value pairs may be appended
-* 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*
-.. parsed-literal::
-
- *langevin* values = Tstart Tstop Tperiod seed
- Tstart,Tstop = desired temperature at start/stop of run (temperature units)
- Tdamp = temperature damping parameter (time units)
- seed = random number seed to use for white noise (positive integer)
- *temp* values = Tstart Tstop Tdamp
- Tstart,Tstop = desired temperature at start/stop of run (temperature units)
- Tdamp = temperature damping parameter (time units)
- *iso* or *aniso* values = Pstart Pstop Pdamp
- Pstart,Pstop = scalar external pressure at start/end of run (pressure units)
- Pdamp = pressure damping parameter (time units)
- *x* or *y* or *z* values = Pstart Pstop Pdamp
- Pstart,Pstop = external stress tensor component at start/end of run (pressure units)
- Pdamp = stress damping parameter (time units)
- *couple* = *none* or *xyz* or *xy* or *yz* or *xz*
- *tparam* values = Tchain Titer Torder
- Tchain = length of Nose/Hoover thermostat chain
- Titer = number of thermostat iterations performed
- Torder = 3 or 5 = Yoshida-Suzuki integration parameters
- *pchain* values = Pchain
- Pchain = length of the Nose/Hoover thermostat chain coupled with the barostat
- *dilate* value = dilate-group-ID
- dilate-group-ID = only dilate atoms in this group due to barostat volume changes
- *force* values = M xflag yflag zflag
- M = which rigid body from 1-Nbody (see asterisk form below)
- xflag,yflag,zflag = off/on if component of center-of-mass force is active
- *torque* values = M xflag yflag zflag
- M = which rigid body from 1-Nbody (see asterisk form below)
- xflag,yflag,zflag = off/on if component of center-of-mass torque is active
- *infile* filename
- filename = file with per-body values of mass, center-of-mass, moments of inertia
- *mol* value = template-ID
- template-ID = ID of molecule template specified in a separate :doc:`molecule <molecule>` command
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 clump rigid single
- 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 polychains rigid/nvt molecule temp 1.0 1.0 5.0
- 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 2 fluid rigid group 3 clump1 clump2 clump3 torque * off off off
- fix 1 rods rigid/npt molecule temp 300.0 300.0 100.0 iso 0.5 0.5 10.0
- fix 1 particles rigid/npt molecule temp 1.0 1.0 5.0 x 0.5 0.5 1.0 z 0.5 0.5 1.0 couple xz
- fix 1 water rigid/nph molecule iso 0.5 0.5 1.0
- fix 1 particles rigid/npt/small molecule temp 1.0 1.0 1.0 iso 0.5 0.5 1.0
-
-Description
-"""""""""""
-
-Treat one or more sets of atoms as independent rigid bodies. This
-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
-particles. The coordinates, velocities, and orientations of the atoms
-in each body are then updated so that the body moves and rotates as a
-single entity.
-
-Examples of large rigid bodies are a colloidal particle, or portions
-of a biomolecule such as a protein.
-
-Example of small rigid bodies are patchy nanoparticles, such as those
-modeled in :ref:`this paper <Zhang>` by Sharon Glotzer's group, clumps of
-granular particles, lipid molecules consiting of one or more point
-dipoles connected to other spheroids or ellipsoids, irregular
-particles built from line segments (2d) or triangles (3d), and
-coarse-grain models of nano or colloidal particles consisting of a
-small number of constituent particles. Note that the :doc:`fix shake <fix_shake>` command can also be used to rigidify small
-molecules of 2, 3, or 4 atoms, e.g. water molecules. That fix treats
-the constituent atoms as point masses.
-
-These fixes also update the positions and velocities of the atoms in
-each rigid body via time integration, in the NVE, NVT, NPT, or NPH
-ensemble, as described below.
-
-There are two main variants of this fix, fix rigid and fix
-rigid/small. The NVE/NVT/NPT/NHT versions belong to one of the two
-variants, as their style names indicate.
-
-.. note::
-
- Not all of the *bodystyle* options and keyword/value options are
- available for both the *rigid* and *rigid/small* variants. See
- details below.
-
-The *rigid* styles are typically the best choice for a system with a
-small number of large rigid bodies, each of which can extend across
-the domain of many processors. It operates by creating a single
-global list of rigid bodies, which all processors contribute to.
-MPI_Allreduce operations are performed each timestep to sum the
-contributions from each processor to the force and torque on all the
-bodies. This operation will not scale well in parallel if large
-numbers of rigid bodies are simulated.
-
-The *rigid/small* styles are typically best for a system with a large
-number of small rigid bodies. Each body is assigned to the atom
-closest to the geometrical center of the body. The fix operates using
-local lists of rigid bodies owned by each processor and information is
-exchanged and summed via local communication between neighboring
-processors when ghost atom info is accumlated.
-
-.. note::
-
- To use the *rigid/small* styles the ghost atom cutoff must be
- large enough to span the distance between the atom that owns the body
- and every other atom in the body. This distance value is printed out
- when the rigid bodies are defined. If the
- :doc:`pair_style <pair_style>` cutoff plus neighbor skin does not span
- this distance, then you should use the :doc:`comm_modify cutoff <comm_modify>` command with a setting epsilon larger than
- the distance.
-
-Which of the two variants is faster for a particular problem is hard
-to predict. The best way to decide is to perform a short test run.
-Both variants should give identical numerical answers for short runs.
-Long runs should give statistically similar results, but round-off
-differences may accumulate to produce divergent trajectories.
-
-.. note::
-
- You should not update the atoms in rigid bodies via other
- time-integration fixes (e.g. :doc:`fix nve <fix_nve>`, :doc:`fix nvt <fix_nh>`, :doc:`fix npt <fix_nh>`), or you will be integrating
- their motion more than once each timestep. When performing a hybrid
- simulation with some atoms in rigid bodies, and some not, a separate
- time integration fix like :doc:`fix nve <fix_nve>` or :doc:`fix nvt <fix_nh>` should be used for the non-rigid particles.
-
-.. note::
-
- These fixes are overkill if you simply want to hold a collection
- of atoms stationary or have them move with a constant velocity. A
- simpler way to hold atoms stationary is to not include those atoms in
- your time integration fix. E.g. use "fix 1 mobile nve" instead of
- "fix 1 all nve", where "mobile" is the group of atoms that you want to
- move. You can move atoms with a constant velocity by assigning them
- an initial velocity (via the :doc:`velocity <velocity>` command),
- setting the force on them to 0.0 (via the :doc:`fix setforce <fix_setforce>` command), and integrating them as usual
- (e.g. via the :doc:`fix nve <fix_nve>` command).
-
-.. note::
-
- The aggregate properties of each rigid body are calculated one
- time at the start of the first simulation run after these fixes are
- specified. The properties include the position and velocity of the
- center-of-mass of the body, its moments of inertia, and its angular
- momentum. This is done using the properties of the constituent atoms
- of the body at that point in time (or see the *infile* keyword
- option). Thereafter, changing properties of individual atoms in the
- body will have no effect on a rigid body's dynamics, unless they
- affect the :doc:`pair_style <pair_style>` interactions that individual
- particles are part of. 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 :doc:`set <set>` or
- :doc:`displace_atoms <displace_atoms>` or :doc:`velocity <velocity>`
- command. But these commands will not affect the internal attributes
- of the body, and the position and velocity of individual atoms in the
- body will be reset when time integration starts.
-
-
-----------
-
-
-Each rigid body must have two or more atoms. An atom can belong to at
-most one rigid body. Which atoms are in which bodies can be defined
-via several options.
-
-.. note::
-
- With the *rigid/small* styles, which require that *bodystyle* be
- specified as *molecule*\ , you can define a system that has no rigid
- bodies initially. This is useful when you are using the *mol* keyword
- in conjunction with another fix that is adding rigid bodies on-the-fly
- as molecules, such as :doc:`fix deposit <fix_deposit>` or :doc:`fix pour <fix_pour>`.
-
-For bodystyle *single* the entire fix group of atoms is treated as one
-rigid body. This option is only allowed for the *rigid* styles.
-
-For bodystyle *molecule*\ , each set of atoms in the fix group with a
-different molecule ID is treated as a rigid body. This option is
-allowed for both the *rigid* and *rigid/small* styles. Note that
-atoms with a molecule ID = 0 will be treated as a single rigid body.
-For a system with atomic solvent (typically this is atoms with
-molecule ID = 0) surrounding rigid bodies, this may not be what you
-want. Thus you should be careful to use a fix group that only
-includes atoms you want to be part of rigid bodies.
-
-For bodystyle *group*\ , each of the listed groups is treated as a
-separate rigid body. Only atoms that are also in the fix group are
-included in each rigid body. This option is only allowed for the
-*rigid* styles.
-
-.. note::
-
- To compute the initial center-of-mass position and other
- properties of each rigid body, the image flags for each atom in the
- body are used to "unwrap" the atom coordinates. Thus you must insure
- that these image flags are consistent so that the unwrapping creates a
- valid rigid body (one where the atoms are close together),
- particularly if the atoms in a single rigid body straddle a periodic
- boundary. This means the input data file or restart file must define
- the image flags for each atom consistently or that you have used the
- :doc:`set <set>` command to specify them correctly. If a dimension is
- non-periodic then the image flag of each atom must be 0 in that
- dimension, else an error is generated.
-
-The *force* and *torque* keywords discussed next are only allowed for
-the *rigid* styles.
-
-By default, each rigid body is acted on by other atoms which induce an
-external force and torque on its center of mass, causing it to
-translate and rotate. Components of the external center-of-mass force
-and torque can be turned off by the *force* and *torque* keywords.
-This may be useful if you wish a body to rotate but not translate, or
-vice versa, or if you wish it to rotate or translate continuously
-unaffected by interactions with other particles. Note that if you
-expect a rigid body not to move or rotate by using these keywords, you
-must insure its initial center-of-mass translational or angular
-velocity is 0.0. Otherwise the initial translational or angular
-momentum the body has will persist.
-
-An xflag, yflag, or zflag set to *off* means turn off the component of
-force of torque in that dimension. A setting of *on* means turn on
-the component, which is the default. Which rigid body(s) the settings
-apply to is determined by the first argument of the *force* and
-*torque* keywords. It can be an integer M from 1 to Nbody, where
-Nbody is the number of rigid bodies defined. A wild-card asterisk can
-be used in place of, or in conjunction with, the M argument to set the
-flags for multiple rigid bodies. This takes the form "*" or "*n" or
-"n*" or "m*n". If N = the number of rigid bodies, then an asterisk
-with no numeric values means all bodies from 1 to N. A leading
-asterisk means all bodies from 1 to n (inclusive). A trailing
-asterisk means all bodies from n to N (inclusive). A middle asterisk
-means all types from m to n (inclusive). Note that you can use the
-*force* or *torque* keywords as many times as you like. If a
-particular rigid body has its component flags set multiple times, the
-settings from the final keyword are used.
-
-.. note::
-
- For computational efficiency, you may wish to turn off pairwise
- and bond interactions within each rigid body, as they no longer
- contribute to the motion. The :doc:`neigh_modify exclude <neigh_modify>` and :doc:`delete_bonds <delete_bonds>`
- commands are used to do this. If the rigid bodies have strongly
- overalapping atoms, you may need to turn off these interactions to
- avoid numerical problems due to large equal/opposite intra-body forces
- swamping the contribution of small inter-body forces.
-
-For computational efficiency, you should typically define one fix
-rigid or fix rigid/small command which includes all the desired rigid
-bodies. LAMMPS will allow multiple rigid fixes to be defined, but it
-is more expensive.
-
-
-----------
-
-
-The constituent particles within a rigid body can be point particles
-(the default in LAMMPS) or finite-size particles, such as spheres or
-ellipsoids or line segments or triangles. See the :doc:`atom_style sphere and ellipsoid and line and tri <atom_style>` commands for more
-details on these kinds of particles. Finite-size particles contribute
-differently to the moment of inertia of a rigid body than do point
-particles. Finite-size particles can also experience torque (e.g. due
-to :doc:`frictional granular interactions <pair_gran>`) and have an
-orientation. These contributions are accounted for by these fixes.
-
-Forces between particles within a body do not contribute to the
-external force or torque on the body. Thus for computational
-efficiency, you may wish to turn off pairwise and bond interactions
-between particles within each rigid body. The :doc:`neigh_modify exclude <neigh_modify>` and :doc:`delete_bonds <delete_bonds>`
-commands are used to do this. For finite-size particles this also
-means the particles can be highly overlapped when creating the rigid
-body.
-
-
-----------
-
-
-The *rigid*\ , *rigid/nve*\ , *rigid/small*\ , and *rigid/small/nve* styles
-perform constant NVE time integration. They are referred to below as
-the 4 NVE rigid styles. The only difference is that the *rigid* and
-*rigid/small* styles use an integration technique based on Richardson
-iterations. The *rigid/nve* and *rigid/small/nve* styles uses the
-methods described in the paper by :ref:`Miller <Miller>`, which are thought
-to provide better energy conservation than an iterative approach.
-
-The *rigid/nvt* and *rigid/nvt/small* styles performs constant NVT
-integration using a Nose/Hoover thermostat with chains as described
-originally in :ref:`(Hoover) <Hoover>` and :ref:`(Martyna) <Martyna>`, which
-thermostats both the translational and rotational degrees of freedom
-of the rigid bodies. They are referred to below as the 2 NVT rigid
-styles. The rigid-body algorithm used by *rigid/nvt* is described in
-the paper by :ref:`Kamberaj <Kamberaj>`.
-
-The *rigid/npt*\ , *rigid/nph*\ , *rigid/npt/small*\ , and *rigid/nph/small*
-styles perform constant NPT or NPH integration using a Nose/Hoover
-barostat with chains. They are referred to below as the 4 NPT and NPH
-rigid styles. For the NPT case, the same Nose/Hoover thermostat is
-also used as with *rigid/nvt* and *rigid/nvt/small*\ .
-
-The barostat parameters are specified using one or more of the *iso*\ ,
-*aniso*\ , *x*\ , *y*\ , *z* and *couple* keywords. These keywords give you
-the ability to specify 3 diagonal components of the external stress
-tensor, and to couple these components together so that the dimensions
-they represent are varied together during a constant-pressure
-simulation. The effects of these keywords are similar to those
-defined in :doc:`fix npt/nph <fix_nh>`
-
-.. note::
-
- Currently the *rigid/npt*\ , *rigid/nph*\ , *rigid/npt/small*\ , and
- *rigid/nph/small* styles do not support triclinic (non-orthongonal)
- boxes.
-
-The target pressures for each of the 6 components of the stress tensor
-can be specified independently via the *x*\ , *y*\ , *z* keywords, which
-correspond to the 3 simulation box dimensions. For each component,
-the external pressure or tensor component at each timestep is a ramped
-value during the run from *Pstart* to *Pstop*\ . If a target pressure is
-specified for a component, then the corresponding box dimension will
-change during a simulation. For example, if the *y* keyword is used,
-the y-box length will change. A box dimension will not change if that
-component is not specified, although you have the option to change
-that dimension via the :doc:`fix deform <fix_deform>` command.
-
-For all barostat keywords, the *Pdamp* parameter operates like the
-*Tdamp* parameter, determining the time scale on which pressure is
-relaxed. For example, a value of 10.0 means to relax the pressure in
-a timespan of (roughly) 10 time units (e.g. tau or fmsec or psec - see
-the :doc:`units <units>` command).
-
-Regardless of what atoms are in the fix group (the only atoms which
-are time integrated), a global pressure or stress tensor is computed
-for all atoms. Similarly, when the size of the simulation box is
-changed, all atoms are re-scaled to new positions, unless the keyword
-*dilate* is specified with a *dilate-group-ID* for a group that
-represents a subset of the atoms. This can be useful, for example, to
-leave the coordinates of atoms in a solid substrate unchanged and
-controlling the pressure of a surrounding fluid. Another example is a
-system consisting of rigid bodies and point particles where the
-barostat is only coupled with the rigid bodies. This option should be
-used with care, since it can be unphysical to dilate some atoms and
-not others, because it can introduce large, instantaneous
-displacements between a pair of atoms (one dilated, one not) that are
-far from the dilation origin.
-
-The *couple* keyword allows two or three of the diagonal components of
-the pressure tensor to be "coupled" together. The value specified
-with the keyword determines which are coupled. For example, *xz*
-means the *Pxx* and *Pzz* components of the stress tensor are coupled.
-*Xyz* means all 3 diagonal components are coupled. Coupling means two
-things: the instantaneous stress will be computed as an average of the
-corresponding diagonal components, and the coupled box dimensions will
-be changed together in lockstep, meaning coupled dimensions will be
-dilated or contracted by the same percentage every timestep. The
-*Pstart*\ , *Pstop*\ , *Pdamp* parameters for any coupled dimensions must
-be identical. *Couple xyz* can be used for a 2d simulation; the *z*
-dimension is simply ignored.
-
-The *iso* and *aniso* keywords are simply shortcuts that are
-equivalent to specifying several other keywords together.
-
-The keyword *iso* means couple all 3 diagonal components together when
-pressure is computed (hydrostatic pressure), and dilate/contract the
-dimensions together. Using "iso Pstart Pstop Pdamp" is the same as
-specifying these 4 keywords:
-
-.. parsed-literal::
-
- x Pstart Pstop Pdamp
- y Pstart Pstop Pdamp
- z Pstart Pstop Pdamp
- couple xyz
-
-The keyword *aniso* means *x*\ , *y*\ , and *z* dimensions are controlled
-independently using the *Pxx*\ , *Pyy*\ , and *Pzz* components of the
-stress tensor as the driving forces, and the specified scalar external
-pressure. Using "aniso Pstart Pstop Pdamp" is the same as specifying
-these 4 keywords:
-
-.. parsed-literal::
-
- x Pstart Pstop Pdamp
- y Pstart Pstop Pdamp
- z Pstart Pstop Pdamp
- couple none
-
-
-----------
-
-
-The keyword/value option pairs are used in the following ways.
-
-The *langevin* and *temp* and *tparam* keywords perform thermostatting
-of the rigid bodies, altering both their translational and rotational
-degrees of freedom. What is meant by "temperature" of a collection of
-rigid bodies and how it can be monitored via the fix output is
-discussed below.
-
-The *langevin* keyword applies a Langevin thermostat to the constant
-NVE time integration performed by any of the 4 NVE rigid styles:
-*rigid*\ , *rigid/nve*\ , *rigid/small*\ , *rigid/small/nve*\ . It cannot be
-used with the 2 NVT rigid styles: *rigid/nvt*\ , *rigid/small/nvt*\ . The
-desired temperature at each timestep is a ramped value during the run
-from *Tstart* to *Tstop*\ . The *Tdamp* parameter is specified in time
-units and determines how rapidly the temperature is relaxed. For
-example, a value of 100.0 means to relax the temperature in a timespan
-of (roughly) 100 time units (tau or fmsec or psec - see the
-:doc:`units <units>` command). The random # *seed* must be a positive
-integer.
-
-The way that Langevin thermostatting operates is explained on the :doc:`fix langevin <fix_langevin>` doc page. If you wish to simply viscously
-damp the rotational motion without thermostatting, you can set
-*Tstart* and *Tstop* to 0.0, which means only the viscous drag term in
-the Langevin thermostat will be applied. See the discussion on the
-:doc:`fix viscous <fix_viscous>` doc page for details.
-
-.. note::
-
- When the *langevin* keyword is used with fix rigid versus fix
- rigid/small, different dynamics will result for parallel runs. This
- is because of the way random numbers are used in the two cases. The
- dynamics for the two cases should be statistically similar, but will
- not be identical, even for a single timestep.
-
-The *temp* and *tparam* keywords apply a Nose/Hoover thermostat to the
-NVT time integration performed by the 2 NVT rigid styles. They cannot
-be used with the 4 NVE rigid styles. The desired temperature at each
-timestep is a ramped value during the run from *Tstart* to *Tstop*\ .
-The *Tdamp* parameter is specified in time units and determines how
-rapidly the temperature is relaxed. For example, a value of 100.0
-means to relax the temperature in a timespan of (roughly) 100 time
-units (tau or fmsec or psec - see the :doc:`units <units>` command).
-
-Nose/Hoover chains are used in conjunction with this thermostat. The
-*tparam* keyword can optionally be used to change the chain settings
-used. *Tchain* is the number of thermostats in the Nose Hoover chain.
-This value, along with *Tdamp* can be varied to dampen undesirable
-oscillations in temperature that can occur in a simulation. As a rule
-of thumb, increasing the chain length should lead to smaller
-oscillations. The keyword *pchain* specifies the number of
-thermostats in the chain thermostatting the barostat degrees of
-freedom.
-
-.. note::
-
- There are alternate ways to thermostat a system of rigid bodies.
- You can use :doc:`fix langevin <fix_langevin>` to treat the individual
- particles in the rigid bodies as effectively immersed in an implicit
- solvent, e.g. a Brownian dynamics model. For hybrid systems with both
- rigid bodies and solvent particles, you can thermostat only the
- solvent particles that surround one or more rigid bodies by
- appropriate choice of groups in the compute and fix commands for
- temperature and thermostatting. The solvent interactions with the
- rigid bodies should then effectively thermostat the rigid body
- temperature as well without use of the Langevin or Nose/Hoover options
- associated with the fix rigid commands.
-
-
-----------
-
-
-The *mol* keyword can only be used with the *rigid/small* styles. It
-must be used when other commands, such as :doc:`fix deposit <fix_deposit>` or :doc:`fix pour <fix_pour>`, add rigid
-bodies on-the-fly during a simulation. You specify a *template-ID*
-previously defined using the :doc:`molecule <molecule>` command, which
-reads a file that defines the molecule. You must use the same
-*template-ID* that the other fix which is adding rigid bodies uses.
-The coordinates, atom types, atom diameters, center-of-mass, and
-moments of inertia can be specified in the molecule file. See the
-:doc:`molecule <molecule>` command for details. The only settings
-required to be in this file are the coordinates and types of atoms in
-the molecule, in which case the molecule command calculates the other
-quantities itself.
-
-Note that these other fixes create new rigid bodies, in addition to
-those defined initially by this fix via the *bodystyle* setting.
-
-Also note that when using the *mol* keyword, extra restart information
-about all rigid bodies is written out whenever a restart file is
-written out. See the NOTE in the next section for details.
-
-
-----------
-
-
-The *infile* keyword allows a file of rigid body attributes to be read
-in from a file, rather then having LAMMPS compute them. There are 5
-such attributes: the total mass of the rigid body, its center-of-mass
-position, its 6 moments of inertia, its center-of-mass velocity, and
-the 3 image flags of the center-of-mass position. For rigid bodies
-consisting of point particles or non-overlapping finite-size
-particles, LAMMPS can compute these values accurately. However, for
-rigid bodies consisting of finite-size particles which overlap each
-other, LAMMPS will ignore the overlaps when computing these 4
-attributes. The amount of error this induces depends on the amount of
-overlap. To avoid this issue, the values can be pre-computed
-(e.g. using Monte Carlo integration).
-
-The format of the file is as follows. Note that the file does not
-have to list attributes for every rigid body integrated by fix rigid.
-Only bodies which the file specifies will have their computed
-attributes overridden. The file can contain initial blank lines or
-comment lines starting with "#" which are ignored. The first
-non-blank, non-comment line should list N = the number of lines to
-follow. The N successive lines contain the following information:
-
-.. parsed-literal::
-
- ID1 masstotal xcm ycm zcm ixx iyy izz ixy ixz iyz vxcm vycm vzcm lx ly lz ixcm iycm izcm
- ID2 masstotal xcm ycm zcm ixx iyy izz ixy ixz iyz vxcm vycm vzcm lx ly lz ixcm iycm izcm
- ...
- IDN masstotal xcm ycm zcm ixx iyy izz ixy ixz iyz vxcm vycm vzcm lx ly lz ixcm iycm izcm
-
-The rigid body IDs are all positive integers. For the *single*
-bodystyle, only an ID of 1 can be used. For the *group* bodystyle,
-IDs from 1 to Ng can be used where Ng is the number of specified
-groups. For the *molecule* bodystyle, use the molecule ID for the
-atoms in a specific rigid body as the rigid body ID.
-
-The masstotal and center-of-mass coordinates (xcm,ycm,zcm) are
-self-explanatory. The center-of-mass should be consistent with what
-is calculated for the position of the rigid body with all its atoms
-unwrapped by their respective image flags. If this produces a
-center-of-mass that is outside the simulation box, LAMMPS wraps it
-back into the box.
-
-The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz) should be the
-values consistent with the current orientation of the rigid body
-around its center of mass. The values are with respect to the
-simulation box XYZ axes, not with respect to the prinicpal axes of the
-rigid body itself. LAMMPS performs the latter calculation internally.
-
-The (vxcm,vycm,vzcm) values are the velocity of the center of mass.
-The (lx,ly,lz) values are the angular momentum of the body. The
-(vxcm,vycm,vzcm) and (lx,ly,lz) values can simply be set to 0 if you
-wish the body to have no initial motion.
-
-The (ixcm,iycm,izcm) values are the image flags of the center of mass
-of the body. For periodic dimensions, they specify which image of the
-simulation box the body is considered to be in. An image of 0 means
-it is inside the box as defined. A value of 2 means add 2 box lengths
-to get the true value. A value of -1 means subtract 1 box length to
-get the true value. LAMMPS updates these flags as the rigid bodies
-cross periodic boundaries during the simulation.
-
-.. note::
-
- If you use the *infile* or *mol* keywords and write restart
- files during a simulation, then each time a restart file is written,
- the fix also write an auxiliary restart file with the name
- rfile.rigid, where "rfile" is the name of the restart file,
- e.g. tmp.restart.10000 and tmp.restart.10000.rigid. This auxiliary
- file is in the same format described above. Thus it can be used in a
- new input script that restarts the run and re-specifies a rigid fix
- using an *infile* keyword and the appropriate filename. Note that the
- auxiliary file will contain one line for every rigid body, even if the
- original file only listed a subset of the rigid bodies.
-
-
-----------
-
-
-If you use a :doc:`temperature compute <compute>` with a group that
-includes particles in rigid bodies, the degrees-of-freedom removed by
-each rigid body are accounted for in the temperature (and pressure)
-computation, but only if the temperature group includes all the
-particles in a particular rigid body.
-
-A 3d rigid body has 6 degrees of freedom (3 translational, 3
-rotational), except for a collection of point particles lying on a
-straight line, which has only 5, e.g a dimer. A 2d rigid body has 3
-degrees of freedom (2 translational, 1 rotational).
-
-.. note::
-
- You may wish to explicitly subtract additional
- degrees-of-freedom if you use the *force* and *torque* keywords to
- eliminate certain motions of one or more rigid bodies. LAMMPS does
- not do this automatically.
-
-The rigid body contribution to the pressure of the system (virial) is
-also accounted for by this fix.
-
-
-----------
-
-
-If your simlulation is a hybrid model with a mixture of rigid bodies
-and non-rigid particles (e.g. solvent) there are several ways these
-rigid fixes can be used in tandem with :doc:`fix nve <fix_nve>`, :doc:`fix nvt <fix_nh>`, :doc:`fix npt <fix_nh>`, and :doc:`fix nph <fix_nh>`.
-
-If you wish to perform NVE dynamics (no thermostatting or
-barostatting), use one of 4 NVE rigid styles to integrate the rigid
-bodies, and :doc:`fix nve <fix_nve>` to integrate the non-rigid
-particles.
-
-If you wish to perform NVT dynamics (thermostatting, but no
-barostatting), you can use one of the 2 NVT rigid styles for the rigid
-bodies, and any thermostatting fix for the non-rigid particles (:doc:`fix nvt <fix_nh>`, :doc:`fix langevin <fix_langevin>`, :doc:`fix temp/berendsen <fix_temp_berendsen>`). You can also use one of the
-4 NVE rigid styles for the rigid bodies and thermostat them using :doc:`fix langevin <fix_langevin>` on the group that contains all the
-particles in the rigid bodies. The net force added by :doc:`fix langevin <fix_langevin>` to each rigid body effectively thermostats
-its translational center-of-mass motion. Not sure how well it does at
-thermostatting its rotational motion.
-
-If you with to perform NPT or NPH dynamics (barostatting), you cannot
-use both :doc:`fix npt <fix_nh>` and the NPT or NPH rigid styles. This
-is because there can only be one fix which monitors the global
-pressure and changes the simulation box dimensions. So you have 3
-choices:
-
-* Use one of the 4 NPT or NPH styles for the rigid bodies. Use the
- *dilate* all option so that it will dilate the positions of the
- non-rigid particles as well. Use :doc:`fix nvt <fix_nh>` (or any other
- thermostat) for the non-rigid particles.
-* Use :doc:`fix npt <fix_nh>` for the group of non-rigid particles. Use
- the *dilate* all option so that it will dilate the center-of-mass
- positions of the rigid bodies as well. Use one of the 4 NVE or 2 NVT
- rigid styles for the rigid bodies.
-* Use :doc:`fix press/berendsen <fix_press_berendsen>` to compute the
- pressure and change the box dimensions. Use one of the 4 NVE or 2 NVT
- rigid styles for the rigid bodies. Use `fix nvt <fix_nh.thml>`_ (or any
- other thermostat) for the non-rigid particles.
-In all case, the rigid bodies and non-rigid particles both contribute
-to the global pressure and the box is scaled the same by any of the
-barostatting fixes.
-
-You could even use the 2nd and 3rd options for a non-hybrid simulation
-consisting of only rigid bodies, assuming you give :doc:`fix npt <fix_nh>` an empty group, though it's an odd thing to do. The
-barostatting fixes (:doc:`fix npt <fix_nh>` and :doc:`fix press/berensen <fix_press_berendsen>`) will monitor the pressure
-and change the box dimensions, but not time integrate any particles.
-The integration of the rigid bodies will be performed by fix
-rigid/nvt.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about the 4 NVE rigid styles is written to :doc:`binary restart files <restart>`. The exception is if the *infile* or
-*mol* keyword is used, in which case an auxiliary file is written out
-with rigid body information each time a restart file is written, as
-explained above for the *infile* keyword. For the 2 NVT rigid styles,
-the state of the Nose/Hoover thermostat is written to :doc:`binary restart files <restart>`. Ditto for the 4 NPT and NPH rigid styles, and
-the state of the Nose/Hoover barostat. See the
-:doc:`read_restart <read_restart>` command for info on how to re-specify
-a fix in an input script that reads a restart file, so that the
-operation of the fix continues in an uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by the 6
-NVT, NPT, NPH rigid styles to add the energy change induced by the
-thermostatting to the system's potential energy as part of
-:doc:`thermodynamic output <thermo_style>`.
-
-The :doc:`fix_modify <fix_modify>` *temp* and *press* options are
-supported by the 4 NPT and NPH rigid styles to change the computes
-used to calculate the instantaneous pressure tensor. Note that the 2
-NVT rigid fixes do not use any external compute to compute
-instantaneous temperature.
-
-The 2 NVE rigid fixes compute a global scalar which can be accessed by
-various :ref:`output commands <howto_15>`. The scalar
-value calculated by these fixes is "intensive". The scalar is the
-current temperature of the collection of rigid bodies. This is
-averaged over all rigid bodies and their translational and rotational
-degrees of freedom. The translational energy of a rigid body is 1/2 m
-v^2, where m = total mass of the body and v = the velocity of its
-center of mass. The rotational energy of a rigid body is 1/2 I w^2,
-where I = the moment of inertia tensor of the body and w = its angular
-velocity. Degrees of freedom constrained by the *force* and *torque*
-keywords are removed from this calculation, but only for the *rigid*
-and *rigid/nve* fixes.
-
-The 6 NVT, NPT, NPH rigid fixes compute a global scalar which can be
-accessed by various :ref:`output commands <howto_15>`.
-The scalar value calculated by these fixes is "extensive". The scalar
-is the cumulative energy change due to the thermostatting and
-barostatting the fix performs.
-
-All of the *rigid* styles (not the *rigid/small* styles) compute a
-global array of values which can be accessed by various :ref:`output commands <howto_15>`. Similar information about the
-bodies defined by the *rigid/small* styles can be accessed via the
-:doc:`compute rigid/local <compute_rigid_local>` command.
-
-The number of rows in the array is equal to the number of rigid
-bodies. The number of columns is 15. Thus for each rigid body, 15
-values are stored: the xyz coords of the center of mass (COM), the xyz
-components of the COM velocity, the xyz components of the force acting
-on the COM, the xyz components of the torque acting on the COM, and
-the xyz image flags of the COM.
-
-The center of mass (COM) for each body is similar to unwrapped
-coordinates written to a dump file. It will always be inside (or
-slightly outside) the simulation box. The image flags have the same
-meaning as image flags for atom positions (see the "dump" command).
-This means you can calculate the unwrapped COM by applying the image
-flags to the COM, the same as when unwrapped coordinates are written
-to a dump file.
-
-The force and torque values in the array are not affected by the
-*force* and *torque* keywords in the fix rigid command; they reflect
-values before any changes are made by those keywords.
-
-The ordering of the rigid bodies (by row in the array) is as follows.
-For the *single* keyword there is just one rigid body. For the
-*molecule* keyword, the bodies are ordered by ascending molecule ID.
-For the *group* keyword, the list of group IDs determines the ordering
-of bodies.
-
-The array values calculated by these fixes are "intensive", meaning
-they are independent of the number of atoms in the simulation.
-
-No parameter of these fixes can be used with the *start/stop* keywords
-of the :doc:`run <run>` command. These fixes are not invoked during
-:doc:`energy minimization <minimize>`.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-These fixes are all part of the RIGID package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Assigning a temperature via the :doc:`velocity create <velocity>`
-command to a system with :doc:`rigid bodies <fix_rigid>` may not have
-the desired outcome for two reasons. First, the velocity command can
-be invoked before the rigid-body fix is invoked or initialized and the
-number of adjusted degrees of freedom (DOFs) is known. Thus it is not
-possible to compute the target temperature correctly. Second, the
-assigned velocities may be partially canceled when constraints are
-first enforced, leading to a different temperature than desired. A
-workaround for this is to perform a :doc:`run 0 <run>` command, which
-insures all DOFs are accounted for properly, and then rescale the
-temperature to the desired value before performing a simulation. For
-example:
-
-.. parsed-literal::
-
- velocity all create 300.0 12345
- run 0 # temperature may not be 300K
- velocity all scale 300.0 # now it should be
-
-Related commands
-""""""""""""""""
-
-:doc:`delete_bonds <delete_bonds>`, :doc:`neigh_modify <neigh_modify>`
-exclude, :doc:`fix shake <fix_shake>`
-
-Default
-"""""""
-
-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
-torque. Also Tchain = Pchain = 10, Titer = 1, Torder = 3.
-
-
-----------
-
-
-.. _Hoover:
-
-
-
-**(Hoover)** Hoover, Phys Rev A, 31, 1695 (1985).
-
-.. _Kamberaj:
-
-
-
-**(Kamberaj)** Kamberaj, Low, Neal, J Chem Phys, 122, 224114 (2005).
-
-.. _Martyna:
-
-
-
-**(Martyna)** Martyna, Klein, Tuckerman, J Chem Phys, 97, 2635 (1992);
-Martyna, Tuckerman, Tobias, Klein, Mol Phys, 87, 1117.
-
-.. _Miller:
-
-
-
-**(Miller)** Miller, Eleftheriou, Pattnaik, Ndirango, and Newns,
-J Chem Phys, 116, 8649 (2002).
-
-.. _Zhang:
-
-
-
-**(Zhang)** Zhang, Glotzer, Nanoletters, 4, 1407-1413 (2004).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_rx.txt b/doc/html/_sources/fix_rx.txt
deleted file mode 100644
index 5b88a6a10..000000000
--- a/doc/html/_sources/fix_rx.txt
+++ /dev/null
@@ -1,227 +0,0 @@
-.. index:: fix rx
-
-fix rx command
-==============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID rx file localTemp matrix solver minSteps ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* rx = style name of this fix command
-* file = filename containing the reaction kinetic equations and Arrhenius parameters
-* localTemp = *none,lucy* = no local temperature averaging or local temperature defined through Lucy weighting function
-* matrix = *sparse, dense* format for the stoichiometric matrix
-* solver = *lammps_rk4,rkf45* = rk4 is an explicit 4th order Runge-Kutta method; rkf45 is an adaptive 4th-order Runge-Kutta-Fehlberg method
-* minSteps = # of steps for rk4 solver or minimum # of steps for rkf45 (rk4 or rkf45)
-* maxSteps = maximum number of steps for the rkf45 solver (rkf45 only)
-* relTol = relative tolerance for the rkf45 solver (rkf45 only)
-* absTol = absolute tolernace for the rkf45 solver (rkf45 only)
-* diag = Diagnostics frequency for the rkf45 solver (optional, rkf45 only)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all rx kinetics.rx none dense lammps_rk4
- fix 1 all rx kinetics.rx none sparse lammps_rk4 1
- fix 1 all rx kinetics.rx lucy sparse lammps_rk4 10
- fix 1 all rx kinetics.rx none dense rkf45 1 100 1e-6 1e-8
- fix 1 all rx kinetics.rx none dense rkf45 1 100 1e-6 1e-8 -1
-
-Description
-"""""""""""
-
-Fix *rx* solves the reaction kinetic ODEs for a given reaction set that is
-defined within the file associated with this command.
-
-For a general reaction such that
-
-.. image:: Eqs/fix_rx_reaction.jpg
- :align: center
-
-the reaction rate equation is defined to be of the form
-
-.. image:: Eqs/fix_rx_reactionRate.jpg
- :align: center
-
-In the current implementation, the exponents are defined to be equal
-to the stoichiometric coefficients. A given reaction set consisting
-of *n* reaction equations will contain a total of *m* species. A set
-of *m* ordinary differential equations (ODEs) that describe the change
-in concentration of a given species as a function of time are then
-constructed based on the *n* reaction rate equations.
-
-The ODE systems are solved over the full DPD timestep *dt* using either a 4th
-order Runge-Kutta *rk4* method with a fixed step-size *h*\ , specified
-by the *lammps_rk4* keyword, or a 4th order Runge-Kutta-Fehlberg (rkf45) method
-with an adaptive step-size for *h*\ . The number of ODE steps per DPD timestep
-for the rk4 method is optionally specified immediately after the rk4
-keyword. The ODE step-size is set as *dt/num_steps*\ . Smaller
-step-sizes tend to yield more accurate results but there is not
-control on the error. For error control, use the rkf45 ODE solver.
-
-The rkf45 method adjusts the step-size so that the local truncation error is held
-within the specified absolute and relative tolerances. The initial step-size *h0*
-can be specified by the user or estimated internally. It is recommeded that the user
-specify *h0* since this will generally reduced the number of ODE integration steps
-required. *h0* is defined as *dt / min_steps* if min_steps >= 1. If min_steps == 0,
-*h0* is estimated such that an explicit Euler method would likely produce
-an acceptable solution. This is generally overly conservative for the 4th-order
-method and users are advised to specify *h0* as some fraction of the DPD timestep.
-For small DPD timesteps, only one step may be necessary depending upon the tolerances.
-Note that more than min_steps ODE steps may be taken depending upon the ODE stiffness
-but no more than max_steps will be taken. If max_steps is reached, an error warning
-is printed and the simulation is stopped.
-
-After each ODE step, the solution error *e* is tested and weighted using the absTol
-and relTol values. The error vector is weighted as *e* / (relTol * |\ *u*\ | + absTol)
-where *u* is the solution vector. If the norm of the error is <= 1, the solution is
-accepted, *h* is increased by a proportional amount, and the next ODE step is begun.
-Otherwise, *h* is shrunk and the ODE step is repeated.
-
-Run-time diagnostics are available for the rkf45 ODE solver. The frequency
-(in time-steps) that diagnostics are reported is controlled by the last (optional)
-12th argument. A negative frequency means that diagnostics are reported once at the
-end of each run. A positive value N means that the diagnostics are reported once
-per N time-steps.
-
-The diagnostics report the average # of integrator steps and RHS function evaluations
-and run-time per ODE as well as the the average/RMS/min/max per process. If the
-reporting frequency is 1, the RMS/min/max per ODE are also reported. The per ODE
-statistics can be used to adjust the tolerance and min/max step parameters. The
-statistics per MPI process can be useful to examine any load imbalance caused by the
-adaptive ODE solver. (Some DPD particles can take longer to solve than others. This
-can lead to an imbalance across the MPI processes.)
-
-
-----------
-
-
-The filename specifies a file that contains the entire set of reaction
-kinetic equations and corresponding Arrhenius parameters. The format of
-this file is described below.
-
-There is no restriction on the total number or reaction equations that
-are specified. The species names are arbitrary string names that are
-associated with the species concentrations. Each species in a given
-reaction must be preceded by it's stoichiometric coefficient. The
-only delimiters that are recognized between the species are either a
-*+* or *=* character. The *=* character corresponds to an
-irreversible reaction. After specifying the reaction, the reaction
-rate constant is determined through the temperature dependent
-Arrhenius equation:
-
-.. image:: Eqs/fix_rx.jpg
- :align: center
-
-where *A* is the Arrhenius factor in time units or concentration/time
-units, *n* is the unitless exponent of the temperature dependence, and
-*E_a* is the activation energy in energy units. The temperature
-dependence can be removed by specifying the exponent as zero.
-
-The internal temperature of the coarse-grained particles can be used
-in constructing the reaction rate constants at every DPD timestep by
-specifying the keyword *none*\ . Alternatively, the keyword *lucy* can
-be specified to compute a local-average particle internal temperature
-for use in the reaction rate constant expressions. The local-average
-particle internal temperature is defined as:
-
-.. image:: Eqs/fix_rx_localTemp.jpg
- :align: center
-
-where the Lucy function is expressed as:
-
-.. image:: Eqs/fix_rx_localTemp2.jpg
- :align: center
-
-The self-particle interaction is included in the above equation.
-
-The stoichiometric coefficients for the reaction mechanism are stored
-in either a sparse or dense matrix format. The dense matrix should only be
-used for small reaction mechanisms. The sparse matrix should be used when there
-are many reactions (e.g., more than 5). This allows the number of reactions and
-species to grow while keeping the computational cost tractable. The matrix
-format can be specified as using either the *sparse* or *dense* keywords.
-If all stoichiometric coefficients for a reaction are small integers (whole
-numbers <= 3), a fast exponential function is used. This can save significant
-computational time so users are encouraged to use integer coefficients
-where possible.
-
-
-----------
-
-
-The format of a tabulated file is as follows (without the
-parenthesized comments):
-
-.. parsed-literal::
-
- # Rxn equations and parameters (one or more comment or blank lines)
-
-.. parsed-literal::
-
- 1.0 hcn + 1.0 no2 = 1.0 no + 0.5 n2 + 0.5 h2 + 1.0 co 2.49E+01 0.0 1.34 (rxn equation, A, n, Ea)
- 1.0 hcn + 1.0 no = 1.0 co + 1.0 n2 + 0.5 h2 2.16E+00 0.0 1.52
- ...
- 1.0 no + 1.0 co = 0.5 n2 + 1.0 co2 1.66E+06 0.0 0.69
-
-A section begins with a non-blank line whose 1st character is not a
-"#"; blank lines or lines starting with "#" can be used as comments
-between sections.
-
-Following a blank line, the next N lines list the N reaction
-equations. Each species within the reaction equation is specified
-through its stoichiometric coefficient and a species tag. Reactant
-species are specified on the left-hand side of the equation and
-product species are specified on the right-hand side of the equation.
-After specifying the reactant and product species, the final three
-arguments of each line represent the Arrhenius parameter *A*\ , the
-temperature exponent *n*\ , and the activation energy *Ea*\ .
-
-Note that the species tags that are defined in the reaction equations
-are used by the :doc:`fix eos/table/rx <fix_eos_table_rx>` command to
-define the thermodynamic properties of each species. Furthermore, the
-number of species molecules (i.e., concentration) can be specified
-either with the :doc:`set <set>` command using the "d_" prefix or by
-reading directly the concentrations from a data file. For the latter
-case, the :doc:`read_data <read_data>` command with the fix keyword
-should be specified, where the fix-ID will be the "fix rx`ID with a <SPECIES">`_ suffix, e.g.
-
-fix foo all rx reaction.file ...
-read_data data.dpd fix foo_SPECIES NULL Species
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-DPD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This command also requires use of the :doc:`atom_style dpd <atom_style>`
-command.
-
-This command can only be used with a constant energy or constant
-enthalpy DPD simulation.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix eos/table/rx <fix_eos_table_rx>`,
-:doc:`fix shardlow <fix_shardlow>`,
-:doc:`pair dpd/fdt/energy <dpd_fdt_energy>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_saed_vtk.txt b/doc/html/_sources/fix_saed_vtk.txt
deleted file mode 100644
index 54b3c34f7..000000000
--- a/doc/html/_sources/fix_saed_vtk.txt
+++ /dev/null
@@ -1,217 +0,0 @@
-.. index:: fix saed/vtk
-
-fix saed/vtk command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID saed/vtk Nevery Nrepeat Nfreak c_ID attribute args ... keyword args ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* saed/vtk = style name of this fix command
-* Nevery = use input values every this many timesteps
-* Nrepeat = # of times to use input values for calculating averages
-* Nfreq = calculate averages every this many timesteps
-* c_ID = saed compute ID
-.. parsed-literal::
-
- keyword = *file* or *ave* or *start* or *file* or *overwrite*\ :l
- *ave* args = *one* or *running* or *window M*
- one = output a new average value every Nfreq steps
- running = output cumulative average of all previous Nfreq steps
- window M = output average of M most recent Nfreq steps
- *start* args = Nstart
- Nstart = start averaging on this timestep
- *file* arg = filename
- filename = name of file to output time averages to
- *overwrite* arg = none = overwrite output file with only latest output
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- compute 1 all saed 0.0251 Al O Kmax 1.70 Zone 0 0 1 dR_Ewald 0.01 c 0.5 0.5 0.5
- compute 2 all saed 0.0251 Ni Kmax 1.70 Zone 0 0 0 c 0.05 0.05 0.05 manual echo
-
-.. parsed-literal::
-
- fix saed/vtk 1 1 1 c_1 file Al2O3_001.saed
- fix saed/vtk 1 1 1 c_2 file Ni_000.saed
-
-Description
-"""""""""""
-
-Time average computed intensities from :doc:`compute saed <compute_saed>` and
-write output to a file in the 3rd generation vtk image data format for
-visualization directly in parallelized visualization software packages
-like ParaView and VisIt. Note that if no time averaging is done, this
-command can be used as a convenient way to simply output diffraction
-intensities at a single snapshot.
-
-To produce output in the image data vtk format ghost data is added
-outside the *Kmax* range assigned in the compute saed. The ghost data is
-assigned a value of -1 and can be removed setting a minimum isovolume
-of 0 within the vizualiziton software. SAED images can be created by
-visualizing a spherical slice of the data that is centered at
-R_Ewald*[h k l]/norm([h k l]), where R_Ewald=1/lambda.
-
-The group specified within this command is ignored. However, note that
-specified values may represent calculations performed by saed computes
-which store their own "group" definitions.
-
-Fix saed/vtk is designed to work only with :doc:`compute saed <compute_saed>`
-values, e.g.
-
-.. parsed-literal::
-
- compute 3 top saed 0.0251 Al O
- fix saed/vtk 1 1 1 c_3 file Al2O3_001.saed
-
-
-----------
-
-
-The *Nevery*\ , *Nrepeat*\ , and *Nfreq* arguments specify on what
-timesteps the input values will be used in order to contribute to the
-average. The final averaged quantities are generated on timesteps
-that are a multiple of *Nfreq*\ . The average is over *Nrepeat*
-quantities, computed in the preceding portion of the simulation every
-*Nevery* timesteps. *Nfreq* must be a multiple of *Nevery* and
-*Nevery* must be non-zero even if *Nrepeat* is 1.
-Also, the timesteps
-contributing to the average value cannot overlap,
-i.e. Nrepeat*Nevery can not exceed Nfreq.
-
-For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then values on
-timesteps 90,92,94,96,98,100 will be used to compute the final average
-on timestep 100. Similarly for timesteps 190,192,194,196,198,200 on
-timestep 200, etc. If Nrepeat=1 and Nfreq = 100, then no time
-averaging is done; values are simply generated on timesteps
-100,200,etc.
-
-
-----------
-
-
-The output for fix ave/time/saed is a file writen with the 3rd generation
-vtk image data formatting. The filename assigned by the *file* keyword is
-appended with _N.vtk where N is an index (0,1,2...) to account for multiple
-diffraction intensity outputs.
-
-By default the header contains the following information (with example data):
-
-.. parsed-literal::
-
- # vtk DataFile Version 3.0 c_SAED
- Image data set
- ASCII
- DATASET STRUCTURED_POINTS
- DIMENSIONS 337 219 209
- ASPECT_RATIO 0.00507953 0.00785161 0.00821458
- ORIGIN -0.853361 -0.855826 -0.854316
- POINT_DATA 15424827
- SCALARS intensity float
- LOOKUP_TABLE default
- ...data
-
-In this example, kspace is sampled across a 337 x 219 x 209 point mesh
-where the mesh spacing is approximately 0.005, 0.007, and 0.008
-inv(length) units in the k1, k2, and k3 directions, respectively.
-The data is shifted by -0.85, -0.85, -0.85 inv(length) units so that
-the origin will lie at 0, 0, 0. Here, 15,424,827 kspace points are
-sampled in total.
-
-
-----------
-
-
-Additional optional keywords also affect the operation of this fix.
-
-The *ave* keyword determines how the values produced every *Nfreq*
-steps are averaged with values produced on previous steps that were
-multiples of *Nfreq*\ , before they are accessed by another output
-command or written to a file.
-
-If the *ave* setting is *one*\ , then the values produced on timesteps
-that are multiples of *Nfreq* are independent of each other; they are
-output as-is without further averaging.
-
-If the *ave* setting is *running*\ , then the values produced on
-timesteps that are multiples of *Nfreq* are summed and averaged in a
-cumulative sense before being output. Each output value is thus the
-average of the value produced on that timestep with all preceding
-values. This running average begins when the fix is defined; it can
-only be restarted by deleting the fix via the :doc:`unfix <unfix>`
-command, or by re-defining the fix by re-specifying it.
-
-If the *ave* setting is *window*\ , then the values produced on
-timesteps that are multiples of *Nfreq* are summed and averaged within
-a moving "window" of time, so that the last M values are used to
-produce the output. E.g. if M = 3 and Nfreq = 1000, then the output
-on step 10000 will be the average of the individual values on steps
-8000,9000,10000. Outputs on early steps will average over less than M
-values if they are not available.
-
-The *start* keyword specifies what timestep averaging will begin on.
-The default is step 0. Often input values can be 0.0 at time 0, so
-setting *start* to a larger value can avoid including a 0.0 in a
-running or windowed average.
-
-The *file* keyword allows a filename to be specified. Every *Nfreq*
-steps, the vector of saed intensity data is written to a new file using
-the 3rd generation vtk format. The base of each file is assigned by
-the *file* keyword and this string is appended with _N.vtk where N is
-an index (0,1,2...) to account for situations with multiple diffraction
-intensity outputs.
-
-The *overwrite* keyword will continuously overwrite the output file
-with the latest output, so that it only contains one timestep worth of
-output. This option can only be used with the *ave running* setting.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-The attributes for fix_saed_vtk must match the values assigned in the
-associated :doc:`compute_saed <compute_saed>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute_saed <compute_saed>`
-
-Default
-"""""""
-
-The option defaults are ave = one, start = 0, no file output.
-
-
-----------
-
-
-.. _Coleman:
-
-
-
-**(Coleman)** Coleman, Spearot, Capolungo, MSMSE, 21, 055020
-(2013).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_setforce.txt b/doc/html/_sources/fix_setforce.txt
deleted file mode 100644
index 4042bb515..000000000
--- a/doc/html/_sources/fix_setforce.txt
+++ /dev/null
@@ -1,143 +0,0 @@
-.. index:: fix setforce
-
-fix setforce command
-====================
-
-fix setforce/kk command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID setforce fx fy fz keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* setforce = style name of this fix command
-* fx,fy,fz = force component values
-* any of fx,fy,fz can be a variable (see below)
-* zero or more keyword/value pairs may be appended to args
-* keyword = *region*
-.. parsed-literal::
-
- *region* value = region-ID
- region-ID = ID of region atoms must be in to have added force
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix freeze indenter setforce 0.0 0.0 0.0
- fix 2 edge setforce NULL 0.0 0.0
- fix 2 edge setforce NULL 0.0 v_oscillate
-
-Description
-"""""""""""
-
-Set each component of force on each atom in the group to the specified
-values fx,fy,fz. This erases all previously computed forces on the
-atom, though additional fixes could add new forces. This command can
-be used to freeze certain atoms in the simulation by zeroing their
-force, either for running dynamics or performing an energy
-minimization. For dynamics, this assumes their initial velocity is
-also zero.
-
-Any of the fx,fy,fz values can be specified as NULL which means do not
-alter the force component in that dimension.
-
-Any of the 3 quantities defining the force components can be specified
-as an equal-style or atom-style :doc:`variable <variable>`, namely *fx*\ ,
-*fy*\ , *fz*\ . If the value is a variable, it should be specified as
-v_name, where name is the variable name. In this case, the variable
-will be evaluated each timestep, and its value used to determine the
-force component.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent force field.
-
-Atom-style variables can specify the same formulas as equal-style
-variables but can also include per-atom values, such as atom
-coordinates. Thus it is easy to specify a spatially-dependent force
-field with optional time-dependence as well.
-
-If the *region* keyword is used, the atom must also be in the
-specified geometric :doc:`region <region>` in order to have force added
-to it.
-
-
-----------
-
-
-Styles with a r *kk* 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
-:doc:`Section_accelerate <Section_accelerate>` of the manual. The
-accelerated styles take the same arguments and should produce the same
-results, except for round-off and precision issues.
-
-The region keyword is also supported by Kokkos, but a Kokkos-enabled
-region must be used. See the region :doc:`region <region>` command for
-more information.
-
-These accelerated styles are part of the r Kokkos package. They are
-only enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by
-this fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is setting the forces to the desired values; on all
-other levels, the force is set to 0.0 for the atoms in the fix group,
-so that setforce values are not counted multiple times. Default is to
-to override forces at the outermost level.
-
-This fix computes a global 3-vector of forces, which can be accessed
-by various :ref:`output commands <howto_15>`. This is the
-total force on the group of atoms before the forces on individual
-atoms are changed by the fix. The vector values calculated by this
-fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command, but you cannot set
-forces to any value besides zero when performing a minimization. Use
-the :doc:`fix addforce <fix_addforce>` command if you want to apply a
-non-zero force to atoms during a minimization.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix addforce <fix_addforce>`, :doc:`fix aveforce <fix_aveforce>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_shake.txt b/doc/html/_sources/fix_shake.txt
deleted file mode 100644
index c781d14ea..000000000
--- a/doc/html/_sources/fix_shake.txt
+++ /dev/null
@@ -1,260 +0,0 @@
-.. index:: fix shake
-
-fix shake command
-=================
-
-fix rattle command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID style tol iter N constraint values ... keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* style = shake or rattle = style name of this fix command
-* tol = accuracy tolerance of SHAKE solution
-* iter = max # of iterations in each SHAKE solution
-* N = print SHAKE statistics every this many timesteps (0 = never)
-* one or more constraint/value pairs are appended
-* constraint = *b* or *a* or *t* or *m*
-.. parsed-literal::
-
- *b* values = one or more bond types
- *a* values = one or more angle types
- *t* values = one or more atom types
- *m* value = one or more mass values
-
-* zero or more keyword/value pairs may be appended
-* keyword = *mol*
-.. parsed-literal::
-
- *mol* value = template-ID
- template-ID = ID of molecule template specified in a separate :doc:`molecule <molecule>` command
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 sub shake 0.0001 20 10 b 4 19 a 3 5 2
- fix 1 sub shake 0.0001 20 10 t 5 6 m 1.0 a 31
- fix 1 sub shake 0.0001 20 10 t 5 6 m 1.0 a 31 mol myMol
- fix 1 sub rattle 0.0001 20 10 t 5 6 m 1.0 a 31
- fix 1 sub rattle 0.0001 20 10 t 5 6 m 1.0 a 31 mol myMol
-
-Description
-"""""""""""
-
-Apply bond and angle constraints to specified bonds and angles in the
-simulation by either the SHAKE or RATTLE algorithms. This typically
-enables a longer timestep.
-
-**SHAKE vs RATTLE:**
-
-The SHAKE algorithm was invented for schemes such as standard Verlet
-timesteppnig, where only the coordinates are integrated and the
-velocities are approximated as finite differences to the trajectories
-(:ref:`Ryckaert et al. (1977) <Ryckaert>`). If the velocities are
-integrated explicitly, as with velocity Verlet which is what LAMMPS
-uses as an integration method, a second set of constraining forces is
-required in order to eliminate velocity components along the bonds
-(:ref:`Andersen (1983) <Andersen>`).
-
-In order to formulate individual constraints for SHAKE and RATTLE,
-focus on a single molecule whose bonds are constrained. Let Ri and Vi
-be the position and velocity of atom *i* at time *n*\ , for
-*i*\ =1,...,\ *N*\ , where *N* is the number of sites of our reference
-molecule. The distance vector between sites *i* and *j* is given by
-
-.. image:: Eqs/fix_rattle_rij.jpg
- :align: center
-
-The constraints can then be formulated as
-
-.. image:: Eqs/fix_rattle_constraints.jpg
- :align: center
-
-The SHAKE algorithm satisfies the first condition, i.e. the sites at
-time *n+1* will have the desired separations Dij immediately after the
-coordinates are integrated. If we also enforce the second condition,
-the velocity components along the bonds will vanish. RATTLE satisfies
-both conditions. As implemented in LAMMPS, fix rattle uses fix shake
-for satisfying the coordinate constraints. Therefore the settings and
-optional keywords are the same for both fixes, and all the information
-below about SHAKE is also relevant for RATTLE.
-
-**SHAKE:**
-
-Each timestep the specified bonds and angles are reset to their
-equilibrium lengths and angular values via the SHAKE algorithm
-(:ref:`Ryckaert et al. (1977) <Ryckaert>`). This is done by applying an
-additional constraint force so that the new positions preserve the
-desired atom separations. The equations for the additional force are
-solved via an iterative method that typically converges to an accurate
-solution in a few iterations. The desired tolerance (e.g. 1.0e-4 = 1
-part in 10000) and maximum # of iterations are specified as arguments.
-Setting the N argument will print statistics to the screen and log
-file about regarding the lengths of bonds and angles that are being
-constrained. Small delta values mean SHAKE is doing a good job.
-
-In LAMMPS, only small clusters of atoms can be constrained. This is
-so the constraint calculation for a cluster can be performed by a
-single processor, to enable good parallel performance. A cluster is
-defined as a central atom connected to others in the cluster by
-constrained bonds. LAMMPS allows for the following kinds of clusters
-to be constrained: one central atom bonded to 1 or 2 or 3 atoms, or
-one central atom bonded to 2 others and the angle between the 3 atoms
-also constrained. This means water molecules or CH2 or CH3 groups may
-be constrained, but not all the C-C backbone bonds of a long polymer
-chain.
-
-The *b* constraint lists bond types that will be constrained. The *t*
-constraint lists atom types. All bonds connected to an atom of the
-specified type will be constrained. The *m* constraint lists atom
-masses. All bonds connected to atoms of the specified masses will be
-constrained (within a fudge factor of MASSDELTA specified in
-fix_shake.cpp). The *a* constraint lists angle types. If both bonds
-in the angle are constrained then the angle will also be constrained
-if its type is in the list.
-
-For all constraints, a particular bond is only constrained if both
-atoms in the bond are in the group specified with the SHAKE fix.
-
-The degrees-of-freedom removed by SHAKE bonds and angles are accounted
-for in temperature and pressure computations. Similarly, the SHAKE
-contribution to the pressure of the system (virial) is also accounted
-for.
-
-.. note::
-
- This command works by using the current forces on atoms to
- caculate an additional constraint force which when added will leave
- the atoms in positions that satisfy the SHAKE constraints (e.g. bond
- length) after the next time integration step. If you define fixes
- (e.g. :doc:`fix efield <fix_efield>`) that add additional force to the
- atoms after fix shake operates, then this fix will not take them into
- account and the time integration will typically not satisfy the SHAKE
- constraints. The solution for this is to make sure that fix shake is
- defined in your input script after any other fixes which add or change
- forces (to atoms that fix shake operates on).
-
-
-----------
-
-
-The *mol* keyword should be used when other commands, such as :doc:`fix deposit <fix_deposit>` or :doc:`fix pour <fix_pour>`, add molecules
-on-the-fly during a simulation, and you wish to contrain the new
-molecules via SHAKE. You specify a *template-ID* previously defined
-using the :doc:`molecule <molecule>` command, which reads a file that
-defines the molecule. You must use the same *template-ID* that the
-command adding molecules uses. The coordinates, atom types, special
-bond restrictions, and SHAKE info can be specified in the molecule
-file. See the :doc:`molecule <molecule>` command for details. The only
-settings required to be in this file (by this command) are the SHAKE
-info of atoms in the molecule.
-
-
-----------
-
-
-Styles with a 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
-:doc:`Section_accelerate <Section_accelerate>` 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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**RATTLE:**
-
-The velocity constraints lead to a linear system of equations which
-can be solved analytically. The implementation of the algorithm in
-LAMMPS closely follows (:ref:`Andersen (1983) <Andersen>`).
-
-.. note::
-
- The fix rattle command modifies forces and velocities and thus
- should be defined after all other integration fixes in your input
- script. If you define other fixes that modify velocities or forces
- after fix rattle operates, then fix rattle will not take them into
- account and the overall time integration will typically not satisfy
- the RATTLE constraints. You can check whether the constraints work
- correctly by setting the value of RATTLE_DEBUG in src/fix_rattle.cpp
- to 1 and recompiling LAMMPS.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about these fixes is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to these fixes. No global or per-atom quantities are
-stored by these fixes for access by various :ref:`output commands <howto_15>`. No parameter of these fixes
-can be used with the *start/stop* keywords of the :doc:`run <run>`
-command. These fixes are not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-These fixes are part of the RIGID package. They are only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-For computational efficiency, there can only be one shake or rattle
-fix defined in a simulation.
-
-If you use a tolerance that is too large or a max-iteration count that
-is too small, the constraints will not be enforced very strongly,
-which can lead to poor energy conservation. You can test for this in
-your system by running a constant NVE simulation with a particular set
-of SHAKE parameters and monitoring the energy versus time.
-
-SHAKE or RATTLE should not be used to contrain an angle at 180 degrees
-(e.g. linear CO2 molecule). This causes numeric difficulties.
-
-**Related commands:** none
-
-**Default:** none
-
-
-----------
-
-
-.. _Ryckaert:
-
-
-
-**(Ryckaert)** J.-P. Ryckaert, G. Ciccotti and H. J. C. Berendsen,
-J of Comp Phys, 23, 327-341 (1977).
-
-.. _Andersen:
-
-
-
-**(Andersen)** H. Andersen, J of Comp Phys, 52, 24-34 (1983).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_shardlow.txt b/doc/html/_sources/fix_shardlow.txt
deleted file mode 100644
index 623c7621a..000000000
--- a/doc/html/_sources/fix_shardlow.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-.. index:: fix shardlow
-
-fix shardlow command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID shardlow
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* shardlow = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all shardlow
-
-Description
-"""""""""""
-
-Specifies that the Shardlow splitting algorithm (SSA) is to be used to
-integrate the DPD equations of motion. The SSA splits the integration
-into a stochastic and deterministic integration step. The fix
-*shardlow* performs the stochastic integration step and must be used
-in conjunction with a deterministic integrator (e.g. :doc:`fix nve <fix_nve>` or :doc:`fix nph <fix_nph>`). The stochastic
-integration of the dissipative and random forces is performed prior to
-the deterministic integration of the conservative force. Further
-details regarding the method are provided in :ref:`(Lisal) <Lisal>` and
-:ref:`(Larentzos) <Larentzos>`.
-
-The fix *shardlow* must be used with the :doc:`pair_style dpd/fdt <pair_style>` or :doc:`pair_style dpd/fdt/energy <pair_style>` command to properly initialize the
-fluctuation-dissipation theorem parameter(s) sigma (and kappa, if
-necessary).
-
-Note that numerous variants of DPD can be specified by choosing an
-appropriate combination of the integrator and :doc:`pair_style dpd/fdt <pair_style>` command. DPD under isothermal conditions can
-be specified by using fix *shardlow*\ , fix *nve* and pair_style
-*dpd/fdt*\ . DPD under isoenergetic conditions can be specified by
-using fix *shardlow*\ , fix *nve* and pair_style *dpd/fdt/energy*\ . DPD
-under isobaric conditions can be specified by using fix shardlow, fix
-*nph* and pair_style *dpd/fdt*\ . DPD under isoenthalpic conditions can
-be specified by using fix shardlow, fix *nph* and pair_style
-*dpd/fdt/energy*\ . Examples of each DPD variant are provided in the
-examples/USER/dpd directory.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-DPD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix is currently limited to orthogonal simulation cell
-geometries.
-
-This fix must be used with an additional fix that specifies time
-integration, e.g. :doc:`fix nve <fix_nve>` or :doc:`fix nph <fix_nh>`.
-
-The Shardlow splitting algorithm requires the sizes of the sub-domain
-lengths to be larger than twice the cutoff+skin. Generally, the
-domain decomposition is dependent on the number of processors
-requested.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style dpd/fdt <pair_dpd_fdt>`, :doc:`fix eos/cv <fix_eos_cv>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Lisal:
-
-
-
-**(Lisal)** M. Lisal, J.K. Brennan, J. Bonet Avalos, "Dissipative
-particle dynamics as isothermal, isobaric, isoenergetic, and
-isoenthalpic conditions using Shardlow-like splitting algorithms.",
-J. Chem. Phys., 135, 204105 (2011).
-
-.. _Larentzos:
-
-
-
-**(Larentzos)** J.P. Larentzos, J.K. Brennan, J.D. Moore, M. Lisal and
-W.D. Mattson, "Parallel Implementation of Isothermal and Isoenergetic
-Dissipative Particle Dynamics Using Shardlow-Like Splitting
-Algorithms", Comput. Phys. Commun., 185, 1987-1998 (2014).
-
-.. _Larentzos:
-
-
-
-**(Larentzos)** J.P. Larentzos, J.K. Brennan, J.D. Moore, and
-W.D. Mattson, "LAMMPS Implementation of Constant Energy Dissipative
-Particle Dynamics (DPD-E)", ARL-TR-6863, U.S. Army Research
-Laboratory, Aberdeen Proving Ground, MD (2014).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_smd.txt b/doc/html/_sources/fix_smd.txt
deleted file mode 100644
index baf56a870..000000000
--- a/doc/html/_sources/fix_smd.txt
+++ /dev/null
@@ -1,169 +0,0 @@
-.. index:: fix smd
-
-fix smd command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID smd type values keyword values
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* smd = style name of this fix command
-* mode = *cvel* or *cfor* to select constant velocity or constant force SMD
-.. parsed-literal::
-
- *cvel* values = K vel
- K = spring constant (force/distance units)
- vel = velocity of pulling (distance/time units)
- *cfor* values = force
- force = pulling force (force units)
-
-* keyword = *tether* or *couple*
-.. parsed-literal::
-
- *tether* values = x y z R0
- x,y,z = point to which spring is tethered
- R0 = distance of end of spring from tether point (distance units)
- *couple* values = group-ID2 x y z R0
- group-ID2 = 2nd group to couple to fix group with a spring
- x,y,z = direction of spring, automatically computed with 'auto'
- R0 = distance of end of spring (distance units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix pull cterm smd cvel 20.0 -0.00005 tether NULL NULL 100.0 0.0
- fix pull cterm smd cvel 20.0 -0.0001 tether 25.0 25 25.0 0.0
- fix stretch cterm smd cvel 20.0 0.0001 couple nterm auto auto auto 0.0
- fix pull cterm smd cfor 5.0 tether 25.0 25.0 25.0 0.0
-
-Description
-"""""""""""
-
-This fix implements several options of steered MD (SMD) as reviewed in
-:ref:`(Izrailev) <Izrailev>`, which allows to induce conformational changes
-in systems and to compute the potential of mean force (PMF) along the
-assumed reaction coordinate :ref:`(Park) <Park>` based on Jarzynski's
-equality :ref:`(Jarzynski) <Jarzynski>`. This fix borrows a lot from :doc:`fix spring <fix_spring>` and :doc:`fix setforce <fix_setforce>`.
-
-You can apply a moving spring force to a group of atoms (\ *tether*
-style) or between two groups of atoms (\ *couple* style). The spring
-can then be used in either constant velocity (\ *cvel*\ ) mode or in
-constant force (\ *cfor*\ ) mode to induce transitions in your systems.
-When running in *tether* style, you may need some way to fix some
-other part of the system (e.g. via :doc:`fix spring/self <fix_spring_self>`)
-
-The *tether* style attaches a spring between a point at a distance of
-R0 away from a fixed point *x,y,z* and the center of mass of the fix
-group of atoms. A restoring force of magnitude K (R - R0) Mi / M is
-applied to each atom in the group where *K* is the spring constant, Mi
-is the mass of the atom, and M is the total mass of all atoms in the
-group. Note that *K* thus represents the total force on the group of
-atoms, not a per-atom force.
-
-In *cvel* mode the distance R is incremented or decremented
-monotonously according to the pulling (or pushing) velocity.
-In *cfor* mode a constant force is added and the actual distance
-in direction of the spring is recorded.
-
-The *couple* style links two groups of atoms together. The first
-group is the fix group; the second is specified by group-ID2. The
-groups are coupled together by a spring that is at equilibrium when
-the two groups are displaced by a vector in direction *x,y,z* with
-respect to each other and at a distance R0 from that displacement.
-Note that *x,y,z* only provides a direction and will be internally
-normalized. But since it represents the *absolute* displacement of
-group-ID2 relative to the fix group, (1,1,0) is a different spring
-than (-1,-1,0). For each vector component, the displacement can be
-described with the *auto* parameter. In this case the direction is
-recomputed in every step, which can be useful for steering a local
-process where the whole object undergoes some other change. When the
-relative positions and distance between the two groups are not in
-equilibrium, the same spring force described above is applied to atoms
-in each of the two groups.
-
-For both the *tether* and *couple* styles, any of the x,y,z values can
-be specified as NULL which means do not include that dimension in the
-distance calculation or force application.
-
-For constant velocity pulling (\ *cvel* mode), the running integral
-over the pulling force in direction of the spring is recorded and
-can then later be used to compute the potential of mean force (PMF)
-by averaging over multiple independent trajectories along the same
-pulling path.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-The fix stores the direction of the spring, current pulling target
-distance and the running PMF to :doc:`binary restart files <restart>`.
-See the :doc:`read_restart <read_restart>` command for info on how to
-re-specify a fix in an input script that reads a restart file, so that
-the operation of the fix continues in an uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by
-this fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-This fix computes a vector list of 7 quantities, which can be accessed
-by various :ref:`output commands <howto_15>`. The
-quantities in the vector are in this order: the x-, y-, and
-z-component of the pulling force, the total force in direction of the
-pull, the equilibrium distance of the spring, the distance between the
-two reference points, and finally the accumulated PMF (the sum of
-pulling forces times displacement).
-
-The force is the total force on the group of atoms by the spring. In
-the case of the *couple* style, it is the force on the fix group
-(group-ID) or the negative of the force on the 2nd group (group-ID2).
-The vector values calculated by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix drag <fix_drag>`, :doc:`fix spring <fix_spring>`,
-:doc:`fix spring/self <fix_spring_self>`,
-:doc:`fix spring/rg <fix_spring_rg>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Israilev:
-
-
-
-**(Izrailev)** Izrailev, Stepaniants, Isralewitz, Kosztin, Lu, Molnar,
-Wriggers, Schulten. Computational Molecular Dynamics: Challenges,
-Methods, Ideas, volume 4 of Lecture Notes in Computational Science and
-Engineering, pp. 39-65. Springer-Verlag, Berlin, 1998.
-
-**(Park)**
-Park, Schulten, J. Chem. Phys. 120 (13), 5946 (2004)
-
-**(Jarzynski)**
-Jarzynski, Phys. Rev. Lett. 78, 2690 (1997)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_smd_adjust_dt.txt b/doc/html/_sources/fix_smd_adjust_dt.txt
deleted file mode 100644
index 0bcb34a4b..000000000
--- a/doc/html/_sources/fix_smd_adjust_dt.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-.. index:: fix smd/adjust_dt
-
-fix smd/adjust_dt command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID smd/adjust_dt arg
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* smd/adjust_dt = style name of this fix command
-* arg = *s_fact*
-.. parsed-literal::
-
- *s_fact* = safety factor
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all smd/adjust_dt 0.1
-
-Description
-"""""""""""
-
-The fix calculates a new stable time increment for use with the SMD time integrators.
-
-The stable time increment is based on multiple conditions. For the SPH pair styles, a
-CFL criterion (Courant, Friedrichs & Lewy, 1928) is evaluated, which determines the the speed of
-sound cannot propagate further than a typical spacing between particles within a single time step to ensure
-no information is lost. For the contact pair styles, a linear analysis of the pair potential determines a
-stable maximum time step.
-
-This fix inquires the minimum stable time increment across all particles contained in the group for which this
-fix is defined. An additional safety factor *s_fact* is applied to the time increment.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to use Smooth Mach Dynamics in LAMMPS.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-Currently, no part of USER-SMD supports restarting nor minimization.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/tlsph_dt <compute_smd_tlsph_dt>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_smd_integrate_tlsph.txt b/doc/html/_sources/fix_smd_integrate_tlsph.txt
deleted file mode 100644
index 56f538244..000000000
--- a/doc/html/_sources/fix_smd_integrate_tlsph.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-.. index:: fix smd/integrate_tlsph
-
-fix smd/integrate_tlsph command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID smd/integrate_tlsph keyword values
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* smd/integrate_tlsph = style name of this fix command
-* zero or more keyword/value pairs may be appended
-
-* keyword = *limit_velocity*
-.. parsed-literal::
-
- *limit_velocity* value = max_vel
- max_vel = maximum allowed velocity
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all smd/integrate_tlsph
- fix 1 all smd/integrate_tlsph limit_velocity 1000
-
-Description
-"""""""""""
-
-The fix performs explicit time integration for particles which interact according with the Total-Lagrangian SPH pair style.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth Mach Dynamics in LAMMPS.
-
-The *limit_velocity* keyword will control the velocity, scaling the norm of
-the velocity vector to max_vel in case it exceeds this velocity limit.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-Currently, no part of USER-SMD supports restarting nor minimization. This fix has no outputs.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/integrate_ulsph <fix_smd_integrate_ulsph>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_smd_integrate_ulsph.txt b/doc/html/_sources/fix_smd_integrate_ulsph.txt
deleted file mode 100644
index e807113d6..000000000
--- a/doc/html/_sources/fix_smd_integrate_ulsph.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-.. index:: fix smd/integrate_ulsph
-
-fix smd/integrate_ulsph command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID smd/integrate_ulsph keyword
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* smd/integrate_ulsph = style name of this fix command
-* zero or more keyword/value pairs may be appended
-
-keyword = adjust_radius or limit_velocity
-
-adjust_radius values = adjust_radius_factor min_nn max_nn
- adjust_radius_factor = factor which scale the smooth/kernel radius
- min_nn = minimum number of neighbors
- max_nn = maximum number of neighbors
-limit_velocity values = max_velocity
- max_velocity = maximum allowed velocity.
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all smd/integrate_ulsph adjust_radius 1.02 25 50
-
-.. parsed-literal::
-
- fix 1 all smd/integrate_ulsph limit_velocity 1000
-
-Description
-"""""""""""
-
-The fix performs explicit time integration for particles which interact with the updated Lagrangian SPH pair style.
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth Mach Dynamics in LAMMPS.
-
-The *adjust_radius* keyword activates dynamic adjustment of the per-particle SPH smoothing kernel radius such that the number of neighbors per particles remains
-within the interval *min_nn* to *max_nn*\ . The parameter *adjust_radius_factor* determines the amount of adjustment per timestep. Typical values are
-*adjust_radius_factor*\ =1.02, *min_nn*\ =15, and *max_nn*\ =20.
-
-The *limit_velocity* keyword will control the velocity, scaling the norm of
-the velocity vector to max_vel in case it exceeds this velocity limit.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-Currently, no part of USER-SMD supports restarting nor minimization. This fix has no outputs.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Related commands
-""""""""""""""""
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_smd_move_triangulated_surface.txt b/doc/html/_sources/fix_smd_move_triangulated_surface.txt
deleted file mode 100644
index 411b7c1d6..000000000
--- a/doc/html/_sources/fix_smd_move_triangulated_surface.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-.. index:: fix smd/move_tri_surf
-
-fix smd/move_tri_surf command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID smd/move_tri_surf keyword
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* smd/move_tri_surf keyword = style name of this fix command
-* keyword = **LINEAR* or **WIGGLE* or **ROTATE*
-.. parsed-literal::
-
- **LINEAR* args = Vx Vy Vz
- Vx,Vy,Vz = components of velocity vector (velocity units), any component can be specified as NULL
- **WIGGLE* args = Vx Vy Vz max_travel
- vx,vy,vz = components of velocity vector (velocity units), any component can be specified as NULL
- max_travel = wiggle amplitude
- **ROTATE* args = Px Py Pz Rx Ry Rz period
- Px,Py,Pz = origin point of axis of rotation (distance units)
- Rx,Ry,Rz = axis of rotation vector
- period = period of rotation (time units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 tool smd/move_tri_surf *LINEAR 20 20 10
- fix 2 tool smd/move_tri_surf *WIGGLE 20 20 10
- fix 2 tool smd/move_tri_surf *ROTATE 0 0 0 5 2 1
-
-Description
-"""""""""""
-
-This fix applies only to rigid surfaces read from .STL files via fix :doc:`smd/wall_surface <fix_smd_wall_surface>` .
-It updates position and velocity for the particles in the group each timestep without regard to forces on the particles.
-The rigid surfaces can thus be moved along simple trajectories during the simulation.
-
-The **LINEAR* style moves particles with the specified constant velocity
-vector V = (Vx,Vy,Vz). This style also sets the velocity of each particle
-to V = (Vx,Vy,Vz).
-
-The **WIGGLE* style moves particles in an oscillatory fashion.
-Particles are moved along (vx, vy, vz) with constant velocity until a
-displacement of max_travel is reached. Then, the velocity vector is
-reversed. This process is repeated.
-
-The **ROTATE* style rotates particles around a rotation axis R = (Rx,Ry,Rz) that
-goes through a point P = (Px,Py,Pz). The period of the rotation is also
-specified. This style also sets the velocity of each particle to (omega cross
-Rperp) where omega is its angular velocity around the rotation axis and
-Rperp is a perpendicular vector from the rotation axis to the particle.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to using Smooth Mach Dynamics in LAMMPS.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-Currently, no part of USER-SMD supports restarting nor minimization. This fix has no outputs.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/triangle_mesh_vertices <compute_smd_triangle_mesh_vertices>`, :doc:`smd/wall_surface <fix_smd_wall_surface>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_smd_setvel.txt b/doc/html/_sources/fix_smd_setvel.txt
deleted file mode 100644
index 043be84da..000000000
--- a/doc/html/_sources/fix_smd_setvel.txt
+++ /dev/null
@@ -1,99 +0,0 @@
-.. index:: fix smd/setvel
-
-fix smd/setvel command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID smd/setvel vx vy vz keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* smd/setvel = style name of this fix command
-* vx,vy,vz = velocity component values
-* any of vx,vy,vz can be a variable (see below)
-* zero or more keyword/value pairs may be appended to args
-* keyword = *region*
-.. parsed-literal::
-
- *region* value = region-ID
- region-ID = ID of region particles must be in to have their velocities set
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix top_velocity top_group setvel 1.0 0.0 0.0
-
-Description
-"""""""""""
-
-Set each component of velocity on each particle in the group to the specified
-values vx,vy,vz, regardless of the forces acting on the particle. This command can
-be used to impose velocity boundary conditions.
-
-Any of the vx,vy,vz values can be specified as NULL which means do not
-alter the velocity component in that dimension.
-
-This fix is indented to be used together with a time integration fix.
-
-Any of the 3 quantities defining the velocity components can be specified
-as an equal-style or atom-style :doc:`variable <variable>`, namely *vx*\ ,
-*vy*\ , *vz*\ . If the value is a variable, it should be specified as
-v_name, where name is the variable name. In this case, the variable
-will be evaluated each timestep, and its value used to determine the
-force component.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent velocity field.
-
-Atom-style variables can specify the same formulas as equal-style
-variables but can also include per-atom values, such as atom
-coordinates. Thus it is easy to specify a spatially-dependent velocity
-field with optional time-dependence as well.
-
-If the *region* keyword is used, the particle must also be in the
-specified geometric :doc:`region <region>` in order to have its velocity set by this command.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-Currently, no part of USER-SMD supports restarting nor minimization
-None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global 3-vector of forces, which can be accessed
-by various :ref:`output commands <howto_15>`. This is the
-total force on the group of atoms. The vector values calculated by this
-fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_smd_tlsph_reference_configuration.txt b/doc/html/_sources/fix_smd_tlsph_reference_configuration.txt
deleted file mode 100644
index e69de29bb..000000000
diff --git a/doc/html/_sources/fix_smd_wall_surface.txt b/doc/html/_sources/fix_smd_wall_surface.txt
deleted file mode 100644
index 05a742b25..000000000
--- a/doc/html/_sources/fix_smd_wall_surface.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-.. index:: fix smd/wall_surface
-
-fix smd/wall_surface command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID smd/wall_surface arg type mol-ID
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* smd/wall_surface = style name of this fix command
-* arg = *file*
-.. parsed-literal::
-
- *file* = file name of a triangular mesh in stl format
-
-* type = particle type to be given to the new particles created by this fix
-* mol-ID = molecule-ID to be given to the new particles created by this fix (must be >= 65535)
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix stl_surf all smd/wall_surface tool.stl 2 65535
-
-Description
-"""""""""""
-
-This fix creates reads a traingulated surface from a file in .STL format.
-For each triangle, a new particle is created which stores the barycenter of the triangle and the vertex positions.
-The radius of the new particle is that of the minimum circle which encompasses the triangle vertices.
-
-The triangulated surface can be used as a complex rigid wall via the :doc:`smd/tri_surface <pair_smd_triangulated_surface>` pair style.
-It is possible to move the triangulated surface via the :doc:`smd/move_tri_surf <fix_smd_move_triangulated_surface>` fix style.
-
-Immediately after a .STL file has been read, the simulation needs to be run for 0 timesteps in order to properly register the new particles
-in the system. See the "funnel_flow" example in the USER-SMD examples directory.
-
-See `this PDF guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ to use Smooth Mach Dynamics in LAMMPS.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-Currently, no part of USER-SMD supports restarting nor minimization. This fix has no outputs.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info. The molecule ID given to the particles created by this fix have to be equal to or larger than 65535.
-
-Within each .STL file, only a single triangulated object must be present, even though the STL format allows for the possibility of multiple objects in one file.
-
-Related commands
-""""""""""""""""
-
-:doc:`smd/triangle_mesh_vertices <compute_smd_triangle_mesh_vertices>`, :doc:`smd/move_tri_surf <fix_smd_move_triangulated_surface>`, :doc:`smd/tri_surface <pair_smd_triangulated_surface>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_spring.txt b/doc/html/_sources/fix_spring.txt
deleted file mode 100644
index e2b1b57c1..000000000
--- a/doc/html/_sources/fix_spring.txt
+++ /dev/null
@@ -1,163 +0,0 @@
-.. index:: fix spring
-
-fix spring command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID spring keyword values
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* spring = style name of this fix command
-* keyword = *tether* or *couple*
-.. parsed-literal::
-
- *tether* values = K x y z R0
- K = spring constant (force/distance units)
- x,y,z = point to which spring is tethered
- R0 = equilibrium distance from tether point (distance units)
- *couple* values = group-ID2 K x y z R0
- group-ID2 = 2nd group to couple to fix group with a spring
- K = spring constant (force/distance units)
- x,y,z = direction of spring
- R0 = equilibrium distance of spring (distance units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix pull ligand spring tether 50.0 0.0 0.0 0.0 0.0
- fix pull ligand spring tether 50.0 0.0 0.0 0.0 5.0
- fix pull ligand spring tether 50.0 NULL NULL 2.0 3.0
- fix 5 bilayer1 spring couple bilayer2 100.0 NULL NULL 10.0 0.0
- fix longitudinal pore spring couple ion 100.0 NULL NULL -20.0 0.0
- fix radial pore spring couple ion 100.0 0.0 0.0 NULL 5.0
-
-Description
-"""""""""""
-
-Apply a spring force to a group of atoms or between two groups of
-atoms. This is useful for applying an umbrella force to a small
-molecule or lightly tethering a large group of atoms (e.g. all the
-solvent or a large molecule) to the center of the simulation box so
-that it doesn't wander away over the course of a long simulation. It
-can also be used to hold the centers of mass of two groups of atoms at
-a given distance or orientation with respect to each other.
-
-The *tether* style attaches a spring between a fixed point *x,y,z* and
-the center of mass of the fix group of atoms. The equilibrium
-position of the spring is R0. At each timestep the distance R from
-the center of mass of the group of atoms to the tethering point is
-computed, taking account of wrap-around in a periodic simulation box.
-A restoring force of magnitude K (R - R0) Mi / M is applied to each
-atom in the group where *K* is the spring constant, Mi is the mass of
-the atom, and M is the total mass of all atoms in the group. Note
-that *K* thus represents the spring constant for the total force on
-the group of atoms, not for a spring applied to each atom.
-
-The *couple* style links two groups of atoms together. The first
-group is the fix group; the second is specified by group-ID2. The
-groups are coupled together by a spring that is at equilibrium when
-the two groups are displaced by a vector *x,y,z* with respect to each
-other and at a distance R0 from that displacement. Note that *x,y,z*
-is the equilibrium displacement of group-ID2 relative to the fix
-group. Thus (1,1,0) is a different spring than (-1,-1,0). When the
-relative positions and distance between the two groups are not in
-equilibrium, the same spring force described above is applied to atoms
-in each of the two groups.
-
-For both the *tether* and *couple* styles, any of the x,y,z values can
-be specified as NULL which means do not include that dimension in the
-distance calculation or force application.
-
-The first example above pulls the ligand towards the point (0,0,0).
-The second example holds the ligand near the surface of a sphere of
-radius 5 around the point (0,0,0). The third example holds the ligand
-a distance 3 away from the z=2 plane (on either side).
-
-The fourth example holds 2 bilayers a distance 10 apart in z. For the
-last two examples, imagine a pore (a slab of atoms with a cylindrical
-hole cut out) oriented with the pore axis along z, and an ion moving
-within the pore. The fifth example holds the ion a distance of -20
-below the z = 0 center plane of the pore (umbrella sampling). The
-last example holds the ion a distance 5 away from the pore axis
-(assuming the center-of-mass of the pore in x,y is the pore axis).
-
-.. note::
-
- The center of mass of a group of atoms is calculated in
- "unwrapped" coordinates using atom image flags, which means that the
- group can straddle a periodic boundary. See the :doc:`dump <dump>` doc
- page for a discussion of unwrapped coordinates. It also means that a
- spring connecting two groups or a group and the tether point can cross
- a periodic boundary and its length be calculated correctly. One
- exception is for rigid bodies, which should not be used with the fix
- spring command, if the rigid body will cross a periodic boundary.
- This is because image flags for rigid bodies are used in a different
- way, as explained on the :doc:`fix rigid <fix_rigid>` doc page.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy stored in the spring to the system's potential
-energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-spring energy = 0.5 * K * r^2.
-
-This fix also computes global 4-vector which can be accessed by
-various :ref:`output commands <howto_15>`. The first 3
-quantities in the vector are xyz components of the total force added
-to the group of atoms by the spring. In the case of the *couple*
-style, it is the force on the fix group (group-ID) or the negative of
-the force on the 2nd group (group-ID2). The 4th quantity in the
-vector is the magnitude of the force added by the spring, as a
-positive value if (r-R0) > 0 and a negative value if (r-R0) < 0. This
-sign convention can be useful when using the spring force to compute a
-potential of mean force (PMF).
-
-The scalar and vector values calculated by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command.
-
-.. note::
-
- If you want the spring energy to be included in the total
- potential energy of the system (the quantity being minimized), you
- MUST enable the :doc:`fix_modify <fix_modify>` *energy* option for this
- fix.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix drag <fix_drag>`, :doc:`fix spring/self <fix_spring_self>`,
-:doc:`fix spring/rg <fix_spring_rg>`, :doc:`fix smd <fix_smd>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_spring_chunk.txt b/doc/html/_sources/fix_spring_chunk.txt
deleted file mode 100644
index b8a303838..000000000
--- a/doc/html/_sources/fix_spring_chunk.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-.. index:: fix spring/chunk
-
-fix spring/chunk command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID spring/chunk K chunkID comID
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* spring/chunk = style name of this fix command
-* K = spring constant for each chunk (force/distance units)
-* chunkID = ID of :doc:`compute chunk/atom <compute_chunk_atom>` command
-* comID = ID of :doc:`compute com/chunk <compute_com_chunk>` command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix restrain all spring/chunk 100 chunkID comID
-
-Description
-"""""""""""
-
-Apply a spring force to the center-of-mass (COM) of chunks of atoms as
-defined by the :doc:`compute chunk/atom <compute_chunk_atom>` command.
-Chunks can be molecules or spatial bins or other groupings of atoms.
-This is a way of tethering each chunk to its initial COM coordinates.
-
-The *chunkID* is the ID of a compute chunk/atom command defined in the
-input script. It is used to define the chunks. The *comID* is the ID
-of a compute com/chunk command defined in the input script. It is
-used to compute the COMs of each chunk.
-
-At the beginning of the first :doc:`run <run>` or
-:doc:`minimize <minimize>` command after this fix is defined, the
-initial COM of each chunk is calculated and stored as R0m, where M is
-the chunk number. Thereafter, at every timestep (or minimization
-iteration), the current COM of each chunk is calculated as Rm. A
-restoring force of magnitude K (Rm - R0m) Mi / Mm is applied to each
-atom in each chunk where *K* is the specified spring constant, Mi is
-the mass of the atom, and Mm is the total mass of all atoms in the
-chunk. Note that *K* thus represents the spring constant for the
-total force on each chunk of atoms, not for a spring applied to each
-atom.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy stored in all the springs to the system's potential
-energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-energy of all the springs, i.e. 0.5 * K * r^2 per-spring.
-
-The scalar value calculated by this fix is "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command.
-
-.. note::
-
- If you want the spring energies to be included in the total
- potential energy of the system (the quantity being minimized), you
- MUST enable the :doc:`fix_modify <fix_modify>` *energy* option for this
- fix.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix spring <fix_spring>`, :doc:`fix spring/self <fix_spring_self>`,
-:doc:`fix spring/rg <fix_spring_rg>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_spring_rg.txt b/doc/html/_sources/fix_spring_rg.txt
deleted file mode 100644
index 3be20597a..000000000
--- a/doc/html/_sources/fix_spring_rg.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-.. index:: fix spring/rg
-
-fix spring/rg command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID spring/rg K RG0
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* spring/rg = style name of this fix command
-* K = harmonic force constant (force/distance units)
-* RG0 = target radius of gyration to constrain to (distance units)
-
-.. parsed-literal::
-
- if RG0 = NULL, use the current RG as the target value
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 protein spring/rg 5.0 10.0
- fix 2 micelle spring/rg 5.0 NULL
-
-Description
-"""""""""""
-
-Apply a harmonic restraining force to atoms in the group to affect
-their central moment about the center of mass (radius of gyration).
-This fix is useful to encourage a protein or polymer to fold/unfold
-and also when sampling along the radius of gyration as a reaction
-coordinate (i.e. for protein folding).
-
-The radius of gyration is defined as RG in the first formula. The
-energy of the constraint and associated force on each atom is given by
-the second and third formulas, when the group is at a different RG
-than the target value RG0.
-
-.. image:: Eqs/fix_spring_rg.jpg
- :align: center
-
-The (xi - center-of-mass) term is computed taking into account
-periodic boundary conditions, m_i is the mass of the atom, and M is
-the mass of the entire group. Note that K is thus a force constant
-for the aggregate force on the group of atoms, not a per-atom force.
-
-If RG0 is specified as NULL, then the RG of the group is computed at
-the time the fix is specified, and that value is used as the target.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix spring <fix_spring>`, :doc:`fix spring/self <fix_spring_self>`
-:doc:`fix drag <fix_drag>`, :doc:`fix smd <fix_smd>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_spring_self.txt b/doc/html/_sources/fix_spring_self.txt
deleted file mode 100644
index 66aa50ff2..000000000
--- a/doc/html/_sources/fix_spring_self.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-.. index:: fix spring/self
-
-fix spring/self command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID spring/self K dir
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* spring/self = style name of this fix command
-* K = spring constant (force/distance units)
-* dir = xyz, xy, xz, yz, x, y, or z (optional, default: xyz)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix tether boundary-atoms spring/self 10.0
- fix zrest move spring/self 10.0 z
-
-Description
-"""""""""""
-
-Apply a spring force independently to each atom in the group to tether
-it to its initial position. The initial position for each atom is its
-location at the time the fix command was issued. At each timestep,
-the magnitude of the force on each atom is -Kr, where r is the
-displacement of the atom from its current position to its initial
-position. The distance r correctly takes into account any crossings
-of periodic boundary by the atom since it was in its intitial
-position.
-
-With the (optional) dir flag, one can select in which direction the
-spring force is applied. By default, the restraint is applied in all
-directions, but it can be limited to the xy-, xz-, yz-plane and the
-x-, y-, or z-direction, thus restraining the atoms to a line or a
-plane, respectively.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the original coordinates of tethered atoms to :doc:`binary restart files <restart>`, so that the spring effect will be the
-same in a restarted simulation. See the
-:doc:`read_restart <read_restart>` command for info on how to re-specify
-a fix in an input script that reads a restart file, so that the
-operation of the fix continues in an uninterrupted fashion.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy stored in the per-atom springs to the system's
-potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by
-this fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is an
-energy which is the sum of the spring energy for each atom, where the
-per-atom energy is 0.5 * K * r^2. The scalar value calculated by this
-fix is "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command.
-
-.. note::
-
- If you want the per-atom spring energy to be included in the
- total potential energy of the system (the quantity being minimized),
- you MUST enable the :doc:`fix_modify <fix_modify>` *energy* option for
- this fix.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix drag <fix_drag>`, :doc:`fix spring <fix_spring>`,
-:doc:`fix smd <fix_smd>`, :doc:`fix spring/rg <fix_spring_rg>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_srd.txt b/doc/html/_sources/fix_srd.txt
deleted file mode 100644
index ddc2d291e..000000000
--- a/doc/html/_sources/fix_srd.txt
+++ /dev/null
@@ -1,429 +0,0 @@
-.. index:: fix srd
-
-fix srd command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID srd N groupbig-ID Tsrd hgrid seed keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* srd = style name of this fix command
-* N = reset SRD particle velocities every this many timesteps
-* groupbig-ID = ID of group of large particles that SRDs interact with
-* Tsrd = temperature of SRD particles (temperature units)
-* hgrid = grid spacing for SRD grouping (distance units)
-* seed = random # seed (positive integer)
-
-* zero or more keyword/value pairs may be appended
-* keyword = *lamda* or *collision* or *overlap* or *inside* or *exact* or *radius* or *bounce* or *search* or *cubic* or *shift* or *tstat* or *rescale*
-.. parsed-literal::
-
- *lamda* value = mean free path of SRD particles (distance units)
- *collision* value = *noslip* or *slip* = collision model
- *overlap* value = *yes* or *no* = whether big particles may overlap
- *inside* value = *error* or *warn* or *ignore* = how SRD particles which end up inside a big particle are treated
- *exact* value = *yes* or *no*
- *radius* value = rfactor = scale collision radius by this factor
- *bounce* value = Nbounce = max # of collisions an SRD particle can undergo in one timestep
- *search* value = sgrid = grid spacing for collision partner searching (distance units)
- *cubic* values = style tolerance
- style = *error* or *warn*
- tolerance = fractional difference allowed (0 <= tol <= 1)
- *shift* values = flag shiftseed
- flag = *yes* or *no* or *possible* = SRD bin shifting for better statistics
- *yes* = perform bin shifting each time SRD velocities are rescaled
- *no* = no shifting
- *possible* = shift depending on mean free path and bin size
- shiftseed = random # seed (positive integer)
- *tstat* value = *yes* or *no* = thermostat SRD particles or not
- *rescale* value = *yes* or *no* or *rotate* or *collide* = rescaling of SRD velocities
- *yes* = rescale during velocity rotation and collisions
- *no* = no rescaling
- *rotate* = rescale during velocity rotation, but not collisions
- *collide* = rescale during collisions, but not velocity rotation
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 srd srd 10 big 1.0 0.25 482984
- fix 1 srd srd 10 big 0.5 0.25 482984 collision slip search 0.5
-
-Description
-"""""""""""
-
-Treat a group of partilces as stochastic rotation dynamics (SRD)
-particles that serve as a background solvent when interacting with big
-(colloidal) particles in groupbig-ID. The SRD formalism is described
-in :ref:`(Hecht) <Hecht>`. The key idea behind using SRD particles as a
-cheap coarse-grained solvent is that SRD particles do not interact
-with each other, but only with the solute particles, which in LAMMPS
-can be spheroids, ellipsoids, or line segments, or triangles, or rigid
-bodies containing multiple spherioids or ellipsoids or line segments
-or triangles. The collision and rotation properties of the model
-imbue the SRD particles with fluid-like properties, including an
-effective viscosity. Thus simulations with large solute particles can
-be run more quickly, to measure solute propoerties like diffusivity
-and viscosity in a background fluid. The usual LAMMPS fixes for such
-simulations, such as :doc:`fix deform <fix_deform>`, :doc:`fix viscosity <fix_viscosity>`, and :doc:`fix nvt/sllod <fix_nvt_sllod>`,
-can be used in conjunction with the SRD model.
-
-For more details on how the SRD model is implemented in LAMMPS, :ref:`this paper <Petersen>` describes the implementation and usage of pure SRD
-fluids. :ref:`This paper <Lechman>`, which is nearly complete, describes
-the implementation and usage of mixture systems (solute particles in
-an SRD fluid). See the examples/srd directory for sample input
-scripts using SRD particles in both settings.
-
-This fix does 2 things:
-
-(1) It advects the SRD particles, performing collisions between SRD
-and big particles or walls every timestep, imparting force and torque
-to the big particles. Collisions also change the position and
-velocity of SRD particles.
-
-(2) It resets the velocity distribution of SRD particles via random
-rotations every N timesteps.
-
-SRD particles have a mass, temperature, characteristic timestep
-dt_SRD, and mean free path between collisions (lamda). The
-fundamental equation relating these 4 quantities is
-
-.. parsed-literal::
-
- lamda = dt_SRD * sqrt(Kboltz * Tsrd / mass)
-
-The mass of SRD particles is set by the :doc:`mass <mass>` command
-elsewhere in the input script. The SRD timestep dt_SRD is N times the
-step dt defined by the :doc:`timestep <timestep>` command. Big
-particles move in the normal way via a time integration :doc:`fix <fix>`
-with a short timestep dt. SRD particles advect with a large timestep
-dt_SRD >= dt.
-
-If the *lamda* keyword is not specified, the the SRD temperature
-*Tsrd* is used in the above formula to compute lamda. If the *lamda*
-keyword is specified, then the *Tsrd* setting is ignored and the above
-equation is used to compute the SRD temperature.
-
-The characteristic length scale for the SRD fluid is set by *hgrid*
-which is used to bin SRD particles for purposes of resetting their
-velocities. Normally hgrid is set to be 1/4 of the big particle
-diameter or smaller, to adequately resolve fluid properties around the
-big particles.
-
-Lamda cannot be smaller than 0.6 * hgrid, else an error is generated
-(unless the *shift* keyword is used, see below). The velocities of
-SRD particles are bounded by Vmax, which is set so that an SRD
-particle will not advect further than Dmax = 4*lamda in dt_SRD. This
-means that roughly speaking, Dmax should not be larger than a big
-particle diameter, else SRDs may pass thru big particles without
-colliding. A warning is generated if this is the case.
-
-Collisions between SRD particles and big particles or walls are
-modeled as a lightweight SRD point particle hitting a heavy big
-particle of given diameter or a wall at a point on its surface and
-bouncing off with a new velocity. The collision changes the momentum
-of the SRD particle. It imparts a force and torque to the big
-particle. It imparts a force to a wall. Static or moving SRD walls
-are setup via the :doc:`fix wall/srd <fix_wall_srd>` command. For the
-remainder of this doc page, a collision of an SRD particle with a wall
-can be viewed as a collision with a big particle of infinite radius
-and mass.
-
-The *collision* keyword sets the style of collisions. The *slip*
-style means that the tangential component of the SRD particle momentum
-is preserved. Thus a force is imparted to a big particle, but no
-torque. The normal component of the new SRD velocity is sampled from
-a Gaussian distribution at temperature *Tsrd*\ .
-
-For the *noslip* style, both the normal and tangential components of
-the new SRD velocity are sampled from a Gaussian distribution at
-temperature *Tsrd*\ . Additionally, a new tangential direction for the
-SRD velocity is chosen randomly. This collision style imparts torque
-to a big particle. Thus a time integrator :doc:`fix <fix>` that rotates
-the big particles appropriately should be used.
-
-
-----------
-
-
-The *overlap* keyword should be set to *yes* if two (or more) big
-particles can ever overlap. This depends on the pair potential
-interaction used for big-big interactions, or could be the case if
-multiple big particles are held together as rigid bodies via the :doc:`fix rigid <fix_rigid>` command. If the *overlap* keyword is *no* and
-big particles do in fact overlap, then SRD/big collisions can generate
-an error if an SRD ends up inside two (or more) big particles at once.
-How this error is treated is determined by the *inside* keyword.
-Running with *overlap* set to *no* allows for faster collision
-checking, so it should only be set to *yes* if needed.
-
-The *inside* keyword determines how a collision is treated if the
-computation determines that the timestep started with the SRD particle
-already inside a big particle. If the setting is *error* then this
-generates an error message and LAMMPS stops. If the setting is *warn*
-then this generates a warning message and the code continues. If the
-setting is *ignore* then no message is generated. One of the output
-quantities logged by the fix (see below) tallies the number of such
-events, so it can be monitored. Note that once an SRD particle is
-inside a big particle, it may remain there for several steps until it
-drifts outside the big particle.
-
-The *exact* keyword determines how accurately collisions are computed.
-A setting of *yes* computes the time and position of each collision as
-SRD and big particles move together. A setting of *no* estimates the
-position of each collision based on the end-of-timestep positions of
-the SRD and big particle. If *overlap* is set to yes, the setting of
-the *exact* keyword is ignored since time-accurate collisions are
-needed.
-
-The *radius* keyword scales the effective size of big particles. If
-big particles will overlap as they undergo dynamics, then this keyword
-can be used to scale down their effective collision radius by an
-amount *rfactor*\ , so that SRD particle will only collide with one big
-particle at a time. For example, in a Lennard-Jones system at a
-temperature of 1.0 (in reduced LJ units), the minimum separation
-bewteen two big particles is as small as about 0.88 sigma. Thus an
-*rfactor* value of 0.85 should prevent dual collisions.
-
-The *bounce* keyword can be used to limit the maximum number of
-collisions an SRD particle undergoes in a single timestep as it
-bounces between nearby big particles. Note that if the limit is
-reached, the SRD can be left inside a big particle. A setting of 0 is
-the same as no limit.
-
-
-----------
-
-
-There are 2 kinds of bins created and maintained when running an SRD
-simulation. The first are "SRD bins" which are used to bin SRD
-particles and reset their velocities, as discussed above. The second
-are "search bins" which are used to identify SRD/big particle
-collisions.
-
-The *search* keyword can be used to choose a search bin size for
-identifying SRD/big particle collisions. The default is to use the
-*hgrid* parameter for SRD bins as the search bin size. Choosing a
-smaller or large value may be more efficient, depending on the
-problem. But, in a statistical sense, it should not change the
-simulation results.
-
-The *cubic* keyword can be used to generate an error or warning when
-the bin size chosen by LAMMPS creates SRD bins that are non-cubic or
-different than the requested value of *hgrid* by a specified
-*tolerance*\ . Note that using non-cubic SRD bins can lead to
-undetermined behavior when rotating the velocities of SRD particles,
-hence LAMMPS tries to protect you from this problem.
-
-LAMMPS attempts to set the SRD bin size to exactly *hgrid*\ . However,
-there must be an integer number of bins in each dimension of the
-simulation box. Thus the actual bin size will depend on the size and
-shape of the overall simulation box. The actual bin size is printed
-as part of the SRD output when a simulation begins.
-
-If the actual bin size in non-cubic by an amount exceeding the
-tolerance, an error or warning is printed, depending on the style of
-the *cubic* keyword. Likewise, if the actual bin size differs from
-the requested *hgrid* value by an amount exceeding the tolerance, then
-an error or warning is printed. The *tolerance* is a fractional
-difference. E.g. a tolerance setting of 0.01 on the shape means that
-if the ratio of any 2 bin dimensions exceeds (1 +/- tolerance) then an
-error or warning is generated. Similarly, if the ratio of any bin
-dimension with *hgrid* exceeds (1 +/- tolerance), then an error or
-warning is generated.
-
-.. note::
-
- The fix srd command can be used with simluations the size and/or
- shape of the simulation box changes. This can be due to non-periodic
- boundary conditions or the use of fixes such as the :doc:`fix deform <fix_deform>` or :doc:`fix wall/srd <fix_wall_srd>` commands
- to impose a shear on an SRD fluid or an interaction with an external
- wall. If the box size changes then the size of SRD bins must be
- recalculated every reneighboring. This is not necessary if only the
- box shape changes. This re-binning is always done so as to fit an
- integer number of bins in the current box dimension, whether it be a
- fixed, shrink-wrapped, or periodic boundary, as set by the
- :doc:`boundary <boundary>` command. If the box size or shape changes,
- then the size of the search bins must be recalculated avery
- reneighboring. Note that changing the SRD bin size may alter the
- properties of the SRD fluid, such as its viscosity.
-
-The *shift* keyword determines whether the coordinates of SRD
-particles are randomly shifted when binned for purposes of rotating
-their velocities. When no shifting is performed, SRD particles are
-binned and the velocity distribution of the set of SRD particles in
-each bin is adjusted via a rotation operator. This is a statistically
-valid operation if SRD particles move sufficiently far between
-successive rotations. This is determined by their mean-free path
-lamda. If lamda is less than 0.6 of the SRD bin size, then shifting
-is required. A shift means that all of the SRD particles are shifted
-by a vector whose coordinates are chosen randomly in the range [-1/2
-bin size, 1/2 bin size]. Note that all particles are shifted by the
-same vector. The specified random number *shiftseed* is used to
-generate these vectors. This operation sufficiently randomizes which
-SRD particles are in the same bin, even if lamda is small.
-
-If the *shift* flag is set to *no*\ , then no shifting is performed, but
-bin data will be communicated if bins overlap processor boundaries.
-An error will be generated if lamda < 0.6 of the SRD bin size. If the
-*shift* flag is set to *possible*\ , then shifting is performed only if
-lamda < 0.6 of the SRD bin size. A warning is generated to let you
-know this is occurring. If the *shift* flag is set to *yes* then
-shifting is performed regardless of the magnitude of lamda. Note that
-the *shiftseed* is not used if the *shift* flag is set to *no*\ , but
-must still be specified.
-
-Note that shifting of SRD coordinates requires extra communication,
-hence it should not normally be enabled unless required.
-
-The *tstat* keyword will thermostat the SRD particles to the specified
-*Tsrd*\ . This is done every N timesteps, during the velocity rotation
-operation, by rescaling the thermal velocity of particles in each SRD
-bin to the desired temperature. If there is a streaming velocity
-associated with the system, e.g. due to use of the :doc:`fix deform <fix_deform>` command to perform a simulation undergoing
-shear, then that is also accounted for. The mean velocity of each bin
-of SRD particles is set to the position-dependent streaming velocity,
-based on the coordinates of the center of the SRD bin. Note that
-collisions of SRD particles with big particles or walls has a
-thermostatting effect on the colliding particles, so it may not be
-necessary to thermostat the SRD particles on a bin by bin basis in
-that case. Also note that for streaming simulations, if no
-thermostatting is performed (the default), then it may take a long
-time for the SRD fluid to come to equilibrium with a velocity profile
-that matches the simulation box deformation.
-
-The *rescale* keyword enables rescaling of an SRD particle's velocity
-if it would travel more than 4 mean-free paths in an SRD timestep. If
-an SRD particle exceeds this velocity it is possible it will be lost
-when migrating to other processors or that collisions with big
-particles will be missed, either of which will generate errors. Thus
-the safest mode is to run with rescaling enabled. However rescaling
-removes kinetic energy from the system (the particle's velocity is
-reduced). The latter will not typically be a problem if
-thermostatting is enabled via the *tstat* keyword or if SRD collisions
-with big particles or walls effectively thermostat the system. If you
-wish to turn off rescaling (on is the default), e.g. for a pure SRD
-system with no thermostatting so that the temperature does not decline
-over time, the *rescale* keyword can be used. The *no* value turns
-rescaling off during collisions and the per-bin velocity rotation
-operation. The *collide* and *rotate* values turn it on for
-one of the operations and off for the other.
-
-
-----------
-
-
-.. note::
-
- This fix is normally used for simulations with a huge number of
- SRD particles relative to the number of big particles, e.g. 100 to 1.
- In this scenario, computations that involve only big particles
- (neighbor list creation, communication, time integration) can slow
- down dramatically due to the large number of background SRD particles.
-
-Three other input script commands will largely overcome this effect,
-speeding up an SRD simulation by a significant amount. These are the
-:doc:`atom_modify first <atom_modify>`, :doc:`neigh_modify include <neigh_modify>`, and :doc:`comm_modify group <comm_modify>`
-commands. Each takes a group-ID as an argument, which in this case
-should be the group-ID of the big solute particles.
-
-Additionally, when a :doc:`pair_style <pair_style>` for big/big particle
-interactions is specified, the :doc:`pair_coeff <pair_coeff>` command
-should be used to turn off big/SRD interactions, e.g. by setting their
-epsilon or cutoff length to 0.0.
-
-The "delete_atoms overlap" command may be useful in setting up an SRD
-simulation to insure there are no initial overlaps between big and SRD
-particles.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix tabulates several SRD statistics which are stored in a vector
-of length 12, which can be accessed by various :ref:`output commands <howto_15>`. The vector values calculated
-by this fix are "intensive", meaning they do not scale with the size
-of the simulation. Technically, the first 8 do scale with the size of
-the simulation, but treating them as intensive means they are not
-scaled when printed as part of thermodyanmic output.
-
-These are the 12 quantities. All are values for the current timestep,
-except for quantity 5 and the last three, each of which are
-cummulative quantities since the beginning of the run.
-
-* (1) # of SRD/big collision checks performed
-* (2) # of SRDs which had a collision
-* (3) # of SRD/big colllisions (including multiple bounces)
-* (4) # of SRD particles inside a big particle
-* (5) # of SRD particles whose velocity was rescaled to be < Vmax
-* (6) # of bins for collision searching
-* (7) # of bins for SRD velocity rotation
-* (8) # of bins in which SRD temperature was computed
-* (9) SRD temperature
-* (10) # of SRD particles which have undergone max # of bounces
-* (11) max # of bounces any SRD particle has had in a single step
-* (12) # of reneighborings due to SRD particles moving too far
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This command can only be used if LAMMPS was built with the SRD
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix wall/srd <fix_wall_srd>`
-
-Default
-"""""""
-
-The option defaults are lamda inferred from Tsrd, collision = noslip,
-overlap = no, inside = error, exact = yes, radius = 1.0, bounce = 0,
-search = hgrid, cubic = error 0.01, shift = no, tstat = no, and
-rescale = yes.
-
-
-----------
-
-
-.. _Hecht:
-
-
-
-**(Hecht)** Hecht, Harting, Ihle, Herrmann, Phys Rev E, 72, 011408 (2005).
-
-.. _Petersen:
-
-
-
-**(Petersen)** Petersen, Lechman, Plimpton, Grest, in' t Veld, Schunk, J
-Chem Phys, 132, 174106 (2010).
-
-.. _Lechman:
-
-
-
-**(Lechman)** Lechman, et al, in preparation (2010).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_store_force.txt b/doc/html/_sources/fix_store_force.txt
deleted file mode 100644
index f86d7b123..000000000
--- a/doc/html/_sources/fix_store_force.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-.. index:: fix store/force
-
-fix store/force command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID store/force
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* store/force = style name of this fix command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all store/force
-
-Description
-"""""""""""
-
-Store the forces on atoms in the group at the point during each
-timestep when the fix is invoked, as described below. This is useful
-for storing forces before constraints or other boundary conditions are
-computed which modify the forces, so that unmodified forces can be
-:doc:`written to a dump file <dump>` or accessed by other :ref:`output commands <howto_15>` that use per-atom quantities.
-
-This fix is invoked at the point in the velocity-Verlet timestepping
-immediately after :doc:`pair <pair_style>`, :doc:`bond <bond_style>`,
-:doc:`angle <angle_style>`, :doc:`dihedral <dihedral_style>`,
-:doc:`improper <improper_style>`, and :doc:`long-range <kspace_style>`
-forces have been calculated. It is the point in the timestep when
-various fixes that compute constraint forces are calculated and
-potentially modify the force on each atom. Examples of such fixes are
-:doc:`fix shake <fix_shake>`, :doc:`fix wall <fix_wall>`, and :doc:`fix indent <fix_indent>`.
-
-.. note::
-
- The order in which various fixes are applied which operate at
- the same point during the timestep, is the same as the order they are
- specified in the input script. Thus normally, if you want to store
- per-atom forces due to force field interactions, before constraints
- are applied, you should list this fix first within that set of fixes,
- i.e. before other fixes that apply constraints. However, if you wish
- to include certain constraints (e.g. fix shake) in the stored force,
- then it could be specified after some fixes and before others.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix produces a per-atom array which can be accessed by various
-:ref:`output commands <howto_15>`. The number of columns
-for each atom is 3, and the columns store the x,y,z forces on each
-atom. The per-atom values be accessed on any timestep.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix store_state <fix_store_state>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_store_state.txt b/doc/html/_sources/fix_store_state.txt
deleted file mode 100644
index 4b8ad05c8..000000000
--- a/doc/html/_sources/fix_store_state.txt
+++ /dev/null
@@ -1,145 +0,0 @@
-.. index:: fix store/state
-
-fix store/state command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID store/state N input1 input2 ... keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* store/state = style name of this fix command
-* N = store atom attributes every N steps, N = 0 for initial store only
-* input = one or more atom attributes
-.. parsed-literal::
-
- possible attributes = id, mol, type, mass,
- x, y, z, xs, ys, zs, xu, yu, zu, xsu, ysu, zsu, ix, iy, iz,
- vx, vy, vz, fx, fy, fz,
- q, mux, muy, muz, mu,
- radius, diameter, omegax, omegay, omegaz,
- angmomx, angmomy, angmomz, tqx, tqy, tqz,
- c_ID, c_ID[N], f_ID, f_ID[N], v_name,
- d_name, i_name
-
-.. parsed-literal::
-
- id = atom ID
- mol = molecule ID
- type = atom type
- mass = atom mass
- x,y,z = unscaled atom coordinates
- xs,ys,zs = scaled atom coordinates
- xu,yu,zu = unwrapped atom coordinates
- xsu,ysu,zsu = scaled unwrapped atom coordinates
- ix,iy,iz = box image that the atom is in
- vx,vy,vz = atom velocities
- fx,fy,fz = forces on atoms
- q = atom charge
- mux,muy,muz = orientation of dipolar atom
- mu = magnitued of dipole moment of atom
- radius,diameter = radius.diameter of spherical particle
- omegax,omegay,omegaz = angular velocity of spherical particle
- angmomx,angmomy,angmomz = angular momentum of aspherical particle
- tqx,tqy,tqz = torque on finite-size particles
- c_ID = per-atom vector calculated by a compute with ID
- c_ID[I] = Ith column of per-atom array calculated by a compute with ID
- f_ID = per-atom vector calculated by a fix with ID
- f_ID[I] = Ith column of per-atom array calculated by a fix with ID
- v_name = per-atom vector calculated by an atom-style variable with name
- d_name = per-atom floating point vector name, managed by fix property/atom
- i_name = per-atom integer vector name, managed by fix property/atom
-
-* zero or more keyword/value pairs may be appended
-* keyword = *com*
-.. parsed-literal::
-
- *com* value = *yes* or *no*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all store/state 0 x y z
- fix 1 all store/state 0 xu yu zu com yes
- fix 2 all store/state 1000 vx vy vz
-
-Description
-"""""""""""
-
-Define a fix that stores attributes for each atom in the group at the
-time the fix is defined. If *N* is 0, then the values are never
-updated, so this is a way of archiving an atom attribute at a given
-time for future use in a calculation or output. See the discussion of
-:ref:`output commands <howto_15>` that take fixes as
-inputs.
-
-If *N* is not zero, then the attributes will be updated every *N*
-steps.
-
-.. note::
-
- Actually, only atom attributes specified by keywords like *xu*
- or *vy* or *radius* are initially stored immediately at the point in
- your input script when the fix is defined. Attributes specified by a
- compute, fix, or variable are not initially stored until the first run
- following the fix definition begins. This is because calculating
- those attributes may require quantities that are not defined in
- between runs.
-
-The list of possible attributes is the same as that used by the :doc:`dump custom <dump>` command, which describes their meaning.
-
-If the *com* keyword is set to *yes* then the *xu*\ , *yu*\ , and *zu*
-inputs store the position of each atom relative to the center-of-mass
-of the group of atoms, instead of storing the absolute position.
-
-The requested values are stored in a per-atom vector or array as
-discussed below. Zeroes are stored for atoms not in the specified
-group.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the per-atom values it stores to :doc:`binary restart files <restart>`, so that the values can be restored when a
-simulation is restarted. See the :doc:`read_restart <read_restart>`
-command for info on how to re-specify a fix in an input script that
-reads a restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix.
-
-If a single input is specified, this fix produces a per-atom vector.
-If multiple inputs are specified, a per-atom array is produced where
-the number of columns for each atom is the number of inputs. These
-can be accessed by various :ref:`output commands <howto_15>`. The per-atom values be
-accessed on any timestep.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump custom <dump>`, :doc:`compute property/atom <compute_property_atom>`,
-:doc:`fix property/atom <fix_property_atom>`, :doc:`variable <variable>`
-
-Default
-"""""""
-
-The option default is com = no.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_temp_berendsen.txt b/doc/html/_sources/fix_temp_berendsen.txt
deleted file mode 100644
index 2db301d22..000000000
--- a/doc/html/_sources/fix_temp_berendsen.txt
+++ /dev/null
@@ -1,175 +0,0 @@
-.. index:: fix temp/berendsen
-
-fix temp/berendsen command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID temp/berendsen Tstart Tstop Tdamp
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* temp/berendsen = style name of this fix command
-* Tstart,Tstop = desired temperature at start/end of run
-.. parsed-literal::
-
- Tstart can be a variable (see below)
-
-* Tdamp = temperature damping parameter (time units)
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all temp/berendsen 300.0 300.0 100.0
-
-Description
-"""""""""""
-
-Reset the temperature of a group of atoms by using a Berendsen
-thermostat :ref:`(Berendsen) <Berendsen>`, which rescales their velocities
-every timestep.
-
-The thermostat is applied to only the translational degrees of freedom
-for the particles, which is an important consideration for finite-size
-particles which have rotational degrees of freedom are being
-thermostatted with this fix. The translational degrees of freedom can
-also have a bias velocity removed from them before thermostatting
-takes place; see the description below.
-
-The desired temperature at each timestep is a ramped value during the
-run from *Tstart* to *Tstop*\ . The *Tdamp* parameter is specified in
-time units and determines how rapidly the temperature is relaxed. For
-example, a value of 100.0 means to relax the temperature in a timespan
-of (roughly) 100 time units (tau or fmsec or psec - see the
-:doc:`units <units>` command).
-
-*Tstart* can be specified as an equal-style :doc:`variable <variable>`.
-In this case, the *Tstop* setting is ignored. If the value is a
-variable, it should be specified as v_name, where name is the variable
-name. In this case, the variable will be evaluated each timestep, and
-its value used to determine the target temperature.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent temperature.
-
-.. note::
-
- Unlike the :doc:`fix nvt <fix_nh>` command which performs
- Nose/Hoover thermostatting AND time integration, this fix does NOT
- perform time integration. It only modifies velocities to effect
- thermostatting. Thus you must use a separate time integration fix,
- like :doc:`fix nve <fix_nve>` to actually update the positions of atoms
- using the modified velocities. Likewise, this fix should not normally
- be used on atoms that also have their temperature controlled by
- another fix - e.g. by :doc:`fix nvt <fix_nh>` or :doc:`fix langevin <fix_langevin>` commands.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-This fix computes a temperature each timestep. To do this, the fix
-creates its own compute of style "temp", as if this command had been
-issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp
-
-See the :doc:`compute temp <compute_temp>` command for details. Note
-that the ID of the new compute is the fix-ID + underscore + "temp",
-and the group for the new compute is the same as the fix group.
-
-Note that this is NOT the compute used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*\ .
-This means you can change the attributes of this fix's temperature
-(e.g. its degrees-of-freedom) via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* will have no
-effect on this fix.
-
-Like other fixes that perform thermostatting, this fix can be used
-with :doc:`compute commands <compute>` that calculate a temperature
-after removing a "bias" from the atom velocities. E.g. removing the
-center-of-mass velocity from a group of atoms or only calculating
-temperature on the x-component of velocity or only calculating
-temperature for atoms in a geometric region. This is not done by
-default, but only if the :doc:`fix_modify <fix_modify>` command is used
-to assign a temperature compute to this fix that includes such a bias
-term. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias. In
-this case, the thermostat works in the following manner: the current
-temperature is calculated taking the bias into account, bias is
-removed from each atom, thermostatting is performed on the remaining
-thermal degrees of freedom, and the bias is added back in.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a temperature :doc:`compute <compute>`
-you have defined to this fix which will be used in its thermostatting
-procedure, as described above. For consistency, the group used by
-this fix and by the compute should be the same.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change implied by a velocity rescaling to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-cummulative energy change due to this fix. The scalar value
-calculated by this fix is "extensive".
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix can be used with dynamic groups as defined by the
-:doc:`group <group>` command. Likewise it can be used with groups to
-which atoms are added or deleted over time, e.g. a deposition
-simulation. However, the conservation properties of the thermostat
-and barostat are defined for systems with a static set of atoms. You
-may observe odd behavior if the atoms in a group vary dramatically
-over time or the atom count becomes very small.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix langevin <fix_langevin>`,
-:doc:`fix_modify <fix_modify>`, :doc:`compute temp <compute_temp>`,
-:doc:`fix press/berendsen <fix_press_berendsen>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Berendsen:
-
-
-
-**(Berendsen)** Berendsen, Postma, van Gunsteren, DiNola, Haak, J Chem
-Phys, 81, 3684 (1984).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_temp_csvr.txt b/doc/html/_sources/fix_temp_csvr.txt
deleted file mode 100644
index b5235bdca..000000000
--- a/doc/html/_sources/fix_temp_csvr.txt
+++ /dev/null
@@ -1,197 +0,0 @@
-.. index:: fix temp/csvr
-
-fix temp/csvr command
-=====================
-
-fix temp/csld command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID temp/csvr Tstart Tstop Tdamp seed
-
-.. parsed-literal::
-
- fix ID group-ID temp/csld Tstart Tstop Tdamp seed
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* temp/csvr or temp/csld = style name of this fix command
-* Tstart,Tstop = desired temperature at start/end of run
-.. parsed-literal::
-
- Tstart can be a variable (see below)
-
-* Tdamp = temperature damping parameter (time units)
-* seed = random number seed to use for white noise (positive integer)
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all temp/csvr 300.0 300.0 100.0 54324
-
-.. parsed-literal::
-
- fix 1 all temp/csld 100.0 300.0 10.0 123321
-
-Description
-"""""""""""
-
-Adjust the temperature with a canonical sampling thermostat that uses
-global velocity rescaling with Hamiltonian dynamics (\ *temp/csvr*\ )
-:ref:`(Bussi1) <Bussi1>`, or Langevin dynamics (\ *temp/csld*\ )
-:ref:`(Bussi2) <Bussi2>`. In the case of *temp/csvr* the thermostat is
-similar to the empirical Berendsen thermostat in
-:doc:`temp/berendsen <fix_temp_berendsen>`, but chooses the actual
-scaling factor from a suitably chosen (gaussian) distribution rather
-than having it determined from the time constant directly. In the case
-of *temp/csld* the velocities are updated to a linear combination of
-the current velocities with a gaussian distribution of velocities at
-the desired temperature. Both termostats are applied every timestep.
-
-The thermostat is applied to only the translational degrees of freedom
-for the particles, which is an important consideration for finite-size
-particles which have rotational degrees of freedom are being
-thermostatted with these fixes. The translational degrees of freedom
-can also have a bias velocity removed from them before thermostatting
-takes place; see the description below.
-
-The desired temperature at each timestep is a ramped value during the
-run from *Tstart* to *Tstop*\ . The *Tdamp* parameter is specified in
-time units and determines how rapidly the temperature is relaxed. For
-example, a value of 100.0 means to relax the temperature in a timespan
-of (roughly) 100 time units (tau or fmsec or psec - see the
-:doc:`units <units>` command).
-
-*Tstart* can be specified as an equal-style :doc:`variable <variable>`.
-In this case, the *Tstop* setting is ignored. If the value is a
-variable, it should be specified as v_name, where name is the variable
-name. In this case, the variable will be evaluated each timestep, and
-its value used to determine the target temperature.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent temperature.
-
-.. note::
-
- Unlike the :doc:`fix nvt <fix_nh>` command which performs
- Nose/Hoover thermostatting AND time integration, these fixes do NOT
- perform time integration. They only modify velocities to effect
- thermostatting. Thus you must use a separate time integration fix,
- like :doc:`fix nve <fix_nve>` to actually update the positions of atoms
- using the modified velocities. Likewise, these fixes should not
- normally be used on atoms that also have their temperature controlled
- by another fix - e.g. by :doc:`fix nvt <fix_nh>` or :doc:`fix langevin <fix_langevin>` commands.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-These fixes compute a temperature each timestep. To do this, the fix
-creates its own compute of style "temp", as if this command had been
-issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp
-
-See the :doc:`compute temp <compute_temp>` command for details. Note
-that the ID of the new compute is the fix-ID + underscore + "temp",
-and the group for the new compute is the same as the fix group.
-
-Note that this is NOT the compute used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*\ .
-This means you can change the attributes of this fix's temperature
-(e.g. its degrees-of-freedom) via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* will have no
-effect on this fix.
-
-Like other fixes that perform thermostatting, these fixes can be used
-with :doc:`compute commands <compute>` that calculate a temperature
-after removing a "bias" from the atom velocities. E.g. removing the
-center-of-mass velocity from a group of atoms or only calculating
-temperature on the x-component of velocity or only calculating
-temperature for atoms in a geometric region. This is not done by
-default, but only if the :doc:`fix_modify <fix_modify>` command is used
-to assign a temperature compute to this fix that includes such a bias
-term. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias. In
-this case, the thermostat works in the following manner: the current
-temperature is calculated taking the bias into account, bias is
-removed from each atom, thermostatting is performed on the remaining
-thermal degrees of freedom, and the bias is added back in.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about these fixes are written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by these
-fixes. You can use it to assign a temperature :doc:`compute <compute>`
-you have defined to these fixes which will be used in its thermostatting
-procedure, as described above. For consistency, the group used by
-these fixes and by the compute should be the same.
-
-These fixes can ramp its target temperature over multiple runs, using
-the *start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-These fixes are not invoked during :doc:`energy minimization <minimize>`.
-
-These fixes compute a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-cummulative energy change due to the fix. The scalar value
-calculated by this fix is "extensive".
-
-Restrictions
-""""""""""""
-
-
-These fixes are not compatible with :doc:`fix shake <fix_shake>`.
-
-The fix can be used with dynamic groups as defined by the
-:doc:`group <group>` command. Likewise it can be used with groups to
-which atoms are added or deleted over time, e.g. a deposition
-simulation. However, the conservation properties of the thermostat
-and barostat are defined for systems with a static set of atoms. You
-may observe odd behavior if the atoms in a group vary dramatically
-over time or the atom count becomes very small.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix nve <fix_nve>`, :doc:`fix nvt <fix_nh>`, :doc:`fix temp/rescale <fix_temp_rescale>`, :doc:`fix langevin <fix_langevin>`,
-:doc:`fix_modify <fix_modify>`, :doc:`compute temp <compute_temp>`,
-:doc:`fix temp/berendsen <fix_temp_berendsen>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Bussi1:
-
-
-
-.. _Bussi2:
-
-**(Bussi1)** Bussi, Donadio and Parrinello, J. Chem. Phys. 126, 014101(2007)
-
-
-**(Bussi2)** Bussi and Parrinello, Phys. Rev. E 75, 056707 (2007)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_temp_rescale.txt b/doc/html/_sources/fix_temp_rescale.txt
deleted file mode 100644
index ee2fbf483..000000000
--- a/doc/html/_sources/fix_temp_rescale.txt
+++ /dev/null
@@ -1,162 +0,0 @@
-.. index:: fix temp/rescale
-
-fix temp/rescale command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID temp/rescale N Tstart Tstop window fraction
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* temp/rescale = style name of this fix command
-* N = perform rescaling every N steps
-* Tstart,Tstop = desired temperature at start/end of run (temperature units)
-.. parsed-literal::
-
- Tstart can be a variable (see below)
-
-* window = only rescale if temperature is outside this window (temperature units)
-* fraction = rescale to target temperature by this fraction
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 3 flow temp/rescale 100 1.0 1.1 0.02 0.5
- fix 3 boundary temp/rescale 1 1.0 1.5 0.05 1.0
- fix 3 boundary temp/rescale 1 1.0 1.5 0.05 1.0
-
-Description
-"""""""""""
-
-Reset the temperature of a group of atoms by explicitly rescaling
-their velocities.
-
-The rescaling is applied to only the translational degrees of freedom
-for the particles, which is an important consideration if finite-size
-particles which have rotational degrees of freedom are being
-thermostatted with this fix. The translational degrees of freedom can
-also have a bias velocity removed from them before thermostatting
-takes place; see the description below.
-
-Rescaling is performed every N timesteps. The target temperature is a
-ramped value between the *Tstart* and *Tstop* temperatures at the
-beginning and end of the run.
-
-*Tstart* can be specified as an equal-style :doc:`variable <variable>`.
-In this case, the *Tstop* setting is ignored. If the value is a
-variable, it should be specified as v_name, where name is the variable
-name. In this case, the variable will be evaluated each timestep, and
-its value used to determine the target temperature.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent temperature.
-
-Rescaling is only performed if the difference between the current and
-desired temperatures is greater than the *window* value. The amount
-of rescaling that is applied is a *fraction* (from 0.0 to 1.0) of the
-difference between the actual and desired temperature. E.g. if
-*fraction* = 1.0, the temperature is reset to exactly the desired
-value.
-
-.. note::
-
- Unlike the :doc:`fix nvt <fix_nh>` command which performs
- Nose/Hoover thermostatting AND time integration, this fix does NOT
- perform time integration. It only modifies velocities to effect
- thermostatting. Thus you must use a separate time integration fix,
- like :doc:`fix nve <fix_nve>` to actually update the positions of atoms
- using the modified velocities. Likewise, this fix should not normally
- be used on atoms that also have their temperature controlled by
- another fix - e.g. by :doc:`fix nvt <fix_nh>` or :doc:`fix langevin <fix_langevin>` commands.
-
-See :ref:`this howto section <howto_16>` of the manual for
-a discussion of different ways to compute temperature and perform
-thermostatting.
-
-This fix computes a temperature each timestep. To do this, the fix
-creates its own compute of style "temp", as if one of this command had
-been issued:
-
-.. parsed-literal::
-
- compute fix-ID_temp group-ID temp
-
-See the :doc:`compute temp <compute_temp>` for details. Note that the
-ID of the new compute is the fix-ID + underscore + "temp", and the
-group for the new compute is the same as the fix group.
-
-Note that this is NOT the compute used by thermodynamic output (see
-the :doc:`thermo_style <thermo_style>` command) with ID = *thermo_temp*\ .
-This means you can change the attributes of this fix's temperature
-(e.g. its degrees-of-freedom) via the
-:doc:`compute_modify <compute_modify>` command or print this temperature
-during thermodynamic output via the :doc:`thermo_style custom <thermo_style>` command using the appropriate compute-ID.
-It also means that changing attributes of *thermo_temp* will have no
-effect on this fix.
-
-Like other fixes that perform thermostatting, this fix can be used
-with :doc:`compute commands <compute>` that calculate a temperature
-after removing a "bias" from the atom velocities. E.g. removing the
-center-of-mass velocity from a group of atoms or only calculating
-temperature on the x-component of velocity or only calculating
-temperature for atoms in a geometric region. This is not done by
-default, but only if the :doc:`fix_modify <fix_modify>` command is used
-to assign a temperature compute to this fix that includes such a bias
-term. See the doc pages for individual :doc:`compute commands <compute>` to determine which ones include a bias. In
-this case, the thermostat works in the following manner: the current
-temperature is calculated taking the bias into account, bias is
-removed from each atom, thermostatting is performed on the remaining
-thermal degrees of freedom, and the bias is added back in.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a temperature :doc:`compute <compute>`
-you have defined to this fix which will be used in its thermostatting
-procedure, as described above. For consistency, the group used by
-this fix and by the compute should be the same.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change implied by a velocity rescaling to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-cummulative energy change due to this fix. The scalar value
-calculated by this fix is "extensive".
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix langevin <fix_langevin>`, :doc:`fix nvt <fix_nh>`,
-:doc:`fix_modify <fix_modify>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_temp_rescale_eff.txt b/doc/html/_sources/fix_temp_rescale_eff.txt
deleted file mode 100644
index 400b4df3e..000000000
--- a/doc/html/_sources/fix_temp_rescale_eff.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-.. index:: fix temp/rescale/eff
-
-fix temp/rescale/eff command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID temp/rescale/eff N Tstart Tstop window fraction
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* temp/rescale/eff = style name of this fix command
-* N = perform rescaling every N steps
-* Tstart,Tstop = desired temperature at start/end of run (temperature units)
-* window = only rescale if temperature is outside this window (temperature units)
-* fraction = rescale to target temperature by this fraction
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 3 flow temp/rescale/eff 10 1.0 100.0 0.02 1.0
-
-Description
-"""""""""""
-
-Reset the temperature of a group of nuclei and electrons in the
-:doc:`electron force field <pair_eff>` model by explicitly rescaling
-their velocities.
-
-The operation of this fix is exactly like that described by the :doc:`fix temp/rescale <fix_temp_rescale>` command, except that the rescaling
-is also applied to the radial electron velocity for electron
-particles.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
-fix. You can use it to assign a temperature :doc:`compute <compute>`
-you have defined to this fix which will be used in its thermostatting
-procedure, as described above. For consistency, the group used by
-this fix and by the compute should be the same.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy change implied by a velocity rescaling to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-cummulative energy change due to this fix. The scalar value
-calculated by this fix is "extensive".
-
-This fix can ramp its target temperature over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-EFF package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix langevin/eff <fix_langevin_eff>`, :doc:`fix nvt/eff <fix_nh_eff>`, :doc:`fix_modify <fix_modify>`,
-:doc:`fix temp rescale <fix_temp_rescale>`,
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_tfmc.txt b/doc/html/_sources/fix_tfmc.txt
deleted file mode 100644
index 770911438..000000000
--- a/doc/html/_sources/fix_tfmc.txt
+++ /dev/null
@@ -1,178 +0,0 @@
-.. index:: fix tfmc
-
-fix tfmc command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID tfmc Delta Temp seed keyword value
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* tfmc = style name of this fix command
-* Delta = maximal displacement length (distance units)
-* Temp = imposed temperature of the system
-* seed = random number seed (positive integer)
-* zero or more keyword/arg pairs may be appended
-* keyword = *com* or *rot*
-.. parsed-literal::
-
- *com* args = xflag yflag zflag
- xflag,yflag,zflag = 0/1 to exclude/include each dimension
- *rot* args = none
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all tfmc 0.1 1000.0 159345
- fix 1 all tfmc 0.05 600.0 658943 com 1 1 0
- fix 1 all tfmc 0.1 750.0 387068 com 1 1 1 rot
-
-Description
-"""""""""""
-
-Perform uniform-acceptance force-bias Monte Carlo (fbMC) simulations,
-using the time-stamped force-bias Monte Carlo (tfMC) algorithm
-described in :ref:`(Mees) <Mees>` and :ref:`(Bal) <Bal>`.
-
-One successful use case of force-bias Monte Carlo methods is that they
-can be used to extend the time scale of atomistic simulations, in
-particular when long time scale relaxation effects must be considered;
-some interesting examples are given in the review by :ref:`(Neyts) <Neyts>`.
-An example of a typical use case would be the modelling of chemical
-vapour deposition (CVD) processes on a surface, in which impacts by
-gas-phase species can be performed using MD, but subsequent relaxation
-of the surface is too slow to be done using MD only. Using tfMC can
-allow for a much faster relaxation of the surface, so that higher
-fluxes can be used, effectively extending the time scale of the
-simulation. (Such an alternating simulation approach could be set up
-using a :doc:`loop <jump>`.)
-
-The initial version of tfMC algorithm in :ref:`(Mees) <Mees>` contained an
-estimation of the effective time scale of such a simulation, but it
-was later shown that the speed-up one can gain from a tfMC simulation
-is system- and process-dependent, ranging from none to several orders
-of magnitude. In general, solid-state processes such as
-(re)crystallisation or growth can be accelerated by up to two or three
-orders of magnitude, whereas diffusion in the liquid phase is not
-accelerated at all. The observed pseudodynamics when using the tfMC
-method is not the actual dynamics one would obtain using MD, but the
-relative importance of processes can match the actual relative
-dynamics of the system quite well, provided *Delta* is chosen with
-care. Thus, the system's equilibrium is reached faster than in MD,
-along a path that is generally roughly similar to a typical MD
-simulation (but not necessarily so). See :ref:`(Bal) <Bal>` for details.
-
-Each step, all atoms in the selected group are displaced using the
-stochastic tfMC algorithm, which is designed to sample the canonical
-(NVT) ensemble at the temperature *Temp*\ . Although tfMC is a Monte
-Carlo algorithm and thus strictly speaking does not perform time
-integration, it is similar in the sense that it uses the forces on all
-atoms in order to update their positions. Therefore, it is implemented
-as a time integration fix, and no other fixes of this type (such as
-:doc:`fix nve <fix_nve>`) should be used at the same time. Because
-velocities do not play a role in this kind of Monte Carlo simulations,
-instantaneous temperatures as calculated by :doc:`temperature computes <compute_temp>` or :doc:`thermodynamic output <thermo_style>` have no meaning: the only relevant
-temperature is the sampling temperature *Temp*\ . Similarly, performing
-tfMC simulations does not require setting a :doc:`timestep <timestep>`
-and the :doc:`simulated time <thermo_style>` as calculated by LAMMPS is
-meaningless.
-
-The critical parameter determining the success of a tfMC simulation is
-*Delta*\ , the maximal displacement length of the lightest element in
-the system: the larger it is, the longer the effective time scale of
-the simulation will be (there is an approximately quadratic
-dependence). However, *Delta* must also be chosen sufficiently small
-in order to comply with detailed balance; in general values between 5
-and 10 % of the nearest neighbor distance are found to be a good
-choice. For a more extensive discussion with specific examples, please
-refer to :ref:`(Bal) <Bal>`, which also describes how the code calculates
-element-specific maximal displacements from *Delta*\ , based on the
-fourth root of their mass.
-
-Because of the uncorrelated movements of the atoms, the center-of-mass
-of the fix group will not necessarily be stationary, just like its
-orientation. When the *com* keyword is used, all atom positions will
-be shifted (after every tfMC iteration) in order to fix the position
-of the center-of-mass along the included directions, by setting the
-corresponding flag to 1. The *rot* keyword does the same for the
-rotational component of the tfMC displacements after every iteration.
-
-.. note::
-
- the *com* and *rot* keywords should not be used if an external
- force is acting on the specified fix group, along the included
- directions. This can be either a true external force (e.g. through
- :doc:`fix wall <fix_wall>`) or forces due to the interaction with atoms
- not included in the fix group. This is because in such cases,
- translations or rotations of the fix group could be induced by these
- external forces, and removing them will lead to a violation of
- detailed balance.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MC package. It is only enabled if LAMMPS was
-built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This fix is not compatible with :doc:`fix shake <fix_shake>`.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix gcmc <fix_gcmc>`, :doc:`fix nvt <fix_nh>`
-
-Default
-"""""""
-
-The option default is com = 0 0 0
-
-
-----------
-
-
-.. _Bal:
-
-
-
-**(Bal)** K. M Bal and E. C. Neyts, J. Chem. Phys. 141, 204104 (2014).
-
-.. _Mees:
-
-
-
-**(Mees)** M. J. Mees, G. Pourtois, E. C. Neyts, B. J. Thijsse, and
-A. Stesmans, Phys. Rev. B 85, 134301 (2012).
-
-.. _Neyts:
-
-
-
-**(Neyts)** E. C. Neyts and A. Bogaerts, Theor. Chem. Acc. 132, 1320
-(2013).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_thermal_conductivity.txt b/doc/html/_sources/fix_thermal_conductivity.txt
deleted file mode 100644
index ae30853a3..000000000
--- a/doc/html/_sources/fix_thermal_conductivity.txt
+++ /dev/null
@@ -1,185 +0,0 @@
-.. index:: fix thermal/conductivity
-
-fix thermal/conductivity command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID thermal/conductivity N edim Nbin keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* thermal/conductivity = style name of this fix command
-* N = perform kinetic energy exchange every N steps
-* edim = *x* or *y* or *z* = direction of kinetic energy transfer
-* Nbin = # of layers in edim direction (must be even number)
-* zero or more keyword/value pairs may be appended
-* keyword = *swap*
-.. parsed-literal::
-
- *swap* value = Nswap = number of swaps to perform every N steps
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all thermal/conductivity 100 z 20
- fix 1 all thermal/conductivity 50 z 20 swap 2
-
-Description
-"""""""""""
-
-Use the Muller-Plathe algorithm described in :ref:`this paper <Muller-Plathe>` to exchange kinetic energy between two particles
-in different regions of the simulation box every N steps. This
-induces a temperature gradient in the system. As described below this
-enables the thermal conductivity of a material to be calculated. This
-algorithm is sometimes called a reverse non-equilibrium MD (reverse
-NEMD) approach to computing thermal conductivity. This is because the
-usual NEMD approach is to impose a temperature gradient on the system
-and measure the response as the resulting heat flux. In the
-Muller-Plathe method, the heat flux is imposed, and the temperature
-gradient is the system's response.
-
-See the :doc:`compute heat/flux <compute_heat_flux>` command for details
-on how to compute thermal conductivity in an alternate way, via the
-Green-Kubo formalism.
-
-The simulation box is divided into *Nbin* layers in the *edim*
-direction, where the layer 1 is at the low end of that dimension and
-the layer *Nbin* is at the high end. Every N steps, Nswap pairs of
-atoms are chosen in the following manner. Only atoms in the fix group
-are considered. The hottest Nswap atoms in layer 1 are selected.
-Similarly, the coldest Nswap atoms in the "middle" layer (see below)
-are selected. The two sets of Nswap atoms are paired up and their
-velocities are exchanged. This effectively swaps their kinetic
-energies, assuming their masses are the same. If the masses are
-different, an exchange of velocities relative to center of mass motion
-of the 2 atoms is performed, to conserve kinetic energy. Over time,
-this induces a temperature gradient in the system which can be
-measured using commands such as the following, which writes the
-temperature profile (assuming z = edim) to the file tmp.profile:
-
-.. parsed-literal::
-
- compute ke all ke/atom
- variable temp atom c_ke/1.5
- compute layers all chunk/atom bin/1d z lower 0.05 units reduced
- fix 3 all ave/chunk 10 100 1000 layers v_temp file tmp.profile
-
-Note that by default, Nswap = 1, though this can be changed by the
-optional *swap* keyword. Setting this parameter appropriately, in
-conjunction with the swap rate N, allows the heat flux to be adjusted
-across a wide range of values, and the kinetic energy to be exchanged
-in large chunks or more smoothly.
-
-The "middle" layer for velocity swapping is defined as the *Nbin*\ /2 +
-1 layer. Thus if *Nbin* = 20, the two swapping layers are 1 and 11.
-This should lead to a symmetric temperature profile since the two
-layers are separated by the same distance in both directions in a
-periodic sense. This is why *Nbin* is restricted to being an even
-number.
-
-As described below, the total kinetic energy transferred by these
-swaps is computed by the fix and can be output. Dividing this
-quantity by time and the cross-sectional area of the simulation box
-yields a heat flux. The ratio of heat flux to the slope of the
-temperature profile is proportional to the thermal conductivity of the
-fluid, in appropriate units. See the :ref:`Muller-Plathe paper <Muller-Plathe>` for details.
-
-.. note::
-
- If your system is periodic in the direction of the heat flux,
- then the flux is going in 2 directions. This means the effective heat
- flux in one direction is reduced by a factor of 2. You will see this
- in the equations for thermal conductivity (kappa) in the Muller-Plathe
- paper. LAMMPS is simply tallying kinetic energy which does not
- account for whether or not your system is periodic; you must use the
- value appropriately to yield a kappa for your system.
-
-.. note::
-
- After equilibration, if the temperature gradient you observe is
- not linear, then you are likely swapping energy too frequently and are
- not in a regime of linear response. In this case you cannot
- accurately infer a thermal conductivity and should try increasing the
- Nevery parameter.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-cummulative kinetic energy transferred between the bottom and middle
-of the simulation box (in the *edim* direction) is stored as a scalar
-quantity by this fix. This quantity is zeroed when the fix is defined
-and accumlates thereafter, once every N steps. The units of the
-quantity are energy; see the :doc:`units <units>` command for details.
-The scalar value calculated by this fix is "intensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MISC package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Swaps conserve both momentum and kinetic energy, even if the masses of
-the swapped atoms are not equal. Thus you should not need to
-thermostat the system. If you do use a thermostat, you may want to
-apply it only to the non-swapped dimensions (other than *vdim*\ ).
-
-LAMMPS does not check, but you should not use this fix to swap the
-kinetic energy of atoms that are in constrained molecules, e.g. via
-:doc:`fix shake <fix_shake>` or :doc:`fix rigid <fix_rigid>`. This is
-because application of the constraints will alter the amount of
-transferred momentum. You should, however, be able to use flexible
-molecules. See the :ref:`Zhang paper <Zhang>` for a discussion and results
-of this idea.
-
-When running a simulation with large, massive particles or molecules
-in a background solvent, you may want to only exchange kinetic energy
-bewteen solvent particles.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix ehex <fix_ehex>`, :doc:`fix heat <fix_heat>`, :doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix viscosity <fix_viscosity>`,
-:doc:`compute heat/flux <compute_heat_flux>`
-
-Default
-"""""""
-
-The option defaults are swap = 1.
-
-
-----------
-
-
-.. _Muller-Plathe:
-
-
-
-**(Muller-Plathe)** Muller-Plathe, J Chem Phys, 106, 6082 (1997).
-
-.. _Zhang:
-
-
-
-**(Zhang)** Zhang, Lussetti, de Souza, Muller-Plathe, J Phys Chem B,
-109, 15060-15067 (2005).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_ti_rs.txt b/doc/html/_sources/fix_ti_rs.txt
deleted file mode 100644
index 6dba37585..000000000
--- a/doc/html/_sources/fix_ti_rs.txt
+++ /dev/null
@@ -1,172 +0,0 @@
-.. index:: fix ti/rs
-
-fix ti/rs command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID ti/rs lambda_initial lambda_final t_switch t_equil keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* ti/rs = style name of this fix command
-* lambda_initial/lambda_final = initial/final values of the coupling parameter
-* t_switch/t_equil = number of steps of the switching/equilibration procedure
-* keyword = *function*
-.. parsed-literal::
-
- *function* value = function-ID
- function-ID = ID of the switching function (1, 2 or 3)
-
-
-
-**Example:**
-
-.. parsed-literal::
-
- fix ref all ti/rs 50.0 2000 1000
- fix vf vacancy ti/rs 10.0 70000 50000 function 2
-
-Description
-"""""""""""
-
-This fix allows you to compute the free energy temperature dependence
-by performing a thermodynamic integration procedure known as
-Reversible Scaling :ref:`(de Koning99, <deKoning99>` :ref:`de Koning00a) <deKoning00a>`. The thermodynamic integration is performed
-using the nonequilibrium method of Adiabatic Switching
-:ref:`(Watanabe, <Watanabe>` :ref:`de Koning96) <deKoning96>`.
-
-The forces on the atoms are dynamically scaled during the simulation,
-the rescaling is done in the following manner:
-
-.. image:: Eqs/fix_ti_rs_force.jpg
- :align: center
-
-where F_int is the total force on the atoms due to the interatomic
-potential and lambda is the coupling parameter of the thermodynamic
-integration.
-
-The fix acts as follows: during the first *t_equil* steps after the
-fix is defined the value of lambda is *lambda_initial* , this is the
-period to equilibrate the system in the lambda = *lambda_initial*
-state. After this the value of lambda changes continuously from
-*lambda_initial* to *lambda_final* according to the function defined
-using the keyword *function* (described below), this is done in
-*t_switch* steps. Then comes the second equilibration period of
-*t_equil* to equilibrate the system in the lambda = *lambda_final*
-state. After that the switching back to the lambda = *lambda_initial*
-state is done using *t_switch* timesteps and following the same
-switching function. After this period the value of lambda is kept
-equal to *lambda_initial* indefinitely or until a :doc:`unfix <unfix>`
-erase the fix.
-
-The description of thermodynamic integration in both directions is
-done in :ref:`de Koning00b <deKoning00b>`, the main reason is to try to
-eliminate the dissipated heat due to the nonequilibrium process.
-
-The *function* keyword allows the use of three different switching
-rates. The option *1* results in a constant rescaling where the lambda
-parameter changes at a constant rate during the switching time
-according to the switching function
-
-.. image:: Eqs/fix_ti_rs_function_1.jpg
- :align: center
-
-where tau is the scaled time variable t/t_switch. This switching
-function has the characteristic that the temperature scaling is faster
-at temperatures closer to the final temperature of the procedure. The
-option number *2* performs the switching at a rate defined by the
-following switching function
-
-.. image:: Eqs/fix_ti_rs_function_2.jpg
- :align: center
-
-This switching function has the characteristic that the temperature
-scaling occurs at a constant rate during all the procedure. The option
-number *3* performs the switching at a rate defined by the following
-switching function
-
-.. image:: Eqs/fix_ti_rs_function_3.jpg
- :align: center
-
-This switching function has the characteristic that the temperature
-scaling is faster at temperatures closer to the initial temperature of
-the procedure.
-
-An example script using this command is provided in the
-examples/USER/misc/ti directory.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-This fix computes a global vector quantitie which can be accessed by
-various :ref:`output commands <howto_15>`. The vector has
-2 positions, the first one is the coupling parameter lambda and the
-second one is the time derivative of lambda. The scalar and vector
-values calculated by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix ti/spring <fix_ti_spring>`
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Default
-"""""""
-
-The keyword default is function = 1.
-
-
-----------
-
-
-.. _deKoning99:
-
-
-
-**(de Koning 99)** M. de Koning, A. Antonelli and S. Yip, Phys Rev Lett, 83, 3973 (1999).
-
-.. _Watanabe:
-
-
-
-**(Watanabe)** M. Watanabe and W. P. Reinhardt, Phys Rev Lett, 65, 3301 (1990).
-
-.. _deKoning96:
-
-
-
-**(de Koning 96)** M. de Koning and A. Antonelli, Phys Rev E, 53, 465 (1996).
-
-.. _deKoning00a:
-
-
-
-**(de Koning 00a)** M. de Koning, A. Antonelli and S. Yip, J Chem Phys, 115, 11025 (2000).
-
-.. _deKoning00b:
-
-
-
-**(de Koning 00b)** M. de Koning et al., Computing in Science & Engineering, 2, 88 (2000).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_ti_spring.txt b/doc/html/_sources/fix_ti_spring.txt
deleted file mode 100644
index 8ade4035b..000000000
--- a/doc/html/_sources/fix_ti_spring.txt
+++ /dev/null
@@ -1,189 +0,0 @@
-.. index:: fix ti/spring
-
-fix ti/spring command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID ti/spring K t_switch t_equil keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* ti/spring = style name of this fix command
-* K = spring constant (force/distance units)
-* t_switch/t_equil = number of steps of the switching/equilibration procedure
-* zero or more keyword/value pairs may be appended to args
-* keyword = *function*
-.. parsed-literal::
-
- *function* value = function-ID
- function-ID = ID of the switching function (1 or 2)
-
-
-
-**Example:**
-
-.. parsed-literal::
-
- fix ref all ti/spring 50.0 2000 1000 function 2
-
-Description
-"""""""""""
-
-This fix allows you to compute the free energy of solids by performing
-a thermodynamic integration between the solid of interest and an
-Einstein crystal :ref:`(Frenkel) <Frenkel>`. The thermodynamic integration
-is performed using the nonequilibrium method of Adiabatic Switching
-:ref:`(Watanabe, <Watanabe>` :ref:`de Koning96) <deKoning96>`.
-
-A spring force is applied independently to each atom in the group to
-tether it to its initial position. The initial position for each atom
-is its location at the time the fix command was issued. More details
-about the springs are available in :doc:`fix spring/self <fix_spring_self>`. The forces on the atoms are
-dynamically scaled during the simulation, the rescaling is done in the
-following manner:
-
-.. image:: Eqs/fix_ti_spring_force.jpg
- :align: center
-
-where F_harm is the force due to the springs, F_solid is the total
-force on the atoms due to the interatomic potential and lambda is the
-coupling parameter of the thermodynamic integration.
-
-The fix acts as follows: during the first *t_equil* steps after the
-fix is defined the value of lambda is zero, this is the period to
-equilibrate the system in the lambda = 0 state. After this the value
-of lambda changes continuously from 0 to 1 according to the function
-defined using the keyword *function* (described below), this is done
-in *t_switch* steps. Then comes the second equilibration period of
-*t_equil* to equilibrate the system in the lambda = 1 state. After
-that the switching back to the lambda = 0 state is made using
-*t_switch* timesteps and following the same switching function. After
-this period the value of lambda is kept equal to zero and the fix has
-no action in the dynamics of the system anymore.
-
-The description of thermodynamic integration in both directions is
-done in :ref:`de Koning97 <deKoning97>`, the main reason is to try to
-eliminate the dissipated heat due to the nonequilibrium process.
-
-The *function* keyword allows the use of two different switching
-rates, the option *1* results in a constant rescaling where the lambda
-parameter changes at a constant rate during the switching time
-according to the switching function
-
-.. image:: Eqs/fix_ti_spring_function_1.jpg
- :align: center
-
-where tau is the scaled time variable t/t_switch. The option number
-*2* performs the switching at a rate defined by the following
-switching function
-
-.. image:: Eqs/fix_ti_spring_function_2.jpg
- :align: center
-
-This function has zero slope as lambda approaches its extreme values
-(0 and 1), according to (:ref:`de Koning96) <deKoning96>` this results in
-smaller fluctuations on the integral to be computed on the
-thermodynamic integration.
-
-.. note::
-
- It is importante to keep the center of mass fixed during the
- thermodynamic integration, a non-zero total velocity will result in
- divergencies during the integration due to the fact that the atoms are
- 'attatched' to its equilibrium positions by the Einstein
- crystal. Check the option *zero* of `fix langevin <fix_langevin_html>`_
- and :doc:`velocity <velocity>`. The use of the Nose-Hoover thermostat
- (:doc:`fix nvt <fix_nh>`) is NOT recommended due to its well documented
- issues with the canonical sampling of harmonic degrees of freedom
- (notice that the *chain* option will NOT solve this problem). The
- Langevin thermostat (`fix langevin <fix_langevin.html">`_) works fine.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the original coordinates of tethered atoms to :doc:`binary restart files <restart>`, so that the spring effect will be the
-same in a restarted simulation. See the :doc:`read restart <read_restart>` command for info on how to re-specify a fix
-in an input script that reads a restart file, so that the operation of
-the fix continues in an uninterrupted fashion.
-
-The :doc:`fix modify <fix_modify>` *energy* option is supported by this
-fix to add the energy stored in the per-atom springs to the system's
-potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-This fix computes a global scalar and a global vector quantities which
-can be accessed by various :ref:`output commands <howto_15>`. The scalar is an energy which
-is the sum of the spring energy for each atom, where the per-atom
-energy is 0.5 * K * r^2. The vector has 2 positions, the first one is
-the coupling parameter lambda and the second one is the time
-derivative of lambda. The scalar and vector values calculated by this
-fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command.
-
-.. note::
-
- If you want the per-atom spring energy to be included in the
- total potential energy of the system (the quantity being minimized),
- you MUST enable the :doc:`fix modify <fix_modify>` *energy* option for
- this fix.
-
-An example script using this command is provided in the
-examples/USER/misc/ti directory.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix spring <fix_spring>`, :doc:`fix ti/rs <fix_ti_rs>`
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Default
-"""""""
-
-The keyword default is function = 1.
-
-
-----------
-
-
-.. _Frenkel:
-
-
-
-**(Frenkel)** Daan Frenkel and Anthony J. C. Ladd, J. Chem. Phys. 81, 3188
-(1984).
-
-.. _Watanabe:
-
-
-
-**(Watanabe)** M. Watanabe and W. P. Reinhardt, Phys Rev Lett, 65, 3301 (1990).
-
-.. _deKoning96:
-
-
-
-**(de Koning 96)** M. de Koning and A. Antonelli, Phys Rev E, 53, 465 (1996).
-
-.. _deKoning97:
-
-
-
-**(de Koning 97)** M. de Koning and A. Antonelli, Phys Rev B, 55, 735 (1997).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_tmd.txt b/doc/html/_sources/fix_tmd.txt
deleted file mode 100644
index a6da5810e..000000000
--- a/doc/html/_sources/fix_tmd.txt
+++ /dev/null
@@ -1,148 +0,0 @@
-.. index:: fix tmd
-
-fix tmd command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID tmd rho_final file1 N file2
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* tmd = style name of this fix command
-* rho_final = desired value of rho at the end of the run (distance units)
-* file1 = filename to read target structure from
-* N = dump TMD statistics every this many timesteps, 0 = no dump
-* file2 = filename to write TMD statistics to (only needed if N > 0)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all nve
- fix 2 tmdatoms tmd 1.0 target_file 100 tmd_dump_file
-
-Description
-"""""""""""
-
-Perform targeted molecular dynamics (TMD) on a group of atoms. A
-holonomic constraint is used to force the atoms to move towards (or
-away from) the target configuration. The parameter "rho" is
-monotonically decreased (or increased) from its initial value to
-rho_final at the end of the run.
-
-Rho has distance units and is a measure of the root-mean-squared
-distance (RMSD) between the current configuration of the atoms in the
-group and the target coordinates listed in file1. Thus a value of
-rho_final = 0.0 means move the atoms all the way to the final
-structure during the course of the run.
-
-The target file1 can be ASCII text or a gzipped text file (detected by
-a .gz suffix). The format of the target file1 is as follows:
-
-.. parsed-literal::
-
- 0.0 25.0 xlo xhi
- 0.0 25.0 ylo yhi
- 0.0 25.0 zlo zhi
- 125 24.97311 1.69005 23.46956 0 0 -1
- 126 1.94691 2.79640 1.92799 1 0 0
- 127 0.15906 3.46099 0.79121 1 0 0
- ...
-
-The first 3 lines may or may not be needed, depending on the format of
-the atoms to follow. If image flags are included with the atoms, the
-1st 3 lo/hi lines must appear in the file. If image flags are not
-included, the 1st 3 lines should not appear. The 3 lines contain the
-simulation box dimensions for the atom coordinates, in the same format
-as in a LAMMPS data file (see the :doc:`read_data <read_data>` command).
-
-The remaining lines each contain an atom ID and its target x,y,z
-coordinates. The atom lines (all or none of them) can optionally be
-followed by 3 integer values: nx,ny,nz. For periodic dimensions, they
-specify which image of the box the atom is considered to be in, i.e. a
-value of N (positive or negative) means add N times the box length to
-the coordinate to get the true value.
-
-The atom lines can be listed in any order, but every atom in the group
-must be listed in the file. Atoms not in the fix group may also be
-listed; they will be ignored.
-
-TMD statistics are written to file2 every N timesteps, unless N is
-specified as 0, which means no statistics.
-
-The atoms in the fix tmd group should be integrated (via a fix nve,
-nvt, npt) along with other atoms in the system.
-
-Restarts can be used with a fix tmd command. For example, imagine a
-10000 timestep run with a rho_initial = 11 and a rho_final = 1. If a
-restart file was written after 2000 time steps, then the configuration
-in the file would have a rho value of 9. A new 8000 time step run
-could be performed with the same rho_final = 1 to complete the
-conformational change at the same transition rate. Note that for
-restarted runs, the name of the TMD statistics file should be changed
-to prevent it being overwritten.
-
-For more information about TMD, see :ref:`(Schlitter1) <Schlitter1>` and
-:ref:`(Schlitter2) <Schlitter2>`.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`.
-
-This fix can ramp its rho parameter over multiple runs, using the
-*start* and *stop* keywords of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-All TMD fixes must be listed in the input script after all integrator
-fixes (nve, nvt, npt) are applied. This ensures that atoms are moved
-before their positions are corrected to comply with the constraint.
-
-Atoms that have a TMD fix applied should not be part of a group to
-which a SHAKE fix is applied. This is because LAMMPS assumes there
-are not multiple competing holonomic constraints applied to the same
-atoms.
-
-To read gzipped target files, you must compile LAMMPS with the
--DLAMMPS_GZIP option - see the :ref:`Making LAMMPS <start_2>` section of the documentation.
-
-**Related commands:** none
-
-**Default:** none
-
-
-----------
-
-
-.. _Schlitter1:
-
-
-
-**(Schlitter1)** Schlitter, Swegat, Mulders, "Distance-type reaction
-coordinates for modelling activated processes", J Molecular Modeling,
-7, 171-177 (2001).
-
-.. _Schlitter2:
-
-
-
-**(Schlitter2)** Schlitter and Klahn, "The free energy of a reaction
-coordinate at multiple constraints: a concise formulation", Molecular
-Physics, 101, 3439-3443 (2003).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_ttm.txt b/doc/html/_sources/fix_ttm.txt
deleted file mode 100644
index e34efb49e..000000000
--- a/doc/html/_sources/fix_ttm.txt
+++ /dev/null
@@ -1,379 +0,0 @@
-.. index:: fix ttm
-
-fix ttm command
-===============
-
-fix ttm/mod command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID ttm seed C_e rho_e kappa_e gamma_p gamma_s v_0 Nx Ny Nz T_infile N T_outfile
- fix ID group-ID ttm/mod seed init_file Nx Ny Nz T_infile N T_outfile
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* style = *ttm* or *ttm_mod*
-* seed = random number seed to use for white noise (positive integer)
-* remaining arguments for fix ttm:
-.. parsed-literal::
-
- C_e = electronic specific heat (energy/(electron*temperature) units)
- rho_e = electronic density (electrons/volume units)
- kappa_e = electronic thermal conductivity (energy/(time*distance*temperature) units)
- gamma_p = friction coefficient due to electron-ion interactions (mass/time units)
- gamma_s = friction coefficient due to electronic stopping (mass/time units)
- v_0 = electronic stopping critical velocity (velocity units)
- Nx = number of thermal solve grid points in the x-direction (positive integer)
- Ny = number of thermal solve grid points in the y-direction (positive integer)
- Nz = number of thermal solve grid points in the z-direction (positive integer)
- T_infile = filename to read initial electronic temperature from
- N = dump TTM temperatures every this many timesteps, 0 = no dump
- T_outfile = filename to write TTM temperatures to (only needed if N > 0)
-
-* remaining arguments for fix ttm/mod:
-.. parsed-literal::
-
- init_file = file with the parameters to TTM
- Nx = number of thermal solve grid points in the x-direction (positive integer)
- Ny = number of thermal solve grid points in the y-direction (positive integer)
- Nz = number of thermal solve grid points in the z-direction (positive integer)
- T_infile = filename to read initial electronic temperature from
- N = dump TTM temperatures every this many timesteps, 0 = no dump
- T_outfile = filename to write TTM temperatures to (only needed if N > 0)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 2 all ttm 699489 1.0 1.0 10 0.1 0.0 2.0 1 12 1 initialTs 1000 T.out
- fix 2 all ttm 123456 1.0 1.0 1.0 1.0 1.0 5.0 5 5 5 Te.in 1 Te.out
- fix 2 all ttm/mod 34277 parameters.txt 5 5 5 T_init 10 T_out
-
-Description
-"""""""""""
-
-Use a two-temperature model (TTM) to represent heat transfer through
-and between electronic and atomic subsystems. LAMMPS models the
-atomic subsystem as usual with a molecular dynamics model and the
-classical force field specified by the user, but the electronic
-subsystem is modeled as a continuum, or a background "gas", on a
-regular grid. Energy can be transferred spatially within the grid
-representing the electrons. Energy can also be transferred between
-the electronic and the atomic subsystems. The algorithm underlying
-this fix was derived by D. M. Duffy and A. M. Rutherford and is
-discussed in two J Physics: Condensed Matter papers: :ref:`(Duffy) <Duffy>`
-and :ref:`(Rutherford) <Rutherford>`. They used this algorithm in cascade
-simulations where a primary knock-on atom (PKA) was initialized with a
-high velocity to simulate a radiation event.
-
-The description in this sub-section applies to both fix ttm and fix
-ttm/mod. Fix ttm/mod adds options to account for external heat
-sources (e.g. at a surface) and for specifying parameters that allow
-the electronic heat capacity to depend strongly on electronic
-temperature. It is more expensive computationally than fix ttm
-because it treats the thermal diffusion equation as non-linear. More
-details on fix ttm/mod are given below.
-
-Heat transfer between the electronic and atomic subsystems is carried
-out via an inhomogeneous Langevin thermostat. This thermostat differs
-from the regular Langevin thermostat (:doc:`fix langevin <fix_langevin>`) in three important ways. First, the
-Langevin thermostat is applied uniformly to all atoms in the
-user-specified group for a single target temperature, whereas the TTM
-fix applies Langevin thermostatting locally to atoms within the
-volumes represented by the user-specified grid points with a target
-temperature specific to that grid point. Second, the Langevin
-thermostat couples the temperature of the atoms to an infinite heat
-reservoir, whereas the heat reservoir for fix TTM is finite and
-represents the local electrons. Third, the TTM fix allows users to
-specify not just one friction coefficient, but rather two independent
-friction coefficients: one for the electron-ion interactions
-(\ *gamma_p*\ ), and one for electron stopping (\ *gamma_s*\ ).
-
-When the friction coefficient due to electron stopping, *gamma_s*\ , is
-non-zero, electron stopping effects are included for atoms moving
-faster than the electron stopping critical velocity, *v_0*\ . For
-further details about this algorithm, see :ref:`(Duffy) <Duffy>` and
-:ref:`(Rutherford) <Rutherford>`.
-
-Energy transport within the electronic subsystem is solved according
-to the heat diffusion equation with added source terms for heat
-transfer between the subsystems:
-
-.. image:: Eqs/fix_ttm.jpg
- :align: center
-
-where C_e is the specific heat, rho_e is the density, kappa_e is the
-thermal conductivity, T is temperature, the "e" and "a" subscripts
-represent electronic and atomic subsystems respectively, g_p is the
-coupling constant for the electron-ion interaction, and g_s is the
-electron stopping coupling parameter. C_e, rho_e, and kappa_e are
-specified as parameters to the fix. The other quantities are derived.
-The form of the heat diffusion equation used here is almost the same
-as that in equation 6 of :ref:`(Duffy) <Duffy>`, with the exception that the
-electronic density is explicitly reprensented, rather than being part
-of the the specific heat parameter.
-
-Currently, fix ttm assumes that none of the user-supplied parameters
-will vary with temperature. Note that :ref:`(Duffy) <Duffy>` used a tanh()
-functional form for the temperature dependence of the electronic
-specific heat, but ignored temperature dependencies of any of the
-other parameters. See more discussion below for fix ttm/mod.
-
-These fixes require use of periodic boundary conditions and a 3D
-simulation. Periodic boundary conditions are also used in the heat
-equation solve for the electronic subsystem. This varies from the
-approach of :ref:`(Rutherford) <Rutherford>` where the atomic subsystem was
-embedded within a larger continuum representation of the electronic
-subsystem.
-
-The initial electronic temperature input file, *T_infile*\ , is a text
-file LAMMPS reads in with no header and with four numeric columns
-(ix,iy,iz,Temp) and with a number of rows equal to the number of
-user-specified grid points (Nx by Ny by Nz). The ix,iy,iz are node
-indices from 0 to nxnodes-1, etc. For example, the initial electronic
-temperatures on a 1 by 2 by 3 grid could be specified in a *T_infile*
-as follows:
-
-.. parsed-literal::
-
- 0 0 0 1.0
- 0 0 1 1.0
- 0 0 2 1.0
- 0 1 0 2.0
- 0 1 1 2.0
- 0 1 2 2.0
-
-where the electronic temperatures along the y=0 plane have been set to
-1.0, and the electronic temperatures along the y=1 plane have been set
-to 2.0. The order of lines in this file is no important. If all the
-nodal values are not specified, LAMMPS will generate an error.
-
-The temperature output file, *T_oufile*\ , is created and written by
-this fix. Temperatures for both the electronic and atomic subsystems
-at every node and every N timesteps are output. If N is specified as
-zero, no output is generated, and no output filename is needed. The
-format of the output is as follows. One long line is written every
-output timestep. The timestep itself is given in the first column.
-The next Nx*Ny*Nz columns contain the temperatures for the atomic
-subsystem, and the final Nx*Ny*Nz columns contain the temperatures for
-the electronic subsystem. The ordering of the Nx*Ny*Nz columns is
-with the z index varing fastest, y the next fastest, and x the
-slowest.
-
-These fixes do not change the coordinates of their atoms; they only
-scales their velocities. Thus a time integration fix (e.g. :doc:`fix nve <fix_nve>`) should still be used to time integrate the affected
-atoms. The fixes should not normally be used on atoms that have their
-temperature controlled by another fix - e.g. :doc:`fix nvt <fix_nh>` or
-:doc:`fix langevin <fix_langevin>`.
-
-.. note::
-
- The current implementations of these fixes create a copy of the
- electron grid that overlays the entire simulation domain, for each
- processor. Values on the grid are summed across all processors. Thus
- you should insure that this grid is not too large, else your
- simulation could incur high memory and communication costs.
-
-
-----------
-
-
-**Additional details for fix ttm/mod**
-
-Fix ttm/mod uses the heat diffusion equation with possible external
-heat sources (e.g. laser heating in ablation simulations):
-
-.. image:: Eqs/fix_ttm_mod.jpg
- :align: center
-
-where theta is the Heaviside step function, I_0 is the (absorbed)
-laser pulse intensity for ablation simulations, l_skin is the depth
-of skin-layer, and all other designations have the same meaning as in
-the former equation. The duration of the pulse is set by the parameter
-*tau* in the *init_file*\ .
-
-Fix ttm/mod also allows users to specify the dependencies of C_e and
-kappa_e on the electronic temperature. The specific heat is expressed
-as
-
-.. image:: Eqs/fix_ttm_ce.jpg
- :align: center
-
-where *X* = T_e/1000, and the thermal conductivity is defined as
-kappa_e = D_e*rho_e*C_e, where D_e is the thermal diffusion
-coefficient.
-
-Electronic pressure effects are included in the TTM model to account
-for the blast force acting on ions because of electronic pressure
-gradient (see :ref:`(Chen) <Chen>`, :ref:`(Norman) <Norman>`). The total force
-acting on an ion is:
-
-.. image:: Eqs/fix_ttm_blast.jpg
- :align: center
-
-where F_langevin is a force from Langevin thermostat simulating
-electron-phonon coupling, and nabla P_e/n_ion is the electron blast
-force.
-
-The electronic pressure is taken to be P_e = B*rho_e*C_e*T_e
-
-The current fix ttm/mod implementation allows TTM simulations with a
-vacuum. The vacuum region is defined as the grid cells with zero
-electronic temperature. The numerical scheme does not allow energy
-exchange with such cells. Since the material can expand to previously
-unoccupied region in some simulations, the vacuum border can be
-allowed to move. It is controlled by the *surface_movement* parameter
-in the *init_file*\ . If it is set to 1, then "vacuum" cells can be
-changed to "electron-filled" cells with the temperature *T_e_min* if
-atoms move into them (currently only implemented for the case of
-1-dimensional motion of flat surface normal to the X axis). The
-initial borders of vacuum can be set in the *init_file* via *lsurface*
-and *rsurface* parameters. In this case, electronic pressure gradient
-is calculated as
-
-.. image:: Eqs/fix_ttm_blast1.jpg
- :align: center
-
-where lambda is the electron mean free path (see :ref:`(Norman) <Norman>`,
-:ref:`(Pisarev) <Pisarev>`)
-
-The fix ttm/mod parameter file *init_file* has the following syntax/
-Every line with the odd number is considered as a comment and
-ignored. The lines with the even numbers are treated as follows:
-
-.. parsed-literal::
-
- a_0, energy/(temperature*electron) units
- a_1, energy/(temperature^2*electron) units
- a_2, energy/(temperature^3*electron) units
- a_3, energy/(temperature^4*electron) units
- a_4, energy/(temperature^5*electron) units
- C_0, energy/(temperature*electron) units
- A, 1/temperature units
- rho_e, electrons/volume units
- D_e, length^2/time units
- gamma_p, mass/time units
- gamma_s, mass/time units
- v_0, length/time units
- I_0, energy/(time*length^2) units
- lsurface, electron grid units (positive integer)
- rsurface, electron grid units (positive integer)
- l_skin, length units
- tau, time units
- B, dimensionless
- lambda, length units
- n_ion, ions/volume units
- surface_movement: 0 to disable tracking of surface motion, 1 to enable
- T_e_min, temperature units
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-These fixes write the state of the electronic subsystem and the energy
-exchange between the subsystems to :doc:`binary restart files <restart>`. See the :doc:`read_restart <read_restart>` command
-for info on how to re-specify a fix in an input script that reads a
-restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-Because the state of the random number generator is not saved in the
-restart files, this means you cannot do "exact" restarts with this
-fix, where the simulation continues on the same as if no restart had
-taken place. However, in a statistical sense, a restarted simulation
-should produce the same behavior.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to these
-fixes.
-
-Both fixes compute 2 output quantities stored in a vector of length 2,
-which can be accessed by various :ref:`output commands <howto_15>`. The first quantity is the
-total energy of the electronic subsystem. The second quantity is the
-energy transferred from the electronic to the atomic subsystem on that
-timestep. Note that the velocity verlet integrator applies the fix ttm
-forces to the atomic subsystem as two half-step velocity updates: one
-on the current timestep and one on the subsequent timestep.
-Consequently, the change in the atomic subsystem energy is lagged by
-half a timestep relative to the change in the electronic subsystem
-energy. As a result of this, users may notice slight fluctuations in
-the sum of the atomic and electronic subsystem energies reported at
-the end of the timestep.
-
-The vector values calculated are "extensive".
-
-No parameter of the fixes can be used with the *start/stop* keywords
-of the :doc:`run <run>` command. The fixes are not invoked during
-:doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-Fix *ttm* is part of the MISC package. It is only enabled if LAMMPS
-was built with that package. Fix *ttm/mod* is part of the USER-MISC
-package. It is only enabled if LAMMPS was built with that package.
-See the :ref:`Making LAMMPS <start_3>` section for more
-info.
-
-These fixes can only be used for 3d simulations and orthogonal
-simlulation boxes. You must also use periodic
-:doc:`boundary <boundary>` conditions.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix langevin <fix_langevin>`, :doc:`fix dt/reset <fix_dt_reset>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Duffy:
-
-
-
-**(Duffy)** D M Duffy and A M Rutherford, J. Phys.: Condens. Matter, 19,
-016207-016218 (2007).
-
-.. _Rutherford:
-
-
-
-**(Rutherford)** A M Rutherford and D M Duffy, J. Phys.:
-Condens. Matter, 19, 496201-496210 (2007).
-
-.. _Chen:
-
-
-
-**(Chen)** J Chen, D Tzou and J Beraun, Int. J. Heat
-Mass Transfer, 49, 307-316 (2006).
-
-.. _Norman:
-
-
-
-**(Norman)** G E Norman, S V Starikov, V V Stegailov et al., Contrib.
-Plasma Phys., 53, 129-139 (2013).
-
-.. _Pisarev:
-
-
-
-**(Pisarev)** V V Pisarev and S V Starikov, J. Phys.: Condens. Matter, 26,
-475401 (2014).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_tune_kspace.txt b/doc/html/_sources/fix_tune_kspace.txt
deleted file mode 100644
index 61d862afb..000000000
--- a/doc/html/_sources/fix_tune_kspace.txt
+++ /dev/null
@@ -1,108 +0,0 @@
-.. index:: fix tune/kspace
-
-fix tune/kspace command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID tune/kspace N
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* tune/kspace = style name of this fix command
-* N = invoke this fix every N steps
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 2 all tune/kspace 100
-
-Description
-"""""""""""
-
-This fix tests each kspace style (Ewald, PPPM, and MSM), and
-automatically selects the fastest style to use for the remainder
-of the run. If the fastest style is Ewald or PPPM, the fix also
-adjusts the coulomb cutoff towards optimal speed. Future versions
-of this fix will automatically select other kspace parameters
-to use for maximum simulation speed. The kspace parameters may
-include the style, cutoff, grid points in each direction, order,
-Ewald parameter, MSM parallelization cut-point, MPI tasks to use, etc.
-
-The rationale for this fix is to provide the user with
-as-fast-as-possible simulations that include long-range electrostatics
-(kspace) while meeting the user-prescribed accuracy requirement. A
-simple heuristic could never capture the optimal combination of
-parameters for every possible run-time scenario. But by performing
-short tests of various kspace parameter sets, this fix allows
-parameters to be tailored specifically to the user's machine, MPI
-ranks, use of threading or accelerators, the simulated system, and the
-simulation details. In addition, it is possible that parameters could
-be evolved with the simulation on-the-fly, which is useful for systems
-that are dynamically evolving (e.g. changes in box size/shape or
-number of particles).
-
-When this fix is invoked, LAMMPS will perform short timed tests of
-various parameter sets to determine the optimal parameters. Tests are
-performed on-the-fly, with a new test initialized every N steps. N should
-be chosen large enough so that adequate CPU time lapses between tests,
-thereby providing statistically significant timings. But N should not be
-chosen to be so large that an unfortunate parameter set test takes an
-inordinate amount of wall time to complete. An N of 100 for most problems
-seems reasonable. Once an optimal parameter set is found, that set is
-used for the remainder of the run.
-
-This fix uses heristics to guide it's selection of parameter sets to test,
-but the actual timed results will be used to decide which set to use in the
-simulation.
-
-It is not necessary to discard trajectories produced using sub-optimal
-parameter sets, or a mix of various parameter sets, since the user-prescribed
-accuracy will have been maintained throughout. However, some users may prefer
-to use this fix only to discover the optimal parameter set for a given setup
-that can then be used on subsequent production runs.
-
-This fix starts with kspace parameters that are set by the user with the
-:doc:`kspace_style <kspace_style>` and :doc:`kspace_modify <kspace_modify>`
-commands. The prescribed accuracy will be maintained by this fix throughout
-the simulation.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix.
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the KSPACE package. It is only enabled if LAMMPS was
-built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Do not set "neigh_modify once yes" or else this fix will never be
-called. Reneighboring is required.
-
-Related commands
-""""""""""""""""
-
-:doc:`kspace_style <kspace_style>`, :doc:`boundary <boundary>`
-:doc:`kspace_modify <kspace_modify>`, :doc:`pair_style lj/cut/coul/long <pair_lj>`, :doc:`pair_style lj/charmm/coul/long <pair_charmm>`, :doc:`pair_style lj/long <pair_lj_long>`, :doc:`pair_style lj/long/coul/long <pair_lj_long>`,
-:doc:`pair_style buck/coul/long <pair_buck>`
-
-Default
-"""""""
-
-
-----------
-
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_vector.txt b/doc/html/_sources/fix_vector.txt
deleted file mode 100644
index 3de038caf..000000000
--- a/doc/html/_sources/fix_vector.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-.. index:: fix vector
-
-fix vector command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID vector Nevery value1 value2 ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* vector = style name of this fix command
-* Nevery = use input values every this many timesteps
-* one or more input values can be listed
-* value = c_ID, c_ID[N], f_ID, f_ID[N], v_name
-.. parsed-literal::
-
- c_ID = global scalar calculated by a compute with ID
- c_ID[I] = Ith component of global vector calculated by a compute with ID
- f_ID = global scalar calculated by a fix with ID
- f_ID[I] = Ith component of global vector calculated by a fix with ID
- v_name = value calculated by an equal-style variable with name
- v_name[I] = Ith component of vector-style variable with name
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all vector 100 c_myTemp
- fix 1 all vector 5 c_myTemp v_integral
-
-Description
-"""""""""""
-
-Use one or more global values as inputs every few timesteps, and
-simply store them. For a single specified value, the values are
-stored as a global vector of growing length. For multiple specified
-values, they are stored as rows in a global array, whose number of
-rows is growing. The resulting vector or array can be used by other
-:ref:`output commands <howto_15>`.
-
-One way to to use this command is to accumulate a vector that is
-time-integrated using the :doc:`variable trap() <variable>` function.
-For example the velocity auto-correlation function (VACF) can be
-time-integrated, to yield a diffusion coefficient, as follows:
-
-.. parsed-literal::
-
- compute 2 all vacf
- fix 5 all vector 1 c_2[4]
- variable diff equal dt*trap(f_5)
- thermo_style custom step v_diff
-
-The group specified with this command is ignored. However, note that
-specified values may represent calculations performed by computes and
-fixes which store their own "group" definitions.
-
-Each listed value can be the result of a :doc:`compute <compute>` or
-:doc:`fix <fix>` or the evaluation of an equal-style or vector-style
-:doc:`variable <variable>`. In each case, the compute, fix, or variable
-must produce a global quantity, not a per-atom or local quantity. And
-the global quantity must be a scalar, not a vector or array.
-
-:doc:`Computes <compute>` that produce global quantities are those which
-do not have the word *atom* in their style name. Only a few
-:doc:`fixes <fix>` produce global quantities. See the doc pages for
-individual fixes for info on which ones produce such values.
-:doc:`Variables <variable>` of style *equal* or *vector* are the only
-ones that can be used with this fix. Variables of style *atom* cannot
-be used, since they produce per-atom values.
-
-The *Nevery* argument specifies on what timesteps the input values
-will be used in order to be stored. Only timesteps that are a
-multiple of *Nevery*\ , including timestep 0, will contribute values.
-
-Note that if you perform multiple runs, using the "pre no" option of
-the :doc:`run <run>` command to avoid initialization on subsequent runs,
-then you need to use the *stop* keyword with the first :doc:`run <run>`
-command with a timestep value that encompasses all the runs. This is
-so that the vector or array stored by this fix can be allocated to a
-sufficient size.
-
-
-----------
-
-
-If a value begins with "c_", a compute ID must follow which has been
-previously defined in the input script. If no bracketed term is
-appended, the global scalar calculated by the compute is used. If a
-bracketed term is appended, the Ith element of the global vector
-calculated by the compute is used.
-
-Note that there is a :doc:`compute reduce <compute_reduce>` command
-which can sum per-atom quantities into a global scalar or vector which
-can thus be accessed by fix vector. Or it can be a compute defined
-not in your input script, but by :doc:`thermodynamic output <thermo_style>` or other fixes such as :doc:`fix nvt <fix_nh>`
-or :doc:`fix temp/rescale <fix_temp_rescale>`. See the doc pages for
-these commands which give the IDs of these computes. Users can also
-write code for their own compute styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If a value begins with "f_", a fix ID must follow which has been
-previously defined in the input script. If no bracketed term is
-appended, the global scalar calculated by the fix is used. If a
-bracketed term is appended, the Ith element of the global vector
-calculated by the fix is used.
-
-Note that some fixes only produce their values on certain timesteps,
-which must be compatible with *Nevery*\ , else an error will result.
-Users can also write code for their own fix styles and :doc:`add them to LAMMPS <Section_modify>`.
-
-If a value begins with "v_", a variable name must follow which has
-been previously defined in the input script. An equal-style or
-vector-style variable can be referenced; the latter requires a
-bracketed term to specify the Ith element of the vector calculated by
-the variable. See the :doc:`variable <variable>` command for details.
-Note that variables of style *equal* and *vector* define a formula
-which can reference individual atom properties or thermodynamic
-keywords, or they can invoke other computes, fixes, or variables when
-they are evaluated, so this is a very general means of specifying
-quantities to be stored by fix vector.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix produces a global vector or global array which can be
-accessed by various :ref:`output commands <howto_15>`.
-The values can only be accessed on timesteps that are multiples of
-*Nevery*\ .
-
-A vector is produced if only a single input value is specified.
-An array is produced if multiple input values are specified.
-The length of the vector or the number of rows in the array grows
-by 1 every *Nevery* timesteps.
-
-If the fix prouduces a vector, then the entire vector will be either
-"intensive" or "extensive", depending on whether the values stored in
-the vector are "intensive" or "extensive". If the fix produces an
-array, then all elements in the array must be the same, either
-"intensive" or "extensive". If a compute or fix provides the value
-stored, then the compute or fix determines whether the value is
-intensive or extensive; see the doc page for that compute or fix for
-further info. Values produced by a variable are treated as intensive.
-
-This fix can allocate storage for stored values accumulated over
-multiple runs, using the *start* and *stop* keywords of the
-:doc:`run <run>` command. See the :doc:`run <run>` command for details of
-how to do this. If using the :doc:`run pre no <run>` command option,
-this is required to allow the fix to allocate sufficient storage for
-stored values.
-
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute <compute>`, :doc:`variable <variable>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_viscosity.txt b/doc/html/_sources/fix_viscosity.txt
deleted file mode 100644
index 1435dcaa3..000000000
--- a/doc/html/_sources/fix_viscosity.txt
+++ /dev/null
@@ -1,188 +0,0 @@
-.. index:: fix viscosity
-
-fix viscosity command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID viscosity N vdim pdim Nbin keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* viscosity = style name of this fix command
-* N = perform momentum exchange every N steps
-* vdim = *x* or *y* or *z* = which momentum component to exchange
-* pdim = *x* or *y* or *z* = direction of momentum transfer
-* Nbin = # of layers in pdim direction (must be even number)
-* zero or more keyword/value pairs may be appended
-* keyword = *swap* or *target*
-.. parsed-literal::
-
- *swap* value = Nswap = number of swaps to perform every N steps
- *vtarget* value = V or INF = target velocity of swap partners (velocity units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all viscosity 100 x z 20
- fix 1 all viscosity 50 x z 20 swap 2 vtarget 1.5
-
-Description
-"""""""""""
-
-Use the Muller-Plathe algorithm described in :ref:`this paper <Muller-Plathe>` to exchange momenta between two particles in
-different regions of the simulation box every N steps. This induces a
-shear velocity profile in the system. As described below this enables
-a viscosity of the fluid to be calculated. This algorithm is
-sometimes called a reverse non-equilibrium MD (reverse NEMD) approach
-to computing viscosity. This is because the usual NEMD approach is to
-impose a shear velocity profile on the system and measure the response
-via an off-diagonal component of the stress tensor, which is
-proportional to the momentum flux. In the Muller-Plathe method, the
-momentum flux is imposed, and the shear velocity profile is the
-system's response.
-
-The simulation box is divided into *Nbin* layers in the *pdim*
-direction, where the layer 1 is at the low end of that dimension and
-the layer *Nbin* is at the high end. Every N steps, Nswap pairs of
-atoms are chosen in the following manner. Only atoms in the fix group
-are considered. Nswap atoms in layer 1 with positive velocity
-components in the *vdim* direction closest to the target value *V* are
-selected. Similarly, Nswap atoms in the "middle" layer (see below) with
-negative velocity components in the *vdim* direction closest to the
-negative of the target value *V* are selected. The two sets of Nswap
-atoms are paired up and their *vdim* momenta components are swapped
-within each pair. This resets their velocities, typically in opposite
-directions. Over time, this induces a shear velocity profile in the
-system which can be measured using commands such as the following,
-which writes the profile to the file tmp.profile:
-
-.. parsed-literal::
-
- compute layers all chunk/atom bin/1d z lower 0.05 units reduced
- fix f1 all ave/chunk 100 10 1000 layers vx file tmp.profile
-
-Note that by default, Nswap = 1 and vtarget = INF, though this can be
-changed by the optional *swap* and *vtarget* keywords. When vtarget =
-INF, one or more atoms with the most positive and negative velocity
-components are selected. Setting these parameters appropriately, in
-conjunction with the swap rate N, allows the momentum flux rate to be
-adjusted across a wide range of values, and the momenta to be
-exchanged in large chunks or more smoothly.
-
-The "middle" layer for momenta swapping is defined as the *Nbin*\ /2 + 1
-layer. Thus if *Nbin* = 20, the two swapping layers are 1 and 11.
-This should lead to a symmetric velocity profile since the two layers
-are separated by the same distance in both directions in a periodic
-sense. This is why *Nbin* is restricted to being an even number.
-
-As described below, the total momentum transferred by these velocity
-swaps is computed by the fix and can be output. Dividing this
-quantity by time and the cross-sectional area of the simulation box
-yields a momentum flux. The ratio of momentum flux to the slope of
-the shear velocity profile is proportional to the viscosity of the
-fluid, in appropriate units. See the :ref:`Muller-Plathe paper <Muller-Plathe>` for details.
-
-.. note::
-
- If your system is periodic in the direction of the momentum
- flux, then the flux is going in 2 directions. This means the
- effective momentum flux in one direction is reduced by a factor of 2.
- You will see this in the equations for viscosity in the Muller-Plathe
- paper. LAMMPS is simply tallying momentum which does not account for
- whether or not your system is periodic; you must use the value
- appropriately to yield a viscosity for your system.
-
-.. note::
-
- After equilibration, if the velocity profile you observe is not
- linear, then you are likely swapping momentum too frequently and are
- not in a regime of linear response. In this case you cannot
- accurately infer a viscosity and should try increasing the Nevery
- parameter.
-
-An alternative method for calculating a viscosity is to run a NEMD
-simulation, as described in :ref:`Section_howto 13 <howto_13>` of the manual. NEMD simulations
-deform the simmulation box via the :doc:`fix deform <fix_deform>`
-command. Thus they cannot be run on a charged system using a :doc:`PPPM solver <kspace_style>` since PPPM does not currently support
-non-orthogonal boxes. Using fix viscosity keeps the box orthogonal;
-thus it does not suffer from this limitation.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global scalar which can be accessed by various
-:ref:`output commands <howto_15>`. The scalar is the
-cummulative momentum transferred between the bottom and middle of the
-simulation box (in the *pdim* direction) is stored as a scalar
-quantity by this fix. This quantity is zeroed when the fix is defined
-and accumlates thereafter, once every N steps. The units of the
-quantity are momentum = mass*velocity. The scalar value calculated by
-this fix is "intensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the MISC package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Swaps conserve both momentum and kinetic energy, even if the masses of
-the swapped atoms are not equal. Thus you should not need to
-thermostat the system. If you do use a thermostat, you may want to
-apply it only to the non-swapped dimensions (other than *vdim*\ ).
-
-LAMMPS does not check, but you should not use this fix to swap
-velocities of atoms that are in constrained molecules, e.g. via :doc:`fix shake <fix_shake>` or :doc:`fix rigid <fix_rigid>`. This is because
-application of the constraints will alter the amount of transferred
-momentum. You should, however, be able to use flexible molecules.
-See the :ref:`Maginn paper <Maginn>` for an example of using this algorithm
-in a computation of alcohol molecule properties.
-
-When running a simulation with large, massive particles or molecules
-in a background solvent, you may want to only exchange momenta bewteen
-solvent particles.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix ave/chunk <fix_ave_chunk>`, :doc:`fix thermal/conductivity <fix_thermal_conductivity>`
-
-Default
-"""""""
-
-The option defaults are swap = 1 and vtarget = INF.
-
-
-----------
-
-
-.. _Muller-Plathe:
-
-
-
-**(Muller-Plathe)** Muller-Plathe, Phys Rev E, 59, 4894-4898 (1999).
-
-.. _Maginn:
-
-
-
-**(Maginn)** Kelkar, Rafferty, Maginn, Siepmann, Fluid Phase Equilibria,
-260, 218-231 (2007).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_viscous.txt b/doc/html/_sources/fix_viscous.txt
deleted file mode 100644
index 39fad9c2d..000000000
--- a/doc/html/_sources/fix_viscous.txt
+++ /dev/null
@@ -1,119 +0,0 @@
-.. index:: fix viscous
-
-fix viscous command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID viscous gamma keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* viscous = style name of this fix command
-* gamma = damping coefficient (force/velocity units)
-* zero or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *scale*
- *scale* values = type ratio
- type = atom type (1-N)
- ratio = factor to scale the damping coefficient by
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 flow viscous 0.1
- fix 1 damp viscous 0.5 scale 3 2.5
-
-Description
-"""""""""""
-
-Add a viscous damping force to atoms in the group that is proportional
-to the velocity of the atom. The added force can be thought of as a
-frictional interaction with implicit solvent, i.e. the no-slip Stokes
-drag on a spherical particle. In granular simulations this can be
-useful for draining the kinetic energy from the system in a controlled
-fashion. If used without additional thermostatting (to add kinetic
-energy to the system), it has the effect of slowly (or rapidly)
-freezing the system; hence it can also be used as a simple energy
-minimization technique.
-
-The damping force F is given by F = - gamma * velocity. The larger
-the coefficient, the faster the kinetic energy is reduced. If the
-optional keyword *scale* is used, gamma can scaled up or down by the
-specified factor for atoms of that type. It can be used multiple
-times to adjust gamma for several atom types.
-
-.. note::
-
- You should specify gamma in force/velocity units. This is not
- the same as mass/time units, at least for some of the LAMMPS
- :doc:`units <units>` options like "real" or "metal" that are not
- self-consistent.
-
-In a Brownian dynamics context, gamma = Kb T / D, where Kb =
-Boltzmann's constant, T = temperature, and D = particle diffusion
-coefficient. D can be written as Kb T / (3 pi eta d), where eta =
-dynamic viscosity of the frictional fluid and d = diameter of
-particle. This means gamma = 3 pi eta d, and thus is proportional to
-the viscosity of the fluid and the particle diameter.
-
-In the current implementation, rather than have the user specify a
-viscosity, gamma is specified directly in force/velocity units. If
-needed, gamma can be adjusted for atoms of different sizes
-(i.e. sigma) by using the *scale* keyword.
-
-Note that Brownian dynamics models also typically include a randomized
-force term to thermostat the system at a chosen temperature. The :doc:`fix langevin <fix_langevin>` command does this. It has the same
-viscous damping term as fix viscous and adds a random force to each
-atom. The random force term is proportional to the sqrt of the chosen
-thermostatting temperature. Thus if you use fix langevin with a
-target T = 0, its random force term is zero, and you are essentially
-performing the same operation as fix viscous. Also note that the
-gamma of fix viscous is related to the damping parameter of :doc:`fix langevin <fix_langevin>`, however the former is specified in units
-of force/velocity and the latter in units of time, so that it can more
-easily be used as a thermostat.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is modifying forces. Default is the outermost level.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command. This fix should only
-be used with damped dynamics minimizers that allow for
-non-conservative forces. See the :doc:`min_style <min_style>` command
-for details.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix langevin <fix_langevin>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_wall.txt b/doc/html/_sources/fix_wall.txt
deleted file mode 100644
index 54cc0ebb8..000000000
--- a/doc/html/_sources/fix_wall.txt
+++ /dev/null
@@ -1,349 +0,0 @@
-.. index:: fix wall/lj93
-
-fix wall/lj93 command
-=====================
-
-fix wall/lj126 command
-======================
-
-fix wall/lj1043 command
-=======================
-
-fix wall/colloid command
-========================
-
-fix wall/harmonic command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID style face args ... keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* style = *wall/lj93* or *wall/lj126* or *wall/lj1043* or *wall/colloid* or *wall/harmonic*
-* one or more face/arg pairs may be appended
-* face = *xlo* or *xhi* or *ylo* or *yhi* or *zlo* or *zhi*
-.. parsed-literal::
-
- args = coord epsilon sigma cutoff
- coord = position of wall = EDGE or constant or variable
- EDGE = current lo or hi edge of simulation box
- constant = number like 0.0 or -30.0 (distance units)
- variable = :doc:`equal-style variable <variable>` like v_x or v_wiggle
- epsilon = strength factor for wall-particle interaction (energy or energy/distance^2 units)
- epsilon can be a variable (see below)
- sigma = size factor for wall-particle interaction (distance units)
- sigma can be a variable (see below)
- cutoff = distance from wall at which wall-particle interaction is cut off (distance units)
-
-* zero or more keyword/value pairs may be appended
-* keyword = *units* or *fld*
-.. parsed-literal::
-
- *units* value = *lattice* or *box*
- *lattice* = the wall position is defined in lattice units
- *box* = the wall position is defined in simulation box units
- *fld* value = *yes* or *no*
- *yes* = invoke the wall constraint to be compatible with implicit FLD
- *no* = invoke the wall constraint in the normal way
- *pbc* value = *yes* or *no*
- *yes* = allow periodic boundary in a wall dimension
- *no* = require non-perioidic boundaries in any wall dimension
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix wallhi all wall/lj93 xlo -1.0 1.0 1.0 2.5 units box
- fix wallhi all wall/lj93 xhi EDGE 1.0 1.0 2.5
- fix wallhi all wall/lj126 v_wiggle 23.2 1.0 1.0 2.5
- fix zwalls all wall/colloid zlo 0.0 1.0 1.0 0.858 zhi 40.0 1.0 1.0 0.858
-
-Description
-"""""""""""
-
-Bound the simulation domain on one or more of its faces with a flat
-wall that interacts with the atoms in the group by generating a force
-on the atom in a direction perpendicular to the wall. The energy of
-wall-particle interactions depends on the style.
-
-For style *wall/lj93*\ , the energy E is given by the 9/3 potential:
-
-.. image:: Eqs/fix_wall_lj93.jpg
- :align: center
-
-For style *wall/lj126*\ , the energy E is given by the 12/6 potential:
-
-.. image:: Eqs/pair_lj.jpg
- :align: center
-
-For style *wall/lj1043*\ , the energy E is given by the 10/4/3 potential:
-
-.. image:: Eqs/fix_wall_lj1043.jpg
- :align: center
-
-For style *wall/colloid*\ , the energy E is given by an integrated form
-of the :doc:`pair_style colloid <pair_colloid>` potential:
-
-.. image:: Eqs/fix_wall_colloid.jpg
- :align: center
-
-For style *wall/harmonic*\ , the energy E is given by a harmonic spring
-potential:
-
-.. image:: Eqs/fix_wall_harmonic.jpg
- :align: center
-
-In all cases, *r* is the distance from the particle to the wall at
-position *coord*\ , and Rc is the *cutoff* distance at which the
-particle and wall no longer interact. The energy of the wall
-potential is shifted so that the wall-particle interaction energy is
-0.0 at the cutoff distance.
-
-Up to 6 walls or faces can be specified in a single command: *xlo*\ ,
-*xhi*\ , *ylo*\ , *yhi*\ , *zlo*\ , *zhi*\ . A *lo* face interacts with
-particles near the lower side of the simulation box in that dimension.
-A *hi* face interacts with particles near the upper side of the
-simulation box in that dimension.
-
-The position of each wall can be specified in one of 3 ways: as the
-EDGE of the simulation box, as a constant value, or as a variable. If
-EDGE is used, then the corresponding boundary of the current
-simulation box is used. If a numeric constant is specified then the
-wall is placed at that position in the appropriate dimension (x, y, or
-z). In both the EDGE and constant cases, the wall will never move.
-If the wall position is a variable, it should be specified as v_name,
-where name is an :doc:`equal-style variable <variable>` name. In this
-case the variable is evaluated each timestep and the result becomes
-the current position of the reflecting wall. Equal-style variables
-can specify formulas with various mathematical functions, and include
-:doc:`thermo_style <thermo_style>` command keywords for the simulation
-box parameters and timestep and elapsed time. Thus it is easy to
-specify a time-dependent wall position. See examples below.
-
-For the *wall/lj93* and *wall/lj126* and *wall/lj1043* styles,
-*epsilon* and *sigma* are the usual Lennard-Jones parameters, which
-determine the strength and size of the particle as it interacts with
-the wall. Epsilon has energy units. Note that this *epsilon* and
-*sigma* may be different than any *epsilon* or *sigma* values defined
-for a pair style that computes particle-particle interactions.
-
-The *wall/lj93* interaction is derived by integrating over a 3d
-half-lattice of Lennard-Jones 12/6 particles. The *wall/lj126*
-interaction is effectively a harder, more repulsive wall interaction.
-The *wall/lj1043* interaction is yet a different form of wall
-interaction, described in Magda et al in :ref:`(Magda) <Magda>`.
-
-For the *wall/colloid* style, *R* is the radius of the colloid
-particle, *D* is the distance from the surface of the colloid particle
-to the wall (r-R), and *sigma* is the size of a constituent LJ
-particle inside the colloid particle and wall. Note that the cutoff
-distance Rc in this case is the distance from the colloid particle
-center to the wall. The prefactor *epsilon* can be thought of as an
-effective Hamaker constant with energy units for the strength of the
-colloid-wall interaction. More specifically, the *epsilon* pre-factor
-= 4 * pi^2 * rho_wall * rho_colloid * epsilon * sigma^6, where epsilon
-and sigma are the LJ parameters for the constituent LJ
-particles. Rho_wall and rho_colloid are the number density of the
-constituent particles, in the wall and colloid respectively, in units
-of 1/volume.
-
-The *wall/colloid* interaction is derived by integrating over
-constituent LJ particles of size *sigma* within the colloid particle
-and a 3d half-lattice of Lennard-Jones 12/6 particles of size *sigma*
-in the wall. As mentioned in the preceeding paragraph, the density of
-particles in the wall and colloid can be different, as specified by
-the *epsilon* pre-factor.
-
-For the *wall/harmonic* style, *epsilon* is effectively the spring
-constant K, and has units (energy/distance^2). The input parameter
-*sigma* is ignored. The minimum energy position of the harmonic
-spring is at the *cutoff*\ . This is a repulsive-only spring since the
-interaction is truncated at the *cutoff*
-
-For any wall, the *epsilon* and/or *sigma* parameter can be specified
-as an :doc:`equal-style variable <variable>`, in which case it should be
-specified as v_name, where name is the variable name. As with a
-variable wall position, the variable is evaluated each timestep and
-the result becomes the current epsilon or sigma of the wall.
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent wall interaction.
-
-.. note::
-
- For all of the styles, you must insure that r is always > 0 for
- all particles in the group, or LAMMPS will generate an error. This
- means you cannot start your simulation with particles at the wall
- position *coord* (r = 0) or with particles on the wrong side of the
- wall (r < 0). For the *wall/lj93* and *wall/lj126* styles, the energy
- of the wall/particle interaction (and hence the force on the particle)
- blows up as r -> 0. The *wall/colloid* style is even more
- restrictive, since the energy blows up as D = r-R -> 0. This means
- the finite-size particles of radius R must be a distance larger than R
- from the wall position *coord*\ . The *harmonic* style is a softer
- potential and does not blow up as r -> 0, but you must use a large
- enough *epsilon* that particles always reamin on the correct side of
- the wall (r > 0).
-
-The *units* keyword determines the meaning of the distance units used
-to define a wall position, but only when a numeric constant or
-variable is used. It is not relevant when EDGE is used to specify a
-face position. In the variable case, the variable is assumed to
-produce a value compatible with the *units* setting you specify.
-
-A *box* value selects standard distance units as defined by the
-:doc:`units <units>` command, e.g. Angstroms for units = real or metal.
-A *lattice* value means the distance units are in lattice spacings.
-The :doc:`lattice <lattice>` command must have been previously used to
-define the lattice spacings.
-
-The *fld* keyword can be used with a *yes* setting to invoke the wall
-constraint before pairwise interactions are computed. This allows an
-implicit FLD model using :doc:`pair_style lubricateU <pair_lubricateU>`
-to include the wall force in its calculations. If the setting is
-*no*\ , wall forces are imposed after pairwise interactions, in the
-usual manner.
-
-The *pbc* keyword can be used with a *yes* setting to allow walls to
-be specified in a periodic dimension. See the
-:doc:`boundary <boundary>` command for options on simulation box
-boundaries. The default for *pbc* is *no*\ , which means the system
-must be non-periodic when using a wall. But you may wish to use a
-periodic box. E.g. to allow some particles to interact with the wall
-via the fix group-ID, and others to pass through it and wrap around a
-periodic box. In this case you should insure that the wall if
-sufficiently far enough away from the box boundary. If you do not,
-then particles may interact with both the wall and with periodic
-images on the other side of the box, which is probably not what you
-want.
-
-
-----------
-
-
-Here are examples of variable definitions that move the wall position
-in a time-dependent fashion using equal-style
-:doc:`variables <variable>`. The wall interaction parameters (epsilon,
-sigma) could be varied with additional variable definitions.
-
-.. parsed-literal::
-
- variable ramp equal ramp(0,10)
- fix 1 all wall xlo v_ramp 1.0 1.0 2.5
-
-.. parsed-literal::
-
- variable linear equal vdisplace(0,20)
- fix 1 all wall xlo v_linear 1.0 1.0 2.5
-
-.. parsed-literal::
-
- variable wiggle equal swiggle(0.0,5.0,3.0)
- fix 1 all wall xlo v_wiggle 1.0 1.0 2.5
-
-.. parsed-literal::
-
- variable wiggle equal cwiggle(0.0,5.0,3.0)
- fix 1 all wall xlo v_wiggle 1.0 1.0 2.5
-
-The ramp(lo,hi) function adjusts the wall position linearly from lo to
-hi over the course of a run. The vdisplace(c0,velocity) function does
-something similar using the equation position = c0 + velocity*delta,
-where delta is the elapsed time.
-
-The swiggle(c0,A,period) function causes the wall position to
-oscillate sinusoidally according to this equation, where omega = 2 PI
-/ period:
-
-.. parsed-literal::
-
- position = c0 + A sin(omega*delta)
-
-The cwiggle(c0,A,period) function causes the wall position to
-oscillate sinusoidally according to this equation, which will have an
-initial wall velocity of 0.0, and thus may impose a gentler
-perturbation on the particles:
-
-.. parsed-literal::
-
- position = c0 + A (1 - cos(omega*delta))
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy of interaction between atoms and each wall to
-the system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-This fix computes a global scalar energy and a global vector of
-forces, which can be accessed by various :ref:`output commands <howto_15>`. Note that the scalar energy is
-the sum of interactions with all defined walls. If you want the
-energy on a per-wall basis, you need to use multiple fix wall
-commands. The length of the vector is equal to the number of walls
-defined by the fix. Each vector value is the normal force on a
-specific wall. Note that an outward force on a wall will be a
-negative value for *lo* walls and a positive value for *hi* walls.
-The scalar and vector values calculated by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command.
-
-.. note::
-
- If you want the atom/wall interaction energy to be included in
- the total potential energy of the system (the quantity being
- minimized), you MUST enable the :doc:`fix_modify <fix_modify>` *energy*
- option for this fix.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix wall/reflect <fix_wall_reflect>`,
-:doc:`fix wall/gran <fix_wall_gran>`,
-:doc:`fix wall/region <fix_wall_region>`
-
-Default
-"""""""
-
-The option defaults units = lattice, fld = no, and pbc = no.
-
-
-----------
-
-
-.. _Magda:
-
-
-
-**(Magda)** Magda, Tirrell, Davis, J Chem Phys, 83, 1888-1901 (1985);
-erratum in JCP 84, 2901 (1986).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_wall_gran.txt b/doc/html/_sources/fix_wall_gran.txt
deleted file mode 100644
index a7a3191fd..000000000
--- a/doc/html/_sources/fix_wall_gran.txt
+++ /dev/null
@@ -1,186 +0,0 @@
-.. index:: fix wall/gran
-
-fix wall/gran command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID wall/gran Kn Kt fstyle gamma_n gamma_t xmu dampflag wallstyle args keyword values ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* wall/gran = style name of this fix command
-* fstyle = style of force interactions between particles and wall
-.. parsed-literal::
-
- possible choices: hooke, hooke/history, hertz/history
-
-* Kn = elastic constant for normal particle repulsion (force/distance units or pressure units - see discussion below)
-* Kt = elastic constant for tangential contact (force/distance units or pressure units - see discussion below)
-* gamma_n = damping coefficient for collisions in normal direction (1/time units or 1/time-distance units - see discussion below)
-* gamma_t = damping coefficient for collisions in tangential direction (1/time units or 1/time-distance units - see discussion below)
-* xmu = static yield criterion (unitless value between 0.0 and 1.0e4)
-* dampflag = 0 or 1 if tangential damping force is excluded or included
-* wallstyle = *xplane* or *yplane* or *zplane* or *zcylinder*
-* args = list of arguments for a particular style
-.. parsed-literal::
-
- *xplane* or *yplane* or *zplane* args = lo hi
- lo,hi = position of lower and upper plane (distance units), either can be NULL)
- *zcylinder* args = radius
- radius = cylinder radius (distance units)
-
-* zero or more keyword/value pairs may be appended to args
-* keyword = *wiggle* or *shear*
-.. parsed-literal::
-
- *wiggle* values = dim amplitude period
- dim = *x* or *y* or *z*
- amplitude = size of oscillation (distance units)
- period = time of oscillation (time units)
- *shear* values = dim vshear
- dim = *x* or *y* or *z*
- vshear = magnitude of shear velocity (velocity units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix 1 all wall/gran hooke 200000.0 NULL 50.0 NULL 0.5 0 xplane -10.0 10.0
- fix 1 all wall/gran hooke/history 200000.0 NULL 50.0 NULL 0.5 0 zplane 0.0 NULL
- fix 2 all wall/gran hooke 100000.0 20000.0 50.0 30.0 0.5 1 zcylinder 15.0 wiggle z 3.0 2.0
-
-Description
-"""""""""""
-
-Bound the simulation domain of a granular system with a frictional
-wall. All particles in the group interact with the wall when they are
-close enough to touch it.
-
-The nature of the wall/particle interactions are determined by the
-*fstyle* setting. It can be any of the styles defined by the
-:doc:`pair_style granular <pair_gran>` commands. Currently this is
-*hooke*\ , *hooke/history*\ , or *hertz/history*\ . The equation for the
-force between the wall and particles touching it is the same as the
-corresponding equation on the :doc:`pair_style granular <pair_gran>` doc
-page, in the limit of one of the two particles going to infinite
-radius and mass (flat wall). I.e. delta = radius - r = overlap of
-particle with wall, m_eff = mass of particle, and sqrt(RiRj/Ri+Rj)
-becomes sqrt(radius of particle). The units for Kn, Kt, gamma_n, and
-gamma_t are as described on that doc page. The meaning of xmu and
-dampflag are also as described on that page. Note that you can choose
-a different force styles and/or different values for the 6
-wall/particle coefficients than for particle/particle interactions.
-E.g. if you wish to model the wall as a different material.
-
-The parameters *Kn*\ , *Kt*\ , *gamma_n*\ , *gamma_t*\ , *xmu* and *dampflag*
-have the same meaning as those specified with the :doc:`pair_style granular <pair_gran>` commands. This means a NULL can be used for
-either *Kt* or *gamma_t* as described on that page. If a NULL is used
-for *Kt*\ , then a default value is used where *Kt* = 2/7 *Kn*\ . If a
-NULL is used for *gamma_t*\ , then a default value is used where
-*gamma_t* = 1/2 *gamma_n*\ .
-
-.. note::
-
- As discussed on the doc page for :doc:`pair_style granular <pair_gran>`, versions of LAMMPS before 9Jan09 used a
- different equation for Hertzian interactions. This means Hertizian
- wall/particle interactions have also changed. They now include a
- sqrt(radius) term which was not present before. Also the previous
- versions used Kn and Kt from the pairwise interaction and hardwired
- dampflag to 1, rather than letting them be specified directly. This
- means you can set the values of the wall/particle coefficients
- appropriately in the current code to reproduce the results of a
- prevoius Hertzian monodisperse calculation. For example, for the
- common case of a monodisperse system with particles of diameter 1, Kn,
- Kt, gamma_n, and gamma_s should be set sqrt(2.0) larger than they were
- previously.
-
-The effective mass *m_eff* in the formulas listed on the :doc:`pair_style granular <pair_gran>` doc page is the mass of the particle for
-particle/wall interactions (mass of wall is infinite). If the
-particle is part of a rigid body, its mass is replaced by the mass of
-the rigid body in those formulas. This is determined by searching for
-a :doc:`fix rigid <fix_rigid>` command (or its variants).
-
-The *wallstyle* can be planar or cylindrical. The 3 planar options
-specify a pair of walls in a dimension. Wall positions are given by
-*lo* and *hi*\ . Either of the values can be specified as NULL if a
-single wall is desired. For a *zcylinder* wallstyle, the cylinder's
-axis is at x = y = 0.0, and the radius of the cylinder is specified.
-
-Optionally, the wall can be moving, if the *wiggle* or *shear*
-keywords are appended. Both keywords cannot be used together.
-
-For the *wiggle* keyword, the wall oscillates sinusoidally, similar to
-the oscillations of particles which can be specified by the
-:doc:`fix move <fix_move>` command. This is useful in packing
-simulations of granular particles. The arguments to the *wiggle*
-keyword specify a dimension for the motion, as well as it's
-*amplitude* and *period*\ . Note that if the dimension is in the plane
-of the wall, this is effectively a shearing motion. If the dimension
-is perpendicular to the wall, it is more of a shaking motion. A
-*zcylinder* wall can only be wiggled in the z dimension.
-
-Each timestep, the position of a wiggled wall in the appropriate *dim*
-is set according to this equation:
-
-.. parsed-literal::
-
- position = coord + A - A cos (omega * delta)
-
-where *coord* is the specified initial position of the wall, *A* is
-the *amplitude*\ , *omega* is 2 PI / *period*\ , and *delta* is the time
-elapsed since the fix was specified. The velocity of the wall is set
-to the derivative of this expression.
-
-For the *shear* keyword, the wall moves continuously in the specified
-dimension with velocity *vshear*\ . The dimension must be tangential to
-walls with a planar *wallstyle*\ , e.g. in the *y* or *z* directions for
-an *xplane* wall. For *zcylinder* walls, a dimension of *z* means the
-cylinder is moving in the z-direction along it's axis. A dimension of
-*x* or *y* means the cylinder is spinning around the z-axis, either in
-the clockwise direction for *vshear* > 0 or counter-clockwise for
-*vshear* < 0. In this case, *vshear* is the tangential velocity of
-the wall at whatever *radius* has been defined.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-This fix writes the shear friction state of atoms interacting with the
-wall to :doc:`binary restart files <restart>`, so that a simulation can
-continue correctly if granular potentials with shear "history" effects
-are being used. See the :doc:`read_restart <read_restart>` command for
-info on how to re-specify a fix in an input script that reads a
-restart file, so that the operation of the fix continues in an
-uninterrupted fashion.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix. No global or per-atom quantities are stored by this fix for
-access by various :ref:`output commands <howto_15>`. No
-parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the GRANULAR package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Any dimension (xyz) that has a granular wall must be non-periodic.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix move <fix_move>`, :doc:`pair_style granular <pair_gran>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_wall_piston.txt b/doc/html/_sources/fix_wall_piston.txt
deleted file mode 100644
index 51b9198ae..000000000
--- a/doc/html/_sources/fix_wall_piston.txt
+++ /dev/null
@@ -1,133 +0,0 @@
-.. index:: fix wall/piston
-
-fix wall/piston command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID wall/piston face ... keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* wall/piston = style name of this fix command
-* face = *zlo*
-* zero or more keyword/value pairs may be appended
-* keyword = *pos* or *vel* or *ramp* or *units*
-.. parsed-literal::
-
- *pos* args = z
- z = z coordinate at which the piston begins (distance units)
- *vel* args = vz
- vz = final velocity of the piston (velocity units)
- *ramp* = use a linear velocity ramp from 0 to vz
- *temp* args = target damp seed extent
- target = target velocity for region immediately ahead of the piston
- damp = damping paramter (time units)
- seed = random number seed for langevin kicks
- extent = extent of thermostated region (distance units)
- *units* value = *lattice* or *box*
- *lattice* = the wall position is defined in lattice units
- *box* = the wall position is defined in simulation box units
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix xwalls all wall/piston zlo
- fix walls all wall/piston zlo pos 1.0 vel 10.0 units box
- fix top all wall/piston zlo vel 10.0 ramp
-
-Description
-"""""""""""
-
-Bound the simulation with a moving wall which reflect particles in the
-specified group and drive the system with an effective infinite-mass
-piston capable of driving shock waves.
-
-A momentum mirror technique is used, which means that if an atom (or
-the wall) moves such that an atom is outside the wall on a timestep by
-a distance delta (e.g. due to :doc:`fix nve <fix_nve>`), then it is put
-back inside the face by the same delta, and the velocity relative to
-the moving wall is flipped in z. For instance, a stationary particle
-hit with a piston wall with velocity vz, will end the timestep with a
-velocity of 2*vz.
-
-Currently the *face* keyword can only be *zlo*\ . This creates a piston
-moving in the positive z direction. Particles with z coordinate less
-than the wall position are reflected to a z coordinate greater than
-the wall position. If the piston velocity is vpz and the particle
-velocity before reflection is vzi, the particle velocity after
-reflection is -vzi + 2*vpz.
-
-The initial position of the wall can be specified by the *pos* keyword.
-
-The final velocity of the wall can be specified by the *vel* keyword
-
-The *ramp* keyword will cause the wall/piston to adjust the velocity
-linearly from zero velocity to *vel* over the course of the run. If
-the *ramp* keyword is omitted then the wall/piston moves at a constant
-velocity defined by *vel*\ .
-
-The *temp* keyword will cause the region immediately in front of the
-wall/piston to be thermostated with a Langevin thermostat. This
-region moves with the piston. The damping and kicking are measured in
-the reference frame of the piston. So, a temperature of zero would
-mean all particles were moving at exactly the speed of the
-wall/piston.
-
-The *units* keyword determines the meaning of the distance units used
-to define a wall position, but only when a numeric constant is used.
-
-A *box* value selects standard distance units as defined by the
-:doc:`units <units>` command, e.g. Angstroms for units = real or metal.
-A *lattice* value means the distance units are in lattice spacings.
-The :doc:`lattice <lattice>` command must have been previously used to
-define the lattice spacings.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howoto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix style is part of the SHOCK package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The face that has the wall/piston must be boundary type 's'
-(shrink-wrapped). The opposing face can be
-any boundary type other than periodic.
-
-A wall/piston should not be used with rigid bodies such as those
-defined by a "fix rigid" command. This is because the wall/piston
-displaces atoms directly rather than exerting a force on them.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix wall/reflect <fix_wall>` command, :doc:`fix append/atoms <fix_append_atoms>` command
-
-Default
-"""""""
-
-The keyword defaults are pos = 0, vel = 0, units = lattice.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_wall_reflect.txt b/doc/html/_sources/fix_wall_reflect.txt
deleted file mode 100644
index 54824d47a..000000000
--- a/doc/html/_sources/fix_wall_reflect.txt
+++ /dev/null
@@ -1,220 +0,0 @@
-.. index:: fix wall/reflect
-
-fix wall/reflect command
-========================
-
-fix wall/reflect/kk command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID wall/reflect face arg ... keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* wall/reflect = style name of this fix command
-* one or more face/arg pairs may be appended
-* face = *xlo* or *xhi* or *ylo* or *yhi* or *zlo* or *zhi*
-.. parsed-literal::
-
- *xlo*\ ,\ *ylo*\ ,\ *zlo* arg = EDGE or constant or variable
- EDGE = current lo edge of simulation box
- constant = number like 0.0 or -30.0 (distance units)
- variable = :doc:`equal-style variable <variable>` like v_x or v_wiggle
- *xhi*\ ,\ *yhi*\ ,\ *zhi* arg = EDGE or constant or variable
- EDGE = current hi edge of simulation box
- constant = number like 50.0 or 100.3 (distance units)
- variable = :doc:`equal-style variable <variable>` like v_x or v_wiggle
-
-* zero or more keyword/value pairs may be appended
-* keyword = *units*
-.. parsed-literal::
-
- *units* value = *lattice* or *box*
- *lattice* = the wall position is defined in lattice units
- *box* = the wall position is defined in simulation box units
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix xwalls all wall/reflect xlo EDGE xhi EDGE
- fix walls all wall/reflect xlo 0.0 ylo 10.0 units box
- fix top all wall/reflect zhi v_pressdown
-
-Description
-"""""""""""
-
-Bound the simulation with one or more walls which reflect particles
-in the specified group when they attempt to move thru them.
-
-Reflection means that if an atom moves outside the wall on a timestep
-by a distance delta (e.g. due to :doc:`fix nve <fix_nve>`), then it is
-put back inside the face by the same delta, and the sign of the
-corresponding component of its velocity is flipped.
-
-When used in conjunction with :doc:`fix nve <fix_nve>` and :doc:`run_style verlet <run_style>`, the resultant time-integration algorithm is
-equivalent to the primitive splitting algorithm (PSA) described by
-:ref:`Bond <Bond>`. Because each reflection event divides
-the corresponding timestep asymmetrically, energy conservation is only
-satisfied to O(dt), rather than to O(dt^2) as it would be for
-velocity-Verlet integration without reflective walls.
-
-Up to 6 walls or faces can be specified in a single command: *xlo*\ ,
-*xhi*\ , *ylo*\ , *yhi*\ , *zlo*\ , *zhi*\ . A *lo* face reflects particles
-that move to a coordinate less than the wall position, back in the
-*hi* direction. A *hi* face reflects particles that move to a
-coordinate higher than the wall position, back in the *lo* direction.
-
-The position of each wall can be specified in one of 3 ways: as the
-EDGE of the simulation box, as a constant value, or as a variable. If
-EDGE is used, then the corresponding boundary of the current
-simulation box is used. If a numeric constant is specified then the
-wall is placed at that position in the appropriate dimension (x, y, or
-z). In both the EDGE and constant cases, the wall will never move.
-If the wall position is a variable, it should be specified as v_name,
-where name is an :doc:`equal-style variable <variable>` name. In this
-case the variable is evaluated each timestep and the result becomes
-the current position of the reflecting wall. Equal-style variables
-can specify formulas with various mathematical functions, and include
-:doc:`thermo_style <thermo_style>` command keywords for the simulation
-box parameters and timestep and elapsed time. Thus it is easy to
-specify a time-dependent wall position.
-
-The *units* keyword determines the meaning of the distance units used
-to define a wall position, but only when a numeric constant or
-variable is used. It is not relevant when EDGE is used to specify a
-face position. In the variable case, the variable is assumed to
-produce a value compatible with the *units* setting you specify.
-
-A *box* value selects standard distance units as defined by the
-:doc:`units <units>` command, e.g. Angstroms for units = real or metal.
-A *lattice* value means the distance units are in lattice spacings.
-The :doc:`lattice <lattice>` command must have been previously used to
-define the lattice spacings.
-
-
-----------
-
-
-Here are examples of variable definitions that move the wall position
-in a time-dependent fashion using equal-style
-:doc:`variables <variable>`.
-
-.. parsed-literal::
-
- variable ramp equal ramp(0,10)
- fix 1 all wall/reflect xlo v_ramp
-
-.. parsed-literal::
-
- variable linear equal vdisplace(0,20)
- fix 1 all wall/reflect xlo v_linear
-
-.. parsed-literal::
-
- variable wiggle equal swiggle(0.0,5.0,3.0)
- fix 1 all wall/reflect xlo v_wiggle
-
-.. parsed-literal::
-
- variable wiggle equal cwiggle(0.0,5.0,3.0)
- fix 1 all wall/reflect xlo v_wiggle
-
-The ramp(lo,hi) function adjusts the wall position linearly from lo to
-hi over the course of a run. The vdisplace(c0,velocity) function does
-something similar using the equation position = c0 + velocity*delta,
-where delta is the elapsed time.
-
-The swiggle(c0,A,period) function causes the wall position to
-oscillate sinusoidally according to this equation, where omega = 2 PI
-/ period:
-
-.. parsed-literal::
-
- position = c0 + A sin(omega*delta)
-
-The cwiggle(c0,A,period) function causes the wall position to
-oscillate sinusoidally according to this equation, which will have an
-initial wall velocity of 0.0, and thus may impose a gentler
-perturbation on the particles:
-
-.. parsed-literal::
-
- position = c0 + A (1 - cos(omega*delta))
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various :ref:`output commands <howto_15>`. No parameter of this fix can
-be used with the *start/stop* keywords of the :doc:`run <run>` command.
-This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-Any dimension (xyz) that has a reflecting wall must be non-periodic.
-
-A reflecting wall should not be used with rigid bodies such as those
-defined by a "fix rigid" command. This is because the wall/reflect
-displaces atoms directly rather than exerts a force on them. For
-rigid bodies, use a soft wall instead, such as :doc:`fix wall/lj93 <fix_wall>`. LAMMPS will flag the use of a rigid
-fix with fix wall/reflect with a warning, but will not generate an
-error.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix wall/lj93 <fix_wall>`, :doc:`fix oneway <fix_oneway>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Bond:
-
-
-
-**(Bond)** Bond and Leimkuhler, SIAM J Sci Comput, 30, p 134 (2007).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_wall_region.txt b/doc/html/_sources/fix_wall_region.txt
deleted file mode 100644
index 1b8b77440..000000000
--- a/doc/html/_sources/fix_wall_region.txt
+++ /dev/null
@@ -1,235 +0,0 @@
-.. index:: fix wall/region
-
-fix wall/region command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID wall/region region-ID style epsilon sigma cutoff
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* wall/region = style name of this fix command
-* region-ID = region whose boundary will act as wall
-* style = *lj93* or *lj126* or *colloid* or *harmonic*
-* epsilon = strength factor for wall-particle interaction (energy or energy/distance^2 units)
-* sigma = size factor for wall-particle interaction (distance units)
-* cutoff = distance from wall at which wall-particle interaction is cut off (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix wall all wall/region mySphere lj93 1.0 1.0 2.5
-
-Description
-"""""""""""
-
-Treat the surface of the geometric region defined by the *region-ID*
-as a bounding wall which interacts with nearby particles according to
-the specified style. The distance between a particle and the surface
-is the distance to the nearest point on the surface and the force the
-wall exerts on the particle is along the direction between that point
-and the particle, which is the direction normal to the surface at that
-point. Note that if the region surface is comprised of multiple
-"faces", then each face can exert a force on the particle if it is
-close enough. E.g. for :doc:`region_style block <region>`, a particle
-in the interior, near a corner of the block, could feel wall forces
-from 1, 2, or 3 faces of the block.
-
-Regions are defined using the :doc:`region <region>` command. Note that
-the region volume can be interior or exterior to the bounding surface,
-which will determine in which direction the surface interacts with
-particles, i.e. the direction of the surface normal. The surface of
-the region only exerts forces on particles "inside" the region; if a
-particle is "outside" the region it will generate an error, because it
-has moved through the wall.
-
-Regions can either be primitive shapes (block, sphere, cylinder, etc)
-or combinations of primitive shapes specified via the *union* or
-*intersect* region styles. These latter styles can be used to
-construct particle containers with complex shapes. Regions can also
-change over time via the :doc:`region <region>` command keywords (move)
-and *rotate*\ . If such a region is used with this fix, then the of
-region surface will move over time in the corresponding manner.
-
-.. note::
-
- As discussed on the :doc:`region <region>` command doc page,
- regions in LAMMPS do not get wrapped across periodic boundaries. It
- is up to you to insure that periodic or non-periodic boundaries are
- specified appropriately via the :doc:`boundary <boundary>` command when
- using a region as a wall that bounds particle motion. This also means
- that if you embed a region in your simulation box and want it to
- repulse particles from its surface (using the "side out" option in the
- :doc:`region <region>` command), that its repulsive force will not be
- felt across a periodic boundary.
-
-.. note::
-
- For primitive regions with sharp corners and/or edges (e.g. a
- block or cylinder), wall/particle forces are computed accurately for
- both interior and exterior regions. For *union* and *intersect*
- regions, additional sharp corners and edges may be present due to the
- intersection of the surfaces of 2 or more primitive volumes. These
- corners and edges can be of two types: concave or convex. Concave
- points/edges are like the corners of a cube as seen by particles in
- the interior of a cube. Wall/particle forces around these features
- are computed correctly. Convex points/edges are like the corners of a
- cube as seen by particles exterior to the cube, i.e. the points jut
- into the volume where particles are present. LAMMPS does NOT compute
- the location of these convex points directly, and hence wall/particle
- forces in the cutoff volume around these points suffer from
- inaccuracies. The basic problem is that the outward normal of the
- surface is not continuous at these points. This can cause particles
- to feel no force (they don't "see" the wall) when in one location,
- then move a distance epsilon, and suddenly feel a large force because
- they now "see" the wall. In a worst-case scenario, this can blow
- particles out of the simulation box. Thus, as a general rule you
- should not use the fix wall/region command with *union* or
- *interesect* regions that have convex points or edges.
-
-.. note::
-
- Similarly, you should not define *union* or *intersert* regions
- for use with this command that share a common face, even if the face
- is smooth. E.g. two regions of style block in a *union* region, where
- the two blocks have the same face. This is because LAMMPS discards
- points that are part of multiple sub-regions when calculating
- wall/particle interactions, to avoid double-counting the interaction.
- Having two coincident faces could cause the face to become invisible
- to the particles. The solution is to make the two faces differ by
- epsilon in their position.
-
-The energy of wall-particle interactions depends on the specified
-style.
-
-For style *lj93*\ , the energy E is given by the 9/3 potential:
-
-.. image:: Eqs/fix_wall_lj93.jpg
- :align: center
-
-For style *lj126*\ , the energy E is given by the 12/6 potential:
-
-.. image:: Eqs/pair_lj.jpg
- :align: center
-
-For style *colloid*\ , the energy E is given by an integrated form of
-the :doc:`pair_style colloid <pair_colloid>` potential:
-
-.. image:: Eqs/fix_wall_colloid.jpg
- :align: center
-
-For style *wall/harmonic*\ , the energy E is given by a harmonic spring
-potential:
-
-.. image:: Eqs/fix_wall_harmonic.jpg
- :align: center
-
-In all cases, *r* is the distance from the particle to the region
-surface, and Rc is the *cutoff* distance at which the particle and
-surface no longer interact. The energy of the wall potential is
-shifted so that the wall-particle interaction energy is 0.0 at the
-cutoff distance.
-
-For the *lj93* and *lj126* styles, *epsilon* and *sigma* are the usual
-Lennard-Jones parameters, which determine the strength and size of the
-particle as it interacts with the wall. Epsilon has energy units.
-Note that this *epsilon* and *sigma* may be different than any
-*epsilon* or *sigma* values defined for a pair style that computes
-particle-particle interactions.
-
-The *lj93* interaction is derived by integrating over a 3d
-half-lattice of Lennard-Jones 12/6 particles. The *lj126* interaction
-is effectively a harder, more repulsive wall interaction.
-
-For the *colloid* style, *epsilon* is effectively a Hamaker constant
-with energy units for the colloid-wall interaction, *R* is the radius
-of the colloid particle, *D* is the distance from the surface of the
-colloid particle to the wall (r-R), and *sigma* is the size of a
-constituent LJ particle inside the colloid particle. Note that the
-cutoff distance Rc in this case is the distance from the colloid
-particle center to the wall.
-
-The *colloid* interaction is derived by integrating over constituent
-LJ particles of size *sigma* within the colloid particle and a 3d
-half-lattice of Lennard-Jones 12/6 particles of size *sigma* in the
-wall.
-
-For the *wall/harmonic* style, *epsilon* is effectively the spring
-constant K, and has units (energy/distance^2). The input parameter
-*sigma* is ignored. The minimum energy position of the harmonic
-spring is at the *cutoff*\ . This is a repulsive-only spring since the
-interaction is truncated at the *cutoff*
-
-.. note::
-
- For all of the styles, you must insure that r is always > 0 for
- all particles in the group, or LAMMPS will generate an error. This
- means you cannot start your simulation with particles on the region
- surface (r = 0) or with particles on the wrong side of the region
- surface (r < 0). For the *wall/lj93* and *wall/lj126* styles, the
- energy of the wall/particle interaction (and hence the force on the
- particle) blows up as r -> 0. The *wall/colloid* style is even more
- restrictive, since the energy blows up as D = r-R -> 0. This means
- the finite-size particles of radius R must be a distance larger than R
- from the region surface. The *harmonic* style is a softer potential
- and does not blow up as r -> 0, but you must use a large enough
- *epsilon* that particles always reamin on the correct side of the
- region surface (r > 0).
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`.
-
-The :doc:`fix_modify <fix_modify>` *energy* option is supported by this
-fix to add the energy of interaction between atoms and the wall to the
-system's potential energy as part of :doc:`thermodynamic output <thermo_style>`.
-
-The :doc:`fix_modify <fix_modify>` *respa* option is supported by this
-fix. This allows to set at which level of the :doc:`r-RESPA <run_style>`
-integrator the fix is adding its forces. Default is the outermost level.
-
-This fix computes a global scalar energy and a global 3-length vector
-of forces, which can be accessed by various :ref:`output commands <howto_15>`. The scalar energy is the sum
-of energy interactions for all particles interacting with the wall
-represented by the region surface. The 3 vector quantities are the
-x,y,z components of the total force acting on the wall due to the
-particles. The scalar and vector values calculated by this fix are
-"extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command.
-
-The forces due to this fix are imposed during an energy minimization,
-invoked by the :doc:`minimize <minimize>` command.
-
-.. note::
-
- If you want the atom/wall interaction energy to be included in
- the total potential energy of the system (the quantity being
- minimized), you MUST enable the :doc:`fix_modify <fix_modify>` *energy*
- option for this fix.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix wall/lj93 <fix_wall>`,
-:doc:`fix wall/lj126 <fix_wall>`,
-:doc:`fix wall/colloid <fix_wall>`,
-:doc:`fix wall/gran <fix_wall_gran>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/fix_wall_srd.txt b/doc/html/_sources/fix_wall_srd.txt
deleted file mode 100644
index 7db1a6714..000000000
--- a/doc/html/_sources/fix_wall_srd.txt
+++ /dev/null
@@ -1,225 +0,0 @@
-.. index:: fix wall/srd
-
-fix wall/srd command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID wall/srd face arg ... keyword value ...
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* wall/srd = style name of this fix command
-* one or more face/arg pairs may be appended
-* face = *xlo* or *xhi* or *ylo* or *yhi* or *zlo* or *zhi*
-.. parsed-literal::
-
- *xlo*\ ,\ *ylo*\ ,\ *zlo* arg = EDGE or constant or variable
- EDGE = current lo edge of simulation box
- constant = number like 0.0 or -30.0 (distance units)
- variable = :doc:`equal-style variable <variable>` like v_x or v_wiggle
- *xhi*\ ,\ *yhi*\ ,\ *zhi* arg = EDGE or constant or variable
- EDGE = current hi edge of simulation box
- constant = number like 50.0 or 100.3 (distance units)
- variable = :doc:`equal-style variable <variable>` like v_x or v_wiggle
-
-* zero or more keyword/value pairs may be appended
-* keyword = *units*
-.. parsed-literal::
-
- *units* value = *lattice* or *box*
- *lattice* = the wall position is defined in lattice units
- *box* = the wall position is defined in simulation box units
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix xwalls all wall/srd xlo EDGE xhi EDGE
- fix walls all wall/srd xlo 0.0 ylo 10.0 units box
- fix top all wall/srd zhi v_pressdown
-
-Description
-"""""""""""
-
-Bound the simulation with one or more walls which interact with
-stochastic reaction dynamics (SRD) particles as slip (smooth) or
-no-slip (rough) flat surfaces. The wall interaction is actually
-invoked via the :doc:`fix srd <fix_srd>` command, only on the group of
-SRD particles it defines, so the group setting for the fix wall/srd
-command is ignored.
-
-A particle/wall collision occurs if an SRD particle moves outside the
-wall on a timestep. This alters the position and velocity of the SRD
-particle and imparts a force to the wall.
-
-The *collision* and *Tsrd* settings specified via the :doc:`fix srd <fix_srd>` command affect the SRD/wall collisions. A *slip*
-setting for the *collision* keyword means that the tangential
-component of the SRD particle momentum is preserved. Thus only a
-normal force is imparted to the wall. The normal component of the new
-SRD velocity is sampled from a Gaussian distribution at temperature
-*Tsrd*\ .
-
-For a *noslip* setting of the *collision* keyword, both the normal and
-tangential components of the new SRD velocity are sampled from a
-Gaussian distribution at temperature *Tsrd*\ . Additionally, a new
-tangential direction for the SRD velocity is chosen randomly. This
-collision style imparts both a normal and tangential force to the
-wall.
-
-Up to 6 walls or faces can be specified in a single command: *xlo*\ ,
-*xhi*\ , *ylo*\ , *yhi*\ , *zlo*\ , *zhi*\ . A *lo* face reflects particles
-that move to a coordinate less than the wall position, back in the
-*hi* direction. A *hi* face reflects particles that move to a
-coordinate higher than the wall position, back in the *lo* direction.
-
-The position of each wall can be specified in one of 3 ways: as the
-EDGE of the simulation box, as a constant value, or as a variable. If
-EDGE is used, then the corresponding boundary of the current
-simulation box is used. If a numeric constant is specified then the
-wall is placed at that position in the appropriate dimension (x, y, or
-z). In both the EDGE and constant cases, the wall will never move.
-If the wall position is a variable, it should be specified as v_name,
-where name is an :doc:`equal-style variable <variable>` name. In this
-case the variable is evaluated each timestep and the result becomes
-the current position of the reflecting wall. Equal-style variables
-can specify formulas with various mathematical functions, and include
-:doc:`thermo_style <thermo_style>` command keywords for the simulation
-box parameters and timestep and elapsed time. Thus it is easy to
-specify a time-dependent wall position.
-
-.. note::
-
- Because the trajectory of the SRD particle is tracked as it
- collides with the wall, you must insure that r = distance of the
- particle from the wall, is always > 0 for SRD particles, or LAMMPS
- will generate an error. This means you cannot start your simulation
- with SRD particles at the wall position *coord* (r = 0) or with
- particles on the wrong side of the wall (r < 0).
-
-.. note::
-
- If you have 2 or more walls that come together at an edge or
- corner (e.g. walls in the x and y dimensions), then be sure to set the
- *overlap* keyword to *yes* in the :doc:`fix srd <fix_srd>` command,
- since the walls effectively overlap when SRD particles collide with
- them. LAMMPS will issue a warning if you do not do this.
-
-.. note::
-
- The walls of this fix only interact with SRD particles, as
- defined by the :doc:`fix srd <fix_srd>` command. If you are simulating
- a mixture containing other kinds of particles, then you should
- typically use :doc:`another wall command <fix_wall>` to act on the other
- particles. Since SRD particles will be colliding both with the walls
- and the other particles, it is important to insure that the other
- particle's finite extent does not overlap an SRD wall. If you do not
- do this, you may generate errors when SRD particles end up "inside"
- another particle or a wall at the beginning of a collision step.
-
-The *units* keyword determines the meaning of the distance units used
-to define a wall position, but only when a numeric constant is used.
-It is not relevant when EDGE or a variable is used to specify a face
-position.
-
-A *box* value selects standard distance units as defined by the
-:doc:`units <units>` command, e.g. Angstroms for units = real or metal.
-A *lattice* value means the distance units are in lattice spacings.
-The :doc:`lattice <lattice>` command must have been previously used to
-define the lattice spacings.
-
-
-----------
-
-
-Here are examples of variable definitions that move the wall position
-in a time-dependent fashion using equal-style
-:doc:`variables <variable>`.
-
-.. parsed-literal::
-
- variable ramp equal ramp(0,10)
- fix 1 all wall/srd xlo v_ramp
-
-.. parsed-literal::
-
- variable linear equal vdisplace(0,20)
- fix 1 all wall/srd xlo v_linear
-
-.. parsed-literal::
-
- variable wiggle equal swiggle(0.0,5.0,3.0)
- fix 1 all wall/srd xlo v_wiggle
-
-.. parsed-literal::
-
- variable wiggle equal cwiggle(0.0,5.0,3.0)
- fix 1 all wall/srd xlo v_wiggle
-
-The ramp(lo,hi) function adjusts the wall position linearly from lo to
-hi over the course of a run. The displace(c0,velocity) function does
-something similar using the equation position = c0 + velocity*delta,
-where delta is the elapsed time.
-
-The swiggle(c0,A,period) function causes the wall position to
-oscillate sinusoidally according to this equation, where omega = 2 PI
-/ period:
-
-.. parsed-literal::
-
- position = c0 + A sin(omega*delta)
-
-The cwiggle(c0,A,period) function causes the wall position to
-oscillate sinusoidally according to this equation, which will have an
-initial wall velocity of 0.0, and thus may impose a gentler
-perturbation on the particles:
-
-.. parsed-literal::
-
- position = c0 + A (1 - cos(omega*delta))
-
-
-----------
-
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
-are relevant to this fix.
-
-This fix computes a global array of values which can be accessed by
-various :ref:`output commands <howto_15>`. The number of
-rows in the array is equal to the number of walls defined by the fix.
-The number of columns is 3, for the x,y,z components of force on each
-wall.
-
-Note that an outward normal force on a wall will be a negative value
-for *lo* walls and a positive value for *hi* walls. The array values
-calculated by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-Any dimension (xyz) that has an SRD wall must be non-periodic.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix srd <fix_srd>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/group.txt b/doc/html/_sources/group.txt
deleted file mode 100644
index 45715292d..000000000
--- a/doc/html/_sources/group.txt
+++ /dev/null
@@ -1,315 +0,0 @@
-.. index:: group
-
-group command
-=============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- group ID style args
-
-* ID = user-defined name of the group
-* style = *delete* or *region* or *type* or *id* or *molecule* or *variable* or *include* or *subtract* or *union* or *intersect* or *dynamic* or *static*
-.. parsed-literal::
-
- *delete* = no args
- *clear* = no args
- *region* args = region-ID
- *type* or *id* or *molecule*
- args = list of one or more atom types, atom IDs, or molecule IDs
- any entry in list can be a sequence formatted as A:B or A:B:C where
- A = starting index, B = ending index,
- C = increment between indices, 1 if not specified
- args = logical value
- logical = "<" or "<=" or ">" or ">=" or "==" or "!="
- value = an atom type or atom ID or molecule ID (depending on *style*\ )
- args = logical value1 value2
- logical = "<>"
- value1,value2 = atom types or atom IDs or molecule IDs (depending on *style*\ )
- *variable* args = variable-name
- *include* args = molecule
- molecule = add atoms to group with same molecule ID as atoms already in group
- *subtract* args = two or more group IDs
- *union* args = one or more group IDs
- *intersect* args = two or more group IDs
- *dynamic* args = parent-ID keyword value ...
- one or more keyword/value pairs may be appended
- keyword = *region* or *var* or *every*
- *region* value = region-ID
- *var* value = name of variable
- *every* value = N = update group every this many timesteps
- *static* = no args
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- group edge region regstrip
- group water type 3 4
- group sub id 10 25 50
- group sub id 10 25 50 500:1000
- group sub id 100:10000:10
- group sub id <= 150
- group polyA molecule <> 50 250
- group hienergy variable eng
- group hienergy include molecule
- group boundary subtract all a2 a3
- group boundary union lower upper
- group boundary intersect upper flow
- group boundary delete
- group mine dynamic all region myRegion every 100
-
-Description
-"""""""""""
-
-Identify a collection of atoms as belonging to a group. The group ID
-can then be used in other commands such as :doc:`fix <fix>`,
-:doc:`compute <compute>`, :doc:`dump <dump>`, or :doc:`velocity <velocity>`
-to act on those atoms together.
-
-If the group ID already exists, the group command adds the specified
-atoms to the group.
-
-.. note::
-
- By default groups are static, meaning the atoms are permanently
- assigned to the group. For example, if the *region* style is used to
- assign atoms to a group, the atoms will remain in the group even if
- they later move out of the region. As explained below, the *dynamic*
- style can be used to make a group dynamic so that a periodic
- determination is made as to which atoms are in the group. Since many
- LAMMPS commands operate on groups of atoms, you should think carefully
- about whether making a group dynamic makes sense for your model.
-
-A group with the ID *all* is predefined. All atoms belong to this
-group. This group cannot be deleted, or made dynamic.
-
-The *delete* style removes the named group and un-assigns all atoms
-that were assigned to that group. Since there is a restriction (see
-below) that no more than 32 groups can be defined at any time, the
-*delete* style allows you to remove groups that are no longer needed,
-so that more can be specified. You cannot delete a group if it has
-been used to define a current :doc:`fix <fix>` or :doc:`compute <compute>`
-or :doc:`dump <dump>`.
-
-The *clear* style un-assigns all atoms that were assigned to that
-group. This may be dangerous to do during a simulation run,
-e.g. using the :doc:`run every <run>` command if a fix or compute or
-other operation expects the atoms in the group to remain constant, but
-LAMMPS does not check for this.
-
-The *region* style puts all atoms in the region volume into the group.
-Note that this is a static one-time assignment. The atoms remain
-assigned (or not assigned) to the group even in they later move out of
-the region volume.
-
-The *type*\ , *id*\ , and *molecule* styles put all atoms with the
-specified atom types, atom IDs, or molecule IDs into the group. These
-3 styles can use arguments specified in one of two formats.
-
-The first format is a list of values (types or IDs). For example, the
-2nd command in the examples above puts all atoms of type 3 or 4 into
-the group named *water*\ . Each entry in the list can be a
-colon-separated sequence A:B or A:B:C, as in two of the examples
-above. A "sequence" generates a sequence of values (types or IDs),
-with an optional increment. The first example with 500:1000 has the
-default increment of 1 and would add all atom IDs from 500 to 1000
-(inclusive) to the group sub, along with 10,25,50 since they also
-appear in the list of values. The second example with 100:10000:10
-uses an increment of 10 and would thus would add atoms IDs
-100,110,120, ... 9990,10000 to the group sub.
-
-The second format is a *logical* followed by one or two values (type
-or ID). The 7 valid logicals are listed above. All the logicals
-except <> take a single argument. The 3rd example above adds all
-atoms with IDs from 1 to 150 to the group named *sub*\ . The logical <>
-means "between" and takes 2 arguments. The 4th example above adds all
-atoms belonging to molecules with IDs from 50 to 250 (inclusive) to
-the group named polyA.
-
-The *variable* style evaluates a variable to determine which atoms to
-add to the group. It must be an :doc:`atom-style variable <variable>`
-previously defined in the input script. If the variable evaluates
-to a non-zero value for a particular atom, then that atom is added
-to the specified group.
-
-Atom-style variables can specify formulas that include thermodynamic
-quantities, per-atom values such as atom coordinates, or per-atom
-quantities calculated by computes, fixes, or other variables. They
-can also include Boolean logic where 2 numeric values are compared to
-yield a 1 or 0 (effectively a true or false). Thus using the
-*variable* style, is a general way to flag specific atoms to include
-or exclude from a group.
-
-For example, these lines define a variable "eatom" that calculates the
-potential energy of each atom and includes it in the group if its
-potential energy is above the threshhold value -3.0.
-
-.. parsed-literal::
-
- compute 1 all pe/atom
- compute 2 all reduce sum c_1
- thermo_style custom step temp pe c_2
- run 0
-
-.. parsed-literal::
-
- variable eatom atom "c_1 > -3.0"
- group hienergy variable eatom
-
-Note that these lines
-
-.. parsed-literal::
-
- compute 2 all reduce sum c_1
- thermo_style custom step temp pe c_2
- run 0
-
-are necessary to insure that the "eatom" variable is current when the
-group command invokes it. Because the eatom variable computes the
-per-atom energy via the pe/atom compute, it will only be current if a
-run has been performed which evaluated pairwise energies, and the
-pe/atom compute was actually invoked during the run. Printing the
-thermodyanmic info for compute 2 insures that this is the case, since
-it sums the pe/atom compute values (in the reduce compute) to output
-them to the screen. See the "Variable Accuracy" section of the
-:doc:`variable <variable>` doc page for more details on insuring that
-variables are current when they are evaluated between runs.
-
-The *include* style with its arg *molecule* adds atoms to a group that
-have the same molecule ID as atoms already in the group. The molecule
-ID = 0 is ignored in this operation, since it is assumed to flag
-isolated atoms that are not part of molecules. An example of where
-this operation is useful is if the *region* style has been used
-previously to add atoms to a group that are within a geometric region.
-If molecules straddle the region boundary, then atoms outside the
-region that are part of molecules with atoms inside the region will
-not be in the group. Using the group command a 2nd time with *include
-molecule* will add those atoms that are outside the region to the
-group.
-
-.. note::
-
- The *include molecule* operation is relatively expensive in a
- parallel sense. This is because it requires communication of relevant
- molecule IDs between all the processors and each processor to loop
- over its atoms once per processor, to compare its atoms to the list of
- molecule IDs from every other processor. Hence it scales as N, rather
- than N/P as most of the group operations do, where N is the number of
- atoms, and P is the number of processors.
-
-The *subtract* style takes a list of two or more existing group names
-as arguments. All atoms that belong to the 1st group, but not to any
-of the other groups are added to the specified group.
-
-The *union* style takes a list of one or more existing group names as
-arguments. All atoms that belong to any of the listed groups are
-added to the specified group.
-
-The *intersect* style takes a list of two or more existing group names
-as arguments. Atoms that belong to every one of the listed groups are
-added to the specified group.
-
-
-----------
-
-
-The *dynamic* style flags an existing or new group as dynamic. This
-means atoms will be (re)assigned to the group periodically as a
-simulation runs. This is in contrast to static groups where atoms are
-permanently assigned to the group. The way the assignment occurs is
-as follows. Only atoms in the group specified as the parent group via
-the parent-ID are assigned to the dynamic group before the following
-conditions are applied. If the *region* keyword is used, atoms not in
-the specified region are removed from the dynamic group. If the *var*
-keyword is used, the variable name must be an atom-style or
-atomfile-style variable. The variable is evaluated and atoms whose
-per-atom values are 0.0, are removed from the dynamic group.
-
-The assignment of atoms to a dynamic group is done at the beginning of
-each run and on every timestep that is a multiple of *N*\ , which is the
-argument for the *every* keyword (N = 1 is the default). For an
-energy minimization, via the :doc:`minimize <minimize>` command, an
-assignement is made at the beginning of the minimization, but not
-during the iterations of the minimizer.
-
-The point in the timestep at which atoms are assigned to a dynamic
-group is after the initial stage of velocity Verlet time integration
-has been performed, and before neighbor lists or forces are computed.
-This is the point in the timestep where atom positions have just
-changed due to the time integration, so the region criterion should be
-accurate, if applied.
-
-.. note::
-
- If the *region* keyword is used to determine what atoms are in
- the dynamic group, atoms can move outside of the simulation box
- between reneighboring events. Thus if you want to include all atoms
- on the left side of the simulation box, you probably want to set the
- left boundary of the region to be outside the simulation box by some
- reasonable amount (e.g. up to the cutoff of the potential), else they
- may be excluded from the dynamic region.
-
-Here is an example of using a dynamic group to shrink the set of atoms
-being integrated by using a spherical region with a variable radius
-(shrinking from 18 to 5 over the course of the run). This could be
-used to model a quench of the system, freezing atoms outside the
-shrinking sphere, then converting the remaining atoms to a static
-group and running further.
-
-.. parsed-literal::
-
- variable nsteps equal 5000
- variable rad equal 18-(step/v_nsteps)*(18-5)
- region ss sphere 20 20 0 v_rad
- group mobile dynamic all region ss
- fix 1 mobile nve
- run ${nsteps}
- group mobile static
- run ${nsteps}
-
-.. note::
-
- All fixes and computes take a group ID as an argument, but they
- do not all allow for use of a dynamic group. If you get an error
- message that this is not allowed, but feel that it should be for the
- fix or compute in question, then please post your reasoning to the
- LAMMPS mail list and we can change it.
-
-The *static* style removes the setting for a dynamic group, converting
-it to a static group (the default). The atoms in the static group are
-those currently in the dynamic group.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-There can be no more than 32 groups defined at one time, including
-"all".
-
-The parent group of a dynamic group cannot itself be a dynamic group.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump <dump>`, :doc:`fix <fix>`, :doc:`region <region>`,
-:doc:`velocity <velocity>`
-
-Default
-"""""""
-
-All atoms belong to the "all" group.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/group2ndx.txt b/doc/html/_sources/group2ndx.txt
deleted file mode 100644
index 52db7cb19..000000000
--- a/doc/html/_sources/group2ndx.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-.. index:: group2ndx
-
-group2ndx command
-=================
-
-ndx2group command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- group2ndx file group-ID ...
- ndx2group file group-ID ...
-
-* file = name of index file to write out or read in
-* zero or more group IDs may be appended
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- group2ndx allindex.ndx
- group2ndx someindex.ndx upper lower mobile
- ndx2group someindex.ndx
- ndx2group someindex.ndx mobile
-
-Description
-"""""""""""
-
-Write or read a Gromacs style index file in text format that associates
-atom IDs with the corresponding group definitions. This index file can be
-used with in combination with Gromacs analysis tools or to import group
-definitions into the :doc:`fix colvars <fix_colvars>` input file. It can
-also be used to save and restore group definitions for static groups.
-
-The *group2ndx* command will write group definitions to an index file.
-Without specifying any group IDs, all groups will be written to the index
-file. When specifying group IDs, only those groups will be written to the
-index file. In order to follow the Gromacs conventions, the group *all*
-will be renamed to *System* in the index file.
-
-The *ndx2group* command will create of update group definitions from those
-stored in an index file. Without specifying any group IDs, all groups except
-*System* will be read from the index file and the corresponding groups
-recreated. If a group of the same name already exists, it will be completely
-reset. When specifying group IDs, those groups, if present, will be read
-from the index file and restored.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command requires that atoms have atom IDs, since this is the
-information that is written to the index file.
-
-These commands are part of the USER-COLVARS package. They are only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`group <group>`, :doc:`dump <dump>`, :doc:`fix colvars <fix_colvars>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/if.txt b/doc/html/_sources/if.txt
deleted file mode 100644
index f33ec9984..000000000
--- a/doc/html/_sources/if.txt
+++ /dev/null
@@ -1,214 +0,0 @@
-.. index:: if
-
-if command
-==========
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- if boolean then t1 t2 ... elif boolean f1 f2 ... elif boolean f1 f2 ... else e1 e2 ...
-
-* boolean = a Boolean expression evaluated as TRUE or FALSE (see below)
-* then = required word
-* t1,t2,...,tN = one or more LAMMPS commands to execute if condition is met, each enclosed in quotes
-* elif = optional word, can appear multiple times
-* f1,f2,...,fN = one or more LAMMPS commands to execute if elif condition is met, each enclosed in quotes (optional arguments)
-* else = optional argument
-* e1,e2,...,eN = one or more LAMMPS commands to execute if no condition is met, each enclosed in quotes (optional arguments)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- if "${steps} > 1000" then quit
- if "${myString} == a10" then quit
- if "$x <= $y" then "print X is smaller = $x" else "print Y is smaller = $y"
- if "(${eng} > 0.0) || ($n < 1000)" then &
- "timestep 0.005" &
- elif $n<10000 &
- "timestep 0.01" &
- else &
- "timestep 0.02" &
- "print 'Max step reached'"
- if "${eng} > ${eng_previous}" then "jump file1" else "jump file2"
-
-Description
-"""""""""""
-
-This command provides an if-then-else capability within an input
-script. A Boolean expression is evaluted and the result is TRUE or
-FALSE. Note that as in the examples above, the expression can contain
-variables, as defined by the :doc:`variable <variable>` command, which
-will be evaluated as part of the expression. Thus a user-defined
-formula that reflects the current state of the simulation can be used
-to issue one or more new commands.
-
-If the result of the Boolean expression is TRUE, then one or more
-commands (t1, t2, ..., tN) are executed. If it is FALSE, then Boolean
-expressions associated with successive elif keywords are evaluated
-until one is found to be true, in which case its commands (f1, f2,
-..., fN) are executed. If no Boolean expression is TRUE, then the
-commands associated with the else keyword, namely (e1, e2, ..., eN),
-are executed. The elif and else keywords and their associated
-commands are optional. If they aren't specified and the initial
-Boolean expression is FALSE, then no commands are executed.
-
-The syntax for Boolean expressions is described below.
-
-Each command (t1, f1, e1, etc) can be any valid LAMMPS input script
-command, except an :doc:`include <include>` command, which is not
-allowed. If the command is more than one word, it must enclosed in
-quotes, so it will be treated as a single argument, as in the examples
-above.
-
-.. note::
-
- If a command itself requires a quoted argument (e.g. a
- :doc:`print <print>` command), then double and single quotes can be used
- and nested in the usual manner, as in the examples above and below.
- See :ref:`Section_commands 2 <cmd_2>` of the manual for
- more details on using quotes in arguments. Only one of level of
- nesting is allowed, but that should be sufficient for most use cases.
-
-Note that by using the line continuation character "&", the if command
-can be spread across many lines, though it is still a single command:
-
-.. parsed-literal::
-
- if "$a < $b" then &
- "print 'Minimum value = $a'" &
- "run 1000" &
- else &
- 'print "Minimum value = $b"' &
- "minimize 0.001 0.001 1000 10000"
-
-Note that if one of the commands to execute is :doc:`quit <quit>`, as in
-the first example above, then executing the command will cause LAMMPS
-to halt.
-
-Note that by jumping to a label in the same input script, the if
-command can be used to break out of a loop. See the :doc:`variable delete <variable>` command for info on how to delete the associated
-loop variable, so that it can be re-used later in the input script.
-
-Here is an example of a loop which checks every 1000 steps if the
-system temperature has reached a certain value, and if so, breaks out
-of the loop to finish the run. Note that any variable could be
-checked, so long as it is current on the timestep when the run
-completes. As explained on the :doc:`variable <variable>` doc page,
-this can be insured by includig the variable in thermodynamic output.
-
-.. parsed-literal::
-
- variable myTemp equal temp
- label loop
- variable a loop 1000
- run 1000
- if "${myTemp} < 300.0" then "jump SELF break"
- next a
- jump SELF loop
- label break
- print "ALL DONE"
-
-Here is an example of a double loop which uses the if and
-:doc:`jump <jump>` commands to break out of the inner loop when a
-condition is met, then continues iterating thru the outer loop.
-
-.. parsed-literal::
-
- label loopa
- variable a loop 5
- label loopb
- variable b loop 5
- print "A,B = $a,$b"
- run 10000
- if "$b > 2" then "jump SELF break"
- next b
- jump in.script loopb
- label break
- variable b delete
- next a
- jump SELF loopa
-
-
-----------
-
-
-The Boolean expressions for the if and elif keywords have a C-like
-syntax. Note that each expression is a single argument within the if
-command. Thus if you want to include spaces in the expression for
-clarity, you must enclose the entire expression in quotes.
-
-An expression is built out of numbers (which start with a digit or
-period or minus sign) or strings (which start with a letter and can
-contain alphanumeric characters or underscores):
-
-.. parsed-literal::
-
- 0.2, 100, 1.0e20, -15.4, etc
- InP, myString, a123, ab_23_cd, etc
-
-and Boolean operators:
-
-.. parsed-literal::
-
- A == B, A != B, A < B, A <= B, A > B, A >= B, A && B, A || B, !A
-
-Each A and B is a number or string or a variable reference like $a or
-${abc}, or A or B can be another Boolean expression.
-
-If a variable is used it can produce a number when evaluated, like an
-:doc:`equal-style variable <variable>`. Or it can produce a string,
-like an :doc:`index-style variable <variable>`. For an individual
-Boolean operator, A and B must both be numbers or must both be
-strings. You cannot compare a number to a string.
-
-Expressions are evaluated left to right and have the usual C-style
-precedence: the unary logical NOT operator "!" has the highest
-precedence, the 4 relational operators "<", "<=", ">", and ">=" are
-next; the two remaining relational operators "==" and "!=" are next;
-then the logical AND operator "&&"; and finally the logical OR
-operator "||" has the lowest precedence. Parenthesis can be used to
-group one or more portions of an expression and/or enforce a different
-order of evaluation than what would occur with the default precedence.
-
-When the 6 relational operators (first 6 in list above) compare 2
-numbers, they return either a 1.0 or 0.0 depending on whether the
-relationship between A and B is TRUE or FALSE. When the 6 relational
-operators compare 2 strings, they also return a 1.0 or 0.0 for TRUE or
-FALSE, but the comparison is done by the C function strcmp().
-
-When the 3 logical operators (last 3 in list above) compare 2 numbers,
-they also return either a 1.0 or 0.0 depending on whether the
-relationship between A and B is TRUE or FALSE (or just A). The
-logical AND operator will return 1.0 if both its arguments are
-non-zero, else it returns 0.0. The logical OR operator will return
-1.0 if either of its arguments is non-zero, else it returns 0.0. The
-logical NOT operator returns 1.0 if its argument is 0.0, else it
-returns 0.0. The 3 logical operators can only be used to operate on
-numbers, not on strings.
-
-The overall Boolean expression produces a TRUE result if the result is
-non-zero. If the result is zero, the expression result is FALSE.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`variable <variable>`, :doc:`print <print>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_class2.txt b/doc/html/_sources/improper_class2.txt
deleted file mode 100644
index e8d310a2d..000000000
--- a/doc/html/_sources/improper_class2.txt
+++ /dev/null
@@ -1,144 +0,0 @@
-.. index:: improper_style class2
-
-improper_style class2 command
-=============================
-
-improper_style class2/omp command
-=================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_style class2
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style class2
- improper_coeff 1 100.0 0
- improper_coeff * aa 0.0 0.0 0.0 115.06 130.01 115.06
-
-Description
-"""""""""""
-
-The *class2* improper style uses the potential
-
-.. image:: Eqs/improper_class2.jpg
- :align: center
-
-where Ei is the improper term and Eaa is an angle-angle term. The 3 X
-terms in Ei are an average over 3 out-of-plane angles.
-
-The 4 atoms in an improper quadruplet (listed in the data file read by
-the :doc:`read_data <read_data>` command) are ordered I,J,K,L. X_IJKL
-refers to the angle between the plane of I,J,K and the plane of J,K,L,
-and the bond JK lies in both planes. Similarly for X_KJLI and X_LJIK.
-Note that atom J appears in the common bonds (JI, JK, JL) of all 3 X
-terms. Thus J (the 2nd atom in the quadruplet) is the atom of
-symmetry in the 3 X angles.
-
-The subscripts on the various theta's refer to different combinations
-of 3 atoms (I,J,K,L) used to form a particular angle. E.g. Theta_IJL
-is the angle formed by atoms I,J,L with J in the middle. Theta1,
-theta2, theta3 are the equilibrium positions of those angles. Again,
-atom J (the 2nd atom in the quadruplet) is the atom of symmetry in the
-theta angles, since it is always the center atom.
-
-Since atom J is the atom of symmetry, normally the bonds J-I, J-K, J-L
-would exist for an improper to be defined between the 4 atoms, but
-this is not required.
-
-See :ref:`(Sun) <improper-Sun>` for a description of the COMPASS class2 force field.
-
-Coefficients for the Ei and Eaa formulas must be defined for each
-improper type via the :doc:`improper_coeff <improper_coeff>` command as
-in the example above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands.
-
-These are the 2 coefficients for the Ei formula:
-
-* K (energy/radian^2)
-* X0 (degrees)
-
-X0 is specified in degrees, but LAMMPS converts it to radians
-internally; hence the units of K are in energy/radian^2.
-
-For the Eaa formula, each line in a
-:doc:`improper_coeff <improper_coeff>` command in the input script lists
-7 coefficients, the first of which is "aa" to indicate they are
-AngleAngle coefficients. In a data file, these coefficients should be
-listed under a "AngleAngle Coeffs" heading and you must leave out the
-"aa", i.e. only list 6 coefficients after the improper type.
-
-* aa
-* M1 (energy/distance)
-* M2 (energy/distance)
-* M3 (energy/distance)
-* theta1 (degrees)
-* theta2 (degrees)
-* theta3 (degrees)
-
-The theta values are specified in degrees, but LAMMPS converts them to
-radians internally; hence the units of M are in energy/radian^2.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This improper style can only be used if LAMMPS was built with the
-CLASS2 package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_coeff <improper_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _improper-Sun:
-
-
-
-**(Sun)** Sun, J Phys Chem B 102, 7338-7364 (1998).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_coeff.txt b/doc/html/_sources/improper_coeff.txt
deleted file mode 100644
index 1e7390778..000000000
--- a/doc/html/_sources/improper_coeff.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-.. index:: improper_coeff
-
-improper_coeff command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_coeff N args
-
-* N = improper type (see asterisk form below)
-* args = coefficients for one or more improper types
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_coeff 1 300.0 0.0
- improper_coeff * 80.2 -1 2
- improper_coeff *4 80.2 -1 2
-
-Description
-"""""""""""
-
-Specify the improper force field coefficients for one or more improper
-types. The number and meaning of the coefficients depends on the
-improper style. Improper coefficients can also be set in the data
-file read by the :doc:`read_data <read_data>` command or in a restart
-file.
-
-N can be specified in one of two ways. An explicit numeric value can
-be used, as in the 1st example above. Or a wild-card asterisk can be
-used to set the coefficients for multiple improper types. This takes
-the form "*" or "*n" or "n*" or "m*n". If N = the number of improper
-types, then an asterisk with no numeric values means all types from 1
-to N. A leading asterisk means all types from 1 to n (inclusive). A
-trailing asterisk means all types from n to N (inclusive). A middle
-asterisk means all types from m to n (inclusive).
-
-Note that using an improper_coeff command can override a previous
-setting for the same improper type. For example, these commands set
-the coeffs for all improper types, then overwrite the coeffs for just
-improper type 2:
-
-.. parsed-literal::
-
- improper_coeff * 300.0 0.0
- improper_coeff 2 50.0 0.0
-
-A line in a data file that specifies improper coefficients uses the
-exact same format as the arguments of the improper_coeff command in an
-input script, except that wild-card asterisks should not be used since
-coefficients for all N types must be listed in the file. For example,
-under the "Improper Coeffs" section of a data file, the line that
-corresponds to the 1st example above would be listed as
-
-.. parsed-literal::
-
- 1 300.0 0.0
-
-The :doc:`improper_style class2 <improper_class2>` is an exception to
-this rule, in that an additional argument is used in the input script
-to allow specification of the cross-term coefficients. See its doc
-page for details.
-
-
-----------
-
-
-Here is an alphabetic list of improper styles defined in LAMMPS. Click on
-the style to display the formula it computes and coefficients
-specified by the associated :doc:`improper_coeff <improper_coeff>` command.
-
-Note that there are also additional improper styles submitted by users
-which are included in the LAMMPS distribution. The list of these with
-links to the individual styles are given in the improper section of
-:ref:`this page <cmd_5>`.
-
-* :doc:`improper_style none <improper_none>` - turn off improper interactions
-* :doc:`improper_style hybrid <improper_hybrid>` - define multiple styles of improper interactions
-
-* :doc:`improper_style class2 <improper_class2>` - COMPASS (class 2) improper
-* :doc:`improper_style cvff <improper_cvff>` - CVFF improper
-* :doc:`improper_style harmonic <improper_harmonic>` - harmonic improper
-* :doc:`improper_style umbrella <improper_umbrella>` - DREIDING improper
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command must come after the simulation box is defined by a
-:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`, or
-:doc:`create_box <create_box>` command.
-
-An improper style must be defined before any improper coefficients are
-set, either in the input script or in a data file.
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_style <improper_style>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_cossq.txt b/doc/html/_sources/improper_cossq.txt
deleted file mode 100644
index c55ba965e..000000000
--- a/doc/html/_sources/improper_cossq.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-.. index:: improper_style cossq
-
-improper_style cossq command
-============================
-
-improper_style cossq/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_style cossq
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style cossq
- improper_coeff 1 4.0 0.0
-
-Description
-"""""""""""
-
-The *cossq* improper style uses the potential
-
-.. image:: Eqs/improper_cossq.jpg
- :align: center
-
-where x is the improper angle, x0 is its equilibrium value, and K is a
-prefactor.
-
-If the 4 atoms in an improper quadruplet (listed in the data file read
-by the :doc:`read_data <read_data>` command) are ordered I,J,K,L then X
-is the angle between the plane of I,J,K and the plane of J,K,L.
-Alternatively, you can think of atoms J,K,L as being in a plane, and
-atom I above the plane, and X as a measure of how far out-of-plane I
-is with respect to the other 3 atoms.
-
-Note that defining 4 atoms to interact in this way, does not mean that
-bonds necessarily exist between I-J, J-K, or K-L, as they would in a
-linear dihedral. Normally, the bonds I-J, I-K, I-L would exist for an
-improper to be defined between the 4 atoms.
-
-The following coefficients must be defined for each improper type via
-the :doc:`improper_coeff <improper_coeff>` command as in the example
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* K (energy/radian^2)
-* X0 (degrees)
-
-X0 is specified in degrees, but LAMMPS converts it to radians
-internally; hence the units of K are in energy/radian^2.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This improper style can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_coeff <improper_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_cvff.txt b/doc/html/_sources/improper_cvff.txt
deleted file mode 100644
index 36845544e..000000000
--- a/doc/html/_sources/improper_cvff.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-.. index:: improper_style cvff
-
-improper_style cvff command
-===========================
-
-improper_style cvff/intel command
-=================================
-
-improper_style cvff/omp command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_style cvff
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style cvff
- improper_coeff 1 80.0 -1 4
-
-Description
-"""""""""""
-
-The *cvff* improper style uses the potential
-
-.. image:: Eqs/improper_cvff.jpg
- :align: center
-
-where phi is the improper dihedral angle.
-
-If the 4 atoms in an improper quadruplet (listed in the data file read
-by the :doc:`read_data <read_data>` command) are ordered I,J,K,L then
-the improper dihedral angle is between the plane of I,J,K and the
-plane of J,K,L. Note that because this is effectively a dihedral
-angle, the formula for this improper style is the same as for
-:doc:`dihedral_style harmonic <dihedral_harmonic>`.
-
-Note that defining 4 atoms to interact in this way, does not mean that
-bonds necessarily exist between I-J, J-K, or K-L, as they would in a
-linear dihedral. Normally, the bonds I-J, I-K, I-L would exist for an
-improper to be defined between the 4 atoms.
-
-The following coefficients must be defined for each improper type via
-the :doc:`improper_coeff <improper_coeff>` command as in the example
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* K (energy)
-* d (+1 or -1)
-* n (0,1,2,3,4,6)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This improper style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_coeff <improper_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_distance.txt b/doc/html/_sources/improper_distance.txt
deleted file mode 100644
index 125b1f82c..000000000
--- a/doc/html/_sources/improper_distance.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-.. index:: improper_style distance
-
-improper_style distance command
-===============================
-
-Syntax
-""""""
-
-improper_style distance
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style distance
- improper_coeff 1 80.0 100.0
-
-Description
-"""""""""""
-
-The *distance* improper style uses the potential
-
-.. image:: Eqs/improper_dist-1.jpg
- :align: center
-
-where d is the distance between the central atom and the plane formed
-by the other three atoms. If the 4 atoms in an improper quadruplet
-(listed in the data file read by the :doc:`read_data <read_data>`
-command) are ordered I,J,K,L then the I-atom is assumed to be the
-central atom.
-
-.. image:: JPG/improper_distance.jpg
- :align: center
-
-Note that defining 4 atoms to interact in this way, does not mean that
-bonds necessarily exist between I-J, J-K, or K-L, as they would in a
-linear dihedral. Normally, the bonds I-J, I-K, I-L would exist for an
-improper to be defined between the 4 atoms.
-
-The following coefficients must be defined for each improper type via
-the improper_coeff command as in the example above, or in the data
-file or restart files read by the read_data or read_restart commands:
-
-* K_2 (energy/distance^2)
-* K_4 (energy/distance^4)
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This improper style can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_coeff <improper_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_fourier.txt b/doc/html/_sources/improper_fourier.txt
deleted file mode 100644
index d7fac056a..000000000
--- a/doc/html/_sources/improper_fourier.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-.. index:: improper_style fourier
-
-improper_style fourier command
-==============================
-
-improper_style fourier/omp command
-==================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_style fourier
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style fourier
- improper_coeff 1 100.0 180.0
-
-Description
-"""""""""""
-
-The *fourier* improper style uses the following potential:
-
-.. image:: Eqs/improper_fourier.jpg
- :align: center
-
-where K is the force constant and omega is the angle between the IL
-axis and the IJK plane:
-
-.. image:: Eqs/umbrella.jpg
- :align: center
-
-If all parameter (see bellow) is not zero, the all the three possible angles will taken in account.
-
-The following coefficients must be defined for each improper type via
-the :doc:`improper_coeff <improper_coeff>` command as in the example
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* K (energy)
-* C0 (real)
-* C1 (real)
-* C2 (real)
-* all (integer >= 0)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER_MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_coeff <improper_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_harmonic.txt b/doc/html/_sources/improper_harmonic.txt
deleted file mode 100644
index f80e06d4f..000000000
--- a/doc/html/_sources/improper_harmonic.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-.. index:: improper_style harmonic
-
-improper_style harmonic command
-===============================
-
-improper_style harmonic/intel command
-=====================================
-
-improper_style harmonic/kk command
-==================================
-
-improper_style harmonic/omp command
-===================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_style harmonic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style harmonic
- improper_coeff 1 100.0 0
-
-Description
-"""""""""""
-
-The *harmonic* improper style uses the potential
-
-.. image:: Eqs/improper_harmonic.jpg
- :align: center
-
-where X is the improper angle, X0 is its equilibrium value, and K is a
-prefactor. Note that the usual 1/2 factor is included in K.
-
-If the 4 atoms in an improper quadruplet (listed in the data file read
-by the :doc:`read_data <read_data>` command) are ordered I,J,K,L then X
-is the angle between the plane of I,J,K and the plane of J,K,L.
-Alternatively, you can think of atoms J,K,L as being in a plane, and
-atom I above the plane, and X as a measure of how far out-of-plane I
-is with respect to the other 3 atoms.
-
-Note that defining 4 atoms to interact in this way, does not mean that
-bonds necessarily exist between I-J, J-K, or K-L, as they would in a
-linear dihedral. Normally, the bonds I-J, I-K, I-L would exist for an
-improper to be defined between the 4 atoms.
-
-The following coefficients must be defined for each improper type via
-the :doc:`improper_coeff <improper_coeff>` command as in the example
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* K (energy/radian^2)
-* X0 (degrees)
-
-X0 is specified in degrees, but LAMMPS converts it to radians
-internally; hence the units of K are in energy/radian^2.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This improper style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_coeff <improper_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_hybrid.txt b/doc/html/_sources/improper_hybrid.txt
deleted file mode 100644
index 728a46bfd..000000000
--- a/doc/html/_sources/improper_hybrid.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-.. index:: improper_style hybrid
-
-improper_style hybrid command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_style hybrid style1 style2 ...
-
-* style1,style2 = list of one or more improper styles
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style hybrid harmonic helix
- improper_coeff 1 harmonic 120.0 30
- improper_coeff 2 cvff 20.0 -1 2
-
-Description
-"""""""""""
-
-The *hybrid* style enables the use of multiple improper styles in one
-simulation. An improper style is assigned to each improper type. For
-example, impropers in a polymer flow (of improper type 1) could be
-computed with a *harmonic* potential and impropers in the wall
-boundary (of improper type 2) could be computed with a *cvff*
-potential. The assignment of improper type to style is made via the
-:doc:`improper_coeff <improper_coeff>` command or in the data file.
-
-In the improper_coeff command, the first coefficient sets the improper
-style and the remaining coefficients are those appropriate to that
-style. In the example above, the 2 improper_coeff commands would set
-impropers of improper type 1 to be computed with a *harmonic*
-potential with coefficients 120.0, 30 for K, X0. Improper type 2
-would be computed with a *cvff* potential with coefficients 20.0, -1,
-2 for K, d, n.
-
-If the improper *class2* potential is one of the hybrid styles, it
-requires additional AngleAngle coefficients be specified in the data
-file. These lines must also have an additional "class2" argument
-added after the improper type. For improper types which are assigned
-to other hybrid styles, use the style name (e.g. "harmonic")
-appropriate to that style. The AngleAngle coeffs for that improper
-type will then be ignored.
-
-An improper style of *none* can be specified as the 2nd argument to
-the improper_coeff command, if you desire to turn off certain improper
-types.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This improper style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Unlike other improper styles, the hybrid improper style does not store
-improper coefficient info for individual sub-styles in a :doc:`binary restart files <restart>`. Thus when retarting a simulation from a
-restart file, you need to re-specify improper_coeff commands.
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_coeff <improper_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_none.txt b/doc/html/_sources/improper_none.txt
deleted file mode 100644
index 86efc8003..000000000
--- a/doc/html/_sources/improper_none.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-.. index:: improper_style none
-
-improper_style none command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_style none
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style none
-
-Description
-"""""""""""
-
-Using an improper style of none means imroper forces and energies are
-not computed, even if quadruplets of improper atoms were listed in the
-data file read by the :doc:`read_data <read_data>` command.
-
-See the :doc:`improper_style zero <improper_zero>` command for a way to
-calculate improper statistics, but compute no improper interactions.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_style zero <improper_zero>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_ring.txt b/doc/html/_sources/improper_ring.txt
deleted file mode 100644
index 63ff04af9..000000000
--- a/doc/html/_sources/improper_ring.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-.. index:: improper_style ring
-
-improper_style ring command
-===========================
-
-improper_style ring/omp command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_style ring
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style ring
- improper_coeff 1 8000 70.5
-
-Description
-"""""""""""
-
-The *ring* improper style uses the potential
-
-.. image:: Eqs/improper_ring.jpg
- :align: center
-
-where K is a prefactor, theta is the angle formed by the atoms
-specified by (i,j,k,l) indices and theta0 its equilibrium value.
-
-If the 4 atoms in an improper quadruplet (listed in the data file read
-by the :doc:`read_data <read_data>` command) are ordered i,j,k,l then
-theta_\ *ijl* is the angle between atoms i,j and l, theta_\ *ijk* is the
-angle between atoms i,j and k, theta_\ *kjl* is the angle between atoms
-j,k, and l.
-
-The "ring" improper style implements the improper potential introduced
-by Destree et al., in Equation (9) of :ref:`(Destree) <Destree>`. This
-potential does not affect small amplitude vibrations but is used in an
-ad-hoc way to prevent the onset of accidentially large amplitude
-fluctuations leading to the occurrence of a planar conformation of the
-three bonds i-j, j-k and j-l, an intermediate conformation toward the
-chiral inversion of a methine carbon. In the "Impropers" section of
-data file four atoms: i, j, k and l are specified with i,j and l lying
-on the backbone of the chain and k specifying the chirality of j.
-
-The following coefficients must be defined for each improper type via
-the :doc:`improper_coeff <improper_coeff>` command as in the example
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* K (energy/radian^2)
-* theta0 (degrees)
-
-theta0 is specified in degrees, but LAMMPS converts it to radians
-internally; hence the units of K are in energy/radian^2.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This improper style can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_coeff <improper_coeff>`
-
-.. _Destree:
-
-
-
-**(Destree)** M. Destree, F. Laupretre, A. Lyulin, and J.-P. Ryckaert,
-J Chem Phys, 112, 9632 (2000).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_style.txt b/doc/html/_sources/improper_style.txt
deleted file mode 100644
index 8acf745f0..000000000
--- a/doc/html/_sources/improper_style.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-.. index:: improper_style
-
-improper_style command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_style style
-
-* style = *none* or *hybrid* or *class2* or *cvff* or *harmonic*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style harmonic
- improper_style cvff
- improper_style hybrid cvff harmonic
-
-Description
-"""""""""""
-
-Set the formula(s) LAMMPS uses to compute improper interactions
-between quadruplets of atoms, which remain in force for the duration
-of the simulation. The list of improper quadruplets is read in by a
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>` command
-from a data or restart file. Note that the ordering of the 4 atoms in
-an improper quadruplet determines the the definition of the improper
-angle used in the formula for each style. See the doc pages of
-individual styles for details.
-
-Hybrid models where impropers are computed using different improper
-potentials can be setup using the *hybrid* improper style.
-
-The coefficients associated with an improper style can be specified in
-a data or restart file or via the :doc:`improper_coeff <improper_coeff>`
-command.
-
-All improper potentials store their coefficient data in binary restart
-files which means improper_style and
-:doc:`improper_coeff <improper_coeff>` commands do not need to be
-re-specified in an input script that restarts a simulation. See the
-:doc:`read_restart <read_restart>` command for details on how to do
-this. The one exception is that improper_style *hybrid* only stores
-the list of sub-styles in the restart file; improper coefficients need
-to be re-specified.
-
-.. note::
-
- When both an improper and pair style is defined, the
- :doc:`special_bonds <special_bonds>` command often needs to be used to
- turn off (or weight) the pairwise interaction that would otherwise
- exist between a group of 4 bonded atoms.
-
-
-----------
-
-
-Here is an alphabetic list of improper styles defined in LAMMPS.
-Click on the style to display the formula it computes and coefficients
-specified by the associated :doc:`improper_coeff <improper_coeff>`
-command.
-
-Note that there are also additional improper styles submitted by users
-which are included in the LAMMPS distribution. The list of these with
-links to the individual styles are given in the improper section of
-:ref:`this page <cmd_5>`.
-
-* :doc:`improper_style none <improper_none>` - turn off improper interactions
-* :doc:`improper_style zero <improper_zero>` - topology but no interactions
-* :doc:`improper_style hybrid <improper_hybrid>` - define multiple styles of improper interactions
-
-* :doc:`improper_style class2 <improper_class2>` - COMPASS (class 2) improper
-* :doc:`improper_style cvff <improper_cvff>` - CVFF improper
-* :doc:`improper_style harmonic <improper_harmonic>` - harmonic improper
-* :doc:`improper_style umbrella <improper_umbrella>` - DREIDING improper
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-Improper styles can only be set for atom_style choices that allow
-impropers to be defined.
-
-Most improper styles are part of the MOLECULE package. They are only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-The doc pages for individual improper potentials tell if it is part of
-a package.
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_coeff <improper_coeff>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- improper_style none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_umbrella.txt b/doc/html/_sources/improper_umbrella.txt
deleted file mode 100644
index b7c5b3c27..000000000
--- a/doc/html/_sources/improper_umbrella.txt
+++ /dev/null
@@ -1,110 +0,0 @@
-.. index:: improper_style umbrella
-
-improper_style umbrella command
-===============================
-
-improper_style umbrella/omp command
-===================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_style umbrella
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style umbrella
- improper_coeff 1 100.0 180.0
-
-Description
-"""""""""""
-
-The *umbrella* improper style uses the following potential, which is
-commonly referred to as a classic inversion and used in the
-:ref:`DREIDING <howto_4>` force field:
-
-.. image:: Eqs/improper_umbrella.jpg
- :align: center
-
-where K is the force constant and omega is the angle between the IL
-axis and the IJK plane:
-
-.. image:: Eqs/umbrella.jpg
- :align: center
-
-If omega0 = 0 the potential term has a minimum for the planar
-structure. Otherwise it has two minima at +/- omega0, with a barrier
-in between.
-
-See :ref:`(Mayo) <umbrella-Mayo>` for a description of the DREIDING force field.
-
-The following coefficients must be defined for each improper type via
-the :doc:`improper_coeff <improper_coeff>` command as in the example
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* K (energy)
-* omega0 (degrees)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This improper style can only be used if LAMMPS was built with the
-MOLECULE package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`improper_coeff <improper_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _umbrella-Mayo:
-
-
-
-**(Mayo)** Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909
-(1990),
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/improper_zero.txt b/doc/html/_sources/improper_zero.txt
deleted file mode 100644
index 486376928..000000000
--- a/doc/html/_sources/improper_zero.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-.. index:: improper_style zero
-
-improper_style zero command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- improper_style zero *nocoeff*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- improper_style zero
- improper_style zero nocoeff
- improper_coeff *
-
-Description
-"""""""""""
-
-Using an improper style of zero means improper forces and energies are
-not computed, but the geometry of improper quadruplets is still
-accessible to other commands.
-
-As an example, the :doc:`compute improper/local <compute_improper_local>` command can be used to
-compute the chi values for the list of quadruplets of improper atoms
-listed in the data file read by the :doc:`read_data <read_data>`
-command. If no improper style is defined, this command cannot be
-used.
-
-The optional *nocoeff* flag allows to read data files with a ImproperCoeff
-section for any improper style. Similarly, any improper_coeff commands
-will only be checked for the improper type number and the rest ignored.
-
-Note that the :doc:`improper_coeff <improper_coeff>` command must be
-used for all improper types, though no additional values are
-specified.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-:doc:`improper_style none <improper_none>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/include.txt b/doc/html/_sources/include.txt
deleted file mode 100644
index 9dce22029..000000000
--- a/doc/html/_sources/include.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-.. index:: include
-
-include command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- include file
-
-* file = filename of new input script to switch to
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- include newfile
- include in.run2
-
-Description
-"""""""""""
-
-This command opens a new input script file and begins reading LAMMPS
-commands from that file. When the new file is finished, the original
-file is returned to. Include files can be nested as deeply as
-desired. If input script A includes script B, and B includes A, then
-LAMMPS could run for a long time.
-
-If the filename is a variable (see the :doc:`variable <variable>`
-command), different processor partitions can run different input
-scripts.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`variable <variable>`, :doc:`jump <jump>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/info.txt b/doc/html/_sources/info.txt
deleted file mode 100644
index 9f9088227..000000000
--- a/doc/html/_sources/info.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-.. index:: info
-
-info command
-============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- info args
-
-args = one or more of the following keywords: *out*\ , *all*\ , *system*\ , *communication*\ , *computes*\ , *dumps*\ , *fixes*\ , *groups*\ , *regions*\ , *variables*\ , *time*\ , or *configuration*
- *out* values = *screen*\ , *log*\ , *append* filename, *overwrite* filename:ul
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- info system
- info groups computes variables
- info all out log
- info all out append info.txt
-
-Description
-"""""""""""
-
-Print out information about the current internal state of the running
-LAMMPS process. This can be helpful when debugging or validating
-complex input scripts. Several output categories are available and
-one or more output category may be requested.
-
-The *out* flag controls where the output is sent. It can only be sent
-to one target. By default this is the screen, if it is active. The
-*log* argument selects the log file instead. With the *append* and
-*overwrite* option, followed by a filename, the output is written
-to that file, which is either appended to or overwritten, respectively.
-
-The *all* flag activates printing all categories listed below.
-
-The *system* category prints a general system overview listing. This
-includes the unit style, atom style, number of atoms, bonds, angles,
-dihedrals, and impropers and the number of the respective types, box
-dimensions and properties, force computing styles and more.
-
-The *communication* category prints a variety of information about
-communication and parallelization: the MPI library version level,
-the number of MPI ranks and OpenMP threads, the communication style
-and layout, the processor grid dimensions, ghost atom communication
-mode, cutoff, and related settings.
-
-The *computes* category prints a list of all currently defined
-computes, their IDs and styles and groups they operate on.
-
-The *dumps* category prints a list of all currently active dumps,
-their IDs, styles, filenames, groups, and dump frequencies.
-
-The *fixes* category prints a list of all currently defined fixes,
-their IDs and styles and groups they operate on.
-
-The *groups* category prints a list of all currently defined groups.
-
-The *regions* category prints a list of all currently defined regions,
-their IDs and styles and whether "inside" or "outside" atoms are
-selected.
-
-The *variables* category prints a list of all currently defined
-variables, their names, styles, definition and last computed value, if
-available.
-
-The *time* category prints the accumulated CPU and wall time for the
-process that writes output (usually MPI rank 0).
-
-The *configuration* command prints some information about the LAMMPS
-version and architection and OS it is run on. Where supported, also
-information about the memory consumption provided by the OS is
-reported.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`print <print>`
-
-Default
-"""""""
-
-The *out* option has the default *screen*\ .
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/jump.txt b/doc/html/_sources/jump.txt
deleted file mode 100644
index 600909352..000000000
--- a/doc/html/_sources/jump.txt
+++ /dev/null
@@ -1,156 +0,0 @@
-.. index:: jump
-
-jump command
-============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- jump file label
-
-* file = filename of new input script to switch to
-* label = optional label within file to jump to
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- jump newfile
- jump in.run2 runloop
- jump SELF runloop
-
-Description
-"""""""""""
-
-This command closes the current input script file, opens the file with
-the specified name, and begins reading LAMMPS commands from that file.
-Unlike the :doc:`include <include>` command, the original file is not
-returned to, although by using multiple jump commands it is possible
-to chain from file to file or back to the original file.
-
-If the word "SELF" is used for the filename, then the current input
-script is re-opened and read again.
-
-.. note::
-
- The SELF option is not guaranteed to work when the current input
- script is being read through stdin (standard input), e.g.
-
-.. parsed-literal::
-
- lmp_g++ < in.script
-
-since the SELF option invokes the C-library rewind() call, which may
-not be supported for stdin on some systems or by some MPI
-implementations. This can be worked around by using the :ref:`-in command-line argument <start_7>`, e.g.
-
-.. parsed-literal::
-
- lmp_g++ -in in.script
-
-or by using the :ref:`-var command-line argument <start_7>` to pass the script name as a
-variable to the input script. In the latter case, a
-:doc:`variable <variable>` called "fname" could be used in place of
-SELF, e.g.
-
-.. parsed-literal::
-
- lmp_g++ -var fname in.script < in.script
-
-The 2nd argument to the jump command is optional. If specified, it is
-treated as a label and the new file is scanned (without executing
-commands) until the label is found, and commands are executed from
-that point forward. This can be used to loop over a portion of the
-input script, as in this example. These commands perform 10 runs,
-each of 10000 steps, and create 10 dump files named file.1, file.2,
-etc. The :doc:`next <next>` command is used to exit the loop after 10
-iterations. When the "a" variable has been incremented for the tenth
-time, it will cause the next jump command to be skipped.
-
-.. parsed-literal::
-
- variable a loop 10
- label loop
- dump 1 all atom 100 file.$a
- run 10000
- undump 1
- next a
- jump in.lj loop
-
-If the jump *file* argument is a variable, the jump command can be
-used to cause different processor partitions to run different input
-scripts. In this example, LAMMPS is run on 40 processors, with 4
-partitions of 10 procs each. An in.file containing the example
-variable and jump command will cause each partition to run a different
-simulation.
-
-.. parsed-literal::
-
- mpirun -np 40 lmp_ibm -partition 4x10 -in in.file
-
-.. parsed-literal::
-
- variable f world script.1 script.2 script.3 script.4
- jump $f
-
-Here is an example of a loop which checks every 1000 steps if the
-system temperature has reached a certain value, and if so, breaks out
-of the loop to finish the run. Note that any variable could be
-checked, so long as it is current on the timestep when the run
-completes. As explained on the :doc:`variable <variable>` doc page,
-this can be insured by includig the variable in thermodynamic output.
-
-.. parsed-literal::
-
- variable myTemp equal temp
- label loop
- variable a loop 1000
- run 1000
- if "${myTemp} < 300.0" then "jump SELF break"
- next a
- jump SELF loop
- label break
- print "ALL DONE"
-
-Here is an example of a double loop which uses the if and
-:doc:`jump <jump>` commands to break out of the inner loop when a
-condition is met, then continues iterating thru the outer loop.
-
-.. parsed-literal::
-
- label loopa
- variable a loop 5
- label loopb
- variable b loop 5
- print "A,B = $a,$b"
- run 10000
- if "$b > 2" then "jump SELF break"
- next b
- jump in.script loopb
- label break
- variable b delete
- next a
- jump SELF loopa
-
-Restrictions
-""""""""""""
-
-
-If you jump to a file and it does not contain the specified label,
-LAMMPS will come to the end of the file and exit.
-
-Related commands
-""""""""""""""""
-
-:doc:`variable <variable>`, :doc:`include <include>`, :doc:`label <label>`,
-:doc:`next <next>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/kspace_modify.txt b/doc/html/_sources/kspace_modify.txt
deleted file mode 100644
index f34018294..000000000
--- a/doc/html/_sources/kspace_modify.txt
+++ /dev/null
@@ -1,386 +0,0 @@
-.. index:: kspace_modify
-
-kspace_modify command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- kspace_modify keyword value ...
-
-* one or more keyword/value pairs may be listed
-.. parsed-literal::
-
- keyword = *mesh* or *order* or *order/disp* or *mix/disp* or *overlap* or *minorder* or *force* or *gewald* or *gewald/disp* or *slab* or (nozforce* or *compute* or *cutoff/adjust* or *fftbench* or *collective* or *diff* or *kmax/ewald* or *force/disp/real* or *force/disp/kspace* or *splittol* or *disp/auto*\ :l
- *mesh* value = x y z
- x,y,z = grid size in each dimension for long-range Coulombics
- *mesh/disp* value = x y z
- x,y,z = grid size in each dimension for 1/r^6 dispersion
- *order* value = N
- N = extent of Gaussian for PPPM or MSM mapping of charge to grid
- *order/disp* value = N
- N = extent of Gaussian for PPPM mapping of dispersion term to grid
- *mix/disp* value = *pair* or *geom* or *none*
- *overlap* = *yes* or *no* = whether the grid stencil for PPPM is allowed to overlap into more than the nearest-neighbor processor
- *minorder* value = M
- M = min allowed extent of Gaussian when auto-adjusting to minimize grid communication
- *force* value = accuracy (force units)
- *gewald* value = rinv (1/distance units)
- rinv = G-ewald parameter for Coulombics
- *gewald/disp* value = rinv (1/distance units)
- rinv = G-ewald parameter for dispersion
- *slab* value = volfactor or *nozforce*
- volfactor = ratio of the total extended volume used in the
- 2d approximation compared with the volume of the simulation domain
- *nozforce* turns off kspace forces in the z direction
- *compute* value = *yes* or *no*
- *cutoff/adjust* value = *yes* or *no*
- *pressure/scalar* value = *yes* or *no*
- *fftbench* value = *yes* or *no*
- *collective* value = *yes* or *no*
- *diff* value = *ad* or *ik* = 2 or 4 FFTs for PPPM in smoothed or non-smoothed mode
- *kmax/ewald* value = kx ky kz
- kx,ky,kz = number of Ewald sum kspace vectors in each dimension
- *force/disp/real* value = accuracy (force units)
- *force/disp/kspace* value = accuracy (force units)
- *splittol* value = tol
- tol = relative size of two eigenvalues (see discussion below)
- *disp/auto* value = yes or no
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- kspace_modify mesh 24 24 30 order 6
- kspace_modify slab 3.0
-
-Description
-"""""""""""
-
-Set parameters used by the kspace solvers defined by the
-:doc:`kspace_style <kspace_style>` command. Not all parameters are
-relevant to all kspace styles.
-
-The *mesh* keyword sets the grid size for kspace style *pppm* or
-*msm*\ . In the case of PPPM, this is the FFT mesh, and each dimension
-must be factorizable into powers of 2, 3, and 5. In the case of MSM,
-this is the finest scale real-space mesh, and each dimension must be
-factorizable into powers of 2. When this option is not set, the PPPM
-or MSM solver chooses its own grid size, consistent with the
-user-specified accuracy and pairwise cutoff. Values for x,y,z of
-0,0,0 unset the option.
-
-The *mesh/disp* keyword sets the grid size for kspace style
-*pppm/disp*\ . This is the FFT mesh for long-range dispersion and ach
-dimension must be factorizable into powers of 2, 3, and 5. When this
-option is not set, the PPPM solver chooses its own grid size,
-consistent with the user-specified accuracy and pairwise cutoff.
-Values for x,y,z of 0,0,0 unset the option.
-
-The *order* keyword determines how many grid spacings an atom's charge
-extends when it is mapped to the grid in kspace style *pppm* or *msm*\ .
-The default for this parameter is 5 for PPPM and 8 for MSM, which
-means each charge spans 5 or 8 grid cells in each dimension,
-respectively. For the LAMMPS implementation of MSM, the order can
-range from 4 to 10 and must be even. For PPPM, the minimum allowed
-setting is 2 and the maximum allowed setting is 7. The larger the
-value of this parameter, the smaller that LAMMPS will set the grid
-size, to achieve the requested accuracy. Conversely, the smaller the
-order value, the larger the grid size will be. Note that there is an
-inherent trade-off involved: a small grid will lower the cost of FFTs
-or MSM direct sum, but a larger order parameter will increase the cost
-of interpolating charge/fields to/from the grid.
-
-The *order/disp* keyword determines how many grid spacings an atom's
-dispersion term extends when it is mapped to the grid in kspace style
-*pppm/disp*\ . It has the same meaning as the *order* setting for
-Coulombics.
-
-The *overlap* keyword can be used in conjunction with the *minorder*
-keyword with the PPPM styles to adjust the amount of communication
-that occurs when values on the FFT grid are exchangeed between
-processors. This communication is distinct from the communication
-inherent in the parallel FFTs themselves, and is required because
-processors interpolate charge and field values using grid point values
-owned by neighboring processors (i.e. ghost point communication). If
-the *overlap* keyword is set to *yes* then this communication is
-allowed to extend beyond nearest-neighbor processors, e.g. when using
-lots of processors on a small problem. If it is set to *no* then the
-communication will be limited to nearest-neighbor processors and the
-*order* setting will be reduced if necessary, as explained by the
-*minorder* keyword discussion. The *overlap* keyword is always set to
-*yes* in MSM.
-
-The *minorder* keyword allows LAMMPS to reduce the *order* setting if
-necessary to keep the communication of ghost grid point limited to
-exchanges between nearest-neighbor processors. See the discussion of
-the *overlap* keyword for details. If the *overlap* keyword is set to
-*yes*\ , which is the default, this is never needed. If it set to *no*
-and overlap occurs, then LAMMPS will reduce the order setting, one
-step at a time, until the ghost grid overlap only extends to nearest
-neighbor processors. The *minorder* keyword limits how small the
-*order* setting can become. The minimum allowed value for PPPM is 2,
-which is the default. If *minorder* is set to the same value as
-*order* then no reduction is allowed, and LAMMPS will generate an
-error if the grid communcation is non-nearest-neighbor and *overlap*
-is set to *no*\ . The *minorder* keyword is not currently supported in
-MSM.
-
-The PPPM order parameter may be reset by LAMMPS when it sets up the
-FFT grid if the implied grid stencil extends beyond the grid cells
-owned by neighboring processors. Typically this will only occur when
-small problems are run on large numbers of processors. A warning will
-be generated indicating the order parameter is being reduced to allow
-LAMMPS to run the problem. Automatic adjustment of the order parameter
-is not supported in MSM.
-
-The *force* keyword overrides the relative accuracy parameter set by
-the :doc:`kspace_style <kspace_style>` command with an absolute
-accuracy. The accuracy determines the RMS error in per-atom forces
-calculated by the long-range solver and is thus specified in force
-units. A negative value for the accuracy setting means to use the
-relative accuracy parameter. The accuracy setting is used in
-conjunction with the pairwise cutoff to determine the number of
-K-space vectors for style *ewald*\ , the FFT grid size for style
-*pppm*\ , or the real space grid size for style *msm*\ .
-
-The *gewald* keyword sets the value of the Ewald or PPPM G-ewald
-parameter for charge as *rinv* in reciprocal distance units. Without
-this setting, LAMMPS chooses the parameter automatically as a function
-of cutoff, precision, grid spacing, etc. This means it can vary from
-one simulation to the next which may not be desirable for matching a
-KSpace solver to a pre-tabulated pairwise potential. This setting can
-also be useful if Ewald or PPPM fails to choose a good grid spacing
-and G-ewald parameter automatically. If the value is set to 0.0,
-LAMMPS will choose the G-ewald parameter automatically. MSM does not
-use the *gewald* parameter.
-
-The *gewald/disp* keyword sets the value of the Ewald or PPPM G-ewald
-parameter for dispersion as *rinv* in reciprocal distance units. It
-has the same meaning as the *gewald* setting for Coulombics.
-
-The *slab* keyword allows an Ewald or PPPM solver to be used for a
-systems that are periodic in x,y but non-periodic in z - a
-:doc:`boundary <boundary>` setting of "boundary p p f". This is done by
-treating the system as if it were periodic in z, but inserting empty
-volume between atom slabs and removing dipole inter-slab interactions
-so that slab-slab interactions are effectively turned off. The
-volfactor value sets the ratio of the extended dimension in z divided
-by the actual dimension in z. The recommended value is 3.0. A larger
-value is inefficient; a smaller value introduces unwanted slab-slab
-interactions. The use of fixed boundaries in z means that the user
-must prevent particle migration beyond the initial z-bounds, typically
-by providing a wall-style fix. The methodology behind the *slab*
-option is explained in the paper by :ref:`(Yeh) <Yeh>`. The *slab* option
-is also extended to non-neutral systems :ref:`(Ballenegger) <Ballenegger>`.
-
-An alternative slab option can be invoked with the *nozforce* keyword
-in lieu of the volfactor. This turns off all kspace forces in the z
-direction. The *nozforce* option is not supported by MSM. For MSM,
-any combination of periodic, non-periodic, or shrink-wrapped
-boundaries can be set using :doc:`boundary <boundary>` (the slab
-approximation in not needed). The *slab* keyword is not currently
-supported by Ewald or PPPM when using a triclinic simulation cell. The
-slab correction has also been extended to point dipole interactions
-:ref:`(Klapp) <Klapp>` in :doc:`kspace_style <kspace_style>` *ewald/disp*\ .
-
-.. note::
-
- If you wish to apply an electric field in the Z-direction, in
- conjunction with the *slab* keyword, you should do it by adding
- explicit charged particles to the +/- Z surfaces. If you do it via
- the :doc:`fix efield <fix_efield>` command, it will not give the correct
- dielectric constant due to the Yeh/Berkowitz :ref:`(Yeh) <Yeh>` correction
- not being compatible with how :doc:`fix efield <fix_efield>` works.
-
-The *compute* keyword allows Kspace computations to be turned off,
-even though a :doc:`kspace_style <kspace_style>` is defined. This is
-not useful for running a real simulation, but can be useful for
-debugging purposes or for computing only partial forces that do not
-include the Kspace contribution. You can also do this by simply not
-defining a :doc:`kspace_style <kspace_style>`, but a Kspace-compatible
-:doc:`pair_style <pair_style>` requires a kspace style to be defined.
-This keyword gives you that option.
-
-The *cutoff/adjust* keyword applies only to MSM. If this option is
-turned on, the Coulombic cutoff will be automatically adjusted at the
-beginning of the run to give the desired estimated error. Other
-cutoffs such as LJ will not be affected. If the grid is not set using
-the *mesh* command, this command will also attempt to use the optimal
-grid that minimizes cost using an estimate given by
-:ref:`(Hardy) <Hardy>`. Note that this cost estimate is not exact, somewhat
-experimental, and still may not yield the optimal parameters.
-
-The *pressure/scalar* keyword applies only to MSM. If this option is
-turned on, only the scalar pressure (i.e. (Pxx + Pyy + Pzz)/3.0) will
-be computed, which can be used, for example, to run an isotropic barostat.
-Computing the full pressure tensor with MSM is expensive, and this option
-provides a faster alternative. The scalar pressure is computed using a
-relationship between the Coulombic energy and pressure :ref:`(Hummer) <Hummer>`
-instead of using the virial equation. This option cannot be used to access
-individual components of the pressure tensor, to compute per-atom virial,
-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
-this option is turned off, LAMMPS will not take the time at the end
-of a run to give FFT benchmark timings, and will finish a few seconds
-faster than it would if this option were on.
-
-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
-*yes*\ , LAMMPS will use MPI collective operations to remap data for
-3d-FFT operations instead of the default point-to-point communication.
-This is faster on IBM BlueGene machines, and may also be faster on
-other machines if they have an efficient implementation of MPI
-collective operations and adequate hardware.
-
-The *diff* keyword specifies the differentiation scheme used by the
-PPPM method to compute forces on particles given electrostatic
-potentials on the PPPM mesh. The *ik* approach is the default for
-PPPM and is the original formulation used in :ref:`(Hockney) <Hockney>`. It
-performs differentiation in Kspace, and uses 3 FFTs to transfer each
-component of the computed fields back to real space for total of 4
-FFTs per timestep.
-
-The analytic differentiation *ad* approach uses only 1 FFT to transfer
-information back to real space for a total of 2 FFTs per timestep. It
-then performs analytic differentiation on the single quantity to
-generate the 3 components of the electric field at each grid point.
-This is sometimes referred to as "smoothed" PPPM. This approach
-requires a somewhat larger PPPM mesh to achieve the same accuracy as
-the *ik* method. Currently, only the *ik* method (default) can be
-used for a triclinic simulation cell with PPPM. The *ad* method is
-always used for MSM.
-
-.. note::
-
- Currently, not all PPPM styles support the *ad* option. Support
- for those PPPM variants will be added later.
-
-The *kmax/ewald* keyword sets the number of kspace vectors in each
-dimension for kspace style *ewald*\ . The three values must be positive
-integers, or else (0,0,0), which unsets the option. When this option
-is not set, the Ewald sum scheme chooses its own kspace vectors,
-consistent with the user-specified accuracy and pairwise cutoff. In
-any case, if kspace style *ewald* is invoked, the values used are
-printed to the screen and the log file at the start of the run.
-
-With the *mix/disp* keyword one can select the mixing rule for the
-dispersion coefficients. With *pair*\ , the dispersion coefficients of
-unlike types are computed as indicated with
-:doc:`pair_modify <pair_modify>`. With *geom*\ , geometric mixing is
-enforced on the dispersion coefficients in the kspace
-coefficients. When using the arithmetic mixing rule, this will
-speed-up the simulations but introduces some error in the force
-computations, as shown in :ref:`(Wennberg) <Wennberg>`. With *none*\ , it is
-assumed that no mixing rule is applicable. Splitting of the dispersion
-coefficients will be performed as described in
-:ref:`(Isele-Holder) <Isele-Holder>`. This splitting can be influenced with
-the *splittol* keywords. Only the eigenvalues that are larger than tol
-compared to the largest eigenvalues are included. Using this keywords
-the original matrix of dispersion coefficients is approximated. This
-leads to faster computations, but the accuracy in the reciprocal space
-computations of the dispersion part is decreased.
-
-The *force/disp/real* and *force/disp/kspace* keywords set the force
-accuracy for the real and space computations for the dispersion part
-of pppm/disp. As shown in :ref:`(Isele-Holder) <Isele-Holder>`, optimal
-performance and accuracy in the results is obtained when these values
-are different.
-
-The *disp/auto* option controlls whether the pppm/disp is allowed to
-generate PPPM parameters automatically. If set to *no*\ , parameters have
-to be specified using the *gewald/disp*\ , *mesh/disp*\ ,
-*force/disp/real* or *force/disp/kspace* keywords, or
-the code will stop with an error message. When this option is set to
-*yes*\ , the error message will not appear and the simulation will start.
-For a typical application, using the automatic parameter generation will provide
-simulations that are either inaccurate or slow. Using this option is thus not
-recommended. For guidelines on how to obtain good parameters, see the :ref:`How-To <howto_23>` discussion.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`kspace_style <kspace_style>`, :doc:`boundary <boundary>`
-
-Default
-"""""""
-
-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,
-gewald = gewald/disp = 0.0, slab = 1.0, compute = yes, cutoff/adjust =
-yes (MSM), pressure/scalar = yes (MSM), fftbench = yes (PPPM), diff = ik
-(PPPM), mix/disp = pair, force/disp/real = -1.0, force/disp/kspace = -1.0,
-split = 0, tol = 1.0e-6, and disp/auto = no.
-
-
-----------
-
-
-.. _Hockney:
-
-
-
-**(Hockney)** Hockney and Eastwood, Computer Simulation Using Particles,
-Adam Hilger, NY (1989).
-
-.. _Yeh:
-
-
-
-**(Yeh)** Yeh and Berkowitz, J Chem Phys, 111, 3155 (1999).
-
-.. _Ballenegger:
-
-
-
-**(Ballenegger)** Ballenegger, Arnold, Cerda, J Chem Phys, 131, 094107
-(2009).
-
-.. _Klapp:
-
-
-
-**(Klapp)** Klapp, Schoen, J Chem Phys, 117, 8050 (2002).
-
-.. _Hardy:
-
-
-
-**(Hardy)** David Hardy thesis: Multilevel Summation for the Fast
-Evaluation of Forces for the Simulation of Biomolecules, University of
-Illinois at Urbana-Champaign, (2006).
-
-.. _Hummer:
-
-
-
-**(Hummer)** Hummer, Gronbech-Jensen, Neumann, J Chem Phys, 109, 2791 (1998)
-
-.. _Isele-Holder:
-
-
-
-**(Isele-Holder)** Isele-Holder, Mitchell, Hammond, Kohlmeyer, Ismail, J
-Chem Theory Comput, 9, 5412 (2013).
-
-.. _Wennberg:
-
-
-
-**(Wennberg)** Wennberg, Murtola, Hess, Lindahl, J Chem Theory Comput,
-9, 3527 (2013).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/kspace_style.txt b/doc/html/_sources/kspace_style.txt
deleted file mode 100644
index e06ead408..000000000
--- a/doc/html/_sources/kspace_style.txt
+++ /dev/null
@@ -1,450 +0,0 @@
-.. index:: kspace_style
-
-kspace_style command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- kspace_style style value
-
-* style = *none* or *ewald* or *ewald/disp* or *ewald/omp* or *pppm* or *pppm/cg* or *pppm/disp* or *pppm/tip4p* or *pppm/stagger* or *pppm/disp/tip4p* or *pppm/gpu* or *pppm/omp* or *pppm/cg/omp* or *pppm/tip4p/omp* or *msm* or *msm/cg* or *msm/omp* or *msm/cg/omp*
-.. parsed-literal::
-
- *none* value = none
- *ewald* value = accuracy
- accuracy = desired relative error in forces
- *ewald/disp* value = accuracy
- accuracy = desired relative error in forces
- *ewald/omp* value = accuracy
- accuracy = desired relative error in forces
- *pppm* value = accuracy
- accuracy = desired relative error in forces
- *pppm/cg* value = accuracy (smallq)
- accuracy = desired relative error in forces
- smallq = cutoff for charges to be considered (optional) (charge units)
- *pppm/disp* value = accuracy
- accuracy = desired relative error in forces
- *pppm/tip4p* value = accuracy
- accuracy = desired relative error in forces
- *pppm/disp/tip4p* value = accuracy
- accuracy = desired relative error in forces
- *pppm/gpu* value = accuracy
- accuracy = desired relative error in forces
- *pppm/omp* value = accuracy
- accuracy = desired relative error in forces
- *pppm/cg/omp* value = accuracy
- accuracy = desired relative error in forces
- *pppm/tip4p/omp* value = accuracy
- accuracy = desired relative error in forces
- *pppm/stagger* value = accuracy
- accuracy = desired relative error in forces
- *msm* value = accuracy
- accuracy = desired relative error in forces
- *msm/cg* value = accuracy (smallq)
- accuracy = desired relative error in forces
- smallq = cutoff for charges to be considered (optional) (charge units)
- *msm/omp* value = accuracy
- accuracy = desired relative error in forces
- *msm/cg/omp* value = accuracy (smallq)
- accuracy = desired relative error in forces
- smallq = cutoff for charges to be considered (optional) (charge units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- kspace_style pppm 1.0e-4
- kspace_style pppm/cg 1.0e-5 1.0e-6
- kspace style msm 1.0e-4
- kspace_style none
-
-Description
-"""""""""""
-
-Define a long-range solver for LAMMPS to use each timestep to compute
-long-range Coulombic interactions or long-range 1/r^6 interactions.
-Most of the long-range solvers perform their computation in K-space,
-hence the name of this command.
-
-When such a solver is used in conjunction with an appropriate pair
-style, the cutoff for Coulombic or 1/r^N interactions is effectively
-infinite. If the Coulombic case, this means each charge in the system
-interacts with charges in an infinite array of periodic images of the
-simulation domain.
-
-Note that using a long-range solver requires use of a matching :doc:`pair style <pair>` to perform consistent short-range pairwise
-calculations. This means that the name of the pair style contains a
-matching keyword to the name of the KSpace style, as in this table:
-
-+----------------------+-----------------------+
-| Pair style | KSpace style |
-+----------------------+-----------------------+
-| coul/long | ewald or pppm |
-+----------------------+-----------------------+
-| coul/msm | msm |
-+----------------------+-----------------------+
-| lj/long or buck/long | disp (for dispersion) |
-+----------------------+-----------------------+
-| tip4p/long | tip4p |
-+----------------------+-----------------------+
-
-
-----------
-
-
-The *ewald* style performs a standard Ewald summation as described in
-any solid-state physics text.
-
-The *ewald/disp* style adds a long-range dispersion sum option for
-1/r^6 potentials and is useful for simulation of interfaces
-:ref:`(Veld) <Veld>`. It also performs standard Coulombic Ewald summations,
-but in a more efficient manner than the *ewald* style. The 1/r^6
-capability means that Lennard-Jones or Buckingham potentials can be
-used without a cutoff, i.e. they become full long-range potentials.
-The *ewald/disp* style can also be used with point-dipoles
-:ref:`(Toukmaji) <Toukmaji>` and is currently the only kspace solver in
-LAMMPS with this capability.
-
-
-----------
-
-
-The *pppm* style invokes a particle-particle particle-mesh solver
-:ref:`(Hockney) <Hockney>` which maps atom charge to a 3d mesh, uses 3d FFTs
-to solve Poisson's equation on the mesh, then interpolates electric
-fields on the mesh points back to the atoms. It is closely related to
-the particle-mesh Ewald technique (PME) :ref:`(Darden) <Darden>` used in
-AMBER and CHARMM. The cost of traditional Ewald summation scales as
-N^(3/2) where N is the number of atoms in the system. The PPPM solver
-scales as Nlog(N) due to the FFTs, so it is almost always a faster
-choice :ref:`(Pollock) <Pollock>`.
-
-The *pppm/cg* style is identical to the *pppm* style except that it
-has an optimization for systems where most particles are uncharged.
-Similarly the *msm/cg* style implements the same optimization for *msm*\ .
-The optional *smallq* argument defines the cutoff for the absolute
-charge value which determines whether a particle is considered charged
-or not. Its default value is 1.0e-5.
-
-The *pppm/tip4p* style is identical to the *pppm* style except that it
-adds a charge at the massless 4th site in each TIP4P water molecule.
-It should be used with :doc:`pair styles <pair_style>` with a
-*tip4p/long* in their style name.
-
-The *pppm/stagger* style performs calculations using two different
-meshes, one shifted slightly with respect to the other. This can
-reduce force aliasing errors and increase the accuracy of the method
-for a given mesh size. Or a coarser mesh can be used for the same
-target accuracy, which saves CPU time. However, there is a trade-off
-since FFTs on two meshes are now performed which increases the
-compuation required. See :ref:`(Cerutti) <Cerutti>`, :ref:`(Neelov) <Neelov>`,
-and :ref:`(Hockney) <Hockney>` for details of the method.
-
-For high relative accuracy, using staggered PPPM allows the mesh size
-to be reduced by a factor of 2 in each dimension as compared to
-regular PPPM (for the same target accuracy). This can give up to a 4x
-speedup in the KSpace time (8x less mesh points, 2x more expensive).
-However, for low relative accuracy, the staggered PPPM mesh size may
-be essentially the same as for regular PPPM, which means the method
-will be up to 2x slower in the KSpace time (simply 2x more expensive).
-For more details and timings, see
-:doc:`Section_accelerate <Section_accelerate>`.
-
-.. note::
-
- Using *pppm/stagger* may not give the same increase in the
- accuracy of energy and pressure as it does in forces, so some caution
- must be used if energy and/or pressure are quantities of interest,
- such as when using a barostat.
-
-
-----------
-
-
-The *pppm/disp* and *pppm/disp/tip4p* styles add a mesh-based long-range
-dispersion sum option for 1/r^6 potentials :ref:`(Isele-Holder) <Isele-Holder>`,
-similar to the *ewald/disp* style. The 1/r^6 capability means
-that Lennard-Jones or Buckingham potentials can be used without a cutoff,
-i.e. they become full long-range potentials.
-
-For these styles, you will possibly want to adjust the default choice of
-parameters by using the :doc:`kspace_modify <kspace_modify>` command.
-This can be done by either choosing the Ewald and grid parameters, or
-by specifying separate accuracies for the real and kspace
-calculations. When not making any settings, the simulation will stop with
-an error message. Further information on the influence of the parameters
-and how to choose them is described in :ref:`(Isele-Holder) <Isele-Holder>`,
-:ref:`(Isele-Holder2) <Isele-Holder2>` and the
-:ref:`How-To <howto_24>` discussion.
-
-
-----------
-
-
-.. note::
-
- All of the PPPM styles can be used with single-precision FFTs by
- using the compiler switch -DFFT_SINGLE for the FFT_INC setting in your
- lo-level Makefile. This setting also changes some of the PPPM
- operations (e.g. mapping charge to mesh and interpolating electric
- fields to particles) to be performed in single precision. This option
- can speed-up long-range calulations, particularly in parallel or on
- GPUs. The use of the -DFFT_SINGLE flag is discussed in :ref:`this section <start_2_4>` of the manual. MSM does not
- currently support the -DFFT_SINGLE compiler switch.
-
-
-----------
-
-
-The *msm* style invokes a multi-level summation method MSM solver,
-:ref:`(Hardy) <Hardy>` or :ref:`(Hardy2) <Hardy2>`, which maps atom charge to a 3d
-mesh, and uses a multi-level hierarchy of coarser and coarser meshes
-on which direct coulomb solves are done. This method does not use
-FFTs and scales as N. It may therefore be faster than the other
-K-space solvers for relatively large problems when running on large
-core counts. MSM can also be used for non-periodic boundary conditions and
-for mixed periodic and non-periodic boundaries.
-
-MSM is most competitive versus Ewald and PPPM when only relatively
-low accuracy forces, about 1e-4 relative error or less accurate,
-are needed. Note that use of a larger coulomb cutoff (i.e. 15
-angstroms instead of 10 angstroms) provides better MSM accuracy for
-both the real space and grid computed forces.
-
-Currently calculation of the full pressure tensor in MSM is expensive.
-Using the :doc:`kspace_modify <kspace_modify>` *pressure/scalar yes*
-command provides a less expensive way to compute the scalar pressure
-(Pxx + Pyy + Pzz)/3.0. The scalar pressure can be used, for example,
-to run an isotropic barostat. If the full pressure tensor is needed,
-then calculating the pressure at every timestep or using a fixed
-pressure simulation with MSM will cause the code to run slower.
-
-
-----------
-
-
-The specified *accuracy* determines the relative RMS error in per-atom
-forces calculated by the long-range solver. It is set as a
-dimensionless number, relative to the force that two unit point
-charges (e.g. 2 monovalent ions) exert on each other at a distance of
-1 Angstrom. This reference value was chosen as representative of the
-magnitude of electrostatic forces in atomic systems. Thus an accuracy
-value of 1.0e-4 means that the RMS error will be a factor of 10000
-smaller than the reference force.
-
-The accuracy setting is used in conjunction with the pairwise cutoff
-to determine the number of K-space vectors for style *ewald* or the
-grid size for style *pppm* or *msm*\ .
-
-Note that style *pppm* only computes the grid size at the beginning of
-a simulation, so if the length or triclinic tilt of the simulation
-cell increases dramatically during the course of the simulation, the
-accuracy of the simulation may degrade. Likewise, if the
-:doc:`kspace_modify slab <kspace_modify>` option is used with
-shrink-wrap boundaries in the z-dimension, and the box size changes
-dramatically in z. For example, for a triclinic system with all three
-tilt factors set to the maximum limit, the PPPM grid should be
-increased roughly by a factor of 1.5 in the y direction and 2.0 in the
-z direction as compared to the same system using a cubic orthogonal
-simulation cell. One way to ensure the accuracy requirement is being
-met is to run a short simulation at the maximum expected tilt or
-length, note the required grid size, and then use the
-:doc:`kspace_modify <kspace_modify>` *mesh* command to manually set the
-PPPM grid size to this value.
-
-RMS force errors in real space for *ewald* and *pppm* are estimated
-using equation 18 of :ref:`(Kolafa) <Kolafa>`, which is also referenced as
-equation 9 of :ref:`(Petersen) <Petersen>`. RMS force errors in K-space for
-*ewald* are estimated using equation 11 of :ref:`(Petersen) <Petersen>`,
-which is similar to equation 32 of :ref:`(Kolafa) <Kolafa>`. RMS force
-errors in K-space for *pppm* are estimated using equation 38 of
-:ref:`(Deserno) <Deserno>`. RMS force errors for *msm* are estimated
-using ideas from chapter 3 of :ref:`(Hardy) <Hardy>`, with equation 3.197
-of particular note. When using *msm* with non-periodic boundary
-conditions, it is expected that the error estimation will be too
-pessimistic. RMS force errors for dipoles when using *ewald/disp*
-are estimated using equations 33 and 46 of :ref:`(Wang) <Wang>`.
-
-See the :doc:`kspace_modify <kspace_modify>` command for additional
-options of the K-space solvers that can be set, including a *force*
-option for setting an absoulte RMS error in forces, as opposed to a
-relative RMS error.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-of the manual. The accelerated styles take the same arguments and
-should produce the same results, except for round-off and precision
-issues.
-
-More specifically, the *pppm/gpu* style performs charge assignment and
-force interpolation calculations on the GPU. These processes are
-performed either in single or double precision, depending on whether
-the -DFFT_SINGLE setting was specified in your lo-level Makefile, as
-discussed above. The FFTs themselves are still calculated on the CPU.
-If *pppm/gpu* is used with a GPU-enabled pair style, part of the PPPM
-calculation can be performed concurrently on the GPU while other
-calculations for non-bonded and bonded force calculation are performed
-on the CPU.
-
-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 :ref:`Making LAMMPS <start_3>` section for more info.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restrictions
-""""""""""""
-
-
-Note that the long-range electrostatic solvers in LAMMPS assume conducting
-metal (tinfoil) boundary conditions for both charge and dipole
-interactions. Vacuum boundary conditions are not currently supported.
-
-The *ewald/disp*\ , *ewald*\ , *pppm*\ , and *msm* styles support
-non-orthogonal (triclinic symmetry) simulation boxes. However,
-triclinic simulation cells may not yet be supported by suffix versions
-of these styles.
-
-All of the kspace styles are part of the KSPACE package. They are
-only enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. Note that
-the KSPACE package is installed by default.
-
-For MSM, a simulation must be 3d and one can use any combination of
-periodic, non-periodic, or shrink-wrapped boundaries (specified using
-the :doc:`boundary <boundary>` command).
-
-For Ewald and PPPM, a simulation must be 3d and periodic in all dimensions.
-The only exception is if the slab option is set with :doc:`kspace_modify <kspace_modify>`,
-in which case the xy dimensions must be periodic and the z dimension must be
-non-periodic.
-
-Related commands
-""""""""""""""""
-
-:doc:`kspace_modify <kspace_modify>`, :doc:`pair_style lj/cut/coul/long <pair_lj>`, :doc:`pair_style lj/charmm/coul/long <pair_charmm>`, :doc:`pair_style lj/long/coul/long <pair_lj_long>`, :doc:`pair_style buck/coul/long <pair_buck>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- kspace_style none
-
-
-----------
-
-
-.. _Darden:
-
-
-
-**(Darden)** Darden, York, Pedersen, J Chem Phys, 98, 10089 (1993).
-
-.. _Deserno:
-
-
-
-**(Deserno)** Deserno and Holm, J Chem Phys, 109, 7694 (1998).
-
-.. _Hockney:
-
-
-
-**(Hockney)** Hockney and Eastwood, Computer Simulation Using Particles,
-Adam Hilger, NY (1989).
-
-.. _Kolafa:
-
-
-
-**(Kolafa)** Kolafa and Perram, Molecular Simualtion, 9, 351 (1992).
-
-.. _Petersen:
-
-
-
-**(Petersen)** Petersen, J Chem Phys, 103, 3668 (1995).
-
-.. _Wang:
-
-
-
-**(Wang)** Wang and Holm, J Chem Phys, 115, 6277 (2001).
-
-.. _Pollock:
-
-
-
-**(Pollock)** Pollock and Glosli, Comp Phys Comm, 95, 93 (1996).
-
-.. _Cerutti:
-
-
-
-**(Cerutti)** Cerutti, Duke, Darden, Lybrand, Journal of Chemical Theory
-and Computation 5, 2322 (2009)
-
-.. _Neelov:
-
-
-
-**(Neelov)** Neelov, Holm, J Chem Phys 132, 234103 (2010)
-
-.. _Veld:
-
-
-
-**(Veld)** In 't Veld, Ismail, Grest, J Chem Phys, 127, 144711 (2007).
-
-.. _Toukmaji:
-
-
-
-**(Toukmaji)** Toukmaji, Sagui, Board, and Darden, J Chem Phys, 113,
-10913 (2000).
-
-.. _Isele-Holder:
-
-
-
-**(Isele-Holder)** Isele-Holder, Mitchell, Ismail, J Chem Phys, 137, 174107 (2012).
-
-.. _Isele-Holder2:
-
-
-
-**(Isele-Holder2)** Isele-Holder, Mitchell, Hammond, Kohlmeyer, Ismail, J Chem Theory
-Comput 9, 5412 (2013).
-
-.. _Hardy:
-
-
-
-**(Hardy)** David Hardy thesis: Multilevel Summation for the Fast
-Evaluation of Forces for the Simulation of Biomolecules, University of
-Illinois at Urbana-Champaign, (2006).
-
-.. _Hardy2:
-
-
-
-**(Hardy)** Hardy, Stone, Schulten, Parallel Computing 35 (2009)
-164-177.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/label.txt b/doc/html/_sources/label.txt
deleted file mode 100644
index ac0b6dcde..000000000
--- a/doc/html/_sources/label.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-.. index:: label
-
-label command
-=============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- label ID
-
-* ID = string used as label name
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- label xyz
- label loop
-
-Description
-"""""""""""
-
-Label this line of the input script with the chosen ID. Unless a jump
-command was used previously, this does nothing. But if a
-:doc:`jump <jump>` command was used with a label argument to begin
-invoking this script file, then all command lines in the script prior
-to this line will be ignored. I.e. execution of the script will begin
-at this line. This is useful for looping over a section of the input
-script as discussed in the :doc:`jump <jump>` command.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/lattice.txt b/doc/html/_sources/lattice.txt
deleted file mode 100644
index 099100872..000000000
--- a/doc/html/_sources/lattice.txt
+++ /dev/null
@@ -1,335 +0,0 @@
-.. index:: lattice
-
-lattice command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- lattice style scale keyword values ...
-
-* style = *none* or *sc* or *bcc* or *fcc* or *hcp* or *diamond* or *sq* or *sq2* or *hex* or *custom*
-* scale = scale factor between lattice and simulation box
-.. parsed-literal::
-
- scale = reduced density rho* (for LJ units)
- scale = lattice constant in distance units (for all other units)
-
-* zero or more keyword/value pairs may be appended
-* keyword = *origin* or *orient* or *spacing* or *a1* or *a2* or *a3* or *basis*
-.. parsed-literal::
-
- *origin* values = x y z
- x,y,z = fractions of a unit cell (0 <= x,y,z < 1)
- *orient* values = dim i j k
- dim = *x* or *y* or *z*
- i,j,k = integer lattice directions
- *spacing* values = dx dy dz
- dx,dy,dz = lattice spacings in the x,y,z box directions
- *a1*\ ,\ *a2*\ ,\ *a3* values = x y z
- x,y,z = primitive vector components that define unit cell
- *basis* values = x y z
- x,y,z = fractional coords of a basis atom (0 <= x,y,z < 1)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- lattice fcc 3.52
- lattice hex 0.85
- lattice sq 0.8 origin 0.0 0.5 0.0 orient x 1 1 0 orient y -1 1 0
- lattice custom 3.52 a1 1.0 0.0 0.0 a2 0.5 1.0 0.0 a3 0.0 0.0 0.5 &
- basis 0.0 0.0 0.0 basis 0.5 0.5 0.5
- lattice none 2.0
-
-Description
-"""""""""""
-
-Define a lattice for use by other commands. In LAMMPS, a lattice is
-simply a set of points in space, determined by a unit cell with basis
-atoms, that is replicated infinitely in all dimensions. The arguments
-of the lattice command can be used to define a wide variety of
-crystallographic lattices.
-
-A lattice is used by LAMMPS in two ways. First, the
-:doc:`create_atoms <create_atoms>` command creates atoms on the lattice
-points inside the simulation box. Note that the
-:doc:`create_atoms <create_atoms>` command allows different atom types
-to be assigned to different basis atoms of the lattice. Second, the
-lattice spacing in the x,y,z dimensions implied by the lattice, can be
-used by other commands as distance units
-(e.g. :doc:`create_box <create_box>`, :doc:`region <region>` and
-:doc:`velocity <velocity>`), which are often convenient to use when the
-underlying problem geometry is atoms on a lattice.
-
-The lattice style must be consistent with the dimension of the
-simulation - see the :doc:`dimension <dimension>` command. Styles *sc*
-or *bcc* or *fcc* or *hcp* or *diamond* are for 3d problems. Styles
-*sq* or *sq2* or *hex* are for 2d problems. Style *custom* can be
-used for either 2d or 3d problems.
-
-A lattice consists of a unit cell, a set of basis atoms within that
-cell, and a set of transformation parameters (scale, origin, orient)
-that map the unit cell into the simulation box. The vectors a1,a2,a3
-are the edge vectors of the unit cell. This is the nomenclature for
-"primitive" vectors in solid-state crystallography, but in LAMMPS the
-unit cell they determine does not have to be a "primitive cell" of
-minimum volume.
-
-Note that the lattice command can be used multiple times in an input
-script. Each time it is invoked, the lattice attributes are
-re-defined and are used for all subsequent commands (that use lattice
-attributes). For example, a sequence of lattice,
-:doc:`region <region>`, and :doc:`create_atoms <create_atoms>` commands
-can be repeated multiple times to build a poly-crystalline model with
-different geometric regions populated with atoms in different lattice
-orientations.
-
-
-----------
-
-
-A lattice of style *none* does not define a unit cell and basis set,
-so it cannot be used with the :doc:`create_atoms <create_atoms>`
-command. However it does define a lattice spacing via the specified
-scale parameter. As explained above the lattice spacings in x,y,z can
-be used by other commands as distance units. No additional
-keyword/value pairs can be specified for the *none* style. By
-default, a "lattice none 1.0" is defined, which means the lattice
-spacing is the same as one distance unit, as defined by the
-:doc:`units <units>` command.
-
-Lattices of style *sc*\ , *fcc*\ , *bcc*\ , and *diamond* are 3d lattices
-that define a cubic unit cell with edge length = 1.0. This means a1 =
-1 0 0, a2 = 0 1 0, and a3 = 0 0 1. Style *hcp* has a1 = 1 0 0, a2 = 0
-sqrt(3) 0, and a3 = 0 0 sqrt(8/3). The placement of the basis atoms
-within the unit cell are described in any solid-state physics text. A
-*sc* lattice has 1 basis atom at the lower-left-bottom corner of the
-cube. A *bcc* lattice has 2 basis atoms, one at the corner and one at
-the center of the cube. A *fcc* lattice has 4 basis atoms, one at the
-corner and 3 at the cube face centers. A *hcp* lattice has 4 basis
-atoms, two in the z = 0 plane and 2 in the z = 0.5 plane. A *diamond*
-lattice has 8 basis atoms.
-
-Lattices of style *sq* and *sq2* are 2d lattices that define a square
-unit cell with edge length = 1.0. This means a1 = 1 0 0 and a2 = 0 1
-0. A *sq* lattice has 1 basis atom at the lower-left corner of the
-square. A *sq2* lattice has 2 basis atoms, one at the corner and one
-at the center of the square. A *hex* style is also a 2d lattice, but
-the unit cell is rectangular, with a1 = 1 0 0 and a2 = 0 sqrt(3) 0.
-It has 2 basis atoms, one at the corner and one at the center of the
-rectangle.
-
-A lattice of style *custom* allows you to specify a1, a2, a3, and a
-list of basis atoms to put in the unit cell. By default, a1 and a2
-and a3 are 3 orthogonal unit vectors (edges of a unit cube). But you
-can specify them to be of any length and non-orthogonal to each other,
-so that they describe a tilted parallelepiped. Via the *basis*
-keyword you add atoms, one at a time, to the unit cell. Its arguments
-are fractional coordinates (0.0 <= x,y,z < 1.0). The position vector
-x of a basis atom within the unit cell is thus a linear combination of
-the the unit cell's 3 edge vectors, i.e. x = bx a1 + by a2 + bz a3,
-where bx,by,bz are the 3 values specified for the *basis* keyword.
-
-
-----------
-
-
-This sub-section discusses the arguments that determine how the
-idealized unit cell is transformed into a lattice of points within the
-simulation box.
-
-The *scale* argument determines how the size of the unit cell will be
-scaled when mapping it into the simulation box. I.e. it determines a
-multiplicative factor to apply to the unit cell, to convert it to a
-lattice of the desired size and distance units in the simulation box.
-The meaning of the *scale* argument depends on the :doc:`units <units>`
-being used in your simulation.
-
-For all unit styles except *lj*\ , the scale argument is specified in
-the distance units defined by the unit style. For example, in *real*
-or *metal* units, if the unit cell is a unit cube with edge length
-1.0, specifying scale = 3.52 would create a cubic lattice with a
-spacing of 3.52 Angstroms. In *cgs* units, the spacing would be 3.52
-cm.
-
-For unit style *lj*\ , the scale argument is the Lennard-Jones reduced
-density, typically written as rho*. LAMMPS converts this value into
-the multiplicative factor via the formula "factor^dim = rho/rho*",
-where rho = N/V with V = the volume of the lattice unit cell and N =
-the number of basis atoms in the unit cell (described below), and dim
-= 2 or 3 for the dimensionality of the simulation. Effectively, this
-means that if LJ particles of size sigma = 1.0 are used in the
-simulation, the lattice of particles will be at the desired reduced
-density.
-
-The *origin* option specifies how the unit cell will be shifted or
-translated when mapping it into the simulation box. The x,y,z values
-are fractional values (0.0 <= x,y,z < 1.0) meaning shift the lattice
-by a fraction of the lattice spacing in each dimension. The meaning
-of "lattice spacing" is discussed below.
-
-The *orient* option specifies how the unit cell will be rotated when
-mapping it into the simulation box. The *dim* argument is one of the
-3 coordinate axes in the simulation box. The other 3 arguments are
-the crystallographic direction in the lattice that you want to orient
-along that axis, specified as integers. E.g. "orient x 2 1 0" means
-the x-axis in the simulation box will be the [210] lattice
-direction, and similarly for y and z. The 3 lattice directions you
-specify do not have to be unit vectors, but they must be mutually
-orthogonal and obey the right-hand rule, i.e. (X cross Y) points in
-the Z direction.
-
-.. note::
-
- The preceding paragraph describing lattice directions is only
- valid for orthogonal cubic unit cells (or square in 2d). If you are
- using a *hcp* or *hex* lattice or the more general lattice style
- *custom* with non-orthogonal a1,a2,a3 vectors, then you should think
- of the 3 *orient* vectors as creating a 3x3 rotation matrix which is
- applied to a1,a2,a3 to rotate the original unit cell to a new
- orientation in the simulation box.
-
-
-----------
-
-
-Several LAMMPS commands have the option to use distance units that are
-inferred from "lattice spacings" in the x,y,z box directions.
-E.g. the :doc:`region <region>` command can create a block of size
-10x20x20, where 10 means 10 lattice spacings in the x direction.
-
-.. note::
-
- Though they are called lattice spacings, all the commands that
- have a "units lattice" option, simply use the 3 values as scale
- factors on the distance units defined by the :doc:`units <units>`
- command. Thus if you do not like the lattice spacings computed by
- LAMMPS (e.g. for a non-orthogonal or rotated unit cell), you can
- define the 3 values to be whatever you wish, via the *spacing* option.
-
-If the *spacing* option is not specified, the lattice spacings are
-computed by LAMMPS in the following way. A unit cell of the lattice
-is mapped into the simulation box (scaled and rotated), so that it now
-has (perhaps) a modified size and orientation. The lattice spacing in
-X is defined as the difference between the min/max extent of the x
-coordinates of the 8 corner points of the modified unit cell (4 in
-2d). Similarly, the Y and Z lattice spacings are defined as the
-difference in the min/max of the y and z coordinates.
-
-Note that if the unit cell is orthogonal with axis-aligned edges (no
-rotation via the *orient* keyword), then the lattice spacings in each
-dimension are simply the scale factor (described above) multiplied by
-the length of a1,a2,a3. Thus a *hex* style lattice with a scale
-factor of 3.0 Angstroms, would have a lattice spacing of 3.0 in x and
-3*sqrt(3.0) in y.
-
-.. note::
-
- For non-orthogonal unit cells and/or when a rotation is applied
- via the *orient* keyword, then the lattice spacings computed by LAMMPS
- are typically less intuitive. In particular, in these cases, there is
- no guarantee that a particular lattice spacing is an integer multiple
- of the periodicity of the lattice in that direction. Thus, if you
- create an orthogonal periodic simulation box whose size in a dimension
- is a multiple of the lattice spacing, and then fill it with atoms via
- the :doc:`create_atoms <create_atoms>` command, you will NOT necessarily
- create a periodic system. I.e. atoms may overlap incorrectly at the
- faces of the simulation box.
-
-The *spacing* option sets the 3 lattice spacings directly. All must
-be non-zero (use 1.0 for dz in a 2d simulation). The specified values
-are multiplied by the multiplicative factor described above that is
-associated with the scale factor. Thus a spacing of 1.0 means one
-unit cell edge length independent of the scale factor. As mentioned
-above, this option can be useful if the spacings LAMMPS computes are
-inconvenient to use in subsequent commands, which can be the case for
-non-orthogonal or rotated lattices.
-
-Note that whenever the lattice command is used, the values of the
-lattice spacings LAMMPS calculates are printed out. Thus their effect
-in commands that use the spacings should be decipherable.
-
-
-----------
-
-
-Example commands for generating a Wurtzite crystal (courtesy
-of Aidan Thompson), with its 8 atom unit cell.
-
-.. parsed-literal::
-
- variable a equal 4.340330
- variable b equal $a*sqrt(3.0)
- variable c equal $a*sqrt(8.0/3.0)
-
-.. parsed-literal::
-
- variable 1_3 equal 1.0/3.0
- variable 2_3 equal 2.0/3.0
- variable 1_6 equal 1.0/6.0
- variable 5_6 equal 5.0/6.0
- variable 1_12 equal 1.0/12.0
- variable 5_12 equal 5.0/12.0
-
-.. parsed-literal::
-
- lattice custom 1.0 &
- a1 $a 0.0 0.0 &
- a2 0.0 $b 0.0 &
- a3 0.0 0.0 $c &
- basis 0.0 0.0 0.0 &
- basis 0.5 0.5 0.0 &
- basis ${1_3} 0.0 0.5 &
- basis ${5_6} 0.5 0.5 &
- basis 0.0 0.0 0.625 &
- basis 0.5 0.5 0.625 &
- basis ${1_3} 0.0 0.125 &
- basis ${5_6} 0.5 0.125
-
-.. parsed-literal::
-
- region myreg block 0 1 0 1 0 1
- create_box 2 myreg
- create_atoms 1 box &
- basis 5 2 &
- basis 6 2 &
- basis 7 2 &
- basis 8 2
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The *a1,a2,a3,basis* keywords can only be used with style *custom*\ .
-
-Related commands
-""""""""""""""""
-
-:doc:`dimension <dimension>`, :doc:`create_atoms <create_atoms>`,
-:doc:`region <region>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- lattice none 1.0
-
-For other lattice styles, the option defaults are origin = 0.0 0.0
-0.0, orient = x 1 0 0, orient = y 0 1 0, orient = z 0 0 1, a1 = 1 0 0,
-a2 = 0 1 0, and a3 = 0 0 1.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/log.txt b/doc/html/_sources/log.txt
deleted file mode 100644
index 402b1e2f4..000000000
--- a/doc/html/_sources/log.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-.. index:: log
-
-log command
-===========
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- log file keyword
-
-* file = name of new logfile
-* keyword = *append* if output should be appended to logfile (optional)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- log log.equil
- log log.equil append
-
-Description
-"""""""""""
-
-This command closes the current LAMMPS log file, opens a new file with
-the specified name, and begins logging information to it. If the
-specified file name is *none*\ , then no new log file is opened. If the
-optional keyword *append* is specified, then output will be appended
-to an existing log file, instead of overwriting it.
-
-If multiple processor partitions are being used, the file name should
-be a variable, so that different processors do not attempt to write to
-the same log file.
-
-The file "log.lammps" is the default log file for a LAMMPS run. The
-name of the initial log file can also be set by the command-line
-switch -log. See :ref:`Section_start 6 <start_7>` for
-details.
-
-Restrictions
-""""""""""""
- none
-
-**Related commands:** none
-
-Default
-"""""""
-
-The default LAMMPS log file is named log.lammps
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/manifolds.txt b/doc/html/_sources/manifolds.txt
deleted file mode 100644
index 19e0a636a..000000000
--- a/doc/html/_sources/manifolds.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-Manifolds (surfacse)
-====================
-
-**Overview:**
-
-This doc page is not about a LAMMPS input script command, but about
-manifolds, which are generalized surfaces, as defined and used by the
-USER-MANIFOLD package, to track particle motion on the manifolds. See
-the src/USER-MANIFOLD/README file for more details about the package
-and its commands.
-
-Below is a list of currently supported manifolds by the USER-MANIFOLD
-package, their parameters and a short description of them. The
-parameters listed here are in the same order as they should be passed
-to the relevant fixes.
-
-+---------------+----------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------+--+
-| *manifold* | *parameters* | *equation* | *description* | |
-+---------------+----------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------+--+
-| 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 | |
-+---------------+----------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------+--+
-| 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 | |
-+---------------+----------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------+--+
-| 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. | |
-+---------------+----------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------+--+
-| 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 | |
-+---------------+----------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------+--+
-| 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 | |
-+---------------+----------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------+--+
-| thylakoid | wB LB lB | Various, see :ref:`(Paquay) <Paquay>` | 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) | |
-+---------------+----------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------+--+
-
-.. _Paquay:
-
-
-
-**(Paquay)** Paquay and Kusters, Biophys. J., 110, ???, (2016), to be published,
-preprint available at `arXiv:1411.3019 <http://arxiv.org/abs/1411.3019/>`_.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/mass.txt b/doc/html/_sources/mass.txt
deleted file mode 100644
index ac4f2a368..000000000
--- a/doc/html/_sources/mass.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-.. index:: mass
-
-mass command
-============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- mass I value
-
-* I = atom type (see asterisk form below)
-* value = mass
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- mass 1 1.0
- mass * 62.5
- mass 2* 62.5
-
-Description
-"""""""""""
-
-Set the mass for all atoms of one or more atom types. Per-type mass
-values can also be set in the :doc:`read_data <read_data>` data file
-using the "Masses" keyword. See the :doc:`units <units>` command for
-what mass units to use.
-
-The I index can be specified in one of two ways. An explicit numeric
-value can be used, as in the 1st example above. Or a wild-card
-asterisk can be used to set the mass for multiple atom types. This
-takes the form "*" or "*n" or "n*" or "m*n". If N = the number of
-atom types, then an asterisk with no numeric values means all types
-from 1 to N. A leading asterisk means all types from 1 to n
-(inclusive). A trailing asterisk means all types from n to N
-(inclusive). A middle asterisk means all types from m to n
-(inclusive).
-
-A line in a :doc:`data file <read_data>` that follows the "Masses"
-keyword specifies mass using the same format as the arguments of the
-mass command in an input script, except that no wild-card asterisk can
-be used. For example, under the "Masses" section of a data file, the
-line that corresponds to the 1st example above would be listed as
-
-.. parsed-literal::
-
- 1 1.0
-
-Note that the mass command can only be used if the :doc:`atom style <atom_style>` requires per-type atom mass to be set.
-Currently, all but the *sphere* and *ellipsoid* and *peri* styles do.
-They require mass to be set for individual particles, not types.
-Per-atom masses are defined in the data file read by the
-:doc:`read_data <read_data>` command, or set to default values by the
-:doc:`create_atoms <create_atoms>` command. Per-atom masses can also be
-set to new values by the :doc:`set mass <set>` or :doc:`set density <set>`
-commands.
-
-Also note that :doc:`pair_style eam <pair_eam>` and :doc:`pair_style bop <pair_bop>` commands define the masses of atom types in their
-respective potential files, in which case the mass command is normally
-not used.
-
-If you define a :doc:`hybrid atom style <atom_style>` which includes one
-(or more) sub-styles which require per-type mass and one (or more)
-sub-styles which require per-atom mass, then you must define both.
-However, in this case the per-type mass will be ignored; only the
-per-atom mass will be used by LAMMPS.
-
-Restrictions
-""""""""""""
-
-
-This command must come after the simulation box is defined by a
-:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`, or
-:doc:`create_box <create_box>` command.
-
-All masses must be defined before a simulation is run. They must also
-all be defined before a :doc:`velocity <velocity>` or :doc:`fix shake <fix_shake>` command is used.
-
-The mass assigned to any type or atom must be > 0.0.
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/min_modify.txt b/doc/html/_sources/min_modify.txt
deleted file mode 100644
index 95c85ab15..000000000
--- a/doc/html/_sources/min_modify.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-.. index:: min_modify
-
-min_modify command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- min_modify keyword values ...
-
-* one or more keyword/value pairs may be listed
-.. parsed-literal::
-
- keyword = *dmax* or *line*
- *dmax* value = max
- max = maximum distance for line search to move (distance units)
- *line* value = *backtrack* or *quadratic* or *forcezero*
- backtrack,quadratic,forcezero = style of linesearch to use
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- min_modify dmax 0.2
-
-Description
-"""""""""""
-
-This command sets parameters that affect the energy minimization
-algorithms selected by the :doc:`min_style <min_style>` command. The
-various settings may affect the convergence rate and overall number of
-force evaluations required by a minimization, so users can experiment
-with these parameters to tune their minimizations.
-
-The *cg* and *sd* minimization styles have an outer iteration and an
-inner iteration which is steps along a one-dimensional line search in
-a particular search direction. The *dmax* parameter is how far any
-atom can move in a single line search in any dimension (x, y, or z).
-For the *quickmin* and *fire* minimization styles, the *dmax* setting
-is how far any atom can move in a single iteration (timestep). Thus a
-value of 0.1 in real :doc:`units <units>` means no atom will move
-further than 0.1 Angstroms in a single outer iteration. This prevents
-highly overlapped atoms from being moved long distances (e.g. through
-another atom) due to large forces.
-
-The choice of line search algorithm for the *cg* and *sd* minimization
-styles can be selected via the *line* keyword.
-The default *quadratic* line search algorithm starts out using
-the robust backtracking method described below. However, once
-the system gets close to a local
-minimum and the linesearch steps get small, so that the energy
-is approximately quadratic in the step length, it uses the
-estimated location of zero gradient as the linesearch step,
-provided the energy change is downhill.
-This becomes more efficient than backtracking
-for highly-converged relaxations. The *forcezero*
-line search algorithm is similar to *quadratic*\ .
-It may be more efficient than *quadratic* on some systems.
-
-The backtracking search is robust and should always find a local energy
-minimum. However, it will "converge" when it can no longer reduce the
-energy of the system. Individual atom forces may still be larger than
-desired at this point, because the energy change is measured as the
-difference of two large values (energy before and energy after) and
-that difference may be smaller than machine epsilon even if atoms
-could move in the gradient direction to reduce forces further.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`min_style <min_style>`, :doc:`minimize <minimize>`
-
-Default
-"""""""
-
-The option defaults are dmax = 0.1 and line = quadratic.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/min_style.txt b/doc/html/_sources/min_style.txt
deleted file mode 100644
index 1a625a0f2..000000000
--- a/doc/html/_sources/min_style.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-.. index:: min_style
-
-min_style command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- min_style style
-
-* style = *cg* or *hftn* or *sd* or *quickmin* or *fire*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- min_style cg
- min_style fire
-
-Description
-"""""""""""
-
-Choose a minimization algorithm to use when a :doc:`minimize <minimize>`
-command is performed.
-
-Style *cg* is the Polak-Ribiere version of the conjugate gradient (CG)
-algorithm. At each iteration the force gradient is combined with the
-previous iteration information to compute a new search direction
-perpendicular (conjugate) to the previous search direction. The PR
-variant affects how the direction is chosen and how the CG method is
-restarted when it ceases to make progress. The PR variant is thought
-to be the most effective CG choice for most problems.
-
-Style *hftn* is a Hessian-free truncated Newton algorithm. At each
-iteration a quadratic model of the energy potential is solved by a
-conjugate gradient inner iteration. The Hessian (second derivatives)
-of the energy is not formed directly, but approximated in each
-conjugate search direction by a finite difference directional
-derivative. When close to an energy minimum, the algorithm behaves
-like a Newton method and exhibits a quadratic convergence rate to high
-accuracy. In most cases the behavior of *hftn* is similar to *cg*\ ,
-but it offers an alternative if *cg* seems to perform poorly. This
-style is not affected by the :doc:`min_modify <min_modify>` command.
-
-Style *sd* is a steepest descent algorithm. At each iteration, the
-search direction is set to the downhill direction corresponding to the
-force vector (negative gradient of energy). Typically, steepest
-descent will not converge as quickly as CG, but may be more robust in
-some situations.
-
-Style *quickmin* is a damped dynamics method described in
-:ref:`(Sheppard) <Sheppard>`, where the damping parameter is related to the
-projection of the velocity vector along the current force vector for
-each atom. The velocity of each atom is initialized to 0.0 by this
-style, at the beginning of a minimization.
-
-Style *fire* is a damped dynamics method described in
-:ref:`(Bitzek) <Bitzek>`, which is similar to *quickmin* but adds a variable
-timestep and alters the projection operation to maintain components of
-the velocity non-parallel to the current force vector. The velocity
-of each atom is initialized to 0.0 by this style, at the beginning of
-a minimization.
-
-Either the *quickmin* and *fire* styles are useful in the context of
-nudged elastic band (NEB) calculations via the :doc:`neb <neb>` command.
-
-.. note::
-
- The damped dynamic minimizers use whatever timestep you have
- defined via the :doc:`timestep <timestep>` command. Often they will
- converge more quickly if you use a timestep about 10x larger than you
- would normally use for dynamics simulations.
-
-.. note::
-
- The *quickmin*\ , *fire*\ , and *hftn* styles do not yet support the
- use of the :doc:`fix box/relax <fix_box_relax>` command or minimizations
- involving the electron radius in :doc:`eFF <pair_eff>` models.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`min_modify <min_modify>`, :doc:`minimize <minimize>`, :doc:`neb <neb>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- min_style cg
-
-
-----------
-
-
-.. _Sheppard:
-
-
-
-**(Sheppard)** Sheppard, Terrell, Henkelman, J Chem Phys, 128, 134106
-(2008). See ref 1 in this paper for original reference to Qmin in
-Jonsson, Mills, Jacobsen.
-
-.. _Bitzek:
-
-
-
-**(Bitzek)** Bitzek, Koskinen, Gahler, Moseler, Gumbsch, Phys Rev Lett,
-97, 170201 (2006).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/minimize.txt b/doc/html/_sources/minimize.txt
deleted file mode 100644
index 27a747ca5..000000000
--- a/doc/html/_sources/minimize.txt
+++ /dev/null
@@ -1,292 +0,0 @@
-.. index:: minimize
-
-minimize command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- minimize etol ftol maxiter maxeval
-
-* etol = stopping tolerance for energy (unitless)
-* ftol = stopping tolerance for force (force units)
-* maxiter = max iterations of minimizer
-* maxeval = max number of force/energy evaluations
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- minimize 1.0e-4 1.0e-6 100 1000
- minimize 0.0 1.0e-8 1000 100000
-
-Description
-"""""""""""
-
-Perform an energy minimization of the system, by iteratively adjusting
-atom coordinates. Iterations are terminated when one of the stopping
-criteria is satisfied. At that point the configuration will hopefully
-be in local potential energy minimum. More precisely, the
-configuration should approximate a critical point for the objective
-function (see below), which may or may not be a local minimum.
-
-The minimization algorithm used is set by the
-:doc:`min_style <min_style>` command. Other options are set by the
-:doc:`min_modify <min_modify>` command. Minimize commands can be
-interspersed with :doc:`run <run>` commands to alternate between
-relaxation and dynamics. The minimizers bound the distance atoms move
-in one iteration, so that you can relax systems with highly overlapped
-atoms (large energies and forces) by pushing the atoms off of each
-other.
-
-Alternate means of relaxing a system are to run dynamics with a small
-or :doc:`limited timestep <fix_nve_limit>`. Or dynamics can be run
-using :doc:`fix viscous <fix_viscous>` to impose a damping force that
-slowly drains all kinetic energy from the system. The :doc:`pair_style soft <pair_soft>` potential can be used to un-overlap atoms while
-running dynamics.
-
-Note that you can minimize some atoms in the system while holding the
-coordiates of other atoms fixed by applying :doc:`fix setforce <fix_setforce>` to the other atoms. See a fuller
-discussion of using fixes while minimizing below.
-
-The :doc:`minimization styles <min_style>` *cg*\ , *sd*\ , and *hftn*
-involves an outer iteration loop which sets the search direction along
-which atom coordinates are changed. An inner iteration is then
-performed using a line search algorithm. The line search typically
-evaluates forces and energies several times to set new coordinates.
-Currently, a backtracking algorithm is used which may not be optimal
-in terms of the number of force evaulations performed, but appears to
-be more robust than previous line searches we've tried. The
-backtracking method is described in Nocedal and Wright's Numerical
-Optimization (Procedure 3.1 on p 41).
-
-The :doc:`minimization styles <min_style>` *quickmin* and *fire* perform
-damped dynamics using an Euler integration step. Thus they require a
-:doc:`timestep <timestep>` be defined.
-
-.. note::
-
- The damped dynamic minimizers use whatever timestep you have
- defined via the :doc:`timestep <timestep>` command. Often they will
- converge more quickly if you use a timestep about 10x larger than you
- would normally use for dynamics simulations.
-
-
-----------
-
-
-In all cases, the objective function being minimized is the total
-potential energy of the system as a function of the N atom
-coordinates:
-
-.. image:: Eqs/min_energy.jpg
- :align: center
-
-where the first term is the sum of all non-bonded :doc:`pairwise interactions <pair_style>` including :doc:`long-range Coulombic interactions <kspace_style>`, the 2nd thru 5th terms are
-:doc:`bond <bond_style>`, :doc:`angle <angle_style>`,
-:doc:`dihedral <dihedral_style>`, and :doc:`improper <improper_style>`
-interactions respectively, and the last term is energy due to
-:doc:`fixes <fix>` which can act as constraints or apply force to atoms,
-such as thru interaction with a wall. See the discussion below about
-how fix commands affect minimization.
-
-The starting point for the minimization is the current configuration
-of the atoms.
-
-
-----------
-
-
-The minimization procedure stops if any of several criteria are met:
-
-* the change in energy between outer iterations is less than *etol*
-* the 2-norm (length) of the global force vector is less than the *ftol*
-* the line search fails because the step distance backtracks to 0.0
-* the number of outer iterations or timesteps exceeds *maxiter*
-* the number of total force evaluations exceeds *maxeval*
-
-For the first criterion, the specified energy tolerance *etol* is
-unitless; it is met when the energy change between successive
-iterations divided by the energy magnitude is less than or equal to
-the tolerance. For example, a setting of 1.0e-4 for *etol* means an
-energy tolerance of one part in 10^4. For the damped dynamics
-minimizers this check is not performed for a few steps after
-velocities are reset to 0, otherwise the minimizer would prematurely
-converge.
-
-For the second criterion, the specified force tolerance *ftol* is in
-force units, since it is the length of the global force vector for all
-atoms, e.g. a vector of size 3N for N atoms. Since many of the
-components will be near zero after minimization, you can think of
-*ftol* as an upper bound on the final force on any component of any
-atom. For example, a setting of 1.0e-4 for *ftol* means no x, y, or z
-component of force on any atom will be larger than 1.0e-4 (in force
-units) after minimization.
-
-Either or both of the *etol* and *ftol* values can be set to 0.0, in
-which case some other criterion will terminate the minimization.
-
-During a minimization, the outer iteration count is treated as a
-timestep. Output is triggered by this timestep, e.g. thermodynamic
-output or dump and restart files.
-
-Using the :doc:`thermo_style custom <thermo_style>` command with the
-*fmax* or *fnorm* keywords can be useful for monitoring the progress
-of the minimization. Note that these outputs will be calculated only
-from forces on the atoms, and will not include any extra degrees of
-freedom, such as from the :doc:`fix box/relax <fix_box_relax>` command.
-
-Following minimization, a statistical summary is printed that lists
-which convergence criterion caused the minimizer to stop, as well as
-information about the energy, force, final line search, and
-iteration counts. An example is as follows:
-
-.. parsed-literal::
-
- Minimization stats:
- Stopping criterion = max iterations
- Energy initial, next-to-last, final =
- -0.626828169302 -2.82642039062 -2.82643549739
- Force two-norm initial, final = 2052.1 91.9642
- Force max component initial, final = 346.048 9.78056
- Final line search alpha, max atom move = 2.23899e-06 2.18986e-05
- Iterations, force evaluations = 2000 12724
-
-The 3 energy values are for before and after the minimization and on
-the next-to-last iteration. This is what the *etol* parameter checks.
-
-The two-norm force values are the length of the global force vector
-before and after minimization. This is what the *ftol* parameter
-checks.
-
-The max-component force values are the absolute value of the largest
-component (x,y,z) in the global force vector, i.e. the infinity-norm
-of the force vector.
-
-The alpha parameter for the line-search, when multiplied by the max
-force component (on the last iteration), gives the max distance any
-atom moved during the last iteration. Alpha will be 0.0 if the line
-search could not reduce the energy. Even if alpha is non-zero, if the
-"max atom move" distance is tiny compared to typical atom coordinates,
-then it is possible the last iteration effectively caused no atom
-movement and thus the evaluated energy did not change and the
-minimizer terminated. Said another way, even with non-zero forces,
-it's possible the effect of those forces is to move atoms a distance
-less than machine precision, so that the energy cannot be further
-reduced.
-
-The iterations and force evaluation values are what is checked by the
-*maxiter* and *maxeval* parameters.
-
-
-----------
-
-
-.. note::
-
- There are several force fields in LAMMPS which have
- discontinuities or other approximations which may prevent you from
- performing an energy minimization to high tolerances. For example,
- you should use a :doc:`pair style <pair_style>` that goes to 0.0 at the
- cutoff distance when performing minimization (even if you later change
- it when running dynamics). If you do not do this, the total energy of
- the system will have discontinuities when the relative distance
- between any pair of atoms changes from cutoff+epsilon to
- cutoff-epsilon and the minimizer may behave poorly. Some of the
- manybody potentials use splines and other internal cutoffs that
- inherently have this problem. The :doc:`long-range Coulombic styles <kspace_style>` (PPPM, Ewald) are approximate to within the
- user-specified tolerance, which means their energy and forces may not
- agree to a higher precision than the Kspace-specified tolerance. In
- all these cases, the minimizer may give up and stop before finding a
- minimum to the specified energy or force tolerance.
-
-Note that a cutoff Lennard-Jones potential (and others) can be shifted
-so that its energy is 0.0 at the cutoff via the
-:doc:`pair_modify <pair_modify>` command. See the doc pages for
-inidividual :doc:`pair styles <pair_style>` for details. Note that
-Coulombic potentials always have a cutoff, unless versions with a
-long-range component are used (e.g. :doc:`pair_style lj/cut/coul/long <pair_lj>`). The CHARMM potentials go to 0.0 at
-the cutoff (e.g. :doc:`pair_style lj/charmm/coul/charmm <pair_charmm>`),
-as do the GROMACS potentials (e.g. :doc:`pair_style lj/gromacs <pair_gromacs>`).
-
-If a soft potential (:doc:`pair_style soft <pair_soft>`) is used the
-Astop value is used for the prefactor (no time dependence).
-
-The :doc:`fix box/relax <fix_box_relax>` command can be used to apply an
-external pressure to the simulation box and allow it to shrink/expand
-during the minimization.
-
-Only a few other fixes (typically those that apply force constraints)
-are invoked during minimization. See the doc pages for individual
-:doc:`fix <fix>` commands to see which ones are relevant. Current
-examples of fixes that can be used include:
-
-* :doc:`fix addforce <fix_addforce>`
-* :doc:`fix addtorque <fix_addtorque>`
-* :doc:`fix efield <fix_efield>`
-* :doc:`fix enforce2d <fix_enforce2d>`
-* :doc:`fix indent <fix_indent>`
-* :doc:`fix lineforce <fix_lineforce>`
-* :doc:`fix planeforce <fix_planeforce>`
-* :doc:`fix setforce <fix_setforce>`
-* :doc:`fix spring <fix_spring>`
-* :doc:`fix spring/self <fix_spring_self>`
-* :doc:`fix viscous <fix_viscous>`
-* :doc:`fix wall <fix_wall>`
-* :doc:`fix wall/region <fix_wall_region>`
-
-.. note::
-
- Some fixes which are invoked during minimization have an
- associated potential energy. For that energy to be included in the
- total potential energy of the system (the quantity being minimized),
- you MUST enable the :doc:`fix_modify <fix_modify>` *energy* option for
- that fix. The doc pages for individual :doc:`fix <fix>` commands
- specify if this should be done.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-Features that are not yet implemented are listed here, in case someone
-knows how they could be coded:
-
-It is an error to use :doc:`fix shake <fix_shake>` with minimization
-because it turns off bonds that should be included in the potential
-energy of the system. The effect of a fix shake can be approximated
-during a minimization by using stiff spring constants for the bonds
-and/or angles that would normally be constrained by the SHAKE
-algorithm.
-
-:doc:`Fix rigid <fix_rigid>` is also not supported by minimization. It
-is not an error to have it defined, but the energy minimization will
-not keep the defined body(s) rigid during the minimization. Note that
-if bonds, angles, etc internal to a rigid body have been turned off
-(e.g. via :doc:`neigh_modify exclude <neigh_modify>`), they will not
-contribute to the potential energy which is probably not what is
-desired.
-
-Pair potentials that produce torque on a particle (e.g. :doc:`granular potentials <pair_gran>` or the :doc:`GayBerne potential <pair_gayberne>` for ellipsoidal particles) are not
-relaxed by a minimization. More specifically, radial relaxations are
-induced, but no rotations are induced by a minimization, so such a
-system will not fully relax.
-
-Related commands
-""""""""""""""""
-
-:doc:`min_modify <min_modify>`, :doc:`min_style <min_style>`,
-:doc:`run_style <run_style>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/molecule.txt b/doc/html/_sources/molecule.txt
deleted file mode 100644
index dcb818001..000000000
--- a/doc/html/_sources/molecule.txt
+++ /dev/null
@@ -1,514 +0,0 @@
-.. index:: molecule
-
-molecule command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- molecule ID file1 keyword values ... file2 keyword values ... fileN ...
-
-* ID = user-assigned name for the molecule template
-* file1,file2,... = names of files containing molecule descriptions
-* zero or more keyword/value pairs may be appended after each file
-* keyword = *offset* or *toff* or *boff* or *aoff* or *doff* or *ioff* or *scale*
-.. parsed-literal::
-
- *offset* values = Toff Boff Aoff Doff Ioff
- Toff = offset to add to atom types
- Boff = offset to add to bond types
- Aoff = offset to add to angle types
- Doff = offset to add to dihedral types
- Ioff = offset to add to improper types
- *toff* value = Toff
- Toff = offset to add to atom types
- *boff* value = Boff
- Boff = offset to add to bond types
- *aoff* value = Aoff
- Aoff = offset to add to angle types
- *doff* value = Doff
- Doff = offset to add to dihedral types
- *ioff* value = Ioff
- Ioff = offset to add to improper types
- *scale* value = sfactor
- sfactor = scale factor to apply to the size and mass of the molecule
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- molecule 1 mymol.txt
- molecule 1 co2.txt h2o.txt
- molecule CO2 co2.txt boff 3 aoff 2
- molecule 1 mymol.txt offset 6 9 18 23 14
- molecule objects file.1 scale 1.5 file.1 scale 2.0 file.2 scale 1.3
-
-.. parsed-literal::
-
-
-Description
-"""""""""""
-
-Define a molecule template that can be used as part of other LAMMPS
-commands, typically to define a collection of particles as a bonded
-molecule or a rigid body. Commands that currently use molecule
-templates include:
-
-* :doc:`fix deposit <fix_deposit>`
-* :doc:`fix pour <fix_pour>`
-* :doc:`fix rigid/small <fix_rigid>`
-* :doc:`fix shake <fix_shake>`
-* :doc:`fix gcmc <fix_gcmc>`
-* :doc:`create_atoms <create_atoms>`
-* :doc:`atom_style template <atom_style>`
-
-The ID of a molecule template can only contain alphanumeric characters
-and underscores.
-
-A single template can contain multiple molecules, listed one per file.
-Some of the commands listed above currently use only the first
-molecule in the template, and will issue a warning if the template
-contains multiple molecules. The :doc:`atom_style template <atom_style>` command allows multiple-molecule templates
-to define a system with more than one templated molecule.
-
-Each filename can be followed by optional keywords which are applied
-only to the molecule in the file as used in this template. This is to
-make it easy to use the same molecule file in different molecule
-templates or in different simulations. You can specify the same file
-multiple times with different optional keywords.
-
-The *offset*\ , *toff*\ , *aoff*\ , *doff*\ , *ioff* keywords add the
-specified offset values to the atom types, bond types, angle types,
-dihedral types, and/or improper types as they are read from the
-molecule file. E.g. if *toff* = 2, and the file uses atom types
-1,2,3, then each created molecule will have atom types 3,4,5. For the
-*offset* keyword, all five offset values must be specified, but
-individual values will be ignored if the molecule template does not
-use that attribute (e.g. no bonds).
-
-The *scale* keyword scales the size of the molecule. This can be
-useful for modeling polydisperse granular rigid bodies. The scale
-factor is applied to each of these properties in the molecule file, if
-they are defined: the individual particle coordinates (Coords
-section), the individual mass of each particle (Masses section), the
-individual diameters of each particle (Diameters section), the total
-mass of the molecule (header keyword = mass), the center-of-mass of
-the molecule (header keyword = com), and the moments of inertia of the
-molecule (header keyword = inertia).
-
-.. note::
-
- The molecule command can be used to define molecules with bonds,
- angles, dihedrals, imporopers, or special bond lists of neighbors
- within a molecular topology, so that you can later add the molecules
- to your simulation, via one or more of the commands listed above. If
- such molecules do not already exist when LAMMPS creates the simulation
- box, via the :doc:`create_box <create_box>` or
- :doc:`read_data <read_data>` command, when you later add them you may
- overflow the pre-allocated data structures which store molecular
- topology information with each atom, and an error will be generated.
- Both the :doc:`create_box <create_box>` command and the data files read
- by the :doc:`read_data <read_data>` command have "extra" options which
- insure space is allocated for storing topology info for molecules that
- are added later.
-
-The format of an individual molecule file is similar to the data file
-read by the :doc:`read_data <read_data>` commands, and is as follows.
-
-A molecule file has a header and a body. The header appears first.
-The first line of the header is always skipped; it typically contains
-a description of the file. Then lines are read one at a time. Lines
-can have a trailing comment starting with '#' that is ignored. If the
-line is blank (only whitespace after comment is deleted), it is
-skipped. If the line contains a header keyword, the corresponding
-value(s) is read from the line. If it doesn't contain a header
-keyword, the line begins the body of the file.
-
-The body of the file contains zero or more sections. The first line
-of a section has only a keyword. The next line is skipped. The
-remaining lines of the section contain values. The number of lines
-depends on the section keyword as described below. Zero or more blank
-lines can be used between sections. Sections can appear in any order,
-with a few exceptions as noted below.
-
-These are the recognized header keywords. Header lines can come in
-any order. The numeric value(s) are read from the beginning of the
-line. The keyword should appear at the end of the line. All these
-settings have default values, as explained below. A line need only
-appear if the value(s) are different than the default.
-
-* N *atoms* = # of atoms N in molecule, default = 0
-* Nb *bonds* = # of bonds Nb in molecule, default = 0
-* Na *angles* = # of angles Na in molecule, default = 0
-* Nd *dihedrals* = # of dihedrals Nd in molecule, default = 0
-* Ni *impropers* = # of impropers Ni in molecule, default = 0
-* Mtotal *mass* = total mass of molecule
-* Xc Yc Zc *com* = coordinates of center-of-mass of molecule
-* Ixx Iyy Izz Ixy Ixz Iyz *inertia* = 6 components of inertia tensor of molecule
-
-For *mass*\ , *com*\ , and *inertia*\ , the default is for LAMMPS to
-calculate this quantity itself if needed, assuming the molecules
-consists of a set of point particles or finite-size particles (with a
-non-zero diameter) that do not overlap. If finite-size particles in
-the molecule do overlap, LAMMPS will not account for the overlap
-effects when calculating any of these 3 quantities, so you should
-pre-compute them yourself and list the values in the file.
-
-The mass and center-of-mass coordinates (Xc,Yc,Zc) are
-self-explanatory. The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz)
-should be the values consistent with the current orientation of the
-rigid body around its center of mass. The values are with respect to
-the simulation box XYZ axes, not with respect to the prinicpal axes of
-the rigid body itself. LAMMPS performs the latter calculation
-internally.
-
-These are the allowed section keywords for the body of the file.
-
-* *Coords, Types, Charges, Diameters, Masses* = atom-property sections
-* *Bonds, Angles, Dihedrals, Impropers* = molecular topology sections
-* *Special Bond Counts, Special Bonds* = special neighbor info
-* *Shake Flags, Shake Atoms, Shake Bond Types* = SHAKE info
-
-If a Bonds section is specified then the Special Bond Counts and
-Special Bonds sections can also be used, if desired, to explicitly
-list the 1-2, 1-3, 1-4 neighbors within the molecule topology (see
-details below). This is optional since if these sections are not
-included, LAMMPS will auto-generate this information. Note that
-LAMMPS uses this info to properly exclude or weight bonded pairwise
-interactions between bonded atoms. See the
-:doc:`special_bonds <special_bonds>` command for more details. One
-reason to list the special bond info explicitly is for the
-:doc:`thermalized Drude oscillator model <tutorial_drude>` which treats
-the bonds between nuclear cores and Drude electrons in a different
-manner.
-
-.. note::
-
- Whether a section is required depends on how the molecule
- template is used by other LAMMPS commands. For example, to add a
- molecule via the :doc:`fix deposit <fix_deposit>` command, the Coords
- and Types sections are required. To add a rigid body via the :doc:`fix pour <fix_pout>` command, the Bonds (Angles, etc) sections are not
- required, since the molecule will be treated as a rigid body. Some
- sections are optional. For example, the :doc:`fix pour <fix_pour>`
- command can be used to add "molecules" which are clusters of
- finite-size granular particles. If the Diameters section is not
- specified, each particle in the molecule will have a default diameter
- of 1.0. See the doc pages for LAMMPS commands that use molecule
- templates for more details.
-
-Each section is listed below in alphabetic order. The format of each
-section is described including the number of lines it must contain and
-rules (if any) for whether it can appear in the data file. In each
-case the ID is ignored; it is simply included for readability, and
-should be a number from 1 to Nlines for the section, indicating which
-atom (or bond, etc) the entry applies to. The lines are assumed to be
-listed in order from 1 to Nlines, but LAMMPS does not check for this.
-
-
-----------
-
-
-*Coords* section:
-
-* one line per atom
-* line syntax: ID x y z
-* x,y,z = coordinate of atom
-
-
-----------
-
-
-*Types* section:
-
-* one line per atom
-* line syntax: ID type
-* type = atom type of atom
-
-
-----------
-
-
-*Charges* section:
-
-* one line per atom
-* line syntax: ID q
-* q = charge on atom
-
-This section is only allowed for :doc:`atom styles <atom_style>` that
-support charge. If this section is not included, the default charge
-on each atom in the molecule is 0.0.
-
-
-----------
-
-
-*Diameters* section:
-
-* one line per atom
-* line syntax: ID diam
-* diam = diameter of atom
-
-This section is only allowed for :doc:`atom styles <atom_style>` that
-support finite-size spherical particles, e.g. atom_style sphere. If
-not listed, the default diameter of each atom in the molecule is 1.0.
-
-
-----------
-
-
-*Masses* section:
-
-* one line per atom
-* line syntax: ID mass
-* mass = mass of atom
-
-This section is only allowed for :doc:`atom styles <atom_style>` that
-support per-atom mass, as opposed to per-type mass. See the
-:doc:`mass <mass>` command for details. If this section is not
-included, the default mass for each atom is derived from its volume
-(see Diameters section) and a default density of 1.0, in
-:doc:`units <units>` of mass/volume.
-
-
-----------
-
-
-*Bonds* section:
-
-* one line per bond
-* line syntax: ID type atom1 atom2
-* type = bond type (1-Nbondtype)
-* atom1,atom2 = IDs of atoms in bond
-
-The IDs for the two atoms in each bond should be values
-from 1 to Natoms, where Natoms = # of atoms in the molecule.
-
-
-----------
-
-
-*Angles* section:
-
-* one line per angle
-* line syntax: ID type atom1 atom2 atom3
-* type = angle type (1-Nangletype)
-* atom1,atom2,atom3 = IDs of atoms in angle
-
-The IDs for the three atoms in each angle should be values from 1 to
-Natoms, where Natoms = # of atoms in the molecule. The 3 atoms are
-ordered linearly within the angle. Thus the central atom (around
-which the angle is computed) is the atom2 in the list.
-
-
-----------
-
-
-*Dihedrals* section:
-
-* one line per dihedral
-* line syntax: ID type atom1 atom2 atom3 atom4
-* type = dihedral type (1-Ndihedraltype)
-* atom1,atom2,atom3,atom4 = IDs of atoms in dihedral
-
-The IDs for the four atoms in each dihedral should be values from 1 to
-Natoms, where Natoms = # of atoms in the molecule. The 4 atoms are
-ordered linearly within the dihedral.
-
-
-----------
-
-
-*Impropers* section:
-
-* one line per improper
-* line syntax: ID type atom1 atom2 atom3 atom4
-* type = improper type (1-Nimpropertype)
-* atom1,atom2,atom3,atom4 = IDs of atoms in improper
-
-The IDs for the four atoms in each improper should be values from 1 to
-Natoms, where Natoms = # of atoms in the molecule. The ordering of
-the 4 atoms determines the definition of the improper angle used in
-the formula for the defined :doc:`improper style <improper_style>`. See
-the doc pages for individual styles for details.
-
-
-----------
-
-
-*Special Bond Counts* section:
-
-* one line per atom
-* line syntax: ID N1 N2 N3
-* N1 = # of 1-2 bonds
-* N2 = # of 1-3 bonds
-* N3 = # of 1-4 bonds
-
-N1, N2, N3 are the number of 1-2, 1-3, 1-4 neighbors respectively of
-this atom within the topology of the molecule. See the
-:doc:`special_bonds <special_bonds>` doc page for more discussion of
-1-2, 1-3, 1-4 neighbors. If this section appears, the Special Bonds
-section must also appear.
-
-As explained above, LAMMPS will auto-generate this information if this
-section is not specified. If specified, this section will
-override what would be auto-generated.
-
-
-----------
-
-
-*Special Bonds* section:
-
-* one line per atom
-* line syntax: ID a b c d ...
-* a,b,c,d,... = IDs of atoms in N1+N2+N3 special bonds
-
-A, b, c, d, etc are the IDs of the n1+n2+n3 atoms that are 1-2, 1-3,
-1-4 neighbors of this atom. The IDs should be values from 1 to
-Natoms, where Natoms = # of atoms in the molecule. The first N1
-values should be the 1-2 neighbors, the next N2 should be the 1-3
-neighbors, the last N3 should be the 1-4 neighbors. No atom ID should
-appear more than once. See the :doc:`special_bonds <special_bonds>` doc
-page for more discussion of 1-2, 1-3, 1-4 neighbors. If this section
-appears, the Special Bond Counts section must also appear.
-
-As explained above, LAMMPS will auto-generate this information if this
-section is not specified. If specified, this section will override
-what would be auto-generated.
-
-
-----------
-
-
-*Shake Flags* section:
-
-* one line per atom
-* line syntax: ID flag
-* flag = 0,1,2,3,4
-
-This section is only needed when molecules created using the template
-will be constrained by SHAKE via the "fix shake" command. The other
-two Shake sections must also appear in the file, following this one.
-
-The meaning of the flag for each atom is as follows. See the :doc:`fix shake <fix_shake>` doc page for a further description of SHAKE
-clusters.
-
-* 0 = not part of a SHAKE cluster
-* 1 = part of a SHAKE angle cluster (two bonds and the angle they form)
-* 2 = part of a 2-atom SHAKE cluster with a single bond
-* 3 = part of a 3-atom SHAKE cluster with two bonds
-* 4 = part of a 4-atom SHAKE cluster with three bonds
-
-
-----------
-
-
-*Shake Atoms* section:
-
-* one line per atom
-* line syntax: ID a b c d
-* a,b,c,d = IDs of atoms in cluster
-
-This section is only needed when molecules created using the template
-will be constrained by SHAKE via the "fix shake" command. The other
-two Shake sections must also appear in the file.
-
-The a,b,c,d values are atom IDs (from 1 to Natoms) for all the atoms
-in the SHAKE cluster that this atom belongs to. The number of values
-that must appear is determined by the shake flag for the atom (see the
-Shake Flags section above). All atoms in a particular cluster should
-list their a,b,c,d values identically.
-
-If flag = 0, no a,b,c,d values are listed on the line, just the
-(ignored) ID.
-
-If flag = 1, a,b,c are listed, where a = ID of central atom in the
-angle, and b,c the other two atoms in the angle.
-
-If flag = 2, a,b are listed, where a = ID of atom in bond with the the
-lowest ID, and b = ID of atom in bond with the highest ID.
-
-If flag = 3, a,b,c are listed, where a = ID of central atom,
-and b,c = IDs of other two atoms bonded to the central atom.
-
-If flag = 4, a,b,c,d are listed, where a = ID of central atom,
-and b,c,d = IDs of other three atoms bonded to the central atom.
-
-See the :doc:`fix shake <fix_shake>` doc page for a further description
-of SHAKE clusters.
-
-
-----------
-
-
-*Shake Bond Types* section:
-
-* one line per atom
-* line syntax: ID a b c
-* a,b,c = bond types (or angle type) of bonds (or angle) in cluster
-
-This section is only needed when molecules created using the template
-will be constrained by SHAKE via the "fix shake" command. The other
-two Shake sections must also appear in the file.
-
-The a,b,c values are bond types (from 1 to Nbondtypes) for all bonds
-in the SHAKE cluster that this atom belongs to. The number of values
-that must appear is determined by the shake flag for the atom (see the
-Shake Flags section above). All atoms in a particular cluster should
-list their a,b,c values identically.
-
-If flag = 0, no a,b,c values are listed on the line, just the
-(ignored) ID.
-
-If flag = 1, a,b,c are listed, where a = bondtype of the bond between
-the central atom and the first non-central atom (value b in the Shake
-Atoms section), b = bondtype of the bond between the central atom and
-the 2nd non-central atom (value c in the Shake Atoms section), and c =
-the angle type (1 to Nangletypes) of the angle between the 3 atoms.
-
-If flag = 2, only a is listed, where a = bondtype of the bond between
-the 2 atoms in the cluster.
-
-If flag = 3, a,b are listed, where a = bondtype of the bond between
-the central atom and the first non-central atom (value b in the Shake
-Atoms section), and b = bondtype of the bond between the central atom
-and the 2nd non-central atom (value c in the Shake Atoms section).
-
-If flag = 4, a,b,c are listed, where a = bondtype of the bond between
-the central atom and the first non-central atom (value b in the Shake
-Atoms section), b = bondtype of the bond between the central atom and
-the 2nd non-central atom (value c in the Shake Atoms section), and c =
-bondtype of the bond between the central atom and the 3rd non-central
-atom (value d in the Shake Atoms section).
-
-See the :doc:`fix shake <fix_shake>` doc page for a further description
-of SHAKE clusters.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix deposit <fix_deposit>`, :doc:`fix pour <fix_pour>`,
-:doc:`fix gcmc <fix_gcmc>`
-
-Default
-"""""""
-
-The default keywords values are offset 0 0 0 0 0 and scale = 1.0.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/neb.txt b/doc/html/_sources/neb.txt
deleted file mode 100644
index 880741643..000000000
--- a/doc/html/_sources/neb.txt
+++ /dev/null
@@ -1,471 +0,0 @@
-.. index:: neb
-
-neb command
-===========
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- neb etol ftol N1 N2 Nevery file-style arg
-
-* etol = stopping tolerance for energy (energy units)
-* ftol = stopping tolerance for force (force units)
-* N1 = max # of iterations (timesteps) to run initial NEB
-* N2 = max # of iterations (timesteps) to run barrier-climbing NEB
-* Nevery = print replica energies and reaction coordinates every this many timesteps
-* file-style= *final* or *each* or *none*
-.. parsed-literal::
-
- *final* arg = filename
- filename = file with initial coords for final replica
- coords for intermediate replicas are linearly interpolated between first and last replica
- *each* arg = filename
- filename = unique filename for each replica (except first) with its initial coords
- *none* arg = no argument
- all replicas assumed to already have their initial coords
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- 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 none
-
-Description
-"""""""""""
-
-Perform a nudged elastic band (NEB) calculation using multiple
-replicas of a system. Two or more replicas must be used; the first
-and last are the end points of the transition path.
-
-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
-atom to perform a diffusive hop from one energy basin to another in a
-coordinated fashion with its neighbors. The implementation in LAMMPS
-follows the discussion in these 3 papers: :ref:`(Henkelman1) <Henkelman1>`,
-:ref:`(Henkelman2) <Henkelman2>`, and :ref:`(Nakano) <Nakano>`.
-
-Each replica runs on a partition of one or more processors. Processor
-partitions are defined at run-time using the -partition command-line
-switch; see :ref:`Section_start 7 <start_7>` of the
-manual. Note that if you have MPI installed, you can run a
-multi-replica simulation with more replicas (partitions) than you have
-physical processors, e.g you can run a 10-replica simulation on just
-one or two processors. You will simply not get the performance
-speed-up you would see with one or more physical processors per
-replica. See :ref:`this section <howto_5>` of the manual
-for further discussion.
-
-.. note::
-
- The current NEB implementation in LAMMPS only allows there to be
- one processor per replica.
-
-.. note::
-
- As explained below, a NEB calculation perfoms a damped dynamics
- minimization across all the replicas. The mimimizer uses whatever
- timestep you have defined in your input script, via the
- :doc:`timestep <timestep>` command. Often NEB will converge more
- quickly if you use a timestep about 10x larger than you would normally
- use for dynamics simulations.
-
-When a NEB calculation is performed, it is assumed that each replica
-is running the same system, though LAMMPS does not check for this.
-I.e. the simulation domain, the number of atoms, the interaction
-potentials, and the starting configuration when the neb command is
-issued should be the same for every replica.
-
-In a NEB calculation each atom in a replica is connected to the same
-atom in adjacent replicas by springs, which induce inter-replica
-forces. These forces are imposed by the :doc:`fix neb <fix_neb>`
-command, which must be used in conjunction with the neb command. The
-group used to define the fix neb command defines the NEB atoms which
-are the only ones that inter-replica springs are applied to. If the
-group does not include all atoms, then non-NEB atoms have no
-inter-replica springs and the forces they feel and their motion is
-computed in the usual way due only to other atoms within their
-replica. Conceptually, the non-NEB atoms provide a background force
-field for the NEB atoms. They can be allowed to move during the NEB
-minimiation procedure (which will typically induce different
-coordinates for non-NEB atoms in different replicas), or held fixed
-using other LAMMPS commands such as `fix setforce <fix_setforce>`_. Note
-that the :doc:`partition <partition>` command can be used to invoke a
-command on a subset of the replicas, e.g. if you wish to hold NEB or
-non-NEB atoms fixed in only the end-point replicas.
-
-The initial atomic configuration for each of the replicas can be
-specified in different manners via the *file-style* setting, as
-discussed below. Only atoms whose initial coordinates should differ
-from the current configuration need be specified.
-
-Conceptually, the initial configuration for the first replica should
-be a state with all the atoms (NEB and non-NEB) having coordinates on
-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 minimizaiton 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
-replicas can be atomic coordinates interpolated in a linear fashion
-between the first and last replicas. This is often adequate state for
-simple transitions. For more complex transitions, it may lead to slow
-convergence or even bad results if the minimum energy path (MEP, see
-below) of states over the barrier cannot be correctly converged to
-from such an initial configuration. In this case, you will want to
-generate initial states for the intermediate replicas that are
-geometrically closer to the MEP and read them in.
-
-
-----------
-
-
-For a *file-style* setting of *final*\ , a filename is specified which
-contains atomic coordinates for zero or more atoms, in the format
-described below. For each atom that appears in the file, the new
-coordinates are assigned to that atom in the final replica. Each
-intermediate replica also assigns a new position to that atom in an
-interpolated manner. This is done by using the current position of
-the atom as the starting point and the read-in position as the final
-point. The distance between them is calculated, and the new position
-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
-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
-the line. Note that this procedure to produce consistent coordinates
-across all the replicas, the current coordinates need to be the same
-in all replicas. LAMMPS does not check for this, but invalid initial
-configurations will likely result if it is not the case.
-
-.. note::
-
- The "distance" between the starting and final point is
- calculated in a minimum-image sense for a periodic simulation box.
- This means that if the two positions are on opposite sides of a box
- (periodic in that dimension), the distance between them will be small,
- because the periodic image of one of the atoms is close to the other.
- Similarly, even if the assigned position resulting from the
- interpolation is outside the periodic box, the atom will be wrapped
- back into the box when the NEB calculation begins.
-
-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
-using a variable in the filename, e.g.
-
-.. parsed-literal::
-
- variable i equal part
- neb 0.0 0.001 1000 500 50 each coords.initial.$i
-
-which in this case will substitute the partition ID (0 to N-1) for the
-variable I, which is also effectively the replica ID. See the
-:doc:`variable <variable>` command for other options, such as using
-world-, universe-, or uloop-style variables.
-
-Each replica (except the first replica) will read its file, formatted
-as described below, and for any atom that appears in the file, assign
-the specified coordinates to its atom. The various files do not need
-to contain the same set of atoms.
-
-For a *file-style* setting of *none*\ , no filename is specified. Each
-replica is assumed to already be in its initial configuration at the
-time the neb command is issued. This allows each replica to define
-its own configuration by reading a replica-specific data or restart or
-dump file, via the :doc:`read_data <read_data>`,
-:doc:`read_restart <read_restart>`, or :doc:`read_dump <read_dump>`
-commands. The replica-specific names of these files can be specified
-as in the discussion above for the *each* file-style. Also see the
-section below for how a NEB calculation can produce restart files, so
-that a long calculation can be restarted if needed.
-
-.. note::
-
- None of the *file-style* settings change the initial
- configuration of any atom in the first replica. The first replica
- must thus be in the correct initial configuration at the time the neb
- command is issued.
-
-
-----------
-
-
-A NEB calculation proceeds in two stages, each of which is a
-minimization procedure, performed via damped dynamics. To enable
-this, you must first define a damped dynamics
-:doc:`min_style <min_style>`, such as *quickmin* or *fire*\ . The *cg*\ ,
-*sd*\ , and *hftn* styles cannot be used, since they perform iterative
-line searches in their inner loop, which cannot be easily synchronized
-across multiple replicas.
-
-The minimizer tolerances for energy and force are set by *etol* and
-*ftol*\ , the same as for the :doc:`minimize <minimize>` command.
-
-A non-zero *etol* means that the NEB calculation will terminate if the
-energy criterion is met by every replica. The energies being compared
-to *etol* do not include any contribution from the inter-replica
-forces, since these are non-conservative. A non-zero *ftol* means
-that the NEB calculation will terminate if the force criterion is met
-by every replica. The forces being compared to *ftol* include the
-inter-replica forces between an atom and its images in adjacent
-replicas.
-
-The maximum number of iterations in each stage is set by *N1* and
-*N2*\ . These are effectively timestep counts since each iteration of
-damped dynamics is like a single timestep in a dynamics
-:doc:`run <run>`. During both stages, the potential energy of each
-replica and its normalized distance along the reaction path (reaction
-coordinate RD) will be printed to the screen and log file every
-*Nevery* timesteps. The RD is 0 and 1 for the first and last replica.
-For intermediate replicas, it is the cumulative distance (normalized
-by the total cumulative distance) between adjacent replicas, where
-"distance" is defined as the length of the 3N-vector of differences in
-atomic coordinates, where N is the number of NEB atoms involved in the
-transition. These outputs allow you to monitor NEB's progress in
-finding a good energy barrier. *N1* and *N2* must both be multiples
-of *Nevery*\ .
-
-In the first stage of NEB, the set of replicas should converge toward
-the minimum energy path (MEP) of conformational states that transition
-over the barrier. The MEP for a barrier is defined as a sequence of
-3N-dimensional states that cross the barrier at its saddle point, each
-of which has a potential energy gradient parallel to the MEP itself.
-The replica states will also be roughly equally spaced along the MEP
-due to the inter-replica spring force added by the :doc:`fix neb <fix_neb>` command.
-
-In the second stage of NEB, the replica with the highest energy
-is selected and the inter-replica forces on it are converted to a
-force that drives its atom coordinates to the top or saddle point of
-the barrier, via the barrier-climbing calculation described in
-:ref:`(Henkelman2) <Henkelman2>`. As before, the other replicas rearrange
-themselves along the MEP so as to be roughly equally spaced.
-
-When both stages are complete, if the NEB calculation was successful,
-one of the replicas should be an atomic configuration at the top or
-saddle point of the barrier, the potential energies for the set of
-replicas should represent the energy profile of the barrier along the
-MEP, and the configurations of the replicas should be a sequence of
-configurations along the MEP.
-
-
-----------
-
-
-A few other settings in your input script are required or advised to
-perform a NEB calculation. See the NOTE about the choice of timestep
-at the beginning of this doc page.
-
-An atom map must be defined which it is not by default for :doc:`atom_style atomic <atom_style>` problems. The :doc:`atom_modify map <atom_modify>` command can be used to do this.
-
-The "atom_modify sort 0 0.0" command should be used to turn off atom
-sorting.
-
-.. note::
-
- This sorting restriction will be removed in a future version of
- NEB in LAMMPS.
-
-The minimizers in LAMMPS operate on all atoms in your system, even
-non-NEB atoms, as defined above. To prevent non-NEB atoms from moving
-during the minimization, you should use the :doc:`fix setforce <fix_setforce>` command to set the force on each of those
-atoms to 0.0. This is not required, and may not even be desired in
-some cases, but if those atoms move too far (e.g. because the initial
-state of your system was not well-minimized), it can cause problems
-for the NEB procedure.
-
-The damped dynamics :doc:`minimizers <min_style>`, such as *quickmin*
-and *fire*\ ), adjust the position and velocity of the atoms via an
-Euler integration step. Thus you must define an appropriate
-:doc:`timestep <timestep>` to use with NEB. As mentioned above, NEB
-will often converge more quickly if you use a timestep about 10x
-larger than you would normally use for dynamics simulations.
-
-
-----------
-
-
-Each file read by the neb command containing atomic coordinates used
-to initialize one or more replicas must be formatted as follows.
-
-The file can be ASCII text or a gzipped text file (detected by a .gz
-suffix). The file can contain initial blank lines or comment lines
-starting with "#" which are ignored. The first non-blank, non-comment
-line should list N = the number of lines to follow. The N successive
-lines contain the following information:
-
-.. parsed-literal::
-
- ID1 x1 y1 z1
- ID2 x2 y2 z2
- ...
- IDN xN yN zN
-
-The fields are the the atom ID, followed by the x,y,z coordinates.
-The lines can be listed in any order. Additional trailing information
-on the line is OK, such as a comment.
-
-Note that for a typical NEB calculation you do not need to specify
-initial coordinates for very many atoms to produce differing starting
-and final replicas whose intermediate replicas will converge to the
-energy barrier. Typically only new coordinates for atoms
-geometrically near the barrier need be specified.
-
-Also note there is no requirement that the atoms in the file
-correspond to the NEB atoms in the group defined by the :doc:`fix neb <fix_neb>` command. Not every NEB atom need be in the file,
-and non-NEB atoms can be listed in the file.
-
-
-----------
-
-
-Four kinds of output can be generated during a NEB calculation: energy
-barrier statistics, thermodynamic output by each replica, dump files,
-and restart files.
-
-When running with multiple partitions (each of which is a replica in
-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 the timestep, the maximum force per replica, the maximum
-force per atom (in any replica), potential gradients in the initial,
- final, and climbing replicas,
-the forward and backward energy barriers,
-the total reaction coordinate (RDT), and
-the normalized reaction coordinate and potential energy of each replica.
-
-The "maximum force per replica" is
-the two-norm of the 3N-length force vector for the atoms in each
-replica, maximized across replicas, which is what the *ftol* setting
-is checking against. In this case, N is all the atoms in each
-replica. The "maximum force per atom" is the maximum force component
-of any atom in any replica. The potential gradients are the two-norm
-of the 3N-length force vector solely due to the interaction potential i.e.
-without adding in inter-replica forces. Note that inter-replica 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
-replica is the two-norm of the 3N-length vector of distances between
-its atoms and the preceding replica's atoms, added to the RD of the
-preceding replica. The RD of the first replica RD1 = 0.0;
-the RD of the final replica RDN = RDT, the total reaction coordinate.
-The normalized RDs are divided by RDT,
-so that they form a monotonically increasing sequence
-from zero to one. When computing RD, N only includes the atoms
-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.
-
-When running on multiple partitions, LAMMPS produces additional log
-files for each partition, e.g. log.lammps.0, log.lammps.1, etc. For a
-NEB calculation, these contain the thermodynamic output for each
-replica.
-
-If :doc:`dump <dump>` commands in the input script define a filename
-that includes a *universe* or *uloop* style :doc:`variable <variable>`,
-then one dump file (per dump command) will be created for each
-replica. At the end of the NEB calculation, the final snapshot in
-each file will contain the sequence of snapshots that transition the
-system over the energy barrier. Earlier snapshots will show the
-convergence of the replicas to the MEP.
-
-Likewise, :doc:`restart <restart>` filenames can be specified with a
-*universe* or *uloop* style :doc:`variable <variable>`, to generate
-restart files for each replica. These may be useful if the NEB
-calculation fails to converge properly to the MEP, and you wish to
-restart the calculation from an intermediate point with altered
-parameters.
-
-There are 2 Python scripts provided in the tools/python directory,
-neb_combine.py and neb_final.py, which are useful in analyzing output
-from a NEB calculation. Assume a NEB simulation with M replicas, and
-the NEB atoms labelled with a specific atom type.
-
-The neb_combine.py script extracts atom coords for the NEB atoms from
-all M dump files and creates a single dump file where each snapshot
-contains the NEB atoms from all the replicas and one copy of non-NEB
-atoms from the first replica (presumed to be identical in other
-replicas). This can be visualized/animated to see how the NEB atoms
-relax as the NEB calculation proceeds.
-
-The neb_final.py script extracts the final snapshot from each of the M
-dump files to create a single dump file with M snapshots. This can be
-visualized to watch the system make its transition over the energy
-barrier.
-
-To illustrate, here are images from the final snapshot produced by the
-neb_combine.py script run on the dump files produced by the two
-example input scripts in examples/neb. Click on them to see a larger
-image.
-
-.. thumbnail:: JPG/hop1.jpg
-
-.. thumbnail:: JPG/hop2.jpg
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command can only be used if LAMMPS was built with the REPLICA
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`prd <prd>`, :doc:`temper <temper>`, :doc:`fix langevin <fix_langevin>`, :doc:`fix viscous <fix_viscous>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Henkelman1:
-
-
-
-**(Henkelman1)** Henkelman and Jonsson, J Chem Phys, 113, 9978-9985 (2000).
-
-.. _Henkelman2:
-
-
-
-**(Henkelman2)** Henkelman, Uberuaga, Jonsson, J Chem Phys, 113,
-9901-9904 (2000).
-
-.. _Nakano:
-
-
-
-**(Nakano)** Nakano, Comp Phys Comm, 178, 280-289 (2008).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/neigh_modify.txt b/doc/html/_sources/neigh_modify.txt
deleted file mode 100644
index 380c6c6f3..000000000
--- a/doc/html/_sources/neigh_modify.txt
+++ /dev/null
@@ -1,224 +0,0 @@
-.. index:: neigh_modify
-
-neigh_modify command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- neigh_modify keyword values ...
-
-* one or more keyword/value pairs may be listed
-.. parsed-literal::
-
- keyword = *delay* or *every* or *check* or *once* or *cluster* or *include* or *exclude* or *page* or *one* or *binsize*
- *delay* value = N
- N = delay building until this many steps since last build
- *every* value = M
- M = build neighbor list every this many steps
- *check* value = *yes* or *no*
- *yes* = only build if some atom has moved half the skin distance or more
- *no* = always build on 1st step that *every* and *delay* are satisfied
- *once*
- *yes* = only build neighbor list once at start of run and never rebuild
- *no* = rebuild neighbor list according to other settings
- *cluster*
- *yes* = check bond,angle,etc neighbor list for nearby clusters
- *no* = do not check bond,angle,etc neighbor list for nearby clusters
- *include* value = group-ID
- group-ID = only build pair neighbor lists for atoms in this group
- *exclude* values:
- type M N
- M,N = exclude if one atom in pair is type M, other is type N
- group group1-ID group2-ID
- group1-ID,group2-ID = exclude if one atom is in 1st group, other in 2nd
- molecule group-ID
- groupname = exclude if both atoms are in the same molecule and in the same group
- none
- delete all exclude settings
- *page* value = N
- N = number of pairs stored in a single neighbor page
- *one* value = N
- N = max number of neighbors of one atom
- *binsize* value = size
- size = bin size for neighbor list construction (distance units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- neigh_modify every 2 delay 10 check yes page 100000
- neigh_modify exclude type 2 3
- neigh_modify exclude group frozen frozen check no
- neigh_modify exclude group residue1 chain3
- neigh_modify exclude molecule rigid
-
-Description
-"""""""""""
-
-This command sets parameters that affect the building and use of
-pairwise neighbor lists. Depending on what pair interactions and
-other commands are defined, a simulation may require one or more
-neighbor lists.
-
-The *every*\ , *delay*\ , *check*\ , and *once* options affect how often
-lists are built as a simulation runs. The *delay* setting means never
-build new lists until at least N steps after the previous build. The
-*every* setting means build lists every M steps (after the delay has
-passed). If the *check* setting is *no*\ , the lists are built on the
-first step that satisfies the *delay* and *every* settings. If the
-*check* setting is *yes*\ , then the *every* and *delay* settings
-determine when a build may possibly be performed, but an actual build
-only occurs if some atom has moved more than half the skin distance
-(specified in the :doc:`neighbor <neighbor>` command) since the last
-build.
-
-If the *once* setting is yes, then the neighbor list is only built
-once at the beginning of each run, and never rebuilt, except on steps
-when a restart file is written, or steps when a fix forces a rebuild
-to occur (e.g. fixes that create or delete atoms, such as :doc:`fix deposit <fix_deposit>` or :doc:`fix evaporate <fix_evaporate>`).
-This setting should only be made if you are certain atoms will not
-move far enough that the neighbor list should be rebuilt, e.g. running
-a simulation of a cold crystal. Note that it is not that expensive to
-check if neighbor lists should be rebuilt.
-
-When the rRESPA integrator is used (see the :doc:`run_style <run_style>`
-command), the *every* and *delay* parameters refer to the longest
-(outermost) timestep.
-
-The *cluster* option does a sanity test every time neighbor lists are
-built for bond, angle, dihedral, and improper interactions, to check
-that each set of 2, 3, or 4 atoms is a cluster of nearby atoms. It
-does this by computing the distance between pairs of atoms in the
-interaction and insuring they are not further apart than half the
-periodic box length. If they are, an error is generated, since the
-interaction would be computed between far-away atoms instead of their
-nearby periodic images. The only way this should happen is if the
-pairwise cutoff is so short that atoms that are part of the same
-interaction are not communicated as ghost atoms. This is an unusual
-model (e.g. no pair interactions at all) and the problem can be fixed
-by use of the :doc:`comm_modify cutoff <comm_modify>` command. Note
-that to save time, the default *cluster* setting is *no*\ , so that this
-check is not performed.
-
-The *include* option limits the building of pairwise neighbor lists to
-atoms in the specified group. This can be useful for models where a
-large portion of the simulation is particles that do not interact with
-other particles or with each other via pairwise interactions. The
-group specified with this option must also be specified via the
-:doc:`atom_modify first <atom_modify>` command.
-
-The *exclude* option turns off pairwise interactions between certain
-pairs of atoms, by not including them in the neighbor list. These are
-sample scenarios where this is useful:
-
-* In crack simulations, pairwise interactions can be shut off between 2
- slabs of atoms to effectively create a crack.
-* When a large collection of atoms is treated as frozen, interactions
- between those atoms can be turned off to save needless
- computation. E.g. Using the :doc:`fix setforce <fix_setforce>` command
- to freeze a wall or portion of a bio-molecule.
-* When one or more rigid bodies are specified, interactions within each
- body can be turned off to save needless computation. See the :doc:`fix rigid <fix_rigid>` command for more details.
-The *exclude type* option turns off the pairwise interaction if one
-atom is of type M and the other of type N. M can equal N. The
-*exclude group* option turns off the interaction if one atom is in the
-first group and the other is the second. Group1-ID can equal
-group2-ID. The *exclude molecule* option turns off the interaction if
-both atoms are in the specified group and in the same molecule, as
-determined by their molecule ID.
-
-Each of the exclude options can be specified multiple times. The
-*exclude type* option is the most efficient option to use; it requires
-only a single check, no matter how many times it has been specified.
-The other exclude options are more expensive if specified multiple
-times; they require one check for each time they have been specified.
-
-Note that the exclude options only affect pairwise interactions; see
-the :doc:`delete_bonds <delete_bonds>` command for information on
-turning off bond interactions.
-
-.. note::
-
- Excluding pairwise interactions will not work correctly when
- also using a long-range solver via the
- :doc:`kspace_style <kspace_style>` command. LAMMPS will give a warning
- to this effect. This is because the short-range pairwise interaction
- needs to subtract off a term from the total energy for pairs whose
- short-range interaction is excluded, to compensate for how the
- long-range solver treats the interaction. This is done correctly for
- pairwise interactions that are excluded (or weighted) via the
- :doc:`special_bonds <special_bonds>` command. But it is not done for
- interactions that are excluded via these neigh_modify exclude options.
-
-The *page* and *one* options affect how memory is allocated for the
-neighbor lists. For most simulations the default settings for these
-options are fine, but if a very large problem is being run or a very
-long cutoff is being used, these parameters can be tuned. The indices
-of neighboring atoms are stored in "pages", which are allocated one
-after another as they fill up. The size of each page is set by the
-*page* value. A new page is allocated when the next atom's neighbors
-could potentially overflow the list. This threshold is set by the
-*one* value which tells LAMMPS the maximum number of neighbor's one
-atom can have.
-
-.. note::
-
- LAMMPS can crash without an error message if the number of
- neighbors for a single particle is larger than the *page* setting,
- which means it is much, much larger than the *one* setting. This is
- because LAMMPS doesn't error check these limits for every pairwise
- interaction (too costly), but only after all the particle's neighbors
- have been found. This problem usually means something is very wrong
- with the way you've setup your problem (particle spacing, cutoff
- length, neighbor skin distance, etc). If you really expect that many
- neighbors per particle, then boost the *one* and *page* settings
- accordingly.
-
-The *binsize* option allows you to specify what size of bins will be
-used in neighbor list construction to sort and find neighboring atoms.
-By default, for :doc:`neighbor style bin <neighbor>`, LAMMPS uses bins
-that are 1/2 the size of the maximum pair cutoff. For :doc:`neighbor style multi <neighbor>`, the bins are 1/2 the size of the minimum pair
-cutoff. Typically these are good values values for minimizing the
-time for neighbor list construction. This setting overrides the
-default. If you make it too big, there is little overhead due to
-looping over bins, but more atoms are checked. If you make it too
-small, the optimal number of atoms is checked, but bin overhead goes
-up. If you set the binsize to 0.0, LAMMPS will use the default
-binsize of 1/2 the cutoff.
-
-Restrictions
-""""""""""""
-
-
-If the "delay" setting is non-zero, then it must be a multiple of the
-"every" setting.
-
-The exclude molecule option can only be used with atom styles that
-define molecule IDs.
-
-The value of the *page* setting must be at least 10x larger than the
-*one* setting. This insures neighbor pages are not mostly empty
-space.
-
-Related commands
-""""""""""""""""
-
-:doc:`neighbor <neighbor>`, :doc:`delete_bonds <delete_bonds>`
-
-Default
-"""""""
-
-The option defaults are delay = 10, every = 1, check = yes, once = no,
-cluster = no, include = all, exclude = none, page = 100000, one =
-2000, and binsize = 0.0.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/neighbor.txt b/doc/html/_sources/neighbor.txt
deleted file mode 100644
index 13fc35644..000000000
--- a/doc/html/_sources/neighbor.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-.. index:: neighbor
-
-neighbor command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- neighbor skin style
-
-* skin = extra distance beyond force cutoff (distance units)
-* style = *bin* or *nsq* or *multi*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- neighbor 0.3 bin
- neighbor 2.0 nsq
-
-Description
-"""""""""""
-
-This command sets parameters that affect the building of pairwise
-neighbor lists. All atom pairs within a neighbor cutoff distance
-equal to the their force cutoff plus the *skin* distance are stored in
-the list. Typically, the larger the skin distance, the less often
-neighbor lists need to be built, but more pairs must be checked for
-possible force interactions every timestep. The default value for
-*skin* depends on the choice of units for the simulation; see the
-default values below.
-
-The *skin* distance is also used to determine how often atoms migrate
-to new processors if the *check* option of the
-:doc:`neigh_modify <neigh_modify>` command is set to *yes*\ . Atoms are
-migrated (communicated) to new processors on the same timestep that
-neighbor lists are re-built.
-
-The *style* value selects what algorithm is used to build the list.
-The *bin* style creates the list by binning which is an operation that
-scales linearly with N/P, the number of atoms per processor where N =
-total number of atoms and P = number of processors. It is almost
-always faster than the *nsq* style which scales as (N/P)^2. For
-unsolvated small molecules in a non-periodic box, the *nsq* choice can
-sometimes be faster. Either style should give the same answers.
-
-The *multi* style is a modified binning algorithm that is useful for
-systems with a wide range of cutoff distances, e.g. due to different
-size particles. For the *bin* style, the bin size is set to 1/2 of
-the largest cutoff distance between any pair of atom types and a
-single set of bins is defined to search over for all atom types. This
-can be inefficient if one pair of types has a very long cutoff, but
-other type pairs have a much shorter cutoff. For style *multi* the
-bin size is set to 1/2 of the shortest cutoff distance and multiple
-sets of bins are defined to search over for different atom types.
-This imposes some extra setup overhead, but the searches themselves
-may be much faster for the short-cutoff cases. See the :doc:`comm_modify mode multi <comm_modify>` command for a communication option option
-that may also be beneficial for simulations of this kind.
-
-The :doc:`neigh_modify <neigh_modify>` command has additional options
-that control how often neighbor lists are built and which pairs are
-stored in the list.
-
-When a run is finished, counts of the number of neighbors stored in
-the pairwise list and the number of times neighbor lists were built
-are printed to the screen and log file. See :ref:`this section <start_8>` for details.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`neigh_modify <neigh_modify>`, :doc:`units <units>`,
-:doc:`comm_modify <cmom_modify>`
-
-Default
-"""""""
-
-| 0.3 bin for units = lj, skin = 0.3 sigma
-| 2.0 bin for units = real or metal, skin = 2.0 Angstroms
-| 0.001 bin for units = si, skin = 0.001 meters = 1.0 mm
-| 0.1 bin for units = cgs, skin = 0.1 cm = 1.0 mm
-|
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/newton.txt b/doc/html/_sources/newton.txt
deleted file mode 100644
index 4f0f10c54..000000000
--- a/doc/html/_sources/newton.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-.. index:: newton
-
-newton command
-==============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- newton flag
- newton flag1 flag2
-
-* flag = *on* or *off* for both pairwise and bonded interactions
-* flag1 = *on* or *off* for pairwise interactions
-* flag2 = *on* or *off* for bonded interactions
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- newton off
- newton on off
-
-Description
-"""""""""""
-
-This command turns Newton's 3rd law *on* or *off* for pairwise and
-bonded interactions. For most problems, setting Newton's 3rd law to
-*on* means a modest savings in computation at the cost of two times
-more communication. Whether this is faster depends on problem size,
-force cutoff lengths, a machine's compute/communication ratio, and how
-many processors are being used.
-
-Setting the pairwise newton flag to *off* means that if two
-interacting atoms are on different processors, both processors compute
-their interaction and the resulting force information is not
-communicated. Similarly, for bonded interactions, newton *off* means
-that if a bond, angle, dihedral, or improper interaction contains
-atoms on 2 or more processors, the interaction is computed by each
-processor.
-
-LAMMPS should produce the same answers for any newton flag settings,
-except for round-off issues.
-
-With :doc:`run_style <run_style>` *respa* and only bonded interactions
-(bond, angle, etc) computed in the innermost timestep, it may be
-faster to turn newton *off* for bonded interactions, to avoid extra
-communication in the innermost loop.
-
-Restrictions
-""""""""""""
-
-
-The newton bond setting cannot be changed after the simulation box is
-defined by a :doc:`read_data <read_data>` or
-:doc:`create_box <create_box>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`run_style <run_style>` respa
-
-Default
-"""""""
-
-.. parsed-literal::
-
- newton on
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/next.txt b/doc/html/_sources/next.txt
deleted file mode 100644
index b58887e08..000000000
--- a/doc/html/_sources/next.txt
+++ /dev/null
@@ -1,161 +0,0 @@
-.. index:: next
-
-next command
-============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- next variables
-
-* variables = one or more variable names
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- next x
- next a t x myTemp
-
-Description
-"""""""""""
-
-This command is used with variables defined by the
-:doc:`variable <variable>` command. It assigns the next value to the
-variable from the list of values defined for that variable by the
-:doc:`variable <variable>` command. Thus when that variable is
-subsequently substituted for in an input script command, the new value
-is used.
-
-See the :doc:`variable <variable>` command for info on how to define and
-use different kinds of variables in LAMMPS input scripts. If a
-variable name is a single lower-case character from "a" to "z", it can
-be used in an input script command as $a or $z. If it is multiple
-letters, it can be used as ${myTemp}.
-
-If multiple variables are used as arguments to the *next* command,
-then all must be of the same variable style: *index*\ , *loop*\ , *file*\ ,
-*universe*\ , or *uloop*\ . An exception is that *universe*\ - and
-*uloop*\ -style variables can be mixed in the same *next* command.
-
-All the variables specified with the next command are incremented by
-one value from their respective list of values. A *file*\ -style
-variable reads the next line from its associated file. An
-*atomfile*\ -style variable reads the next set of lines (one per atom)
-from its associated file. *String-* or *atom*\ - or *equal*\ - or
-*world*\ -style variables cannot be used with the the next command,
-since they only store a single value.
-
-When any of the variables in the next command has no more values, a
-flag is set that causes the input script to skip the next
-:doc:`jump <jump>` command encountered. This enables a loop containing
-a next command to exit. As explained in the :doc:`variable <variable>`
-command, the variable that has exhausted its values is also deleted.
-This allows it to be used and re-defined later in the input script.
-*File*\ -style and *atomfile*\ -style variables are exhausted when the
-end-of-file is reached.
-
-When the next command is used with *index*\ - or *loop*\ -style variables,
-the next value is assigned to the variable for all processors. When
-the next command is used with *file*\ -style variables, the next line is
-read from its file and the string assigned to the variable. When the
-next command is used with *atomfile*\ -style variables, the next set of
-per-atom values is read from its file and assigned to the variable.
-
-When the next command is used with *universe*\ - or *uloop*\ -style
-variables, all *universe*\ - or *uloop*\ -style variables must be listed
-in the next command. This is because of the manner in which the
-incrementing is done, using a single lock file for all variables. The
-next value (for each variable) is assigned to whichever processor
-partition executes the command first. All processors in the partition
-are assigned the same value(s). Running LAMMPS on multiple partitions
-of processors via the "-partition" command-line switch is described in
-:ref:`this section <start_7>` of the manual. *Universe*\ -
-and *uloop*\ -style variables are incremented using the files
-"tmp.lammps.variable" and "tmp.lammps.variable.lock" which you will
-see in your directory during and after such a LAMMPS run.
-
-Here is an example of running a series of simulations using the next
-command with an *index*\ -style variable. If this input script is named
-in.polymer, 8 simulations would be run using data files from
-directories run1 thru run8.
-
-.. parsed-literal::
-
- variable d index run1 run2 run3 run4 run5 run6 run7 run8
- shell cd $d
- read_data data.polymer
- run 10000
- shell cd ..
- clear
- next d
- jump in.polymer
-
-If the variable "d" were of style *universe*\ , and the same in.polymer
-input script were run on 3 partitions of processors, then the first 3
-simulations would begin, one on each set of processors. Whichever
-partition finished first, it would assign variable "d" the 4th value
-and run another simulation, and so forth until all 8 simulations were
-finished.
-
-Jump and next commands can also be nested to enable multi-level loops.
-For example, this script will run 15 simulations in a double loop.
-
-.. parsed-literal::
-
- variable i loop 3
- variable j loop 5
- clear
- ...
- read_data data.polymer.$i$j
- print Running simulation $i.$j
- run 10000
- next j
- jump in.script
- next i
- jump in.script
-
-Here is an example of a double loop which uses the :doc:`if <if>` and
-:doc:`jump <jump>` commands to break out of the inner loop when a
-condition is met, then continues iterating thru the outer loop.
-
-.. parsed-literal::
-
- label loopa
- variable a loop 5
- label loopb
- variable b loop 5
- print "A,B = $a,$b"
- run 10000
- if $b > 2 then "jump in.script break"
- next b
- jump in.script loopb
- label break
- variable b delete
-
-.. parsed-literal::
-
- next a
- jump in.script loopa
-
-Restrictions
-""""""""""""
-
-
-As described above.
-
-Related commands
-""""""""""""""""
-
-:doc:`jump <jump>`, :doc:`include <include>`, :doc:`shell <shell>`,
-:doc:`variable <variable>`,
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/old/tmp_server/doc/fix_smd.txt b/doc/html/_sources/old/tmp_server/doc/fix_smd.txt
deleted file mode 100644
index 62d215a64..000000000
--- a/doc/html/_sources/old/tmp_server/doc/fix_smd.txt
+++ /dev/null
@@ -1,168 +0,0 @@
-.. index:: fix smd
-
-fix smd command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- fix ID group-ID smd type values keyword values
-
-* ID, group-ID are documented in :doc:`fix <fix>` command
-* smd = style name of this fix command
-* mode = *cvel* or *cfor* to select constant velocity or constant force SMD
-.. parsed-literal::
-
- *cvel* values = K vel
- K = spring constant (force/distance units)
- vel = velocity of pulling (distance/time units)
- *cfor* values = force
- force = pulling force (force units)
-
-* keyword = *tether* or *couple*
-.. parsed-literal::
-
- *tether* values = x y z R0
- x,y,z = point to which spring is tethered
- R0 = distance of end of spring from tether point (distance units)
- *couple* values = group-ID2 x y z R0
- group-ID2 = 2nd group to couple to fix group with a spring
- x,y,z = direction of spring, automatically computed with 'auto'
- R0 = distance of end of spring (distance units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- fix pull cterm smd cvel 20.0 -0.00005 tether NULL NULL 100.0 0.0
- fix pull cterm smd cvel 20.0 -0.0001 tether 25.0 25 25.0 0.0
- fix stretch cterm smd cvel 20.0 0.0001 couple nterm auto auto auto 0.0
- fix pull cterm smd cfor 5.0 tether 25.0 25.0 25.0 0.0
-
-Description
-"""""""""""
-
-This fix implements several options of steered MD (SMD) as reviewed in
-:ref:`(Izrailev) <Izrailev>`, which allows to induce conformational changes
-in systems and to compute the potential of mean force (PMF) along the
-assumed reaction coordinate :ref:`(Park) <Park>` based on Jarzynski's
-equality :ref:`(Jarzynski) <Jarzynski>`. This fix borrows a lot from :doc:`fix spring <fix_spring>` and :doc:`fix setforce <fix_setforce>`.
-
-You can apply a moving spring force to a group of atoms (*tether*
-style) or between two groups of atoms (*couple* style). The spring
-can then be used in either constant velocity (*cvel*) mode or in
-constant force (*cfor*) mode to induce transitions in your systems.
-When running in *tether* style, you may need some way to fix some
-other part of the system (e.g. via :doc:`fix spring/self <fix_spring_self>`)
-
-The *tether* style attaches a spring between a point at a distance of
-R0 away from a fixed point *x,y,z* and the center of mass of the fix
-group of atoms. A restoring force of magnitude K (R - R0) Mi / M is
-applied to each atom in the group where *K* is the spring constant, Mi
-is the mass of the atom, and M is the total mass of all atoms in the
-group. Note that *K* thus represents the total force on the group of
-atoms, not a per-atom force.
-
-In *cvel* mode the distance R is incremented or decremented
-monotonously according to the pulling (or pushing) velocity.
-In *cfor* mode a constant force is added and the actual distance
-in direction of the spring is recorded.
-
-The *couple* style links two groups of atoms together. The first
-group is the fix group; the second is specified by group-ID2. The
-groups are coupled together by a spring that is at equilibrium when
-the two groups are displaced by a vector in direction *x,y,z* with
-respect to each other and at a distance R0 from that displacement.
-Note that *x,y,z* only provides a direction and will be internally
-normalized. But since it represents the *absolute* displacement of
-group-ID2 relative to the fix group, (1,1,0) is a different spring
-than (-1,-1,0). For each vector component, the displacement can be
-described with the *auto* parameter. In this case the direction is
-recomputed in every step, which can be useful for steering a local
-process where the whole object undergoes some other change. When the
-relative positions and distance between the two groups are not in
-equilibrium, the same spring force described above is applied to atoms
-in each of the two groups.
-
-For both the *tether* and *couple* styles, any of the x,y,z values can
-be specified as NULL which means do not include that dimension in the
-distance calculation or force application.
-
-For constant velocity pulling (*cvel* mode), the running integral
-over the pulling force in direction of the spring is recorded and
-can then later be used to compute the potential of mean force (PMF)
-by averaging over multiple independent trajectories along the same
-pulling path.
-
-Restart, fix_modify, output, run start/stop, minimize info
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-The fix stores the direction of the spring, current pulling target
-distance and the running PMF to :doc:`binary restart files <restart>`.
-See the :doc:`read_restart <read_restart>` command for info on how to
-re-specify a fix in an input script that reads a restart file, so that
-the operation of the fix continues in an uninterrupted fashion.
-
-None of the :doc:`fix_modify <fix_modify>` options are relevant to this
-fix.
-
-This fix computes a vector list of 7 quantities, which can be accessed
-by various :ref:`output commands <howto_15>`. The
-quantities in the vector are in this order: the x-, y-, and
-z-component of the pulling force, the total force in direction of the
-pull, the equilibrium distance of the spring, the distance between the
-two reference points, and finally the accumulated PMF (the sum of
-pulling forces times displacement).
-
-The force is the total force on the group of atoms by the spring. In
-the case of the *couple* style, it is the force on the fix group
-(group-ID) or the negative of the force on the 2nd group (group-ID2).
-The vector values calculated by this fix are "extensive".
-
-No parameter of this fix can be used with the *start/stop* keywords of
-the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix drag <fix_drag>`, :doc:`fix spring <fix_spring>`,
-:doc:`fix spring/self <fix_spring_self>`,
-:doc:`fix spring/rg <fix_spring_rg>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Israilev:
-
-
-
-**(Izrailev)** Izrailev, Stepaniants, Isralewitz, Kosztin, Lu, Molnar,
-Wriggers, Schulten. Computational Molecular Dynamics: Challenges,
-Methods, Ideas, volume 4 of Lecture Notes in Computational Science and
-Engineering, pp. 39-65. Springer-Verlag, Berlin, 1998.
-
-**(Park)**
-Park, Schulten, J. Chem. Phys. 120 (13), 5946 (2004)
-
-**(Jarzynski)**
-Jarzynski, Phys. Rev. Lett. 78, 2690 (1997)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/package.txt b/doc/html/_sources/package.txt
deleted file mode 100644
index 04ead4baf..000000000
--- a/doc/html/_sources/package.txt
+++ /dev/null
@@ -1,616 +0,0 @@
-.. index:: package
-
-package command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- package style args
-
-* style = *gpu* or *intel* or *kokkos* or *omp*
-* args = arguments specific to the style
-.. parsed-literal::
-
- *gpu* args = Ngpu keyword value ...
- Ngpu = # of GPUs per node
- zero or more keyword/value pairs may be appended
- keywords = *neigh* or *newton* or *binsize* or *split* or *gpuID* or *tpa* or *device* or *blocksize*
- *neigh* value = *yes* or *no*
- yes = neighbor list build on GPU (default)
- no = neighbor list build on CPU
- *newton* = *off* or *on*
- off = set Newton pairwise flag off (default and required)
- on = set Newton pairwise flag on (currently not allowed)
- *binsize* value = size
- size = bin size for neighbor list construction (distance units)
- *split* = fraction
- fraction = fraction of atoms assigned to GPU (default = 1.0)
- *gpuID* values = first last
- first = ID of first GPU to be used on each node
- last = ID of last GPU to be used on each node
- *tpa* value = Nthreads
- Nthreads = # of GPU threads used per atom
- *device* value = device_type
- device_type = *kepler* or *fermi* or *cypress* or *generic*
- *blocksize* value = size
- size = thread block size for pair force computation
- *intel* args = NPhi keyword value ...
- Nphi = # of coprocessors per node
- zero or more keyword/value pairs may be appended
- keywords = *mode* or *omp* or *lrt* or *balance* or *ghost* or *tpc* or *tptask* or *no_affinity*
- *mode* value = *single* or *mixed* or *double*
- single = perform force calculations in single precision
- mixed = perform force calculations in mixed precision
- double = perform force calculations in double precision
- *omp* value = Nthreads
- Nthreads = number of OpenMP threads to use on CPU (default = 0)
- *lrt* value = *yes* or *no*
- yes = use additional thread dedicated for some PPPM calculations
- no = do not dedicate an extra thread for some PPPM calculations
- *balance* value = split
- split = fraction of work to offload to coprocessor, -1 for dynamic
- *ghost* value = *yes* or *no*
- yes = include ghost atoms for offload
- no = do not include ghost atoms for offload
- *tpc* value = Ntpc
- Ntpc = max number of coprocessor threads per coprocessor core (default = 4)
- *tptask* value = Ntptask
- Ntptask = max number of coprocessor threads per MPI task (default = 240)
- *no_affinity* values = none
- *kokkos* args = keyword value ...
- zero or more keyword/value pairs may be appended
- keywords = *neigh* or *newton* or *binsize* or *comm* or *comm/exchange* or *comm/forward*
- *neigh* value = *full* or *half* or *n2* or *full/cluster*
- full = full neighbor list
- half = half neighbor list built in thread-safe manner
- n2 = non-binning neighbor list build, O(N^2) algorithm
- full/cluster = full neighbor list with clustered groups of atoms
- *newton* = *off* or *on*
- off = set Newton pairwise and bonded flags off (default)
- on = set Newton pairwise and bonded flags on
- *binsize* value = size
- size = bin size for neighbor list construction (distance units)
- *comm* value = *no* or *host* or *device*
- use value for both comm/exchange and comm/forward
- *comm/exchange* value = *no* or *host* or *device*
- *comm/forward* value = *no* or *host* or *device*
- no = perform communication pack/unpack in non-KOKKOS mode
- host = perform pack/unpack on host (e.g. with OpenMP threading)
- device = perform pack/unpack on device (e.g. on GPU)
- *omp* args = Nthreads keyword value ...
- Nthread = # of OpenMP threads to associate with each MPI process
- zero or more keyword/value pairs may be appended
- keywords = *neigh*
- *neigh* value = *yes* or *no*
- yes = threaded neighbor list build (default)
- no = non-threaded neighbor list build
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- package gpu 1
- package gpu 1 split 0.75
- package gpu 2 split -1.0
- package kokkos neigh half comm device
- package omp 0 neigh no
- package omp 4
- package intel 1
- package intel 2 omp 4 mode mixed balance 0.5
-
-Description
-"""""""""""
-
-This command invokes package-specific settings for the various
-accelerator packages available in LAMMPS. Currently the following
-packages use settings from this command: GPU, USER-INTEL, KOKKOS, and
-USER-OMP.
-
-If this command is specified in an input script, it must be near the
-top of the script, before the simulation box has been defined. This
-is because it specifies settings that the accelerator packages use in
-their intialization, before a simultion is defined.
-
-This command can also be specified from the command-line when
-launching LAMMPS, using the "-pk" :ref:`command-line switch <start_7>`. The syntax is exactly the same as
-when used in an input script.
-
-Note that all of the accelerator packages require the package command
-to be specified (except the OPT package), if the package is to be used
-in a simulation (LAMMPS can be built with an accelerator package
-without using it in a particular simulation). However, in all cases,
-a default version of the command is typically invoked by other
-accelerator settings.
-
-The KOKKOS package requires a "-k on" :ref:`command-line switch <start_7>` respectively, which invokes a
-"package kokkos" command with default settings.
-
-For the GPU, USER-INTEL, and USER-OMP packages, if a "-sf gpu" or "-sf
-intel" or "-sf omp" :ref:`command-line switch <start_7>`
-is used to auto-append accelerator suffixes to various styles in the
-input script, then those switches also invoke a "package gpu",
-"package intel", or "package omp" command with default settings.
-
-.. note::
-
- A package command for a particular style can be invoked multiple
- times when a simulation is setup, e.g. by the "-c on", "-k on", "-sf",
- and "-pk" :ref:`command-line switches <start_7>`, and by
- using this command in an input script. Each time it is used all of
- the style options are set, either to default values or to specified
- settings. I.e. settings from previous invocations do not persist
- across multiple invocations.
-
-See the :doc:`Section Accelerate <Section_accelerate>` section of the
-manual for more details about using the various accelerator packages
-for speeding up LAMMPS simulations.
-
-
-----------
-
-
-The *gpu* style invokes settings associated with the use of the GPU
-package.
-
-The *Ngpu* argument sets the number of GPUs per node. There must be
-at least as many MPI tasks per node as GPUs, as set by the mpirun or
-mpiexec command. If there are more MPI tasks (per node)
-than GPUs, multiple MPI tasks will share each GPU.
-
-Optional keyword/value pairs can also be specified. Each has a
-default value as listed below.
-
-The *neigh* keyword specifies where neighbor lists for pair style
-computation will be built. If *neigh* is *yes*\ , which is the default,
-neighbor list building is performed on the GPU. If *neigh* is *no*\ ,
-neighbor list building is performed on the CPU. GPU neighbor list
-building currently cannot be used with a triclinic box. GPU neighbor
-list calculation currently cannot be used with
-:doc:`hybrid <pair_hybrid>` pair styles. GPU neighbor lists are not
-compatible with comannds that are not GPU-enabled. When a non-GPU
-enabled command requires a neighbor list, it will also be built on the
-CPU. In these cases, it will typically be more efficient to only use
-CPU neighbor list builds.
-
-The *newton* keyword sets the Newton flags for pairwise (not bonded)
-interactions to *off* or *on*\ , the same as the :doc:`newton <newton>`
-command allows. Currently, only an *off* value is allowed, since all
-the GPU package pair styles require this setting. This means more
-computation is done, but less communication. In the future a value of
-*on* may be allowed, so the *newton* keyword is included as an option
-for compatibility with the package command for other accelerator
-styles. Note that the newton setting for bonded interactions is not
-affected by this keyword.
-
-The *binsize* keyword sets the size of bins used to bin atoms in
-neighbor list builds performed on the GPU, if *neigh* = *yes* is set.
-If *binsize* is set to 0.0 (the default), then bins = the size of the
-pairwise cutoff + neighbor skin distance. This is 2x larger than the
-LAMMPS default used for neighbor list building on the CPU. This will
-be close to optimal for the GPU, so you do not normally need to use
-this keyword. Note that if you use a longer-than-usual pairwise
-cutoff, e.g. to allow for a smaller fraction of KSpace work with a
-:doc:`long-range Coulombic solver <kspace_style>` because the GPU is
-faster at performing pairwise interactions, then it may be optimal to
-make the *binsize* smaller than the default. For example, with a
-cutoff of 20*sigma in LJ :doc:`units <units>` and a neighbor skin
-distance of sigma, a *binsize* = 5.25*sigma can be more efficient than
-the default.
-
-The *split* keyword can be used for load balancing force calculations
-between CPU and GPU cores in GPU-enabled pair styles. If 0 < *split* <
-1.0, a fixed fraction of particles is offloaded to the GPU while force
-calculation for the other particles occurs simulataneously on the CPU.
-If *split* < 0.0, the optimal fraction (based on CPU and GPU timings)
-is calculated every 25 timesteps, i.e. dynamic load-balancing across
-the CPU and GPU is performed. If *split* = 1.0, all force
-calculations for GPU accelerated pair styles are performed on the GPU.
-In this case, other :doc:`hybrid <pair_hybrid>` pair interactions,
-:doc:`bond <bond_style>`, :doc:`angle <angle_style>`,
-:doc:`dihedral <dihedral_style>`, :doc:`improper <improper_style>`, and
-:doc:`long-range <kspace_style>` calculations can be performed on the
-CPU while the GPU is performing force calculations for the GPU-enabled
-pair style. If all CPU force computations complete before the GPU
-completes, LAMMPS will block until the GPU has finished before
-continuing the timestep.
-
-As an example, if you have two GPUs per node and 8 CPU cores per node,
-and would like to run on 4 nodes (32 cores) with dynamic balancing of
-force calculation across CPU and GPU cores, you could specify
-
-.. parsed-literal::
-
- mpirun -np 32 -sf gpu -in in.script # launch command
- package gpu 2 split -1 # input script command
-
-In this case, all CPU cores and GPU devices on the nodes would be
-utilized. Each GPU device would be shared by 4 CPU cores. The CPU
-cores would perform force calculations for some fraction of the
-particles at the same time the GPUs performed force calculation for
-the other particles.
-
-The *gpuID* keyword allows selection of which GPUs on each node will
-be used for a simulation. The *first* and *last* values specify the
-GPU IDs to use (from 0 to Ngpu-1). By default, first = 0 and last =
-Ngpu-1, so that all GPUs are used, assuming Ngpu is set to the number
-of physical GPUs. If you only wish to use a subset, set Ngpu to a
-smaller number and first/last to a sub-range of the available GPUs.
-
-The *tpa* keyword sets the number of GPU thread per atom used to
-perform force calculations. With a default value of 1, the number of
-threads will be chosen based on the pair style, however, the value can
-be set explicitly with this keyword to fine-tune performance. For
-large cutoffs or with a small number of particles per GPU, increasing
-the value can improve performance. The number of threads per atom must
-be a power of 2 and currently cannot be greater than 32.
-
-The *device* keyword can be used to tune parameters optimized for a
-specific accelerator, when using OpenCL. For CUDA, the *device*
-keyword is ignored. Currently, the device type is limited to NVIDIA
-Kepler, NVIDIA Fermi, AMD Cypress, or a generic device. More devices
-may be added later. The default device type can be specified when
-building LAMMPS with the GPU library, via settings in the
-lib/gpu/Makefile that is used.
-
-The *blocksize* keyword allows you to tweak the number of threads used
-per thread block. This number should be a multiple of 32 (for GPUs)
-and its maximum depends on the specific GPU hardware. Typical choices
-are 64, 128, or 256. A larger blocksize increases occupancy of
-individual GPU cores, but reduces the total number of thread blocks,
-thus may lead to load imbalance.
-
-
-----------
-
-
-The *intel* style invokes settings associated with the use of the
-USER-INTEL package. All of its settings, except the *omp* and *mode*
-keywords, are ignored if LAMMPS was not built with Xeon Phi
-coprocessor support. All of its settings, including the *omp* and
-*mode* keyword are applicable if LAMMPS was built with coprocessor
-support.
-
-The *Nphi* argument sets the number of coprocessors per node.
-This can be set to any value, including 0, if LAMMPS was not
-built with coprocessor support.
-
-Optional keyword/value pairs can also be specified. Each has a
-default value as listed below.
-
-The *omp* keyword determines the number of OpenMP threads allocated
-for each MPI task when any portion of the interactions computed by a
-USER-INTEL pair style are run on the CPU. This can be the case even
-if LAMMPS was built with coprocessor support; see the *balance*
-keyword discussion below. If you are running with less MPI tasks/node
-than there are CPUs, it can be advantageous to use OpenMP threading on
-the CPUs.
-
-.. note::
-
- The *omp* keyword has nothing to do with coprocessor threads on
- the Xeon Phi; see the *tpc* and *tptask* keywords below for a
- discussion of coprocessor threads.
-
-The *Nthread* value for the *omp* keyword sets the number of OpenMP
-threads allocated for each MPI task. Setting *Nthread* = 0 (the
-default) instructs LAMMPS to use whatever value is the default for the
-given OpenMP environment. This is usually determined via the
-*OMP_NUM_THREADS* environment variable or the compiler runtime, which
-is usually a value of 1.
-
-For more details, including examples of how to set the OMP_NUM_THREADS
-environment variable, see the discussion of the *Nthreads* setting on
-this doc page for the "package omp" command. Nthreads is a required
-argument for the USER-OMP package. Its meaning is exactly the same
-for the USER-INTEL pacakge.
-
-.. note::
-
- If you build LAMMPS with both the USER-INTEL and USER-OMP
- packages, be aware that both packages allow setting of the *Nthreads*
- value via their package commands, but there is only a single global
- *Nthreads* value used by OpenMP. Thus if both package commands are
- invoked, you should insure the two values are consistent. If they are
- not, the last one invoked will take precedence, for both packages.
- Also note that if the "-sf hybrid intel omp" :ref:`command-line switch <start_7>` is used, it invokes a "package
- intel" command, followed by a "package omp" command, both with a
- setting of *Nthreads* = 0.
-
-The *mode* keyword determines the precision mode to use for
-computing pair style forces, either on the CPU or on the coprocessor,
-when using a USER-INTEL supported :doc:`pair style <pair_style>`. It
-can take a value of *single*\ , *mixed* which is the default, or
-*double*\ . *Single* means single precision is used for the entire
-force calculation. *Mixed* means forces between a pair of atoms are
-computed in single precision, but accumulated and stored in double
-precision, including storage of forces, torques, energies, and virial
-quantities. *Double* means double precision is used for the entire
-force calculation.
-
-The *lrt* keyword can be used to enable "Long Range Thread (LRT)"
-mode. It can take a value of *yes* to enable and *no* to disable.
-LRT mode generates an extra thread (in addition to any OpenMP threads
-specified with the OMP_NUM_THREADS environment variable or the *omp*
-keyword). The extra thread is dedicated for performing part of the
-:doc:`PPPM solver <kspace_style>` computations and communications. This
-can improve parallel performance on processors supporting
-Simultaneous Multithreading (SMT) such as Hyperthreading on Intel
-processors. In this mode, one additional thread is generated per MPI
-process. LAMMPS will generate a warning in the case that more threads
-are used than available in SMT hardware on a node. If the PPPM solver
-from the USER-INTEL package is not used, then the LRT setting is
-ignored and no extra threads are generated. Enabling LRT will replace
-the :doc:`run_style <run_style>` with the *verlet/lrt/intel* style that
-is identical to the default *verlet* style aside from supporting the
-LRT feature.
-
-The *balance* keyword sets the fraction of :doc:`pair style <pair_style>` work offloaded to the coprocessor for split
-values between 0.0 and 1.0 inclusive. While this fraction of work is
-running on the coprocessor, other calculations will run on the host,
-including neighbor and pair calculations that are not offloaded, as
-well as angle, bond, dihedral, kspace, and some MPI communications.
-If *split* is set to -1, the fraction of work is dynamically adjusted
-automatically throughout the run. This typically give performance
-within 5 to 10 percent of the optimal fixed fraction.
-
-The *ghost* keyword determines whether or not ghost atoms, i.e. atoms
-at the boundaries of proessor sub-domains, are offloaded for neighbor
-and force calculations. When the value = "no", ghost atoms are not
-offloaded. This option can reduce the amount of data transfer with
-the coprocessor and can also overlap MPI communication of forces with
-computation on the coprocessor when the :doc:`newton pair <newton>`
-setting is "on". When the value = "yes", ghost atoms are offloaded.
-In some cases this can provide better performance, especially if the
-*balance* fraction is high.
-
-The *tpc* keyword sets the max # of coprocessor threads *Ntpc* that
-will run on each core of the coprocessor. The default value = 4,
-which is the number of hardware threads per core supported by the
-current generation Xeon Phi chips.
-
-The *tptask* keyword sets the max # of coprocessor threads (Ntptask*
-assigned to each MPI task. The default value = 240, which is the
-total # of threads an entire current generation Xeon Phi chip can run
-(240 = 60 cores * 4 threads/core). This means each MPI task assigned
-to the Phi will enough threads for the chip to run the max allowed,
-even if only 1 MPI task is assigned. If 8 MPI tasks are assigned to
-the Phi, each will run with 30 threads. If you wish to limit the
-number of threads per MPI task, set *tptask* to a smaller value.
-E.g. for *tptask* = 16, if 8 MPI tasks are assigned, each will run
-with 16 threads, for a total of 128.
-
-Note that the default settings for *tpc* and *tptask* are fine for
-most problems, regardless of how many MPI tasks you assign to a Phi.
-
-The *no_affinity* keyword will turn off automatic setting of core
-affinity for MPI tasks and OpenMP threads on the host when using
-offload to a coprocessor. Affinity settings are used when possible
-to prevent MPI tasks and OpenMP threads from being on separate NUMA
-domains and to prevent offload threads from interfering with other
-processes/threads used for LAMMPS.
-
-
-----------
-
-
-The *kokkos* style invokes settings associated with the use of the
-KOKKOS package.
-
-All of the settings are optional keyword/value pairs. Each has a
-default value as listed below.
-
-The *neigh* keyword determines how neighbor lists are built. A value
-of *half* uses a thread-safe variant of half-neighbor lists,
-the same as used by most pair styles in LAMMPS. A value of
-*n2* uses an O(N^2) algorithm to build the neighbor list without
-binning, where N = # of atoms on a processor. It is typically slower
-than the other methods, which use binning.
-
-A value of *full* uses a full neighbor lists and is the default. This
-performs twice as much computation as the *half* option, however that
-is often a win because it is thread-safe and doesn't require atomic
-operations in the calculation of pair forces. For that reason, *full*
-is the default setting. However, when running in MPI-only mode with 1
-thread per MPI task, *half* neighbor lists will typically be faster,
-just as it is for non-accelerated pair styles.
-
-A value of *full/cluster* is an experimental neighbor style, where
-particles interact with all particles within a small cluster, if at
-least one of the clusters particles is within the neighbor cutoff
-range. This potentially allows for better vectorization on
-architectures such as the Intel Phi. If also reduces the size of the
-neighbor list by roughly a factor of the cluster size, thus reducing
-the total memory footprint considerably.
-
-The *newton* keyword sets the Newton flags for pairwise and bonded
-interactions to *off* or *on*\ , the same as the :doc:`newton <newton>`
-command allows. The default is *off* because this will almost always
-give better performance for the KOKKOS package. This means more
-computation is done, but less communication. However, when running in
-MPI-only mode with 1 thread per MPI task, a value of *on* will
-typically be faster, just as it is for non-accelerated pair styles.
-
-The *binsize* keyword sets the size of bins used to bin atoms in
-neighbor list builds. The same value can be set by the :doc:`neigh_modify binsize <neigh_modify>` command. Making it an option in the
-package kokkos command allows it to be set from the command line. The
-default value is 0.0, which means the LAMMPS default will be used,
-which is bins = 1/2 the size of the pairwise cutoff + neighbor skin
-distance. This is fine when neighbor lists are built on the CPU. For
-GPU builds, a 2x larger binsize equal to the pairwise cutoff +
-neighbor skin, is often faster, which can be set by this keyword.
-Note that if you use a longer-than-usual pairwise cutoff, e.g. to
-allow for a smaller fraction of KSpace work with a :doc:`long-range Coulombic solver <kspace_style>` because the GPU is faster at
-performing pairwise interactions, then this rule of thumb may give too
-large a binsize.
-
-The *comm* and *comm/exchange* and *comm/forward* keywords determine
-whether the host or device performs the packing and unpacking of data
-when communicating per-atom data between processors. "Exchange"
-communication happens only on timesteps that neighbor lists are
-rebuilt. The data is only for atoms that migrate to new processors.
-"Forward" communication happens every timestep. The data is for atom
-coordinates and any other atom properties that needs to be updated for
-ghost atoms owned by each processor.
-
-The *comm* keyword is simply a short-cut to set the same value
-for both the *comm/exchange* and *comm/forward* keywords.
-
-The value options for all 3 keywords are *no* or *host* or *device*\ .
-A value of *no* means to use the standard non-KOKKOS method of
-packing/unpacking data for the communication. A value of *host* means
-to use the host, typically a multi-core CPU, and perform the
-packing/unpacking in parallel with threads. A value of *device* means
-to use the device, typically a GPU, to perform the packing/unpacking
-operation.
-
-The optimal choice for these keywords depends on the input script and
-the hardware used. The *no* value is useful for verifying that the
-Kokkos-based *host* and *device* values are working correctly. It may
-also be the fastest choice when using Kokkos styles in MPI-only mode
-(i.e. with a thread count of 1).
-
-When running on CPUs or Xeon Phi, the *host* and *device* values work
-identically. When using GPUs, the *device* value will typically be
-optimal if all of your styles used in your input script are supported
-by the KOKKOS package. In this case data can stay on the GPU for many
-timesteps without being moved between the host and GPU, if you use the
-*device* value. This requires that your MPI is able to access GPU
-memory directly. Currently that is true for OpenMPI 1.8 (or later
-versions), Mvapich2 1.9 (or later), and CrayMPI. If your script uses
-styles (e.g. fixes) which are not yet supported by the KOKKOS package,
-then data has to be move between the host and device anyway, so it is
-typically faster to let the host handle communication, by using the
-*host* value. Using *host* instead of *no* will enable use of
-multiple threads to pack/unpack communicated data.
-
-
-----------
-
-
-The *omp* style invokes settings associated with the use of the
-USER-OMP package.
-
-The *Nthread* argument sets the number of OpenMP threads allocated for
-each MPI task. For example, if your system has nodes with dual
-quad-core processors, it has a total of 8 cores per node. You could
-use two MPI tasks per node (e.g. using the -ppn option of the mpirun
-command in MPICH or -npernode in OpenMPI), and set *Nthreads* = 4.
-This would use all 8 cores on each node. Note that the product of MPI
-tasks * threads/task should not exceed the physical number of cores
-(on a node), otherwise performance will suffer.
-
-Setting *Nthread* = 0 instructs LAMMPS to use whatever value is the
-default for the given OpenMP environment. This is usually determined
-via the *OMP_NUM_THREADS* environment variable or the compiler
-runtime. Note that in most cases the default for OpenMP capable
-compilers is to use one thread for each available CPU core when
-*OMP_NUM_THREADS* is not explicitly set, which can lead to poor
-performance.
-
-Here are examples of how to set the environment variable when
-launching LAMMPS:
-
-.. parsed-literal::
-
- env OMP_NUM_THREADS=4 lmp_machine -sf omp -in in.script
- env OMP_NUM_THREADS=2 mpirun -np 2 lmp_machine -sf omp -in in.script
- mpirun -x OMP_NUM_THREADS=2 -np 2 lmp_machine -sf omp -in in.script
-
-or you can set it permanently in your shell's start-up script.
-All three of these examples use a total of 4 CPU cores.
-
-Note that different MPI implementations have different ways of passing
-the OMP_NUM_THREADS environment variable to all MPI processes. The
-2nd example line above is for MPICH; the 3rd example line with -x is
-for OpenMPI. Check your MPI documentation for additional details.
-
-What combination of threads and MPI tasks gives the best performance
-is difficult to predict and can depend on many components of your
-input. Not all features of LAMMPS support OpenMP threading via the
-USER-OMP packaage and the parallel efficiency can be very different,
-too.
-
-Optional keyword/value pairs can also be specified. Each has a
-default value as listed below.
-
-The *neigh* keyword specifies whether neighbor list building will be
-multi-threaded in addition to force calculations. If *neigh* is set
-to *no* then neighbor list calculation is performed only by MPI tasks
-with no OpenMP threading. If *mode* is *yes* (the default), a
-multi-threaded neighbor list build is used. Using *neigh* = *yes* is
-almost always faster and should produce idential neighbor lists at the
-expense of using more memory. Specifically, neighbor list pages are
-allocated for all threads at the same time and each thread works
-within its own pages.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command cannot be used after the simulation box is defined by a
-:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command.
-
-The gpu style of this command can only be invoked if LAMMPS was built
-with the GPU package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The intel style of this command can only be invoked if LAMMPS was
-built with the USER-INTEL package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The kk style of this command can only be invoked if LAMMPS was built
-with the KOKKOS package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The omp style of this command can only be invoked if LAMMPS was built
-with the USER-OMP package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`suffix <suffix>`, "-pk" :ref:`command-line setting <start_7>`
-
-Default
-"""""""
-
-For the GPU package, the default is Ngpu = 1 and the option defaults
-are neigh = yes, newton = off, binsize = 0.0, split = 1.0, gpuID = 0
-to Ngpu-1, tpa = 1, and device = not used. These settings are made
-automatically if the "-sf gpu" :ref:`command-line switch <start_7>` is used. If it is not used, you
-must invoke the package gpu command in your input script or via the
-"-pk gpu" :ref:`command-line switch <start_7>`.
-
-For the USER-INTEL package, the default is Nphi = 1 and the option
-defaults are omp = 0, mode = mixed, lrt = no, balance = -1, tpc = 4,
-tptask = 240. The default ghost option is determined by the pair
-style being used. This value is output to the screen in the offload
-report at the end of each run. Note that all of these settings,
-except "omp" and "mode", are ignored if LAMMPS was not built with
-Xeon Phi coprocessor support. These settings are made automatically
-if the "-sf intel" :ref:`command-line switch <start_7>`
-is used. If it is not used, you must invoke the package intel
-command in your input script or or via the "-pk intel" :ref:`command-line switch <start_7>`.
-
-For the KOKKOS package, the option defaults neigh = full, newton =
-off, binsize = 0.0, and comm = device. These settings are made
-automatically by the required "-k on" :ref:`command-line switch <start_7>`. You can change them bu using the
-package kokkos command in your input script or via the "-pk kokkos"
-:ref:`command-line switch <start_7>`.
-
-For the OMP package, the default is Nthreads = 0 and the option
-defaults are neigh = yes. These settings are made automatically if
-the "-sf omp" :ref:`command-line switch <start_7>` is
-used. If it is not used, you must invoke the package omp command in
-your input script or via the "-pk omp" :ref:`command-line switch <start_7>`.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_adp.txt b/doc/html/_sources/pair_adp.txt
deleted file mode 100644
index 92e6112dc..000000000
--- a/doc/html/_sources/pair_adp.txt
+++ /dev/null
@@ -1,215 +0,0 @@
-.. index:: pair_style adp
-
-pair_style adp command
-======================
-
-pair_style adp/omp command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style adp
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style adp
- pair_coeff * * Ta.adp Ta
- pair_coeff * * ../potentials/AlCu.adp Al Al Cu
-
-Description
-"""""""""""
-
-Style *adp* computes pairwise interactions for metals and metal alloys
-using the angular dependent potential (ADP) of :ref:`(Mishin) <Mishin>`,
-which is a generalization of the :doc:`embedded atom method (EAM) potential <pair_eam>`. The LAMMPS implementation is discussed in
-:ref:`(Singh) <Singh>`. The total energy Ei of an atom I is given by
-
-.. image:: Eqs/pair_adp.jpg
- :align: center
-
-where F is the embedding energy which is a function of the atomic
-electron density rho, phi is a pair potential interaction, alpha and
-beta are the element types of atoms I and J, and s and t = 1,2,3 and
-refer to the cartesian coordinates. The mu and lambda terms represent
-the dipole and quadruple distortions of the local atomic environment
-which extend the original EAM framework by introducing angular forces.
-
-Note that unlike for other potentials, cutoffs for ADP potentials are
-not set in the pair_style or pair_coeff command; they are specified in
-the ADP potential files themselves. Likewise, the ADP potential files
-list atomic masses; thus you do not need to use the :doc:`mass <mass>`
-command to specify them.
-
-The NIST WWW site distributes and documents ADP potentials:
-
-.. parsed-literal::
-
- http://www.ctcms.nist.gov/potentials
-
-Note that these must be converted into the extended DYNAMO *setfl*
-format discussed below.
-
-The NIST site is maintained by Chandler Becker (cbecker at nist.gov)
-who is good resource for info on interatomic potentials and file
-formats.
-
-
-----------
-
-
-Only a single pair_coeff command is used with the *adp* style which
-specifies an extended DYNAMO *setfl* file, which contains information
-for M 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 extended *setfl* elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways to
-specify the path for the potential file.
-
-As an example, the potentials/AlCu.adp file, included in the
-potentials directory of the LAMMPS distrbution, is an extended *setfl*
-file which has tabulated ADP values for w elements and their alloy
-interactions: Cu and Al. If your LAMMPS simulation has 4 atoms types
-and you want the 1st 3 to be Al, and the 4th to be Cu, you would use
-the following pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * AlCu.adp Al Al Al Cu
-
-The 1st 2 arguments must be * * so as to span all LAMMPS atom types.
-The first three Al arguments map LAMMPS atom types 1,2,3 to the Al
-element in the extended *setfl* file. The final Cu argument maps
-LAMMPS atom type 4 to the Al element in the extended *setfl* file.
-Note that there is no requirement that your simulation use all the
-elements specified by the extended *setfl* file.
-
-If a mapping value is specified as NULL, the mapping is not performed.
-This can be used when an *adp* 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.
-
-*Adp* files in the *potentials* directory of the LAMMPS distribution
-have an ".adp" suffix. A DYNAMO *setfl* file extended for ADP is
-formatted as follows. Basically it is the standard *setfl* format
-with additional tabulated functions u and w added to the file after
-the tabulated pair potentials. See the :doc:`pair_eam <pair_eam>`
-command for further details on the *setfl* format.
-
-* lines 1,2,3 = comments (ignored)
-* line 4: Nelements Element1 Element2 ... ElementN
-* line 5: Nrho, drho, Nr, dr, cutoff
-
-Following the 5 header lines are Nelements sections, one for each
-element, each with the following format:
-
-* line 1 = atomic number, mass, lattice constant, lattice type (e.g. FCC)
-* embedding function F(rho) (Nrho values)
-* density function rho(r) (Nr values)
-
-Following the Nelements sections, Nr values for each pair potential
-phi(r) array are listed for all i,j element pairs in the same format
-as other arrays. Since these interactions are symmetric (i,j = j,i)
-only phi arrays with i >= j are listed, in the following order: i,j =
-(1,1), (2,1), (2,2), (3,1), (3,2), (3,3), (4,1), ..., (Nelements,
-Nelements). The tabulated values for each phi function are listed as
-r*phi (in units of eV-Angstroms), since they are for atom pairs, the
-same as for :doc:`other EAM files <pair_eam>`.
-
-After the phi(r) arrays, each of the u(r) arrays are listed in the
-same order with the same assumptions of symmetry. Directly following
-the u(r), the w(r) arrays are listed. Note that phi(r) is the only
-array tabulated with a scaling by r.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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, no special mixing rules are needed, since
-the ADP potential files specify alloy interactions explicitly.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in tabulated potential files.
-Thus, you need to re-specify the pair_style and pair_coeff commands in
-an input script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the MANYBODY package. It is only enabled
-if LAMMPS was built with that package (which it is by default).
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_eam <pair_eam>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Mishin:
-
-
-
-**(Mishin)** Mishin, Mehl, and Papaconstantopoulos, Acta Mater, 53, 4029
-(2005).
-
-.. _Singh:
-
-
-
-**(Singh)** Singh and Warner, Acta Mater, 58, 5797-5805 (2010),
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_airebo.txt b/doc/html/_sources/pair_airebo.txt
deleted file mode 100644
index bbff4b643..000000000
--- a/doc/html/_sources/pair_airebo.txt
+++ /dev/null
@@ -1,279 +0,0 @@
-.. index:: pair_style airebo
-
-pair_style airebo command
-=========================
-
-pair_style airebo/omp command
-=============================
-
-pair_style airebo/morse command
-===============================
-
-pair_style airebo/morse/omp command
-===================================
-
-pair_style rebo command
-=======================
-
-pair_style rebo/omp command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style cutoff LJ_flag TORSION_flag
-
-* style = *airebo* or *airebo/morse* or *rebo*
-* cutoff = LJ or Morse cutoff (sigma scale factor) (AIREBO and AIREBO-M only)
-* LJ_flag = 0/1 to turn off/on the LJ or Morse term (AIREBO and AIREBO-M only, optional)
-* TORSION_flag = 0/1 to turn off/on the torsion term (AIREBO and AIREBO-M only, optional)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style airebo 3.0
- pair_style airebo 2.5 1 0
- pair_coeff * * ../potentials/CH.airebo H C
-
-.. parsed-literal::
-
- pair_style airebo/morse 3.0
- pair_coeff * * ../potentials/CH.airebo-m H C
-
-.. parsed-literal::
-
- pair_style rebo
- pair_coeff * * ../potentials/CH.airebo H C
-
-Description
-"""""""""""
-
-The *airebo* pair style computes the Adaptive Intermolecular Reactive
-Empirical Bond Order (AIREBO) Potential of :ref:`(Stuart) <Stuart>` for a
-system of carbon and/or hydrogen atoms. Note that this is the initial
-formulation of AIREBO from 2000, not the later formulation.
-
-The *airebo/morse* pair style computes the AIREBO-M potential, which
-is equivalent to AIREBO, but replaces the LJ term with a Morse potential.
-The Morse potentials are parameterized by high-quality quantum chemistry
-(MP2) calculations and do not diverge as quickly as particle density
-increases. This allows AIREBO-M to retain accuracy to much higher pressures
-than AIREBO (up to 40 GPa for Polyethylene). Details for this potential
-and its parameterization are given in :ref:`(O'Conner) <OConnor>`.
-
-The *rebo* pair style computes the Reactive Empirical Bond Order (REBO)
-Potential of :ref:`(Brenner) <Brenner>`. Note that this is the so-called
-2nd generation REBO from 2002, not the original REBO from 1990.
-As discussed below, 2nd generation REBO is closely related to the
-intial AIREBO; it is just a subset of the potential energy terms.
-
-The AIREBO potential consists of three terms:
-
-.. image:: Eqs/pair_airebo.jpg
- :align: center
-
-By default, all three terms are included. For the *airebo* style, if
-the two optional flag arguments to the pair_style command are
-included, the LJ and torsional terms can be turned off. Note that
-both or neither of the flags must be included. If both of the LJ an
-torsional terms are turned off, it becomes the 2nd-generation REBO
-potential, with a small caveat on the spline fitting procedure
-mentioned below. This can be specified directly as pair_style *rebo*
-with no additional arguments.
-
-The detailed formulas for this potential are given in
-:ref:`(Stuart) <Stuart>`; here we provide only a brief description.
-
-The E_REBO term has the same functional form as the hydrocarbon REBO
-potential developed in :ref:`(Brenner) <Brenner>`. The coefficients for
-E_REBO in AIREBO are essentially the same as Brenner's potential, but
-a few fitted spline values are slightly different. For most cases the
-E_REBO term in AIREBO will produce the same energies, forces and
-statistical averages as the original REBO potential from which it was
-derived. The E_REBO term in the AIREBO potential gives the model its
-reactive capabilities and only describes short-ranged C-C, C-H and H-H
-interactions (r < 2 Angstroms). These interactions have strong
-coordination-dependence through a bond order parameter, which adjusts
-the attraction between the I,J atoms based on the position of other
-nearby atoms and thus has 3- and 4-body dependence.
-
-The E_LJ term adds longer-ranged interactions (2 < r < cutoff) using a
-form similar to the standard :doc:`Lennard Jones potential <pair_lj>`.
-The E_LJ term in AIREBO contains a series of switching functions so
-that the short-ranged LJ repulsion (1/r^12) does not interfere with
-the energetics captured by the E_REBO term. The extent of the E_LJ
-interactions is determined by the *cutoff* argument to the pair_style
-command which is a scale factor. For each type pair (C-C, C-H, H-H)
-the cutoff is obtained by multiplying the scale factor by the sigma
-value defined in the potential file for that type pair. In the
-standard AIREBO potential, sigma_CC = 3.4 Angstroms, so with a scale
-factor of 3.0 (the argument in pair_style), the resulting E_LJ cutoff
-would be 10.2 Angstroms.
-
-The E_TORSION term is an explicit 4-body potential that describes
-various dihedral angle preferences in hydrocarbon configurations.
-
-
-----------
-
-
-Only a single pair_coeff command is used with the *airebo*\ , *airebo*
-or *rebo* style which specifies an AIREBO or AIREBO-M potential file
-with parameters for C and H. Note that the *rebo* style in LAMMPS
-uses the same AIREBO-formatted potential file. 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 AIREBO elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-As an example, if your LAMMPS simulation has 4 atom types and you want
-the 1st 3 to be C, and the 4th to be H, you would use the following
-pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * CH.airebo C C C H
-
-The 1st 2 arguments must be * * so as to span all LAMMPS atom types.
-The first three C arguments map LAMMPS atom types 1,2,3 to the C
-element in the AIREBO file. The final H argument maps LAMMPS atom
-type 4 to the H element in the SW file. If a mapping value is
-specified as NULL, the mapping is not performed. This can be used
-when a *airebo* 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.
-
-The parameters/coefficients for the AIREBO potentials are listed in
-the CH.airebo file to agree with the original :ref:`(Stuart) <Stuart>`
-paper. Thus the parameters are specific to this potential and the way
-it was fit, so modifying the file should be done cautiously.
-
-Similarly the parameters/coefficients for the AIREBO-M potentials are
-listed in the CH.airebo-m file to agree with the :ref:`(O'Connor) <OConnor>`
-paper. Thus the parameters are specific to this potential and the way
-it was fit, so modifying the file should be done cautiously. The
-AIREBO-M Morse potentials were parameterized using a cutoff of
-3.0 (sigma). Modifying this cutoff may impact simulation accuracy.
-
-This pair style tallies a breakdown of the total AIREBO potential
-energy into sub-categories, which can be accessed via the :doc:`compute pair <compute_pair>` command as a vector of values of length 3.
-The 3 values correspond to the following sub-categories:
-
-1. *E_REBO* = REBO energy
-2. *E_LJ* = Lennard-Jones energy
-3. *E_TORSION* = Torsion energy
-
-To print these quantities to the log file (with descriptive column
-headings) the following commands could be included in an input script:
-
-.. parsed-literal::
-
- compute 0 all pair airebo
- variable REBO equal c_0[1]
- variable LJ equal c_0[2]
- variable TORSION equal c_0[3]
- thermo_style custom step temp epair v_REBO v_LJ v_TORSION
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-These pair styles do not support the :doc:`pair_modify <pair_modify>`
-mix, shift, table, and tail options.
-
-These pair styles do not write their information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-These pair styles can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. They do not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-These pair styles are part of the MANYBODY package. They are only
-enabled if LAMMPS was built with that package (which it is by
-default). See the :ref:`Making LAMMPS <start_3>` section
-for more info.
-
-These pair potentials require the :doc:`newton <newton>` setting to be
-"on" for pair interactions.
-
-The CH.airebo and CH.airebo-m potential files provided with LAMMPS
-(see the potentials directory) are parameterized for metal :doc:`units <units>`.
-You can use the AIREBO, AIREBO-M or REBO potential with any LAMMPS units,
-but you would need to create your own AIREBO or AIREBO-M potential file
-with coefficients listed in the appropriate units, if your simulation
-doesn't use "metal" units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Stuart:
-
-
-
-**(Stuart)** Stuart, Tutein, Harrison, J Chem Phys, 112, 6472-6486
-(2000).
-
-.. _Brenner:
-
-
-
-**(Brenner)** Brenner, Shenderova, Harrison, Stuart, Ni, Sinnott, J
-Physics: Condensed Matter, 14, 783-802 (2002).
-
-.. _OConnor:
-
-
-
-**(O'Connor)** O'Connor et al., J. Chem. Phys. 142, 024903 (2015).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_awpmd.txt b/doc/html/_sources/pair_awpmd.txt
deleted file mode 100644
index 36e459b07..000000000
--- a/doc/html/_sources/pair_awpmd.txt
+++ /dev/null
@@ -1,137 +0,0 @@
-.. index:: pair_style awpmd/cut
-
-pair_style awpmd/cut command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style awpmd/cut Rc keyword value ...
-
-* Rc = global cutoff, -1 means cutoff of half the shortest box length
-* zero or more keyword/value pairs may be appended
-* keyword = *hartree* or *dproduct* or *uhf* or *free* or *pbc* or *fix* or *harm* or *ermscale* or *flex_press*
-.. parsed-literal::
-
- *hartree* value = none
- *dproduct* value = none
- *uhf* value = none
- *free* value = none
- *pbc* value = Plen
- Plen = periodic width of electron = -1 or positive value (distance units)
- *fix* value = Flen
- Flen = fixed width of electron = -1 or positive value (distance units)
- *harm* value = width
- width = harmonic width constraint
- *ermscale* value = factor
- factor = scaling between electron mass and width variable mass
- *flex_press* value = none
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style awpmd/cut -1
- pair_style awpmd/cut 40.0 uhf free
- pair_coeff * *
- pair_coeff 2 2 20.0
-
-Description
-"""""""""""
-
-This pair style contains an implementation of the Antisymmetrized Wave
-Packet Molecular Dynamics (AWPMD) method. Need citation here. Need
-basic formulas here. Could be links to other documents.
-
-Rc is the cutoff.
-
-The pair_style command allows for several optional keywords
-to be specified.
-
-The *hartree*\ , *dproduct*\ , and *uhf* keywords specify the form of the
-initial trial wave function for the system. If the *hartree* keyword
-is used, then a Hartree multielectron trial wave function is used. If
-the *dproduct* keyword is used, then a trial function which is a
-product of two determinants for each spin type is used. If the *uhf*
-keyword is used, then an unrestricted Hartree-Fock trial wave function
-is used.
-
-The *free*\ , *pbc*\ , and *fix* keywords specify a width constraint on
-the electron wavepackets. If the *free* keyword is specified, then there is no
-constraint. If the *pbc* keyword is used and *Plen* is specified as
--1, then the maximum width is half the shortest box length. If *Plen*
-is a positive value, then the value is the maximum width. If the
-*fix* keyword is used and *Flen* is specified as -1, then electrons
-have a constant width that is read from the data file. If *Flen* is a
-positive value, then the constant width for all electrons is set to
-*Flen*\ .
-
-The *harm* keyword allow oscillations in the width of the
-electron wavepackets. More details are needed.
-
-The *ermscale* keyword specifies a unitless scaling factor
-between the electron masses and the width variable mass. More
-details needed.
-
-If the *flex_press* keyword is used, then a contribution from the
-electrons is added to the total virial and pressure of the system.
-
-This potential is designed to be used with :doc:`atom_style wavepacket <atom_style>` definitions, in order to handle the
-description of systems with interacting nuclei and explicit electrons.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* cutoff (distance units)
-
-For *awpmd/cut*\ , the cutoff coefficient is optional. If it is not
-used (as in some of the examples above), the default global value
-specified in the pair_style command is used.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-The :doc:`pair_modify <pair_modify>` mix, shift, table, and tail options
-are not relevant for this pair style.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-Default
-"""""""
-
-These are the defaults for the pair_style keywords: *hartree* for the
-initial wavefunction, *free* for the wavepacket width.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_beck.txt b/doc/html/_sources/pair_beck.txt
deleted file mode 100644
index cef23faef..000000000
--- a/doc/html/_sources/pair_beck.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-.. index:: pair_style beck
-
-pair_style beck command
-=======================
-
-pair_style beck/gpu command
-===========================
-
-pair_style beck/omp command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style beck Rc
-
-* Rc = cutoff for interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style beck 8.0
- pair_coeff * * 399.671876712 0.0000867636112694 0.675 4.390 0.0003746
- pair_coeff 1 1 399.671876712 0.0000867636112694 0.675 4.390 0.0003746 6.0
-
-Description
-"""""""""""
-
-Style *beck* computes interactions based on the potential by
-:ref:`(Beck) <Beck>`, originally designed for simulation of Helium. It
-includes truncation at a cutoff distance Rc.
-
-.. image:: Eqs/pair_beck.jpg
- :align: center
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands.
-
-* A (energy units)
-* B (energy-distance^6 units)
-* a (distance units)
-* alpha (1/distance units)
-* beta (1/distance^6 units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global cutoff
-Rc is used.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, coeffiecients must be specified.
-No default mixing rules are used.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Beck:
-
-
-
-**(Beck)** Beck, Molecular Physics, 14, 311 (1968).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_body.txt b/doc/html/_sources/pair_body.txt
deleted file mode 100644
index 5970cc560..000000000
--- a/doc/html/_sources/pair_body.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-.. index:: pair_style body
-
-pair_style body command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style body cutoff
-
-cutoff = global cutoff for interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style body 3.0
- pair_coeff * * 1.0 1.0
- pair_coeff 1 1 1.0 1.5 2.5
-
-Description
-"""""""""""
-
-Style *body* is for use with body particles and calculates pairwise
-body/body interactions as well as interactions between body and
-point-particles. See :ref:`Section_howto 14 <howto_14>`
-of the manual and the :doc:`body <body>` doc page for more details on
-using body particles.
-
-This pair style is designed for use with the "nparticle" body style,
-which is specified as an argument to the "atom-style body" command.
-See the :doc:`body <body>` doc page for more details about the body
-styles LAMMPS supports. The "nparticle" style treats a body particle
-as a rigid body composed of N sub-particles.
-
-The coordinates of a body particle are its center-of-mass (COM). If
-the COMs of a pair of body particles are within the cutoff (global or
-type-specific, as specified above), then all interactions between
-pairs of sub-particles in the two body particles are computed.
-E.g. if the first body particle has 3 sub-particles, and the second
-has 10, then 30 interactions are computed and summed to yield the
-total force and torque on each body particle.
-
-.. note::
-
- In the example just described, all 30 interactions are computed
- even if the distance between a particular pair of sub-particles is
- greater than the cutoff. Likewise, no interaction between two body
- particles is computed if the two COMs are further apart than the
- cutoff, even if the distance between some pairs of their sub-particles
- is within the cutoff. Thus care should be used in defining the cutoff
- distances for body particles, depending on their shape and size.
-
-Similar rules apply for a body particle interacting with a point
-particle. The distance between the two particles is calculated using
-the COM of the body particle and the position of the point particle.
-If the distance is within the cutoff and the body particle has N
-sub-particles, then N interactions with the point particle are
-computed and summed. If the distance is not within the cutoff, no
-interactions between the body and point particle are computed.
-
-The interaction between two sub-particles, or a sub-particle and point
-particle, or betwee two point particles is computed as a Lennard-Jones
-interaction, using the standard formula
-
-.. image:: Eqs/pair_lj.jpg
- :align: center
-
-where Rc is the cutoff. As explained above, an interaction involving
-one or two body sub-particles may be computed even for r > Rc.
-
-For style *body*\ , the following coefficients must be defined for each
-pair of atoms types via the :doc:`pair_coeff <pair_coeff>` command as in
-the examples above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* epsilon (energy units)
-* sigma (distance units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global cutoff
-is used.
-
-
-----------
-
-
-**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 all of this pair style can be mixed. The
-default mix value is *geometric*\ . See the "pair_modify" command for
-details.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This style is part of the BODY package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_2_3>` section for more info.
-
-Defining particles to be bodies so they participate in body/body or
-body/particle interactions requires the use of the :doc:`atom_style body <atom_style>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`fix rigid <fix_rigid>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_bop.txt b/doc/html/_sources/pair_bop.txt
deleted file mode 100644
index cbd387600..000000000
--- a/doc/html/_sources/pair_bop.txt
+++ /dev/null
@@ -1,452 +0,0 @@
-.. index:: pair_style bop
-
-pair_style bop command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style bop keyword ...
-
-* zero or more keywords may be appended
-* keyword = *save*
-.. parsed-literal::
-
- save = pre-compute and save some values
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style bop
- pair_coeff * * ../potentials/CdTe_bop Cd Te
- pair_style bop save
- pair_coeff * * ../potentials/CdTe.bop.table Cd Te Te
- comm_modify cutoff 14.70
-
-Description
-"""""""""""
-
-The *bop* pair style computes Bond-Order Potentials (BOP) based on
-quantum mechanical theory incorporating both sigma and pi bondings.
-By analytically deriving the BOP from quantum mechanical theory its
-transferability to different phases can approach that of quantum
-mechanical methods. This potential is similar to the original BOP
-developed by Pettifor (:ref:`Pettifor_1 <Pettifor_1>`,
-:ref:`Pettifor_2 <Pettifor_2>`, :ref:`Pettifor_3 <Pettifor_3>`) and later updated
-by Murdick, Zhou, and Ward (:ref:`Murdick <Murdick>`, :ref:`Ward <Ward>`).
-Currently, BOP potential files for these systems are provided with
-LAMMPS: AlCu, CCu, CdTe, CdTeSe, CdZnTe, CuH, GaAs. A sysstem with
-only a subset of these elements, including a single element (e.g. C or
-Cu or Al or Ga or Zn or CdZn), can also be modeled by using the
-appropriate alloy file and assigning all atom types to the
-singleelement or subset of elements via the pair_coeff command, as
-discussed below.
-
-The BOP potential consists of three terms:
-
-.. image:: Eqs/pair_bop.jpg
- :align: center
-
-where phi_ij(r_ij) is a short-range two-body function representing the
-repulsion between a pair of ion cores, beta_(sigma,ij)(r_ij) and
-beta_(sigma,ij)(r_ij) are respectively sigma and pi bond ingtegrals,
-THETA_(sigma,ij) and THETA_(pi,ij) are sigma and pi bond-orders, and
-U_prom is the promotion energy for sp-valent systems.
-
-The detailed formulas for this potential are given in Ward
-(:ref:`Ward <Ward>`); here we provide only a brief description.
-
-The repulsive energy phi_ij(r_ij) and the bond integrals
-beta_(sigma,ij)(r_ij) and beta_(phi,ij)(r_ij) are functions of the
-interatomic distance r_ij between atom i and j. Each of these
-potentials has a smooth cutoff at a radius of r_(cut,ij). These
-smooth cutoffs ensure stable behavior at situations with high sampling
-near the cutoff such as melts and surfaces.
-
-The bond-orders can be viewed as environment-dependent local variables
-that are ij bond specific. The maximum value of the sigma bond-order
-(THETA_sigma) is 1, while that of the pi bond-order (THETA_pi) is 2,
-attributing to a maximum value of the total bond-order
-(THETA_sigma+THETA_pi) of 3. The sigma and pi bond-orders reflect the
-ubiquitous single-, double-, and triple- bond behavior of
-chemistry. Their analytical expressions can be derived from tight-
-binding theory by recursively expanding an inter-site Green's function
-as a continued fraction. To accurately represent the bonding with a
-computationally efficient potential formulation suitable for MD
-simulations, the derived BOP only takes (and retains) the first two
-levels of the recursive representations for both the sigma and the pi
-bond-orders. Bond-order terms can be understood in terms of molecular
-orbital hopping paths based upon the Cyrot-Lackmann theorem
-(:ref:`Pettifor_1 <Pettifor_1>`). The sigma bond-order with a half-full
-valence shell is used to interpolate the bond-order expressiont that
-incorporated explicite valance band filling. This pi bond-order
-expression also contains also contains a three-member ring term that
-allows implementation of an asymmetric density of states, which helps
-to either stabilize or destabilize close-packed structures. The pi
-bond-order includes hopping paths of length 4. This enables the
-incorporation of dihedral angles effects.
-
-.. note::
-
- Note that unlike for other potentials, cutoffs for BOP
- potentials are not set in the pair_style or pair_coeff command; they
- are specified in the BOP potential files themselves. Likewise, the
- BOP potential files list atomic masses; thus you do not need to use
- the :doc:`mass <mass>` command to specify them. Note that for BOP
- potentials with hydrogen, you will likely want to set the mass of H
- atoms to be 10x or 20x larger to avoid having to use a tiny timestep.
- You can do this by using the :doc:`mass <mass>` command after using the
- :doc:`pair_coeff <pair_coeff>` command to read the BOP potential
- file.
-
-One option can be specified as a keyword with the pair_style command.
-
-The *save* keyword gives you the option to calculate in advance and
-store a set of distances, angles, and derivatives of angles. The
-default is to not do this, but to calculate them on-the-fly each time
-they are needed. The former may be faster, but takes more memory.
-The latter requires less memory, but may be slower. It is best to
-test this option to optimize the speed of BOP for your particular
-system configuration.
-
-
-----------
-
-
-Only a single pair_coeff command is used with the *bop* style which
-specifies a BOP 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 BOP elements to atom types
-
-As an example, imagine the CdTe.bop file has BOP values for Cd
-and Te. If your LAMMPS simulation has 4 atoms types and you want the
-1st 3 to be Cd, and the 4th to be Te, you would use the following
-pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * CdTe Cd Cd Cd Te
-
-The 1st 2 arguments must be * * so as to span all LAMMPS atom types.
-The first three Cd arguments map LAMMPS atom types 1,2,3 to the Cd
-element in the BOP file. The final Te argument maps LAMMPS atom type
-4 to the Te element in the BOP file.
-
-BOP files in the *potentials* directory of the LAMMPS distribution
-have a ".bop" suffix. The potentials are in tabulated form containing
-pre-tabulated pair functions for phi_ij(r_ij), beta_(sigma,ij)(r_ij),
-and beta_pi,ij)(r_ij).
-
-The parameters/coefficients format for the different kinds of BOP
-files are given below with variables matching the formulation of Ward
-(:ref:`Ward <Ward>`) and Zhou (:ref:`Zhou <Zhou>`). Each header line containing a
-":" is preceded by a blank line.
-
-
-----------
-
-
-**No angular table file format**\ :
-
-The parameters/coefficients format for the BOP potentials input file
-containing pre-tabulated functions of g is given below with variables
-matching the formulation of Ward (:ref:`Ward <Ward>`). This format also
-assumes the angular functions have the formulation of (:ref:`Ward <Ward>`).
-
-* Line 1: # elements N
-
-The first line is followed by N lines containing the atomic
-number, mass, and element symbol of each element.
-
-Following the definition of the elements several global variables for
-the tabulated functions are given.
-
-* Line 1: nr, nBOt (nr is the number of divisions the radius is broken
- into for function tables and MUST be a factor of 5; nBOt is the number
- of divisions for the tabulated values of THETA_(S,ij)
-* Line 2: delta_1-delta_7 (if all are not used in the particular
-* formulation, set unused values to 0.0)
-Following this N lines for e_1-e_N containing p_pi.
-
-* Line 3: p_pi (for e_1)
-* Line 4: p_pi (for e_2 and continues to e_N)
-
-The next section contains several pair constants for the number of
-interaction types e_i-e_j, with i=1->N, j=i->N
-
-* Line 1: r_cut (for e_1-e_1 interactions)
-* Line 2: c_sigma, a_sigma, c_pi, a_pi
-* Line 3: delta_sigma, delta_pi
-* Line 4: f_sigma, k_sigma, delta_3 (This delta_3 is similar to that of
- the previous section but is interaction type dependent)
-The next section contains a line for each three body interaction type
-e_j-e_i-e_k with i=0->N, j=0->N, k=j->N
-
-* Line 1: g_(sigma0), g_(sigma1), g_(sigma2) (These are coefficients for
- g_(sigma,jik)(THETA_ijk) for e_1-e_1-e_1 interaction. :ref:`Ward <Ward>`
- contains the full expressions for the constants as functions of
- b_(sigma,ijk), p_(sigma,ijk), u_(sigma,ijk))
-* Line 2: g_(sigma0), g_(sigma1), g_(sigma2) (for e_1-e_1-e_2)
-The next section contains a block for each interaction type for the
-phi_ij(r_ij). Each block has nr entries with 5 entries per line.
-
-* Line 1: phi(r1), phi(r2), phi(r3), phi(r4), phi(r5) (for the e_1-e_1
- interaction type)
-* Line 2: phi(r6), phi(r7), phi(r8), phi(r9), phi(r10) (this continues
- until nr)
-* ...
-* Line nr/5_1: phi(r1), phi(r2), phi(r3), phi(r4), phi(r5), (for the
- e_1-e_1 interaction type)
-The next section contains a block for each interaction type for the
-beta_(sigma,ij)(r_ij). Each block has nr entries with 5 entries per
-line.
-
-* Line 1: beta_sigma(r1), beta_sigma(r2), beta_sigma(r3), beta_sigma(r4),
- beta_sigma(r5) (for the e_1-e_1 interaction type)
-* Line 2: beta_sigma(r6), beta_sigma(r7), beta_sigma(r8), beta_sigma(r9),
- beta_sigma(r10) (this continues until nr)
-* ...
-* Line nr/5+1: beta_sigma(r1), beta_sigma(r2), beta_sigma(r3),
- beta_sigma(r4), beta_sigma(r5) (for the e_1-e_2 interaction type)
-The next section contains a block for each interaction type for
-beta_(pi,ij)(r_ij). Each block has nr entries with 5 entries per line.
-
-* Line 1: beta_pi(r1), beta_pi(r2), beta_pi(r3), beta_pi(r4), beta_pi(r5)
- (for the e_1-e_1 interaction type)
-* Line 2: beta_pi(r6), beta_pi(r7), beta_pi(r8), beta_pi(r9),
- beta_pi(r10) (this continues until nr)
-* ...
-* Line nr/5+1: beta_pi(r1), beta_pi(r2), beta_pi(r3), beta_pi(r4),
- beta_pi(r5) (for the e_1-e_2 interaction type)
-The next section contains a block for each interaction type for the
-THETA_(S,ij)((THETA_(sigma,ij))^(1/2), f_(sigma,ij)). Each block has
-nBOt entries with 5 entries per line.
-
-* Line 1: THETA_(S,ij)(r1), THETA_(S,ij)(r2), THETA_(S,ij)(r3),
- THETA_(S,ij)(r4), THETA_(S,ij)(r5) (for the e_1-e_2 interaction type)
-* Line 2: THETA_(S,ij)(r6), THETA_(S,ij)(r7), THETA_(S,ij)(r8),
- THETA_(S,ij)(r9), THETA_(S,ij)(r10) (this continues until nBOt)
-* ...
-* Line nBOt/5+1: THETA_(S,ij)(r1), THETA_(S,ij)(r2), THETA_(S,ij)(r3),
- THETA_(S,ij)(r4), THETA_(S,ij)(r5) (for the e_1-e_2 interaction type)
-The next section contains a block of N lines for e_1-e_N
-
-* Line 1: delta^mu (for e_1)
-* Line 2: delta^mu (for e_2 and repeats to e_N)
-
-The last section contains more constants for e_i-e_j interactions with
-i=0->N, j=i->N
-
-* Line 1: (A_ij)^(mu*nu) (for e1-e1)
-* Line 2: (A_ij)^(mu*nu) (for e1-e2 and repeats as above)
-
-
-----------
-
-
-**Angular spline table file format**\ :
-
-The parameters/coefficients format for the BOP potentials input file
-containing pre-tabulated functions of g is given below with variables
-matching the formulation of Ward (:ref:`Ward <Ward>`). This format also
-assumes the angular functions have the formulation of (:ref:`Zhou <Zhou>`).
-
-* Line 1: # elements N
-
-The first line is followed by N lines containing the atomic
-number, mass, and element symbol of each element.
-
-Following the definition of the elements several global variables for
-the tabulated functions are given.
-
-* Line 1: nr, ntheta, nBOt (nr is the number of divisions the radius is broken
- into for function tables and MUST be a factor of 5; ntheta is the power of the
- power of the spline used to fit the angular function; nBOt is the number
- of divisions for the tabulated values of THETA_(S,ij)
-* Line 2: delta_1-delta_7 (if all are not used in the particular
-* formulation, set unused values to 0.0)
-Following this N lines for e_1-e_N containing p_pi.
-
-* Line 3: p_pi (for e_1)
-* Line 4: p_pi (for e_2 and continues to e_N)
-
-The next section contains several pair constants for the number of
-interaction types e_i-e_j, with i=1->N, j=i->N
-
-* Line 1: r_cut (for e_1-e_1 interactions)
-* Line 2: c_sigma, a_sigma, c_pi, a_pi
-* Line 3: delta_sigma, delta_pi
-* Line 4: f_sigma, k_sigma, delta_3 (This delta_3 is similar to that of
- the previous section but is interaction type dependent)
-The next section contains a line for each three body interaction type
-e_j-e_i-e_k with i=0->N, j=0->N, k=j->N
-
-* Line 1: g0, g1, g2... (These are coefficients for the angular spline
- of the g_(sigma,jik)(THETA_ijk) for e_1-e_1-e_1 interaction. The
- function can contain up to 10 term thus 10 constants. The first line
- can contain up to five constants. If the spline has more than five
- terms the second line will contain the remaining constants The
- following lines will then contain the constants for the remainaing g0,
- g1, g2... (for e_1-e_1-e_2) and the other three body
- interactions
-The rest of the table has the same structure as the previous section
-(see above).
-
-
-----------
-
-
-**Angular no-spline table file format**\ :
-
-The parameters/coefficients format for the BOP potentials input file
-containing pre-tabulated functions of g is given below with variables
-matching the formulation of Ward (:ref:`Ward <Ward>`). This format also
-assumes the angular functions have the formulation of (:ref:`Zhou <Zhou>`).
-
-* Line 1: # elements N
-
-The first two lines are followed by N lines containing the atomic
-number, mass, and element symbol of each element.
-
-Following the definition of the elements several global variables for
-the tabulated functions are given.
-
-* Line 1: nr, ntheta, nBOt (nr is the number of divisions the radius is broken
- into for function tables and MUST be a factor of 5; ntheta is the number of
- divisions for the tabulated values of the g angular function; nBOt is the number
- of divisions for the tabulated values of THETA_(S,ij)
-* Line 2: delta_1-delta_7 (if all are not used in the particular
-* formulation, set unused values to 0.0)
-Following this N lines for e_1-e_N containing p_pi.
-
-* Line 3: p_pi (for e_1)
-* Line 4: p_pi (for e_2 and continues to e_N)
-
-The next section contains several pair constants for the number of
-interaction types e_i-e_j, with i=1->N, j=i->N
-
-* Line 1: r_cut (for e_1-e_1 interactions)
-* Line 2: c_sigma, a_sigma, c_pi, a_pi
-* Line 3: delta_sigma, delta_pi
-* Line 4: f_sigma, k_sigma, delta_3 (This delta_3 is similar to that of
- the previous section but is interaction type dependent)
-The next section contains a line for each three body interaction type
-e_j-e_i-e_k with i=0->N, j=0->N, k=j->N
-
-* Line 1: g(theta1), g(theta2), g(theta3), g(theta4), g(theta5) (for the e_1-e_1-e_1
- interaction type)
-* Line 2: g(theta6), g(theta7), g(theta8), g(theta9), g(theta10) (this continues
- until ntheta)
-* ...
-* Line ntheta/5+1: g(theta1), g(theta2), g(theta3), g(theta4), g(theta5), (for the
- e_1-e_1-e_2 interaction type)
-The rest of the table has the same structure as the previous section (see above).
-
-
-----------
-
-
-**Mixing, shift, table tail correction, restart**\ :
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-mix, shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-These pair styles are part of the MANYBODY package. They are only
-enabled if LAMMPS was built with that package (which it is by default).
-See the :ref:`Making LAMMPS <start_3>` section for more
-info.
-
-These pair potentials require the :doc:`newtion <newton>` setting to be
-"on" for pair interactions.
-
-The CdTe.bop and GaAs.bop potential files provided with LAMMPS (see the
-potentials directory) are parameterized for metal :doc:`units <units>`.
-You can use the BOP potential with any LAMMPS units, but you would need
-to create your own BOP potential file with coefficients listed in the
-appropriate units if your simulation does not use "metal" units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-Default
-"""""""
-
-non-tabulated potential file, a_0 is non-zero.
-
-
-----------
-
-
-.. _Pettifor_1:
-
-
-
-**(Pettifor_1)** D.G. Pettifor and I.I. Oleinik, Phys. Rev. B, 59, 8487
-(1999).
-
-.. _Pettifor_2:
-
-
-
-**(Pettifor_2)** D.G. Pettifor and I.I. Oleinik, Phys. Rev. Lett., 84,
-4124 (2000).
-
-.. _Pettifor_3:
-
-
-
-**(Pettifor_3)** D.G. Pettifor and I.I. Oleinik, Phys. Rev. B, 65, 172103
-(2002).
-
-.. _Murdick:
-
-
-
-**(Murdick)** D.A. Murdick, X.W. Zhou, H.N.G. Wadley, D. Nguyen-Manh, R.
-Drautz, and D.G. Pettifor, Phys. Rev. B, 73, 45206 (2006).
-
-.. _Ward:
-
-
-
-**(Ward)** D.K. Ward, X.W. Zhou, B.M. Wong, F.P. Doty, and J.A.
-Zimmerman, Phys. Rev. B, 85,115206 (2012).
-
-.. _Zhou:
-
-
-
-**(Zhou)** X.W. Zhou, D.K. Ward, M. Foster (TBP).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_born.txt b/doc/html/_sources/pair_born.txt
deleted file mode 100644
index d2703ab46..000000000
--- a/doc/html/_sources/pair_born.txt
+++ /dev/null
@@ -1,239 +0,0 @@
-.. index:: pair_style born
-
-pair_style born command
-=======================
-
-pair_style born/omp command
-===========================
-
-pair_style born/gpu command
-===========================
-
-pair_style born/coul/long command
-=================================
-
-pair_style born/coul/long/cs command
-====================================
-
-pair_style born/coul/long/gpu command
-=====================================
-
-pair_style born/coul/long/omp command
-=====================================
-
-pair_style born/coul/msm command
-================================
-
-pair_style born/coul/msm/omp command
-====================================
-
-pair_style born/coul/wolf command
-=================================
-
-pair_style born/coul/wolf/gpu command
-=====================================
-
-pair_style born/coul/wolf/omp command
-=====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *born* or *born/coul/long* or *born/coul/long/cs* or *born/coul/msm* or *born/coul/wolf*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *born* args = cutoff
- cutoff = global cutoff for non-Coulombic interactions (distance units)
- *born/coul/long* or *born/coul/long/cs* args = cutoff (cutoff2)
- cutoff = global cutoff for non-Coulombic (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *born/coul/msm* args = cutoff (cutoff2)
- cutoff = global cutoff for non-Coulombic (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *born/coul/wolf* args = alpha cutoff (cutoff2)
- alpha = damping parameter (inverse distance units)
- cutoff = global cutoff for non-Coulombic (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style born 10.0
- pair_coeff * * 6.08 0.317 2.340 24.18 11.51
- pair_coeff 1 1 6.08 0.317 2.340 24.18 11.51
-
-.. parsed-literal::
-
- pair_style born/coul/long 10.0
- pair_style born/coul/long/cs 10.0
- pair_style born/coul/long 10.0 8.0
- pair_style born/coul/long/cs 10.0 8.0
- pair_coeff * * 6.08 0.317 2.340 24.18 11.51
- pair_coeff 1 1 6.08 0.317 2.340 24.18 11.51
-
-.. parsed-literal::
-
- pair_style born/coul/msm 10.0
- pair_style born/coul/msm 10.0 8.0
- pair_coeff * * 6.08 0.317 2.340 24.18 11.51
- pair_coeff 1 1 6.08 0.317 2.340 24.18 11.51
-
-.. parsed-literal::
-
- pair_style born/coul/wolf 0.25 10.0
- pair_style born/coul/wolf 0.25 10.0 9.0
- pair_coeff * * 6.08 0.317 2.340 24.18 11.51
- pair_coeff 1 1 6.08 0.317 2.340 24.18 11.51
-
-Description
-"""""""""""
-
-The *born* style computes the Born-Mayer-Huggins or Tosi/Fumi
-potential described in :ref:`(Fumi and Tosi) <FumiTosi>`, given by
-
-.. image:: Eqs/pair_born.jpg
- :align: center
-
-where sigma is an interaction-dependent length parameter, rho is an
-ionic-pair dependent length parameter, and Rc is the cutoff.
-
-The styles with *coul/long* or *coul/msm* add a Coulombic term as
-described for the :doc:`lj/cut <pair_lj>` pair styles. An additional
-damping factor is applied to the Coulombic term so it can be used in
-conjunction with the :doc:`kspace_style <kspace_style>` command and its
-*ewald* or *pppm* of *msm* option. The Coulombic cutoff specified for
-this style means that pairwise interactions within this distance are
-computed directly; interactions outside that distance are computed in
-reciprocal space.
-
-If one cutoff is specified for the *born/coul/long* and
-*born/coul/msm* style, it is used for both the A,C,D and Coulombic
-terms. If two cutoffs are specified, the first is used as the cutoff
-for the A,C,D terms, and the second is the cutoff for the Coulombic
-term.
-
-The *born/coul/wolf* style adds a Coulombic term as described for the
-Wolf potential in the :doc:`coul/wolf <pair_coul>` pair style.
-
-Style *born/coul/long/cs* is identical to *born/coul/long* except that
-a term is added for the :ref:`core/shell model <howto_25>`
-to allow charges on core and shell particles to be separated by r =
-0.0.
-
-Note that these potentials are related to the :doc:`Buckingham potential <pair_buck>`.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* A (energy units)
-* rho (distance units)
-* sigma (distance units)
-* C (energy units * distance units^6)
-* D (energy units * distance units^8)
-* cutoff (distance units)
-
-The second coefficient, rho, must be greater than zero.
-
-The last coefficient is optional. If not specified, the global A,C,D
-cutoff specified in the pair_style command is used.
-
-For *born/coul/long* and *born/coul/wolf* no Coulombic cutoff can be
-specified for an individual I,J type pair. All type pairs use the
-same global Coulombic cutoff specified in the pair_style command.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-These pair styles do not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-These styles support the :doc:`pair_modify <pair_modify>` shift option
-for the energy of the exp(), 1/r^6, and 1/r^8 portion of the pair
-interaction.
-
-The *born/coul/long* pair style supports the
-:doc:`pair_modify <pair_modify>` table option ti tabulate the
-short-range portion of the long-range Coulombic interaction.
-
-These styles support the pair_modify tail option for adding long-range
-tail corrections to energy and pressure.
-
-Thess styles writes thei information to binary :doc:`restart <restart>`
-files, so pair_style and pair_coeff commands do not need to be
-specified in an input script that reads a restart file.
-
-These styles can only be used via the *pair* keyword of the :doc:`run_style respa <run_style>` command. They do not support the *inner*\ ,
-*middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The *born/coul/long* style is part of the KSPACE package. It is only
-enabled if LAMMPS was built with that package (which it is by
-default). See the :ref:`Making LAMMPS <start_3>` section
-for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style buck <pair_buck>`
-
-**Default:** none
-
-
-----------
-
-
-.. _FumiTosi:
-
-
-
-Fumi and Tosi, J Phys Chem Solids, 25, 31 (1964),
-Fumi and Tosi, J Phys Chem Solids, 25, 45 (1964).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_brownian.txt b/doc/html/_sources/pair_brownian.txt
deleted file mode 100644
index 19216ec42..000000000
--- a/doc/html/_sources/pair_brownian.txt
+++ /dev/null
@@ -1,159 +0,0 @@
-.. index:: pair_style brownian
-
-pair_style brownian command
-===========================
-
-pair_style brownian/omp command
-===============================
-
-pair_style brownian/poly command
-================================
-
-pair_style brownian/poly/omp command
-====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style mu flaglog flagfld cutinner cutoff t_target seed flagHI flagVF
-
-* style = *brownian* or *brownian/poly*
-* mu = dynamic viscosity (dynamic viscosity units)
-* flaglog = 0/1 log terms in the lubrication approximation on/off
-* flagfld = 0/1 to include/exclude Fast Lubrication Dynamics effects
-* cutinner = inner cutoff distance (distance units)
-* cutoff = outer cutoff for interactions (distance units)
-* t_target = target temp of the system (temperature units)
-* seed = seed for the random number generator (positive integer)
-* flagHI (optional) = 0/1 to include/exclude 1/r hydrodynamic interactions
-* flagVF (optional) = 0/1 to include/exclude volume fraction corrections in the long-range isotropic terms
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style brownian 1.5 1 1 2.01 2.5 2.0 5878567 (assuming radius = 1)
- pair_coeff 1 1 2.05 2.8
- pair_coeff * *
-
-Description
-"""""""""""
-
-Styles *brownian* and *brownian/poly* compute Brownian forces and
-torques on finite-size spherical particles. The former requires
-monodisperse spherical particles; the latter allows for polydisperse
-spherical particles.
-
-These pair styles are designed to be used with either the :doc:`pair_style lubricate <pair_lubricate>` or :doc:`pair_style lubricateU <pair_lubricateU>` commands to provide thermostatting
-when dissipative lubrication forces are acting. Thus the parameters
-*mu*\ , *flaglog*\ , *flagfld*\ , *cutinner*\ , and *cutoff* should be
-specified consistent with the settings in the lubrication pair styles.
-For details, refer to either of the lubrication pair styles.
-
-The *t_target* setting is used to specify the target temperature of
-the system. The random number *seed* is used to generate random
-numbers for the thermostatting procedure.
-
-The *flagHI* and *flagVF* settings are optional. Neither should be
-used, or both must be defined.
-
-
-----------
-
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* cutinner (distance units)
-* cutoff (distance units)
-
-The two coefficients are optional. If neither is specified, the two
-cutoffs specified in the pair_style command are used. Otherwise both
-must be specified.
-
-
-----------
-
-
-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 :doc:`this section <Section_accelerate>` 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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`this section <Section_accelerate>` of the manual for more
-instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the two cutoff distances for this
-pair style can be mixed. The default mix value is *geometric*\ . See
-the "pair_modify" command for details.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-These styles are part of the COLLOID package. They are only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <2_3>` section for more info.
-
-Only spherical monodisperse particles are allowed for pair_style
-brownian.
-
-Only spherical particles are allowed for pair_style brownian/poly.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style lubricate <pair_lubricate>`, :doc:`pair_style lubricateU <pair_lubricateU>`
-
-Default
-"""""""
-
-The default settings for the optional args are flagHI = 1 and flagVF =
-1.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_buck.txt b/doc/html/_sources/pair_buck.txt
deleted file mode 100644
index e70853269..000000000
--- a/doc/html/_sources/pair_buck.txt
+++ /dev/null
@@ -1,251 +0,0 @@
-.. index:: pair_style buck
-
-pair_style buck command
-=======================
-
-pair_style buck/gpu command
-===========================
-
-pair_style buck/intel command
-=============================
-
-pair_style buck/kk command
-==========================
-
-pair_style buck/omp command
-===========================
-
-pair_style buck/coul/cut command
-================================
-
-pair_style buck/coul/cut/gpu command
-====================================
-
-pair_style buck/coul/cut/intel command
-======================================
-
-pair_style buck/coul/cut/kk command
-===================================
-
-pair_style buck/coul/cut/omp command
-====================================
-
-pair_style buck/coul/long command
-=================================
-
-pair_style buck/coul/long/cs command
-====================================
-
-pair_style buck/coul/long/gpu command
-=====================================
-
-pair_style buck/coul/long/intel command
-=======================================
-
-pair_style buck/coul/long/kk command
-====================================
-
-pair_style buck/coul/long/omp command
-=====================================
-
-pair_style buck/coul/msm command
-================================
-
-pair_style buck/coul/msm/omp command
-====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *buck* or *buck/coul/cut* or *buck/coul/long* or *buck/coul/long/cs* or *buck/coul/msm*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *buck* args = cutoff
- cutoff = global cutoff for Buckingham interactions (distance units)
- *buck/coul/cut* args = cutoff (cutoff2)
- cutoff = global cutoff for Buckingham (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *buck/coul/long* or *buck/coul/long/cs* args = cutoff (cutoff2)
- cutoff = global cutoff for Buckingham (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *buck/coul/msm* args = cutoff (cutoff2)
- cutoff = global cutoff for Buckingham (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style buck 2.5
- pair_coeff * * 100.0 1.5 200.0
- pair_coeff * * 100.0 1.5 200.0 3.0
-
-.. parsed-literal::
-
- pair_style buck/coul/cut 10.0
- pair_style buck/coul/cut 10.0 8.0
- pair_coeff * * 100.0 1.5 200.0
- pair_coeff 1 1 100.0 1.5 200.0 9.0
- pair_coeff 1 1 100.0 1.5 200.0 9.0 8.0
-
-.. parsed-literal::
-
- pair_style buck/coul/long 10.0
- pair_style buck/coul/long/cs 10.0
- pair_style buck/coul/long 10.0 8.0
- pair_style buck/coul/long/cs 10.0 8.0
- pair_coeff * * 100.0 1.5 200.0
- pair_coeff 1 1 100.0 1.5 200.0 9.0
-
-.. parsed-literal::
-
- pair_style buck/coul/msm 10.0
- pair_style buck/coul/msm 10.0 8.0
- pair_coeff * * 100.0 1.5 200.0
- pair_coeff 1 1 100.0 1.5 200.0 9.0
-
-Description
-"""""""""""
-
-The *buck* style computes a Buckingham potential (exp/6 instead of
-Lennard-Jones 12/6) given by
-
-.. image:: Eqs/pair_buck.jpg
- :align: center
-
-where rho is an ionic-pair dependent length parameter, and Rc is the
-cutoff on both terms.
-
-The styles with *coul/cut* or *coul/long* or *coul/msm* add a
-Coulombic term as described for the :doc:`lj/cut <pair_lj>` pair styles.
-For *buck/coul/long* and *buc/coul/msm*\ , an additional damping factor
-is applied to the Coulombic term so it can be used in conjunction with
-the :doc:`kspace_style <kspace_style>` command and its *ewald* or *pppm*
-or *msm* option. The Coulombic cutoff specified for this style means
-that pairwise interactions within this distance are computed directly;
-interactions outside that distance are computed in reciprocal space.
-
-If one cutoff is specified for the *born/coul/cut* and
-*born/coul/long* and *born/coul/msm* styles, it is used for both the
-A,C and Coulombic terms. If two cutoffs are specified, the first is
-used as the cutoff for the A,C terms, and the second is the cutoff for
-the Coulombic term.
-
-Style *buck/coul/long/cs* is identical to *buck/coul/long* except that
-a term is added for the :ref:`core/shell model <howto_25>`
-to allow charges on core and shell particles to be separated by r =
-0.0.
-
-Note that these potentials are related to the :doc:`Born-Mayer-Huggins potential <pair_born>`.
-
-.. note::
-
- For all these pair styles, the terms with A and C are always
- cutoff. The additional Coulombic term can be cutoff or long-range (no
- cutoff) depending on whether the style name includes coul/cut or
- coul/long or coul/msm. If you wish the C/r^6 term to be long-range
- (no cutoff), then see the :doc:`pair_style buck/long/coul/long <pair_buck_long>` command.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* A (energy units)
-* rho (distance units)
-* C (energy-distance^6 units)
-* cutoff (distance units)
-* cutoff2 (distance units)
-
-The second coefficient, rho, must be greater than zero.
-
-The latter 2 coefficients are optional. If not specified, the global
-A,C and Coulombic cutoffs are used. If only one cutoff is specified,
-it is used as the cutoff for both A,C and Coulombic interactions for
-this type pair. If both coefficients are specified, they are used as
-the A,C and Coulombic cutoffs for this type pair. You cannot specify
-2 cutoffs for style *buck*\ , since it has no Coulombic terms.
-
-For *buck/coul/long* only the LJ cutoff can be specified since a
-Coulombic cutoff cannot be specified for an individual I,J type pair.
-All type pairs use the same global Coulombic cutoff specified in the
-pair_style command.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-These pair styles do not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-These styles support the :doc:`pair_modify <pair_modify>` shift option
-for the energy of the exp() and 1/r^6 portion of the pair interaction.
-
-The *buck/coul/long* pair style supports the
-:doc:`pair_modify <pair_modify>` table option to tabulate the
-short-range portion of the long-range Coulombic interaction.
-
-These styles support the pair_modify tail option for adding long-range
-tail corrections to energy and pressure for the A,C terms in the
-pair interaction.
-
-These styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do not need
-to be specified in an input script that reads a restart file.
-
-These styles can only be used via the *pair* keyword of the :doc:`run_style respa <run_style>` command. They do not support the *inner*\ ,
-*middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-The *buck/coul/long* style is part of the KSPACE package. The
-*buck/coul/long/cs* style is part of the CORESHELL package. They are
-only enabled if LAMMPS was built with that package (which it is by
-default). See the :ref:`Making LAMMPS <start_3>` section
-for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style born <pair_born>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_buck_long.txt b/doc/html/_sources/pair_buck_long.txt
deleted file mode 100644
index 328a60267..000000000
--- a/doc/html/_sources/pair_buck_long.txt
+++ /dev/null
@@ -1,195 +0,0 @@
-.. index:: pair_style buck/long/coul/long
-
-pair_style buck/long/coul/long command
-======================================
-
-pair_style buck/long/coul/long/omp command
-==========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style buck/long/coul/long flag_buck flag_coul cutoff (cutoff2)
-
-* flag_buck = *long* or *cut*
-.. parsed-literal::
-
- *long* = use Kspace long-range summation for the dispersion term 1/r^6
- *cut* = use a cutoff
-
-* flag_coul = *long* or *off*
-.. parsed-literal::
-
- *long* = use Kspace long-range summation for the Coulombic term 1/r
- *off* = omit the Coulombic term
-
-* cutoff = global cutoff for Buckingham (and Coulombic if only 1 cutoff) (distance units)
-* cutoff2 = global cutoff for Coulombic (optional) (distance units)
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style buck/long/coul/long cut off 2.5
- pair_style buck/long/coul/long cut long 2.5 4.0
- pair_style buck/long/coul/long long long 4.0
- pair_coeff * * 1 1
- pair_coeff 1 1 1 3 4
-
-Description
-"""""""""""
-
-The *buck/long/coul/long* style computes a Buckingham potential (exp/6
-instead of Lennard-Jones 12/6) and Coulombic potential, given by
-
-.. image:: Eqs/pair_buck.jpg
- :align: center
-
-.. image:: Eqs/pair_coulomb.jpg
- :align: center
-
-Rc is the cutoff. If one cutoff is specified in the pair_style
-command, it is used for both the Buckingham and Coulombic terms. If
-two cutoffs are specified, they are used as cutoffs for the Buckingham
-and Coulombic terms respectively.
-
-The purpose of this pair style is to capture long-range interactions
-resulting from both attractive 1/r^6 Buckingham and Coulombic 1/r
-interactions. This is done by use of the *flag_buck* and *flag_coul*
-settings. The ":ref:`Ismail <Ismail>` paper has more details on when it is
-appropriate to include long-range 1/r^6 interactions, using this
-potential.
-
-If *flag_buck* is set to *long*\ , no cutoff is used on the Buckingham
-1/r^6 dispersion term. The long-range portion can be calculated by
-using the :doc:`kspace_style ewald/disp or pppm/disp <kspace_style>`
-commands. The specified Buckingham cutoff then determines which
-portion of the Buckingham interactions are computed directly by the
-pair potential versus which part is computed in reciprocal space via
-the Kspace style. If *flag_buck* is set to *cut*\ , the Buckingham
-interactions are simply cutoff, as with :doc:`pair_style buck <pair_buck>`.
-
-If *flag_coul* is set to *long*\ , no cutoff is used on the Coulombic
-interactions. The long-range portion can calculated by using any of
-several :doc:`kspace_style <kspace_style>` command options such as
-*pppm* or *ewald*\ . Note that if *flag_buck* is also set to long, then
-the *ewald/disp* or *pppm/disp* Kspace style needs to be used to
-perform the long-range calculations for both the Buckingham and
-Coulombic interactions. If *flag_coul* is set to *off*\ , Coulombic
-interactions are not computed.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* A (energy units)
-* rho (distance units)
-* C (energy-distance^6 units)
-* cutoff (distance units)
-* cutoff2 (distance units)
-
-The second coefficient, rho, must be greater than zero.
-
-The latter 2 coefficients are optional. If not specified, the global
-Buckingham and Coulombic cutoffs specified in the pair_style command
-are used. If only one cutoff is specified, it is used as the cutoff
-for both Buckingham and Coulombic interactions for this type pair. If
-both coefficients are specified, they are used as the Buckingham and
-Coulombic cutoffs for this type pair. Note that if you are using
-*flag_buck* set to *long*\ , you cannot specify a Buckingham cutoff for
-an atom type pair, since only one global Buckingham cutoff is allowed.
-Similarly, if you are using *flag_coul* set to *long*\ , you cannot
-specify a Coulombic cutoff for an atom type pair, since only one
-global Coulombic cutoff is allowed.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair styles does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the exp() and 1/r^6 portion of the pair
-interaction, assuming *flag_buck* is *cut*\ .
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift option for the energy of the Buckingham portion of the pair
-interaction.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` table and
-table/disp options since they can tabulate the short-range portion of
-the long-range Coulombic and dispersion interactions.
-
-This pair style write its information to :doc:`binary restart files <restart>`, 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 supports the use of the *inner*\ , *middle*\ , and *outer*
-keywords of the :doc:`run_style respa <run_style>` command, meaning the
-pairwise forces can be partitioned by distance at different levels of
-the rRESPA hierarchy. See the :doc:`run_style <run_style>` command for
-details.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This style is part of the KSPACE package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. Note that
-the KSPACE package is installed by default.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Ismail:
-
-
-
-**(Ismail)** Ismail, Tsige, In 't Veld, Grest, Molecular Physics
-(accepted) (2007).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_charmm.txt b/doc/html/_sources/pair_charmm.txt
deleted file mode 100644
index 6816883d0..000000000
--- a/doc/html/_sources/pair_charmm.txt
+++ /dev/null
@@ -1,243 +0,0 @@
-.. index:: pair_style lj/charmm/coul/charmm
-
-pair_style lj/charmm/coul/charmm command
-========================================
-
-pair_style lj/charmm/coul/charmm/omp command
-============================================
-
-pair_style lj/charmm/coul/charmm/implicit command
-=================================================
-
-pair_style lj/charmm/coul/charmm/implicit/omp command
-=====================================================
-
-pair_style lj/charmm/coul/long command
-======================================
-
-pair_style lj/charmm/coul/long/gpu command
-==========================================
-
-pair_style lj/charmm/coul/long/intel command
-============================================
-
-pair_style lj/charmm/coul/long/opt command
-==========================================
-
-pair_style lj/charmm/coul/long/omp command
-==========================================
-
-pair_style lj/charmm/coul/msm command
-=====================================
-
-pair_style lj/charmm/coul/msm/omp command
-=========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *lj/charmm/coul/charmm* or *lj/charmm/coul/charmm/implicit* or *lj/charmm/coul/long* or *lj/charmm/coul/msm*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *lj/charmm/coul/charmm* args = inner outer (inner2) (outer2)
- inner, outer = global switching cutoffs for Lennard Jones (and Coulombic if only 2 args)
- inner2, outer2 = global switching cutoffs for Coulombic (optional)
- *lj/charmm/coul/charmm/implicit* args = inner outer (inner2) (outer2)
- inner, outer = global switching cutoffs for LJ (and Coulombic if only 2 args)
- inner2, outer2 = global switching cutoffs for Coulombic (optional)
- *lj/charmm/coul/long* args = inner outer (cutoff)
- inner, outer = global switching cutoffs for LJ (and Coulombic if only 2 args)
- cutoff = global cutoff for Coulombic (optional, outer is Coulombic cutoff if only 2 args)
- *lj/charmm/coul/msm* args = inner outer (cutoff)
- inner, outer = global switching cutoffs for LJ (and Coulombic if only 2 args)
- cutoff = global cutoff for Coulombic (optional, outer is Coulombic cutoff if only 2 args)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/charmm/coul/charmm 8.0 10.0
- pair_style lj/charmm/coul/charmm 8.0 10.0 7.0 9.0
- pair_coeff * * 100.0 2.0
- pair_coeff 1 1 100.0 2.0 150.0 3.5
-
-.. parsed-literal::
-
- pair_style lj/charmm/coul/charmm/implicit 8.0 10.0
- pair_style lj/charmm/coul/charmm/implicit 8.0 10.0 7.0 9.0
- pair_coeff * * 100.0 2.0
- pair_coeff 1 1 100.0 2.0 150.0 3.5
-
-.. parsed-literal::
-
- pair_style lj/charmm/coul/long 8.0 10.0
- pair_style lj/charmm/coul/long 8.0 10.0 9.0
- pair_coeff * * 100.0 2.0
- pair_coeff 1 1 100.0 2.0 150.0 3.5
-
-.. parsed-literal::
-
- pair_style lj/charmm/coul/msm 8.0 10.0
- pair_style lj/charmm/coul/msm 8.0 10.0 9.0
- pair_coeff * * 100.0 2.0
- pair_coeff 1 1 100.0 2.0 150.0 3.5
-
-Description
-"""""""""""
-
-The *lj/charmm* styles compute LJ and Coulombic interactions with an
-additional switching function S(r) that ramps the energy and force
-smoothly to zero between an inner and outer cutoff. It is a widely
-used potential in the `CHARMM <http://www.scripps.edu/brooks>`_ MD code.
-See :ref:`(MacKerell) <pair-MacKerell>` for a description of the CHARMM force
-field.
-
-.. image:: Eqs/pair_charmm.jpg
- :align: center
-
-Both the LJ and Coulombic terms require an inner and outer cutoff.
-They can be the same for both formulas or different depending on
-whether 2 or 4 arguments are used in the pair_style command. In each
-case, the inner cutoff distance must be less than the outer cutoff.
-It it typical to make the difference between the 2 cutoffs about 1.0
-Angstrom.
-
-Style *lj/charmm/coul/charmm/implicit* computes the same formulas as
-style *lj/charmm/coul/charmm* except that an additional 1/r term is
-included in the Coulombic formula. The Coulombic energy thus varies
-as 1/r^2. This is effectively a distance-dependent dielectric term
-which is a simple model for an implicit solvent with additional
-screening. It is designed for use in a simulation of an unsolvated
-biomolecule (no explicit water molecules).
-
-Styles *lj/charmm/coul/long* and *lj/charmm/coul/msm* compute the same
-formulas as style *lj/charmm/coul/charmm* except that an additional
-damping factor is applied to the Coulombic term, as described for the
-:doc:`lj/cut <pair_lj>` pair styles. Only one Coulombic cutoff is
-specified for *lj/charmm/coul/long* and *lj/charmm/coul/msm*\ ; if only
-2 arguments are used in the pair_style command, then the outer LJ
-cutoff is used as the single Coulombic cutoff.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* epsilon_14 (energy units)
-* sigma_14 (distance units)
-
-Note that sigma is defined in the LJ formula as the zero-crossing
-distance for the potential, not as the energy minimum at 2^(1/6)
-sigma.
-
-The latter 2 coefficients are optional. If they are specified, they
-are used in the LJ formula between 2 atoms of these types which are
-also first and fourth atoms in any dihedral. No cutoffs are specified
-because this CHARMM force field does not allow varying cutoffs for
-individual atom pairs; all pairs use the global cutoff(s) specified in
-the pair_style command.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the epsilon, sigma, epsilon_14,
-and sigma_14 coefficients for all of the lj/charmm pair styles can be
-mixed. The default mix value is *arithmetic* to coincide with the
-usual settings for the CHARMM force field. See the "pair_modify"
-command for details.
-
-None of the lj/charmm pair styles support the
-:doc:`pair_modify <pair_modify>` shift option, since the Lennard-Jones
-portion of the pair interaction is smoothed to 0.0 at the cutoff.
-
-The *lj/charmm/coul/long* style supports the
-:doc:`pair_modify <pair_modify>` table option since it can tabulate the
-short-range portion of the long-range Coulombic interaction.
-
-None of the lj/charmm pair styles support the
-:doc:`pair_modify <pair_modify>` tail option for adding long-range tail
-corrections to energy and pressure, since the Lennard-Jones portion of
-the pair interaction is smoothed to 0.0 at the cutoff.
-
-All of the lj/charmm pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do
-not need to be specified in an input script that reads a restart file.
-
-The lj/charmm/coul/long pair style supports the use of the *inner*\ ,
-*middle*\ , and *outer* keywords of the :doc:`run_style respa <run_style>`
-command, meaning the pairwise forces can be partitioned by distance at
-different levels of the rRESPA hierarchy. The other styles only
-support the *pair* keyword of run_style respa. See the
-:doc:`run_style <run_style>` command for details.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The *lj/charmm/coul/charmm* and *lj/charmm/coul/charmm/implicit*
-styles are part of the MOLECULE package. The *lj/charmm/coul/long*
-style is part of the KSPACE package. They are only enabled if LAMMPS
-was built with those packages. See the :ref:`Making LAMMPS <start_3>` section for more info. Note that
-the MOLECULE and KSPACE packages are installed by default.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _pair-MacKerell:
-
-
-
-**(MacKerell)** MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field,
-Fischer, Gao, Guo, Ha, et al, J Phys Chem, 102, 3586 (1998).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_class2.txt b/doc/html/_sources/pair_class2.txt
deleted file mode 100644
index 1cec91e6c..000000000
--- a/doc/html/_sources/pair_class2.txt
+++ /dev/null
@@ -1,214 +0,0 @@
-.. index:: pair_style lj/class2
-
-pair_style lj/class2 command
-============================
-
-pair_style lj/class2/gpu command
-================================
-
-pair_style lj/class2/kk command
-===============================
-
-pair_style lj/class2/omp command
-================================
-
-pair_style lj/class2/coul/cut command
-=====================================
-
-pair_style lj/class2/coul/cut/kk command
-========================================
-
-pair_style lj/class2/coul/cut/omp command
-=========================================
-
-pair_style lj/class2/coul/long command
-======================================
-
-pair_style lj/class2/coul/long/gpu command
-==========================================
-
-pair_style lj/class2/coul/long/kk command
-=========================================
-
-pair_style lj/class2/coul/long/omp command
-==========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *lj/class2* or *lj/class2/coul/cut* or *lj/class2/coul/long*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *lj/class2* args = cutoff
- cutoff = global cutoff for class 2 interactions (distance units)
- *lj/class2/coul/cut* args = cutoff (cutoff2)
- cutoff = global cutoff for class 2 (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *lj/class2/coul/long* args = cutoff (cutoff2)
- cutoff = global cutoff for class 2 (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/class2 10.0
- pair_coeff * * 100.0 2.5
- pair_coeff 1 2* 100.0 2.5 9.0
-
-.. parsed-literal::
-
- pair_style lj/class2/coul/cut 10.0
- pair_style lj/class2/coul/cut 10.0 8.0
- pair_coeff * * 100.0 3.0
- pair_coeff 1 1 100.0 3.5 9.0
- pair_coeff 1 1 100.0 3.5 9.0 9.0
-
-.. parsed-literal::
-
- pair_style lj/class2/coul/long 10.0
- pair_style lj/class2/coul/long 10.0 8.0
- pair_coeff * * 100.0 3.0
- pair_coeff 1 1 100.0 3.5 9.0
-
-Description
-"""""""""""
-
-The *lj/class2* styles compute a 6/9 Lennard-Jones potential given by
-
-.. image:: Eqs/pair_class2.jpg
- :align: center
-
-Rc is the cutoff.
-
-The *lj/class2/coul/cut* and *lj/class2/coul/long* styles add a
-Coulombic term as described for the :doc:`lj/cut <pair_lj>` pair styles.
-
-See :ref:`(Sun) <pair-Sun>` for a description of the COMPASS class2 force field.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* cutoff1 (distance units)
-* cutoff2 (distance units)
-
-The latter 2 coefficients are optional. If not specified, the global
-class 2 and Coulombic cutoffs are used. If only one cutoff is
-specified, it is used as the cutoff for both class 2 and Coulombic
-interactions for this type pair. If both coefficients are specified,
-they are used as the class 2 and Coulombic cutoffs for this type pair.
-You cannot specify 2 cutoffs for style *lj/class2*\ , since it has no
-Coulombic terms.
-
-For *lj/class2/coul/long* only the class 2 cutoff can be specified
-since a Coulombic cutoff cannot be specified for an individual I,J
-type pair. All type pairs use the same global Coulombic cutoff
-specified in the pair_style command.
-
-
-----------
-
-
-If the pair_coeff command is not used to define coefficients for a
-particular I != J type pair, the mixing rule for epsilon and sigma for
-all class2 potentials is to use the *sixthpower* formulas documented
-by the :doc:`pair_modify <pair_modify>` command. The :doc:`pair_modify mix <pair_modify>` setting is thus ignored for class2 potentials
-for epsilon and sigma. However it is still followed for mixing the
-cutoff distance.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 all of the lj/class2 pair styles can be mixed.
-Epsilon and sigma are always mixed with the value *sixthpower*\ . The
-cutoff distance is mixed by whatever option is set by the pair_modify
-command (default = geometric). See the "pair_modify" command for
-details.
-
-All of the lj/class2 pair styles support the
-:doc:`pair_modify <pair_modify>` shift option for the energy of the
-Lennard-Jones portion of the pair interaction.
-
-The *lj/class2/coul/long* pair style does not support the
-:doc:`pair_modify <pair_modify>` table option since a tabulation
-capability has not yet been added to this potential.
-
-All of the lj/class2 pair styles support the
-:doc:`pair_modify <pair_modify>` tail option for adding a long-range
-tail correction to the energy and pressure of the Lennard-Jones
-portion of the pair interaction.
-
-All of the lj/class2 pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do
-not need to be specified in an input script that reads a restart file.
-
-All of the lj/class2 pair styles can only be used via the *pair*
-keyword of the :doc:`run_style respa <run_style>` command. They do not
-support the *inner*\ , *middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-These styles are part of the CLASS2 package. They are only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _pair-Sun:
-
-
-
-**(Sun)** Sun, J Phys Chem B 102, 7338-7364 (1998).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_coeff.txt b/doc/html/_sources/pair_coeff.txt
deleted file mode 100644
index 6c00391d9..000000000
--- a/doc/html/_sources/pair_coeff.txt
+++ /dev/null
@@ -1,170 +0,0 @@
-.. index:: pair_coeff
-
-pair_coeff command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_coeff I J args
-
-* I,J = atom types (see asterisk form below)
-* args = coefficients for one or more pairs of atom types
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_coeff 1 2 1.0 1.0 2.5
- pair_coeff 2 * 1.0 1.0
- pair_coeff 3* 1*2 1.0 1.0 2.5
- pair_coeff * * 1.0 1.0
- pair_coeff * * nialhjea 1 1 2
- pair_coeff * 3 morse.table ENTRY1
- pair_coeff 1 2 lj/cut 1.0 1.0 2.5 (for pair_style hybrid)
-
-Description
-"""""""""""
-
-Specify the pairwise force field coefficients for one or more pairs of
-atom types. The number and meaning of the coefficients depends on the
-pair style. Pair coefficients can also be set in the data file read
-by the :doc:`read_data <read_data>` command or in a restart file.
-
-I and J can be specified in one of two ways. Explicit numeric values
-can be used for each, as in the 1st example above. I <= J is
-required. LAMMPS sets the coefficients for the symmetric J,I
-interaction to the same values.
-
-A wildcard asterisk can be used in place of or in conjunction with the
-I,J arguments to set the coefficients for multiple pairs of atom
-types. This takes the form "*" or "*n" or "n*" or "m*n". If N = the
-number of atom types, then an asterisk with no numeric values means all
-types from 1 to N. A leading asterisk means all types from 1 to n
-(inclusive). A trailing asterisk means all types from n to N
-(inclusive). A middle asterisk means all types from m to n
-(inclusive). Note that only type pairs with I <= J are considered; if
-asterisks imply type pairs where J < I, they are ignored.
-
-Note that a pair_coeff command can override a previous setting for the
-same I,J pair. For example, these commands set the coeffs for all I,J
-pairs, then overwrite the coeffs for just the I,J = 2,3 pair:
-
-.. parsed-literal::
-
- pair_coeff * * 1.0 1.0 2.5
- pair_coeff 2 3 2.0 1.0 1.12
-
-A line in a data file that specifies pair coefficients uses the exact
-same format as the arguments of the pair_coeff command in an input
-script, with the exception of the I,J type arguments. In each line of
-the "Pair Coeffs" section of a data file, only a single type I is
-specified, which sets the coefficients for type I interacting with
-type I. This is because the section has exactly N lines, where N =
-the number of atom types. For this reason, the wild-card asterisk
-should also not be used as part of the I argument. Thus in a data
-file, the line corresponding to the 1st example above would be listed
-as
-
-.. parsed-literal::
-
- 2 1.0 1.0 2.5
-
-For many potentials, if coefficients for type pairs with I != J are
-not set explicitly by a pair_coeff command, the values are inferred
-from the I,I and J,J settings by mixing rules; see the
-:doc:`pair_modify <pair_modify>` command for a discussion. Details on
-this option as it pertains to individual potentials are described on
-the doc page for the potential.
-
-Many pair styles, typically for many-body potentials, use tabulated
-potential files as input, when specifying the pair_coeff command.
-Potential files provided with LAMMPS are in the potentials directory
-of the distribution. For some potentials, such as EAM, other archives
-of suitable files can be found on the Web. They can be used with
-LAMMPS so long as they are in the format LAMMPS expects, as discussed
-on the individual doc pages.
-
-When a pair_coeff command using a potential file is specified, LAMMPS
-looks for the potential file in 2 places. First it looks in the
-location specified. E.g. if the file is specified as "niu3.eam", it
-is looked for in the current working directory. If it is specified as
-"../potentials/niu3.eam", then it is looked for in the potentials
-directory, assuming it is a sister directory of the current working
-directory. If the file is not found, it is then looked for in the
-directory specified by the LAMMPS_POTENTIALS environment variable.
-Thus if this is set to the potentials directory in the LAMMPS distro,
-then you can use those files from anywhere on your system, without
-copying them into your working directory. Environment variables are
-set in different ways for different shells. Here are example settings
-for
-
-csh, tcsh:
-
-.. parsed-literal::
-
- % setenv LAMMPS_POTENTIALS /path/to/lammps/potentials
-
-bash:
-
-.. parsed-literal::
-
- % export LAMMPS_POTENTIALS=/path/to/lammps/potentials
-
-Windows:
-
-.. parsed-literal::
-
- % set LAMMPS_POTENTIALS="C:\\Path to LAMMPS\\Potentials"
-
-
-----------
-
-
-The alphabetic list of pair styles defined in LAMMPS is given on the
-:doc:`pair_style <pair_style>` doc page. They are also given in more
-compact form in the pair section of :ref:`this page <cmd_5>`.
-
-Click on the style to display the formula it computes, arguments
-specified in the pair_style command, and coefficients specified by the
-associated :doc:`pair_coeff <pair_coeff>` command.
-
-Note that there are also additional pair styles (not listed on the
-:doc:`pair_style <pair_style>` doc page) submitted by users which are
-included in the LAMMPS distribution. The list of these with links to
-the individual styles are given in the pair section of :ref:`this page <cmd_5>`.
-
-There are also additional accelerated pair styles (not listed on the
-:doc:`pair_style <pair_style>` doc page) included in the LAMMPS
-distribution for faster performance on CPUs and GPUs. The list of
-these with links to the individual styles are given in the pair
-section of :ref:`this page <cmd_5>`.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command must come after the simulation box is defined by a
-:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`, or
-:doc:`create_box <create_box>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style <pair_style>`, :doc:`pair_modify <pair_modify>`,
-:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`,
-:doc:`pair_write <pair_write>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_colloid.txt b/doc/html/_sources/pair_colloid.txt
deleted file mode 100644
index 80723836d..000000000
--- a/doc/html/_sources/pair_colloid.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-.. index:: pair_style colloid
-
-pair_style colloid command
-==========================
-
-pair_style colloid/gpu command
-==============================
-
-pair_style colloid/omp command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style colloid cutoff
-
-* cutoff = global cutoff for colloidal interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style colloid 10.0
- pair_coeff * * 25 1.0 10.0 10.0
- pair_coeff 1 1 144 1.0 0.0 0.0 3.0
- pair_coeff 1 2 75.398 1.0 0.0 10.0 9.0
- pair_coeff 2 2 39.478 1.0 10.0 10.0 25.0
-
-Description
-"""""""""""
-
-Style *colloid* computes pairwise interactions between large colloidal
-particles and small solvent particles using 3 formulas. A colloidal
-particle has a size > sigma; a solvent particle is the usual
-Lennard-Jones particle of size sigma.
-
-The colloid-colloid interaction energy is given by
-
-.. image:: Eqs/pair_colloid_cc.jpg
- :align: center
-
-where A_cc is the Hamaker constant, a1 and a2 are the radii of the two
-colloidal particles, and Rc is the cutoff. This equation results from
-describing each colloidal particle as an integrated collection of
-Lennard-Jones particles of size sigma and is derived in
-:ref:`(Everaers) <Everaers>`.
-
-The colloid-solvent interaction energy is given by
-
-.. image:: Eqs/pair_colloid_cs.jpg
- :align: center
-
-where A_cs is the Hamaker constant, a is the radius of the colloidal
-particle, and Rc is the cutoff. This formula is derived from the
-colloid-colloid interaction, letting one of the particle sizes go to
-zero.
-
-The solvent-solvent interaction energy is given by the usual
-Lennard-Jones formula
-
-.. image:: Eqs/pair_colloid_ss.jpg
- :align: center
-
-with A_ss set appropriately, which results from letting both particle
-sizes go to zero.
-
-When used in combination with :doc:`pair_style yukawa/colloid <pair_colloid>`, the two terms become the so-called
-DLVO potential, which combines electrostatic repulsion and van der
-Waals attraction.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* A (energy units)
-* sigma (distance units)
-* d1 (distance units)
-* d2 (distance units)
-* cutoff (distance units)
-
-A is the Hamaker energy prefactor and should typically be set as
-follows:
-
-* A_cc = colloid/colloid = 4 pi^2 = 39.5
-* A_cs = colloid/solvent = sqrt(A_cc*A_ss)
-* A_ss = solvent/solvent = 144 (assuming epsilon = 1, so that 144/36 = 4)
-
-Sigma is the size of the solvent particle or the constituent particles
-integrated over in the colloidal particle and should typically be set
-as follows:
-
-* Sigma_cc = colloid/colloid = 1.0
-* Sigma_cs = colloid/solvent = arithmetic mixing between colloid sigma and solvent sigma
-* Sigma_ss = solvent/solvent = 1.0 or whatever size the solvent particle is
-
-Thus typically Sigma_cs = 1.0, unless the solvent particle's size !=
-1.0.
-
-D1 and d2 are particle diameters, so that d1 = 2*a1 and d2 = 2*a2 in
-the formulas above. Both d1 and d2 must be values >= 0. If d1 > 0
-and d2 > 0, then the pair interacts via the colloid-colloid formula
-above. If d1 = 0 and d2 = 0, then the pair interacts via the
-solvent-solvent formula. I.e. a d value of 0 is a Lennard-Jones
-particle of size sigma. If either d1 = 0 or d2 = 0 and the other is
-larger, then the pair interacts via the colloid-solvent formula.
-
-Note that the diameter of a particular particle type may appear in
-multiple pair_coeff commands, as it interacts with other particle
-types. You should insure the particle diameter is specified
-consistently each time it appears.
-
-The last coefficient is optional. If not specified, the global cutoff
-specified in the pair_style command is used. However, you typically
-want different cutoffs for interactions between different particle
-sizes. E.g. if colloidal particles of diameter 10 are used with
-solvent particles of diameter 1, then a solvent-solvent cutoff of 2.5
-would correspond to a colloid-colloid cutoff of 25. A good
-rule-of-thumb is to use a colloid-solvent cutoff that is half the big
-diameter + 4 times the small diameter. I.e. 9 = 5 + 4 for the
-colloid-solvent cutoff in this case.
-
-.. note::
-
- When using pair_style colloid for a mixture with 2 (or more)
- widely different particles sizes (e.g. sigma=10 colloids in a
- background sigma=1 LJ fluid), you will likely want to use these
- commands for efficiency: :doc:`neighbor multi <neighbor>` and
- :doc:`comm_modify multi <comm_modify>`.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the A, sigma, d1, and d2
-coefficients and cutoff distance for this pair style can be mixed. A
-is an energy value mixed like a LJ epsilon. D1 and d2 are distance
-values and are mixed like sigma. The default mix value is
-*geometric*\ . See the "pair_modify" command for details.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This style is part of the COLLOID package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Normally, this pair style should be used with finite-size particles
-which have a diameter, e.g. see the :doc:`atom_style sphere <atom_style>` command. However, this is not a requirement,
-since the only definition of particle size is via the pair_coeff
-parameters for each type. In other words, the physical radius of the
-particle is ignored. Thus you should insure that the d1,d2 parameters
-you specify are consistent with the physical size of the particles of
-that type.
-
-Per-particle polydispersity is not yet supported by this pair style;
-only per-type polydispersity is enabled via the pair_coeff parameters.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Everaers:
-
-
-
-**(Everaers)** Everaers, Ejtehadi, Phys Rev E, 67, 041710 (2003).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_comb.txt b/doc/html/_sources/pair_comb.txt
deleted file mode 100644
index 1e083e15c..000000000
--- a/doc/html/_sources/pair_comb.txt
+++ /dev/null
@@ -1,230 +0,0 @@
-.. index:: pair_style comb
-
-pair_style comb command
-=======================
-
-pair_style comb/omp command
-===========================
-
-pair_style comb3 command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style comb
- pair_style comb3 keyword
-
-.. parsed-literal::
-
- keyword = *polar*
- *polar* value = *polar_on* or *polar_off* = whether or not to include atomic polarization
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style comb
- pair_coeff * * ../potentials/ffield.comb Si
- pair_coeff * * ../potentials/ffield.comb Hf Si O
-
-.. parsed-literal::
-
- pair_style comb3 polar_off
- pair_coeff * * ../potentials/ffield.comb3 O Cu N C O
-
-Description
-"""""""""""
-
-Style *comb* computes the second-generation variable charge COMB
-(Charge-Optimized Many-Body) potential. Style *comb3* computes the
-third-generation COMB potential. These COMB potentials are described
-in :ref:`(COMB) <COMB>` and :ref:`(COMB3) <COMB3>`. Briefly, the total energy
-*E<sub>T</sub>* of a system of atoms is given by
-
-.. image:: Eqs/pair_comb1.jpg
- :align: center
-
-where *E<sub>i</sub><sup>self</sup>* is the self-energy of atom *i*
-(including atomic ionization energies and electron affinities),
-*E<sub>ij</sub><sup>short</sup>* is the bond-order potential between
-atoms *i* and *j*\ ,
-*E<sub>ij</sub><sup>Coul</sup>* is the Coulomb interactions,
-*E<sup>polar</sup>* is the polarization term for organic systems
-(style *comb3* only),
-*E<sup>vdW</sup>* is the van der Waals energy (style *comb3* only),
-*E<sup>barr</sup>* is a charge barrier function, and
-*E<sup>corr</sup>* are angular correction terms.
-
-The COMB potentials (styles *comb* and *comb3*\ ) are variable charge
-potentials. The equilibrium charge on each atom is calculated by the
-electronegativity equalization (QEq) method. See :ref:`Rick <Rick>` for
-further details. This is implemented by the :doc:`fix qeq/comb <fix_qeq_comb>` command, which should normally be
-specified in the input script when running a model with the COMB
-potential. The :doc:`fix qeq/comb <fix_qeq_comb>` command has options
-that determine how often charge equilibration is performed, its
-convergence criterion, and which atoms are included in the
-calculation.
-
-Only a single pair_coeff command is used with the *comb* and *comb3*
-styles which specifies the COMB potential file with parameters for all
-needed elements. These are mapped to LAMMPS atom types by specifying
-N additional arguments after the potential file in the pair_coeff
-command, where N is the number of LAMMPS atom types.
-
-For example, if your LAMMPS simulation of a Si/SiO<sub>2</sub>/
-HfO<sub>2</sub> interface has 4 atom types, and you want the 1st and
-last to be Si, the 2nd to be Hf, and the 3rd to be O, and you would
-use the following pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * ../potentials/ffield.comb Si Hf O Si
-
-The first two arguments must be * * so as to span all LAMMPS atom
-types. The first and last Si arguments map LAMMPS atom types 1 and 4
-to the Si element in the *ffield.comb* file. The second Hf argument
-maps LAMMPS atom type 2 to the Hf element, and the third O argument
-maps LAMMPS atom type 3 to the O element in the potential file. If a
-mapping value is specified as NULL, the mapping is not performed.
-This can be used when a *comb* 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.
-
-For style *comb*\ , the provided potential file *ffield.comb* contains
-all currently-available 2nd generation COMB parameterizations: for Si,
-Cu, Hf, Ti, O, their oxides and Zr, Zn and U metals. For style
-*comb3*\ , the potential file *ffield.comb3* contains all
-currently-available 3rd generation COMB paramterizations: O, Cu, N, C,
-H, Ti, Zn and Zr. The status of the optimization of the compounds, for
-example Cu<sub>2</sub>O, TiN and hydrocarbons, are given in the
-following table:
-
-.. image:: Eqs/pair_comb2.jpg
- :align: center
-
-For style *comb3*\ , in addition to ffield.comb3, a special parameter
-file, *lib.comb3*\ , that is exclusively used for C/O/H systems, will be
-automatically loaded if carbon atom is detected in LAMMPS input
-structure. This file must be in your working directory or in the
-directory pointed to by the environment variable LAMMPS_POTENTIALS, as
-described on the :doc:`pair_coeff <pair_coeff>` command doc page.
-
-Keyword *polar* indicates whether the force field includes
-the atomic polarization. Since the equilibration of the polarization
-has not yet been implemented, it can only set polar_off at present.
-
-.. note::
-
- You can not use potential file *ffield.comb* with style *comb3*\ ,
- nor file *ffield.comb3* with style *comb*\ .
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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.
-
-These pair styles does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-These pair styles do not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style, pair_coeff, and :doc:`fix qeq/comb <fix_qeq_comb>` commands in an input script that reads a
-restart file.
-
-These pair styles can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-These pair styles are part of the MANYBODY package. It is only enabled
-if LAMMPS was built with that package (which it is by default). See
-the :ref:`Making LAMMPS <start_3>` section for more info.
-
-These pair styles requires the :doc:`newton <newton>` setting to be "on"
-for pair interactions.
-
-The COMB potentials in the *ffield.comb* and *ffield.comb3* files provided
-with LAMMPS (see the potentials directory) are parameterized for metal
-:doc:`units <units>`. You can use the COMB potential with any LAMMPS
-units, but you would need to create your own COMB potential file with
-coefficients listed in the appropriate units if your simulation
-doesn't use "metal" units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style <pair_style>`, :doc:`pair_coeff <pair_coeff>`,
-:doc:`fix qeq/comb <fix_qeq_comb>`
-
-**Default:** none
-
-
-----------
-
-
-.. _COMB:
-
-
-
-**(COMB)** T.-R. Shan, B. D. Devine, T. W. Kemper, S. B. Sinnott, and
-S. R. Phillpot, Phys. Rev. B 81, 125328 (2010)
-
-.. _COMB3:
-
-
-
-**(COMB3)** T. Liang, T.-R. Shan, Y.-T. Cheng, B. D. Devine, M. Noordhoek,
-Y. Li, Z. Lu, S. R. Phillpot, and S. B. Sinnott, Mat. Sci. & Eng: R 74,
-255-279 (2013).
-
-.. _Rick:
-
-
-
-**(Rick)** S. W. Rick, S. J. Stuart, B. J. Berne, J Chem Phys 101, 6141
-(1994).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_coul.txt b/doc/html/_sources/pair_coul.txt
deleted file mode 100644
index 992032f74..000000000
--- a/doc/html/_sources/pair_coul.txt
+++ /dev/null
@@ -1,449 +0,0 @@
-.. index:: pair_style coul/cut
-
-pair_style coul/cut command
-===========================
-
-pair_style coul/cut/gpu command
-===============================
-
-pair_style coul/cut/kk command
-==============================
-
-pair_style coul/cut/omp command
-===============================
-
-pair_style coul/debye command
-=============================
-
-pair_style coul/debye/gpu command
-=================================
-
-pair_style coul/debye/kk command
-================================
-
-pair_style coul/debye/omp command
-=================================
-
-pair_style coul/dsf command
-===========================
-
-pair_style coul/dsf/gpu command
-===============================
-
-pair_style coul/dsf/kk command
-==============================
-
-pair_style coul/dsf/omp command
-===============================
-
-pair_style coul/long command
-============================
-
-pair_style coul/long/cs command
-===============================
-
-pair_style coul/long/omp command
-================================
-
-pair_style coul/long/gpu command
-================================
-
-pair_style coul/long/kk command
-===============================
-
-pair_style coul/msm command
-===========================
-
-pair_style coul/msm/omp command
-===============================
-
-pair_style coul/streitz command
-===============================
-
-pair_style coul/wolf command
-============================
-
-pair_style coul/wolf/kk command
-===============================
-
-pair_style coul/wolf/omp command
-================================
-
-pair_style tip4p/cut command
-============================
-
-pair_style tip4p/long command
-=============================
-
-pair_style tip4p/cut/omp command
-================================
-
-pair_style tip4p/long/omp command
-=================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style coul/cut cutoff
- pair_style coul/debye kappa cutoff
- pair_style coul/dsf alpha cutoff
- pair_style coul/long cutoff
- pair_style coul/long/cs cutoff
- pair_style coul/long/gpu cutoff
- pair_style coul/wolf alpha cutoff
- pair_style coul/streitz cutoff keyword alpha
- pair_style tip4p/cut otype htype btype atype qdist cutoff
- pair_style tip4p/long otype htype btype atype qdist cutoff
-
-* cutoff = global cutoff for Coulombic interactions
-* kappa = Debye length (inverse distance units)
-* alpha = damping parameter (inverse distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style coul/cut 2.5
- pair_coeff * *
- pair_coeff 2 2 3.5
-
-.. parsed-literal::
-
- pair_style coul/debye 1.4 3.0
- pair_coeff * *
- pair_coeff 2 2 3.5
-
-.. parsed-literal::
-
- pair_style coul/dsf 0.05 10.0
- pair_coeff * *
-
-.. parsed-literal::
-
- pair_style coul/long 10.0
- pair_style coul/long/cs 10.0
- pair_coeff * *
-
-.. parsed-literal::
-
- pair_style coul/msm 10.0
- pair_coeff * *
-
-.. parsed-literal::
-
- pair_style coul/wolf 0.2 9.0
- pair_coeff * *
-
-.. parsed-literal::
-
- pair_style coul/streitz 12.0 ewald
- pair_style coul/streitz 12.0 wolf 0.30
- pair_coeff * * AlO.streitz Al O
-
-.. parsed-literal::
-
- pair_style tip4p/cut 1 2 7 8 0.15 12.0
- pair_coeff * *
-
-.. parsed-literal::
-
- pair_style tip4p/long 1 2 7 8 0.15 10.0
- pair_coeff * *
-
-Description
-"""""""""""
-
-The *coul/cut* style computes the standard Coulombic interaction
-potential given by
-
-.. image:: Eqs/pair_coulomb.jpg
- :align: center
-
-where C is an energy-conversion constant, Qi and Qj are the charges on
-the 2 atoms, and epsilon is the dielectric constant which can be set
-by the :doc:`dielectric <dielectric>` command. The cutoff Rc truncates
-the interaction distance.
-
-
-----------
-
-
-Style *coul/debye* adds an additional exp() damping factor to the
-Coulombic term, given by
-
-.. image:: Eqs/pair_debye.jpg
- :align: center
-
-where kappa is the Debye length. This potential is another way to
-mimic the screening effect of a polar solvent.
-
-
-----------
-
-
-Style *coul/dsf* computes Coulombic interactions via the damped
-shifted force model described in :ref:`Fennell <Fennell>`, given by:
-
-.. image:: Eqs/pair_coul_dsf.jpg
- :align: center
-
-where *alpha* is the damping parameter and erfc() is the
-complementary error-function. The potential corrects issues in the
-Wolf model (described below) to provide consistent forces and energies
-(the Wolf potential is not differentiable at the cutoff) and smooth
-decay to zero.
-
-
-----------
-
-
-Style *coul/wolf* computes Coulombic interactions via the Wolf
-summation method, described in :ref:`Wolf <Wolf>`, given by:
-
-.. image:: Eqs/pair_coul_wolf.jpg
- :align: center
-
-where *alpha* is the damping parameter, and erc() and erfc() are
-error-fuction and complementary error-function terms. This potential
-is essentially a short-range, spherically-truncated,
-charge-neutralized, shifted, pairwise *1/r* summation. With a
-manipulation of adding and substracting a self term (for i = j) to the
-first and second term on the right-hand-side, respectively, and a
-small enough *alpha* damping parameter, the second term shrinks and
-the potential becomes a rapidly-converging real-space summation. With
-a long enough cutoff and small enough alpha parameter, the energy and
-forces calcluated by the Wolf summation method approach those of the
-Ewald sum. So it is a means of getting effective long-range
-interactions with a short-range potential.
-
-
-----------
-
-
-Style *coul/streitz* is the Coulomb pair interaction defined as part
-of the Streitz-Mintmire potential, as described in :ref:`this paper <Streitz>`, in which charge distribution about an atom is modeled
-as a Slater 1\ *s* orbital. More details can be found in the referenced
-paper. To fully reproduce the published Streitz-Mintmire potential,
-which is a variable charge potential, style *coul/streitz* must be
-used with :doc:`pair_style eam/alloy <pair_eam>` (or some other
-short-range potential that has been parameterized appropriately) via
-the :doc:`pair_style hybrid/overlay <pair_hybrid>` command. Likewise,
-charge equilibration must be performed via the :doc:`fix qeq/slater <fix_qeq>` command. For example:
-
-.. parsed-literal::
-
- pair_style hybrid/overlay coul/streitz 12.0 wolf 0.31 eam/alloy
- pair_coeff * * coul/streitz AlO.streitz Al O
- pair_coeff * * eam/alloy AlO.eam.alloy Al O
- fix 1 all qeq/slater 1 12.0 1.0e-6 100 coul/streitz
-
-The keyword *wolf* in the coul/streitz command denotes computing
-Coulombic interactions via Wolf summation. An additional damping
-parameter is required for the Wolf summation, as described for the
-coul/wolf potential above. Alternatively, Coulombic interactions can
-be computed via an Ewald summation. For example:
-
-.. parsed-literal::
-
- pair_style hybrid/overlay coul/streitz 12.0 ewald eam/alloy
- kspace_style ewald 1e-6
-
-Keyword *ewald* does not need a damping parameter, but a
-:doc:`kspace_style <kspace_style>` must be defined, which can be style
-*ewald* or *pppm*\ . The Ewald method was used in Streitz and
-Mintmire's original paper, but a Wolf summation offers a speed-up in
-some cases.
-
-For the fix qeq/slater command, the *qfile* can be a filename that
-contains QEq parameters as discussed on the :doc:`fix qeq <fix_qeq>`
-command doc page. Alternatively *qfile* can be replaced by
-"coul/streitz", in which case the fix will extract QEq parameters from
-the coul/streitz pair style itself.
-
-See the examples/strietz directory for an example input script that
-uses the Streitz-Mintmire potential. The potentials directory has the
-AlO.eam.alloy and AlO.streitz potential files used by the example.
-
-Note that the Streiz-Mintmire potential is generally used for oxides,
-but there is no conceptual problem with extending it to nitrides and
-carbides (such as SiC, TiN). Pair coul/strietz used by itself or with
-any other pair style such as EAM, MEAM, Tersoff, or LJ in
-hybrid/overlay mode. To do this, you would need to provide a
-Streitz-Mintmire parameterizaion for the material being modeled.
-
-
-----------
-
-
-Styles *coul/long* and *coul/msm* compute the same Coulombic
-interactions as style *coul/cut* except that an additional damping
-factor is applied so it can be used in conjunction with the
-:doc:`kspace_style <kspace_style>` command and its *ewald* or *pppm*
-option. The Coulombic cutoff specified for this style means that
-pairwise interactions within this distance are computed directly;
-interactions outside that distance are computed in reciprocal space.
-
-Style *coul/long/cs* is identical to *coul/long* except that a term is
-added for the :ref:`core/shell model <howto_25>` to allow
-charges on core and shell particles to be separated by r = 0.0.
-
-Styles *tip4p/cut* and *tip4p/long* implement the coulomb part of
-the TIP4P water model of :ref:`(Jorgensen) <Jorgensen>`, which introduces
-a massless site located a short distance away from the oxygen atom
-along the bisector of the HOH angle. The atomic types of the oxygen and
-hydrogen atoms, the bond and angle types for OH and HOH interactions,
-and the distance to the massless charge site are specified as
-pair_style arguments. Style *tip4p/cut* uses a global cutoff for
-Coulomb interactions; style *tip4p/long* is for use with a long-range
-Coulombic solver (Ewald or PPPM).
-
-.. note::
-
- For each TIP4P water molecule in your system, the atom IDs for
- the O and 2 H atoms must be consecutive, with the O atom first. This
- is to enable LAMMPS to "find" the 2 H atoms associated with each O
- atom. For example, if the atom ID of an O atom in a TIP4P water
- molecule is 500, then its 2 H atoms must have IDs 501 and 502.
-
-See the :ref:`howto section <howto_8>` for more
-information on how to use the TIP4P pair styles and lists of
-parameters to set. Note that the neighobr list cutoff for Coulomb
-interactions is effectively extended by a distance 2*qdist when using
-the TIP4P pair style, to account for the offset distance of the
-fictitious charges on O atoms in water molecules. Thus it is
-typically best in an efficiency sense to use a LJ cutoff >= Coulomb
-cutoff + 2*qdist, to shrink the size of the neighbor list. This leads
-to slightly larger cost for the long-range calculation, so you can
-test the trade-off for your model.
-
-
-----------
-
-
-Note that these potentials are designed to be combined with other pair
-potentials via the :doc:`pair_style hybrid/overlay <pair_hybrid>`
-command. This is because they have no repulsive core. Hence if they
-are used by themselves, there will be no repulsion to keep two
-oppositely charged particles from moving arbitrarily close to each
-other.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* cutoff (distance units)
-
-For *coul/cut* and *coul/debye*\ , the cutoff coefficient is optional.
-If it is not used (as in some of the examples above), the default
-global value specified in the pair_style command is used.
-
-For *coul/long* and *coul/msm* no cutoff can be specified for an
-individual I,J type pair via the pair_coeff command. All type pairs
-use the same global Coulombic cutoff specified in the pair_style
-command.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the cutoff distance for the
-*coul/cut* style can be mixed. The default mix value is *geometric*\ .
-See the "pair_modify" command for details.
-
-The :doc:`pair_modify <pair_modify>` shift option is not relevant
-for these pair styles.
-
-The *coul/long* style supports the :doc:`pair_modify <pair_modify>`
-table option for tabulation of the short-range portion of the
-long-range Coulombic interaction.
-
-These pair styles do not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-These pair styles write their information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The *coul/long*\ , *coul/msm* and *tip4p/long* styles are part of the
-KSPACE package. The *coul/long/cs* style is part of the CORESHELL
-package. They are only enabled if LAMMPS was built with that package
-(which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style, hybrid/overlay <pair_hybrid>`, :doc:`kspace_style <kspace_style>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Wolf:
-
-
-
-**(Wolf)** D. Wolf, P. Keblinski, S. R. Phillpot, J. Eggebrecht, J Chem
-Phys, 110, 8254 (1999).
-
-.. _Fennell:
-
-
-
-**(Fennell)** C. J. Fennell, J. D. Gezelter, J Chem Phys, 124,
-234104 (2006).
-
-.. _Streitz:
-
-
-
-**(Streitz)** F. H. Streitz, J. W. Mintmire, Phys Rev B, 50, 11996-12003
-(1994).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_coul_diel.txt b/doc/html/_sources/pair_coul_diel.txt
deleted file mode 100644
index 9e6cb3b26..000000000
--- a/doc/html/_sources/pair_coul_diel.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-.. index:: pair_style coul/diel
-
-pair_style coul/diel command
-============================
-
-pair_style coul/diel/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style coul/diel cutoff
-
-cutoff = global cutoff (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style coul/diel 3.5
- pair_coeff 1 4 78. 1.375 0.112
-
-Description
-"""""""""""
-
-Style *coul/diel* computes a Coulomb correction for implict solvent
-ion interactions in which the dielectric perimittivity is distance dependent.
-The dielectric permittivity epsilon_D(r) connects to limiting regimes:
-One limit is defined by a small dielectric permittivity (close to vacuum)
-at or close to contact seperation between the ions. At larger separations
-the dielectric permittivity reaches a bulk value used in the regular Coulomb
-interaction coul/long or coul/cut.
-The transition is modeled by a hyperbolic function which is incorporated
-in the Coulomb correction term for small ion separations as follows
-
-.. image:: Eqs/pair_coul_diel.jpg
- :align: center
-
-where r_me is the inflection point of epsilon_D(r) and sigma_e is a slope
-defining length scale. C is the same Coulomb conversion factor as in the
-pair_styles coul/cut, coul/long, and coul/debye. In this way the Coulomb
-interaction between ions is corrected at small distances r. The lower
-limit of epsilon_D(r->0)=5.2 due to dielectric saturation :ref:`(Stiles) <Stiles>`
-while the Coulomb interaction reaches its bulk limit by setting
-epsilon_D(r->\infty)=epsilon, the bulk value of the solvent which is 78
-for water at 298K.
-
-Examples of the use of this type of Coulomb interaction include implicit
-solvent simulations of salt ions
-:ref:`(Lenart) <Lenart>` and of ionic surfactants :ref:`(Jusufi) <Jusufi>`.
-Note that this potential is only reasonable for implicit solvent simulations
-and in combiantion with coul/cut or coul/long. It is also usually combined
-with gauss/cut, see :ref:`(Lenart) <Lenart>` or :ref:`(Jusufi) <Jusufi>`.
-
-The following coefficients must be defined for each pair of atom
-types via the :doc:`pair_coeff <pair_coeff>` command as in the example
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* epsilon (no units)
-* r_me (distance units)
-* sigma_e (distance units)
-
-The global cutoff (r_c) specified in the pair_style command is used.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support parameter mixing. Coefficients must be given explicitly for each type of particle pairs.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the Gauss-potential portion of the pair
-interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-This style is part of the "user-misc" package. It is only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_2_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-:doc:`pair_style gauss/cut <pair_gauss>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Stiles:
-
-
-
-**(Stiles)** Stiles , Hubbard, and Kayser, J Chem Phys, 77,
-6189 (1982).
-
-.. _Lenart:
-
-
-
-**(Lenart)** Lenart , Jusufi, and Panagiotopoulos, J Chem Phys, 126,
-044509 (2007).
-
-.. _Jusufi:
-
-
-
-**(Jusufi)** Jusufi, Hynninen, and Panagiotopoulos, J Phys Chem B, 112,
-13783 (2008).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_cs.txt b/doc/html/_sources/pair_cs.txt
deleted file mode 100644
index 39d6e2610..000000000
--- a/doc/html/_sources/pair_cs.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-.. index:: pair_style born/coul/long/cs
-
-pair_style born/coul/long/cs command
-====================================
-
-pair_style buck/coul/long/cs command
-====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *born/coul/long/cs* or *buck/coul/long/cs*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *born/coul/long/cs* args = cutoff (cutoff2)
- cutoff = global cutoff for non-Coulombic (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *buck/coul/long/cs* args = cutoff (cutoff2)
- cutoff = global cutoff for Buckingham (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style born/coul/long/cs 10.0 8.0
- pair_coeff 1 1 6.08 0.317 2.340 24.18 11.51
-
-.. parsed-literal::
-
- pair_style buck/coul/long/cs 10.0
- pair_style buck/coul/long/cs 10.0 8.0
- pair_coeff * * 100.0 1.5 200.0
- pair_coeff 1 1 100.0 1.5 200.0 9.0
-
-Description
-"""""""""""
-
-These pair styles are designed to be used with the adiabatic
-core/shell model of :ref:`(Mitchell and Finchham) <MitchellFinchham>`. See
-:ref:`Section_howto 25 <howto_25>` of the manual for an
-overview of the model as implemented in LAMMPS.
-
-These pair styles are identical to the :doc:`pair_style born/coul/long <pair_born>` and :doc:`pair_style buck/coul/long <pair_buck>` styles, except they correctly treat the
-special case where the distance between two charged core and shell
-atoms in the same core/shell pair approach r = 0.0. This needs
-special treatment when a long-range solver for Coulombic interactions
-is also used, i.e. via the :doc:`kspace_style <kspace_style>` command.
-
-More specifically, the short-range Coulomb interaction between a core
-and its shell should be turned off using the
-:doc:`special_bonds <special_bonds>` command by setting the 1-2 weight
-to 0.0, which works because the core and shell atoms are bonded to
-each other. This induces a long-range correction approximation which
-fails at small distances (~< 10e-8). Therefore, the Coulomb term which
-is used to calculate the correction factor is extended by a minimal
-distance (r_min = 1.0-6) when the interaction between a core/shell
-pair is treated, as follows
-
-.. image:: Eqs/pair_cs.jpg
- :align: center
-
-where C is an energy-conversion constant, Qi and Qj are the charges on
-the core and shell, epsilon is the dielectric constant and r_min is the
-minimal distance.
-
-Restrictions
-""""""""""""
-
-
-These pair styles are part of the CORESHELL package. They are only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style born <pair_born>`,
-:doc:`pair_style buck <pair_buck>`
-
-**Default:** none
-
-
-----------
-
-
-.. _MitchellFinchham:
-
-
-
-**(Mitchell and Finchham)** Mitchell, Finchham, J Phys Condensed Matter,
-5, 1031-1038 (1993).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_dipole.txt b/doc/html/_sources/pair_dipole.txt
deleted file mode 100644
index 5dfc61cc6..000000000
--- a/doc/html/_sources/pair_dipole.txt
+++ /dev/null
@@ -1,310 +0,0 @@
-.. index:: pair_style lj/cut/dipole/cut
-
-pair_style lj/cut/dipole/cut command
-====================================
-
-pair_style lj/cut/dipole/cut/gpu command
-========================================
-
-pair_style lj/cut/dipole/cut/omp command
-========================================
-
-pair_style lj/sf/dipole/sf command
-==================================
-
-pair_style lj/sf/dipole/sf/gpu command
-======================================
-
-pair_style lj/sf/dipole/sf/omp command
-======================================
-
-pair_style lj/cut/dipole/long command
-=====================================
-
-pair_style lj/long/dipole/long command
-======================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style lj/cut/dipole/cut cutoff (cutoff2)
- pair_style lj/sf/dipole/sf cutoff (cutoff2)
- pair_style lj/cut/dipole/long cutoff (cutoff2)
- pair_style lj/long/dipole/long flag_lj flag_coul cutoff (cutoff2)
-
-* cutoff = global cutoff LJ (and Coulombic if only 1 arg) (distance units)
-* cutoff2 = global cutoff for Coulombic and dipole (optional) (distance units)
-* flag_lj = *long* or *cut* or *off*
-.. parsed-literal::
-
- *long* = use long-range damping on dispersion 1/r^6 term
- *cut* = use a cutoff on dispersion 1/r^6 term
- *off* = omit disperion 1/r^6 term entirely
-
-* flag_coul = *long* or *off*
-.. parsed-literal::
-
- *long* = use long-range damping on Coulombic 1/r and point-dipole terms
- *off* = omit Coulombic and point-dipole terms entirely
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/cut/dipole/cut 10.0
- pair_coeff * * 1.0 1.0
- pair_coeff 2 3 1.0 1.0 2.5 4.0
-
-.. parsed-literal::
-
- pair_style lj/sf/dipole/sf 9.0
- pair_coeff * * 1.0 1.0
- pair_coeff 2 3 1.0 1.0 2.5 4.0
-
-.. parsed-literal::
-
- pair_style lj/cut/dipole/long 10.0
- pair_coeff * * 1.0 1.0
- pair_coeff 2 3 1.0 1.0 2.5 4.0
-
-.. parsed-literal::
-
- pair_style lj/long/dipole/long long long 3.5 10.0
- pair_coeff * * 1.0 1.0
- pair_coeff 2 3 1.0 1.0 2.5 4.0
-
-Description
-"""""""""""
-
-Style *lj/cut/dipole/cut* computes interactions between pairs of particles
-that each have a charge and/or a point dipole moment. In addition to
-the usual Lennard-Jones interaction between the particles (Elj) the
-charge-charge (Eqq), charge-dipole (Eqp), and dipole-dipole (Epp)
-interactions are computed by these formulas for the energy (E), force
-(F), and torque (T) between particles I and J.
-
-.. image:: Eqs/pair_dipole.jpg
- :align: center
-
-where qi and qj are the charges on the two particles, pi and pj are
-the dipole moment vectors of the two particles, r is their separation
-distance, and the vector r = Ri - Rj is the separation vector between
-the two particles. Note that Eqq and Fqq are simply Coulombic energy
-and force, Fij = -Fji as symmetric forces, and Tij != -Tji since the
-torques do not act symmetrically. These formulas are discussed in
-:ref:`(Allen) <Allen>` and in :ref:`(Toukmaji) <Toukmaji>`.
-
-Style *lj/sf/dipole/sf* computes "shifted-force" interactions between
-pairs of particles that each have a charge and/or a point dipole
-moment. In general, a shifted-force potential is a (sligthly) modified
-potential containing extra terms that make both the energy and its
-derivative go to zero at the cutoff distance; this removes
-(cutoff-related) problems in energy conservation and any numerical
-instability in the equations of motion :ref:`(Allen) <Allen>`. Shifted-force
-interactions for the Lennard-Jones (E_LJ), charge-charge (Eqq),
-charge-dipole (Eqp), dipole-charge (Epq) and dipole-dipole (Epp)
-potentials are computed by these formulas for the energy (E), force
-(F), and torque (T) between particles I and J:
-
-.. image:: Eqs/pair_dipole_sf.jpg
- :align: center
-
-.. image:: Eqs/pair_dipole_sf2.jpg
- :align: center
-
-where epsilon and sigma are the standard LJ parameters, r_c is the
-cutoff, qi and qj are the charges on the two particles, pi and pj are
-the dipole moment vectors of the two particles, r is their separation
-distance, and the vector r = Ri - Rj is the separation vector between
-the two particles. Note that Eqq and Fqq are simply Coulombic energy
-and force, Fij = -Fji as symmetric forces, and Tij != -Tji since the
-torques do not act symmetrically. The shifted-force formula for the
-Lennard-Jones potential is reported in :ref:`(Stoddard) <Stoddard>`. The
-original (unshifted) formulas for the electrostatic potentials, forces
-and torques can be found in :ref:`(Price) <Price>`. The shifted-force
-electrostatic potentials have been obtained by applying equation 5.13
-of :ref:`(Allen) <Allen>`. The formulas for the corresponding forces and
-torques have been obtained by applying the 'chain rule' as in appendix
-C.3 of :ref:`(Allen) <Allen>`.
-
-If one cutoff is specified in the pair_style command, it is used for
-both the LJ and Coulombic (q,p) terms. If two cutoffs are specified,
-they are used as cutoffs for the LJ and Coulombic (q,p) terms
-respectively.
-
-Style *lj/cut/dipole/long* computes long-range point-dipole
-interactions as discussed in :ref:`(Toukmaji) <Toukmaji>`. Dipole-dipole,
-dipole-charge, and charge-charge interactions are all supported, along
-with the standard 12/6 Lennard-Jones interactions, which are computed
-with a cutoff. A :doc:`kspace_style <kspace_style>` must be defined to
-use this pair style. Currently, only :doc:`kspace_style ewald/disp <kspace_style>` support long-range point-dipole
-interactions.
-
-Style *lj/long/dipole/long* also computes point-dipole interactions as
-discussed in :ref:`(Toukmaji) <Toukmaji>`. Long-range dipole-dipole,
-dipole-charge, and charge-charge interactions are all supported, along
-with the standard 12/6 Lennard-Jones interactions. LJ interactions
-can be cutoff or long-ranged.
-
-For style *lj/long/dipole/long*\ , if *flag_lj* is set to *long*\ , no
-cutoff is used on the LJ 1/r^6 dispersion term. The long-range
-portion is calculated by using the :doc:`kspace_style ewald_disp <kspace_style>` command. The specified LJ cutoff then
-determines which portion of the LJ interactions are computed directly
-by the pair potential versus which part is computed in reciprocal
-space via the Kspace style. If *flag_lj* is set to *cut*\ , the LJ
-interactions are simply cutoff, as with :doc:`pair_style lj/cut <pair_lj>`. If *flag_lj* is set to *off*\ , LJ interactions
-are not computed at all.
-
-If *flag_coul* is set to *long*\ , no cutoff is used on the Coulombic or
-dipole interactions. The long-range portion is calculated by using
-*ewald_disp* of the :doc:`kspace_style <kspace_style>` command. If
-*flag_coul* is set to *off*\ , Coulombic and dipole interactions are not
-computed at all.
-
-Atoms with dipole moments should be integrated using the :doc:`fix nve/sphere update dipole <fix_nve_sphere>` command to rotate the
-dipole moments. The *omega* option on the :doc:`fix langevin <fix_langevin>` command can be used to thermostat the
-rotational motion. The :doc:`compute temp/sphere <compute_temp_sphere>`
-command can be used to monitor the temperature, since it includes
-rotational degrees of freedom. The :doc:`atom_style dipole <atom_style>` command should be used since it defines the
-point dipoles and their rotational state. The magnitude of the dipole
-moment for each type of particle can be defined by the
-:doc:`dipole <dipole>` command or in the "Dipoles" section of the data
-file read in by the :doc:`read_data <read_data>` command. Their initial
-orientation can be defined by the :doc:`set dipole <set>` command or in
-the "Atoms" section of the data file.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* cutoff1 (distance units)
-* cutoff2 (distance units)
-
-The latter 2 coefficients are optional. If not specified, the global
-LJ and Coulombic cutoffs specified in the pair_style command are used.
-If only one cutoff is specified, it is used as the cutoff for both LJ
-and Coulombic interactions for this type pair. If both coefficients
-are specified, they are used as the LJ and Coulombic cutoffs for this
-type pair.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the epsilon and sigma coefficients
-and cutoff distances for this pair style can be mixed. The default
-mix value is *geometric*\ . See the "pair_modify" command for details.
-
-For atom type pairs I,J and I != J, the A, sigma, d1, and d2
-coefficients and cutoff distance for this pair style can be mixed. A
-is an energy value mixed like a LJ epsilon. D1 and d2 are distance
-values and are mixed like sigma. The default mix value is
-*geometric*\ . See the "pair_modify" command for details.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift option for the energy of the Lennard-Jones portion of the pair
-interaction; such energy goes to zero at the cutoff by construction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-The *lj/cut/dipole/cut*\ , *lj/cut/dipole/long*\ , and
-*lj/long/dipole/long* styles are part of the DIPOLE package. They are
-only enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The *lj/sf/dipole/sf* style is part of the USER-MISC package. It is
-only enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Using dipole pair styles with *electron* :doc:`units <units>` is not
-currently supported.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Allen:
-
-
-
-**(Allen)** Allen and Tildesley, Computer Simulation of Liquids,
-Clarendon Press, Oxford, 1987.
-
-.. _Toukmaji:
-
-
-
-**(Toukmaji)** Toukmaji, Sagui, Board, and Darden, J Chem Phys, 113,
-10913 (2000).
-
-.. _Stoddard:
-
-
-
-**(Stoddard)** Stoddard and Ford, Phys Rev A, 8, 1504 (1973).
-
-.. _Price:
-
-
-
-**(Price)** Price, Stone and Alderton, Mol Phys, 52, 987 (1984).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_dpd.txt b/doc/html/_sources/pair_dpd.txt
deleted file mode 100644
index bfef3cb1c..000000000
--- a/doc/html/_sources/pair_dpd.txt
+++ /dev/null
@@ -1,246 +0,0 @@
-.. index:: pair_style dpd
-
-pair_style dpd command
-======================
-
-pair_style dpd/gpu command
-==========================
-
-pair_style dpd/omp command
-==========================
-
-pair_style dpd/tstat command
-============================
-
-pair_style dpd/tstat/gpu command
-================================
-
-pair_style dpd/tstat/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style dpd T cutoff seed
- pair_style dpd/tstat Tstart Tstop cutoff seed
-
-* T = temperature (temperature units)
-* Tstart,Tstop = desired temperature at start/end of run (temperature units)
-* cutoff = global cutoff for DPD interactions (distance units)
-* seed = random # seed (positive integer)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style dpd 1.0 2.5 34387
- pair_coeff * * 3.0 1.0
- pair_coeff 1 1 3.0 1.0 1.0
-
-.. parsed-literal::
-
- pair_style dpd/tstat 1.0 1.0 2.5 34387
- pair_coeff * * 1.0
- pair_coeff 1 1 1.0 1.0
-
-Description
-"""""""""""
-
-Style *dpd* computes a force field for dissipative particle dynamics
-(DPD) following the exposition in :ref:`(Groot) <Groot>`.
-
-Style *dpd/tstat* invokes a DPD thermostat on pairwise interactions,
-which is equivalent to the non-conservative portion of the DPD force
-field. This pair-wise thermostat can be used in conjunction with any
-:doc:`pair style <pair_style>`, and in leiu of per-particle thermostats
-like :doc:`fix langevin <fix_langevin>` or ensemble thermostats like
-Nose Hoover as implemented by :doc:`fix nvt <fix_nh>`. To use
-*dpd/tstat* as a thermostat for another pair style, use the :doc:`pair_style hybrid/overlay <pair_hybrid>` command to compute both the desired
-pair interaction and the thermostat for each pair of particles.
-
-For style *dpd*\ , the force on atom I due to atom J is given as a sum
-of 3 terms
-
-.. image:: Eqs/pair_dpd.jpg
- :align: center
-
-where Fc is a conservative force, Fd is a dissipative force, and Fr is
-a random force. Rij is a unit vector in the direction Ri - Rj, Vij is
-the vector difference in velocities of the two atoms = Vi - Vj, alpha
-is a Gaussian random number with zero mean and unit variance, dt is
-the timestep size, and w(r) is a weighting factor that varies between
-0 and 1. Rc is the cutoff. Sigma is set equal to sqrt(2 Kb T gamma),
-where Kb is the Boltzmann constant and T is the temperature parameter
-in the pair_style command.
-
-For style *dpd/tstat*\ , the force on atom I due to atom J is the same
-as the above equation, except that the conservative Fc term is
-dropped. Also, during the run, T is set each timestep to a ramped
-value from Tstart to Tstop.
-
-For style *dpd*\ , the pairwise energy associated with style *dpd* is
-only due to the conservative force term Fc, and is shifted to be zero
-at the cutoff distance Rc. The pairwise virial is calculated using
-all 3 terms. For style *dpd/tstat* there is no pairwise energy, but
-the last two terms of the formula make a contribution to the virial.
-
-For style *dpd*\ , the following coefficients must be defined for each
-pair of atoms types via the :doc:`pair_coeff <pair_coeff>` command as in
-the examples above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* A (force units)
-* gamma (force/velocity units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global DPD
-cutoff is used. Note that sigma is set equal to sqrt(2 T gamma),
-where T is the temperature set by the :doc:`pair_style <pair_style>`
-command so it does not need to be specified.
-
-For style *dpd/tstat*\ , the coefficiencts defined for each pair of
-atoms types via the :doc:`pair_coeff <pair_coeff>` command is the same,
-except that A is not included.
-
-The GPU-accelerated versions of these styles are implemented based on
-the work of :ref:`(Afshar) <Afshar>` and :ref:`(Phillips) <Phillips>`.
-
-.. note::
-
- If you are modeling DPD polymer chains, you may want to use the
- :doc:`pair_style srp <pair_srp>` command in conjuction with these pair
- styles. It is a soft segmental repulsive potential (SRP) that can
- prevent DPD polymer chains from crossing each other.
-
-.. note::
-
- The virial calculation for pressure when using this pair style
- includes all the components of force listed above, including the
- random force.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-These pair styles do not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-These pair styles do not support the :doc:`pair_modify <pair_modify>`
-shift option for the energy of the pair interaction. Note that as
-discussed above, the energy due to the conservative Fc term is already
-shifted to be 0.0 at the cutoff distance Rc.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for these pair styles.
-
-These pair style do not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-These pair styles writes their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do not need
-to be specified in an input script that reads a restart file. Note
-that the user-specified random number seed is stored in the restart
-file, so when a simulation is restarted, each processor will
-re-initialize its random number generator the same way it did
-initially. This means the random forces will be random, but will not
-be the same as they would have been if the original simulation had
-continued past the restart time.
-
-These pair styles can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. They do not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-The *dpd/tstat* style can ramp its target temperature over multiple
-runs, using the *start* and *stop* keywords of the :doc:`run <run>`
-command. See the :doc:`run <run>` command for details of how to do
-this.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The default frequency for rebuilding neighbor lists is every 10 steps
-(see the :doc:`neigh_modify <neigh_modify>` command). This may be too
-infrequent for style *dpd* simulations since particles move rapidly
-and can overlap by large amounts. If this setting yields a non-zero
-number of "dangerous" reneighborings (printed at the end of a
-simulation), you should experiment with forcing reneighboring more
-often and see if system energies/trajectories change.
-
-These pair styles requires you to use the :doc:`comm_modify vel yes <comm_modify>` command so that velocites are stored by ghost
-atoms.
-
-These pair styles will not restart exactly when using the
-:doc:`read_restart <read_restart>` command, though they should provide
-statistically similar results. This is because the forces they
-compute depend on atom velocities. See the
-:doc:`read_restart <read_restart>` command for more details.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`fix nvt <fix_nh>`, :doc:`fix langevin <fix_langevin>`, :doc:`pair_style srp <pair_srp>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Groot:
-
-
-
-**(Groot)** Groot and Warren, J Chem Phys, 107, 4423-35 (1997).
-
-.. _Afshar:
-
-
-
-**(Afshar)** Afshar, F. Schmid, A. Pishevar, S. Worley, Comput Phys
-Comm, 184, 1119-1128 (2013).
-
-.. _Phillips:
-
-
-
-**(Phillips)** C. L. Phillips, J. A. Anderson, S. C. Glotzer, Comput
-Phys Comm, 230, 7191-7201 (2011).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_dpd_fdt.txt b/doc/html/_sources/pair_dpd_fdt.txt
deleted file mode 100644
index 1c35614fa..000000000
--- a/doc/html/_sources/pair_dpd_fdt.txt
+++ /dev/null
@@ -1,161 +0,0 @@
-.. index:: pair_style dpd/fdt
-
-pair_style dpd/fdt command
-==========================
-
-pair_style dpd/fdt/energy command
-=================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *dpd/fdt* or *dpd/fdt/energy*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *dpd/fdt* args = T cutoff seed
- T = temperature (temperature units)
- cutoff = global cutoff for DPD interactions (distance units)
- seed = random # seed (positive integer)
- *dpd/fdt/energy* args = cutoff seed
- cutoff = global cutoff for DPD interactions (distance units)
- seed = random # seed (positive integer)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style dpd/fdt 300.0 2.5 34387
- pair_coeff * * 3.0 1.0 2.5
-
-.. parsed-literal::
-
- pair_style dpd/fdt/energy 2.5 34387
- pair_coeff * * 3.0 1.0 0.1 2.5
-
-Description
-"""""""""""
-
-Styles *dpd/fdt* and *dpd/fdt/energy* set the fluctuation-dissipation
-theorem parameters and compute the conservative force for dissipative
-particle dynamics (DPD). The conservative force on atom I due to atom
-J is given by
-
-.. image:: Eqs/pair_dpd_conservative.jpg
- :align: center
-
-where the weighting factor, omega_ij, varies between 0 and 1, and is
-chosen to have the following functional form:
-
-.. image:: Eqs/pair_dpd_omega.jpg
- :align: center
-
-where Rij is a unit vector in the direction Ri - Rj, and Rc is the
-cutoff. Note that alternative definitions of the weighting function
-exist, but would have to be implemented as a separate pair style
-command.
-
-These pair style differ from the other dpd styles in that the
-dissipative and random forces are not computed within the pair style.
-This style can be combined with the :doc:`fix shardlow <fix_shardlow>`
-to perform the stochastic integration of the dissipative and random
-forces through the Shardlow splitting algorithm approach.
-
-The pairwise energy associated with styles *dpd/fdt* and
-*dpd/fdt/energy* is only due to the conservative force term Fc, and is
-shifted to be zero at the cutoff distance Rc. The pairwise virial is
-calculated using only the conservative term.
-
-For style *dpd/fdt*\ , the fluctuation-dissipation theorem defines gamma
-to be set equal to sigma*sigma/(2 T), where T is the set point
-temperature specified as a pair style parameter in the above examples.
-This style can be combined with :doc:`fix shardlow <fix_shardlow>` to
-perform DPD simulations under isothermal and isobaric conditions (see
-:ref:`(Lisal) <Lisal>`). The following coefficients must be defined for
-each pair of atoms types via the :doc:`pair_coeff <pair_coeff>` command
-as in the examples above, or in the data file or restart files read by
-the :doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* A (force units)
-* sigma (force*time^(1/2) units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global DPD
-cutoff is used.
-
-For style *dpd/fdt/energy*\ , the fluctuation-dissipation theorem
-defines gamma to be set equal to sigma*sigma/(2 dpdTheta), where
-dpdTheta is the average internal temperature for the pair.
-Furthermore, the fluctuation-dissipation defines alpha*alpha to be set
-equal to 2*kB*kappa, where kappa is the mesoparticle thermal
-conductivity parameter. This style can be combined with :doc:`fix shardlow <fix_shardlow>` to perform DPD simulations under
-isoenergetic and isoenthalpic conditions (see :ref:`(Lisal) <Lisal>`). The
-following coefficients must be defined for each pair of atoms types
-via the :doc:`pair_coeff <pair_coeff>` command as in the examples above,
-or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* A (force units)
-* sigma (force*time^(1/2) units)
-* kappa (1/time units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global DPD
-cutoff is used.
-
-For style *dpd/fdt/energy*\ , the particle internal temperature is
-related to the particle internal energy through a mesoparticle
-equation of state. Thus, an an additional :doc:`fix eos <fix>` must be
-specified.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-These commands are part of the USER-DPD package. They are only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Pair styles *dpd/fdt* and *dpd/fdt/energy* require use of the
-:doc:`communicate vel yes <communicate>` option so that velocites are
-stored by ghost atoms.
-
-Pair style *dpd/fdt/energy* requires :doc:`atom_style dpd <atom_style>`
-to be used in order to properly account for the particle internal
-energies and temperatures.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`fix shardlow <fix_shardlow>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Lisal:
-
-
-
-**(Lisal)** M. Lisal, J.K. Brennan, J. Bonet Avalos, "Dissipative
-particle dynamics as isothermal, isobaric, isoenergetic, and
-isoenthalpic conditions using Shardlow-like splitting algorithms.",
-J. Chem. Phys., 135, 204105 (2011).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_dsmc.txt b/doc/html/_sources/pair_dsmc.txt
deleted file mode 100644
index 7b70808b0..000000000
--- a/doc/html/_sources/pair_dsmc.txt
+++ /dev/null
@@ -1,173 +0,0 @@
-.. index:: pair_style dsmc
-
-pair_style dsmc command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style dsmc max_cell_size seed weighting Tref Nrecompute Nsample
-
-* max_cell_size = global maximum cell size for DSMC interactions (distance units)
-* seed = random # seed (positive integer)
-* weighting = macroparticle weighting
-* Tref = reference temperature (temperature units)
-* Nrecompute = recompute v*sigma_max every this many timesteps (timesteps)
-* Nsample = sample this many times in recomputing v*sigma_max
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style dsmc 2.5 34387 10 1.0 100 20
- pair_coeff * * 1.0
- pair_coeff 1 1 1.0
-
-Description
-"""""""""""
-
-Style *dsmc* computes collisions between pairs of particles for a
-direct simulation Monte Carlo (DSMC) model following the exposition in
-:ref:`(Bird) <Bird>`. Each collision resets the velocities of the two
-particles involved. The number of pairwise collisions for each pair
-or particle types and the length scale within which they occur are
-determined by the parameters of the pair_style and pair_coeff
-commands.
-
-Stochastic collisions are performed using the variable hard sphere
-(VHS) approach, with the user-defined *max_cell_size* value used as
-the maximum DSMC cell size, and reference cross-sections for
-collisions given using the pair_coeff command.
-
-There is no pairwise energy or virial contributions associated with
-this pair style.
-
-The following coefficient must be defined for each pair of atoms types
-via the :doc:`pair_coeff <pair_coeff>` command as in the examples above,
-or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* sigma (area units, i.e. distance-squared)
-
-The global DSMC *max_cell_size* determines the maximum cell length
-used in the DSMC calculation. A structured mesh is overlayed on the
-simulation box such that an integer number of cells are created in
-each direction for each processor's sub-domain. Cell lengths are
-adjusted up to the user-specified maximum cell size.
-
-
-----------
-
-
-To perform a DSMC simulation with LAMMPS, several additional options
-should be set in your input script, though LAMMPS does not check for
-these settings.
-
-Since this pair style does not compute particle forces, you should use
-the "fix nve/noforce" time integration fix for the DSMC particles,
-e.g.
-
-.. parsed-literal::
-
- fix 1 all nve/noforce
-
-This pair style assumes that all particles will communicated to
-neighboring processors every timestep as they move. This makes it
-possible to perform all collisions between pairs of particles that are
-on the same processor. To ensure this occurs, you should use
-these commands:
-
-.. parsed-literal::
-
- neighbor 0.0 bin
- neigh_modify every 1 delay 0 check no
- atom_modify sort 0 0.0
- communicate single cutoff 0.0
-
-These commands ensure that LAMMPS communicates particles to
-neighboring processors every timestep and that no ghost atoms are
-created. The output statistics for a simulation run should indicate
-there are no ghost particles or neighbors.
-
-In order to get correct DSMC collision statistics, users should
-specify a Gaussian velocity distribution when populating the
-simulation domain. Note that the default velocity distribution is
-uniform, which will not give good DSMC collision rates. Specify
-"dist gaussian" when using the :doc:`velocity <velocity>` command
-as in the following:
-
-.. parsed-literal::
-
- velocity all create 594.6 87287 loop geom dist gaussian
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do not need
-to be specified in an input script that reads a restart file. Note
-that the user-specified random number seed is stored in the restart
-file, so when a simulation is restarted, each processor will
-re-initialize its random number generator the same way it did
-initially. This means the random forces will be random, but will not
-be the same as they would have been if the original simulation had
-continued past the restart time.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This style is part of the MC package. It is only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`fix nve/noforce <fix_nve_noforce>`,
-:doc:`neigh_modify <neigh_modify>`, :doc:`neighbor <neighbor>`,
-:doc:`comm_modify <comm_modify>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Bird:
-
-
-
-**(Bird)** G. A. Bird, "Molecular Gas Dynamics and the Direct Simulation
-of Gas Flows" (1994).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_eam.txt b/doc/html/_sources/pair_eam.txt
deleted file mode 100644
index 7b8382567..000000000
--- a/doc/html/_sources/pair_eam.txt
+++ /dev/null
@@ -1,539 +0,0 @@
-.. index:: pair_style eam
-
-pair_style eam command
-======================
-
-pair_style eam/gpu command
-==========================
-
-pair_style eam/kk command
-=========================
-
-pair_style eam/omp command
-==========================
-
-pair_style eam/opt command
-==========================
-
-pair_style eam/alloy command
-============================
-
-pair_style eam/alloy/gpu command
-================================
-
-pair_style eam/alloy/kk command
-===============================
-
-pair_style eam/alloy/omp command
-================================
-
-pair_style eam/alloy/opt command
-================================
-
-pair_style eam/cd command
-=========================
-
-pair_style eam/cd/omp command
-=============================
-
-pair_style eam/fs command
-=========================
-
-pair_style eam/fs/gpu command
-=============================
-
-pair_style eam/fs/kk command
-============================
-
-pair_style eam/fs/omp command
-=============================
-
-pair_style eam/fs/opt command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style
-
-* style = *eam* or *eam/alloy* or *eam/cd* or *eam/fs*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style eam
- pair_coeff * * cuu3
- pair_coeff 1*3 1*3 niu3.eam
-
-.. parsed-literal::
-
- pair_style eam/alloy
- pair_coeff * * ../potentials/NiAlH_jea.eam.alloy Ni Al Ni Ni
-
-.. parsed-literal::
-
- pair_style eam/cd
- pair_coeff * * ../potentials/FeCr.cdeam Fe Cr
-
-.. parsed-literal::
-
- pair_style eam/fs
- pair_coeff * * NiAlH_jea.eam.fs Ni Al Ni Ni
-
-Description
-"""""""""""
-
-Style *eam* computes pairwise interactions for metals and metal alloys
-using embedded-atom method (EAM) potentials :ref:`(Daw) <Daw>`. The total
-energy Ei of an atom I is given by
-
-.. image:: Eqs/pair_eam.jpg
- :align: center
-
-where F is the embedding energy which is a function of the atomic
-electron density rho, phi is a pair potential interaction, and alpha
-and beta are the element types of atoms I and J. The multi-body
-nature of the EAM potential is a result of the embedding energy term.
-Both summations in the formula are over all neighbors J of atom I
-within the cutoff distance.
-
-The cutoff distance and the tabulated values of the functionals F,
-rho, and phi are listed in one or more files which are specified by
-the :doc:`pair_coeff <pair_coeff>` command. These are ASCII text files
-in a DYNAMO-style format which is described below. DYNAMO was the
-original serial EAM MD code, written by the EAM originators. Several
-DYNAMO potential files for different metals are included in the
-"potentials" directory of the LAMMPS distribution. All of these files
-are parameterized in terms of LAMMPS :doc:`metal units <units>`.
-
-.. note::
-
- The *eam* style reads single-element EAM potentials in the
- DYNAMO *funcfl* format. Either single element or alloy systems can be
- modeled using multiple *funcfl* files and style *eam*\ . For the alloy
- case LAMMPS mixes the single-element potentials to produce alloy
- potentials, the same way that DYNAMO does. Alternatively, a single
- DYNAMO *setfl* file or Finnis/Sinclair EAM file can be used by LAMMPS
- to model alloy systems by invoking the *eam/alloy* or *eam/cd* or
- *eam/fs* styles as described below. These files require no mixing
- since they specify alloy interactions explicitly.
-
-.. note::
-
- Note that unlike for other potentials, cutoffs for EAM
- potentials are not set in the pair_style or pair_coeff command; they
- are specified in the EAM potential files themselves. Likewise, the
- EAM potential files list atomic masses; thus you do not need to use
- the :doc:`mass <mass>` command to specify them.
-
-There are several WWW sites that distribute and document EAM
-potentials stored in DYNAMO or other formats:
-
-.. parsed-literal::
-
- http://www.ctcms.nist.gov/potentials
- http://cst-www.nrl.navy.mil/ccm6/ap
- http://enpub.fulton.asu.edu/cms/potentials/main/main.htm
-
-These potentials should be usable with LAMMPS, though the alternate
-formats would need to be converted to the DYNAMO format used by LAMMPS
-and described on this page. The NIST site is maintained by Chandler
-Becker (cbecker at nist.gov) who is good resource for info on
-interatomic potentials and file formats.
-
-
-----------
-
-
-For style *eam*\ , potential values are read from a file that is in the
-DYNAMO single-element *funcfl* format. If the DYNAMO file was created
-by a Fortran program, it cannot have "D" values in it for exponents.
-C only recognizes "e" or "E" for scientific notation.
-
-Note that unlike for other potentials, cutoffs for EAM potentials are
-not set in the pair_style or pair_coeff command; they are specified in
-the EAM potential files themselves.
-
-For style *eam* a potential file must be assigned to each I,I pair of
-atom types by using one or more pair_coeff commands, each with a
-single argument:
-
-* filename
-
-Thus the following command
-
-.. parsed-literal::
-
- pair_coeff *2 1*2 cuu3.eam
-
-will read the cuu3 potential file and use the tabulated Cu values for
-F, phi, rho that it contains for type pairs 1,1 and 2,2 (type pairs
-1,2 and 2,1 are ignored). See the :doc:`pair_coeff <pair_coeff>` doc
-page for alternate ways to specify the path for the potential file.
-In effect, this makes atom types 1 and 2 in LAMMPS be Cu atoms.
-Different single-element files can be assigned to different atom types
-to model an alloy system. The mixing to create alloy potentials for
-type pairs with I != J is done automatically the same way that the
-serial DYNAMO code originally did it; you do not need to specify
-coefficients for these type pairs.
-
-*Funcfl* files in the *potentials* directory of the LAMMPS
-distribution have an ".eam" suffix. A DYNAMO single-element *funcfl*
-file is formatted as follows:
-
-* line 1: comment (ignored)
-* line 2: atomic number, mass, lattice constant, lattice type (e.g. FCC)
-* line 3: Nrho, drho, Nr, dr, cutoff
-
-On line 2, all values but the mass are ignored by LAMMPS. The mass is
-in mass :doc:`units <units>`, e.g. mass number or grams/mole for metal
-units. The cubic lattice constant is in Angstroms. On line 3, Nrho
-and Nr are the number of tabulated values in the subsequent arrays,
-drho and dr are the spacing in density and distance space for the
-values in those arrays, and the specified cutoff becomes the pairwise
-cutoff used by LAMMPS for the potential. The units of dr are
-Angstroms; I'm not sure of the units for drho - some measure of
-electron density.
-
-Following the three header lines are three arrays of tabulated values:
-
-* embedding function F(rho) (Nrho values)
-* effective charge function Z(r) (Nr values)
-* density function rho(r) (Nr values)
-
-The values for each array can be listed as multiple values per line,
-so long as each array starts on a new line. For example, the
-individual Z(r) values are for r = 0,dr,2*dr, ... (Nr-1)*dr.
-
-The units for the embedding function F are eV. The units for the
-density function rho are the same as for drho (see above, electron
-density). The units for the effective charge Z are "atomic charge" or
-sqrt(Hartree * Bohr-radii). For two interacting atoms i,j this is used
-by LAMMPS to compute the pair potential term in the EAM energy
-expression as r*phi, in units of eV-Angstroms, via the formula
-
-.. parsed-literal::
-
- r*phi = 27.2 * 0.529 * Zi * Zj
-
-where 1 Hartree = 27.2 eV and 1 Bohr = 0.529 Angstroms.
-
-
-----------
-
-
-Style *eam/alloy* computes pairwise interactions using the same
-formula as style *eam*\ . However the associated
-:doc:`pair_coeff <pair_coeff>` command reads a DYNAMO *setfl* file
-instead of a *funcfl* file. *Setfl* files can be used to model a
-single-element or alloy system. In the alloy case, as explained
-above, *setfl* files contain explicit tabulated values for alloy
-interactions. Thus they allow more generality than *funcfl* files for
-modeling alloys.
-
-For style *eam/alloy*\ , potential values are read from a file that is
-in the DYNAMO multi-element *setfl* format, except that element names
-(Ni, Cu, etc) are added to one of the lines in the file. If the
-DYNAMO file was created by a Fortran program, it cannot have "D"
-values in it for exponents. C only recognizes "e" or "E" for
-scientific notation.
-
-Only a single pair_coeff command is used with the *eam/alloy* style
-which specifies a DYNAMO *setfl* file, which contains information for
-M 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 *setfl* elements to atom types
-
-As an example, the potentials/NiAlH_jea.eam.alloy file is a *setfl*
-file which has tabulated EAM values for 3 elements and their alloy
-interactions: Ni, Al, and H. See the :doc:`pair_coeff <pair_coeff>` doc
-page for alternate ways to specify the path for the potential file.
-If your LAMMPS simulation has 4 atoms types and you want the 1st 3 to
-be Ni, and the 4th to be Al, you would use the following pair_coeff
-command:
-
-.. parsed-literal::
-
- pair_coeff * * NiAlH_jea.eam.alloy Ni Ni Ni Al
-
-The 1st 2 arguments must be * * so as to span all LAMMPS atom types.
-The first three Ni arguments map LAMMPS atom types 1,2,3 to the Ni
-element in the *setfl* file. The final Al argument maps LAMMPS atom
-type 4 to the Al element in the *setfl* file. Note that there is no
-requirement that your simulation use all the elements specified by the
-*setfl* file.
-
-If a mapping value is specified as NULL, the mapping is not performed.
-This can be used when an *eam/alloy* 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.
-
-*Setfl* files in the *potentials* directory of the LAMMPS distribution
-have an ".eam.alloy" suffix. A DYNAMO multi-element *setfl* file is
-formatted as follows:
-
-* lines 1,2,3 = comments (ignored)
-* line 4: Nelements Element1 Element2 ... ElementN
-* line 5: Nrho, drho, Nr, dr, cutoff
-
-In a DYNAMO *setfl* file, line 4 only lists Nelements = the # of
-elements in the *setfl* file. For LAMMPS, the element name (Ni, Cu,
-etc) of each element must be added to the line, in the order the
-elements appear in the file.
-
-The meaning and units of the values in line 5 is the same as for the
-*funcfl* file described above. Note that the cutoff (in Angstroms) is
-a global value, valid for all pairwise interactions for all element
-pairings.
-
-Following the 5 header lines are Nelements sections, one for each
-element, each with the following format:
-
-* line 1 = atomic number, mass, lattice constant, lattice type (e.g. FCC)
-* embedding function F(rho) (Nrho values)
-* density function rho(r) (Nr values)
-
-As with the *funcfl* files, only the mass (in mass :doc:`units <units>`,
-e.g. mass number or grams/mole for metal units) is used by LAMMPS from
-the 1st line. The cubic lattice constant is in Angstroms. The F and
-rho arrays are unique to a single element and have the same format and
-units as in a *funcfl* file.
-
-Following the Nelements sections, Nr values for each pair potential
-phi(r) array are listed for all i,j element pairs in the same format
-as other arrays. Since these interactions are symmetric (i,j = j,i)
-only phi arrays with i >= j are listed, in the following order: i,j =
-(1,1), (2,1), (2,2), (3,1), (3,2), (3,3), (4,1), ..., (Nelements,
-Nelements). Unlike the effective charge array Z(r) in *funcfl* files,
-the tabulated values for each phi function are listed in *setfl* files
-directly as r*phi (in units of eV-Angstroms), since they are for atom
-pairs.
-
-
-----------
-
-
-Style *eam/cd* is similar to the *eam/alloy* style, except that it
-computes alloy pairwise interactions using the concentration-dependent
-embedded-atom method (CD-EAM). This model can reproduce the enthalpy
-of mixing of alloys over the full composition range, as described in
-:ref:`(Stukowski) <Stukowski>`.
-
-The pair_coeff command is specified the same as for the *eam/alloy*
-style. However the DYNAMO *setfl* file must has two
-lines added to it, at the end of the file:
-
-* line 1: Comment line (ignored)
-* line 2: N Coefficient0 Coefficient1 ... CoeffincientN
-
-The last line begins with the degree *N* of the polynomial function
-*h(x)* that modifies the cross interaction between A and B elements.
-Then *N+1* coefficients for the terms of the polynomial are then
-listed.
-
-Modified EAM *setfl* files used with the *eam/cd* style must contain
-exactly two elements, i.e. in the current implementation the *eam/cd*
-style only supports binary alloys. The first and second elements in
-the input EAM file are always taken as the *A* and *B* species.
-
-*CD-EAM* files in the *potentials* directory of the LAMMPS
-distribution have a ".cdeam" suffix.
-
-
-----------
-
-
-Style *eam/fs* computes pairwise interactions for metals and metal
-alloys using a generalized form of EAM potentials due to Finnis and
-Sinclair :ref:`(Finnis) <Finnis>`. The total energy Ei of an atom I is
-given by
-
-.. image:: Eqs/pair_eam_fs.jpg
- :align: center
-
-This has the same form as the EAM formula above, except that rho is
-now a functional specific to the atomic types of both atoms I and J,
-so that different elements can contribute differently to the total
-electron density at an atomic site depending on the identity of the
-element at that atomic site.
-
-The associated :doc:`pair_coeff <pair_coeff>` command for style *eam/fs*
-reads a DYNAMO *setfl* file that has been extended to include
-additional rho_alpha_beta arrays of tabulated values. A discussion of
-how FS EAM differs from conventional EAM alloy potentials is given in
-:ref:`(Ackland1) <Ackland1>`. An example of such a potential is the same
-author's Fe-P FS potential :ref:`(Ackland2) <Ackland2>`. Note that while FS
-potentials always specify the embedding energy with a square root
-dependence on the total density, the implementation in LAMMPS does not
-require that; the user can tabulate any functional form desired in the
-FS potential files.
-
-For style *eam/fs*\ , the form of the pair_coeff command is exactly the
-same as for style *eam/alloy*\ , e.g.
-
-.. parsed-literal::
-
- pair_coeff * * NiAlH_jea.eam.fs Ni Ni Ni Al
-
-where there are N additional arguments after the filename, where N is
-the number of LAMMPS atom types. See the :doc:`pair_coeff <pair_coeff>`
-doc page for alternate ways to specify the path for the potential
-file. The N values determine the mapping of LAMMPS atom types to EAM
-elements in the file, as described above for style *eam/alloy*\ . As
-with *eam/alloy*\ , if a mapping value is NULL, the mapping is not
-performed. This can be used when an *eam/fs* potential is used as
-part of the *hybrid* pair style. The NULL values are used as
-placeholders for atom types that will be used with other potentials.
-
-FS EAM files include more information than the DYNAMO *setfl* format
-files read by *eam/alloy*\ , in that i,j density functionals for all
-pairs of elements are included as needed by the Finnis/Sinclair
-formulation of the EAM.
-
-FS EAM files in the *potentials* directory of the LAMMPS distribution
-have an ".eam.fs" suffix. They are formatted as follows:
-
-* lines 1,2,3 = comments (ignored)
-* line 4: Nelements Element1 Element2 ... ElementN
-* line 5: Nrho, drho, Nr, dr, cutoff
-
-The 5-line header section is identical to an EAM *setfl* file.
-
-Following the header are Nelements sections, one for each element I,
-each with the following format:
-
-* line 1 = atomic number, mass, lattice constant, lattice type (e.g. FCC)
-* embedding function F(rho) (Nrho values)
-* density function rho(r) for element I at element 1 (Nr values)
-* density function rho(r) for element I at element 2
-* ...
-* density function rho(r) for element I at element Nelement
-
-The units of these quantities in line 1 are the same as for *setfl*
-files. Note that the rho(r) arrays in Finnis/Sinclair can be
-asymmetric (i,j != j,i) so there are Nelements^2 of them listed in the
-file.
-
-Following the Nelements sections, Nr values for each pair potential
-phi(r) array are listed in the same manner (r*phi, units of
-eV-Angstroms) as in EAM *setfl* files. Note that in Finnis/Sinclair,
-the phi(r) arrays are still symmetric, so only phi arrays for i >= j
-are listed.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accerlate <Section_accelerate>` of the manual for more
-instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, where types I and J correspond to
-two different element types, mixing is performed by LAMMPS as
-described above with the individual styles. You never need to specify
-a pair_coeff command with I != J arguments for the eam styles.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-The eam pair styles do not write their information to :doc:`binary restart files <restart>`, since it is stored in tabulated potential files.
-Thus, you need to re-specify the pair_style and pair_coeff commands in
-an input script that reads a restart file.
-
-The eam pair styles can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. They do not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-All of these styles except the *eam/cd* style are part of the MANYBODY
-package. They are only enabled if LAMMPS was built with that package
-(which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The *eam/cd* style is part of the USER-MISC package and also requires
-the MANYBODY package. It is only enabled if LAMMPS was built with
-those packages. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Ackland1:
-
-
-
-**(Ackland1)** Ackland, Condensed Matter (2005).
-
-.. _Ackland2:
-
-
-
-**(Ackland2)** Ackland, Mendelev, Srolovitz, Han and Barashev, Journal
-of Physics: Condensed Matter, 16, S2629 (2004).
-
-.. _Daw:
-
-
-
-**(Daw)** Daw, Baskes, Phys Rev Lett, 50, 1285 (1983).
-Daw, Baskes, Phys Rev B, 29, 6443 (1984).
-
-.. _Finnis:
-
-
-
-**(Finnis)** Finnis, Sinclair, Philosophical Magazine A, 50, 45 (1984).
-
-.. _Stukowski:
-
-
-
-**(Stukowski)** Stukowski, Sadigh, Erhart, Caro; Modeling Simulation
-Materials Science & Engineering, 7, 075005 (2009).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_edip.txt b/doc/html/_sources/pair_edip.txt
deleted file mode 100644
index 99b1f89e0..000000000
--- a/doc/html/_sources/pair_edip.txt
+++ /dev/null
@@ -1,187 +0,0 @@
-.. index:: pair_style edip
-
-pair_style edip command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style edip
-
-.. parsed-literal::
-
- pair_style edip/omp
-
-Examples
-""""""""
-
-pair_style edip
-pair_coeff * * Si.edip Si
-
-Description
-"""""""""""
-
-The *edip* style computes a 3-body :ref:`EDIP <EDIP>` potential which is
-popular for modeling silicon materials where it can have advantages
-over other models such as the :doc:`Stillinger-Weber <pair_sw>` or
-:doc:`Tersoff <pair_tersoff>` potentials. In EDIP, the energy E of a
-system of atoms is
-
-.. image:: Eqs/pair_edip.jpg
- :align: center
-
-where phi2 is a two-body term and phi3 is a three-body term. The
-summations in the formula are over all neighbors J and K of atom I
-within a cutoff distance = a.
-Both terms depend on the local environment of atom I through its
-effective coordination number defined by Z, which is unity for a
-cutoff distance < c and gently goes to 0 at distance = a.
-
-Only a single pair_coeff command is used with the *edip* style which
-specifies a EDIP 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 EDIP elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-As an example, imagine a file Si.edip has EDIP values for Si.
-
-EDIP files in the *potentials* directory of the LAMMPS
-distribution have a ".edip" suffix. Lines that are not blank or
-comments (starting with #) define parameters for a triplet of
-elements. The parameters in a single entry correspond to the two-body
-and three-body coefficients in the formula above:
-
-* element 1 (the center atom in a 3-body interaction)
-* element 2
-* element 3
-* A (energy units)
-* B (distance units)
-* cutoffA (distance units)
-* cutoffC (distance units)
-* alpha
-* beta
-* eta
-* gamma (distance units)
-* lambda (energy units)
-* mu
-* tho
-* sigma (distance units)
-* Q0
-* u1
-* u2
-* u3
-* u4
-
-The A, B, beta, sigma parameters are used only for two-body interactions.
-The eta, gamma, lambda, mu, Q0 and all u1 to u4 parameters are used only
-for three-body interactions. The alpha and cutoffC parameters are used
-for the coordination environment function only.
-
-The EDIP potential file must contain entries for all the
-elements listed in the pair_coeff command. It can also contain
-entries for additional elements not being used in a particular
-simulation; LAMMPS ignores those entries.
-
-For a single-element simulation, only a single entry is required
-(e.g. SiSiSi). For a two-element simulation, the file must contain 8
-entries (for SiSiSi, SiSiC, SiCSi, SiCC, CSiSi, CSiC, CCSi, CCC), that
-specify EDIP parameters for all permutations of the two elements
-interacting in three-body configurations. Thus for 3 elements, 27
-entries would be required, etc.
-
-At the moment, only a single element parametrization is
-implemented. However, the author is not aware of other
-multi-element EDIP parametrizations. If you know any and
-you are interest in that, please contact the author of
-the EDIP package.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This angle style can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-This pair style requires the :doc:`newton <newton>` setting to be "on"
-for pair interactions.
-
-The EDIP potential files provided with LAMMPS (see the potentials directory)
-are parameterized for metal :doc:`units <units>`.
-You can use the SW potential with any LAMMPS units, but you would need
-to create your own EDIP potential file with coefficients listed in the
-appropriate units if your simulation doesn't use "metal" units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _EDIP:
-
-
-
-**(EDIP)** J. F. Justo et al., Phys. Rev. B 58, 2539 (1998).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_eff.txt b/doc/html/_sources/pair_eff.txt
deleted file mode 100644
index 91c154792..000000000
--- a/doc/html/_sources/pair_eff.txt
+++ /dev/null
@@ -1,355 +0,0 @@
-.. index:: pair_style eff/cut
-
-pair_style eff/cut command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style eff/cut cutoff keyword args ...
-
-* cutoff = global cutoff for Coulombic interactions
-* zero or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *limit/eradius* or *pressure/evirials* or *ecp*
- *limit/eradius* args = none
- *pressure/evirials* args = none
- *ecp* args = type element type element ...
- type = LAMMPS atom type (1 to Ntypes)
- element = element symbol (e.g. H, Si)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style eff/cut 39.7
- pair_style eff/cut 40.0 limit/eradius
- pair_style eff/cut 40.0 limit/eradius pressure/evirials
- pair_style eff/cut 40.0 ecp 1 Si 3 C
- pair_coeff * *
- pair_coeff 2 2 20.0
- pair_coeff 1 s 0.320852 2.283269 0.814857
- pair_coeff 3 p 22.721015 0.728733 1.103199 17.695345 6.693621
-
-Description
-"""""""""""
-
-This pair style contains a LAMMPS implementation of the electron Force
-Field (eFF) potential currently under development at Caltech, as
-described in :ref:`(Jaramillo-Botero) <Jaramillo-Botero>`. The eFF for Z<6
-was first introduced by :ref:`(Su) <Su>` in 2007. It has been extended to
-higher Zs by using effective core potentials (ECPs) that now cover up
-to 2nd and 3rd row p-block elements of the periodic table.
-
-eFF can be viewed as an approximation to QM wave packet dynamics and
-Fermionic molecular dynamics, combining the ability of electronic
-structure methods to describe atomic structure, bonding, and chemistry
-in materials, and of plasma methods to describe nonequilibrium
-dynamics of large systems with a large number of highly excited
-electrons. Yet, eFF relies on a simplification of the electronic
-wavefunction in which electrons are described as floating Gaussian
-wave packets whose position and size respond to the various dynamic
-forces between interacting classical nuclear particles and spherical
-Gaussian electron wavepackets. The wavefunction is taken to be a
-Hartree product of the wave packets. To compensate for the lack of
-explicit antisymmetry in the resulting wavefunction, a spin-dependent
-Pauli potential is included in the Hamiltonian. Substituting this
-wavefunction into the time-dependent Schrodinger equation produces
-equations of motion that correspond - to second order - to classical
-Hamiltonian relations between electron position and size, and their
-conjugate momenta. The N-electron wavefunction is described as a
-product of one-electron Gaussian functions, whose size is a dynamical
-variable and whose position is not constrained to a nuclear
-center. This form allows for straightforward propagation of the
-wavefunction, with time, using a simple formulation from which the
-equations of motion are then integrated with conventional MD
-algorithms. In addition to this spin-dependent Pauli repulsion
-potential term between Gaussians, eFF includes the electron kinetic
-energy from the Gaussians. These two terms are based on
-first-principles quantum mechanics. On the other hand, nuclei are
-described as point charges, which interact with other nuclei and
-electrons through standard electrostatic potential forms.
-
-The full Hamiltonian (shown below), contains then a standard
-description for electrostatic interactions between a set of
-delocalized point and Gaussian charges which include, nuclei-nuclei
-(NN), electron-electron (ee), and nuclei-electron (Ne). Thus, eFF is a
-mixed QM-classical mechanics method rather than a conventional force
-field method (in which electron motions are averaged out into ground
-state nuclear motions, i.e a single electronic state, and particle
-interactions are described via empirically parameterized interatomic
-potential functions). This makes eFF uniquely suited to simulate
-materials over a wide range of temperatures and pressures where
-electronically excited and ionized states of matter can occur and
-coexist. Furthermore, the interactions between particles -nuclei and
-electrons- reduce to the sum of a set of effective pairwise potentials
-in the eFF formulation. The *eff/cut* style computes the pairwise
-Coulomb interactions between nuclei and electrons (E_NN,E_Ne,E_ee),
-and the quantum-derived Pauli (E_PR) and Kinetic energy interactions
-potentials between electrons (E_KE) for a total energy expression
-given as,
-
-.. image:: Eqs/eff_energy_expression.jpg
- :align: center
-
-The individual terms are defined as follows:
-
-.. image:: Eqs/eff_KE.jpg
- :align: center
-
-.. image:: Eqs/eff_NN.jpg
- :align: center
-
-.. image:: Eqs/eff_Ne.jpg
- :align: center
-
-.. image:: Eqs/eff_ee.jpg
- :align: center
-
-.. image:: Eqs/eff_Pauli.jpg
- :align: center
-
-where, s_i correspond to the electron sizes, the sigmas i's to the
-fixed spins of the electrons, Z_i to the charges on the nuclei, R_ij
-to the distances between the nuclei or the nuclei and electrons, and
-r_ij to the distances between electrons. For additional details see
-:ref:`(Jaramillo-Botero) <Jaramillo-Botero>`.
-
-The overall electrostatics energy is given in Hartree units of energy
-by default and can be modified by an energy-conversion constant,
-according to the units chosen (see :doc:`electron_units <units>`). The
-cutoff Rc, given in Bohrs (by default), truncates the interaction
-distance. The recommended cutoff for this pair style should follow
-the minimum image criterion, i.e. half of the minimum unit cell
-length.
-
-Style *eff/long* (not yet available) computes the same interactions as
-style *eff/cut* except that an additional damping factor is applied so
-it can be used in conjunction with the
-:doc:`kspace_style <kspace_style>` command and its *ewald* or *pppm*
-option. The Coulombic cutoff specified for this style means that
-pairwise interactions within this distance are computed directly;
-interactions outside that distance are computed in reciprocal space.
-
-This potential is designed to be used with :doc:`atom_style electron <atom_style>` definitions, in order to handle the
-description of systems with interacting nuclei and explicit electrons.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* cutoff (distance units)
-
-For *eff/cut*\ , the cutoff coefficient is optional. If it is not used
-(as in some of the examples above), the default global value specified
-in the pair_style command is used.
-
-For *eff/long* (not yet available) no cutoff will be specified for an
-individual I,J type pair via the :doc:`pair_coeff <pair_coeff>` command.
-All type pairs use the same global cutoff specified in the pair_style
-command.
-
-
-----------
-
-
-The *limit/eradius* and *pressure/evirials* keywrods are optional.
-Neither or both must be specified. If not specified they are unset.
-
-The *limit/eradius* keyword is used to restrain electron size from
-becoming excessively diffuse at very high temperatures were the
-Gaussian wave packet representation breaks down, and from expanding as
-free particles to infinite size. If unset, electron radius is free to
-increase without bounds. If set, a restraining harmonic potential of
-the form E = 1/2k_ss^2 for s > L_box/2, where k_s = 1 Hartrees/Bohr^2,
-is applied on the electron radius.
-
-The *pressure/evirials* keyword is used to control between two types
-of pressure computation: if unset, the computed pressure does not
-include the electronic radial virials contributions to the total
-pressure (scalar or tensor). If set, the computed pressure will
-include the electronic radial virial contributions to the total
-pressure (scalar and tensor).
-
-The *ecp* keyword is used to associate an ECP representation for a
-particular atom type. The ECP captures the orbital overlap between a
-core pseudo particle and valence electrons within the Pauli repulsion.
-A list of type:element-symbol pairs may be provided for all ECP
-representations, after the "ecp" keyword.
-
-.. note::
-
- Default ECP parameters are provided for C, N, O, Al, and Si.
- Users can modify these using the pair_coeff command as exemplified
- above. For this, the User must distinguish between two different
- functional forms supported, one that captures the orbital overlap
- assuming the s-type core interacts with an s-like valence electron
- (s-s) and another that assumes the interaction is s-p. For systems
- that exhibit significant p-character (e.g. C, N, O) the s-p form is
- recommended. The "s" ECP form requires 3 parameters and the "p" 5
- parameters.
-
-.. note::
-
- there are two different pressures that can be reported for eFF
- when defining this pair_style, one (default) that considers electrons
- do not contribute radial virial components (i.e. electrons treated as
- incompressible 'rigid' spheres) and one that does. The radial
- electronic contributions to the virials are only tallied if the
- flexible pressure option is set, and this will affect both global and
- per-atom quantities. In principle, the true pressure of a system is
- somewhere in between the rigid and the flexible eFF pressures, but,
- for most cases, the difference between these two pressures will not be
- significant over long-term averaged runs (i.e. even though the energy
- partitioning changes, the total energy remains similar).
-
-
-----------
-
-
-.. note::
-
- This implemention of eFF gives a reasonably accurate description
- for systems containing nuclei from Z = 1-6 in "all electron"
- representations. For systems with increasingly non-spherical
- electrons, Users should use the ECP representations. ECPs are now
- supported and validated for most of the 2nd and 3rd row elements of
- the p-block. Predefined parameters are provided for C, N, O, Al, and
- Si. The ECP captures the orbital overlap between the core and valence
- electrons (i.e. Pauli repulsion) with one of the functional forms:
-
-.. image:: Eqs/eff_ECP1.jpg
- :align: center
-
-.. image:: Eqs/eff_ECP2.jpg
- :align: center
-
-Where the 1st form correspond to core interactions with s-type valence
-electrons and the 2nd to core interactions with p-type valence
-electrons.
-
-The current version adds full support for models with fixed-core and
-ECP definitions. to enable larger timesteps (i.e. by avoiding the
-high frequency vibrational modes -translational and radial- of the 2 s
-electrons), and in the ECP case to reduce the increased orbital
-complexity in higher Z elements (up to Z<18). A fixed-core should be
-defined with a mass that includes the corresponding nuclear mass plus
-the 2 s electrons in atomic mass units (2x5.4857990943e-4), and a
-radius equivalent to that of minimized 1s electrons (see examples
-under /examples/USER/eff/fixed-core). An pseudo-core should be
-described with a mass that includes the corresponding nuclear mass,
-plus all the core electrons (i.e no outer shell electrons), and a
-radius equivalent to that of a corresponding minimized full-electron
-system. The charge for a pseudo-core atom should be given by the
-number of outer shell electrons.
-
-In general, eFF excels at computing the properties of materials in
-extreme conditions and tracing the system dynamics over multi-picosend
-timescales; this is particularly relevant where electron excitations
-can change significantly the nature of bonding in the system. It can
-capture with surprising accuracy the behavior of such systems because
-it describes consistently and in an unbiased manner many different
-kinds of bonds, including covalent, ionic, multicenter, ionic, and
-plasma, and how they interconvert and/or change when they become
-excited. eFF also excels in computing the relative thermochemistry of
-isodemic reactions and conformational changes, where the bonds of the
-reactants are of the same type as the bonds of the products. eFF
-assumes that kinetic energy differences dominate the overall exchange
-energy, which is true when the electrons present are nearly spherical
-and nodeless and valid for covalent compounds such as dense hydrogen,
-hydrocarbons, and diamond; alkali metals (e.g. lithium), alkali earth
-metals (e.g. beryllium) and semimetals such as boron; and various
-compounds containing ionic and/or multicenter bonds, such as boron
-dihydride.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the cutoff distance for the
-*eff/cut* style can be mixed. The default mix value is *geometric*\ .
-See the "pair_modify" command for details.
-
-The :doc:`pair_modify <pair_modify>` shift option is not relevant for
-these pair styles.
-
-The *eff/long* (not yet available) style supports the
-:doc:`pair_modify <pair_modify>` table option for tabulation of the
-short-range portion of the long-range Coulombic interaction.
-
-These pair styles do not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-These pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do not need
-to be specified in an input script that reads a restart file.
-
-These pair styles can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. They do not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-These pair styles will only be enabled if LAMMPS is built with the
-USER-EFF package. It will only be enabled if LAMMPS was built with
-that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-These pair styles require that particles store electron attributes
-such as radius, radial velocity, and radital force, as defined by the
-:doc:`atom_style <atom_style>`. The *electron* atom style does all of
-this.
-
-Thes pair styles require you to use the :doc:`comm_modify vel yes <comm_modify>` command so that velocites are stored by ghost
-atoms.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-Default
-"""""""
-
-If not specified, limit_eradius = 0 and pressure_with_evirials = 0.
-
-
-----------
-
-
-.. _Su:
-
-
-
-**(Su)** Su and Goddard, Excited Electron Dynamics Modeling of Warm
-Dense Matter, Phys Rev Lett, 99:185003 (2007).
-
-.. _Jaramillo-Botero:
-
-
-
-**(Jaramillo-Botero)** Jaramillo-Botero, Su, Qi, Goddard, Large-scale,
-Long-term Non-adiabatic Electron Molecular Dynamics for Describing
-Material Properties and Phenomena in Extreme Environments, J Comp
-Chem, 32, 497-512 (2011).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_eim.txt b/doc/html/_sources/pair_eim.txt
deleted file mode 100644
index f66946673..000000000
--- a/doc/html/_sources/pair_eim.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-.. index:: pair_style eim
-
-pair_style eim command
-======================
-
-pair_style eim/omp command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style
-
-* style = *eim*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style eim
- pair_coeff * * Na Cl ../potentials/ffield.eim Na Cl
- pair_coeff * * Na Cl ffield.eim Na Na Na Cl
- pair_coeff * * Na Cl ../potentials/ffield.eim Cl NULL Na
-
-Description
-"""""""""""
-
-Style *eim* computes pairwise interactions for ionic compounds
-using embedded-ion method (EIM) potentials :ref:`(Zhou) <Zhou>`. The
-energy of the system E is given by
-
-.. image:: Eqs/pair_eim1.jpg
- :align: center
-
-The first term is a double pairwise sum over the J neighbors of all I
-atoms, where phi_ij is a pair potential. The second term sums over
-the embedding energy E_i of atom I, which is a function of its charge
-q_i and the electrical potential sigma_i at its location. E_i, q_i,
-and sigma_i are calculated as
-
-.. image:: Eqs/pair_eim2.jpg
- :align: center
-
-where eta_ji is a pairwise function describing electron flow from atom
-I to atom J, and psi_ij is another pairwise function. The multi-body
-nature of the EIM potential is a result of the embedding energy term.
-A complete list of all the pair functions used in EIM is summarized
-below
-
-.. image:: Eqs/pair_eim3.jpg
- :align: center
-
-Here E_b, r_e, r_(c,phi), alpha, beta, A_(psi), zeta, r_(s,psi),
-r_(c,psi), A_(eta), r_(s,eta), r_(c,eta), chi, and pair function type
-p are parameters, with subscripts ij indicating the two species of
-atoms in the atomic pair.
-
-.. note::
-
- Even though the EIM potential is treating atoms as charged ions,
- you should not use a LAMMPS :doc:`atom_style <atom_style>` that stores a
- charge on each atom and thus requires you to assign a charge to each
- atom, e.g. the *charge* or *full* atom styles. This is because the
- EIM potential infers the charge on an atom from the equation above for
- q_i; you do not assign charges explicitly.
-
-
-----------
-
-
-All the EIM parameters are listed in a potential file which is
-specified by the :doc:`pair_coeff <pair_coeff>` command. This is an
-ASCII text file in a format described below. The "ffield.eim" file
-included in the "potentials" directory of the LAMMPS distribution
-currently includes nine elements Li, Na, K, Rb, Cs, F, Cl, Br, and I.
-A system with any combination of these elements can be modeled. This
-file is parameterized in terms of LAMMPS :doc:`metal units <units>`.
-
-Note that unlike other potentials, cutoffs for EIM potentials are not
-set in the pair_style or pair_coeff command; they are specified in the
-EIM potential file itself. Likewise, the EIM potential file lists
-atomic masses; thus you do not need to use the :doc:`mass <mass>`
-command to specify them.
-
-Only a single pair_coeff command is used with the *eim* style which
-specifies an EIM potential file and the element(s) to extract
-information for. The EIM elements 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:
-
-* Elem1, Elem2, ...
-* EIM potential file
-* N element names = mapping of EIM elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-As an example like one of those above, suppose you want to model a
-system with Na and Cl atoms. If your LAMMPS simulation has 4 atoms
-types and you want the 1st 3 to be Na, and the 4th to be Cl, you would
-use the following pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * Na Cl ffield.eim Na Na Na Cl
-
-The 1st 2 arguments must be * * so as to span all LAMMPS atom types.
-The filename is the EIM potential file. The Na and Cl arguments
-(before the file name) are the two elements for which info will be
-extracted from the potentail file. The first three trailing Na
-arguments map LAMMPS atom types 1,2,3 to the EIM Na element. The
-final Cl argument maps LAMMPS atom type 4 to the EIM Cl element.
-
-If a mapping value is specified as NULL, the mapping is not performed.
-This can be used when an *eim* 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.
-
-The ffield.eim file in the *potentials* directory of the LAMMPS
-distribution is formated as follows:
-
-Lines starting with # are comments and are ignored by LAMMPS. Lines
-starting with "global:" include three global values. The first value
-divides the cations from anions, i.e., any elements with
-electronegativity above this value are viewed as anions, and any
-elements with electronegativity below this value are viewed as
-cations. The second and third values are related to the cutoff
-function - i.e. the 0.510204, 1.64498, and 0.010204 shown in the above
-equation can be derived from these values.
-
-Lines starting with "element:" are formatted as follows: name of
-element, atomic number, atomic mass, electronic negativity, atomic
-radius (LAMMPS ignores it), ionic radius (LAMMPS ignores it), cohesive
-energy (LAMMPS ignores it), and q0 (must be 0).
-
-Lines starting with "pair:" are entered as: element 1, element 2,
-r_(c,phi), r_(c,phi) (redundant for historical reasons), E_b, r_e,
-alpha, beta, r_(c,eta), A_(eta), r_(s,eta), r_(c,psi), A_(psi), zeta,
-r_(s,psi), and p.
-
-The lines in the file can be in any order; LAMMPS extracts the info it
-needs.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This style is part of the MANYBODY package. It is only enabled if
-LAMMPS was built with that package (which it is by default).
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Zhou:
-
-
-
-**(Zhou)** Zhou, submitted for publication (2010). Please contact
-Xiaowang Zhou (Sandia) for details via email at xzhou at sandia.gov.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_exp6_rx.txt b/doc/html/_sources/pair_exp6_rx.txt
deleted file mode 100644
index 99aec901b..000000000
--- a/doc/html/_sources/pair_exp6_rx.txt
+++ /dev/null
@@ -1,140 +0,0 @@
-.. index:: pair_style exp6/rx
-
-pair_style exp6/rx command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style exp6/rx cutoff
-
-* cutoff = global cutoff for DPD interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style exp6/rx 10.0
- pair_coeff * * exp6.params h2o h2o 1.0 1.0 10.0
- pair_coeff * * exp6.params h2o 1fluid 1.0 1.0 10.0
- pair_coeff * * exp6.params 1fluid 1fluid 1.0 1.0 10.0
-
-Description
-"""""""""""
-
-Style *exp6/rx* is used in reaction DPD simulations, where the
-coarse-grained (CG) particles are composed of *m* species whose
-reaction rate kinetics are determined from a set of *n* reaction rate
-equations through the :doc:`fix rx <fix_rx>` command. The species of
-one CG particle can interact with a species in a neighboring CG
-particle through a site-site interaction potential model. The
-*exp6/rx* style computes an exponential-6 potential given by
-
-.. image:: Eqs/pair_exp6_rx.jpg
- :align: center
-
-where the *epsilon* parameter determines the depth of the potential
-minimum located at *Rm*\ , and *alpha* determines the softness of the repulsion.
-
-The coefficients must be defined for each species in a given particle
-type via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, where the first argument is the filename that includes the
-exponential-6 parameters for each species. The file includes the
-species tag followed by the *alpha*\ , *epsilon* and *Rm*
-parameters. The format of the file is described below.
-
-The second and third arguments specify the site-site interaction
-potential between two species contained within two different
-particles. The species tags must either correspond to the species
-defined in the reaction kinetics files specified with the :doc:`fix rx <fix_rx>` command or they must correspond to the tag "1fluid",
-signifying interaction with a product species mixture determined
-through a one-fluid approximation. The interaction potential is
-weighted by the geometric average of the concentrations of the two
-species. The coarse-grained potential is stored before and after the
-reaction kinetics solver is applied, where the difference is defined
-to be the internal chemical energy (uChem).
-
-The fourth and fifth arguments specify the *Rm* and *epsilon* scaling exponents.
-
-The final argument specifies the interaction cutoff.
-
-
-----------
-
-
-The format of a tabulated file is as follows (without the
-parenthesized comments):
-
-.. parsed-literal::
-
- # exponential-6 parameters for various species (one or more comment or blank lines)
-
-.. parsed-literal::
-
- h2o exp6 11.00 0.02 3.50 (species, exp6, alpha, Rm, epsilon)
- no2 exp6 13.60 0.01 3.70
- ...
- co2 exp6 13.00 0.03 3.20
-
-A section begins with a non-blank line whose 1st character is not a
-"#"; blank lines or lines starting with "#" can be used as comments
-between sections.
-
-Following a blank line, the next N lines list the species and their
-corresponding parameters. The first argument is the species tag, the
-second argument is the exp6 tag, the 3rd argument is the *alpha*
-parameter (energy units), the 4th argument is the *epsilon* parameter
-(energy-distance^6 units), and the 5th argument is the *Rm* parameter
-(distance units). If a species tag of "1fluid" is listed as a pair
-coefficient, a one-fluid approximation is specified where a
-concentration-dependent combination of the parameters is computed
-through the following equations:
-
-.. image:: Eqs/pair_exp6_rx_oneFluid.jpg
- :align: center
-
-where
-
-.. image:: Eqs/pair_exp6_rx_oneFluid2.jpg
- :align: center
-
-and xa and xb are the mole fractions of a and b, respectively, which
-comprise the gas mixture.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-This style does not support the :doc:`pair_modify <pair_modify>` shift option
-for the energy of the exp() and 1/r^6 portion of the pair interaction.
-
-This style does not support the pair_modify tail option for adding long-range
-tail corrections to energy and pressure for the A,C terms in the
-pair interaction.
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-DPD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_gauss.txt b/doc/html/_sources/pair_gauss.txt
deleted file mode 100644
index e162c8e8f..000000000
--- a/doc/html/_sources/pair_gauss.txt
+++ /dev/null
@@ -1,193 +0,0 @@
-.. index:: pair_style gauss
-
-pair_style gauss command
-========================
-
-pair_style gauss/gpu command
-============================
-
-pair_style gauss/omp command
-============================
-
-pair_style gauss/cut command
-============================
-
-pair_style gauss/cut/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style gauss cutoff
- pair_style gauss/cut cutoff
-
-* cutoff = global cutoff for Gauss interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style gauss 12.0
- pair_coeff * * 1.0 0.9
- pair_coeff 1 4 1.0 0.9 10.0
-
-.. parsed-literal::
-
- pair_style gauss/cut 3.5
- pair_coeff 1 4 0.2805 1.45 0.112
-
-Description
-"""""""""""
-
-Style *gauss* computes a tethering potential of the form
-
-.. image:: Eqs/pair_gauss.jpg
- :align: center
-
-between an atom and its corresponding tether site which will typically
-be a frozen atom in the simulation. Rc is the cutoff.
-
-The following coefficients must be defined for each pair of atom types
-via the :doc:`pair_coeff <pair_coeff>` command as in the examples above,
-or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* A (energy units)
-* B (1/distance^2 units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global cutoff
-is used.
-
-Style *gauss/cut* computes a generalized Gaussian interaction potential
-between pairs of particles:
-
-.. image:: Eqs/pair_gauss_cut.jpg
- :align: center
-
-where H determines together with the standard deviation sigma_h the
-peak height of the Gaussian function, and r_mh the peak position.
-Examples of the use of the Gaussian potentials include implicit
-solvent simulations of salt ions :ref:`(Lenart) <Lenart>` and of surfactants
-:ref:`(Jusufi) <Jusufi>`. In these instances the Gaussian potential mimics
-the hydration barrier between a pair of particles. The hydration
-barrier is located at r_mh and has a width of sigma_h. The prefactor
-determines the hight of the potential barrier.
-
-The following coefficients must be defined for each pair of atom types
-via the :doc:`pair_coeff <pair_coeff>` command as in the example above,
-or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* H (energy * distance units)
-* r_mh (distance units)
-* sigma_h (distance units)
-
-The global cutoff (r_c) specified in the pair_style command is used.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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
-switch7_Section_start.html#start_6 when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-These pair styles do not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-The *gauss* style does not support the :doc:`pair_modify <pair_modify>`
-shift option. There is no effect due to the Gaussian well beyond the
-cutoff; hence reasonable cutoffs need to be specified.
-
-The *gauss/cut* style supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the Gauss-potential portion of the pair
-interaction.
-
-The :doc:`pair_modify <pair_modify>` table and tail options are not
-relevant for these pair styles.
-
-These pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do not need
-to be specified in an input script that reads a restart file.
-
-These pair styles can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. They do not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-The *gauss* pair style tallies an "occupancy" count of how many Gaussian-well
-sites have an atom within the distance at which the force is a maximum
-= sqrt(0.5/b). This quantity can be accessed via the :doc:`compute pair <compute_pair>` command as a vector of values of length 1.
-
-To print this quantity to the log file (with a descriptive column
-heading) the following commands could be included in an input script:
-
-.. parsed-literal::
-
- compute gauss all pair gauss
- variable occ equal c_gauss[1]
- thermo_style custom step temp epair v_occ
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The *gauss/cut* style is part of the "user-misc" package. It is only
-enabled if LAMMPS is build with that package. See the :ref:`Making of LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`,
-:doc:`pair_style coul/diel <pair_coul_diel>`
-
-**Default:** none
-
-.. _Lenart:
-
-
-
-**(Lenart)** Lenart , Jusufi, and Panagiotopoulos, J Chem Phys, 126,
-044509 (2007).
-
-.. _Jusufi:
-
-
-
-**(Jusufi)** Jusufi, Hynninen, and Panagiotopoulos, J Phys Chem B, 112,
-13783 (2008).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_gayberne.txt b/doc/html/_sources/pair_gayberne.txt
deleted file mode 100644
index 1e61eb0c3..000000000
--- a/doc/html/_sources/pair_gayberne.txt
+++ /dev/null
@@ -1,263 +0,0 @@
-.. index:: pair_style gayberne
-
-pair_style gayberne command
-===========================
-
-pair_style gayberne/gpu command
-===============================
-
-pair_style gayberne/intel command
-=================================
-
-pair_style gayberne/omp command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style gayberne gamma upsilon mu cutoff
-
-* gamma = shift for potential minimum (typically 1)
-* upsilon = exponent for eta orientation-dependent energy function
-* mu = exponent for chi orientation-dependent energy function
-* cutoff = global cutoff for interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style gayberne 1.0 1.0 1.0 10.0
- pair_coeff * * 1.0 1.7 1.7 3.4 3.4 1.0 1.0 1.0
-
-Description
-"""""""""""
-
-The *gayberne* styles compute a Gay-Berne anisotropic LJ interaction
-:ref:`(Berardi) <Berardi>` between pairs of ellipsoidal particles or an
-ellipsoidal and spherical particle via the formulas
-
-.. image:: Eqs/pair_gayberne.jpg
- :align: center
-
-where A1 and A2 are the transformation matrices from the simulation
-box frame to the body frame and r12 is the center to center vector
-between the particles. Ur controls the shifted distance dependent
-interaction based on the distance of closest approach of the two
-particles (h12) and the user-specified shift parameter gamma. When
-both particles are spherical, the formula reduces to the usual
-Lennard-Jones interaction (see details below for when Gay-Berne treats
-a particle as "spherical").
-
-For large uniform molecules it has been shown that the energy
-parameters are approximately representable in terms of local contact
-curvatures :ref:`(Everaers) <Everaers>`:
-
-.. image:: Eqs/pair_gayberne2.jpg
- :align: center
-
-The variable names utilized as potential parameters are for the most
-part taken from :ref:`(Everaers) <Everaers>` in order to be consistent with
-the :doc:`RE-squared pair potential <pair_resquared>`. Details on the
-upsilon and mu parameters are given
-`here <PDF/pair_resquared_extra.pdf>`_.
-
-More details of the Gay-Berne formulation are given in the references
-listed below and in `this supplementary document <PDF/pair_gayberne_extra.pdf>`_.
-
-Use of this pair style requires the NVE, NVT, or NPT fixes with the
-*asphere* extension (e.g. :doc:`fix nve/asphere <fix_nve_asphere>`) in
-order to integrate particle rotation. Additionally, :doc:`atom_style ellipsoid <atom_style>` should be used since it defines the
-rotational state and the size and shape of each ellipsoidal particle.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon = well depth (energy units)
-* sigma = minimum effective particle radii (distance units)
-* epsilon_i_a = relative well depth of type I for side-to-side interactions
-* epsilon_i_b = relative well depth of type I for face-to-face interactions
-* epsilon_i_c = relative well depth of type I for end-to-end interactions
-* epsilon_j_a = relative well depth of type J for side-to-side interactions
-* epsilon_j_b = relative well depth of type J for face-to-face interactions
-* epsilon_j_c = relative well depth of type J for end-to-end interactions
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global
-cutoff specified in the pair_style command is used.
-
-It is typical with the Gay-Berne potential to define *sigma* as the
-minimum of the 3 shape diameters of the particles involved in an I,I
-interaction, though this is not required. Note that this is a
-different meaning for *sigma* than the :doc:`pair_style resquared <pair_resquared>` potential uses.
-
-The epsilon_i and epsilon_j coefficients are actually defined for atom
-types, not for pairs of atom types. Thus, in a series of pair_coeff
-commands, they only need to be specified once for each atom type.
-
-Specifically, if any of epsilon_i_a, epsilon_i_b, epsilon_i_c are
-non-zero, the three values are assigned to atom type I. If all the
-epsilon_i values are zero, they are ignored. If any of epsilon_j_a,
-epsilon_j_b, epsilon_j_c are non-zero, the three values are assigned
-to atom type J. If all three epsilon_j values are zero, they are
-ignored. Thus the typical way to define the epsilon_i and epsilon_j
-coefficients is to list their values in "pair_coeff I J" commands when
-I = J, but set them to 0.0 when I != J. If you do list them when I !=
-J, you should insure they are consistent with their values in other
-pair_coeff commands, since only the last setting will be in effect.
-
-Note that if this potential is being used as a sub-style of
-:doc:`pair_style hybrid <pair_hybrid>`, and there is no "pair_coeff I I"
-setting made for Gay-Berne for a particular type I (because I-I
-interactions are computed by another hybrid pair potential), then you
-still need to insure the epsilon a,b,c coefficients are assigned to
-that type. e.g. in a "pair_coeff I J" command.
-
-.. note::
-
- If the epsilon a = b = c for an atom type, and if the shape of
- the particle itself is spherical, meaning its 3 shape parameters are
- all the same, then the particle is treated as an LJ sphere by the
- Gay-Berne potential. This is significant because if two LJ spheres
- interact, then the simple Lennard-Jones formula is used to compute
- their interaction energy/force using the specified epsilon and sigma
- as the standard LJ parameters. This is much cheaper to compute than
- the full Gay-Berne formula. To treat the particle as a LJ sphere with
- sigma = D, you should normally set epsilon a = b = c = 1.0, set the
- pair_coeff sigma = D, and also set the 3 shape parameters for the
- particle to D. The one exception is that if the 3 shape parameters
- are set to 0.0, which is a valid way in LAMMPS to specify a point
- particle, then the Gay-Berne potential will treat that as shape
- parameters of 1.0 (i.e. a LJ particle with sigma = 1), since it
- requires finite-size particles. In this case you should still set the
- pair_coeff sigma to 1.0 as well.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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. The default mix
-value is *geometric*\ . See the "pair_modify" command for details.
-
-This pair styles supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the Lennard-Jones portion of the pair
-interaction, but only for sphere-sphere interactions. There is no
-shifting performed for ellipsoidal interactions due to the anisotropic
-dependence of the interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The *gayberne* style is part of the ASPHERE package. It is only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-These pair style require that atoms store torque and a quaternion to
-represent their orientation, as defined by the
-:doc:`atom_style <atom_style>`. It also require they store a per-type
-:doc:`shape <shape>`. The particles cannot store a per-particle
-diameter.
-
-This pair style requires that atoms be ellipsoids as defined by the
-:doc:`atom_style ellipsoid <atom_style>` command.
-
-Particles acted on by the potential can be finite-size aspherical or
-spherical particles, or point particles. Spherical particles have all
-3 of their shape parameters equal to each other. Point particles have
-all 3 of their shape parameters equal to 0.0.
-
-The Gay-Berne potential does not become isotropic as r increases
-:ref:`(Everaers) <Everaers>`. The distance-of-closest-approach
-approximation used by LAMMPS becomes less accurate when high-aspect
-ratio ellipsoids are used.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`fix nve/asphere <fix_nve_asphere>`,
-:doc:`compute temp/asphere <compute_temp_asphere>`, :doc:`pair_style resquared <pair_resquared>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Everaers:
-
-
-
-**(Everaers)** Everaers and Ejtehadi, Phys Rev E, 67, 041710 (2003).
-
-.. _Berardi:
-
-
-
-**(Berardi)** Berardi, Fava, Zannoni, Chem Phys Lett, 297, 8-14 (1998).
-Berardi, Muccioli, Zannoni, J Chem Phys, 128, 024905 (2008).
-
-.. _Perram:
-
-
-
-**(Perram)** Perram and Rasmussen, Phys Rev E, 54, 6565-6572 (1996).
-
-.. _Allen:
-
-
-
-**(Allen)** Allen and Germano, Mol Phys 104, 3225-3235 (2006).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_gran.txt b/doc/html/_sources/pair_gran.txt
deleted file mode 100644
index 3ed73524b..000000000
--- a/doc/html/_sources/pair_gran.txt
+++ /dev/null
@@ -1,308 +0,0 @@
-.. index:: pair_style gran/hooke
-
-pair_style gran/hooke command
-=============================
-
-pair_style gran/omp command
-===========================
-
-pair_style gran/hooke/history command
-=====================================
-
-pair_style gran/hooke/history/omp command
-=========================================
-
-pair_style gran/hertz/history command
-=====================================
-
-pair_style gran/hertz/history/omp command
-=========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style Kn Kt gamma_n gamma_t xmu dampflag
-
-* style = *gran/hooke* or *gran/hooke/history* or *gran/hertz/history*
-* Kn = elastic constant for normal particle repulsion (force/distance units or pressure units - see discussion below)
-* Kt = elastic constant for tangential contact (force/distance units or pressure units - see discussion below)
-* gamma_n = damping coefficient for collisions in normal direction (1/time units or 1/time-distance units - see discussion below)
-* gamma_t = damping coefficient for collisions in tangential direction (1/time units or 1/time-distance units - see discussion below)
-* xmu = static yield criterion (unitless value between 0.0 and 1.0e4)
-* dampflag = 0 or 1 if tangential damping force is excluded or included
-.. note::
-
- Versions of LAMMPS before 9Jan09 had different style names for
- granular force fields. This is to emphasize the fact that the
- Hertzian equation has changed to model polydispersity more accurately.
- A side effect of the change is that the Kn, Kt, gamma_n, and gamma_t
- coefficients in the pair_style command must be specified with
- different values in order to reproduce calculations made with earlier
- versions of LAMMPS, even for monodisperse systems. See the NOTE below
- for details.
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style gran/hooke/history 200000.0 NULL 50.0 NULL 0.5 1
- pair_style gran/hooke 200000.0 70000.0 50.0 30.0 0.5 0
-
-Description
-"""""""""""
-
-The *gran* styles use the following formulas for the frictional force
-between two granular particles, as described in
-:ref:`(Brilliantov) <Brilliantov>`, :ref:`(Silbert) <Silbert>`, and
-:ref:`(Zhang) <Zhang>`, when the distance r between two particles of radii
-Ri and Rj is less than their contact distance d = Ri + Rj. There is
-no force between the particles when r > d.
-
-The two Hookean styles use this formula:
-
-.. image:: Eqs/pair_gran_hooke.jpg
- :align: center
-
-The Hertzian style uses this formula:
-
-.. image:: Eqs/pair_gran_hertz.jpg
- :align: center
-
-In both equations the first parenthesized term is the normal force
-between the two particles and the second parenthesized term is the
-tangential force. The normal force has 2 terms, a contact force and a
-damping force. The tangential force also has 2 terms: a shear force
-and a damping force. The shear force is a "history" effect that
-accounts for the tangential displacement between the particles for the
-duration of the time they are in contact. This term is included in
-pair styles *hooke/history* and *hertz/history*\ , but is not included
-in pair style *hooke*\ . The tangential damping force term is included
-in all three pair styles if *dampflag* is set to 1; it is not included
-if *dampflag* is set to 0.
-
-The other quantities in the equations are as follows:
-
-* delta = d - r = overlap distance of 2 particles
-* Kn = elastic constant for normal contact
-* Kt = elastic constant for tangential contact
-* gamma_n = viscoelastic damping constant for normal contact
-* gamma_t = viscoelastic damping constant for tangential contact
-* m_eff = Mi Mj / (Mi + Mj) = effective mass of 2 particles of mass Mi and Mj
-* Delta St = tangential displacement vector between 2 particles which is truncated to satisfy a frictional yield criterion
-* n_ij = unit vector along the line connecting the centers of the 2 particles
-* Vn = normal component of the relative velocity of the 2 particles
-* Vt = tangential component of the relative velocity of the 2 particles
-
-The Kn, Kt, gamma_n, and gamma_t coefficients are specified as
-parameters to the pair_style command. If a NULL is used for Kt, then
-a default value is used where Kt = 2/7 Kn. If a NULL is used for
-gamma_t, then a default value is used where gamma_t = 1/2 gamma_n.
-
-The interpretation and units for these 4 coefficients are different in
-the Hookean versus Hertzian equations.
-
-The Hookean model is one where the normal push-back force for two
-overlapping particles is a linear function of the overlap distance.
-Thus the specified Kn is in units of (force/distance). Note that this
-push-back force is independent of absolute particle size (in the
-monodisperse case) and of the relative sizes of the two particles (in
-the polydisperse case). This model also applies to the other terms in
-the force equation so that the specified gamma_n is in units of
-(1/time), Kt is in units of (force/distance), and gamma_t is in units
-of (1/time).
-
-The Hertzian model is one where the normal push-back force for two
-overlapping particles is proportional to the area of overlap of the
-two particles, and is thus a non-linear function of overlap distance.
-Thus Kn has units of force per area and is thus specified in units of
-(pressure). The effects of absolute particle size (monodispersity)
-and relative size (polydispersity) are captured in the radii-dependent
-pre-factors. When these pre-factors are carried through to the other
-terms in the force equation it means that the specified gamma_n is in
-units of (1/(time*distance)), Kt is in units of (pressure), and
-gamma_t is in units of (1/(time*distance)).
-
-Note that in the Hookean case, Kn can be thought of as a linear spring
-constant with units of force/distance. In the Hertzian case, Kn is
-like a non-linear spring constant with units of force/area or
-pressure, and as shown in the :ref:`(Zhang) <Zhang>` paper, Kn = 4G /
-(3(1-nu)) where nu = the Poisson ratio, G = shear modulus = E /
-(2(1+nu)), and E = Young's modulus. Similarly, Kt = 4G / (2-nu).
-(NOTE: in an earlier version of the manual, we incorrectly stated that
-Kt = 8G / (2-nu).)
-
-Thus in the Hertzian case Kn and Kt can be set to values that
-corresponds to properties of the material being modeled. This is also
-true in the Hookean case, except that a spring constant must be chosen
-that is appropriate for the absolute size of particles in the model.
-Since relative particle sizes are not accounted for, the Hookean
-styles may not be a suitable model for polydisperse systems.
-
-.. note::
-
- In versions of LAMMPS before 9Jan09, the equation for Hertzian
- interactions did not include the sqrt(RiRj/Ri+Rj) term and thus was
- not as accurate for polydisperse systems. For monodisperse systems,
- sqrt(RiRj/Ri+Rj) is a constant factor that effectively scales all 4
- coefficients: Kn, Kt, gamma_n, gamma_t. Thus you can set the values
- of these 4 coefficients appropriately in the current code to reproduce
- the results of a previous Hertzian monodisperse calculation. For
- example, for the common case of a monodisperse system with particles
- of diameter 1, all 4 of these coefficients should now be set 2x larger
- than they were previously.
-
-Xmu is also specified in the pair_style command and is the upper limit
-of the tangential force through the Coulomb criterion Ft = xmu*Fn,
-where Ft and Fn are the total tangential and normal force components
-in the formulas above. Thus in the Hookean case, the tangential force
-between 2 particles grows according to a tangential spring and
-dash-pot model until Ft/Fn = xmu and is then held at Ft = Fn*xmu until
-the particles lose contact. In the Hertzian case, a similar analogy
-holds, though the spring is no longer linear.
-
-.. note::
-
- Normally, xmu should be specified as a fractional value between
- 0.0 and 1.0, however LAMMPS allows large values (up to 1.0e4) to allow
- for modeling of systems which can sustain very large tangential
- forces.
-
-The effective mass *m_eff* is given by the formula above for two
-isolated particles. If either particle is part of a rigid body, its
-mass is replaced by the mass of the rigid body in the formula above.
-This is determined by searching for a :doc:`fix rigid <fix_rigid>`
-command (or its variants).
-
-For granular styles there are no additional coefficients to set for
-each pair of atom types via the :doc:`pair_coeff <pair_coeff>` command.
-All settings are global and are made via the pair_style command.
-However you must still use the :doc:`pair_coeff <pair_coeff>` for all
-pairs of granular atom types. For example the command
-
-.. parsed-literal::
-
- pair_coeff * *
-
-should be used if all atoms in the simulation interact via a granular
-potential (i.e. one of the pair styles above is used). If a granular
-potential is used as a sub-style of :doc:`pair_style hybrid <pair_hybrid>`, then specific atom types can be used in the
-pair_coeff command to determine which atoms interact via a granular
-potential.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-The :doc:`pair_modify <pair_modify>` mix, shift, table, and tail options
-are not relevant for granular pair styles.
-
-These pair styles write their information to :doc:`binary restart files <restart>`, so a pair_style command does not need to be
-specified in an input script that reads a restart file.
-
-These pair styles can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. They do not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-The single() function of these pair styles returns 0.0 for the energy
-of a pairwise interaction, since energy is not conserved in these
-dissipative potentials. It also returns only the normal component of
-the pairwise interaction force. However, the single() function also
-calculates 10 extra pairwise quantities. The first 3 are the
-components of the tangential force between particles I and J, acting
-on particle I. The 4th is the magnitude of this tangential force.
-The next 3 (5-7) are the components of the relative velocity in the
-normal direction (along the line joining the 2 sphere centers). The
-last 3 (8-10) the components of the relative velocity in the
-tangential direction.
-
-These extra quantites can be accessed by the :doc:`compute pair/local <compute_pair_local>` command, as *p1*\ , *p2*\ , ...,
-*p10*\ .
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-All the granular pair styles are part of the GRANULAR package. It is
-only enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-These pair styles require that atoms store torque and angular velocity
-(omega) as defined by the :doc:`atom_style <atom_style>`. They also
-require a per-particle radius is stored. The *sphere* atom style does
-all of this.
-
-This pair style requires you to use the :doc:`comm_modify vel yes <comm_modify>` command so that velocites are stored by ghost
-atoms.
-
-These pair styles will not restart exactly when using the
-:doc:`read_restart <read_restart>` command, though they should provide
-statistically similar results. This is because the forces they
-compute depend on atom velocities. See the
-:doc:`read_restart <read_restart>` command for more details.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Brilliantov:
-
-
-
-**(Brilliantov)** Brilliantov, Spahn, Hertzsch, Poschel, Phys Rev E, 53,
-p 5382-5392 (1996).
-
-.. _Silbert:
-
-
-
-**(Silbert)** Silbert, Ertas, Grest, Halsey, Levine, Plimpton, Phys Rev
-E, 64, p 051302 (2001).
-
-.. _Zhang:
-
-
-
-**(Zhang)** Zhang and Makse, Phys Rev E, 72, p 011301 (2005).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_gromacs.txt b/doc/html/_sources/pair_gromacs.txt
deleted file mode 100644
index 926dcf6e6..000000000
--- a/doc/html/_sources/pair_gromacs.txt
+++ /dev/null
@@ -1,187 +0,0 @@
-.. index:: pair_style lj/gromacs
-
-pair_style lj/gromacs command
-=============================
-
-pair_style lj/gromacs/gpu command
-=================================
-
-pair_style lj/gromacs/omp command
-=================================
-
-pair_style lj/gromacs/coul/gromacs command
-==========================================
-
-pair_style lj/gromacs/coul/gromacs/omp command
-==============================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *lj/gromacs* or *lj/gromacs/coul/gromacs*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *lj/gromacs* args = inner outer
- inner, outer = global switching cutoffs for Lennard Jones
- *lj/gromacs/coul/gromacs* args = inner outer (inner2) (outer2)
- inner, outer = global switching cutoffs for Lennard Jones (and Coulombic if only 2 args)
- inner2, outer2 = global switching cutoffs for Coulombic (optional)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/gromacs 9.0 12.0
- pair_coeff * * 100.0 2.0
- pair_coeff 2 2 100.0 2.0 8.0 10.0
-
-.. parsed-literal::
-
- pair_style lj/gromacs/coul/gromacs 9.0 12.0
- pair_style lj/gromacs/coul/gromacs 8.0 10.0 7.0 9.0
- pair_coeff * * 100.0 2.0
-
-Description
-"""""""""""
-
-The *lj/gromacs* styles compute shifted LJ and Coulombic interactions
-with an additional switching function S(r) that ramps the energy and force
-smoothly to zero between an inner and outer cutoff. It is a commonly
-used potential in the `GROMACS <http://www.gromacs.org>`_ MD code and for
-the coarse-grained models of :ref:`(Marrink) <Marrink>`.
-
-.. image:: Eqs/pair_gromacs.jpg
- :align: center
-
-r1 is the inner cutoff; rc is the outer cutoff. The coefficients A, B,
-and C are computed by LAMMPS to perform the shifting and smoothing.
-The function
-S(r) is actually applied once to each term of the LJ formula and once
-to the Coulombic formula, so there are 2 or 3 sets of A,B,C coefficients
-depending on which pair_style is used. The boundary conditions
-applied to the smoothing function are as follows: S'(r1) = S''(r1) = 0,
-S(rc) = -E(rc), S'(rc) = -E'(rc), and S''(rc) = -E''(rc),
-where E(r) is the corresponding term
-in the LJ or Coulombic potential energy function.
-Single and double primes denote first and second
-derivatives with respect to r, respectively.
-
-The inner and outer cutoff for the LJ and Coulombic terms can be the
-same or different depending on whether 2 or 4 arguments are used in
-the pair_style command. The inner LJ cutoff must be > 0, but the
-inner Coulombic cutoff can be >= 0.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* inner (distance units)
-* outer (distance units)
-
-Note that sigma is defined in the LJ formula as the zero-crossing
-distance for the potential, not as the energy minimum at 2^(1/6)
-sigma.
-
-The last 2 coefficients are optional inner and outer cutoffs for style
-*lj/gromacs*\ . If not specified, the global *inner* and *outer* values
-are used.
-
-The last 2 coefficients cannot be used with style
-*lj/gromacs/coul/gromacs* because this force field does not allow
-varying cutoffs for individual atom pairs; all pairs use the global
-cutoff(s) specified in the pair_style command.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 all of the lj/cut pair styles can be mixed.
-The default mix value is *geometric*\ . See the "pair_modify" command
-for details.
-
-None of the GROMACS pair styles support the
-:doc:`pair_modify <pair_modify>` shift option, since the Lennard-Jones
-portion of the pair interaction is already smoothed to 0.0 at the
-cutoff.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-None of the GROMACS pair styles support the
-:doc:`pair_modify <pair_modify>` tail option for adding long-range tail
-corrections to energy and pressure, since there are no corrections for
-a potential that goes to 0.0 at the cutoff.
-
-All of the GROMACS pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do
-not need to be specified in an input script that reads a restart file.
-
-All of the GROMACS pair styles can only be used via the *pair*
-keyword of the :doc:`run_style respa <run_style>` command. They do not
-support the *inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Marrink:
-
-
-
-**(Marrink)** Marrink, de Vries, Mark, J Phys Chem B, 108, 750-760 (2004).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_hbond_dreiding.txt b/doc/html/_sources/pair_hbond_dreiding.txt
deleted file mode 100644
index 36be9363d..000000000
--- a/doc/html/_sources/pair_hbond_dreiding.txt
+++ /dev/null
@@ -1,286 +0,0 @@
-.. index:: pair_style hbond/dreiding/lj
-
-pair_style hbond/dreiding/lj command
-====================================
-
-pair_style hbond/dreiding/lj/omp command
-========================================
-
-pair_style hbond/dreiding/morse command
-=======================================
-
-pair_style hbond/dreiding/morse/omp command
-===========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style N inner_distance_cutoff outer_distance_cutoff angle_cutof
-
-* style = *hbond/dreiding/lj* or *hbond/dreiding/morse*
-* n = cosine angle periodicity
-* inner_distance_cutoff = global inner cutoff for Donor-Acceptor interactions (distance units)
-* outer_distance_cutoff = global cutoff for Donor-Acceptor interactions (distance units)
-* angle_cutoff = global angle cutoff for Acceptor-Hydrogen-Donor
-* interactions (degrees)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style hybrid/overlay lj/cut 10.0 hbond/dreiding/lj 4 9.0 11.0 90
- pair_coeff 1 2 hbond/dreiding/lj 3 i 9.5 2.75 4 9.0 11.0 90.0
-
-.. parsed-literal::
-
- pair_style hybrid/overlay lj/cut 10.0 hbond/dreiding/morse 2 9.0 11.0 90
- pair_coeff 1 2 hbond/dreiding/morse 3 i 3.88 1.7241379 2.9 2 9 11 90
-
-Description
-"""""""""""
-
-The *hbond/dreiding* styles compute the Acceptor-Hydrogen-Donor (AHD)
-3-body hydrogen bond interaction for the
-:ref:`DREIDING <howto_4>` force field, given by:
-
-.. image:: Eqs/pair_hbond_dreiding.jpg
- :align: center
-
-where Rin is the inner spline distance cutoff, Rout is the outer
-distance cutoff, theta_c is the angle cutoff, and n is the cosine
-periodicity.
-
-Here, *r* is the radial distance between the donor (D) and acceptor
-(A) atoms and *theta* is the bond angle between the acceptor, the
-hydrogen (H) and the donor atoms:
-
-.. image:: Eqs/dreiding_hbond.jpg
- :align: center
-
-These 3-body interactions can be defined for pairs of acceptor and
-donor atoms, based on atom types. For each donor/acceptor atom pair,
-the 3rd atom in the interaction is a hydrogen permanently bonded to
-the donor atom, e.g. in a bond list read in from a data file via the
-:doc:`read_data <read_data>` command. The atom types of possible
-hydrogen atoms for each donor/acceptor type pair are specified by the
-:doc:`pair_coeff <pair_coeff>` command (see below).
-
-Style *hbond/dreiding/lj* is the original DREIDING potential of
-:ref:`(Mayo) <pair-Mayo>`. It uses a LJ 12/10 functional for the Donor-Acceptor
-interactions. To match the results in the original paper, use n = 4.
-
-Style *hbond/dreiding/morse* is an improved version using a Morse
-potential for the Donor-Acceptor interactions. :ref:`(Liu) <Liu>` showed
-that the Morse form gives improved results for Dendrimer simulations,
-when n = 2.
-
-See this :ref:`howto section <howto_4>` of the manual for
-more information on the DREIDING forcefield.
-
-.. note::
-
- Because the Dreiding hydrogen bond potential is only one portion
- of an overall force field which typically includes other pairwise
- interactions, it is common to use it as a sub-style in a :doc:`pair_style hybrid/overlay <pair_hybrid>` command, where another pair style
- provides the repulsive core interaction between pairs of atoms, e.g. a
- 1/r^12 Lennard-Jones repulsion.
-
-.. note::
-
- When using the hbond/dreiding pair styles with :doc:`pair_style hybrid/overlay <pair_hybrid>`, you should explicitly define pair
- interactions between the donor atom and acceptor atoms, (as well as
- between these atoms and ALL other atoms in your system). Whenever
- :doc:`pair_style hybrid/overlay <pair_hybrid>` is used, ordinary mixing
- rules are not applied to atoms like the donor and acceptor atoms
- because they are typically referenced in multiple pair styles.
- Neglecting to do this can cause difficult-to-detect physics problems.
-
-.. note::
-
- In the original Dreiding force field paper 1-4 non-bonded
- interactions ARE allowed. If this is desired for your model, use the
- special_bonds command (e.g. "special_bonds lj 0.0 0.0 1.0") to turn
- these interactions on.
-
-
-----------
-
-
-The following coefficients must be defined for pairs of eligible
-donor/acceptor types via the :doc:`pair_coeff <pair_coeff>` command as
-in the examples above.
-
-.. note::
-
- Unlike other pair styles and their associated
- :doc:`pair_coeff <pair_coeff>` commands, you do not need to specify
- pair_coeff settings for all possible I,J type pairs. Only I,J type
- pairs for atoms which act as joint donors/acceptors need to be
- specified; all other type pairs are assumed to be inactive.
-
-.. note::
-
- A :doc:`pair_coeff <pair_coeff>` command can be speficied multiple
- times for the same donor/acceptor type pair. This enables multiple
- hydrogen types to be assigned to the same donor/acceptor type pair.
- For other pair_styles, if the pair_coeff command is re-used for the
- same I.J type pair, the settings for that type pair are overwritten.
- For the hydrogen bond potentials this is not the case; the settings
- are cummulative. This means the only way to turn off a previous
- setting, is to re-use the pair_style command and start over.
-
-For the *hbond/dreiding/lj* style the list of coefficients is as
-follows:
-
-* K = hydrogen atom type = 1 to Ntypes
-* donor flag = *i* or *j*
-* epsilon (energy units)
-* sigma (distance units)
-* n = exponent in formula above
-* distance cutoff Rin (distance units)
-* distance cutoff Rout (distance units)
-* angle cutoff (degrees)
-
-For the *hbond/dreiding/morse* style the list of coefficients is as
-follows:
-
-* K = hydrogen atom type = 1 to Ntypes
-* donor flag = *i* or *j*
-* D0 (energy units)
-* alpha (1/distance units)
-* r0 (distance units)
-* n = exponent in formula above
-* distance cutoff Rin (distance units)
-* distance cutoff Rout (distance units)
-* angle cutoff (degrees)
-
-A single hydrogen atom type K can be specified, or a wild-card
-asterisk can be used in place of or in conjunction with the K
-arguments to select multiple types as hydrogens. This takes the form
-"*" or "*n" or "n*" or "m*n". See the `pair_coeff <pair_coeff>`_ command
-doc page for details.
-
-If the donor flag is *i*\ , then the atom of type I in the pair_coeff
-command is treated as the donor, and J is the acceptor. If the donor
-flag is *j*\ , then the atom of type J in the pair_coeff command is
-treated as the donor and I is the donor. This option is required
-because the :doc:`pair_coeff <pair_coeff>` command requires that I <= J.
-
-Epsilon and sigma are settings for the hydrogen bond potential based
-on a Lennard-Jones functional form. Note that sigma is defined as the
-zero-crossing distance for the potential, not as the energy minimum at
-2^(1/6) sigma.
-
-D0 and alpha and r0 are settings for the hydrogen bond potential based
-on a Morse functional form.
-
-The last 3 coefficients for both styles are optional. If not
-specified, the global n, distance cutoff, and angle cutoff specified
-in the pair_style command are used. If you wish to only override the
-2nd or 3rd optional parameter, you must also specify the preceding
-optional parameters.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-These pair styles do not support mixing. You must explicitly identify
-each donor/acceptor type pair.
-
-These styles do not support the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the interactions.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant for
-these pair styles.
-
-These pair styles do not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-These pair styles do not write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands need to be
-re-specified in an input script that reads a restart file.
-
-These pair styles can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. They do not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-These pair styles tally a count of how many hydrogen bonding
-interactions they calculate each timestep and the hbond energy. These
-quantities can be accessed via the :doc:`compute pair <compute_pair>`
-command as a vector of values of length 2.
-
-To print these quantities to the log file (with a descriptive column
-heading) the following commands could be included in an input script:
-
-.. parsed-literal::
-
- compute hb all pair hbond/dreiding/lj
- variable n_hbond equal c_hb[1] #number hbonds
- variable E_hbond equal c_hb[2] #hbond energy
- thermo_style custom step temp epair v_E_hbond
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _pair-Mayo:
-
-
-
-**(Mayo)** Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909
-(1990).
-
-.. _Liu:
-
-
-
-**(Liu)** Liu, Bryantsev, Diallo, Goddard III, J. Am. Chem. Soc 131 (8)
-2798 (2009)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_hybrid.txt b/doc/html/_sources/pair_hybrid.txt
deleted file mode 100644
index 8adca9435..000000000
--- a/doc/html/_sources/pair_hybrid.txt
+++ /dev/null
@@ -1,437 +0,0 @@
-.. index:: pair_style hybrid
-
-pair_style hybrid command
-=========================
-
-pair_style hybrid/omp command
-=============================
-
-pair_style hybrid/overlay command
-=================================
-
-pair_style hybrid/overlay/omp command
-=====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style hybrid style1 args style2 args ...
- pair_style hybrid/overlay style1 args style2 args ...
-
-* style1,style2 = list of one or more pair styles and their arguments
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style hybrid lj/cut/coul/cut 10.0 eam lj/cut 5.0
- pair_coeff 1*2 1*2 eam niu3
- pair_coeff 3 3 lj/cut/coul/cut 1.0 1.0
- pair_coeff 1*2 3 lj/cut 0.5 1.2
-
-.. parsed-literal::
-
- pair_style hybrid/overlay lj/cut 2.5 coul/long 2.0
- pair_coeff * * lj/cut 1.0 1.0
- pair_coeff * * coul/long
-
-Description
-"""""""""""
-
-The *hybrid* and *hybrid/overlay* styles enable the use of multiple
-pair styles in one simulation. With the *hybrid* style, exactly one
-pair style is assigned to each pair of atom types. With the
-*hybrid/overlay* style, one or more pair styles can be assigned to
-each pair of atom types. The assignment of pair styles to type pairs
-is made via the :doc:`pair_coeff <pair_coeff>` command.
-
-Here are two examples of hybrid simulations. The *hybrid* style could
-be used for a simulation of a metal droplet on a LJ surface. The
-metal atoms interact with each other via an *eam* potential, the
-surface atoms interact with each other via a *lj/cut* potential, and
-the metal/surface interaction is also computed via a *lj/cut*
-potential. The *hybrid/overlay* style could be used as in the 2nd
-example above, where multiple potentials are superposed in an additive
-fashion to compute the interaction between atoms. In this example,
-using *lj/cut* and *coul/long* together gives the same result as if
-the *lj/cut/coul/long* potential were used by itself. In this case,
-it would be more efficient to use the single combined potential, but
-in general any combination of pair potentials can be used together in
-to produce an interaction that is not encoded in any single pair_style
-file, e.g. adding Coulombic forces between granular particles.
-
-All pair styles that will be used are listed as "sub-styles" following
-the *hybrid* or *hybrid/overlay* keyword, in any order. Each
-sub-style's name is followed by its usual arguments, as illustrated in
-the example above. See the doc pages of individual pair styles for a
-listing and explanation of the appropriate arguments.
-
-Note that an individual pair style can be used multiple times as a
-sub-style. For efficiency this should only be done if your model
-requires it. E.g. if you have different regions of Si and C atoms and
-wish to use a Tersoff potential for pure Si for one set of atoms, and
-a Tersoff potetnial for pure C for the other set (presumably with some
-3rd potential for Si-C interactions), then the sub-style *tersoff*
-could be listed twice. But if you just want to use a Lennard-Jones or
-other pairwise potential for several different atom type pairs in your
-model, then you should just list the sub-style once and use the
-pair_coeff command to assign parameters for the different type pairs.
-
-.. note::
-
- There are two exceptions to this option to list an individual
- pair style multiple times. The first is for pair styles implemented
- as Fortran libraries: :doc:`pair_style meam <pair_meam>` and :doc:`pair_style reax <pair_reax>` (:doc:`pair_style reax/c <pair_reax_c>` is OK).
- This is because unlike a C++ class, they can not be instantiated
- multiple times, due to the manner in which they were coded in Fortran.
- The second is for GPU-enabled pair styles in the GPU package. This is
- b/c the GPU package also currently assumes that only one instance of a
- pair style is being used.
-
-In the pair_coeff commands, the name of a pair style must be added
-after the I,J type specification, with the remaining coefficients
-being those appropriate to that style. If the pair style is used
-multiple times in the pair_style command, then an additional numeric
-argument must also be specified which is a number from 1 to M where M
-is the number of times the sub-style was listed in the pair style
-command. The extra number indicates which instance of the sub-style
-these coefficients apply to.
-
-For example, consider a simulation with 3 atom types: types 1 and 2
-are Ni atoms, type 3 are LJ atoms with charges. The following
-commands would set up a hybrid simulation:
-
-.. parsed-literal::
-
- pair_style hybrid eam/alloy lj/cut/coul/cut 10.0 lj/cut 8.0
- pair_coeff * * eam/alloy nialhjea Ni Ni NULL
- pair_coeff 3 3 lj/cut/coul/cut 1.0 1.0
- pair_coeff 1*2 3 lj/cut 0.8 1.3
-
-As an example of using the same pair style multiple times, consider a
-simulation with 2 atom types. Type 1 is Si, type 2 is C. The
-following commands would model the Si atoms with Tersoff, the C atoms
-with Tersoff, and the cross-interactions with Lennard-Jones:
-
-.. parsed-literal::
-
- pair_style hybrid lj/cut 2.5 tersoff tersoff
- pair_coeff * * tersoff 1 Si.tersoff Si NULL
- pair_coeff * * tersoff 2 C.tersoff NULL C
- pair_coeff 1 2 lj/cut 1.0 1.5
-
-If pair coefficients are specified in the data file read via the
-:doc:`read_data <read_data>` command, then the same rule applies.
-E.g. "eam/alloy" or "lj/cut" must be added after the atom type, for
-each line in the "Pair Coeffs" section, e.g.
-
-.. parsed-literal::
-
- Pair Coeffs
-
-.. parsed-literal::
-
- 1 lj/cut/coul/cut 1.0 1.0
- ...
-
-Note that the pair_coeff command for some potentials such as
-:doc:`pair_style eam/alloy <pair_eam>` includes a mapping specification
-of elements to all atom types, which in the hybrid case, can include
-atom types not assigned to the *eam/alloy* potential. The NULL
-keyword is used by many such potentials (eam/alloy, Tersoff, AIREBO,
-etc), to denote an atom type that will be assigned to a different
-sub-style.
-
-For the *hybrid* style, each atom type pair I,J is assigned to exactly
-one sub-style. Just as with a simulation using a single pair style,
-if you specify the same atom type pair in a second pair_coeff command,
-the previous assignment will be overwritten.
-
-For the *hybrid/overlay* style, each atom type pair I,J can be
-assigned to one or more sub-styles. If you specify the same atom type
-pair in a second pair_coeff command with a new sub-style, then the
-second sub-style is added to the list of potentials that will be
-calculated for two interacting atoms of those types. If you specify
-the same atom type pair in a second pair_coeff command with a
-sub-style that has already been defined for that pair of atoms, then
-the new pair coefficients simply override the previous ones, as in the
-normal usage of the pair_coeff command. E.g. these two sets of
-commands are the same:
-
-.. parsed-literal::
-
- pair_style lj/cut 2.5
- pair_coeff * * 1.0 1.0
- pair_coeff 2 2 1.5 0.8
-
-.. parsed-literal::
-
- pair_style hybrid/overlay lj/cut 2.5
- pair_coeff * * lj/cut 1.0 1.0
- pair_coeff 2 2 lj/cut 1.5 0.8
-
-Coefficients must be defined for each pair of atoms types via the
-:doc:`pair_coeff <pair_coeff>` command as described above, or in the
-data file or restart files read by the :doc:`read_data <read_data>` or
-:doc:`read_restart <read_restart>` commands, or by mixing as described
-below.
-
-For both the *hybrid* and *hybrid/overlay* styles, every atom type
-pair I,J (where I <= J) must be assigned to at least one sub-style via
-the :doc:`pair_coeff <pair_coeff>` command as in the examples above, or
-in the data file read by the :doc:`read_data <read_data>`, or by mixing
-as described below.
-
-If you want there to be no interactions between a particular pair of
-atom types, you have 3 choices. You can assign the type pair to some
-sub-style and use the :doc:`neigh_modify exclude type <neigh_modify>`
-command. You can assign it to some sub-style and set the coefficients
-so that there is effectively no interaction (e.g. epsilon = 0.0 in a
-LJ potential). Or, for *hybrid* and *hybrid/overlay* simulations, you
-can use this form of the pair_coeff command in your input script:
-
-.. parsed-literal::
-
- pair_coeff 2 3 none
-
-or this form in the "Pair Coeffs" section of the data file:
-
-.. parsed-literal::
-
- 3 none
-
-If an assignment to *none* is made in a simulation with the
-*hybrid/overlay* pair style, it wipes out all previous assignments of
-that atom type pair to sub-styles.
-
-Note that you may need to use an :doc:`atom_style <atom_style>` hybrid
-command in your input script, if atoms in the simulation will need
-attributes from several atom styles, due to using multiple pair
-potentials.
-
-
-----------
-
-
-Different force fields (e.g. CHARMM vs AMBER) may have different rules
-for applying weightings that change the strength of pairwise
-interactions bewteen pairs of atoms that are also 1-2, 1-3, and 1-4
-neighbors in the molecular bond topology, as normally set by the
-:doc:`special_bonds <special_bonds>` command. Different weights can be
-assigned to different pair hybrid sub-styles via the :doc:`pair_modify special <pair_modify>` command. This allows multiple force fields
-to be used in a model of a hybrid system, however, there is no consistent
-approach to determine parameters automatically for the interactions
-between the two force fields, this is only recommended when particles
-described by the different force fields do not mix.
-
-Here is an example for mixing CHARMM and AMBER: The global *amber*
-setting sets the 1-4 interactions to non-zero scaling factors and
-then overrides them with 0.0 only for CHARMM:
-
-.. parsed-literal::
-
- special_bonds amber
- pair_hybrid lj/charmm/coul/long 8.0 10.0 lj/cut/coul/long 10.0
- pair_modify pair lj/charmm/coul/long special lj/coul 0.0 0.0 0.0
-
-The this input achieves the same effect:
-
-.. parsed-literal::
-
- special_bonds 0.0 0.0 0.1
- pair_hybrid lj/charmm/coul/long 8.0 10.0 lj/cut/coul/long 10.0
- pair_modify pair lj/cut/coul/long special lj 0.0 0.0 0.5
- pair_modify pair lj/cut/coul/long special coul 0.0 0.0 0.83333333
- pair_modify pair lj/charmm/coul/long special lj/coul 0.0 0.0 0.0
-
-Here is an example for mixing Tersoff with OPLS/AA based on
-a data file that defines bonds for all atoms where for the
-Tersoff part of the system the force constants for the bonded
-interactions have been set to 0. Note the global settings are
-effectively *lj/coul 0.0 0.0 0.5* as required for OPLS/AA:
-
-.. parsed-literal::
-
- special_bonds lj/coul 1e-20 1e-20 0.5
- pair_hybrid tersoff lj/cut/coul/long 12.0
- pair_modify pair tersoff special lj/coul 1.0 1.0 1.0
-
-See the :doc:`pair_modify <pair_modify>` doc page for details on
-the specific syntax, requirements and restrictions.
-
-
-----------
-
-
-The potential energy contribution to the overall system due to an
-individual sub-style can be accessed and output via the :doc:`compute pair <compute_pair>` command.
-
-
-----------
-
-
-.. note::
-
- Several of the potentials defined via the pair_style command in
- LAMMPS are really many-body potentials, such as Tersoff, AIREBO, MEAM,
- ReaxFF, etc. The way to think about using these potentials in a
- hybrid setting is as follows.
-
-A subset of atom types is assigned to the many-body potential with a
-single :doc:`pair_coeff <pair_coeff>` command, using "* *" to include
-all types and the NULL keywords described above to exclude specific
-types not assigned to that potential. If types 1,3,4 were assigned in
-that way (but not type 2), this means that all many-body interactions
-between all atoms of types 1,3,4 will be computed by that potential.
-Pair_style hybrid allows interactions between type pairs 2-2, 1-2,
-2-3, 2-4 to be specified for computation by other pair styles. You
-could even add a second interaction for 1-1 to be computed by another
-pair style, assuming pair_style hybrid/overlay is used.
-
-But you should not, as a general rule, attempt to exclude the
-many-body interactions for some subset of the type pairs within the
-set of 1,3,4 interactions, e.g. exclude 1-1 or 1-3 interactions. That
-is not conceptually well-defined for many-body interactions, since the
-potential will typically calculate energies and foces for small groups
-of atoms, e.g. 3 or 4 atoms, using the neighbor lists of the atoms to
-find the additional atoms in the group. It is typically non-physical
-to think of excluding an interaction between a particular pair of
-atoms when the potential computes 3-body or 4-body interactions.
-
-However, you can still use the pair_coeff none setting or the
-:doc:`neigh_modify exclude <neigh_modify>` command to exclude certain
-type pairs from the neighbor list that will be passed to a manybody
-sub-style. This will alter the calculations made by a many-body
-potential, since it builds its list of 3-body, 4-body, etc
-interactions from the pair list. You will need to think carefully as
-to whether it produces a physically meaningful result for your model.
-
-For example, imagine you have two atom types in your model, type 1 for
-atoms in one surface, and type 2 for atoms in the other, and you wish
-to use a Tersoff potential to compute interactions within each
-surface, but not between surfaces. Then either of these two command
-sequences would implement that model:
-
-.. parsed-literal::
-
- pair_style hybrid tersoff
- pair_coeff * * tersoff SiC.tersoff C C
- pair_coeff 1 2 none
-
-.. parsed-literal::
-
- pair_style tersoff
- pair_coeff * * SiC.tersoff C C
- neigh_modify exclude type 1 2
-
-Either way, only neighbor lists with 1-1 or 2-2 interactions would be
-passed to the Tersoff potential, which means it would compute no
-3-body interactions containing both type 1 and 2 atoms.
-
-Here is another example, using hybrid/overlay, to use 2 many-body
-potentials together, in an overlapping manner. Imagine you have CNT
-(C atoms) on a Si surface. You want to use Tersoff for Si/Si and Si/C
-interactions, and AIREBO for C/C interactions. Si atoms are type 1; C
-atoms are type 2. Something like this will work:
-
-.. parsed-literal::
-
- pair_style hybrid/overlay tersoff airebo 3.0
- pair_coeff * * tersoff SiC.tersoff.custom Si C
- pair_coeff * * airebo CH.airebo NULL C
-
-Note that to prevent the Tersoff potential from computing C/C
-interactions, you would need to modify the SiC.tersoff file to turn
-off C/C interaction, i.e. by setting the appropriate coefficients to
-0.0.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-of the manual.
-
-Since the *hybrid* and *hybrid/overlay* styles delegate computation to
-the individual sub-styles, the suffix versions of the *hybrid* and
-*hybrid/overlay* styles are used to propagate the corresponding suffix
-to all sub-styles, if those versions exist. Otherwise the
-non-accelerated version will be used.
-
-The individual accelerated sub-styles are part of the GPU,
-USER-OMP and OPT packages, respectively. They are only enabled if
-LAMMPS was built with those packages. See the
-:ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-Any pair potential settings made via the
-:doc:`pair_modify <pair_modify>` command are passed along to all
-sub-styles of the hybrid potential.
-
-For atom type pairs I,J and I != J, if the sub-style assigned to I,I
-and J,J is the same, and if the sub-style allows for mixing, then the
-coefficients for I,J can be mixed. This means you do not have to
-specify a pair_coeff command for I,J since the I,J type pair will be
-assigned automatically to the sub-style defined for both I,I and J,J
-and its coefficients generated by the mixing rule used by that
-sub-style. For the *hybrid/overlay* style, there is an additional
-requirement that both the I,I and J,J pairs are assigned to a single
-sub-style. See the "pair_modify" command for details of mixing rules.
-See the See the doc page for the sub-style to see if allows for
-mixing.
-
-The hybrid pair styles supports the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options for an I,J pair interaction, if the
-associated sub-style supports it.
-
-For the hybrid pair styles, the list of sub-styles and their
-respective settings are written to :doc:`binary restart files <restart>`, so a :doc:`pair_style <pair_style>` command does
-not need to specified in an input script that reads a restart file.
-However, the coefficient information is not stored in the restart
-file. Thus, pair_coeff commands need to be re-specified in the
-restart input script.
-
-These pair styles support the use of the *inner*\ , *middle*\ , and
-*outer* keywords of the :doc:`run_style respa <run_style>` command, if
-their sub-styles do.
-
-Restrictions
-""""""""""""
-
-
-When using a long-range Coulombic solver (via the
-:doc:`kspace_style <kspace_style>` command) with a hybrid pair_style,
-one or more sub-styles will be of the "long" variety,
-e.g. *lj/cut/coul/long* or *buck/coul/long*\ . You must insure that the
-short-range Coulombic cutoff used by each of these long pair styles is
-the same or else LAMMPS will generate an error.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_kim.txt b/doc/html/_sources/pair_kim.txt
deleted file mode 100644
index 4c9f25e87..000000000
--- a/doc/html/_sources/pair_kim.txt
+++ /dev/null
@@ -1,135 +0,0 @@
-.. index:: pair_style kim
-
-pair_style kim command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style kim virialmode model printflag
-
-* virialmode = KIMvirial or LAMMPSvirial
-* model = name of KIM model (potential)
-* printflag = 1/0 do or do not print KIM descriptor file, optional
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style kim KIMvirial model_Ar_P_Morse
- pair_coeff * * Ar Ar
-
-.. parsed-literal::
-
- pair_style kim KIMvirial model_Ar_P_Morse 1
- pair_coeff * * Ar Ar
-
-Description
-"""""""""""
-
-This pair style is a wrapper on the `Knowledge Base for Interatomic Models (KIM) <https://openkim.org>`_ repository of interatomic potentials,
-so that they can be used by LAMMPS scripts.
-
-In KIM lingo, a potential is a "model" and a model contains both the
-analytic formulas that define the potential as well as the parameters
-needed to run it for one or more materials, including coefficients and
-cutoffs.
-
-The argument *virialmode* determines how the global virial is
-calculated. If *KIMvirial* is specified, the KIM model performs the
-global virial calculation (if it knows how). If *LAMMPSvirial* is
-specified, LAMMPS computes the global virial using its fdotr mechanism.
-
-The argument *model* is the name of the KIM model for a specific
-potential as KIM defines it. In principle, LAMMPS can invoke any KIM
-model. You should get an error or warning message from either LAMMPS
-or KIM if there is an incompatibility.
-
-The argument *printflag* is optional. If it is set to a non-zero
-value then a KIM dsecriptor file is printed when KIM is invoked. This
-can be useful for debugging. The default is to not print this file.
-
-Only a single pair_coeff command is used with the *kim* style which
-specifies the mapping of LAMMPS atom types to KIM elements. This is
-done by specifying N additional arguments after the * * in the
-pair_coeff command, where N is the number of LAMMPS atom types:
-
-* N element names = mapping of KIM elements to atom types
-
-As an example, imagine the KIM model supports Si and C atoms. If your
-LAMMPS simulation has 4 atom types and you want the 1st 3 to be Si,
-and the 4th to be C, you would use the following pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * Si Si Si C
-
-The 1st 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 Si as
-defined within KIM. The final C argument maps LAMMPS atom type 4 to C
-as defined within KIM. If a mapping value is specified as NULL, the
-mapping is not performed. This can only be used when a *kim*
-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.
-
-
-----------
-
-
-In addition to the usual LAMMPS error messages, the KIM library itself
-may generate errors, which should be printed to the screen. In this
-case it is also useful to check the kim.log file for additional error
-information. This file kim.log should be generated in the same
-directory where LAMMPS is running.
-
-To download, build, and install the KIM library on your system, see
-the lib/kim/README file. Once you have done this and built LAMMPS
-with the KIM package installed you can run the example input scripts
-in examples/kim.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-mix, shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since KIM stores the potential parameters.
-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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the KIM package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This current version of pair_style kim is compatible with the
-kim-api package version 1.6.0 and higher.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lcbop.txt b/doc/html/_sources/pair_lcbop.txt
deleted file mode 100644
index 7492ed811..000000000
--- a/doc/html/_sources/pair_lcbop.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-.. index:: pair_style lcbop
-
-pair_style lcbop command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style lcbop
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lcbop
- pair_coeff * * ../potentials/C.lcbop C
-
-Description
-"""""""""""
-
-The *lcbop* pair style computes the long-range bond-order potential
-for carbon (LCBOP) of :ref:`(Los and Fasolino) <Los>`. See section II in
-that paper for the analytic equations associated with the potential.
-
-Only a single pair_coeff command is used with the *lcbop* style which
-specifies an LCBOP potential file with parameters for specific
-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 LCBOP elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-As an example, if your LAMMPS simulation has 4 atom types and you want
-the 1st 3 to be C you would use the following pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * C.lcbop C C C NULL
-
-The 1st 2 arguments must be * * so as to span all LAMMPS atom types.
-The first C argument maps LAMMPS atom type 1 to the C element in the
-LCBOP file. If a mapping value is specified as NULL, the mapping is
-not performed. This can be used when a *lcbop* 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.
-
-The parameters/coefficients for the LCBOP potential as applied to C
-are listed in the C.lcbop file to agree with the original :ref:`(Los and Fasolino) <Los>` paper. Thus the parameters are specific to this
-potential and the way it was fit, so modifying the file should be done
-carefully.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-mix, shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-This pair styles is part of the MANYBODY package. It is only enabled
-if LAMMPS was built with that package (which it is by default). See
-the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This pair potential requires the :doc:`newton <newton>` setting to be
-"on" for pair interactions.
-
-The C.lcbop potential file provided with LAMMPS (see the potentials
-directory) is parameterized for metal :doc:`units <units>`. You can use
-the LCBOP potential with any LAMMPS units, but you would need to
-create your own LCBOP potential file with coefficients listed in the
-appropriate units if your simulation doesn't use "metal" units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_airebo <pair_airebo>`, :doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Los:
-
-
-
-**(Los and Fasolino)** J. H. Los and A. Fasolino, Phys. Rev. B 68, 024107
-(2003).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_line_lj.txt b/doc/html/_sources/pair_line_lj.txt
deleted file mode 100644
index 5310356b3..000000000
--- a/doc/html/_sources/pair_line_lj.txt
+++ /dev/null
@@ -1,157 +0,0 @@
-.. index:: pair_style line/lj
-
-pair_style line/lj command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style line/lj cutoff
-
-cutoff = global cutoff for interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style line/lj 3.0
- pair_coeff * * 1.0 1.0 1.0 0.8 1.12
- pair_coeff 1 2 1.0 2.0 1.0 1.5 1.12 5.0
- pair_coeff 1 2 1.0 0.0 1.0 1.0 2.5
-
-Description
-"""""""""""
-
-Style *line/lj* treats particles which are line segments as a set of
-small spherical particles that tile the line segment length as
-explained below. Interactions between two line segments, each with N1
-and N2 spherical particles, are calculated as the pairwise sum of
-N1*N2 Lennard-Jones interactions. Interactions between a line segment
-with N spherical particles and a point particle are treated as the
-pairwise sum of N Lennard-Jones interactions. See the :doc:`pair_style lj/cut <pair_lj>` doc page for the definition of Lennard-Jones
-interactions.
-
-The set of non-overlapping spherical sub-particles that represent a
-line segment are generated in the following manner. Their size is a
-function of the line segment length and the specified sub-particle
-size for that particle type. If a line segment has a length L and is
-of type I, then the number of spheres N that represent the segment is
-calculated as N = L/sizeI, rounded up to an integer value. Thus if L
-is not evenly divisibly by sizeI, N is incremented to include one
-extra sphere. The centers of the spheres are spaced equally along the
-line segment. Imagine N+1 equally-space points, which include the 2
-end points of the segment. The sphere centers are halfway between
-each pair of points.
-
-The LJ interaction between 2 spheres on different line segments (or a
-sphere on a line segment and a point particles) is computed with
-sub-particle epsilon, sigma, and cutoff values that are set by the
-pair_coeff command, as described below. If the distance bewteen the 2
-spheres is greater than the sub-particle cutoff, there is no
-interaction. This means that some pairs of sub-particles on 2 line
-segments may interact, but others may not.
-
-For purposes of creating the neighbor list for pairs of interacting
-line segments or lines/point particles, a regular particle-particle
-cutoff is used, as defined by the *cutoff* setting above in the
-pair_style command or overridden with an optional argument in the
-pair_coeff command for a type pair as discussed below. The distance
-between the centers of 2 line segments, or the center of a line
-segment and a point particle, must be less than this distance (plus
-the neighbor skin; see the `neighbor <neighbor>`_ command), for the pair
-of particles to be included in the neighbor list.
-
-.. note::
-
- This means that a too-short value for the *cutoff* setting can
- exclude a pair of particles from the neighbor list even if pairs of
- their sub-particle spheres would interact, based on the sub-particle
- cutoff specified in the pair_coeff command. E.g. sub-particles at the
- ends of the line segments that are close to each other. Which may not
- be what you want, since it means the ends of 2 line segments could
- pass through each other. It is up to you to specify a *cutoff*
- setting that is consistent with the length of the line segments you
- are using and the sub-particle cutoff settings.
-
-For style *line/lj*\ , the following coefficients must be defined for
-each pair of atom types via the :doc:`pair_coeff <pair_coeff>` command
-as in the examples above, or in the data file or restart files read by
-the :doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* sizeI (distance units)
-* sizeJ (distance units)
-* epsilon (energy units)
-* sigma (distance units)
-* subcutoff (distance units)
-* cutoff (distance units)
-
-The *sizeI* and *sizeJ* coefficients are the sub-particle sizes for
-line particles of type I and type J. They are used to define the N
-sub-particles per segment as described above. These coefficients are
-actually stored on a per-type basis. Thus if there are multiple
-pair_coeff commmands that involve type I, as either the first or
-second atom type, you should use consistent values for sizeI or sizeJ
-in all of them. If you do not do this, the last value specified for
-sizeI will apply to all segments of type I. If typeI or typeJ refers
-to point particles, the corresponding sizeI or sizeJ is ignored; it
-can be set to 0.0.
-
-The *epsilon*\ , *sigma*\ , and *subcutoff* coefficients are used to
-compute an LJ interactions between a pair of sub-particles on 2 line
-segments (of type I and J), or between a sub particle/point particle
-pair. As discussed above, the *subcutoff* and *cutoff* params are
-different. The latter is only used for building the neighbor list
-when the distance between centers of two line segments or one segment
-and a point particle is calculated.
-
-The *cutoff* coefficient is optional. If not specified, the global
-cutoff is used.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, coeffiecients must be specified.
-No default mixing rules are used.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This style is part of the ASPHERE package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <2_3>` section for more info.
-
-Defining particles to be line segments so they participate in
-line/line or line/particle interactions requires the use the
-:doc:`atom_style line <atom_style>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style tri/lj <pair_tri_lj>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_list.txt b/doc/html/_sources/pair_list.txt
deleted file mode 100644
index 7f1e60c93..000000000
--- a/doc/html/_sources/pair_list.txt
+++ /dev/null
@@ -1,168 +0,0 @@
-.. index:: pair_style list
-
-pair_style list command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style list listfile cutoff keyword
-
-* listfile = name of file with list of pairwise interactions
-* cutoff = global cutoff (distance units)
-* keyword = optional flag *nocheck* or *check* (default is *check*\ )
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style list restraints.txt 200.0
- pair_coeff * *
-
-.. parsed-literal::
-
- pair_style hybrid/overlay lj/cut 1.1225 list pair_list.txt 300.0
- pair_coeff * * lj/cut 1.0 1.0
- pair_coeff 3* 3* list
-
-Description
-"""""""""""
-
-Style *list* computes interactions between explicitly listed pairs of
-atoms with the option to select functional form and parameters for
-each individual pair. Because the parameters are set in the list
-file, the pair_coeff command has no parameters (but still needs to be
-provided). The *check* and *nocheck* keywords enable/disable a test
-that checks whether all listed bonds were present and computed.
-
-This pair style can be thought of as a hybrid between bonded,
-non-bonded, and restraint interactions. It will typically be used as
-an additional interaction within the *hybrid/overlay* pair style. It
-currently supports three interaction styles: a 12-6 Lennard-Jones, a
-Morse and a harmonic potential.
-
-The format of the list file is as follows:
-
-* one line per pair of atoms
-* empty lines will be ignored
-* comment text starts with a '#' character
-* line syntax: *ID1 ID2 style coeffs cutoff*
-.. parsed-literal::
-
- ID1 = atom ID of first atom
- ID2 = atom ID of second atom
- style = style of interaction
- coeffs = list of coeffs
- cutoff = cutoff for interaction (optional)
-
-
-
-The cutoff parameter is optional. If not specified, the global cutoff
-is used.
-
-Here is an example file:
-
-.. parsed-literal::
-
- # this is a comment
-
-.. parsed-literal::
-
- 15 259 lj126 1.0 1.0 50.0
- 15 603 morse 10.0 1.2 2.0 10.0 # and another comment
- 18 470 harmonic 50.0 1.2 5.0
-
-The style *lj126* computes pairwise interactions with the formula
-
-.. image:: Eqs/pair_lj.jpg
- :align: center
-
-and the coefficients:
-
-* epsilon (energy units)
-* sigma (distance units)
-
-The style *morse* computes pairwise interactions with the formula
-
-.. image:: Eqs/pair_morse.jpg
- :align: center
-
-and the coefficients:
-
-* D0 (energy units)
-* alpha (1/distance units)
-* r0 (distance units)
-
-The style *harmonic* computes pairwise interactions with the formula
-
-.. image:: Eqs/bond_harmonic.jpg
- :align: center
-
-and the coefficients:
-
-* K (energy units)
-* r0 (distance units)
-
-Note that the usual 1/2 factor is included in K.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support mixing since all parameters are
-explicit for each pair.
-
-The :doc:`pair_modify <pair_modify>` shift option is supported by this
-pair style.
-
-The :doc:`pair_modify <pair_modify>` table and tail options are not
-relevant for this pair style.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands need
-to be specified in an input script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style does not use a neighbor list and instead identifies
-atoms by their IDs. This has two consequences: 1) The cutoff has to be
-chosen sufficiently large, so that the second atom of a pair has to be
-a ghost atom on the same node on which the first atom is local;
-otherwise the interaction will be skipped. You can use the *check*
-option to detect, if interactions are missing. 2) Unlike other pair
-styles in LAMMPS, an atom I will not interact with multiple images of
-atom J (assuming the images are within the cutoff distance), but only
-with the nearest image.
-
-This style is part of the USER-MISC package. It is only enabled if
-LAMMPS is build with that package. See the :ref:`Making of LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`,
-:doc:`pair_style hybrid/overlay <pair_hybrid>`,
-:doc:`pair_style lj/cut <pair_lj>`,
-:doc:`pair_style morse <pair_morse>`,
-:doc:`bond_style harmonic <bond_harmonic>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lj.txt b/doc/html/_sources/pair_lj.txt
deleted file mode 100644
index 3152cd224..000000000
--- a/doc/html/_sources/pair_lj.txt
+++ /dev/null
@@ -1,422 +0,0 @@
-.. index:: pair_style lj/cut
-
-pair_style lj/cut command
-=========================
-
-pair_style lj/cut/gpu command
-=============================
-
-pair_style lj/cut/intel command
-===============================
-
-pair_style lj/cut/kk command
-============================
-
-pair_style lj/cut/opt command
-=============================
-
-pair_style lj/cut/omp command
-=============================
-
-pair_style lj/cut/coul/cut command
-==================================
-
-pair_style lj/cut/coul/cut/gpu command
-======================================
-
-pair_style lj/cut/coul/cut/omp command
-======================================
-
-pair_style lj/cut/coul/debye command
-====================================
-
-pair_style lj/cut/coul/debye/gpu command
-========================================
-
-pair_style lj/cut/coul/debye/kk command
-=======================================
-
-pair_style lj/cut/coul/debye/omp command
-========================================
-
-pair_style lj/cut/coul/dsf command
-==================================
-
-pair_style lj/cut/coul/dsf/gpu command
-======================================
-
-pair_style lj/cut/coul/dsf/kk command
-=====================================
-
-pair_style lj/cut/coul/dsf/omp command
-======================================
-
-pair_style lj/cut/coul/long command
-===================================
-
-pair_style lj/cut/coul/long/cs command
-======================================
-
-pair_style lj/cut/coul/long/gpu command
-=======================================
-
-pair_style lj/cut/coul/long/intel command
-=========================================
-
-pair_style lj/cut/coul/long/opt command
-=======================================
-
-pair_style lj/cut/coul/long/omp command
-=======================================
-
-pair_style lj/cut/coul/msm command
-==================================
-
-pair_style lj/cut/coul/msm/gpu command
-======================================
-
-pair_style lj/cut/coul/msm/omp command
-======================================
-
-pair_style lj/cut/tip4p/cut command
-===================================
-
-pair_style lj/cut/tip4p/cut/omp command
-=======================================
-
-pair_style lj/cut/tip4p/long command
-====================================
-
-pair_style lj/cut/tip4p/long/omp command
-========================================
-
-pair_style lj/cut/tip4p/long/opt command
-========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *lj/cut* or *lj/cut/coul/cut* or *lj/cut/coul/debye* or *lj/cut/coul/dsf* or *lj/cut/coul/long* or *lj/cut/coul/long/cs* or *lj/cut/coul/msm* or *lj/cut/tip4p/long*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *lj/cut* args = cutoff
- cutoff = global cutoff for Lennard Jones interactions (distance units)
- *lj/cut/coul/cut* args = cutoff (cutoff2)
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *lj/cut/coul/debye* args = kappa cutoff (cutoff2)
- kappa = inverse of the Debye length (inverse distance units)
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *lj/cut/coul/dsf* args = alpha cutoff (cutoff2)
- alpha = damping parameter (inverse distance units)
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (distance units)
- *lj/cut/coul/long* args = cutoff (cutoff2)
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *lj/cut/coul/msm* args = cutoff (cutoff2)
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *lj/cut/tip4p/cut* args = otype htype btype atype qdist cutoff (cutoff2)
- otype,htype = atom types for TIP4P O and H
- btype,atype = bond and angle types for TIP4P waters
- qdist = distance from O atom to massless charge (distance units)
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *lj/cut/tip4p/long* args = otype htype btype atype qdist cutoff (cutoff2)
- otype,htype = atom types for TIP4P O and H
- btype,atype = bond and angle types for TIP4P waters
- qdist = distance from O atom to massless charge (distance units)
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/cut 2.5
- pair_coeff * * 1 1
- pair_coeff 1 1 1 1.1 2.8
-
-.. parsed-literal::
-
- pair_style lj/cut/coul/cut 10.0
- pair_style lj/cut/coul/cut 10.0 8.0
- pair_coeff * * 100.0 3.0
- pair_coeff 1 1 100.0 3.5 9.0
- pair_coeff 1 1 100.0 3.5 9.0 9.0
-
-.. parsed-literal::
-
- pair_style lj/cut/coul/debye 1.5 3.0
- pair_style lj/cut/coul/debye 1.5 2.5 5.0
- pair_coeff * * 1.0 1.0
- pair_coeff 1 1 1.0 1.5 2.5
- pair_coeff 1 1 1.0 1.5 2.5 5.0
-
-.. parsed-literal::
-
- pair_style lj/cut/coul/dsf 0.05 2.5 10.0
- pair_coeff * * 1.0 1.0
- pair_coeff 1 1 1.0 1.0 2.5
-
-.. parsed-literal::
-
- pair_style lj/cut/coul/long 10.0
- pair_style lj/cut/coul/long/cs 10.0
- pair_style lj/cut/coul/long 10.0 8.0
- pair_style lj/cut/coul/long/cs 10.0 8.0
- pair_coeff * * 100.0 3.0
- pair_coeff 1 1 100.0 3.5 9.0
-
-.. parsed-literal::
-
- pair_style lj/cut/coul/msm 10.0
- pair_style lj/cut/coul/msm 10.0 8.0
- pair_coeff * * 100.0 3.0
- pair_coeff 1 1 100.0 3.5 9.0
-
-.. parsed-literal::
-
- pair_style lj/cut/tip4p/cut 1 2 7 8 0.15 12.0
- pair_style lj/cut/tip4p/cut 1 2 7 8 0.15 12.0 10.0
- pair_coeff * * 100.0 3.0
- pair_coeff 1 1 100.0 3.5 9.0
-
-.. parsed-literal::
-
- pair_style lj/cut/tip4p/long 1 2 7 8 0.15 12.0
- pair_style lj/cut/tip4p/long 1 2 7 8 0.15 12.0 10.0
- pair_coeff * * 100.0 3.0
- pair_coeff 1 1 100.0 3.5 9.0
-
-Description
-"""""""""""
-
-The *lj/cut* styles compute the standard 12/6 Lennard-Jones potential,
-given by
-
-.. image:: Eqs/pair_lj.jpg
- :align: center
-
-Rc is the cutoff.
-
-Style *lj/cut/coul/cut* adds a Coulombic pairwise interaction given by
-
-.. image:: Eqs/pair_coulomb.jpg
- :align: center
-
-where C is an energy-conversion constant, Qi and Qj are the charges on
-the 2 atoms, and epsilon is the dielectric constant which can be set
-by the :doc:`dielectric <dielectric>` command. If one cutoff is
-specified in the pair_style command, it is used for both the LJ and
-Coulombic terms. If two cutoffs are specified, they are used as
-cutoffs for the LJ and Coulombic terms respectively.
-
-Style *lj/cut/coul/debye* adds an additional exp() damping factor
-to the Coulombic term, given by
-
-.. image:: Eqs/pair_debye.jpg
- :align: center
-
-where kappa is the inverse of the Debye length. This potential is
-another way to mimic the screening effect of a polar solvent.
-
-Style *lj/cut/coul/dsf* computes the Coulombic term via the damped
-shifted force model described in :ref:`Fennell <Fennell>`, given by:
-
-.. image:: Eqs/pair_coul_dsf.jpg
- :align: center
-
-where *alpha* is the damping parameter and erfc() is the complementary
-error-function. This potential is essentially a short-range,
-spherically-truncated, charge-neutralized, shifted, pairwise *1/r*
-summation. The potential is based on Wolf summation, proposed as an
-alternative to Ewald summation for condensed phase systems where
-charge screening causes electrostatic interactions to become
-effectively short-ranged. In order for the electrostatic sum to be
-absolutely convergent, charge neutralization within the cutoff radius
-is enforced by shifting the potential through placement of image
-charges on the cutoff sphere. Convergence can often be improved by
-setting *alpha* to a small non-zero value.
-
-Styles *lj/cut/coul/long* and *lj/cut/coul/msm* compute the same
-Coulombic interactions as style *lj/cut/coul/cut* except that an
-additional damping factor is applied to the Coulombic term so it can
-be used in conjunction with the :doc:`kspace_style <kspace_style>`
-command and its *ewald* or *pppm* option. The Coulombic cutoff
-specified for this style means that pairwise interactions within this
-distance are computed directly; interactions outside that distance are
-computed in reciprocal space.
-
-Style *lj/cut/coul/long/cs* is identical to *lj/cut/coul/long* except
-that a term is added for the :ref:`core/shell model <howto_25>` to allow charges on core and shell
-particles to be separated by r = 0.0.
-
-Styles *lj/cut/tip4p/cut* and *lj/cut/tip4p/long* implement the TIP4P
-water model of :ref:`(Jorgensen) <Jorgensen>`, which introduces a massless
-site located a short distance away from the oxygen atom along the
-bisector of the HOH angle. The atomic types of the oxygen and
-hydrogen atoms, the bond and angle types for OH and HOH interactions,
-and the distance to the massless charge site are specified as
-pair_style arguments. Style *lj/cut/tip4p/cut* uses a cutoff for
-Coulomb interactions; style *lj/cut/tip4p/long* is for use with a
-long-range Coulombic solver (Ewald or PPPM).
-
-.. note::
-
- For each TIP4P water molecule in your system, the atom IDs for
- the O and 2 H atoms must be consecutive, with the O atom first. This
- is to enable LAMMPS to "find" the 2 H atoms associated with each O
- atom. For example, if the atom ID of an O atom in a TIP4P water
- molecule is 500, then its 2 H atoms must have IDs 501 and 502.
-
-See the :ref:`howto section <howto_8>` for more
-information on how to use the TIP4P pair styles and lists of
-parameters to set. Note that the neighobr list cutoff for Coulomb
-interactions is effectively extended by a distance 2*qdist when using
-the TIP4P pair style, to account for the offset distance of the
-fictitious charges on O atoms in water molecules. Thus it is
-typically best in an efficiency sense to use a LJ cutoff >= Coulomb
-cutoff + 2*qdist, to shrink the size of the neighbor list. This leads
-to slightly larger cost for the long-range calculation, so you can
-test the trade-off for your model.
-
-For all of the *lj/cut* pair styles, the following coefficients must
-be defined for each pair of atoms types via the
-:doc:`pair_coeff <pair_coeff>` command as in the examples above, or in
-the data file or restart files read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands, or by mixing as
-described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* cutoff1 (distance units)
-* cutoff2 (distance units)
-
-Note that sigma is defined in the LJ formula as the zero-crossing
-distance for the potential, not as the energy minimum at 2^(1/6)
-sigma.
-
-The latter 2 coefficients are optional. If not specified, the global
-LJ and Coulombic cutoffs specified in the pair_style command are used.
-If only one cutoff is specified, it is used as the cutoff for both LJ
-and Coulombic interactions for this type pair. If both coefficients
-are specified, they are used as the LJ and Coulombic cutoffs for this
-type pair. You cannot specify 2 cutoffs for style *lj/cut*\ , since it
-has no Coulombic terms.
-
-For *lj/cut/coul/long* and *lj/cut/coul/msm* and *lj/cut/tip4p/cut*
-and *lj/cut/tip4p/long* only the LJ cutoff can be specified since a
-Coulombic cutoff cannot be specified for an individual I,J type pair.
-All type pairs use the same global Coulombic cutoff specified in the
-pair_style command.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 all of the lj/cut pair styles can be mixed.
-The default mix value is *geometric*\ . See the "pair_modify" command
-for details.
-
-All of the *lj/cut* pair styles support the
-:doc:`pair_modify <pair_modify>` shift option for the energy of the
-Lennard-Jones portion of the pair interaction.
-
-The *lj/cut/coul/long* and *lj/cut/tip4p/long* pair styles support the
-:doc:`pair_modify <pair_modify>` table option since they can tabulate
-the short-range portion of the long-range Coulombic interaction.
-
-All of the *lj/cut* pair styles support the
-:doc:`pair_modify <pair_modify>` tail option for adding a long-range
-tail correction to the energy and pressure for the Lennard-Jones
-portion of the pair interaction.
-
-All of the *lj/cut* pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do
-not need to be specified in an input script that reads a restart file.
-
-The *lj/cut* and *lj/cut/coul/long* pair styles support the use of the
-*inner*\ , *middle*\ , and *outer* keywords of the :doc:`run_style respa <run_style>` command, meaning the pairwise forces can be
-partitioned by distance at different levels of the rRESPA hierarchy.
-The other styles only support the *pair* keyword of run_style respa.
-See the :doc:`run_style <run_style>` command for details.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The *lj/cut/coul/long* and *lj/cut/tip4p/long* styles are part of the
-KSPACE package. The *lj/cut/tip4p/cut* style is part of the MOLECULE
-package. These styles are only enabled if LAMMPS was built with those
-packages. See the :ref:`Making LAMMPS <start_3>` section
-for more info. Note that the KSPACE and MOLECULE packages are
-installed by default.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Jorgensen:
-
-
-
-**(Jorgensen)** Jorgensen, Chandrasekhar, Madura, Impey, Klein, J Chem
-Phys, 79, 926 (1983).
-
-.. _Fennell:
-
-
-
-**(Fennell)** C. J. Fennell, J. D. Gezelter, J Chem Phys, 124,
-234104 (2006).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lj96.txt b/doc/html/_sources/pair_lj96.txt
deleted file mode 100644
index 8654a6043..000000000
--- a/doc/html/_sources/pair_lj96.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-.. index:: pair_style lj96/cut
-
-pair_style lj96/cut command
-===========================
-
-pair_style lj96/cut/gpu command
-===============================
-
-pair_style lj96/cut/omp command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style lj96/cut cutoff
-
-* cutoff = global cutoff for lj96/cut interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj96/cut 2.5
- pair_coeff * * 1.0 1.0 4.0
- pair_coeff 1 1 1.0 1.0
-
-Description
-"""""""""""
-
-The *lj96/cut* style compute a 9/6 Lennard-Jones potential, instead
-of the standard 12/6 potential, given by
-
-.. image:: Eqs/pair_lj96.jpg
- :align: center
-
-Rc is the cutoff.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global LJ
-cutoff specified in the pair_style command is used.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 all of the lj/cut pair styles can be mixed.
-The default mix value is *geometric*\ . See the "pair_modify" command
-for details.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` tail
-option for adding a long-range tail correction to the energy and
-pressure of the pair interaction.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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 supports the use of the *inner*\ , *middle*\ , and *outer*
-keywords of the :doc:`run_style respa <run_style>` command, meaning the
-pairwise forces can be partitioned by distance at different levels of
-the rRESPA hierarchy. See the :doc:`run_style <run_style>` command for
-details.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lj_cubic.txt b/doc/html/_sources/pair_lj_cubic.txt
deleted file mode 100644
index aba649d2d..000000000
--- a/doc/html/_sources/pair_lj_cubic.txt
+++ /dev/null
@@ -1,155 +0,0 @@
-.. index:: pair_style lj/cubic
-
-pair_style lj/cubic command
-===========================
-
-pair_style lj/cubic/gpu command
-===============================
-
-pair_style lj/cubic/omp command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style lj/cubic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/cubic
- pair_coeff * * 1.0 0.8908987
-
-Description
-"""""""""""
-
-The *lj/cubic* style computes a truncated LJ interaction potential
-whose energy and force are continuous everywhere. Inside the
-inflection point the interaction is identical to the standard 12/6
-:doc:`Lennard-Jones <pair_lj>` potential. The LJ function outside the
-inflection point is replaced with a cubic function of distance. The
-energy, force, and second derivative are continuous at the inflection
-point. The cubic coefficient A3 is chosen so that both energy and
-force go to zero at the cutoff distance. Outside the cutoff distance
-the energy and force are zero.
-
-.. image:: Eqs/pair_lj_cubic.jpg
- :align: center
-
-The location of the inflection point rs is defined
-by the LJ diameter, rs/sigma = (26/7)^1/6. The cutoff distance
-is defined by rc/rs = 67/48 or rc/sigma = 1.737....
-The analytic expression for the
-the cubic coefficient
-A3*rmin^3/epsilon = 27.93... is given in the paper by
-Holian and Ravelo :ref:`(Holian) <Holian>`.
-
-This potential is commonly used to study the shock mechanics of FCC
-solids, as in Ravelo et al. :ref:`(Ravelo) <Ravelo>`.
-
-The following coefficients must be defined for each pair of atom types
-via the :doc:`pair_coeff <pair_coeff>` command as in the example above,
-or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-
-Note that sigma is defined in the LJ formula as the zero-crossing
-distance for the potential, not as the energy minimum, which is
-located at rmin = 2^(1/6)*sigma. In the above example, sigma =
-0.8908987, so rmin = 1.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 all of the lj/cut pair styles can be mixed.
-The default mix value is *geometric*\ . See the "pair_modify" command
-for details.
-
-The lj/cubic pair style does not support the
-:doc:`pair_modify <pair_modify>` shift option,
-since pair interaction is already smoothed to 0.0 at the
-cutoff.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-The lj/cubic pair style does not support the
-:doc:`pair_modify <pair_modify>` tail option for adding long-range tail
-corrections to energy and pressure, since there are no corrections for
-a potential that goes to 0.0 at the cutoff.
-
-The lj/cubic pair style writes its information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do
-not need to be specified in an input script that reads a restart file.
-
-The lj/cubic pair style can only be used via the *pair*
-keyword of the :doc:`run_style respa <run_style>` command. It does not
-support the *inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Holian:
-
-
-
-.. _Ravelo:
-
-**(Holian)** Holian and Ravelo, Phys Rev B, 51, 11275 (1995).
-
-
-**(Ravelo)** Ravelo, Holian, Germann and Lomdahl, Phys Rev B, 70, 014103 (2004).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lj_expand.txt b/doc/html/_sources/pair_lj_expand.txt
deleted file mode 100644
index 30bf0cc03..000000000
--- a/doc/html/_sources/pair_lj_expand.txt
+++ /dev/null
@@ -1,129 +0,0 @@
-.. index:: pair_style lj/expand
-
-pair_style lj/expand command
-============================
-
-pair_style lj/expand/gpu command
-================================
-
-pair_style lj/expand/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style lj/expand cutoff
-
-* cutoff = global cutoff for lj/expand interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/expand 2.5
- pair_coeff * * 1.0 1.0 0.5
- pair_coeff 1 1 1.0 1.0 -0.2 2.0
-
-Description
-"""""""""""
-
-Style *lj/expand* computes a LJ interaction with a distance shifted by
-delta which can be useful when particles are of different sizes, since
-it is different that using different sigma values in a standard LJ
-formula:
-
-.. image:: Eqs/pair_lj_expand.jpg
- :align: center
-
-Rc is the cutoff which does not include the delta distance. I.e. the
-actual force cutoff is the sum of cutoff + delta.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* delta (distance units)
-* cutoff (distance units)
-
-The delta values can be positive or negative. The last coefficient is
-optional. If not specified, the global LJ cutoff is used.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the epsilon, sigma, and shift
-coefficients and cutoff distance for this pair style can be mixed.
-Shift is always mixed via an *arithmetic* rule. The other
-coefficients are mixed according to the pair_modify mix value. The
-default mix value is *geometric*\ . See the "pair_modify" command for
-details.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` tail
-option for adding a long-range tail correction to the energy and
-pressure of the pair interaction.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lj_long.txt b/doc/html/_sources/pair_lj_long.txt
deleted file mode 100644
index 8bae0bf22..000000000
--- a/doc/html/_sources/pair_lj_long.txt
+++ /dev/null
@@ -1,257 +0,0 @@
-.. index:: pair_style lj/long/coul/long
-
-pair_style lj/long/coul/long command
-====================================
-
-pair_style lj/long/coul/long/omp command
-========================================
-
-pair_style lj/long/coul/long/opt command
-========================================
-
-pair_style lj/long/tip4p/long command
-=====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *lj/long/coul/long* or *lj/long/tip4p/long*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *lj/long/coul/long* args = flag_lj flag_coul cutoff (cutoff2)
- flag_lj = *long* or *cut* or *off*
- *long* = use Kspace long-range summation for dispersion 1/r^6 term
- *cut* = use a cutoff on dispersion 1/r^6 term
- *off* = omit disperion 1/r^6 term entirely
- flag_coul = *long* or *off*
- *long* = use Kspace long-range summation for Coulombic 1/r term
- *off* = omit Coulombic term
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *lj/long/tip4p/long* args = flag_lj flag_coul otype htype btype atype qdist cutoff (cutoff2)
- flag_lj = *long* or *cut*
- *long* = use Kspace long-range summation for dispersion 1/r^6 term
- *cut* = use a cutoff
- flag_coul = *long* or *off*
- *long* = use Kspace long-range summation for Coulombic 1/r term
- *off* = omit Coulombic term
- otype,htype = atom types for TIP4P O and H
- btype,atype = bond and angle types for TIP4P waters
- qdist = distance from O atom to massless charge (distance units)
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/long/coul/long cut off 2.5
- pair_style lj/long/coul/long cut long 2.5 4.0
- pair_style lj/long/coul/long long long 2.5 4.0
- pair_coeff * * 1 1
- pair_coeff 1 1 1 3 4
-
-.. parsed-literal::
-
- pair_style lj/long/tip4p/long long long 1 2 7 8 0.15 12.0
- pair_style lj/long/tip4p/long long long 1 2 7 8 0.15 12.0 10.0
- pair_coeff * * 100.0 3.0
- pair_coeff 1 1 100.0 3.5 9.0
-
-Description
-"""""""""""
-
-Style *lj/long/coul/long* computes the standard 12/6 Lennard-Jones and
-Coulombic potentials, given by
-
-.. image:: Eqs/pair_lj.jpg
- :align: center
-
-.. image:: Eqs/pair_coulomb.jpg
- :align: center
-
-where C is an energy-conversion constant, Qi and Qj are the charges on
-the 2 atoms, epsilon is the dielectric constant which can be set by
-the :doc:`dielectric <dielectric>` command, and Rc is the cutoff. If
-one cutoff is specified in the pair_style command, it is used for both
-the LJ and Coulombic terms. If two cutoffs are specified, they are
-used as cutoffs for the LJ and Coulombic terms respectively.
-
-The purpose of this pair style is to capture long-range interactions
-resulting from both attractive 1/r^6 Lennard-Jones and Coulombic 1/r
-interactions. This is done by use of the *flag_lj* and *flag_coul*
-settings. The :ref:`In 't Veld <Veld>` paper has more details on when it is
-appropriate to include long-range 1/r^6 interactions, using this
-potential.
-
-Style *lj/long/tip4p/long* implements the TIP4P water model of
-:ref:`(Jorgensen) <Jorgensen>`, which introduces a massless site located a
-short distance away from the oxygen atom along the bisector of the HOH
-angle. The atomic types of the oxygen and hydrogen atoms, the bond
-and angle types for OH and HOH interactions, and the distance to the
-massless charge site are specified as pair_style arguments.
-
-.. note::
-
- For each TIP4P water molecule in your system, the atom IDs for
- the O and 2 H atoms must be consecutive, with the O atom first. This
- is to enable LAMMPS to "find" the 2 H atoms associated with each O
- atom. For example, if the atom ID of an O atom in a TIP4P water
- molecule is 500, then its 2 H atoms must have IDs 501 and 502.
-
-See the :ref:`howto section <howto_8>` for more
-information on how to use the TIP4P pair style. Note that the
-neighobr list cutoff for Coulomb interactions is effectively extended
-by a distance 2*qdist when using the TIP4P pair style, to account for
-the offset distance of the fictitious charges on O atoms in water
-molecules. Thus it is typically best in an efficiency sense to use a
-LJ cutoff >= Coulomb cutoff + 2*qdist, to shrink the size of the
-neighbor list. This leads to slightly larger cost for the long-range
-calculation, so you can test the trade-off for your model.
-
-If *flag_lj* is set to *long*\ , no cutoff is used on the LJ 1/r^6
-dispersion term. The long-range portion can be calculated by using
-the :doc:`kspace_style ewald/disp or pppm/disp <kspace_style>` commands.
-The specified LJ cutoff then determines which portion of the LJ
-interactions are computed directly by the pair potential versus which
-part is computed in reciprocal space via the Kspace style. If
-*flag_lj* is set to *cut*\ , the LJ interactions are simply cutoff, as
-with :doc:`pair_style lj/cut <pair_lj>`.
-
-If *flag_coul* is set to *long*\ , no cutoff is used on the Coulombic
-interactions. The long-range portion can calculated by using any of
-several :doc:`kspace_style <kspace_style>` command options such as
-*pppm* or *ewald*\ . Note that if *flag_lj* is also set to long, then
-the *ewald/disp* or *pppm/disp* Kspace style needs to be used to
-perform the long-range calculations for both the LJ and Coulombic
-interactions. If *flag_coul* is set to *off*\ , Coulombic interactions
-are not computed.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* cutoff1 (distance units)
-* cutoff2 (distance units)
-
-Note that sigma is defined in the LJ formula as the zero-crossing
-distance for the potential, not as the energy minimum at 2^(1/6)
-sigma.
-
-The latter 2 coefficients are optional. If not specified, the global
-LJ and Coulombic cutoffs specified in the pair_style command are used.
-If only one cutoff is specified, it is used as the cutoff for both LJ
-and Coulombic interactions for this type pair. If both coefficients
-are specified, they are used as the LJ and Coulombic cutoffs for this
-type pair.
-
-Note that if you are using *flag_lj* set to *long*\ , you
-cannot specify a LJ cutoff for an atom type pair, since only one
-global LJ cutoff is allowed. Similarly, if you are using *flag_coul*
-set to *long*\ , you cannot specify a Coulombic cutoff for an atom type
-pair, since only one global Coulombic cutoff is allowed.
-
-For *lj/long/tip4p/long* only the LJ cutoff can be specified
-since a Coulombic cutoff cannot be specified for an individual I,J
-type pair. All type pairs use the same global Coulombic cutoff
-specified in the pair_style command.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 all of the lj/long pair styles can be mixed.
-The default mix value is *geometric*\ . See the "pair_modify" command
-for details.
-
-These pair styles support the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the Lennard-Jones portion of the pair
-interaction, assuming *flag_lj* is *cut*\ .
-
-These pair styles support the :doc:`pair_modify <pair_modify>` table and
-table/disp options since they can tabulate the short-range portion of
-the long-range Coulombic and dispersion interactions.
-
-Thes pair styles do not support the :doc:`pair_modify <pair_modify>`
-tail option for adding a long-range tail correction to the
-Lennard-Jones portion of the energy and pressure.
-
-These pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do not need
-to be specified in an input script that reads a restart file.
-
-The pair lj/long/coul/long styles support the use of the *inner*\ ,
-*middle*\ , and *outer* keywords of the :doc:`run_style respa <run_style>`
-command, meaning the pairwise forces can be partitioned by distance at
-different levels of the rRESPA hierarchy. See the
-:doc:`run_style <run_style>` command for details.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-These styles are part of the KSPACE package. They are only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info. Note that
-the KSPACE package is installed by default.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Veld:
-
-
-
-**(In 't Veld)** In 't Veld, Ismail, Grest, J Chem Phys (accepted) (2007).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lj_sf.txt b/doc/html/_sources/pair_lj_sf.txt
deleted file mode 100644
index c7e259f93..000000000
--- a/doc/html/_sources/pair_lj_sf.txt
+++ /dev/null
@@ -1,134 +0,0 @@
-.. index:: pair_style lj/sf
-
-pair_style lj/sf command
-========================
-
-pair_style lj/sf/omp command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style lj/sf cutoff
-
-* cutoff = global cutoff for Lennard-Jones interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/sf 2.5
- pair_coeff * * 1.0 1.0
- pair_coeff 1 1 1.0 1.0 3.0
-
-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 :ref:`(Toxvaerd) <Toxvaerd>`:
-
-.. image:: Eqs/pair_lj_sf.jpg
- :align: center
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global
-LJ cutoff specified in the pair_style command is used.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 :doc:`pair_modify <pair_modify>` shift option is not relevant for
-this pair style, since the pair interaction goes to 0.0 at the cutoff.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-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 :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the USER-MISC package. It is only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Toxvaerd:
-
-
-
-**(Toxvaerd)** Toxvaerd, Dyre, J Chem Phys, 134, 081102 (2011).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lj_smooth.txt b/doc/html/_sources/pair_lj_smooth.txt
deleted file mode 100644
index 7613ff487..000000000
--- a/doc/html/_sources/pair_lj_smooth.txt
+++ /dev/null
@@ -1,139 +0,0 @@
-.. index:: pair_style lj/smooth
-
-pair_style lj/smooth command
-============================
-
-pair_style lj/smooth/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style lj/smooth Rin Rc
-
-* Rin = inner cutoff beyond which force smoothing will be applied (distance units)
-* Rc = outer cutoff for lj/smooth interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/smooth 8.0 10.0
- pair_coeff * * 10.0 1.5
- pair_coeff 1 1 20.0 1.3 7.0 9.0
-
-Description
-"""""""""""
-
-Style *lj/smooth* computes a LJ interaction with a force smoothing
-applied between the inner and outer cutoff.
-
-.. image:: Eqs/pair_lj_smooth.jpg
- :align: center
-
-The polynomial coefficients C1, C2, C3, C4 are computed by LAMMPS to
-cause the force to vary smoothly from the inner cutoff Rin to the
-outer cutoff Rc.
-
-At the inner cutoff the force and its 1st derivative
-will match the unsmoothed LJ formula. At the outer cutoff the force
-and its 1st derivative will be 0.0. The inner cutoff cannot be 0.0.
-
-.. note::
-
- this force smoothing causes the energy to be discontinuous both
- in its values and 1st derivative. This can lead to poor energy
- conservation and may require the use of a thermostat. Plot the energy
- and force resulting from this formula via the
- :doc:`pair_write <pair_write>` command to see the effect.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* innner (distance units)
-* outer (distance units)
-
-The last 2 coefficients are optional inner and outer cutoffs. If not
-specified, the global values for Rin and Rc are used.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the epsilon, sigma, Rin
-coefficients and the cutoff distance for this pair style can be mixed.
-Rin is a cutoff value and is mixed like the cutoff. The other
-coefficients are mixed according to the pair_modify mix option. The
-default mix value is *geometric*\ . See the "pair_modify" command for
-details.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-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 :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair lj/smooth/linear <pair_lj_smooth_linear>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lj_smooth_linear.txt b/doc/html/_sources/pair_lj_smooth_linear.txt
deleted file mode 100644
index b64aad4be..000000000
--- a/doc/html/_sources/pair_lj_smooth_linear.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-.. index:: pair_style lj/smooth/linear
-
-pair_style lj/smooth/linear command
-===================================
-
-pair_style lj/smooth/linear/omp command
-=======================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style lj/smooth/linear Rc
-
-* Rc = cutoff for lj/smooth/linear interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/smooth/linear 5.456108274435118
- pair_coeff * * 0.7242785984051078 2.598146797350056
- pair_coeff 1 1 20.0 1.3 9.0
-
-Description
-"""""""""""
-
-Style *lj/smooth/linear* computes a LJ interaction that combines the
-standard 12/6 Lennard-Jones function and subtracts a linear term that
-includes the cutoff distance Rc, as in this formula:
-
-.. image:: Eqs/pair_lj_smooth_linear.jpg
- :align: center
-
-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
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global value
-for Rc is used.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 can be mixed. The default mix value is geometric.
-See the "pair_modify" command for details.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant for
-this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-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 :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair lj/smooth <pair_lj_smooth>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lj_soft.txt b/doc/html/_sources/pair_lj_soft.txt
deleted file mode 100644
index 254978a03..000000000
--- a/doc/html/_sources/pair_lj_soft.txt
+++ /dev/null
@@ -1,345 +0,0 @@
-.. index:: pair_style lj/cut/soft
-
-pair_style lj/cut/soft command
-==============================
-
-pair_style lj/cut/soft/omp command
-==================================
-
-pair_style lj/cut/coul/cut/soft command
-=======================================
-
-pair_style lj/cut/coul/cut/soft/omp command
-===========================================
-
-pair_style lj/cut/coul/long/soft command
-========================================
-
-pair_style lj/cut/coul/long/soft/omp command
-============================================
-
-pair_style lj/cut/tip4p/long/soft command
-=========================================
-
-pair_style lj/cut/tip4p/long/soft/omp command
-=============================================
-
-pair_style lj/charmm/coul/long/soft command
-===========================================
-
-pair_style lj/charmm/coul/long/soft/omp command
-===============================================
-
-pair_style coul/cut/soft command
-================================
-
-pair_style coul/cut/soft/omp command
-====================================
-
-pair_style coul/long/soft command
-=================================
-
-pair_style coul/long/soft/omp command
-=====================================
-
-pair_style tip4p/long/soft command
-==================================
-
-pair_style tip4p/long/soft/omp command
-======================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *lj/cut/soft* or *lj/cut/coul/cut/soft* or *lj/cut/coul/long/soft* or *lj/cut/tip4p/long/soft* or *lj/charmm/coul/long/soft* or *coul/cut/soft* or *coul/long/soft* or *tip4p/long/soft*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *lj/cut/soft* args = n alpha_lj cutoff
- n, alpha_LJ = parameters of soft-core potential
- cutoff = global cutoff for Lennard-Jones interactions (distance units)
- *lj/cut/coul/cut/soft* args = n alpha_LJ alpha_C cutoff (cutoff2)
- n, alpha_LJ, alpha_C = parameters of soft-core potential
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *lj/cut/coul/long/soft* args = n alpha_LJ alpha_C cutoff
- n, alpha_LJ, alpha_C = parameters of the soft-core potential
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *lj/cut/tip4p/long/soft* args = otype htype btype atype qdist n alpha_LJ alpha_C cutoff (cutoff2)
- otype,htype = atom types for TIP4P O and H
- btype,atype = bond and angle types for TIP4P waters
- qdist = distance from O atom to massless charge (distance units)
- n, alpha_LJ, alpha_C = parameters of the soft-core potential
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *lj/charmm/coul/long/soft* args = n alpha_LJ alpha_C inner outer (cutoff)
- n, alpha_LJ, alpha_C = parameters of the soft-core potential
- inner, outer = global switching cutoffs for LJ (and Coulombic if only 5 args)
- cutoff = global cutoff for Coulombic (optional, outer is Coulombic cutoff if only 5 args)
- *coul/cut/soft* args = n alpha_C cutoff
- n, alpha_C = parameters of the soft-core potential
- cutoff = global cutoff for Coulomb interactions (distance units)
- *coul/long/soft* args = n alpha_C cutoff
- n, alpha_C = parameters of the soft-core potential
- cutoff = global cutoff for Coulomb interactions (distance units)
- *tip4p/long/soft* args = otype htype btype atype qdist n alpha_C cutoff
- otype,htype = atom types for TIP4P O and H
- btype,atype = bond and angle types for TIP4P waters
- qdist = distance from O atom to massless charge (distance units)
- n, alpha_C = parameters of the soft-core potential
- cutoff = global cutoff for Coulomb interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/cut/soft 2.0 0.5 9.5
- pair_coeff * * 0.28 3.1 1.0
- pair_coeff 1 1 0.28 3.1 1.0 9.5
-
-.. parsed-literal::
-
- pair_style lj/cut/coul/cut/soft 2.0 0.5 10.0 9.5
- pair_style lj/cut/coul/cut/soft 2.0 0.5 10.0 9.5 9.5
- pair_coeff * * 0.28 3.1 1.0
- pair_coeff 1 1 0.28 3.1 0.5 10.0
- pair_coeff 1 1 0.28 3.1 0.5 10.0 9.5
-
-.. parsed-literal::
-
- pair_style lj/cut/coul/long/soft 2.0 0.5 10.0 9.5
- pair_style lj/cut/coul/long/soft 2.0 0.5 10.0 9.5 9.5
- pair_coeff * * 0.28 3.1 1.0
- pair_coeff 1 1 0.28 3.1 0.0 10.0
- pair_coeff 1 1 0.28 3.1 0.0 10.0 9.5
-
-.. parsed-literal::
-
- pair_style lj/cut/tip4p/long/soft 1 2 7 8 0.15 2.0 0.5 10.0 9.8
- pair_style lj/cut/tip4p/long/soft 1 2 7 8 0.15 2.0 0.5 10.0 9.8 9.5
- pair_coeff * * 0.155 3.1536 1.0
- pair_coeff 1 1 0.155 3.1536 1.0 9.5
-
-.. parsed-literal::
-
- pair_style lj/charmm/coul/long 2.0 0.5 10.0 8.0 10.0
- pair_style lj/charmm/coul/long 2.0 0.5 10.0 8.0 10.0 9.0
- pair_coeff * * 0.28 3.1 1.0
- pair_coeff 1 1 0.28 3.1 1.0 0.14 3.1
-
-.. parsed-literal::
-
- pair_style coul/long/soft 1.0 10.0 9.5
- pair_coeff * * 1.0
- pair_coeff 1 1 1.0 9.5
-
-.. parsed-literal::
-
- pair_style tip4p/long/soft 1 2 7 8 0.15 2.0 0.5 10.0 9.8
- pair_coeff * * 1.0
- pair_coeff 1 1 1.0 9.5
-
-Description
-"""""""""""
-
-The *lj/cut/soft* style and substyles compute the 12/6 Lennard-Jones
-and Coulomb potential modified by a soft core, in order to avoid
-singularities during free energy calculations when sites are created
-or anihilated :ref:`(Beutler) <Beutler>`,
-
-.. image:: Eqs/pair_lj_soft.jpg
- :align: center
-
-Coulomb interactions are also damped with a soft core at short
-distance,
-
-.. image:: Eqs/pair_coul_soft.jpg
- :align: center
-
-In the Coulomb part C is an energy-conversion constant, q_i and q_j
-are the charges on the 2 atoms, and epsilon is the dielectric constant
-which can be set by the :doc:`dielectric <dielectric>` command.
-
-The coefficient lambda is an activation parameter. When lambda = 1 the
-pair potentiel is identical to a Lennard-Jones term or a Coulomb term
-or a combination of both. When lambda = 0 the interactions are
-deactivated. The transition between these two extrema is smoothed by a
-soft repulsive core in order to avoid singularities in potential
-energy and forces when sites are created or anihilated and can overlap
-:ref:`(Beutler) <Beutler>`.
-
-The paratemers n, alpha_LJ and alpha_C are set in the
-:doc:`pair_style <pair_style>` command, before the cutoffs. Usual
-choices for the exponent are n = 2 or n = 1. For the remaining
-coefficients alpha_LJ = 0.5 and alpha_C = 10 Angstrom^2 are
-appropriate choices. Plots of the LJ and Coulomb terms are shown
-below, for lambda ranging from 1 to 0 every 0.1.
-
-.. image:: JPG/lj_soft.jpg
- :align: center
-.. image:: JPG/coul_soft.jpg
- :align: center
-For the *lj/cut/coul/cut/soft* or *lj/cut/coul/long/soft* pair styles,
-the following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* lambda (activation parameter between 0 and 1)
-* cutoff1 (distance units)
-* cutoff2 (distance units)
-
-The latter two coefficients are optional. If not specified, the global
-LJ and Coulombic cutoffs specified in the pair_style command are used.
-If only one cutoff is specified, it is used as the cutoff for both LJ
-and Coulombic interactions for this type pair. If both coefficients
-are specified, they are used as the LJ and Coulombic cutoffs for this
-type pair. You cannot specify 2 cutoffs for style *lj/cut/soft*\ ,
-since it has no Coulombic terms. For the *coul/cut/soft* and
-*coul/long/soft* only lambda and the optional cutoff2 are to be
-specified.
-
-Style *lj/cut/tip4p/long/soft* implements a soft-core version of the
-TIP4P water model. The usage of this pair style is documented in the
-:doc:`pair_lj <pair_lj>` styles. The soft-core version introduces the
-lambda parameter to the list of arguments, after epsilon and sigma in
-the :doc:`pair_coeff <pair_coeff>` command. The paratemers n, alpha_LJ
-and alpha_C are set in the :doc:`pair_style <pair_style>` command,
-before the cutoffs.
-
-Style *lj/charmm/coul/long/soft* implements a soft-core version of the
-CHARMM version of LJ interactions with an additional switching
-function S(r) that ramps the energy and force smoothly to zero between
-an inner and outer cutoff. The usage of this pair style is documented
-in the :doc:`pair_charmm <pair_charmm>` styles. The soft-core version
-introduces the lambda parameter to the list of arguments, after
-epsilon and sigma in the :doc:`pair_coeff <pair_coeff>` command (and
-before the optional eps14 and sigma14). The paratemers n,
-alpha_LJ and alpha_C are set in the :doc:`pair_style <pair_style>`
-command, before the cutoffs.
-
-The *coul/cut/soft*\ , *coul/long/soft* and *tip4p/long/soft* substyles
-are designed to be combined with other pair potentials via the
-:doc:`pair_style hybrid/overlay <pair_hybrid>` command. This is because
-they have no repulsive core. Hence, if used by themselves, there will
-be no repulsion to keep two oppositely charged particles from
-overlapping each other. In this case, if lambda = 1, a singularity may
-occur. These substyles are suitable to represent charges embedded in
-the Lennard-Jones radius of another site (for example hydrogen atoms
-in several water models).
-
-NOTES: When using the core-softed Coulomb potentials with long-range
-solvers (\ *coul/long/soft*\ , *lj/cut/coul/long/soft*\ , etc.) in a free
-energy calculation in which sites holding electrostatic charges are
-being created or anihilated (using :doc:`fix adapt/fep <fix_adapt_fep>`
-and :doc:`compute fep <compute_fep>`) it is important to adapt both the
-lambda activation parameter (from 0 to 1, or the reverse) and the
-value of the charge (from 0 to its final value, or the reverse). This
-ensures that long-range electrostatic terms (kspace) are correct. It
-is not necessary to use core-softed Coulomb potentials if the van der
-Waals site is present during the free-energy route, thus avoiding
-overlap of the charges. Examples are provided in the LAMMPS source
-directory tree, under examples/USER/fep.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, tail correction, restart 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.
-The default mix value is *geometric*\ . See the "pair_modify" command
-for details.
-
-These pair styles support the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the Lennard-Jones portion of the pair
-interaction.
-
-These pair styles support the :doc:`pair_modify <pair_modify>` tail
-option for adding a long-range tail correction to the energy and
-pressure for the Lennard-Jones portion of the pair interaction.
-
-These pair styles write information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do not need
-to be specified in an input script that reads a restart file.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-To avoid division by zero do not set sigma = 0; use the lambda
-parameter instead to activate/deactivate interactions, or use
-epsilon = 0 and sigma = 1. Alternatively, when sites do not
-interact though the Lennard-Jones term the *coul/long/soft* or
-similar substyle can be used via the
-:doc:`pair_style hybrid/overlay <pair_hybrid>` command.
-
-
-----------
-
-
-All of the plain *soft* pair styles are part of the USER-FEP package.
-The *long* styles also requires the KSPACE package to be installed.
-They are only enabled if LAMMPS was built with those packages. See
-the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`fix adapt <fix_adapt>`,
-:doc:`fix adapt/fep <fix_adapt_fep>`, :doc:`compute fep <compute_fep>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Beutler:
-
-
-
-**(Beutler)** Beutler, Mark, van Schaik, Gerber, van Gunsteren, Chem
-Phys Lett, 222, 529 (1994).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lubricate.txt b/doc/html/_sources/pair_lubricate.txt
deleted file mode 100644
index 7f4a41bf5..000000000
--- a/doc/html/_sources/pair_lubricate.txt
+++ /dev/null
@@ -1,258 +0,0 @@
-.. index:: pair_style lubricate
-
-pair_style lubricate command
-============================
-
-pair_style lubricate/omp command
-================================
-
-pair_style lubricate/poly command
-=================================
-
-pair_style lubricate/poly/omp command
-=====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style mu flaglog flagfld cutinner cutoff flagHI flagVF
-
-* style = *lubricate* or *lubricate/poly*
-* mu = dynamic viscosity (dynamic viscosity units)
-* flaglog = 0/1 to exclude/include log terms in the lubrication approximation
-* flagfld = 0/1 to exclude/include Fast Lubrication Dynamics (FLD) effects
-* cutinner = inner cutoff distance (distance units)
-* cutoff = outer cutoff for interactions (distance units)
-* flagHI (optional) = 0/1 to exclude/include 1/r hydrodynamic interactions
-* flagVF (optional) = 0/1 to exclude/include volume fraction corrections in the long-range isotropic terms
-
-**Examples:** (all assume radius = 1)
-
-.. parsed-literal::
-
- pair_style lubricate 1.5 1 1 2.01 2.5
- pair_coeff 1 1 2.05 2.8
- pair_coeff * *
-
-.. parsed-literal::
-
- pair_style lubricate 1.5 1 1 2.01 2.5
- pair_coeff * *
- variable mu equal ramp(1,2)
- fix 1 all adapt 1 pair lubricate mu * * v_mu
-
-Description
-"""""""""""
-
-Styles *lubricate* and *lubricate/poly* compute hydrodynamic
-interactions between mono-disperse finite-size spherical particles in
-a pairwise fashion. The interactions have 2 components. The first is
-Ball-Melrose lubrication terms via the formulas in :ref:`(Ball and Melrose) <Ball>`
-
-.. image:: Eqs/pair_lubricate.jpg
- :align: center
-
-which represents the dissipation W between two nearby particles due to
-their relative velocities in the presence of a background solvent with
-viscosity *mu*\ . Note that this is dynamic viscosity which has units of
-mass/distance/time, not kinematic viscosity.
-
-The Asq (squeeze) term is the strongest and is included if *flagHI* is
-set to 1 (default). It scales as 1/gap where gap is the separation
-between the surfaces of the 2 particles. The Ash (shear) and Apu
-(pump) terms are only included if *flaglog* is set to 1. They are the
-next strongest interactions, and the only other singular interaction,
-and scale as log(gap). Note that *flaglog* = 1 and *flagHI* = 0 is
-invalid, and will result in a warning message, after which *flagHI* will
-be set to 1. The Atw (twist) term is currently not included. It is
-typically a very small contribution to the lubrication forces.
-
-The *flagHI* and *flagVF* settings are optional. Neither should be
-used, or both must be defined.
-
-*Cutinner* sets the minimum center-to-center separation that will be
-used in calculations irrespective of the actual separation. *Cutoff*
-is the maximum center-to-center separation at which an interaction is
-computed. Using a *cutoff* less than 3 radii is recommended if
-*flaglog* is set to 1.
-
-The other component is due to the Fast Lubrication Dynamics (FLD)
-approximation, described in :ref:`(Kumar) <Kumar>`, which can be
-represented by the following equation
-
-.. image:: Eqs/fld.jpg
- :align: center
-
-where U represents the velocities and angular velocities of the
-particles, U^\ *infty* represents the velocity and the angular velocity
-of the undisturbed fluid, and E^\ *infty* represents the rate of strain
-tensor of the undisturbed fluid with viscosity *mu*\ . Again, note that
-this is dynamic viscosity which has units of mass/distance/time, not
-kinematic viscosity. Volume fraction corrections to R_FU are included
-as long as *flagVF* is set to 1 (default).
-
-.. note::
-
- When using the FLD terms, these pair styles are designed to be
- used with explicit time integration and a correspondingly small
- timestep. Thus either :doc:`fix nve/sphere <fix_nve_sphere>` or :doc:`fix nve/asphere <fix_nve_asphere>` should be used for time integration.
- To perform implicit FLD, see the :doc:`pair_style lubricateU <pair_lubricateU>` command.
-
-Style *lubricate* requires monodisperse spherical particles; style
-*lubricate/poly* allows for polydisperse spherical particles.
-
-The viscosity *mu* can be varied in a time-dependent manner over the
-course of a simluation, in which case in which case the pair_style
-setting for *mu* will be overridden. See the :doc:`fix adapt <fix_adapt>`
-command for details.
-
-If the suspension is sheared via the :doc:`fix deform <fix_deform>`
-command then the pair style uses the shear rate to adjust the
-hydrodynamic interactions accordingly. Volume changes due to fix
-deform are accounted for when computing the volume fraction
-corrections to R_FU.
-
-When computing the volume fraction corrections to R_FU, the presence
-of walls (whether moving or stationary) will affect the volume
-fraction available to colloidal particles. This is currently accounted
-for with the following types of walls: :doc:`wall/lj93 <fix_wall>`,
-:doc:`wall/lj126 <fix_wall>`, :doc:`wall/colloid <fix_wall>`, and
-:doc:`wall/harmonic <fix_wall>`. For these wall styles, the correct
-volume fraction will be used when walls do not coincide with the box
-boundary, as well as when walls move and thereby cause a change in the
-volume fraction. Other wall styles will still work, but they will
-result in the volume fraction being computed based on the box
-boundaries.
-
-Since lubrication forces are dissipative, it is usually desirable to
-thermostat the system at a constant temperature. If Brownian motion
-(at a constant temperature) is desired, it can be set using the
-:doc:`pair_style brownian <pair_brownian>` command. These pair styles
-and the brownian style should use consistent parameters for *mu*\ ,
-*flaglog*\ , *flagfld*\ , *cutinner*\ , *cutoff*\ , *flagHI* and *flagVF*\ .
-
-
-----------
-
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* cutinner (distance units)
-* cutoff (distance units)
-
-The two coefficients are optional. If neither is specified, the two
-cutoffs specified in the pair_style command are used. Otherwise both
-must be specified.
-
-
-----------
-
-
-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 :doc:`this section <Section_accelerate>` 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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`this section <Section_accelerate>` of the manual for more
-instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the two cutoff distances for this
-pair style can be mixed. The default mix value is *geometric*\ . See
-the "pair_modify" command for details.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-These styles are part of the COLLOID package. They are only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_2_3>` section for more info.
-
-Only spherical monodisperse particles are allowed for pair_style
-lubricate.
-
-Only spherical particles are allowed for pair_style lubricate/poly.
-
-These pair styles will not restart exactly when using the
-:doc:`read_restart <read_restart>` command, though they should provide
-statistically similar results. This is because the forces they
-compute depend on atom velocities. See the
-:doc:`read_restart <read_restart>` command for more details.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style lubricateU <pair_lubricateU>`
-
-Default
-"""""""
-
-The default settings for the optional args are flagHI = 1 and flagVF =
-1.
-
-
-----------
-
-
-.. _Ball:
-
-
-
-**(Ball)** Ball and Melrose, Physica A, 247, 444-472 (1997).
-
-.. _Kumar:
-
-
-
-**(Kumar)** Kumar and Higdon, Phys Rev E, 82, 051401 (2010). See also
-his thesis for more details: A. Kumar, "Microscale Dynamics in
-Suspensions of Non-spherical Particles", Thesis, University of
-Illinois Urbana-Champaign,
-(2010). (`https://www.ideals.illinois.edu/handle/2142/16032 <https://www.ideals.illinois.edu/handle/2142/16032>`_)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_lubricateU.txt b/doc/html/_sources/pair_lubricateU.txt
deleted file mode 100644
index 27fa0dcd0..000000000
--- a/doc/html/_sources/pair_lubricateU.txt
+++ /dev/null
@@ -1,240 +0,0 @@
-.. index:: pair_style lubricateU
-
-pair_style lubricateU command
-=============================
-
-pair_style lubricateU/poly command
-==================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style mu flaglog cutinner cutoff gdot flagHI flagVF
-
-* style = *lubricateU* or *lubricateU/poly*
-* mu = dynamic viscosity (dynamic viscosity units)
-* flaglog = 0/1 to exclude/include log terms in the lubrication approximation
-* cutinner = inner cut off distance (distance units)
-* cutoff = outer cutoff for interactions (distance units)
-* gdot = shear rate (1/time units)
-* flagHI (optional) = 0/1 to exclude/include 1/r hydrodynamic interactions
-* flagVF (optional) = 0/1 to exclude/include volume fraction corrections in the long-range isotropic terms
-
-**Examples:** (all assume radius = 1)
-
-.. parsed-literal::
-
- pair_style lubricateU 1.5 1 2.01 2.5 0.01 1 1
- pair_coeff 1 1 2.05 2.8
- pair_coeff * *
-
-Description
-"""""""""""
-
-Styles *lubricateU* and *lubricateU/poly* compute velocities and
-angular velocities for finite-size spherical particles such that the
-hydrodynamic interaction balances the force and torque due to all
-other types of interactions.
-
-The interactions have 2 components. The first is
-Ball-Melrose lubrication terms via the formulas in :ref:`(Ball and Melrose) <Ball>`
-
-.. image:: Eqs/pair_lubricate.jpg
- :align: center
-
-which represents the dissipation W between two nearby particles due to
-their relative velocities in the presence of a background solvent with
-viscosity *mu*\ . Note that this is dynamic viscosity which has units of
-mass/distance/time, not kinematic viscosity.
-
-The Asq (squeeze) term is the strongest and is included as long as
-*flagHI* is set to 1 (default). It scales as 1/gap where gap is the
-separation between the surfaces of the 2 particles. The Ash (shear)
-and Apu (pump) terms are only included if *flaglog* is set to 1. They
-are the next strongest interactions, and the only other singular
-interaction, and scale as log(gap). Note that *flaglog* = 1 and
-*flagHI* = 0 is invalid, and will result in a warning message, after
-which *flagHI* will be set to 1. The Atw (twist) term is currently not
-included. It is typically a very small contribution to the lubrication
-forces.
-
-The *flagHI* and *flagVF* settings are optional. Neither should be
-used, or both must be defined.
-
-*Cutinner* sets the minimum center-to-center separation that will be
-used in calculations irrespective of the actual separation. *Cutoff*
-is the maximum center-to-center separation at which an interaction is
-computed. Using a *cutoff* less than 3 radii is recommended if
-*flaglog* is set to 1.
-
-The other component is due to the Fast Lubrication Dynamics (FLD)
-approximation, described in :ref:`(Kumar) <Kumar>`. The equation being
-solved to balance the forces and torques is
-
-.. image:: Eqs/fld2.jpg
- :align: center
-
-where U represents the velocities and angular velocities of the
-particles, U^\ *infty* represents the velocities and the angular
-velocities of the undisturbed fluid, and E^\ *infty* represents the rate
-of strain tensor of the undisturbed fluid flow with viscosity
-*mu*\ . Again, note that this is dynamic viscosity which has units of
-mass/distance/time, not kinematic viscosity. Volume fraction
-corrections to R_FU are included if *flagVF* is set to 1 (default).
-
-F\ *rest* represents the forces and torques due to all other types of
-interactions, e.g. Brownian, electrostatic etc. Note that this
-algorithm neglects the inertial terms, thereby removing the
-restriction of resolving the small interial time scale, which may not
-be of interest for colloidal particles. This pair style solves for
-the velocity such that the hydrodynamic force balances all other types
-of forces, thereby resulting in a net zero force (zero inertia limit).
-When defining this pair style, it must be defined last so that when
-this style is invoked all other types of forces have already been
-computed. For the same reason, it won't work if additional non-pair
-styles are defined (such as bond or Kspace forces) as they are
-calculated in LAMMPS after the pairwise interactions have been
-computed.
-
-.. note::
-
- When using these styles, the these pair styles are designed to
- be used with implicit time integration and a correspondingly larger
- timestep. Thus either :doc:`fix nve/noforce <fix_nve_noforce>` should
- be used for spherical particles defined via :doc:`atom_style sphere <atom_style>` or :doc:`fix nve/asphere/noforce <fix_nve_asphere_noforce>` should be used for
- spherical particles defined via :doc:`atom_style ellipsoid <atom_style>`. This is because the velocity and angular
- momentum of each particle is set by the pair style, and should not be
- reset by the time integration fix.
-
-Style *lubricateU* requires monodisperse spherical particles; style
-*lubricateU/poly* allows for polydisperse spherical particles.
-
-If the suspension is sheared via the :doc:`fix deform <fix_deform>`
-command then the pair style uses the shear rate to adjust the
-hydrodynamic interactions accordingly. Volume changes due to fix
-deform are accounted for when computing the volume fraction
-corrections to R_FU.
-
-When computing the volume fraction corrections to R_FU, the presence
-of walls (whether moving or stationary) will affect the volume
-fraction available to colloidal particles. This is currently accounted
-for with the following types of walls: :doc:`wall/lj93 <fix_wall>`,
-:doc:`wall/lj126 <fix_wall>`, :doc:`wall/colloid <fix_wall>`, and
-"wall/harmonic_fix_wall.html". For these wall styles, the correct
-volume fraction will be used when walls do not coincide with the box
-boundary, as well as when walls move and thereby cause a change in the
-volume fraction. To use these wall styles with pair_style *lubricateU*
-or *lubricateU/poly*\ , the *fld yes* option must be specified in the
-fix wall command.
-
-Since lubrication forces are dissipative, it is usually desirable to
-thermostat the system at a constant temperature. If Brownian motion
-(at a constant temperature) is desired, it can be set using the
-:doc:`pair_style brownian <pair_brownian>` command. These pair styles
-and the brownian style should use consistent parameters for *mu*\ ,
-*flaglog*\ , *flagfld*\ , *cutinner*\ , *cutoff*\ , *flagHI* and *flagVF*\ .
-
-
-----------
-
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* cutinner (distance units)
-* cutoff (distance units)
-
-The two coefficients are optional. If neither is specified, the two
-cutoffs specified in the pair_style command are used. Otherwise both
-must be specified.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the two cutoff distances for this
-pair style can be mixed. The default mix value is *geometric*\ . See
-the "pair_modify" command for details.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-These styles are part of the COLLOID package. They are only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_2_3>` section for more info.
-
-Currently, these pair styles assume that all other types of
-forces/torques on the particles have been already been computed when
-it is invoked. This requires this style to be defined as the last of
-the pair styles, and that no fixes apply additional constraint forces.
-One exception is the :doc:`fix wall/colloid <fix_wall>` commands, which
-has an "fld" option to apply their wall forces correctly.
-
-Only spherical monodisperse particles are allowed for pair_style
-lubricateU.
-
-Only spherical particles are allowed for pair_style lubricateU/poly.
-
-For sheared suspensions, it is assumed that the shearing is done in
-the xy plane, with x being the velocity direction and y being the
-velocity-gradient direction. In this case, one must use :doc:`fix deform <fix_deform>` with the same rate of shear (erate).
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style lubricate <pair_lubricate>`
-
-Default
-"""""""
-
-The default settings for the optional args are flagHI = 1 and flagVF =
-1.
-
-
-----------
-
-
-.. _Ball:
-
-
-
-**(Ball)** Ball and Melrose, Physica A, 247, 444-472 (1997).
-
-.. _Kumar:
-
-
-
-**(Kumar)** Kumar and Higdon, Phys Rev E, 82, 051401 (2010).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_mdf.txt b/doc/html/_sources/pair_mdf.txt
deleted file mode 100644
index 2860df309..000000000
--- a/doc/html/_sources/pair_mdf.txt
+++ /dev/null
@@ -1,203 +0,0 @@
-.. index:: pair_style lj/mdf
-
-pair_style lj/mdf command
-=========================
-
-pair_style buck/mdf command
-===========================
-
-pair_style lennard/mdf command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *lj/mdf* or *buck/mdf* or *lennard/mdf*
-* args = list of arguments for a particular style
-.. parsed-literal::
-
- *lj/mdf* args = cutoff1 cutoff2
- cutoff1 = inner cutoff for the start of the tapering function
- cutoff1 = out cutoff for the end of the tapering function
- *buck/mdf* args = cutoff1 cutoff2
- cutoff1 = inner cutoff for the start of the tapering function
- cutoff1 = out cutoff for the end of the tapering function
- *lennard/mdf* args = cutoff1 cutoff2
- cutoff1 = inner cutoff for the start of the tapering function
- cutoff1 = out cutoff for the end of the tapering function
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/mdf 2.5 3.0
- pair_coeff * * 1 1
- pair_coeff 1 1 1 1.1 2.8 3.0 3.2
-
-.. parsed-literal::
-
- pair_style buck 2.5 3.0
- pair_coeff * * 100.0 1.5 200.0
- pair_coeff * * 100.0 1.5 200.0 3.0 3.5
-
-.. parsed-literal::
-
- pair_style lennard/mdf 2.5 3.0
- pair_coeff * * 1 1
- pair_coeff 1 1 1 1.1 2.8 3.0 3.2
-
-Description
-"""""""""""
-
-The *lj/mdf*\ , *buck/mdf* and *lennard/mdf* compute the standard 12-6
-Lennard-Jones and Buckingham potential with the addition of a taper
-function that ramps the energy and force smoothly to zero between an
-inner and outer cutoff.
-
-.. image:: Eqs/pair_mdf-1.jpg
- :align: center
-
-The tapering, *f(r)*\ , is done by using the Mei, Davenport, Fernando
-function :ref:`(Mei) <Mei>`.
-
-.. image:: Eqs/pair_mdf-2.jpg
- :align: center
-
-where
-
-.. image:: Eqs/pair_mdf-3.jpg
- :align: center
-
-Here *r_m* is the inner cutoff radius and *r_cut* is the outer cutoff
-radius.
-
-
-----------
-
-
-For the *lj/mdf* pair_style, the potential energy, *E(r)*\ , is the
-standard 12-6 Lennard-Jones written in the epsilon/sigma form:
-
-.. image:: Eqs/pair_mdf-4.jpg
- :align: center
-
-The following coefficients must be defined for each pair of atoms
-types via the pair_coeff command as in the examples above, or in the
-data file or restart files read by the :doc:`read_data <read_data>` or
-:doc:`read_restart commands <read_restart>`, or by mixing as described
-below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* r_m (distance units)
-* r_\ *cut* (distance units)
-
-
-----------
-
-
-For the *buck/mdf* pair_style, the potential energy, *E(r)*\ , is the
-standard Buckingham potential:
-
-.. image:: Eqs/pair_mdf-5.jpg
- :align: center
-
-* A (energy units)
-* \rho (distance units)
-* C (energy-distance^6 units)
-* r_m (distance units)
-* r_\ *cut*\ $ (distance units)
-
-
-----------
-
-
-For the *lennard/mdf* pair_style, the potential energy, *E(r)*\ , is the
-standard 12-6 Lennard-Jones written in the $A/B$ form:
-
-.. image:: Eqs/pair_mdf-6.jpg
- :align: center
-
-The following coefficients must be defined for each pair of atoms
-types via the pair_coeff command as in the examples above, or in the
-data file or restart files read by the read_data or read_restart
-commands, or by mixing as described below:
-
-* A (energy-distance^12 units)
-* B (energy-distance^6 units)
-* r_m (distance units)
-* r_\ *cut* (distance units)
-
-
-----------
-
-
-**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 all of the lj/cut pair styles can be mixed.
-The default mix value is *geometric*\ . See the "pair_modify" command
-for details.
-
-All of the *lj/cut* pair styles support the
-:doc:`pair_modify <pair_modify>` shift option for the energy of the
-Lennard-Jones portion of the pair interaction.
-
-The *lj/cut/coul/long* and *lj/cut/tip4p/long* pair styles support the
-:doc:`pair_modify <pair_modify>` table option since they can tabulate
-the short-range portion of the long-range Coulombic interaction.
-
-All of the *lj/cut* pair styles support the
-:doc:`pair_modify <pair_modify>` tail option for adding a long-range
-tail correction to the energy and pressure for the Lennard-Jones
-portion of the pair interaction.
-
-All of the *lj/cut* pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do
-not need to be specified in an input script that reads a restart file.
-
-The *lj/cut* and *lj/cut/coul/long* pair styles support the use of the
-*inner*\ , *middle*\ , and *outer* keywords of the :doc:`run_style respa <run_style>` command, meaning the pairwise forces can be
-partitioned by distance at different levels of the rRESPA hierarchy.
-The other styles only support the *pair* keyword of run_style respa.
-See the :doc:`run_style <run_style>` command for details.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-These pair styles can only be used if LAMMPS was built with the
-USER-MISC package. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Mei:
-
-
-
-**(Mei)** Mei, Davenport, Fernando, Phys Rev B, 43 4653 (1991)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_meam.txt b/doc/html/_sources/pair_meam.txt
deleted file mode 100644
index af812d9fb..000000000
--- a/doc/html/_sources/pair_meam.txt
+++ /dev/null
@@ -1,427 +0,0 @@
-.. index:: pair_style meam
-
-pair_style meam command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style meam
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style meam
- pair_coeff * * ../potentials/library.meam Si ../potentials/si.meam Si
- pair_coeff * * ../potentials/library.meam Ni Al NULL Ni Al Ni Ni
-
-Description
-"""""""""""
-
-.. note::
-
- The behavior of the MEAM potential for alloy systems has changed
- as of November 2010; see description below of the mixture_ref_t
- parameter
-
-Style *meam* computes pairwise interactions for a variety of materials
-using modified embedded-atom method (MEAM) potentials
-:ref:`(Baskes) <Baskes>`. Conceptually, it is an extension to the original
-:doc:`EAM potentials <pair_eam>` which adds angular forces. It is
-thus suitable for modeling metals and alloys with fcc, bcc, hcp and
-diamond cubic structures, as well as covalently bonded materials like
-silicon and carbon.
-
-In the MEAM formulation, the total energy E of a system of atoms is
-given by:
-
-.. image:: Eqs/pair_meam.jpg
- :align: center
-
-where F is the embedding energy which is a function of the atomic
-electron density rho, and phi is a pair potential interaction. The
-pair interaction is summed over all neighbors J of atom I within the
-cutoff distance. As with EAM, the multi-body nature of the MEAM
-potential is a result of the embedding energy term. Details of the
-computation of the embedding and pair energies, as implemented in
-LAMMPS, are given in :ref:`(Gullet) <Gullet>` and references therein.
-
-The various parameters in the MEAM formulas are listed in two files
-which are specified by the :doc:`pair_coeff <pair_coeff>` command.
-These are ASCII text files in a format consistent with other MD codes
-that implement MEAM potentials, such as the serial DYNAMO code and
-Warp. Several MEAM potential files with parameters for different
-materials are included in the "potentials" directory of the LAMMPS
-distribution with a ".meam" suffix. All of these are parameterized in
-terms of LAMMPS :doc:`metal units <units>`.
-
-Note that unlike for other potentials, cutoffs for MEAM potentials are
-not set in the pair_style or pair_coeff command; they are specified in
-the MEAM potential files themselves.
-
-Only a single pair_coeff command is used with the *meam* style which
-specifies two MEAM files and the element(s) to extract information
-for. The MEAM elements are mapped to LAMMPS atom types by specifying
-N additional arguments after the 2nd filename in the pair_coeff
-command, where N is the number of LAMMPS atom types:
-
-* MEAM library file
-* Elem1, Elem2, ...
-* MEAM parameter file
-* N element names = mapping of MEAM elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential files.
-
-As an example, the potentials/library.meam file has generic MEAM
-settings for a variety of elements. The potentials/sic.meam file has
-specific parameter settings for a Si and C alloy system. If your
-LAMMPS simulation has 4 atoms types and you want the 1st 3 to be Si,
-and the 4th to be C, you would use the following pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * library.meam Si C sic.meam Si Si Si C
-
-The 1st 2 arguments must be * * so as to span all LAMMPS atom types.
-The two filenames are for the library and parameter file respectively.
-The Si and C arguments (between the file names) are the two elements
-for which info will be extracted from the library file. The first
-three trailing Si arguments map LAMMPS atom types 1,2,3 to the MEAM Si
-element. The final C argument maps LAMMPS atom type 4 to the MEAM C
-element.
-
-If the 2nd filename is specified as NULL, no parameter file is read,
-which simply means the generic parameters in the library file are
-used. Use of the NULL specification for the parameter file is
-discouraged for systems with more than a single element type
-(e.g. alloys), since the parameter file is expected to set element
-interaction terms that are not captured by the information in the
-library file.
-
-If a mapping value is specified as NULL, the mapping is not performed.
-This can be used when a *meam* 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.
-
-The MEAM library file provided with LAMMPS has the name
-potentials/library.meam. It is the "meamf" file used by other MD
-codes. Aside from blank and comment lines (start with #) which can
-appear anywhere, it is formatted as a series of entries, each of which
-has 19 parameters and can span multiple lines:
-
-elt, lat, z, ielement, atwt, alpha, b0, b1, b2, b3, alat, esub, asub,
-t0, t1, t2, t3, rozero, ibar
-
-The "elt" and "lat" parameters are text strings, such as elt = Si or
-Cu and lat = dia or fcc. Because the library file is used by Fortran
-MD codes, these strings may be enclosed in single quotes, but this is
-not required. The other numeric parameters match values in the
-formulas above. The value of the "elt" string is what is used in the
-pair_coeff command to identify which settings from the library file
-you wish to read in. There can be multiple entries in the library
-file with the same "elt" value; LAMMPS reads the 1st matching entry it
-finds and ignores the rest.
-
-Other parameters in the MEAM library file correspond to single-element
-potential parameters:
-
-.. parsed-literal::
-
- lat = lattice structure of reference configuration
- z = number of nearest neighbors in the reference structure
- ielement = atomic number
- atwt = atomic weight
- alat = lattice constant of reference structure
- esub = energy per atom (eV) in the reference structure at equilibrium
- asub = "A" parameter for MEAM (see e.g. :ref:`(Baskes) <Baskes>`)
-
-The alpha, b0, b1, b2, b3, t0, t1, t2, t3 parameters correspond to the
-standard MEAM parameters in the literature :ref:`(Baskes) <Baskes>` (the b
-parameters are the standard beta parameters). The rozero parameter is
-an element-dependent density scaling that weights the reference
-background density (see e.g. equation 4.5 in :ref:`(Gullet) <Gullet>`) and
-is typically 1.0 for single-element systems. The ibar parameter
-selects the form of the function G(Gamma) used to compute the electron
-density; options are
-
-.. parsed-literal::
-
- 0 => G = sqrt(1+Gamma)
- 1 => G = exp(Gamma/2)
- 2 => not implemented
- 3 => G = 2/(1+exp(-Gamma))
- 4 => G = sqrt(1+Gamma)
- -5 => G = +-sqrt(abs(1+Gamma))
-
-If used, the MEAM parameter file contains settings that override or
-complement the library file settings. Examples of such parameter
-files are in the potentials directory with a ".meam" suffix. Their
-format is the same as is read by other Fortran MD codes. Aside from
-blank and comment lines (start with #) which can appear anywhere, each
-line has one of the following forms. Each line can also have a
-trailing comment (starting with #) which is ignored.
-
-.. parsed-literal::
-
- keyword = value
- keyword(I) = value
- keyword(I,J) = value
- keyword(I,J,K) = value
-
-The recognized keywords are as follows:
-
-Ec, alpha, rho0, delta, lattce, attrac, repuls, nn2, Cmin, Cmax, rc, delr,
-augt1, gsmooth_factor, re
-
-where
-
-.. parsed-literal::
-
- rc = cutoff radius for cutoff function; default = 4.0
- delr = length of smoothing distance for cutoff function; default = 0.1
- rho0(I) = relative density for element I (overwrites value
- read from meamf file)
- Ec(I,J) = cohesive energy of reference structure for I-J mixture
- delta(I,J) = heat of formation for I-J alloy; if Ec_IJ is input as
- zero, then LAMMPS sets Ec_IJ = (Ec_II + Ec_JJ)/2 - delta_IJ
- alpha(I,J) = alpha parameter for pair potential between I and J (can
- be computed from bulk modulus of reference structure
- re(I,J) = equilibrium distance between I and J in the reference
- structure
- Cmax(I,J,K) = Cmax screening parameter when I-J pair is screened
- by K (I<=J); default = 2.8
- Cmin(I,J,K) = Cmin screening parameter when I-J pair is screened
- by K (I<=J); default = 2.0
- lattce(I,J) = lattice structure of I-J reference structure:
- dia = diamond (interlaced fcc for alloy)
- fcc = face centered cubic
- bcc = body centered cubic
- dim = dimer
- b1 = rock salt (NaCl structure)
- hcp = hexagonal close-packed
- c11 = MoSi2 structure
- l12 = Cu3Au structure (lower case L, followed by 12)
- b2 = CsCl structure (interpenetrating simple cubic)
- nn2(I,J) = turn on second-nearest neighbor MEAM formulation for
- I-J pair (see for example :ref:`(Lee) <Lee>`).
- 0 = second-nearest neighbor formulation off
- 1 = second-nearest neighbor formulation on
- default = 0
- attrac(I,J) = additional cubic attraction term in Rose energy I-J pair potential
- default = 0
- repuls(I,J) = additional cubic repulsive term in Rose energy I-J pair potential
- default = 0
- zbl(I,J) = blend the MEAM I-J pair potential with the ZBL potential for small
- atom separations :ref:`(ZBL) <ZBL>`
- default = 1
- gsmooth_factor = factor determining the length of the G-function smoothing
- region; only significant for ibar=0 or ibar=4.
- 99.0 = short smoothing region, sharp step
- 0.5 = long smoothing region, smooth step
- default = 99.0
- augt1 = integer flag for whether to augment t1 parameter by
- 3/5*t3 to account for old vs. new meam formulations;
- 0 = don't augment t1
- 1 = augment t1
- default = 1
- ialloy = integer flag to use alternative averaging rule for t parameters,
- for comparison with the DYNAMO MEAM code
- 0 = standard averaging (matches ialloy=0 in DYNAMO)
- 1 = alternative averaging (matches ialloy=1 in DYNAMO)
- 2 = no averaging of t (use single-element values)
- default = 0
- mixture_ref_t = integer flag to use mixture average of t to compute the background
- reference density for alloys, instead of the single-element values
- (see description and warning elsewhere in this doc page)
- 0 = do not use mixture averaging for t in the reference density
- 1 = use mixture averaging for t in the reference density
- default = 0
- erose_form = integer value to select the form of the Rose energy function
- (see description below).
- default = 0
- emb_lin_neg = integer value to select embedding function for negative densities
- 0 = F(rho)=0
- 1 = F(rho) = -asub*esub*rho (linear in rho, matches DYNAMO)
- default = 0
- bkgd_dyn = integer value to select background density formula
- 0 = rho_bkgd = rho_ref_meam(a) (as in the reference structure)
- 1 = rho_bkgd = rho0_meam(a)*Z_meam(a) (matches DYNAMO)
- default = 0
-
-Rc, delr, re are in distance units (Angstroms in the case of metal
-units). Ec and delta are in energy units (eV in the case of metal
-units).
-
-Each keyword represents a quantity which is either a scalar, vector,
-2d array, or 3d array and must be specified with the correct
-corresponding array syntax. The indices I,J,K each run from 1 to N
-where N is the number of MEAM elements being used.
-
-Thus these lines
-
-.. parsed-literal::
-
- rho0(2) = 2.25
- alpha(1,2) = 4.37
-
-set rho0 for the 2nd element to the value 2.25 and set alpha for the
-alloy interaction between elements 1 and 2 to 4.37.
-
-The augt1 parameter is related to modifications in the MEAM
-formulation of the partial electron density function. In recent
-literature, an extra term is included in the expression for the
-third-order density in order to make the densities orthogonal (see for
-example :ref:`(Wang) <Wang>`, equation 3d); this term is included in the
-MEAM implementation in lammps. However, in earlier published work
-this term was not included when deriving parameters, including most of
-those provided in the library.meam file included with lammps, and to
-account for this difference the parameter t1 must be augmented by
-3/5*t3. If augt1=1, the default, this augmentation is done
-automatically. When parameter values are fit using the modified
-density function, as in more recent literature, augt1 should be set to
-0.
-
-The mixture_ref_t parameter is available to match results with those
-of previous versions of lammps (before January 2011). Newer versions
-of lammps, by default, use the single-element values of the t
-parameters to compute the background reference density. This is the
-proper way to compute these parameters. Earlier versions of lammps
-used an alloy mixture averaged value of t to compute the background
-reference density. Setting mixture_ref_t=1 gives the old behavior.
-WARNING: using mixture_ref_t=1 will give results that are demonstrably
-incorrect for second-neighbor MEAM, and non-standard for
-first-neighbor MEAM; this option is included only for matching with
-previous versions of lammps and should be avoided if possible.
-
-The parameters attrac and repuls, along with the integer selection
-parameter erose_form, can be used to modify the Rose energy function
-used to compute the pair potential. This function gives the energy of
-the reference state as a function of interatomic spacing. The form of
-this function is:
-
-.. parsed-literal::
-
- astar = alpha * (r/re - 1.d0)
- if erose_form = 0: erose = -Ec*(1+astar+a3*(astar**3)/(r/re))*exp(-astar)
- if erose_form = 1: erose = -Ec*(1+astar+(-attrac+repuls/r)*(astar**3))*exp(-astar)
- if erose_form = 2: erose = -Ec*(1 +astar + a3*(astar**3))*exp(-astar)
- a3 = repuls, astar < 0
- a3 = attrac, astar >= 0
-
-Most published MEAM parameter sets use the default values attrac=repulse=0.
-Setting repuls=attrac=delta corresponds to the form used in several
-recent published MEAM parameter sets, such as :ref:`(Valone) <Valone>`
-
-.. note::
-
- The default form of the erose expression in LAMMPS was corrected
- in March 2009. The current version is correct, but may show different
- behavior compared with earlier versions of lammps with the attrac
- and/or repuls parameters are non-zero. To obtain the previous default
- form, use erose_form = 1 (this form does not seem to appear in the
- literature). An alternative form (see e.g. :ref:`(Lee2) <Lee2>`) is
- available using erose_form = 2.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, where types I and J correspond to
-two different element types, mixing is performed by LAMMPS with
-user-specifiable parameters as described above. You never need to
-specify a pair_coeff command with I != J arguments for this style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This 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
-built and linked with LAMMPS. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style eam <pair_eam>`,
-:doc:`pair_style meam/spline <pair_meam_spline>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Baskes:
-
-
-
-**(Baskes)** Baskes, Phys Rev B, 46, 2727-2742 (1992).
-
-.. _Gullet:
-
-
-
-**(Gullet)** Gullet, Wagner, Slepoy, SANDIA Report 2003-8782 (2003).
-This report may be accessed on-line via `this link <sandreport_>`_.
-
-.. _sandreport: http://infoserve.sandia.gov/sand_doc/2003/038782.pdf
-
-
-
-.. _Lee:
-
-
-
-**(Lee)** Lee, Baskes, Phys. Rev. B, 62, 8564-8567 (2000).
-
-.. _Lee2:
-
-
-
-**(Lee2)** Lee, Baskes, Kim, Cho. Phys. Rev. B, 64, 184102 (2001).
-
-.. _Valone:
-
-
-
-**(Valone)** Valone, Baskes, Martin, Phys. Rev. B, 73, 214209 (2006).
-
-.. _Wang:
-
-
-
-**(Wang)** Wang, Van Hove, Ross, Baskes, J. Chem. Phys., 121, 5410 (2004).
-
-.. _ZBL:
-
-
-
-**(ZBL)** J.F. Ziegler, J.P. Biersack, U. Littmark, "Stopping and Ranges
-of Ions in Matter", Vol 1, 1985, Pergamon Press.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_meam_spline.txt b/doc/html/_sources/pair_meam_spline.txt
deleted file mode 100644
index 50164a9c1..000000000
--- a/doc/html/_sources/pair_meam_spline.txt
+++ /dev/null
@@ -1,167 +0,0 @@
-pair_style meam/spline
-======================
-
-pair_style meam/spline/omp
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style meam/spline
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style meam/spline
- pair_coeff * * Ti.meam.spline Ti
- pair_coeff * * Ti.meam.spline Ti Ti Ti
-
-Description
-"""""""""""
-
-The *meam/spline* style computes pairwise interactions for metals
-using a variant of modified embedded-atom method (MEAM) potentials
-:ref:`(Lenosky) <Lenosky>`. The total energy E is given by
-
-.. image:: Eqs/pair_meam_spline.jpg
- :align: center
-
-where rho_i is the density at atom I, theta_jik is the angle between
-atoms J, I, and K centered on atom I. The five functions Phi, U, rho,
-f, and g are represented by cubic splines.
-
-The cutoffs and the coefficients for these spline functions are listed
-in a parameter file which is specified by the
-:doc:`pair_coeff <pair_coeff>` command. Parameter files for different
-elements are included in the "potentials" directory of the LAMMPS
-distribution and have a ".meam.spline" file suffix. All of these
-files are parameterized in terms of LAMMPS :doc:`metal units <units>`.
-
-Note that unlike for other potentials, cutoffs for spline-based MEAM
-potentials are not set in the pair_style or pair_coeff command; they
-are specified in the potential files themselves.
-
-Unlike the EAM pair style, which retrieves the atomic mass from the
-potential file, the spline-based MEAM potentials do not include mass
-information; thus you need to use the :doc:`mass <mass>` command to
-specify it.
-
-Only a single pair_coeff command is used with the *meam/spline* style
-which specifies a 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 spline-based MEAM elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-As an example, imagine the Ti.meam.spline file has values for Ti. If
-your LAMMPS simulation has 3 atoms types and they are all to be
-treated with this potentials, you would use the following pair_coeff
-command:
-
-.. parsed-literal::
-
- pair_coeff * * Ti.meam.spline Ti Ti Ti
-
-The 1st 2 arguments must be * * so as to span all LAMMPS atom types.
-The three Ti arguments map LAMMPS atom types 1,2,3 to the Ti element
-in the potential file. If a mapping value is specified as NULL, the
-mapping is not performed. This can be used when a *meam/spline*
-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.
-
-.. note::
-
- The *meam/spline* style currently supports only single-element
- MEAM potentials. It may be extended for alloy systems in the future.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-The current version of this pair style does not support multiple
-element types or mixing. It has been designed for pure elements only.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-The *meam/spline* pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in an external
-potential parameter file. Thus, you need to re-specify the pair_style
-and pair_coeff commands in an input script that reads a restart file.
-
-The *meam/spline* pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. They do not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style requires the :doc:`newton <newton>` setting to be "on"
-for pair interactions.
-
-This pair style is only enabled if LAMMPS was built with the USER-MISC
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style meam <pair_meam>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Lenosky:
-
-
-
-**(Lenosky)** Lenosky, Sadigh, Alonso, Bulatov, de la Rubia, Kim, Voter,
-Kress, Modelling Simulation Materials Science Enginerring, 8, 825
-(2000).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_meam_sw_spline.txt b/doc/html/_sources/pair_meam_sw_spline.txt
deleted file mode 100644
index 07924182b..000000000
--- a/doc/html/_sources/pair_meam_sw_spline.txt
+++ /dev/null
@@ -1,165 +0,0 @@
-pair_style meam/sw/spline
-=========================
-
-pair_style meam/sw/spline/omp
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style meam/sw/spline
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style meam/sw/spline
- pair_coeff * * Ti.meam.sw.spline Ti
- pair_coeff * * Ti.meam.sw.spline Ti Ti Ti
-
-Description
-"""""""""""
-
-The *meam/sw/spline* style computes pairwise interactions for metals
-using a variant of modified embedded-atom method (MEAM) potentials
-:ref:`(Lenosky) <Lenosky>` with an additional Stillinger-Weber (SW) term
-:ref:`(Stillinger) <Stillinger>` in the energy. This form of the potential
-was first proposed by Nicklas, Fellinger, and Park
-:ref:`(Nicklas) <Nicklas>`. We refer to it as MEAM+SW. The total energy E
-is given by
-
-.. image:: Eqs/pair_meam_sw_spline.jpg
- :align: center
-
-where rho_I is the density at atom I, theta_JIK is the angle between
-atoms J, I, and K centered on atom I. The seven functions
-Phi, F, G, U, rho, f, and g are represented by cubic splines.
-
-The cutoffs and the coefficients for these spline functions are listed
-in a parameter file which is specified by the
-:doc:`pair_coeff <pair_coeff>` command. Parameter files for different
-elements are included in the "potentials" directory of the LAMMPS
-distribution and have a ".meam.sw.spline" file suffix. All of these
-files are parameterized in terms of LAMMPS :doc:`metal units <units>`.
-
-Note that unlike for other potentials, cutoffs for spline-based
-MEAM+SW potentials are not set in the pair_style or pair_coeff
-command; they are specified in the potential files themselves.
-
-Unlike the EAM pair style, which retrieves the atomic mass from the
-potential file, the spline-based MEAM+SW potentials do not include
-mass information; thus you need to use the :doc:`mass <mass>` command to
-specify it.
-
-Only a single pair_coeff command is used with the meam/sw/spline style
-which specifies a 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 spline-based MEAM+SW elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-As an example, imagine the Ti.meam.sw.spline file has values for Ti.
-If your LAMMPS simulation has 3 atoms types and they are all to be
-treated with this potential, you would use the following pair_coeff
-command:
-
-pair_coeff * * Ti.meam.sw.spline Ti Ti Ti
-
-The 1st 2 arguments must be * * so as to span all LAMMPS atom types.
-The three Ti arguments map LAMMPS atom types 1,2,3 to the Ti element
-in the potential file. If a mapping value is specified as NULL, the
-mapping is not performed. This can be used when a *meam/sw/spline*
-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.
-
-.. note::
-
- The *meam/sw/spline* style currently supports only
- single-element MEAM+SW potentials. It may be extended for alloy
- systems in the future.
-
-Example input scripts that use this pair style are provided
-in the examples/USER/misc/meam_sw_spline directory.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-The pair style does not support multiple element types or mixing.
-It has been designed for pure elements only.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-The *meam/sw/spline* pair style does not write its information to
-:doc:`binary restart files <restart>`, since it is stored in an external
-potential parameter file. Thus, you need to re-specify the pair_style
-and pair_coeff commands in an input script that reads a restart file.
-
-The *meam/sw/spline* pair style can only be used via the *pair*
-keyword of the :doc:`run_style respa <run_style>` command. They do not
-support the *inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style requires the :doc:`newton <newton>` setting to be "on"
-for pair interactions.
-
-This pair style is only enabled if LAMMPS was built with the USER-MISC package.
-See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style meam <pair_meam>`,
-:doc:`pair_style meam/spline <pair_meam_spline>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Lenosky:
-
-
-
-**(Lenosky)** Lenosky, Sadigh, Alonso, Bulatov, de la Rubia, Kim, Voter,
-Kress, Modell. Simul. Mater. Sci. Eng. 8, 825 (2000).
-
-.. _Stillinger:
-
-
-
-**(Stillinger)** Stillinger, Weber, Phys. Rev. B 31, 5262 (1985).
-
-.. _Nicklas:
-
-
-
-**(Nicklas)**
-The spline-based MEAM+SW format was first devised and used to develop
-potentials for bcc transition metals by Jeremy Nicklas, Michael Fellinger,
-and Hyoungki Park at The Ohio State University.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_mgpt.txt b/doc/html/_sources/pair_mgpt.txt
deleted file mode 100644
index 5bbe7f088..000000000
--- a/doc/html/_sources/pair_mgpt.txt
+++ /dev/null
@@ -1,252 +0,0 @@
-.. index:: pair_style mgpt
-
-pair_style mgpt command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style mgpt
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style mgpt
- pair_coeff * * Ta6.8x.mgpt.parmin Ta6.8x.mgpt.potin Omega
- cp ~/lammps/potentials/Ta6.8x.mgpt.parmin parmin
- cp ~/lammps/potentials/Ta6.8x.mgpt.potin potin
- pair_coeff * * parmin potin Omega volpress yes nbody 1234 precision double
- pair_coeff * * parmin potin Omega volpress yes nbody 12
-
-Description
-"""""""""""
-
-Within DFT quantum mechanics, generalized pseudopotential theory (GPT)
-(:ref:`Moriarty1 <Moriarty1>`) provides a first-principles approach to
-multi-ion interatomic potentials in d-band transition metals, with a
-volume-dependent, real-space total-energy functional for the N-ion
-elemental bulk material in the form
-
-.. image:: Eqs/pair_mgpt.jpg
- :align: center
-
-where the prime on each summation sign indicates the exclusion of all
-self-interaction terms from the summation. The leading volume term
-E_vol as well as the two-ion central-force pair potential v_2 and the
-three- and four-ion angular-force potentials, v_3 and v_4, depend
-explicitly on the atomic volume Omega, but are structure independent
-and transferable to all bulk ion configurations, either ordered or
-disordered, and with of without the presence of point and line
-defects. The simplified model GPT or MGPT (:ref:`Moriarty2 <Moriarty2>`,
-:ref:`Moriarty3 <Moriarty3>`), which retains the form of E_tot and permits
-more efficient large-scale atomistic simulations, derives from the GPT
-through a series of systematic approximations applied to E_vol and the
-potentials v_n that are valid for mid-period transition metals with
-nearly half-filled d bands.
-
-Both analytic (:ref:`Moriarty2 <Moriarty2>`) and matrix
-(:ref:`Moriarty3 <Moriarty3>`) representations of MGPT have been developed.
-In the more general matrix representation, which can also be applied
-to f-band actinide metals and permits both canonical and non-canonical
-d/f bands, the multi-ion potentials are evaluated on the fly during a
-simulation through d- or f-state matrix multiplication, and the forces
-that move the ions are determined analytically. Fast matrix-MGPT
-algorithms have been developed independently by Glosli
-(:ref:`Glosli <Glosli>`, :ref:`Moriarty3 <Moriarty3>`) and by Oppelstrup
-(:ref:`Oppelstrup <Oppelstrup>`)
-
-The *mgpt* pair style calculates forces, energies, and the total
-energy per atom, E_tot/N, using the Oppelstrup matrix-MGPT algorithm.
-Input potential and control data are entered through the
-:doc:`pair_coeff <pair_coeff>` command. Each material treated requires
-input parmin and potin potential files, as shown in the above
-examples, as well as specification by the user of the initial atomic
-volume Omega through pair_coeff. At the beginning of a time step in
-any simulation, the total volume of the simulation cell V should
-always be equal to Omega*N, where N is the number of metal ions
-present, taking into account the presence of any vacancies and/or
-interstitials in the case of a solid. In a constant-volume
-simulation, which is the normal mode of operation for the *mgpt* pair
-style, Omega, V and N all remain constant throughout the simulation
-and thus are equal to their initial values. In a constant-stress
-simulation, the cell volume V will change (slowly) as the simulation
-proceeds. After each time step, the atomic volume should be updated
-by the code as Omega = V/N. In addition, the volume term E_vol and
-the potentials v_2, v_3 and v_4 have to be removed at the end of the
-time step, and then respecified at the new value of Omega. In all
-smulations, Omega must remain within the defined volume range for
-E_vol and the potentials for the given material.
-
-The default option volpress yes in the :doc:`pair_coeff <pair_coeff>`
-command includes all volume derivatives of E_tot required to calculate
-the stress tensor and pressure correctly. The option volpress no
-disregards the pressure contribution resulting from the volume term
-E_vol, and can be used for testing and analysis purposes. The
-additional optional variable nbody controls the specific terms in
-E_tot that are calculated. The default option and the normal option
-for mid-period transition and actinide metals is nbody 1234 for which
-all four terms in E_tot are retained. The option nbody 12, for
-example, retains only the volume term and the two-ion pair potential
-term and can be used for GPT series-end transition metals that can be
-well described without v_3 and v_4. The nbody option can also be used
-to test or analyze the contribution of any of the four terms in E_tot
-to a given calculated property.
-
-The *mgpt* pair style makes extensive use of matrix algebra and
-includes optimized kernels for the BlueGene/Q architecture and the
-Intel/AMD (x86) architectures. When compiled with the appropriate
-compiler and compiler switches (-msse3 on x86, and using the IBM XL
-compiler on BG/Q), these optimized routines are used automatically.
-For BG/Q machines, building with the default Makefile for that
-architecture (e.g., "make bgq") should enable the optimized algebra
-routines. For x-86 machines, there is a provided Makefile.mgptfast
-which enables the fast algebra routines, i.e. build LAMMPS with "make
-mgptfast". The user will be informed in the output files of the
-matrix kernels in use. To further improve speed, on x86 the option
-precision single can be added to the :doc:`pair_coeff <pair_coeff>`
-command line, which improves speed (up to a factor of two) at the cost
-of doing matrix calculations with 7 digit precision instead of the
-default 16. For consistency the default option can be specified
-explicitly by the option precision double.
-
-All remaining potential and control data are contained with the parmin
-and potin files, including cutoffs, atomic mass, and other basic MGPT
-variables. Specific MGPT potential data for the transition metals
-tantalum (Ta4 and Ta6.8x potentials), molybdenum (Mo5.2 potentials),
-and vanadium (V6.1 potentials) are contained in the LAMMPS potentials
-directory. The stored files are, respectively, Ta4.mgpt.parmin,
-Ta4.mgpt.potin, Ta6.8x.mgpt.parmin, Ta6.8x.mgpt.potin,
-Mo5.2.mgpt.parmin, Mo5.2.mgpt.potin, V6.1.mgpt.parmin, and
-V6.1.mgpt.potin . Useful corresponding informational "README" files
-on the Ta4, Ta6.8x, Mo5.2 and V6.1 potentials are also included in the
-potentials directory. These latter files indicate the volume mesh and
-range for each potential and give appropriate references for the
-potentials. It is expected that MGPT potentials for additional
-materials will be added over time.
-
-Useful example MGPT scripts are given in the examples/USER/mgpt
-directory. These scripts show the necessary steps to perform
-constant-volume calculations and simulations. It is strongly
-recommended that the user work through and understand these examples
-before proceeding to more complex simulations.
-
-.. note::
-
- For good performance, LAMMPS should be built with the compiler
- flags "-O3 -msse3 -funroll-loops" when including this pair style. The
- src/MAKE/OPTIONS/Makefile.mgptfast is an example machine Makefile with
- these options included as part of a standard MPI build. Note that it
- as provided, it will build with whatever low-level compiler (g++, icc,
- etc) is the default for your MPI installation.
-
-
-----------
-
-
-**Mixing, shift, table tail correction, restart**\ :
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-mix, shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-needs 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the USER-MGPT package and is only enabled
-if LAMMPS is built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The MGPT potentials require the :doc:`newtion <newton>` setting to be
-"on" for pair style interactions.
-
-The stored parmin and potin potential files provided with LAMMPS in
-the "potentials" directory are written in Rydberg atomic units, with
-energies in Rydbergs and distances in Bohr radii. The *mgpt* pair
-style converts Rydbergs to Hartrees to make the potential files
-compatible with LAMMPS electron :doc:`units <units>`.
-
-The form of E_tot used in the *mgpt* pair style is only appropriate
-for elemental bulk solids and liquids. This includes solids with
-point and extended defects such as vacancies, interstitials, grain
-boundaries and dislocations. Alloys and free surfaces, however,
-require significant modifications, which are not included in the
-*mgpt* pair style. Likewise, the *hybrid* pair style is not allowed,
-where MGPT would be used for some atoms but not for others.
-
-Electron-thermal effects are not included in the standard MGPT
-potentials provided in the "potentials" directory, where the
-potentials have been constructed at zero electron temperature.
-Physically, electron-thermal effects may be important in 3d (e.g., V)
-and 4d (e.g., Mo) transition metals at high temperatures near melt and
-above. It is expected that temperature-dependent MGPT potentials for
-such cases will be added over time.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-Default
-"""""""
-
-The options defaults for the :doc:`pair_coeff <pair_coeff>` command are
-volpress yes, nbody 1234, and precision double.
-
-
-----------
-
-
-.. _Moriarty1:
-
-
-
-**(Moriarty1)** Moriarty, Physical Review B, 38, 3199 (1988).
-
-.. _Moriarty2:
-
-
-
-**(Moriarty2)** Moriarty, Physical Review B, 42, 1609 (1990).
-Moriarty, Physical Review B 49, 12431 (1994).
-
-.. _Moriarty3:
-
-
-
-**(Moriarty3)** Moriarty, Benedict, Glosli, Hood, Orlikowski, Patel, Soderlind, Streitz, Tang, and Yang,
-Journal of Materials Research, 21, 563 (2006).
-
-.. _Glosli:
-
-
-
-**(Glosli)** Glosli, unpublished, 2005.
-Streitz, Glosli, Patel, Chan, Yates, de Supinski, Sexton and Gunnels, Journal of Physics: Conference
-Series, 46, 254 (2006).
-
-.. _Oppelstrup:
-
-
-
-**(Oppelstrup)** Oppelstrup, unpublished, 2015.
-Oppelstrup and Moriarty, to be published.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_mie.txt b/doc/html/_sources/pair_mie.txt
deleted file mode 100644
index e50fa9bd5..000000000
--- a/doc/html/_sources/pair_mie.txt
+++ /dev/null
@@ -1,124 +0,0 @@
-.. index:: pair_style mie/cut
-
-pair_style mie/cut command
-==========================
-
-pair_style mie/cut/gpu command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style mie/cut cutoff
-
-* cutoff = global cutoff for mie/cut interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style mie/cut 10.0
- pair_coeff 1 1 0.72 3.40 23.00 6.66
- pair_coeff 2 2 0.30 3.55 12.65 6.00
- pair_coeff 1 2 0.46 3.32 16.90 6.31
-
-Description
-"""""""""""
-
-The *mie/cut* style computes the Mie potential, given by
-
-.. image:: Eqs/pair_mie.jpg
- :align: center
-
-Rc is the cutoff and C is a function that depends on the repulsive and
-attractive exponents, given by:
-
-.. image:: Eqs/pair_mie2.jpg
- :align: center
-
-Note that for 12/6 exponents, C is equal to 4 and the formula is the
-same as the standard Lennard-Jones potential.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* epsilon (energy units)
-* sigma (distance units)
-* gammaR
-* gammaA
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global
-cutoff specified in the pair_style command is used.
-
-
-----------
-
-
-**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 all of the mie/cut pair styles can be mixed.
-If not explicity defined, both the repulsive and attractive gamma
-exponents for different atoms will be calculated following the same
-mixing rule defined for distances. The default mix value is
-*geometric*\ . See the "pair_modify" command for details.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the pair interaction.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` tail
-option for adding a long-range tail correction to the energy and
-pressure of the pair interaction.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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 supports the use of the *inner*\ , *middle*\ , and *outer*
-keywords of the :doc:`run_style respa <run_style>` command, meaning the
-pairwise forces can be partitioned by distance at different levels of
-the rRESPA hierarchy. See the :doc:`run_style <run_style>` command for
-details.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Mie:
-
-
-
-**(Mie)** G. Mie, Ann Phys, 316, 657 (1903).
-
-.. _Avendano:
-
-
-
-**(Avendano)** C. Avendano, T. Lafitte, A. Galindo, C. S. Adjiman,
-G. Jackson, E. Muller, J Phys Chem B, 115, 11154 (2011).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_modify.txt b/doc/html/_sources/pair_modify.txt
deleted file mode 100644
index 7a01f9d57..000000000
--- a/doc/html/_sources/pair_modify.txt
+++ /dev/null
@@ -1,289 +0,0 @@
-.. index:: pair_modify
-
-pair_modify command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_modify keyword values ...
-
-* one or more keyword/value pairs may be listed
-* keyword = *pair* or *shift* or *mix* or *table* or *table/disp* or *tabinner* or *tabinner/disp* or *tail* or *compute*
-.. parsed-literal::
-
- *pair* values = sub-style N *special* which wt1 wt2 wt3
- sub-style = sub-style of :doc:`pair hybrid <pair_hybrid>`
- N = which instance of sub-style (only if sub-style is used multiple times)
- *special* which wt1 wt2 wt3 = override *special_bonds* settings (optional)
- which = *lj/coul* or *lj* or *coul*
- w1,w2,w3 = 1-2, 1-3, and 1-4 weights from 0.0 to 1.0 inclusive
- *mix* value = *geometric* or *arithmetic* or *sixthpower*
- *shift* value = *yes* or *no*
- *table* value = N
- 2^N = # of values in table
- *table/disp* value = N
- 2^N = # of values in table
- *tabinner* value = cutoff
- cutoff = inner cutoff at which to begin table (distance units)
- *tabinner/disp* value = cutoff
- cutoff = inner cutoff at which to begin table (distance units)
- *tail* value = *yes* or *no*
- *compute* value = *yes* or *no*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_modify shift yes mix geometric
- pair_modify tail yes
- pair_modify table 12
- pair_modify pair lj/cut compute no
- pair_modify pair lj/cut/coul/long 1 special lj/coul 0.0 0.0 0.0
-
-Description
-"""""""""""
-
-Modify the parameters of the currently defined pair style. Not all
-parameters are relevant to all pair styles.
-
-If used, the *pair* keyword must appear first in the list of keywords.
-It can only be used with the :doc:`hybrid and hybrid/overlay <pair_hybrid>` pair styles. It means that all the
-following parameters will only be modified for the specified
-sub-style. If the sub-style is defined multiple times, then an
-additional numeric argument *N* must also be specified, which is a
-number from 1 to M where M is the number of times the sub-style was
-listed in the :doc:`pair_style hybrid <pair_hybrid>` command. The extra
-number indicates which instance of the sub-style the remaining
-keywords will be applied to. Note that if the *pair* keyword is not
-used, and the pair style is *hybrid* or *hybrid/overlay*\ , then all the
-specified keywords will be applied to all sub-styles.
-
-The *special* keyword can only be used in conjunction with the *pair*
-keyword and must directly follow it. It allows to override the
-:doc:`special_bonds <special_bonds>` settings for the specified sub-style.
-More details are given below.
-
-The *mix* keyword affects pair coefficients for interactions between
-atoms of type I and J, when I != J and the coefficients are not
-explicitly set in the input script. Note that coefficients for I = J
-must be set explicitly, either in the input script via the
-"pair_coeff" command or in the "Pair Coeffs" section of the :doc:`data file <read_data>`. For some pair styles it is not necessary to
-specify coefficients when I != J, since a "mixing" rule will create
-them from the I,I and J,J settings. The pair_modify *mix* value
-determines what formulas are used to compute the mixed coefficients.
-In each case, the cutoff distance is mixed the same way as sigma.
-
-Note that not all pair styles support mixing. Also, some mix options
-are not available for certain pair styles. See the doc page for
-individual pair styles for those restrictions. Note also that the
-:doc:`pair_coeff <pair_coeff>` command also can be to directly set
-coefficients for a specific I != J pairing, in which case no mixing is
-performed.
-
-mix *geometric*
-
-.. parsed-literal::
-
- epsilon_ij = sqrt(epsilon_i * epsilon_j)
- sigma_ij = sqrt(sigma_i * sigma_j)
-
-mix *arithmetic*
-
-.. parsed-literal::
-
- epsilon_ij = sqrt(epsilon_i * epsilon_j)
- sigma_ij = (sigma_i + sigma_j) / 2
-
-mix *sixthpower*
-
-.. parsed-literal::
-
- epsilon_ij = (2 * sqrt(epsilon_i*epsilon_j) * sigma_i^3 * sigma_j^3) /
- (sigma_i^6 + sigma_j^6)
- sigma_ij = ((sigma_i**6 + sigma_j**6) / 2) ^ (1/6)
-
-The *shift* keyword determines whether a Lennard-Jones potential is
-shifted at its cutoff to 0.0. If so, this adds an energy term to each
-pairwise interaction which will be included in the thermodynamic
-output, but does not affect pair forces or atom trajectories. See the
-doc page for individual pair styles to see which ones support this
-option.
-
-The *table* and *table/disp* keywords apply to pair styles with a
-long-range Coulombic term or long-range dispersion term respectively;
-see the doc page for individual styles to see which potentials support
-these options. If N is non-zero, a table of length 2^N is
-pre-computed for forces and energies, which can shrink their
-computational cost by up to a factor of 2. The table is indexed via a
-bit-mapping technique :ref:`(Wolff) <Wolff>` and a linear interpolation is
-performed between adjacent table values. In our experiments with
-different table styles (lookup, linear, spline), this method typically
-gave the best performance in terms of speed and accuracy.
-
-The choice of table length is a tradeoff in accuracy versus speed. A
-larger N yields more accurate force computations, but requires more
-memory which can slow down the computation due to cache misses. A
-reasonable value of N is between 8 and 16. The default value of 12
-(table of length 4096) gives approximately the same accuracy as the
-no-table (N = 0) option. For N = 0, forces and energies are computed
-directly, using a polynomial fit for the needed erfc() function
-evaluation, which is what earlier versions of LAMMPS did. Values
-greater than 16 typically slow down the simulation and will not
-improve accuracy; values from 1 to 8 give unreliable results.
-
-The *tabinner* and *tabinner/disp* keywords set an inner cutoff above
-which the pairwise computation is done by table lookup (if tables are
-invoked), for the corresponding Coulombic and dispersion tables
-discussed with the *table* and *table/disp* keywords. The smaller the
-cutoff is set, the less accurate the table becomes (for a given number
-of table values), which can require use of larger tables. The default
-cutoff value is sqrt(2.0) distance units which means nearly all
-pairwise interactions are computed via table lookup for simulations
-with "real" units, but some close pairs may be computed directly
-(non-table) for simulations with "lj" units.
-
-When the *tail* keyword is set to *yes*\ , certain pair styles will add
-a long-range VanderWaals tail "correction" to the energy and pressure.
-These corrections are bookkeeping terms which do not affect dynamics,
-unless a constant-pressure simulation is being performed. See the doc
-page for individual styles to see which support this option. These
-corrections are included in the calculation and printing of
-thermodynamic quantities (see the :doc:`thermo_style <thermo_style>`
-command). Their effect will also be included in constant NPT or NPH
-simulations where the pressure influences the simulation box
-dimensions (e.g. the :doc:`fix npt <fix_nh>` and :doc:`fix nph <fix_nh>`
-commands). The formulas used for the long-range corrections come from
-equation 5 of :ref:`(Sun) <Sun>`.
-
-.. note::
-
- The tail correction terms are computed at the beginning of each
- run, using the current atom counts of each atom type. If atoms are
- deleted (or lost) or created during a simulation, e.g. via the :doc:`fix gcmc <fix_gcmc>` command, the correction factors are not
- re-computed. If you expect the counts to change dramatically, you can
- break a run into a series of shorter runs so that the correction
- factors are re-computed more frequently.
-
-Several additional assumptions are inherent in using tail corrections,
-including the following:
-
-* The simulated system is a 3d bulk homogeneous liquid. This option
- should not be used for systems that are non-liquid, 2d, have a slab
- geometry (only 2d periodic), or inhomogeneous.
-* G(r), the radial distribution function (rdf), is unity beyond the
- cutoff, so a fairly large cutoff should be used (i.e. 2.5 sigma for an
- LJ fluid), and it is probably a good idea to verify this assumption by
- checking the rdf. The rdf is not exactly unity beyond the cutoff for
- each pair of interaction types, so the tail correction is necessarily
- an approximation.
-The tail corrections are computed at the beginning of each simulation
-run. If the number of atoms changes during the run, e.g. due to atoms
-leaving the simulation domain, or use of the :doc:`fix gcmc <fix_gcmc>`
-command, then the corrections are not updates to relect the changed
-atom count. If this is a large effect in your simulation, you should
-break the long run into several short runs, so that the correction
-factors are re-computed multiple times.
-
-* Thermophysical properties obtained from calculations with this option
- enabled will not be thermodynamically consistent with the truncated
- force-field that was used. In other words, atoms do not feel any LJ
- pair interactions beyond the cutoff, but the energy and pressure
- reported by the simulation include an estimated contribution from
- those interactions.
-The *compute* keyword allows pairwise computations to be turned off,
-even though a :doc:`pair_style <pair_style>` is defined. This is not
-useful for running a real simulation, but can be useful for debugging
-purposes or for performing a :doc:`rerun <rerun>` simulation, when you
-only wish to compute partial forces that do not include the pairwise
-contribution.
-
-Two examples are as follows. First, this option allows you to perform
-a simulation with :doc:`pair_style hybrid <pair_hybrid>` with only a
-subset of the hybrid sub-styles enabled. Second, this option allows
-you to perform a simulation with only long-range interactions but no
-short-range pairwise interactions. Doing this by simply not defining
-a pair style will not work, because the
-:doc:`kspace_style <kspace_style>` command requires a Kspace-compatible
-pair style be defined.
-
-
-----------
-
-
-The *special* keyword allows to override the 1-2, 1-3, and 1-4
-exclusion settings for individual sub-styles of a
-:doc:`hybrid pair style <pair_hybrid>`. It requires 4 arguments similar
-to the :doc:`special_bonds <special_bonds>` command, *which* and
-wt1,wt2,wt3. The *which* argument can be *lj* to change the
-Lennard-Jones settings, *coul* to change the Coulombic settings,
-or *lj/coul* to change both to the same set of 3 values. The wt1,wt2,wt3
-values are numeric weights from 0.0 to 1.0 inclusive, for the 1-2,
-1-3, and 1-4 bond topology neighbors, respectively. The *special*
-keyword can only be used in conjunction with the *pair* keyword
-and has to directly follow it.
-
-.. note::
-
- The global settings specified by the
- :doc:`special_bonds <special_bonds>` command affect the construction of
- neighbor lists. Weights of 0.0 (for 1-2, 1-3, or 1-4 neighbors)
- exclude those pairs from the neighbor list entirely. Weights of 1.0
- store the neighbor with no weighting applied. Thus only global values
- different from exactly 0.0 or 1.0 can be overridden and an error is
- generated if the requested setting is not compatible with the global
- setting. Substituting 1.0e-10 for 0.0 and 0.9999999999 for 1.0 is
- usually a sufficient workaround in this case without causing a
- significant error.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-You cannot use *shift* yes with *tail* yes, since those are
-conflicting options. You cannot use *tail* yes with 2d simulations.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style <pair_style>`, :doc:`pair_coeff <pair_coeff>`,
-:doc:`thermo_style <thermo_style>`
-
-Default
-"""""""
-
-The option defaults are mix = geometric, shift = no, table = 12,
-tabinner = sqrt(2.0), tail = no, and compute = yes.
-
-Note that some pair styles perform mixing, but only a certain style of
-mixing. See the doc pages for individual pair styles for details.
-
-
-----------
-
-
-.. _Wolff:
-
-
-
-**(Wolff)** Wolff and Rudd, Comp Phys Comm, 120, 200-32 (1999).
-
-.. _Sun:
-
-
-
-**(Sun)** Sun, J Phys Chem B, 102, 7338-7364 (1998).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_morse.txt b/doc/html/_sources/pair_morse.txt
deleted file mode 100644
index 02afa218c..000000000
--- a/doc/html/_sources/pair_morse.txt
+++ /dev/null
@@ -1,194 +0,0 @@
-.. index:: pair_style morse
-
-pair_style morse command
-========================
-
-pair_style morse/gpu command
-============================
-
-pair_style morse/omp command
-============================
-
-pair_style morse/opt command
-============================
-
-pair_style morse/smooth/linear command
-======================================
-
-pair_style morse/smooth/linear/omp command
-==========================================
-
-pair_style morse/soft command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *morse* or *morse/smooth/linear* or *morse/soft*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *morse* args = cutoff
- cutoff = global cutoff for Morse interactions (distance units)
- *morse/smooth/linear* args = cutoff
- cutoff = global cutoff for Morse interactions (distance units)
- *morse/soft* args = n lf cutoff
- n = soft-core parameter
- lf = transformation range is lf < lambda < 1
- cutoff = global cutoff for Morse interactions (distance units)
-
-Examples
-""""""""
-
-pair_style morse 2.5
-pair_style morse/smooth/linear 2.5
-pair_coeff * * 100.0 2.0 1.5
-pair_coeff 1 1 100.0 2.0 1.5 3.0
-
-.. parsed-literal::
-
- pair_style morse/soft 4 0.9 10.0
- pair_coeff * * 100.0 2.0 1.5 1.0
- pair_coeff 1 1 100.0 2.0 1.5 1.0 3.0
-
-Description
-"""""""""""
-
-Style *morse* computes pairwise interactions with the formula
-
-.. image:: Eqs/pair_morse.jpg
- :align: center
-
-Rc is the cutoff.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* D0 (energy units)
-* alpha (1/distance units)
-* r0 (distance units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global morse
-cutoff is used.
-
-
-----------
-
-
-The *morse/smooth/linear* variant is similar to the lj/smooth/linear
-variant in that it adds to the potential a shift and a linear term
-so that both, potential energy and force, go to zero at the cut-off:
-
-.. image:: Eqs/pair_morse_smooth_linear.jpg
- :align: center
-
-The syntax of the pair_style and pair_coeff commands are the same for
-the *morse* and *morse/smooth/linear* styles.
-
-
-----------
-
-
-The *morse/soft* variant is similar to the *lj/cut/soft* pair style
-in that it modifies the potential at short range to have a soft core.
-This helps to avoid singularities during free energy calculation in
-which sites are created or anihilated. The formula differs from that
-of *lj/cut/soft*\ , and is instead given by:
-
-.. image:: Eqs/pair_morse_soft.jpg
- :align: center
-
-The *morse/soft* style requires the following pair coefficients:
-
-* D0 (energy units)
-* alpha (1/distance units)
-* r0 (distance units)
-* lamda (unitless, between 0.0 and 1.0)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global morse
-cutoff is used.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-None of these pair styles support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-All of these pair styles support the :doc:`pair_modify <pair_modify>`
-shift option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table options is not relevant for
-the Morse pair styles.
-
-None of these pair styles support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-All of these pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do not need
-to be specified in an input script that reads a restart file.
-
-These pair styles can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. They do not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The *morse/smooth/linear* pair style is only enabled if LAMMPS was
-built with the USER-MISC package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The *morse/soft* pair style is only enabled if LAMMPS was built with
-the USER-FEP package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_multi_lucy.txt b/doc/html/_sources/pair_multi_lucy.txt
deleted file mode 100644
index c4132d4f1..000000000
--- a/doc/html/_sources/pair_multi_lucy.txt
+++ /dev/null
@@ -1,233 +0,0 @@
-.. index:: pair_style multi/lucy
-
-pair_style multi/lucy command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style multi/lucy style N keyword ...
-
-* style = *lookup* or *linear* = method of interpolation
-* N = use N values in *lookup*\ , *linear* tables
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style multi/lucy linear 1000
- pair_coeff * * multibody.table ENTRY1 7.0
-
-Description
-"""""""""""
-
-Style *multi/lucy* computes a density-dependent force following from
-the many-body form described in :ref:`(Moore) <Moore>` and
-:ref:`(Warren) <Warren>` as
-
-.. image:: Eqs/pair_multi_lucy.jpg
- :align: center
-
-which consists of a density-dependent function, A(rho), and a
-radial-dependent weight function, omegaDD(rij). The radial-dependent
-weight function, omegaDD(rij), is taken as the Lucy function:
-
-.. image:: Eqs/pair_multi_lucy2.jpg
- :align: center
-
-The density-dependent energy for a given particle is given by:
-
-.. image:: Eqs/pair_multi_lucy_energy.jpg
- :align: center
-
-See the supporting information of :ref:`(Brennan) <Brennan>` or the
-publication by :ref:`(Moore) <Moore>` for more details on the functional
-form.
-
-An interpolation table is used to evaluate the density-dependent
-energy (Integral(A(rho)drho) and force (A(rho)). Note that the
-pre-factor to the energy is computed after the interpolation, thus the
-Integral(A(rho)drho will have units of energy / length^4.
-
-The interpolation table is created as a pre-computation by fitting
-cubic splines to the file values and interpolating the
-density-dependent energy and force at each of *N* densities. During a
-simulation, the tables are used to interpolate the density-dependent
-energy and force as needed for each pair of particles separated by a
-distance *R*\ . The interpolation is done in one of 2 styles: *lookup*
-and *linear*\ .
-
-For the *lookup* style, the density is used to find the nearest table
-entry, which is the density-dependent energy and force.
-
-For the *linear* style, the density is used to find the 2 surrounding
-table values from which the density-dependent energy and force are
-computed by linear interpolation.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above.
-
-* filename
-* keyword
-* cutoff (distance units)
-
-The filename specifies a file containing the tabulated
-density-dependent energy and force. The keyword specifies a section
-of the file. The cutoff is an optional coefficient. If not
-specified, the outer cutoff in the table itself (see below) will be
-used to build an interpolation table that extend to the largest
-tabulated distance. If specified, only file values up to the cutoff
-are used to create the interpolation table. The format of this file
-is described below.
-
-
-----------
-
-
-The format of a tabulated file is a series of one or more sections,
-defined as follows (without the parenthesized comments):
-
-.. parsed-literal::
-
- # Density-dependent function (one or more comment or blank lines)
-
-.. parsed-literal::
-
- DD-FUNCTION (keyword is first text on line)
- N 500 R 1.0 10.0 (N, R, RSQ parameters)
- (blank)
- 1 1.0 25.5 102.34 (index, density, energy/r^4, force)
- 2 1.02 23.4 98.5
- ...
- 500 10.0 0.001 0.003
-
-A section begins with a non-blank line whose 1st character is not a
-"#"; blank lines or lines starting with "#" can be used as comments
-between sections. The first line begins with a keyword which
-identifies the section. The line can contain additional text, but the
-initial text must match the argument specified in the pair_coeff
-command. The next line lists (in any order) one or more parameters
-for the table. Each parameter is a keyword followed by one or more
-numeric values.
-
-The parameter "N" is required and its value is the number of table
-entries that follow. Note that this may be different than the *N*
-specified in the :doc:`pair_style multi/lucy <pair_multi_lucy>` command.
-Let Ntable = *N* in the pair_style command, and Nfile = "N" in the
-tabulated file. What LAMMPS does is a preliminary interpolation by
-creating splines using the Nfile tabulated values as nodal points. It
-uses these to interpolate the density-dependent energy and force at
-Ntable different points. The resulting tables of length Ntable are
-then used as described above, when computing the density-dependent
-energy and force. This means that if you want the interpolation
-tables of length Ntable to match exactly what is in the tabulated file
-(with effectively no preliminary interpolation), you should set Ntable
-= Nfile, and use the "RSQ" parameter. This is because the internal
-table abscissa is always RSQ (separation distance squared), for
-efficient lookup.
-
-All other parameters are optional. If "R" or "RSQ" does
-not appear, then the distances in each line of the table are used
-as-is to perform spline interpolation. In this case, the table values
-can be spaced in *density* uniformly or however you wish to position table
-values in regions of large gradients.
-
-If used, the parameters "R" or "RSQ" are followed by 2 values *rlo*
-and *rhi*\ . If specified, the density associated with each density-dependent
-energy and force value is computed from these 2 values (at high accuracy), rather
-than using the (low-accuracy) value listed in each line of the table.
-The density values in the table file are ignored in this case.
-For "R", distances uniformly spaced between *rlo* and *rhi* are
-computed; for "RSQ", squared distances uniformly spaced between
-*rlo*rlo* and *rhi*rhi* are computed.
-
-.. note::
-
- If you use "R" or "RSQ", the tabulated distance values in the
- file are effectively ignored, and replaced by new values as described
- in the previous paragraph. If the density value in the table is not
- very close to the new value (i.e. round-off difference), then you will
- be assigning density-dependent energy and force values to a different density,
- which is probably not what you want. LAMMPS will warn if this is occurring.
-
-Following a blank line, the next N lines list the tabulated values.
-On each line, the 1st value is the index from 1 to N, the 2nd value is
-r (in density units), the 3rd value is the density-dependent function value
-(in energy units / length^4), and the 4th is the force (in force units). The
-density values must increase from one line to the next.
-
-Note that one file can contain many sections, each with a tabulated
-potential. LAMMPS reads the file section by section until it finds
-one that matches the specified keyword.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-The :doc:`pair_modify <pair_modify>` shift, table, and tail options are
-not relevant for this pair style.
-
-This pair style writes the settings for the "pair_style multi/lucy" command
-to :doc:`binary restart files <restart>`, so a pair_style command does
-not need to specified in an input script that reads a restart file.
-However, the coefficient information is not stored in the restart
-file, since it is tabulated in the potential files. Thus, pair_coeff
-commands do need to be specified in the restart input script.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-DPD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Warren:
-
-
-
-**(Warren)** Warren, Phys Rev E, 68, 066702 (2003).
-
-.. _Brennan:
-
-
-
-**(Brennan)** Brennan, J Chem Phys Lett, 5, 2144-2149 (2014).
-
-.. _Moore:
-
-
-
-**(Moore)** Moore, J Chem Phys, 144, 104501 (2016).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_multi_lucy_rx.txt b/doc/html/_sources/pair_multi_lucy_rx.txt
deleted file mode 100644
index 23f67d0bc..000000000
--- a/doc/html/_sources/pair_multi_lucy_rx.txt
+++ /dev/null
@@ -1,254 +0,0 @@
-.. index:: pair_style multi/lucy/rx
-
-pair_style multi/lucy/rx command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style multi/lucy/rx style N keyword ...
-
-* style = *lookup* or *linear* = method of interpolation
-* N = use N values in *lookup*\ , *linear* tables
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style multi/lucy/rx linear 1000
- pair_coeff * * multibody.table ENTRY1 h2o h2o 7.0
- pair_coeff * * multibody.table ENTRY1 h2o 1fluid 7.0
-
-Description
-"""""""""""
-
-Style *multi/lucy/rx* is used in reaction DPD simulations, where the
-coarse-grained (CG) particles are composed of *m* species whose
-reaction rate kinetics are determined from a set of *n* reaction rate
-equations through the :doc:`fix rx <fix_rx>` command. The species of
-one CG particle can interact with a species in a neighboring CG
-particle through a site-site interaction potential model. Style
-*multi/lucy/rx* computes the site-site density-dependent force
-following from the many-body form described in :ref:`(Moore) <Moore>` and
-:ref:`(Warren) <Warren>` as
-
-.. image:: Eqs/pair_multi_lucy.jpg
- :align: center
-
-which consists of a density-dependent function, A(rho), and a
-radial-dependent weight function, omegaDD(rij). The radial-dependent
-weight function, omegaDD(rij), is taken as the Lucy function:
-
-.. image:: Eqs/pair_multi_lucy2.jpg
- :align: center
-
-The density-dependent energy for a given particle is given by:
-
-.. image:: Eqs/pair_multi_lucy_energy.jpg
- :align: center
-
-See the supporting information of :ref:`(Brennan) <Brennan>` or the
-publication by :ref:`(Moore) <Moore>` for more details on the functional
-form.
-
-An interpolation table is used to evaluate the density-dependent
-energy (Integral(A(rho)drho) and force (A(rho)). Note that the
-pre-factor to the energy is computed after the interpolation, thus the
-Integral(A(rho)drho will have units of energy / length^4.
-
-The interpolation table is created as a pre-computation by fitting
-cubic splines to the file values and interpolating the
-density-dependent energy and force at each of *N* densities. During a
-simulation, the tables are used to interpolate the density-dependent
-energy and force as needed for each pair of particles separated by a
-distance *R*\ . The interpolation is done in one of 2 styles: *lookup*
-and *linear*\ .
-
-For the *lookup* style, the density is used to find the nearest table
-entry, which is the density-dependent energy and force.
-
-For the *linear* style, the density is used to find the 2 surrounding
-table values from which the density-dependent energy and force are
-computed by linear interpolation.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above.
-
-* filename
-* keyword
-* species1
-* species2
-* cutoff (distance units)
-
-The filename specifies a file containing the tabulated
-density-dependent energy and force. The keyword specifies a section
-of the file. The cutoff is an optional coefficient. If not
-specified, the outer cutoff in the table itself (see below) will be
-used to build an interpolation table that extend to the largest
-tabulated distance. If specified, only file values up to the cutoff
-are used to create the interpolation table. The format of this file
-is described below.
-
-The species tags define the site-site interaction potential between
-two species contained within two different particles. The species
-tags must either correspond to the species defined in the reaction
-kinetics files specified with the :doc:`fix rx <fix_rx>` command or they
-must correspond to the tag "1fluid", signifying interaction with a
-product species mixture determined through a one-fluid approximation.
-The interaction potential is weighted by the geometric average of the
-concentrations of the two species. The coarse-grained potential is
-stored before and after the reaction kinetics solver is applied, where
-the difference is defined to be the internal chemical energy (uChem).
-
-
-----------
-
-
-The format of a tabulated file is a series of one or more sections,
-defined as follows (without the parenthesized comments):
-
-.. parsed-literal::
-
- # Density-dependent function (one or more comment or blank lines)
-
-.. parsed-literal::
-
- DD-FUNCTION (keyword is first text on line)
- N 500 R 1.0 10.0 (N, R, RSQ parameters)
- (blank)
- 1 1.0 25.5 102.34 (index, density, energy/r^4, force)
- 2 1.02 23.4 98.5
- ...
- 500 10.0 0.001 0.003
-
-A section begins with a non-blank line whose 1st character is not a
-"#"; blank lines or lines starting with "#" can be used as comments
-between sections. The first line begins with a keyword which
-identifies the section. The line can contain additional text, but the
-initial text must match the argument specified in the pair_coeff
-command. The next line lists (in any order) one or more parameters
-for the table. Each parameter is a keyword followed by one or more
-numeric values.
-
-The parameter "N" is required and its value is the number of table
-entries that follow. Note that this may be different than the *N*
-specified in the :doc:`pair_style multi/lucy/rx <pair_multi_lucy_rx>`
-command. Let Ntable = *N* in the pair_style command, and Nfile = "N"
-in the tabulated file. What LAMMPS does is a preliminary
-interpolation by creating splines using the Nfile tabulated values as
-nodal points. It uses these to interpolate the density-dependent
-energy and force at Ntable different points. The resulting tables of
-length Ntable are then used as described above, when computing the
-density-dependent energy and force. This means that if you want the
-interpolation tables of length Ntable to match exactly what is in the
-tabulated file (with effectively no preliminary interpolation), you
-should set Ntable = Nfile, and use the "RSQ" parameter. This is
-because the internal table abscissa is always RSQ (separation distance
-squared), for efficient lookup.
-
-All other parameters are optional. If "R" or "RSQ" does not appear,
-then the distances in each line of the table are used as-is to perform
-spline interpolation. In this case, the table values can be spaced in
-*density* uniformly or however you wish to position table values in
-regions of large gradients.
-
-If used, the parameters "R" or "RSQ" are followed by 2 values *rlo*
-and *rhi*\ . If specified, the density associated with each
-density-dependent energy and force value is computed from these 2
-values (at high accuracy), rather than using the (low-accuracy) value
-listed in each line of the table. The density values in the table
-file are ignored in this case. For "R", distances uniformly spaced
-between *rlo* and *rhi* are computed; for "RSQ", squared distances
-uniformly spaced between *rlo*rlo* and *rhi*rhi* are computed.
-
-.. note::
-
- If you use "R" or "RSQ", the tabulated distance values in the
- file are effectively ignored, and replaced by new values as described
- in the previous paragraph. If the density value in the table is not
- very close to the new value (i.e. round-off difference), then you will
- be assigning density-dependent energy and force values to a different
- density, which is probably not what you want. LAMMPS will warn if
- this is occurring.
-
-Following a blank line, the next N lines list the tabulated values.
-On each line, the 1st value is the index from 1 to N, the 2nd value is
-r (in density units), the 3rd value is the density-dependent function
-value (in energy units / length^4), and the 4th is the force (in force
-units). The density values must increase from one line to the next.
-
-Note that one file can contain many sections, each with a tabulated
-potential. LAMMPS reads the file section by section until it finds
-one that matches the specified keyword.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-The :doc:`pair_modify <pair_modify>` shift, table, and tail options are
-not relevant for this pair style.
-
-This pair style writes the settings for the "pair_style multi/lucy/rx" command
-to :doc:`binary restart files <restart>`, so a pair_style command does
-not need to specified in an input script that reads a restart file.
-However, the coefficient information is not stored in the restart
-file, since it is tabulated in the potential files. Thus, pair_coeff
-commands do need to be specified in the restart input script.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-DPD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Warren:
-
-
-
-**(Warren)** Warren, Phys Rev E, 68, 066702 (2003).
-
-.. _Brennan:
-
-
-
-**(Brennan)** Brennan, J Chem Phys Lett, 5, 2144-2149 (2014).
-
-.. _Moore:
-
-
-
-**(Moore)** Moore, J Chem Phys, 144, 104501 (2016).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_nb3b_harmonic.txt b/doc/html/_sources/pair_nb3b_harmonic.txt
deleted file mode 100644
index 16fe3f422..000000000
--- a/doc/html/_sources/pair_nb3b_harmonic.txt
+++ /dev/null
@@ -1,139 +0,0 @@
-.. index:: pair_style nb3b/harmonic
-
-pair_style nb3b/harmonic command
-================================
-
-pair_style nb3b/harmonic/omp command
-====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style nb3b/harmonic
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style nb3b/harmonic
- pair_coeff * * MgOH.nb3bharmonic Mg O H
-
-Description
-"""""""""""
-
-This pair style computes a nonbonded 3-body harmonic potential for the
-energy E of a system of atoms as
-
-.. image:: Eqs/pair_nb3b_harmonic.jpg
- :align: center
-
-where *theta_0* is the equilibrium value of the angle and *K* is a
-prefactor. Note that the usual 1/2 factor is included in *K*\ . The form
-of the potential is identical to that used in angle_style *harmonic*\ ,
-but in this case, the atoms do not need to be explicitly bonded.
-
-Only a single pair_coeff command is used with this style which
-specifies a potential file with parameters for specified 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 elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-As an example, imagine a file SiC.nb3b.harmonic has potential values
-for Si and C. If your LAMMPS simulation has 4 atoms types and you
-want the 1st 3 to be Si, and the 4th to be C, you would use the
-following pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * SiC.nb3b.harmonic Si Si Si C
-
-The 1st 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 potential file. The final C argument maps LAMMPS atom
-type 4 to the C element in the potential file. If a mapping value is
-specified as NULL, the mapping is not performed. This can be used
-when the 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. An example of a pair_coeff command for use with the
-*hybrid* pair style is:
-
-pair_coeff * * nb3b/harmonic MgOH.nb3b.harmonic Mg O H
-
-Three-body nonbonded harmonic files in the *potentials* directory of
-the LAMMPS distribution have a ".nb3b.harmonic" suffix. Lines that
-are not blank or comments (starting with #) define parameters for a
-triplet of elements.
-
-Each entry has six arguments. The first three are atom types as
-referenced in the LAMMPS input file. The first argument specifies the
-central atom. The fourth argument indicates the *K* parameter. The
-fifth argument indicates *theta_0*\ . The sixth argument indicates a
-separation cutoff in Angstroms.
-
-For a given entry, if the second and third arguments are identical,
-then the entry is for a cutoff for the distance between types 1 and 2
-(values for *K* and *theta_0* are irrelevant in this case).
-
-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
-this case is irrelevant).
-
-It is *not* required that the potential file contain entries for all
-of the elements listed in the pair_coeff command. It can also contain
-entries for additional elements not being used in a particular
-simulation; LAMMPS ignores those entries.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style can only be used if LAMMPS was built with the MANYBODY
-package (which it is by default). See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_nm.txt b/doc/html/_sources/pair_nm.txt
deleted file mode 100644
index 58c2db80f..000000000
--- a/doc/html/_sources/pair_nm.txt
+++ /dev/null
@@ -1,203 +0,0 @@
-.. index:: pair_style nm/cut
-
-pair_style nm/cut command
-=========================
-
-pair_style nm/cut/coul/cut command
-==================================
-
-pair_style nm/cut/coul/long command
-===================================
-
-pair_style nm/cut/omp command
-=============================
-
-pair_style nm/cut/coul/cut/omp command
-======================================
-
-pair_style nm/cut/coul/long/omp command
-=======================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *nm/cut* or *nm/cut/coul/cut* or *nm/cut/coul/long*
-* args = list of arguments for a particular style
-.. parsed-literal::
-
- *nm/cut* args = cutoff
- cutoff = global cutoff for Pair interactions (distance units)
- *nm/cut/coul/cut* args = cutoff (cutoff2)
- cutoff = global cutoff for Pair (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
- *nm/cut/coul/long* args = cutoff (cutoff2)
- cutoff = global cutoff for Pair (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style nm/cut 12.0
- pair_coeff * * 0.01 5.4 8.0 7.0
- pair_coeff 1 1 0.01 4.4 7.0 6.0
-
-.. parsed-literal::
-
- pair_style nm/cut/coul/cut 12.0 15.0
- pair_coeff * * 0.01 5.4 8.0 7.0
- pair_coeff 1 1 0.01 4.4 7.0 6.0
-
-.. parsed-literal::
-
- pair_style nm/cut/coul/long 12.0 15.0
- pair_coeff * * 0.01 5.4 8.0 7.0
- pair_coeff 1 1 0.01 4.4 7.0 6.0
-
-Description
-"""""""""""
-
-Style *nm* computes site-site interactions based on the N-M potential
-by :ref:`Clarke <Clarke>`, mainly used for ionic liquids. A site can
-represent a single atom or a united-atom site. The energy of an
-interaction has the following form:
-
-.. image:: Eqs/pair_nm.jpg
- :align: center
-
-Rc is the cutoff.
-
-Style *nm/cut/coul/cut* adds a Coulombic pairwise interaction given by
-
-.. image:: Eqs/pair_coulomb.jpg
- :align: center
-
-where C is an energy-conversion constant, Qi and Qj are the charges on
-the 2 atoms, and epsilon is the dielectric constant which can be set
-by the :doc:`dielectric <dielectric>` command. If one cutoff is
-specified in the pair_style command, it is used for both the NM and
-Coulombic terms. If two cutoffs are specified, they are used as
-cutoffs for the NM and Coulombic terms respectively.
-
-Styles *nm/cut/coul/long* compute the same
-Coulombic interactions as style *nm/cut/coul/cut* except that an
-additional damping factor is applied to the Coulombic term so it can
-be used in conjunction with the :doc:`kspace_style <kspace_style>`
-command and its *ewald* or *pppm* option. The Coulombic cutoff
-specified for this style means that pairwise interactions within this
-distance are computed directly; interactions outside that distance are
-computed in reciprocal space.
-
-For all of the *nm* pair styles, the following coefficients must
-be defined for each pair of atoms types
-via the :doc:`pair_coeff <pair_coeff>` command as in the
-examples above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands.
-
-* E0 (energy units)
-* r0 (distance units)
-* n (unitless)
-* m (unitless)
-* cutoff1 (distance units)
-* cutoff2 (distance units)
-
-The latter 2 coefficients are optional. If not specified, the global
-NM and Coulombic cutoffs specified in the pair_style command are used.
-If only one cutoff is specified, it is used as the cutoff for both NM
-and Coulombic interactions for this type pair. If both coefficients
-are specified, they are used as the NM and Coulombic cutoffs for this
-type pair. You cannot specify 2 cutoffs for style *nm*\ , since it
-has no Coulombic terms.
-
-For *nm/cut/coul/long* only the NM cutoff can be specified since a
-Coulombic cutoff cannot be specified for an individual I,J type pair.
-All type pairs use the same global Coulombic cutoff specified in the
-pair_style command.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-These pair styles do not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-All of the *nm* pair styles supports the
-:doc:`pair_modify <pair_modify>` shift option for the energy of the pair
-interaction.
-
-The *nm/cut/coul/long* pair styles support the
-:doc:`pair_modify <pair_modify>` table option since they can tabulate
-the short-range portion of the long-range Coulombic interaction.
-
-All of the *nm* pair styles support the :doc:`pair_modify <pair_modify>`
-tail option for adding a long-range tail correction to the energy and
-pressure for the NM portion of the pair interaction.
-
-All of the *nm* pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do not need
-to be specified in an input script that reads a restart file.
-
-All of the *nm* pair styles can only be used via the *pair* keyword of
-the :doc:`run_style respa <run_style>` command. They do not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-Restrictions
-""""""""""""
-
-
-These pair styles are part of the MISC package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Clarke:
-
-
-
-**(Clarke)** Clarke and Smith, J Chem Phys, 84, 2290 (1986).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_none.txt b/doc/html/_sources/pair_none.txt
deleted file mode 100644
index 49a0eab83..000000000
--- a/doc/html/_sources/pair_none.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-.. index:: pair_style none
-
-pair_style none command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style none
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style none
-
-Description
-"""""""""""
-
-Using a pair style of none means pair forces and energies are not
-computed.
-
-With this choice, the force cutoff is 0.0, which means that only atoms
-within the neighbor skin distance (see the :doc:`neighbor <neighbor>`
-command) are communicated between processors. You must insure the
-skin distance is large enough to acquire atoms needed for computing
-bonds, angles, etc.
-
-A pair style of *none* will also prevent pairwise neighbor lists from
-being built. However if the :doc:`neighbor <neighbor>` style is *bin*\ ,
-data structures for binning are still allocated. If the neighbor skin
-distance is small, then these data structures can consume a large
-amount of memory. So you should either set the neighbor style to
-*nsq* or set the skin distance to a larger value.
-
-See the :doc:`pair_style zero <pair_zero>` for a way to trigger the
-building of a neighbor lists, but compute no pairwise interactions.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style zero <pair_zero>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_peri.txt b/doc/html/_sources/pair_peri.txt
deleted file mode 100644
index 7bd6fcc39..000000000
--- a/doc/html/_sources/pair_peri.txt
+++ /dev/null
@@ -1,259 +0,0 @@
-.. index:: pair_style peri/pmb
-
-pair_style peri/pmb command
-===========================
-
-pair_style peri/pmb/omp command
-===============================
-
-pair_style peri/lps command
-===========================
-
-pair_style peri/lps/omp command
-===============================
-
-pair_style peri/ves command
-===========================
-
-pair_style peri/eps command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style
-
-* style = *peri/pmb* or *peri/lps* or *peri/ves* or *peri/eps*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style peri/pmb
- pair_coeff * * 1.6863e22 0.0015001 0.0005 0.25
-
-.. parsed-literal::
-
- pair_style peri/lps
- pair_coeff * * 14.9e9 14.9e9 0.0015001 0.0005 0.25
-
-.. parsed-literal::
-
- pair_style peri/ves
- pair_coeff * * 14.9e9 14.9e9 0.0015001 0.0005 0.25 0.5 0.001
-
-.. parsed-literal::
-
- pair_style peri/eps
- pair_coeff * * 14.9e9 14.9e9 0.0015001 0.0005 0.25 118.43
-
-Description
-"""""""""""
-
-The peridynamic pair styles implement material models that can be used
-at the mescscopic and macroscopic scales. See `this document <PDF/PDLammps_overview.pdf>`_ for an overview of LAMMPS commands
-for Peridynamics modeling.
-
-Style *peri/pmb* implements the Peridynamic bond-based prototype
-microelastic brittle (PMB) model.
-
-Style *peri/lps* implements the Peridynamic state-based linear
-peridynamic solid (LPS) model.
-
-Style *peri/ves* implements the Peridynamic state-based linear
-peridynamic viscoelastic solid (VES) model.
-
-Style *peri/eps* implements the Peridynamic state-based elastic-plastic
-solid (EPS) model.
-
-The canonical papers on Peridynamics are :ref:`(Silling 2000) <Silling2000>`
-and :ref:`(Silling 2007) <Silling2007>`. The implementation of Peridynamics
-in LAMMPS is described in :ref:`(Parks) <Parks>`. Also see the `PDLAMMPS user guide <http://www.sandia.gov/~mlparks/papers/PDLAMMPS.pdf>`_ for
-more details about its implementation.
-
-The peridynamic VES and EPS models in PDLAMMPS were implemented by
-R. Rahman and J. T. Foster at University of Texas at San Antonio. The
-original VES formulation is described in "(Mitchell2011)" and the
-original EPS formulation is in "(Mitchell2011a)". Additional PDF docs
-that describe the VES and EPS implementations are include in the
-LAMMPS distro in `doc/PDF/PDLammps_VES.pdf <PDF/PDLammps_VES.pdf>`_ and
-`doc/PDF/PDLammps_EPS.pdf <PDF/PDLammps_EPS.pdf>`_. For questions
-regarding the VES and EPS models in LAMMPS you can contact R. Rahman
-(rezwanur.rahman at utsa.edu).
-
-The following coefficients must be defined for each pair of atom types
-via the :doc:`pair_coeff <pair_coeff>` command as in the examples above,
-or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below.
-
-For the *peri/pmb* style:
-
-* c (energy/distance/volume^2 units)
-* horizon (distance units)
-* s00 (unitless)
-* alpha (unitless)
-
-C is the effectively a spring constant for Peridynamic bonds, the
-horizon is a cutoff distance for truncating interactions, and s00 and
-alpha are used as a bond breaking criteria. The units of c are such
-that c/distance = stiffness/volume^2, where stiffness is
-energy/distance^2 and volume is distance^3. See the users guide for
-more details.
-
-For the *peri/lps* style:
-
-* K (force/area units)
-* G (force/area units)
-* horizon (distance units)
-* s00 (unitless)
-* alpha (unitless)
-
-K is the bulk modulus and G is the shear modulus. The horizon is a
-cutoff distance for truncating interactions, and s00 and alpha are
-used as a bond breaking criteria. See the users guide for more
-details.
-
-For the *peri/ves* style:
-
-* K (force/area units)
-* G (force/area units)
-* horizon (distance units)
-* s00 (unitless)
-* alpha (unitless)
-* m_lambdai (unitless)
-* m_taubi (unitless)
-
-K is the bulk modulus and G is the shear modulus. The horizon is a
-cutoff distance for truncating interactions, and s00 and alpha are
-used as a bond breaking criteria. m_lambdai and m_taubi are the
-viscoelastic relaxation parameter and time constant,
-respectively. m_lambdai varies within zero to one. For very small
-values of m_lambdai the viscoelsatic model responds very similar to a
-linear elastic model. For details please see the description in
-"(Mtchell2011)".
-
-For the *peri/eps* style:
-
-K (force/area units)
-G (force/area units)
-horizon (distance units)
-s00 (unitless)
-alpha (unitless)
-m_yield_stress (force/area units)
-
-K is the bulk modulus and G is the shear modulus. The horizon is a
-cutoff distance and s00 and alpha are used as a bond breaking
-criteria. m_yield_stress is the yield stress of the material. For
-details please see the description in "(Mtchell2011a)".
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-These pair styles do not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-These pair styles do not support the :doc:`pair_modify <pair_modify>`
-shift option.
-
-The :doc:`pair_modify <pair_modify>` table and tail options are not
-relevant for these pair styles.
-
-These pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do not need
-to be specified in an input script that reads a restart file.
-
-These pair styles can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. They do not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-All of these styles are part of the PERI package. They are only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Parks:
-
-
-
-**(Parks)** Parks, Lehoucq, Plimpton, Silling, Comp Phys Comm, 179(11),
-777-783 (2008).
-
-.. _Silling2000:
-
-
-
-**(Silling 2000)** Silling, J Mech Phys Solids, 48, 175-209 (2000).
-
-.. _Silling2007:
-
-
-
-**(Silling 2007)** Silling, Epton, Weckner, Xu, Askari, J Elasticity,
-88, 151-184 (2007).
-
-.. _Mitchell2011:
-
-
-
-**(Mitchell2011)** Mitchell. A non-local, ordinary-state-based
-viscoelasticity model for peridynamics. Sandia National Lab Report,
-8064:1-28 (2011).
-
-.. _Mitchell2011a:
-
-
-
-**(Mitchell2011a)** Mitchell. A Nonlocal, Ordinary, State-Based
-Plasticity Model for Peridynamics. Sandia National Lab Report,
-3166:1-34 (2011).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_polymorphic.txt b/doc/html/_sources/pair_polymorphic.txt
deleted file mode 100644
index 8104f2803..000000000
--- a/doc/html/_sources/pair_polymorphic.txt
+++ /dev/null
@@ -1,283 +0,0 @@
-.. index:: pair_style polymorphic
-
-pair_style polymorphic command
-==============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style polymorphic
-
-style = *polymorphic*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style polymorphic
- pair_coeff * * TlBr_msw.polymorphic Tl Br
- pair_coeff * * AlCu_eam.polymorphic Al Cu
- pair_coeff * * GaN_tersoff.polymorphic Ga N
- pair_coeff * * GaN_sw.polymorphic GaN
-
-Description
-"""""""""""
-
-The *polymorphic* pair style computes a 3-body free-form potential
-(:ref:`Zhou <Zhou>`) for the energy E of a system of atoms as
-
-.. image:: Eqs/polymorphic1.jpg
- :align: center
-
-.. image:: Eqs/polymorphic2.jpg
- :align: center
-
-.. image:: Eqs/polymorphic3.jpg
- :align: center
-
-where I, J, K represent species of atoms i, j, and k, i_1, ..., i_N
-represents a list of i's neighbors, delta_ij is a Direc constant
-(i.e., delta_ij = 1 when i = j, and delta_ij = 0 otherwise), eta_ij is
-similar constant that can be set either to eta_ij = delta_ij or eta_ij
-= 1 - delta_ij depending on the potential type, U_IJ(r_ij),
-V_IJ(r_ij), W_IK(r_ik) are pair functions, G_JIK(cos(theta)) is an
-angular function, P_IK(delta r_jik) is a function of atomic spacing
-differential delta r_jik = r_ij - xi_IJ*r_ik with xi_IJ being a
-pair-dependent parameter, and F_IJ(X_ij) is a function of the local
-environment variable X_ij. This generic potential is fully defined
-once the constants eta_ij and xi_IJ, and the six functions U_IJ(r_ij),
-V_IJ(r_ij), W_IK(r_ik), G_JIK(cos(theta)), P_IK(delta r_jik), and
-F_IJ(X_ij) are given. Note that these six functions are all one
-dimensional, and hence can be provided in an analytic or tabular
-form. This allows users to design different potentials solely based on
-a manipulation of these functions. For instance, the potential reduces
-to Stillinger-Weber potential (:ref:`SW <SW>`) if we set
-
-.. image:: Eqs/polymorphic4.jpg
- :align: center
-
-The potential reduces to Tersoff types of potential
-(:ref:`Tersoff <Tersoff>` or :ref:`Albe <Albe>`) if we set
-
-.. image:: Eqs/polymorphic5.jpg
- :align: center
-
-.. image:: Eqs/polymorphic6.jpg
- :align: center
-
-The potential reduces to Rockett-Tersoff (:ref:`Wang <Wang>`) type if we set
-
-.. image:: Eqs/polymorphic7.jpg
- :align: center
-
-.. image:: Eqs/polymorphic6.jpg
- :align: center
-
-.. image:: Eqs/polymorphic8.jpg
- :align: center
-
-The potential becomes embedded atom method (:ref:`Daw <Daw>`) if we set
-
-.. image:: Eqs/polymorphic9.jpg
- :align: center
-
-In the embedded atom method case, phi_IJ(r_ij) is the pair energy,
-F_I(X) is the embedding energy, X is the local electron density, and
-f_K(r) is the atomic electron density function.
-
-If the tabulated functions are created using the parameters of sw,
-tersoff, and eam potentials, the polymorphic pair style will produce
-the same global properties (energies and stresses) and the same forces
-as the sw, tersoff, and eam pair styles. The polymorphic pair style
-also produces the same atom properties (energies and stresses) as the
-corresponding tersoff and eam pair styles. However, due to a different
-partition of global properties to atom properties, the polymorphic
-pair style will produce different atom properties (energies and
-stresses) as the sw pair style. This does not mean that polymorphic
-pair style is different from the sw pair style in this case. It just
-means that the definitions of the atom energies and atom stresses are
-different.
-
-Only a single pair_coeff command is used with the polymorphic style
-which specifies an potential file 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 Tersoff elements to atom types
-
-See the pair_coeff doc page for alternate ways to specify the path for
-the potential file. Several files for polymorphic potentials are
-included in the potentials dir of the LAMMPS distro. They have a
-"poly" suffix.
-
-As an example, imagine the SiC_tersoff.polymorphic file has tabulated
-functions for Si-C tersoff potential. If your LAMMPS simulation has 4
-atoms types and you want the 1st 3 to be Si, and the 4th to be C, you
-would use the following pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * SiC_tersoff.polymorphic Si Si Si C
-
-The 1st 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 polymorphic file. The final C argument maps LAMMPS
-atom type 4 to the C element in the polymorphic file. If a mapping
-value is specified as NULL, the mapping is not performed. This can be
-used when an polymorphic 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.
-
-Potential files in the potentials directory of the LAMMPS distribution
-have a ".poly" suffix. At the beginning of the files, an unlimited
-number of lines starting with '#' are used to describe the potential
-and are ignored by LAMMPS. The next line lists two numbers:
-
-.. parsed-literal::
-
- ntypes eta
-
-Here ntypes represent total number of species defined in the potential
-file, and eta = 0 or 1. The number ntypes must equal the total number
-of different species defined in the pair_coeff command. When eta = 1,
-eta_ij defined in the potential functions above is set to 1 -
-delta_ij, otherwise eta_ij is set to delta_ij. The next ntypes lines
-each lists two numbers and a character string representing atomic
-number, atomic mass, and name of the species of the ntypes elements:
-
-.. parsed-literal::
-
- atomic_number atomic-mass element (1)
- atomic_number atomic-mass element (2)
- ...
- atomic_number atomic-mass element (ntypes)
-
-The next ntypes*(ntypes+1)/2 lines contain two numbers:
-
-.. parsed-literal::
-
- cut xi (1)
- cut xi (2)
- ...
- cut xi (ntypes*(ntypes+1)/2)
-
-Here cut means the cutoff distance of the pair functions, xi is the
-same as defined in the potential functions above. The
-ntypes*(ntypes+1)/2 lines are related to the pairs according to the
-sequence of first ii (self) pairs, i = 1, 2, ..., ntypes, and then
-then ij (cross) pairs, i = 1, 2, ..., ntypes-1, and j = i+1, i+2, ...,
-ntypes (i.e., the sequence of the ij pairs follows 11, 22, ..., 12,
-13, 14, ..., 23, 24, ...).
-
-The final blocks of the potential file are the U, V, W, P, G, and F
-functions are listed sequentially. First, U functions are given for
-each of the ntypes*(ntypes+1)/2 pairs according to the sequence
-described above. For each of the pairs, nr values are listed. Next,
-similar arrays are given for V, W, and P functions. Then G functions
-are given for all the ntypes*ntypes*ntypes ijk triplets in a natural
-sequence i from 1 to ntypes, j from 1 to ntypes, and k from 1 to
-ntypes (i.e., ijk = 111, 112, 113, ..., 121, 122, 123 ..., 211, 212,
-...). Each of the ijk functions contains ng values. Finally, the F
-functions are listed for all ntypes*(ntypes+1)/2 pairs, each
-containing nx values. Either analytic or tabulated functions can be
-specified. Currently, constant, exponential, sine and cosine analytic
-functions are available which are specified with: constant c1 , where
-f(x) = c1 exponential c1 c2 , where f(x) = c1 exp(c2*x) sine c1 c2 ,
-where f(x) = c1 sin(c2*x) cos c1 c2 , where f(x) = c1 cos(c2*x)
-Tabulated functions are specified by spline n x1 x2, where n=number of
-point, (x1,x2)=range and then followed by n values evaluated uniformly
-over these argument ranges. The valid argument ranges of the
-functions are between 0 <= r <= cut for the U(r), V(r), W(r)
-functions, -cutmax <= delta_r <= cutmax for the P(delta_r) functions,
--1 <= costheta <= 1 for the G(costheta) functions, and 0 <= X <= maxX
-for the F(X) functions.
-
-**Mixing, shift, table tail correction, restart**\ :
-
-This pair styles does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write their information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-If using create_atoms command, atomic masses must be defined in the
-input script. If using read_data, atomic masses must be defined in the
-atomic structure data file.
-
-This pair style is part of the MANYBODY package. It is only enabled if
-LAMMPS was built with that package (which it is by default). See the
-:ref:`Making LAMMPS <start_3>` section for more info.
-
-This pair potential requires the :doc:`newtion <newton>` setting to be
-"on" for pair interactions.
-
-The potential files provided with LAMMPS (see the potentials
-directory) are parameterized for metal :doc:`units <units>`. You can use
-any LAMMPS units, but you would need to create your own potential
-files.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-
-----------
-
-
-.. _Zhou:
-
-
-
-**(Zhou)** X. W. Zhou, M. E. Foster, R. E. Jones, P. Yang, H. Fan, and
-F. P. Doty, J. Mater. Sci. Res., 4, 15 (2015).
-
-.. _SW:
-
-
-
-**(SW)** F. H. Stillinger-Weber, and T. A. Weber, Phys. Rev. B, 31, 5262 (1985).
-
-.. _Tersoff:
-
-
-
-**(Tersoff)** J. Tersoff, Phys. Rev. B, 39, 5566 (1989).
-
-.. _Albe:
-
-
-
-**(Albe)** K. Albe, K. Nordlund, J. Nord, and A. Kuronen, Phys. Rev. B,
-66, 035205 (2002).
-
-.. _Wang:
-
-
-
-**(Wang)** J. Wang, and A. Rockett, Phys. Rev. B, 43, 12571 (1991).
-
-.. _Daw:
-
-
-
-**(Daw)** M. S. Daw, and M. I. Baskes, Phys. Rev. B, 29, 6443 (1984).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_quip.txt b/doc/html/_sources/pair_quip.txt
deleted file mode 100644
index 326fc738d..000000000
--- a/doc/html/_sources/pair_quip.txt
+++ /dev/null
@@ -1,110 +0,0 @@
-.. index:: pair_style quip
-
-pair_style quip command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style quip
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style quip
- pair_coeff * * gap_example.xml "Potential xml_label=GAP_2014_5_8_60_17_10_38_466" 14
- pair_coeff * * sw_example.xml "IP SW" 14
-
-Description
-"""""""""""
-
-Style *quip* provides an interface for calling potential routines from
-the QUIP package. QUIP is built separately, and then linked to
-LAMMPS. The most recent version of the QUIP package can be downloaded
-from GitHub:
-`https://github.com/libAtoms/QUIP <https://github.com/libAtoms/QUIP>`_. The
-interface is chiefly intended to be used to run Gaussian Approximation
-Potentials (GAP), which are described in the following publications:
-:ref:`(Bartok et al) <Bartok_2010>` and :ref:`(PhD thesis of Bartok) <Bartok_PhD>`.
-
-Only a single pair_coeff command is used with the *quip* style that
-specifies a QUIP potential file containing the parameters of the
-potential for all needed elements in XML format. This is followed by a
-QUIP initialization string. Finally, the QUIP elements are mapped to
-LAMMPS atom types by specifying N atomic numbers, where N is the
-number of LAMMPS atom types:
-
-* QUIP filename
-* QUIP initialization string
-* N atomic numbers = mapping of QUIP elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-A QUIP potential is fully specified by the filename which contains the
-parameters of the potential in XML format, the initialisation string,
-and the map of atomic numbers.
-
-GAP potentials can be obtained from the Data repository section of
-`http://www.libatoms.org <http://www.libatoms.org>`_, where the
-appropriate initialisation strings are also advised. The list of
-atomic numbers must be matched to the LAMMPS atom types specified in
-the LAMMPS data file or elsewhere.
-
-Two examples input scripts are provided in the examples/USER/quip
-directory.
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-mix, shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the USER-QUIP package. It is only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-QUIP potentials are parametrized in electron-volts and Angstroms and
-therefore should be used with LAMMPS metal :doc:`units <units>`.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-
-----------
-
-
-.. _Bartok_2010:
-
-
-
-**(Bartok_2010)** AP Bartok, MC Payne, R Kondor, and G Csanyi, Physical
-Review Letters 104, 136403 (2010).
-
-.. _Bartok_PhD:
-
-
-
-**(Bartok_PhD)** A Bartok-Partay, PhD Thesis, University of Cambridge,
-(2010).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_reax.txt b/doc/html/_sources/pair_reax.txt
deleted file mode 100644
index ee0d122c7..000000000
--- a/doc/html/_sources/pair_reax.txt
+++ /dev/null
@@ -1,240 +0,0 @@
-.. index:: pair_style reax
-
-pair_style reax command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style reax hbcut hbnewflag tripflag precision
-
-* hbcut = hydrogen-bond cutoff (optional) (distance units)
-* hbnewflag = use old or new hbond function style (0 or 1) (optional)
-* tripflag = apply stabilization to all triple bonds (0 or 1) (optional)
-* precision = precision for charge equilibration (optional)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style reax
- pair_style reax 10.0 0 1 1.0e-5
- pair_coeff * * ffield.reax 3 1 2 2
- pair_coeff * * ffield.reax 3 NULL NULL 3
-
-Description
-"""""""""""
-
-Style *reax* computes the ReaxFF potential of van Duin, Goddard and
-co-workers. ReaxFF uses distance-dependent bond-order functions to
-represent the contributions of chemical bonding to the potential
-energy. There is more than one version of ReaxFF. The version
-implemented in LAMMPS uses the functional forms documented in the
-supplemental information of the following paper:
-:ref:`(Chenoweth) <Chenoweth_2008>`. The version integrated into LAMMPS matches
-the most up-to-date version of ReaxFF as of summer 2010.
-
-WARNING: pair style reax is now deprecated and will soon be retired. Users
-should switch to :doc:`pair_style reax/c <pair_reax_c>`. The *reax* style
-differs from the *reax/c* style in the lo-level implementation details.
-The *reax* style is a
-Fortran library, linked to LAMMPS. The *reax/c* style was initially
-implemented as stand-alone C code and is now integrated into LAMMPS as
-a package.
-
-LAMMPS requires that a file called ffield.reax be provided, containing
-the ReaxFF parameters for each atom type, bond type, etc. The format
-is identical to the ffield file used by van Duin and co-workers. The
-filename is required as an argument in the pair_coeff command. Any
-value other than "ffield.reax" will be rejected (see below).
-
-LAMMPS provides several different versions of ffield.reax in its
-potentials dir, each called potentials/ffield.reax.label. These are
-documented in potentials/README.reax. The default ffield.reax
-contains parameterizations for the following elements: C, H, O, N.
-
-.. note::
-
- We do not distribute a wide variety of ReaxFF force field files
- with LAMMPS. Adri van Duin's group at PSU is the central repository
- for this kind of data as they are continuously deriving and updating
- parameterizations for different classes of materials. You can submit
- a contact request at the Materials Computation Center (MCC) website
- `https://www.mri.psu.edu/materials-computation-center/connect-mcc <https://www.mri.psu.edu/materials-computation-center/connect-mcc>`_,
- describing the material(s) you are interested in modeling with ReaxFF.
- They can tell
- you what is currently available or what it would take to create a
- suitable ReaxFF parameterization.
-
-The format of these files is identical to that used originally by van
-Duin. We have tested the accuracy of *pair_style reax* potential
-against the original ReaxFF code for the systems mentioned above. You
-can use other ffield files for specific chemical systems that may be
-available elsewhere (but note that their accuracy may not have been
-tested).
-
-The *hbcut*\ , *hbnewflag*\ , *tripflag*\ , and *precision* settings are
-optional arguments. If none are provided, default settings are used:
-*hbcut* = 6 (which is Angstroms in real units), *hbnewflag* = 1 (use
-new hbond function style), *tripflag* = 1 (apply stabilization to all
-triple bonds), and *precision* = 1.0e-6 (one part in 10^6). If you
-wish to override any of these defaults, then all of the settings must
-be specified.
-
-Two examples using *pair_style reax* are provided in the examples/reax
-sub-directory, along with corresponding examples for
-:doc:`pair_style reax/c <pair_reax_c>`. Note that while the energy and force
-calculated by both of these pair styles match very closely, the
-contributions due to the valence angles differ slightly due to
-the fact that with *pair_style reax/c* the default value of *thb_cutoff_sq*
-is 0.00001, while for *pair_style reax* it is hard-coded to be 0.001.
-
-Use of this pair style requires that a charge be defined for every
-atom since the *reax* pair style performs a charge equilibration (QEq)
-calculation. See the :doc:`atom_style <atom_style>` and
-:doc:`read_data <read_data>` commands for details on how to specify
-charges.
-
-The thermo variable *evdwl* stores the sum of all the ReaxFF potential
-energy contributions, with the exception of the Coulombic and charge
-equilibration contributions which are stored in the thermo variable
-*ecoul*\ . The output of these quantities is controlled by the
-:doc:`thermo <thermo>` command.
-
-This pair style tallies a breakdown of the total ReaxFF potential
-energy into sub-categories, which can be accessed via the :doc:`compute pair <compute_pair>` command as a vector of values of length 14.
-The 14 values correspond to the following sub-categories (the variable
-names in italics match those used in the ReaxFF FORTRAN library):
-
-1. *eb* = bond energy
-2. *ea* = atom energy
-3. *elp* = lone-pair energy
-4. *emol* = molecule energy (always 0.0)
-5. *ev* = valence angle energy
-6. *epen* = double-bond valence angle penalty
-7. *ecoa* = valence angle conjugation energy
-8. *ehb* = hydrogen bond energy
-9. *et* = torsion energy
-10. *eco* = conjugation energy
-11. *ew* = van der Waals energy
-12. *ep* = Coulomb energy
-13. *efi* = electric field energy (always 0.0)
-14. *eqeq* = charge equilibration energy
-
-To print these quantities to the log file (with descriptive column
-headings) the following commands could be included in an input script:
-
-.. parsed-literal::
-
- compute reax all pair reax
- variable eb equal c_reax[1]
- variable ea equal c_reax[2]
- ...
- variable eqeq equal c_reax[14]
- thermo_style custom step temp epair v_eb v_ea ... v_eqeq
-
-Only a single pair_coeff command is used with the *reax* style which
-specifies a ReaxFF 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 indices = mapping of ReaxFF elements to atom types
-
-The specification of the filename and the mapping of LAMMPS atom types
-recognized by the ReaxFF is done differently than for other LAMMPS
-potentials, due to the non-portable difficulty of passing character
-strings (e.g. filename, element names) between C++ and Fortran.
-
-The filename has to be "ffield.reax" and it has to exist in the
-directory you are running LAMMPS in. This means you cannot prepend a
-path to the file in the potentials dir. Rather, you should copy that
-file into the directory you are running from. If you wish to use
-another ReaxFF potential file, then name it "ffield.reax" and put it
-in the directory you run from.
-
-In the ReaxFF potential file, near the top, after the general
-parameters, is the atomic parameters section that contains element
-names, each with a couple dozen numeric parameters. If there are M
-elements specified in the *ffield* file, think of these as numbered 1
-to M. Each of the N indices you specify for the N atom types of LAMMPS
-atoms must be an integer from 1 to M. Atoms with LAMMPS type 1 will
-be mapped to whatever element you specify as the first index value,
-etc. If a mapping value is specified as NULL, the mapping is not
-performed. This can be used when a ReaxFF 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.
-
-.. note::
-
- Currently the reax pair style cannot be used as part of the
- *hybrid* pair style. Some additional changes still need to be made to
- enable this.
-
-As an example, say your LAMMPS simulation has 4 atom types and the
-elements are ordered as C, H, O, N in the *ffield* file. If you want
-the LAMMPS atom type 1 and 2 to be C, type 3 to be N, and type 4 to be
-H, you would use the following pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * ffield.reax 1 1 4 2
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-mix, shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-The ReaxFF potential files provided with LAMMPS in the potentials
-directory are parameterized for real :doc:`units <units>`. You can use
-the ReaxFF potential with any LAMMPS units, but you would need to
-create your own potential file with coefficients listed in the
-appropriate units if your simulation doesn't use "real" units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style reax/c <pair_reax_c>`,
-:doc:`fix_reax_bonds <fix_reax_bonds>`
-
-Default
-"""""""
-
-The keyword defaults are *hbcut* = 6, *hbnewflag* = 1, *tripflag* = 1,
-*precision* = 1.0e-6.
-
-
-----------
-
-
-.. _Chenoweth_2008:
-
-
-
-**(Chenoweth_2008)** Chenoweth, van Duin and Goddard,
-Journal of Physical Chemistry A, 112, 1040-1053 (2008).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_reax_c.txt b/doc/html/_sources/pair_reax_c.txt
deleted file mode 100644
index 3b42f4cbd..000000000
--- a/doc/html/_sources/pair_reax_c.txt
+++ /dev/null
@@ -1,382 +0,0 @@
-.. index:: pair_style reax/c
-
-pair_style reax/c command
-=========================
-
-pair_style reax/c/kk command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style reax/c cfile keyword value
-
-* cfile = NULL or name of a control file
-* zero or more keyword/value pairs may be appended
-.. parsed-literal::
-
- keyword = *checkqeq* or *lgvdw* or *safezone* or *mincap*
- *checkqeq* value = *yes* or *no* = whether or not to require qeq/reax fix
- *lgvdw* value = *yes* or *no* = whether or not to use a low gradient vdW correction
- *safezone* = factor used for array allocation
- *mincap* = minimum size for array allocation
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style reax/c NULL
- pair_style reax/c controlfile checkqeq no
- pair_style reax/c NULL lgvdw yes
- pair_style reax/c NULL safezone 1.6 mincap 100
- pair_coeff * * ffield.reax C H O N
-
-Description
-"""""""""""
-
-Style *reax/c* computes the ReaxFF potential of van Duin, Goddard and
-co-workers. ReaxFF uses distance-dependent bond-order functions to
-represent the contributions of chemical bonding to the potential
-energy. There is more than one version of ReaxFF. The version
-implemented in LAMMPS uses the functional forms documented in the
-supplemental information of the following paper: :ref:`(Chenoweth et al., 2008) <Chenoweth_2008>`. The version integrated into LAMMPS matches
-the most up-to-date version of ReaxFF as of summer 2010. For more
-technical details about the pair reax/c implementation of ReaxFF, see
-the :ref:`(Aktulga) <Aktulga>` paper.
-
-The *reax/c/kk* style is a Kokkos version of the ReaxFF potential that is
-derived from the *reax/c* style. The Kokkos version can run on GPUs and
-can also use OpenMP multithreading. For more information about the Kokkos package,
-see :ref:`Section_packages <kokkos>` and :doc:`Section_accelerate <accelerate_kokkos>`.
-One important consideration when using the *reax/c/kk* style is the choice of either
-half or full neighbor lists. This setting can be changed using the Kokkos :doc:`package <package>`
-command.
-
-The *reax/c* style differs from the :doc:`pair_style reax <pair_reax>`
-command in the lo-level implementation details. The *reax* style is a
-Fortran library, linked to LAMMPS. The *reax/c* style was initially
-implemented as stand-alone C code and is now integrated into LAMMPS as
-a package.
-
-LAMMPS provides several different versions of ffield.reax in its
-potentials dir, each called potentials/ffield.reax.label. These are
-documented in potentials/README.reax. The default ffield.reax
-contains parameterizations for the following elements: C, H, O, N.
-
-The format of these files is identical to that used originally by van
-Duin. We have tested the accuracy of *pair_style reax/c* potential
-against the original ReaxFF code for the systems mentioned above. You
-can use other ffield files for specific chemical systems that may be
-available elsewhere (but note that their accuracy may not have been
-tested).
-
-.. note::
-
- We do not distribute a wide variety of ReaxFF force field files
- with LAMMPS. Adri van Duin's group at PSU is the central repository
- for this kind of data as they are continuously deriving and updating
- parameterizations for different classes of materials. You can submit
- a contact request at the Materials Computation Center (MCC) website
- `https://www.mri.psu.edu/materials-computation-center/connect-mcc <https://www.mri.psu.edu/materials-computation-center/connect-mcc>`_,
- describing the material(s) you are interested in modeling with ReaxFF.
- They can tell
- you what is currently available or what it would take to create a
- suitable ReaxFF parameterization.
-
-The *cfile* setting can be specified as NULL, in which case default
-settings are used. A control file can be specified which defines
-values of control variables. Some control variables are
-global parameters for the ReaxFF potential. Others define certain
-performance and output settings.
-Each line in the control file specifies the value for
-a control variable. The format of the control file is described
-below.
-
-.. note::
-
- The LAMMPS default values for the ReaxFF global parameters
- correspond to those used by Adri van Duin's stand-alone serial
- code. If these are changed by setting control variables in the control
- file, the results from LAMMPS and the serial code will not agree.
-
-Two examples using *pair_style reax/c* are provided in the examples/reax
-sub-directory, along with corresponding examples for
-:doc:`pair_style reax <pair_reax>`.
-
-Use of this pair style requires that a charge be defined for every
-atom. See the :doc:`atom_style <atom_style>` and
-:doc:`read_data <read_data>` commands for details on how to specify
-charges.
-
-The ReaxFF parameter files provided were created using a charge
-equilibration (QEq) model for handling the electrostatic interactions.
-Therefore, by default, LAMMPS requires that the :doc:`fix qeq/reax <fix_qeq_reax>` command be used with *pair_style reax/c*
-when simulating a ReaxFF model, to equilibrate charge each timestep.
-Using the keyword *checkqeq* with the value *no*
-turns off the check for *fix qeq/reax*\ ,
-allowing a simulation to be run without charge equilibration.
-In this case, the static charges you
-assign to each atom will be used for computing the electrostatic
-interactions in the system.
-See the :doc:`fix qeq/reax <fix_qeq_reax>` command for details.
-
-Using the optional keyword *lgvdw* with the value *yes* turns on
-the low-gradient correction of the ReaxFF/C for long-range
-London Dispersion, as described in the :ref:`(Liu) <Liu_2011>` paper. Force field
-file *ffield.reax.lg* is designed for this correction, and is trained
-for several energetic materials (see "Liu"). When using lg-correction,
-recommended value for parameter *thb* is 0.01, which can be set in the
-control file. Note: Force field files are different for the original
-or lg corrected pair styles, using wrong ffield file generates an error message.
-
-Optional keywords *safezone* and *mincap* are used for allocating
-reax/c arrays. Increasing these values can avoid memory problems, such
-as segmentation faults and bondchk failed errors, that could occur under
-certain conditions. These keywords aren't used by the Kokkos version, which
-instead uses a more robust memory allocation scheme that checks if the sizes of
-the arrays have been exceeded and automatically allocates more memory.
-
-The thermo variable *evdwl* stores the sum of all the ReaxFF potential
-energy contributions, with the exception of the Coulombic and charge
-equilibration contributions which are stored in the thermo variable
-*ecoul*\ . The output of these quantities is controlled by the
-:doc:`thermo <thermo>` command.
-
-This pair style tallies a breakdown of the total ReaxFF potential
-energy into sub-categories, which can be accessed via the :doc:`compute pair <compute_pair>` command as a vector of values of length 14.
-The 14 values correspond to the following sub-categories (the variable
-names in italics match those used in the original FORTRAN ReaxFF code):
-
-1. *eb* = bond energy
-2. *ea* = atom energy
-3. *elp* = lone-pair energy
-4. *emol* = molecule energy (always 0.0)
-5. *ev* = valence angle energy
-6. *epen* = double-bond valence angle penalty
-7. *ecoa* = valence angle conjugation energy
-8. *ehb* = hydrogen bond energy
-9. *et* = torsion energy
-10. *eco* = conjugation energy
-11. *ew* = van der Waals energy
-12. *ep* = Coulomb energy
-13. *efi* = electric field energy (always 0.0)
-14. *eqeq* = charge equilibration energy
-
-To print these quantities to the log file (with descriptive column
-headings) the following commands could be included in an input script:
-
-.. parsed-literal::
-
- compute reax all pair reax/c
- variable eb equal c_reax[1]
- variable ea equal c_reax[2]
- ...
- variable eqeq equal c_reax[14]
- thermo_style custom step temp epair v_eb v_ea ... v_eqeq
-
-Only a single pair_coeff command is used with the *reax/c* style which
-specifies a ReaxFF 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 indices = ReaxFF elements
-
-The filename is the ReaxFF potential file. Unlike for the *reax*
-pair style, any filename can be used.
-
-In the ReaxFF potential file, near the top, after the general
-parameters, is the atomic parameters section that contains element
-names, each with a couple dozen numeric parameters. If there are M
-elements specified in the *ffield* file, think of these as numbered 1
-to M. Each of the N indices you specify for the N atom types of LAMMPS
-atoms must be an integer from 1 to M. Atoms with LAMMPS type 1 will
-be mapped to whatever element you specify as the first index value,
-etc. If a mapping value is specified as NULL, the mapping is not
-performed. This can be used when the *reax/c* style is used as part
-of the *hybrid* pair style. The NULL values are placeholders for atom
-types that will be used with other potentials.
-
-As an example, say your LAMMPS simulation has 4 atom types and the
-elements are ordered as C, H, O, N in the *ffield* file. If you want
-the LAMMPS atom type 1 and 2 to be C, type 3 to be N, and type 4 to be
-H, you would use the following pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * ffield.reax C C N H
-
-
-----------
-
-
-The format of a line in the control file is as follows:
-
-.. parsed-literal::
-
- variable_name value
-
-and it may be followed by an "!" character and a trailing comment.
-
-If the value of a control variable is not specified, then default
-values are used. What follows is the list of variables along with a
-brief description of their use and default values.
-
-simulation_name: Output files produced by *pair_style reax/c* carry
-this name + extensions specific to their contents. Partial energies
-are reported with a ".pot" extension, while the trajectory file has
-".trj" extension.
-
-tabulate_long_range: To improve performance, long range interactions
-can optionally be tabulated (0 means no tabulation). Value of this
-variable denotes the size of the long range interaction table. The
-range from 0 to long range cutoff (defined in the *ffield* file) is
-divided into *tabulate_long_range* points. Then at the start of
-simulation, we fill in the entries of the long range interaction table
-by computing the energies and forces resulting from van der Waals and
-Coulomb interactions between every possible atom type pairs present in
-the input system. During the simulation we consult to the long range
-interaction table to estimate the energy and forces between a pair of
-atoms. Linear interpolation is used for estimation. (default value =
-0)
-
-energy_update_freq: Denotes the frequency (in number of steps) of
-writes into the partial energies file. (default value = 0)
-
-nbrhood_cutoff: Denotes the near neighbors cutoff (in Angstroms)
-regarding the bonded interactions. (default value = 5.0)
-
-hbond_cutoff: Denotes the cutoff distance (in Angstroms) for hydrogen
-bond interactions.(default value = 7.5. Value of 0.0 turns off hydrogen
- bonds)
-
-bond_graph_cutoff: is the threshold used in determining what is a
-physical bond, what is not. Bonds and angles reported in the
-trajectory file rely on this cutoff. (default value = 0.3)
-
-thb_cutoff: cutoff value for the strength of bonds to be considered in
-three body interactions. (default value = 0.001)
-
-thb_cutoff_sq: cutoff value for the strength of bond order products
-to be considered in three body interactions. (default value = 0.00001)
-
-write_freq: Frequency of writes into the trajectory file. (default
-value = 0)
-
-traj_title: Title of the trajectory - not the name of the trajectory
-file.
-
-atom_info: 1 means print only atomic positions + charge (default = 0)
-
-atom_forces: 1 adds net forces to atom lines in the trajectory file
-(default = 0)
-
-atom_velocities: 1 adds atomic velocities to atoms line (default = 0)
-
-bond_info: 1 prints bonds in the trajectory file (default = 0)
-
-angle_info: 1 prints angles in the trajectory file (default = 0)
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-mix, shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the USER-REAXC package. It is only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-The ReaxFF potential files provided with LAMMPS in the potentials
-directory are parameterized for real :doc:`units <units>`. You can use
-the ReaxFF potential with any LAMMPS units, but you would need to
-create your own potential file with coefficients listed in the
-appropriate units if your simulation doesn't use "real" units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`fix qeq/reax <fix_qeq_reax>`, :doc:`fix reax/c/bonds <fix_reax_bonds>`, :doc:`fix reax/c/species <fix_reaxc_species>`, :doc:`pair_style reax <pair_reax>`
-
-Default
-"""""""
-
-The keyword defaults are checkqeq = yes, lgvdw = no, safezone = 1.2,
-mincap = 50.
-
-
-----------
-
-
-.. _Chenoweth_2008:
-
-
-
-**(Chenoweth_2008)** Chenoweth, van Duin and Goddard,
-Journal of Physical Chemistry A, 112, 1040-1053 (2008).
-
-.. _Aktulga:
-
-
-
-(Aktulga) Aktulga, Fogarty, Pandit, Grama, Parallel Computing, 38,
-245-259 (2012).
-
-.. _Liu_2011:
-
-
-
-**(Liu)** L. Liu, Y. Liu, S. V. Zybin, H. Sun and W. A. Goddard, Journal
-of Physical Chemistry A, 115, 11016-11022 (2011).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_resquared.txt b/doc/html/_sources/pair_resquared.txt
deleted file mode 100644
index 3c6578727..000000000
--- a/doc/html/_sources/pair_resquared.txt
+++ /dev/null
@@ -1,259 +0,0 @@
-.. index:: pair_style resquared
-
-pair_style resquared command
-============================
-
-pair_style resquared/gpu command
-================================
-
-pair_style resquared/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style resquared cutoff
-
-* cutoff = global cutoff for interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style resquared 10.0
- pair_coeff * * 1.0 1.0 1.7 3.4 3.4 1.0 1.0 1.0
-
-Description
-"""""""""""
-
-Style *resquared* computes the RE-squared anisotropic interaction
-:ref:`(Everaers) <Everaers>`, :ref:`(Babadi) <Babadi>` between pairs of
-ellipsoidal and/or spherical Lennard-Jones particles. For ellipsoidal
-interactions, the potential considers the ellipsoid as being comprised
-of small spheres of size sigma. LJ particles are a single sphere of
-size sigma. The distinction is made to allow the pair style to make
-efficient calculations of ellipsoid/solvent interactions.
-
-Details for the equations used are given in the references below and
-in `this supplementary document <PDF/pair_resquared_extra.pdf>`_.
-
-Use of this pair style requires the NVE, NVT, or NPT fixes with the
-*asphere* extension (e.g. :doc:`fix nve/asphere <fix_nve_asphere>`) in
-order to integrate particle rotation. Additionally, :doc:`atom_style ellipsoid <atom_style>` should be used since it defines the
-rotational state and the size and shape of each ellipsoidal particle.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* A12 = Energy Prefactor/Hamaker constant (energy units)
-* sigma = atomic interaction diameter (distance units)
-* epsilon_i_a = relative well depth of type I for side-to-side interactions
-* epsilon_i_b = relative well depth of type I for face-to-face interactions
-* epsilon_i_c = relative well depth of type I for end-to-end interactions
-* epsilon_j_a = relative well depth of type J for side-to-side interactions
-* epsilon_j_b = relative well depth of type J for face-to-face interactions
-* epsilon_j_c = relative well depth of type J for end-to-end interactions
-* cutoff (distance units)
-
-The parameters used depend on the type of the interacting particles,
-i.e. ellipsoids or LJ spheres. The type of a particle is determined
-by the diameters specified for its 3 shape paramters. If all 3 shape
-parameters = 0.0, then the particle is treated as an LJ sphere. The
-epsilon_i_* or epsilon_j_* parameters are ignored for LJ spheres. If
-the 3 shape paraemters are > 0.0, then the particle is treated as an
-ellipsoid (even if the 3 parameters are equal to each other).
-
-A12 specifies the energy prefactor which depends on the types of the
-two interacting particles.
-
-For ellipsoid/ellipsoid interactions, the interaction is computed by
-the formulas in the supplementary docuement referenced above. A12 is
-the Hamaker constant as described in :ref:`(Everaers) <Everaers>`. In LJ
-units:
-
-.. image:: Eqs/pair_resquared.jpg
- :align: center
-
-where rho gives the number density of the spherical particles
-composing the ellipsoids and epsilon_LJ determines the interaction
-strength of the spherical particles.
-
-For ellipsoid/LJ sphere interactions, the interaction is also computed
-by the formulas in the supplementary docuement referenced above. A12
-has a modifed form (see `here <PDF/pair_resquared_extra.pdf>`_ for
-details):
-
-.. image:: Eqs/pair_resquared2.jpg
- :align: center
-
-For ellipsoid/LJ sphere interactions, a correction to the distance-
-of-closest approach equation has been implemented to reduce the error
-from two particles of disparate sizes; see `this supplementary document <PDF/pair_resquared_extra.pdf>`_.
-
-For LJ sphere/LJ sphere interactions, the interaction is computed
-using the standard Lennard-Jones formula, which is much cheaper to
-compute than the ellipsoidal formulas. A12 is used as epsilon in the
-standard LJ formula:
-
-.. image:: Eqs/pair_resquared3.jpg
- :align: center
-
-and the specified *sigma* is used as the sigma in the standard LJ
-formula.
-
-When one of both of the interacting particles are ellipsoids, then
-*sigma* specifies the diameter of the continuous distribution of
-constituent particles within each ellipsoid used to model the
-RE-squared potential. Note that this is a different meaning for
-*sigma* than the :doc:`pair_style gayberne <pair_gayberne>` potential
-uses.
-
-The epsilon_i and epsilon_j coefficients are defined for atom types,
-not for pairs of atom types. Thus, in a series of pair_coeff
-commands, they only need to be specified once for each atom type.
-
-Specifically, if any of epsilon_i_a, epsilon_i_b, epsilon_i_c are
-non-zero, the three values are assigned to atom type I. If all the
-epsilon_i values are zero, they are ignored. If any of epsilon_j_a,
-epsilon_j_b, epsilon_j_c are non-zero, the three values are assigned
-to atom type J. If all three epsilon_i values are zero, they are
-ignored. Thus the typical way to define the epsilon_i and epsilon_j
-coefficients is to list their values in "pair_coeff I J" commands when
-I = J, but set them to 0.0 when I != J. If you do list them when I !=
-J, you should insure they are consistent with their values in other
-pair_coeff commands.
-
-Note that if this potential is being used as a sub-style of
-:doc:`pair_style hybrid <pair_hybrid>`, and there is no "pair_coeff I I"
-setting made for RE-squared for a particular type I (because I-I
-interactions are computed by another hybrid pair potential), then you
-still need to insure the epsilon a,b,c coefficients are assigned to
-that type in a "pair_coeff I J" command.
-
-For large uniform molecules it has been shown that the epsilon_*_*
-energy parameters are approximately representable in terms of local
-contact curvatures :ref:`(Everaers) <Everaers>`:
-
-.. image:: Eqs/pair_resquared4.jpg
- :align: center
-
-where a, b, and c give the particle diameters.
-
-The last coefficient is optional. If not specified, the global cutoff
-specified in the pair_style command is used.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 can be mixed, but only for sphere pairs. The
-default mix value is *geometric*\ . See the "pair_modify" command for
-details. Other type pairs cannot be mixed, due to the different
-meanings of the energy prefactors used to calculate the interactions
-and the implicit dependence of the ellipsoid-sphere interaction on the
-equation for the Hamaker constant presented here. Mixing of sigma and
-epsilon followed by calculation of the energy prefactors using the
-equations above is recommended.
-
-This pair styles supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the Lennard-Jones portion of the pair
-interaction, but only for sphere-sphere interactions. There is no
-shifting performed for ellipsoidal interactions due to the anisotropic
-dependence of the interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords of the :doc:`run_style command <run_style>`.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This style is part of the ASPHERE package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This pair style requires that atoms be ellipsoids as defined by the
-:doc:`atom_style ellipsoid <atom_style>` command.
-
-Particles acted on by the potential can be finite-size aspherical or
-spherical particles, or point particles. Spherical particles have all
-3 of their shape parameters equal to each other. Point particles have
-all 3 of their shape parameters equal to 0.0.
-
-The distance-of-closest-approach approximation used by LAMMPS becomes
-less accurate when high-aspect ratio ellipsoids are used.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`fix nve/asphere <fix_nve_asphere>`,
-:doc:`compute temp/asphere <compute_temp_asphere>`, :doc:`pair_style gayberne <pair_gayberne>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Everaers:
-
-
-
-**(Everaers)** Everaers and Ejtehadi, Phys Rev E, 67, 041710 (2003).
-
-.. _Babadi:
-
-
-
-**(Berardi)** Babadi, Ejtehadi, Everaers, J Comp Phys, 219, 770-779 (2006).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_sdk.txt b/doc/html/_sources/pair_sdk.txt
deleted file mode 100644
index 3492c4e4d..000000000
--- a/doc/html/_sources/pair_sdk.txt
+++ /dev/null
@@ -1,192 +0,0 @@
-.. index:: pair_style lj/sdk
-
-pair_style lj/sdk command
-=========================
-
-pair_style lj/sdk/gpu command
-=============================
-
-pair_style lj/sdk/kk command
-============================
-
-pair_style lj/sdk/omp command
-=============================
-
-pair_style lj/sdk/coul/long command
-===================================
-
-pair_style lj/sdk/coul/long/gpu command
-=======================================
-
-pair_style lj/sdk/coul/long/omp command
-=======================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *lj/sdk* or *lj/sdk/coul/long*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *lj/sdk* args = cutoff
- cutoff = global cutoff for Lennard Jones interactions (distance units)
- *lj/sdk/coul/long* args = cutoff (cutoff2)
- cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
- cutoff2 = global cutoff for Coulombic (optional) (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/sdk 2.5
- pair_coeff 1 1 lj12_6 1 1.1 2.8
-
-.. parsed-literal::
-
- pair_style lj/sdk/coul/long 10.0
- pair_style lj/sdk/coul/long 10.0 12.0
- pair_coeff 1 1 lj9_6 100.0 3.5 12.0
-
-Description
-"""""""""""
-
-The *lj/sdk* styles compute a 9/6, 12/4, or 12/6 Lennard-Jones potential,
-given by
-
-.. image:: Eqs/pair_cmm.jpg
- :align: center
-
-as required for the SDK Coarse-grained MD parametrization discussed in
-:ref:`(Shinoda) <Shinoda>` and :ref:`(DeVane) <DeVane>`. Rc is the cutoff.
-
-Style *lj/sdk/coul/long* computes the adds Coulombic interactions
-with an additional damping factor applied so it can be used in
-conjunction with the :doc:`kspace_style <kspace_style>` command and
-its *ewald* or *pppm* or *pppm/cg* option. The Coulombic cutoff
-specified for this style means that pairwise interactions within
-this distance are computed directly; interactions outside that
-distance are computed in reciprocal space.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* cg_type (lj9_6, lj12_4, or lj12_6)
-* epsilon (energy units)
-* sigma (distance units)
-* cutoff1 (distance units)
-
-Note that sigma is defined in the LJ formula as the zero-crossing
-distance for the potential, not as the energy minimum. The prefactors
-are chosen so that the potential minimum is at -epsilon.
-
-The latter 2 coefficients are optional. If not specified, the global
-LJ and Coulombic cutoffs specified in the pair_style command are used.
-If only one cutoff is specified, it is used as the cutoff for both LJ
-and Coulombic interactions for this type pair. If both coefficients
-are specified, they are used as the LJ and Coulombic cutoffs for this
-type pair.
-
-For *lj/sdk/coul/long* only the LJ cutoff can be specified since a
-Coulombic cutoff cannot be specified for an individual I,J type pair.
-All type pairs use the same global Coulombic cutoff specified in the
-pair_style command.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, and rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the epsilon and sigma coefficients
-and cutoff distance for all of the lj/sdk pair styles *cannot* be mixed,
-since different pairs may have different exponents. So all parameters
-for all pairs have to be specified explicitly through the "pair_coeff"
-command. Defining then in a data file is also not supported, due to
-limitations of that file format.
-
-All of the lj/sdk pair styles support the
-:doc:`pair_modify <pair_modify>` shift option for the energy of the
-Lennard-Jones portion of the pair interaction.
-
-The *lj/sdk/coul/long* pair styles support the
-:doc:`pair_modify <pair_modify>` table option since they can tabulate
-the short-range portion of the long-range Coulombic interaction.
-
-All of the lj/sdk pair styles write their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do
-not need to be specified in an input script that reads a restart file.
-
-The lj/sdk and lj/cut/coul/long pair styles do not support
-the use of the *inner*\ , *middle*\ , and *outer* keywords of the :doc:`run_style respa <run_style>` command.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-All of the lj/sdk pair styles are part of the USER-CG-CMM package.
-The *lj/sdk/coul/long* style also requires the KSPACE package to be
-built (which is enabled by default). They are only enabled if LAMMPS
-was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`angle_style sdk <angle_sdk>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Shinoda:
-
-
-
-**(Shinoda)** Shinoda, DeVane, Klein, Mol Sim, 33, 27 (2007).
-
-.. _DeVane:
-
-
-
-**(DeVane)** Shinoda, DeVane, Klein, Soft Matter, 4, 2453-2462 (2008).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_smd_hertz.txt b/doc/html/_sources/pair_smd_hertz.txt
deleted file mode 100644
index 0b238c67f..000000000
--- a/doc/html/_sources/pair_smd_hertz.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-.. index:: pair_style smd/hertz
-
-pair_style smd/hertz command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style smd/hertz scale_factor
-
-Examples
-""""""""
-
-pair_style smd/hertz 1.0
-pair_coeff 1 1 <contact_stiffness>
-
-Description
-"""""""""""
-
-The *smd/hertz* style calculates contact forces between SPH particles belonging to different physical bodies.
-
-The contact forces are calculated using a Hertz potential, which evaluates the overlap between two particles
-(whose spatial extents are defined via its contact radius).
-The effect is that a particles cannot penetrate into each other.
-The parameter <contact_stiffness> has units of pressure and should equal roughly one half
-of the Young's modulus (or bulk modulus in the case of fluids) of the material model associated with the SPH particles.
-
-The parameter *scale_factor* can be used to scale the particles' contact radii. This can be useful to control how close
-particles can approach each other. Usually, *scale_factor*\ =1.0.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-No mixing is performed automatically.
-Currently, no part of USER-SMD supports restarting nor minimization.
-rRESPA does not apply to this pair style.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_smd_tlsph.txt b/doc/html/_sources/pair_smd_tlsph.txt
deleted file mode 100644
index 355701a2a..000000000
--- a/doc/html/_sources/pair_smd_tlsph.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-.. index:: pair_style smd/tlsph
-
-pair_style smd/tlsph command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style smd/tlsph args
-
-Examples
-""""""""
-
-pair_style smd/tlsph
-
-Description
-"""""""""""
-
-The *smd/tlsph* style computes particle interactions according to continuum mechanics constitutive laws and a Total-Lagrangian Smooth-Particle Hydrodynamics algorithm.
-
-This pair style is invoked with the following command:
-
-.. parsed-literal::
-
- pair_style smd/tlsph
- pair_coeff i j *COMMON rho0 E nu Q1 Q2 hg Cp &
- *END
-
-Here, *i* and *j* denote the *LAMMPS* particle types for which this pair style is
-defined. Note that *i* and *j* must be equal, i.e., no *tlsph* cross interactions
-between different particle types are allowed.
-In contrast to the usual *LAMMPS* *pair coeff* definitions, which are given solely a
-number of floats and integers, the *tlsph* *pair coeff* definition is organised using
-keywords. These keywords mark the beginning of different sets of parameters for particle properties,
-material constitutive models, and damage models. The *pair coeff* line must be terminated with
-the **END* keyword. The use the line continuation operator *&* is recommended. A typical
-invocation of the *tlsph* for a solid body would consist of an equation of state for computing
-the pressure (the diagonal components of the stress tensor), and a material model to compute shear
-stresses (the off-diagonal components of the stress tensor). Damage and failure models can also be added.
-
-Please see the `SMD user guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ for a complete listing of the possible keywords and material models.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-No mixing is performed automatically.
-Currently, no part of USER-SMD supports restarting nor minimization.
-rRESPA does not apply to this pair style.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_smd_triangulated_surface.txt b/doc/html/_sources/pair_smd_triangulated_surface.txt
deleted file mode 100644
index 8221ecc1c..000000000
--- a/doc/html/_sources/pair_smd_triangulated_surface.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-.. index:: pair_style smd/tri_surface
-
-pair_style smd/tri_surface command
-==================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style smd/tri_surface scale_factor
-
-Examples
-""""""""
-
-pair_style smd/tri_surface 1.0
-pair_coeff 1 1 <contact_stiffness>
-
-Description
-"""""""""""
-
-The *smd/tri_surface* style calculates contact forces between SPH particles and a rigid wall boundary defined via the
-:doc:`smd/wall_surface <fix_smd_wall_surface>` fix.
-
-The contact forces are calculated using a Hertz potential, which evaluates the overlap between a particle
-(whose spatial extents are defined via its contact radius) and the triangle.
-The effect is that a particle cannot penetrate into the triangular surface.
-The parameter <contact_stiffness> has units of pressure and should equal roughly one half
-of the Young's modulus (or bulk modulus in the case of fluids) of the material model associated with the SPH particle
-
-The parameter *scale_factor* can be used to scale the particles' contact radii. This can be useful to control how close
-particles can approach the triangulated surface. Usually, *scale_factor*\ =1.0.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-No mixing is performed automatically.
-Currently, no part of USER-SMD supports restarting nor minimization.
-rRESPA does not apply to this pair style.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_smd_ulsph.txt b/doc/html/_sources/pair_smd_ulsph.txt
deleted file mode 100644
index b5948af7d..000000000
--- a/doc/html/_sources/pair_smd_ulsph.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-.. index:: pair_style smd/ulsph
-
-pair_style smd/ulsph command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style smd/ulsph args
-
-* these keywords must be given
-keyword = **DENSITY_SUMMATION* or **DENSITY_CONTINUITY* and **VELOCITY_GRADIENT* or **NO_VELOCITY_GRADIENT* and **GRADIENT_CORRECTION* or **NO_GRADIENT_CORRECTION*
-
-Examples
-""""""""
-
-pair_style smd/ulsph *DENSITY_CONTINUITY *VELOCITY_GRADIENT *NO_GRADIENT_CORRECTION
-
-Description
-"""""""""""
-
-The *smd/ulsph* style computes particle interactions according to continuum mechanics constitutive laws and an updated Lagrangian Smooth-Particle Hydrodynamics algorithm.
-
-This pair style is invoked similar to the following command:
-
-.. parsed-literal::
-
- pair_style smd/ulsph *DENSITY_CONTINUITY *VELOCITY_GRADIENT *NO_GRADIENT_CORRECTION
- pair_coeff i j *COMMON rho0 c0 Q1 Cp hg &
- *END
-
-Here, *i* and *j* denote the *LAMMPS* particle types for which this pair style is
-defined. Note that *i* and *j* can be different, i.e., *ulsph* cross interactions
-between different particle types are allowed. However, *i*\ --\ *i* respectively *j*\ --\ *j* pair_coeff lines have to preceed a cross interaction.
-In contrast to the usual *LAMMPS* *pair coeff* definitions, which are given solely a
-number of floats and integers, the *ulsph* *pair coeff* definition is organised using
-keywords. These keywords mark the beginning of different sets of parameters for particle properties,
-material constitutive models, and damage models. The *pair coeff* line must be terminated with
-the **END* keyword. The use the line continuation operator *&* is recommended. A typical
-invocation of the *ulsph* for a solid body would consist of an equation of state for computing
-the pressure (the diagonal components of the stress tensor), and a material model to compute shear
-stresses (the off-diagonal components of the stress tensor).
-
-Note that the use of *GRADIENT_CORRECTION can lead to severe numerical instabilities. For a general fluid simulation, *NO_GRADIENT_CORRECTION is recommended.
-
-Please see the `SMD user guide <USER/smd/SMD_LAMMPS_userguide.pdf>`_ for a complete listing of the possible keywords and material models.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-No mixing is performed automatically.
-Currently, no part of USER-SMD supports restarting nor minimization.
-rRESPA does not apply to this pair style.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This fix is part of the USER-SMD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>`
-section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_smtbq.txt b/doc/html/_sources/pair_smtbq.txt
deleted file mode 100644
index 770b9c22b..000000000
--- a/doc/html/_sources/pair_smtbq.txt
+++ /dev/null
@@ -1,297 +0,0 @@
-.. index:: pair_style smtbq
-
-pair_style smtbq command
-========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style smtbq
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style smtbq
- pair_coeff * * ffield.smtbq.Al2O3 O Al
-
-Description
-"""""""""""
-
-This pair stylecomputes a variable charge SMTB-Q (Second-Moment
-tight-Binding QEq) potential as described in :ref:`SMTB-Q_1 <SMTB-Q_1>` and
-:ref:`SMTB-Q_2 <SMTB-Q_2>`. Briefly, the energy of metallic-oxygen systems
-is given by three contributions:
-
-.. image:: Eqs/pair_smtbq1.jpg
- :align: center
-
-where *E<sub>tot</sub>* is the total potential energy of the system,
-*E<sub>ES</sub>* is the electrostatic part of the total energy,
-*E<sub>OO</sub>* is the interaction between oxygens and
-*E<sub>MO</sub>* is a short-range interaction between metal and oxygen
-atoms. This interactions depend on interatomic distance
-*r<sub>ij</sub>* and/or the charge *Q<sub>i</sub>* of atoms
-*i*\ . Cut-off function enables smooth convergence to zero interaction.
-
-The parameters appearing in the upper expressions are set in the
-ffield.SMTBQ.Syst file where Syst corresponds to the selected system
-(e.g. field.SMTBQ.Al2O3). Exemples for TiO<sub>2</sub>,
-Al<sub>2</sub>O<sub>3</sub> are provided. A single pair_coeff command
-is used with the SMTBQ styles which provides the path to the potential
-file with parameters for needed elements. These are mapped to LAMMPS
-atom types by specifying additional arguments after the potential
-filename in the pair_coeff command. Note that atom type 1 must always
-correspond to oxygen atoms. As an example, to simulate a TiO2 system,
-atom type 1 has to be oxygen and atom type 2 Ti. The following
-pair_coeff command should then be used:
-
-.. parsed-literal::
-
- pair_coeff * * PathToLammps/potentials/ffield.smtbq.TiO2 O Ti
-
-The electrostatic part of the energy consists of two components
-
-self-energy of atom *i* in the form of a second order charge dependent
-polynomial and a long-range Coulombic electrostatic interaction. The
-latter uses the wolf summation method described in :ref:`Wolf <Wolf>`,
-spherically truncated at a longer cutoff, *R<sub>coul</sub>*\ . The
-charge of each ion is modeled by an orbital Slater which depends on
-the principal quantum number (\ *n*\ ) of the outer orbital shared by the
-ion.
-
-Interaction between oxygen, *E<sub>OO</sub>*\ , consists of two parts,
-an attractive and a repulsive part. The attractive part is effective
-only at short range (< r<sub>2</sub><sup>OO</sup>). The attractive
-contribution was optimized to study surfaces reconstruction
-(e.g. :ref:`SMTB-Q_2 <SMTB-Q_2>` in TiO<sub>2</sub>) and is not necessary
-for oxide bulk modeling. The repulsive part is the Pauli interaction
-between the electron clouds of oxygen. The Pauli repulsion and the
-coulombic electrostatic interaction have same cut off value. In the
-ffield.SMTBQ.Syst, the keyword *'buck'* allows to consider only the
-repulsive O-O interactions. The keyword *'buckPlusAttr'* allows to
-consider the repulsive and the attractive O-O interactions.
-
-The short-range interaction between metal-oxygen, *E<sub>MO</sub>* is
-based on the second moment approximation of the density of states with
-a N-body potential for the band energy term,
-*E<sup>i</sup><sub>cov</sub>*\ , and a Born-Mayer type repulsive terms
-as indicated by the keyword *'second_moment'* in the
-ffield.SMTBQ.Syst. The energy band term is given by:
-
-.. image:: Eqs/pair_smtbq2.jpg
- :align: center
-
-where *&#951<sub>i</sub>* is the stoichiometry of atom *i*\ ,
-*&#948Q<sub>i</sub>* is the charge delocalization of atom *i*\ ,
-compared to its formal charge
-*Q<sup>F</sup><sub>i</sub>*\ . n<sub>0</sub>, the number of hybridized
-orbitals, is calculated with to the atomic orbitals shared
-*d<sub>i</sub>* and the stoichiometry
-*&#951<sub>i</sub>*\ . *r<sub>c1</sub>* and *r<sub>c2</sub>* are the two
-cutoff radius around the fourth neighbors in the cutoff function.
-
-In the formalism used here, *&#958<sup>0</sup>* is the energy
-parameter. *&#958<sup>0</sup>* is in tight-binding approximation the
-hopping integral between the hybridized orbitals of the cation and the
-anion. In the literature we find many ways to write the hopping
-integral depending on whether one takes the point of view of the anion
-or cation. These are equivalent vision. The correspondence between the
-two visions is explained in appendix A of the article in the
-SrTiO<sub>3</sub> :ref:`SMTB-Q_3 <SMTB-Q_3>` (parameter *&#946* shown in
-this article is in fact the *&#946<sub>O</sub>*\ ). To summarize the
-relationship between the hopping integral *&#958<sup>0</sup>* and the
-others, we have in an oxide C<sub>n</sub>O<sub>m</sub> the following
-relationship:
-
-.. image:: Eqs/pair_smtbq3.jpg
- :align: center
-
-Thus parameter &#956, indicated above, is given by : &#956 = (&#8730n
-+ &#8730m) &#8260 2
-
-The potential offers the possibility to consider the polarizability of
-the electron clouds of oxygen by changing the slater radius of the
-charge density around the oxygens through the parameters *rBB, rB and
-rS* in the ffield.SMTBQ.Syst. This change in radius is performed
-according to the method developed by E. Maras
-:ref:`SMTB-Q_2 <SMTB-Q_2>`. This method needs to determine the number of
-nearest neighbors around the oxygen. This calculation is based on
-first (\ *r<sub>1n</sub>*\ ) and second (\ *r<sub>2n</sub>*\ ) distances
-neighbors.
-
-The SMTB-Q potential is a variable charge potential. The equilibrium
-charge on each atom is calculated by the electronegativity
-equalization (QEq) method. See :ref:`Rick <Rick>` for further detail. One
-can adjust the frequency, the maximum number of iterative loop and the
-convergence of the equilibrium charge calculation. To obtain the
-energy conservation in NVE thermodynamic ensemble, we recommend to use
-a convergence parameter in the interval 10<sup>-5</sup> -
-10<sup>-6</sup> eV.
-
-The ffield.SMTBQ.Syst files are provided for few systems. They consist
-of nine parts and the lines beginning with '#' are comments (note that
-the number of comment lines matter). The first sections are on the
-potential parameters and others are on the simulation options and
-might be modified. Keywords are character type and must be enclosed in
-quotation marks ('').
-
-1) Number of different element in the oxide:
-
-* N<sub>elem</sub>= 2 or 3
-* Divided line
-
-2) Atomic parameters
-
-For the anion (oxygen)
-
-* Name of element (char) and stoichiometry in oxide
-* Formal charge and mass of element
-* Principal quantic number of outer orbital (\ *n*\ ), electronegativity (\ *&#967<sup>0</sup><sub>i</simulationub>*\ ) and hardness (\ *J<sup>0</sup><sub>i</sub>*\ )
-* Ionic radius parameters : max coordination number (\ *coordBB* = 6 by default), bulk coordination number *(coordB)*\ , surface coordination number *(coordS)* and *rBB, rB and rS* the slater radius for each coordination number. (<b>note : If you don't want to change the slater radius, use three identical radius values</b>)
-* Number of orbital shared by the element in the oxide (\ *d<sub>i</sub>*\ )
-* Divided line
-
-For each cations (metal):
-
-* Name of element (char) and stoichiometry in oxide
-* Formal charge and mass of element
-* Number of electron in outer orbital *(ne)*\ , electronegativity (\ *&#967<sup>0</sup><sub>i</simulationub>*\ ), hardness (\ *J<sup>0</sup><sub>i</sub>*\ ) and *r<sub>Salter</sub>* the slater radius for the cation.
-* Number of orbitals shared by the elements in the oxide (\ *d<sub>i</sub>*\ )
-* Divided line
-
-3) Potential parameters:
-
-* Keyword for element1, element2 and interaction potential ('second_moment' or 'buck' or 'buckPlusAttr') between element 1 and 2. If the potential is 'second_moment', specify 'oxide' or 'metal' for metal-oxygen or metal-metal interactions respectively.
-* Potential parameter: <pre><br/> If type of potential is 'second_moment' : *A (eV)*\ , *p*\ , *&#958<sup>0</sup>* (eV) and *q* <br/> *r<sub>c1</sub>* (&#197), *r<sub>c2</sub>* (&#197) and *r<sub>0</sub>* (&#197) <br/> If type of potential is 'buck' : *C* (eV) and *&#961* (&#197) <br/> If type of potential is 'buckPlusAttr' : *C* (eV) and *&#961* (&#197) <br/> *D* (eV), *B* (&#197<sup>-1</sup>), *r<sub>1</sub><sup>OO</sup>* (&#197) and *r<sub>2</sub><sup>OO</sup>* (&#197) </pre>
-* Divided line
-
-4) Tables parameters:
-
-* Cutoff radius for the Coulomb interaction (\ *R<sub>coul</sub>*\ )
-* Starting radius (\ *r<sub>min</sub>* = 1,18845 &#197) and increments (\ *dr* = 0,001 &#197) for creating the potential table.
-* Divided line
-
-5) Rick model parameter:
-
-* *Nevery* : parameter to set the frequency (\ *1/Nevery*\ ) of the charge resolution. The charges are evaluated each *Nevery* time steps.
-* Max number of iterative loop (\ *loopmax*\ ) and precision criterion (\ *prec*\ ) in eV of the charge resolution
-* Divided line
-
-6) Coordination parameter:
-
-* First (\ *r<sub>1n</sub>*\ ) and second (\ *r<sub>2n</sub>*\ ) neighbor distances in &#197
-* Divided line
-
-7) Charge initialization mode:
-
-* Keyword (\ *QInitMode*\ ) and initial oxygen charge (\ *Q<sub>init</sub>*\ ). If keyword = 'true', all oxygen charges are initially set equal to *Q<sub>init</sub>*\ . The charges on the cations are initially set in order to respect the neutrality of the box. If keyword = 'false', all atom charges are initially set equal to 0 if you use "create_atom"#create_atom command or the charge specified in the file structure using :doc:`read_data <read_data>` command.
-* Divided line
-
-8) Mode for the electronegativity equalization (Qeq)
-
-* Keyword mode: <pre> <br/> QEqAll (one QEq group) | no parameters <br/> QEqAllParallel (several QEq groups) | no parameters <br/> Surface | zlim (QEq only for z>zlim) </pre>
-* Parameter if necessary
-* Divided line
-
-9) Verbose
-
-* If you want the code to work in verbose mode or not : 'true' or 'false'
-* If you want to print or not in file 'Energy_component.txt' the three main contributions to the energy of the system according to the description presented above : 'true' or 'false' and *N<sub>Energy</sub>*\ . This option writes in file every *N<sub>Energy</sub>* time step. If the value is 'false' then *N<sub>Energy</sub>* = 0. The file take into account the possibility to have several QEq group *g* then it writes: time step, number of atoms in group *g*\ , electrostatic part of energy, *E<sub>ES</sub>*\ , the interaction between oxygen, *E<sub>OO</sub>*\ , and short range metal-oxygen interaction, *E<sub>MO</sub>*\ .
-* If you want to print in file 'Electroneg_component.txt' the electronegativity component (\ *&#8706E<sub>tot</sub> &#8260&#8706Q<sub>i</sub>*\ ) or not: 'true' or 'false' and *N<sub>Electroneg</sub>*\ .This option writes in file every *N<sub>Electroneg</sub>* time step. If the value is 'false' then *N<sub>Electroneg</sub>* = 0. The file consist in atom number *i*\ , atom type (1 for oxygen and # higher than 1 for metal), atom position: *x*\ , *y* and *z*\ , atomic charge of atom *i*\ , electrostatic part of atom *i* electronegativity, covalent part of atom *i* electronegativity, the hopping integral of atom *i* *(Z&#946<sup>2</sup>)<sub>i<sub>* and box electronegativity.
-
-.. note::
-
- This last option slows down the calculation dramatically. Use
- only with a single processor simulation.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info:**
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-mix, shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-needs 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-**Restriction:**
-
-This pair style is part of the USER-SMTBQ package and is only enabled
-if LAMMPS is built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This potential requires using atom type 1 for oxygen and atom type
-higher than 1 for metal atoms.
-
-This pair style requires the :doc:`newton <newton>` setting to be "on"
-for pair interactions.
-
-The SMTB-Q potential files provided with LAMMPS (see the potentials
-directory) are parameterized for metal :doc:`units <units>`.
-
-
-----------
-
-
-**Citing this work:**
-
-Please cite related publication: N. Salles, O. Politano, E. Amzallag
-and R. Tetot, Comput. Mater. Sci. 111 (2016) 181-189
-
-
-----------
-
-
-.. _SMTB-Q_1:
-
-
-
-**(SMTB-Q_1)** N. Salles, O. Politano, E. Amzallag, R. Tetot,
-Comput. Mater. Sci. 111 (2016) 181-189
-
-.. _SMTB-Q_2:
-
-
-
-**(SMTB-Q_2)** E. Maras, N. Salles, R. Tetot, T. Ala-Nissila,
-H. Jonsson, J. Phys. Chem. C 2015, 119, 10391-10399
-
-.. _SMTB-Q_3:
-
-
-
-**(SMTB-Q_3)** R. Tetot, N. Salles, S. Landron, E. Amzallag, Surface
-Science 616, 19-8722 28 (2013)
-
-.. _Wolf:
-
-
-
-**(Wolf)** D. Wolf, P. Keblinski, S. R. Phillpot, J. Eggebrecht, J Chem
-Phys, 110, 8254 (1999).
-
-.. _Rick:
-
-
-
-**(Rick)** S. W. Rick, S. J. Stuart, B. J. Berne, J Chem Phys 101, 6141
-(1994).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_snap.txt b/doc/html/_sources/pair_snap.txt
deleted file mode 100644
index 8ee6bee36..000000000
--- a/doc/html/_sources/pair_snap.txt
+++ /dev/null
@@ -1,220 +0,0 @@
-.. index:: pair_style snap
-
-pair_style snap command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style snap
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style snap
- pair_coeff * * snap InP.snapcoeff In P InP.snapparam In In P P
-
-Description
-"""""""""""
-
-Style *snap* computes interactions
-using the spectral neighbor analysis potential (SNAP)
-:ref:`(Thompson) <Thompson2014>`. Like the GAP framework of Bartok et al.
-:ref:`(Bartok2010) <Bartok2010>`, :ref:`(Bartok2013) <Bartok2013>`
-it uses bispectrum components
-to characterize the local neighborhood of each atom
-in a very general way. The mathematical definition of the
-bispectrum calculation used by SNAP is identical
-to that used of :doc:`compute sna/atom <compute_sna_atom>`.
-In SNAP, the total energy is decomposed into a sum over
-atom energies. The energy of atom *i* is
-expressed as a weighted sum over bispectrum components.
-
-.. image:: Eqs/pair_snap.jpg
- :align: center
-
-where *B_k^i* is the *k*\ -th bispectrum component of atom *i*\ ,
-and *beta_k^alpha_i* is the corresponding linear coefficient
-that depends on *alpha_i*\ , the SNAP element of atom *i*\ . The
-number of bispectrum components used and their definitions
-depend on the values of *twojmax* and *diagonalstyle*
-defined in the SNAP parameter file described below.
-The bispectrum calculation is described in more detail
-in :doc:`compute sna/atom <compute_sna_atom>`.
-
-Note that unlike for other potentials, cutoffs for SNAP potentials are
-not set in the pair_style or pair_coeff command; they are specified in
-the SNAP potential files themselves.
-
-Only a single pair_coeff command is used with the *snap* style which
-specifies two SNAP files and the list SNAP element(s) to be
-extracted.
-The SNAP elements are mapped to LAMMPS atom types by specifying
-N additional arguments after the 2nd filename in the pair_coeff
-command, where N is the number of LAMMPS atom types:
-
-* SNAP element file
-* Elem1, Elem2, ...
-* SNAP parameter file
-* N element names = mapping of SNAP elements to atom types
-
-As an example, if a LAMMPS indium phosphide simulation has 4 atoms
-types, with the first two being indium and the 3rd and 4th being
-phophorous, the pair_coeff command would look like this:
-
-.. parsed-literal::
-
- pair_coeff * * snap InP.snapcoeff In P InP.snapparam In In P P
-
-The 1st 2 arguments must be * * so as to span all LAMMPS atom types.
-The two filenames are for the element and parameter files, respectively.
-The 'In' and 'P' arguments (between the file names) are the two elements
-which will be extracted from the element file. The
-two trailing 'In' arguments map LAMMPS atom types 1 and 2 to the
-SNAP 'In' element. The two trailing 'P' arguments map LAMMPS atom types
-3 and 4 to the SNAP 'P' element.
-
-If a SNAP mapping value is
-specified as NULL, the mapping is not performed.
-This can be used when a *snap* 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.
-
-The name of the SNAP element file usually ends in the
-".snapcoeff" extension. It may contain coefficients
-for many SNAP elements.
-Only those elements listed in the pair_coeff command are extracted.
-The name of the SNAP parameter file usually ends in the ".snapparam"
-extension. It contains a small number
-of parameters that define the overall form of the SNAP potential.
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for these files.
-
-Quite commonly,
-SNAP potentials are combined with one or more other LAMMPS pair styles
-using the *hybrid/overlay* pair style. As an example, the SNAP
-tantalum potential provided in the LAMMPS potentials directory
-combines the *snap* and *zbl* pair styles. It is invoked
-by the following commands:
-
-.. parsed-literal::
-
- variable zblcutinner equal 4
- variable zblcutouter equal 4.8
- variable zblz equal 73
- pair_style hybrid/overlay &
- zbl ${zblcutinner} ${zblcutouter} snap
- pair_coeff * * zbl 0.0
- pair_coeff 1 1 zbl ${zblz}
- pair_coeff * * snap ../potentials/Ta06A.snapcoeff Ta &
- ../potentials/Ta06A.snapparam Ta
-
-It is convenient to keep these commands in a separate file that can
-be inserted in any LAMMPS input script using the :doc:`include <include>`
-command.
-
-The top of the SNAP element file can contain any number of blank and comment
-lines (start with #), but follows a strict
-format after that. The first non-blank non-comment
-line must contain two integers:
-
-* nelem = Number of elements
-* ncoeff = Number of coefficients
-
-This is followed by one block for each of the *nelem* elements.
-The first line of each block contains three entries:
-
-* Element symbol (text string)
-* R = Element radius (distance units)
-* w = Element weight (dimensionless)
-
-This line is followed by *ncoeff* coefficients, one per line.
-
-The SNAP parameter file can contain blank and comment lines (start
-with #) anywhere. Each non-blank non-comment line must contain one
-keyword/value pair. The required keywords are *rcutfac* and
-*twojmax*\ . Optional keywords are *rfac0*\ , *rmin0*\ , *diagonalstyle*\ ,
-and *switchflag*\ .
-
-The default values for these keywords are
-
-* *rfac0* = 0.99363
-* *rmin0* = 0.0
-* *diagonalstyle* = 3
-* *switchflag* = 0
-
-Detailed definitions of these keywords are given on the :doc:`compute sna/atom <compute_sna_atom>` doc page.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, where types I and J correspond to
-two different element types, mixing is performed by LAMMPS with
-user-specifiable parameters as described above. You never need to
-specify a pair_coeff command with I != J arguments for this style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This style is part of the SNAP package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute sna/atom <compute_sna_atom>`,
-:doc:`compute snad/atom <compute_sna_atom>`,
-:doc:`compute snav/atom <compute_sna_atom>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Thompson2014:
-
-
-
-**(Thompson)** Thompson, Swiler, Trott, Foiles, Tucker, under review, preprint
-available at `arXiv:1409.3880 <http://arxiv.org/abs/1409.3880>`_
-
-.. _Bartok2010:
-
-
-
-**(Bartok2010)** Bartok, Payne, Risi, Csanyi, Phys Rev Lett, 104, 136403 (2010).
-
-.. _Bartok2013:
-
-
-
-**(Bartok2013)** Bartok, Gillan, Manby, Csanyi, Phys Rev B 87, 184115 (2013).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_soft.txt b/doc/html/_sources/pair_soft.txt
deleted file mode 100644
index d4aef0a62..000000000
--- a/doc/html/_sources/pair_soft.txt
+++ /dev/null
@@ -1,158 +0,0 @@
-.. index:: pair_style soft
-
-pair_style soft command
-=======================
-
-pair_style soft/gpu command
-===========================
-
-pair_style soft/omp command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style soft cutoff
-
-* cutoff = global cutoff for soft interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style soft 1.0
- pair_coeff * * 10.0
- pair_coeff 1 1 10.0 3.0
-
-.. parsed-literal::
-
- pair_style soft 1.0
- pair_coeff * * 0.0
- variable prefactor equal ramp(0,30)
- fix 1 all adapt 1 pair soft a * * v_prefactor
-
-Description
-"""""""""""
-
-Style *soft* computes pairwise interactions with the formula
-
-.. image:: Eqs/pair_soft.jpg
- :align: center
-
-It is useful for pushing apart overlapping atoms, since it does not
-blow up as r goes to 0. A is a pre-factor that can be made to vary in
-time from the start to the end of the run (see discussion below),
-e.g. to start with a very soft potential and slowly harden the
-interactions over time. Rc is the cutoff. See the :doc:`fix nve/limit <fix_nve_limit>` command for another way to push apart
-overlapping atoms.
-
-The following coefficients must be defined for each pair of atom types
-via the :doc:`pair_coeff <pair_coeff>` command as in the examples above,
-or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* A (energy units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global soft
-cutoff is used.
-
-.. note::
-
- The syntax for :doc:`pair_coeff <pair_coeff>` with a single A
- coeff is different in the current version of LAMMPS than in older
- versions which took two values, Astart and Astop, to ramp between
- them. This functionality is now available in a more general form
- through the :doc:`fix adapt <fix_adapt>` command, as explained below.
- Note that if you use an old input script and specify Astart and Astop
- without a cutoff, then LAMMPS will interpret that as A and a cutoff,
- which is probabably not what you want.
-
-The :doc:`fix adapt <fix_adapt>` command can be used to vary A for one
-or more pair types over the course of a simulation, in which case
-pair_coeff settings for A must still be specified, but will be
-overridden. For example these commands will vary the prefactor A for
-all pairwise interactions from 0.0 at the beginning to 30.0 at the end
-of a run:
-
-.. parsed-literal::
-
- variable prefactor equal ramp(0,30)
- fix 1 all adapt 1 pair soft a * * v_prefactor
-
-Note that a formula defined by an :doc:`equal-style variable <variable>`
-can use the current timestep, elapsed time in the current run, elapsed
-time since the beginning of a series of runs, as well as access other
-variables.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the A coefficient and cutoff
-distance for this pair style can be mixed. A is always mixed via a
-*geometric* rule. The cutoff is mixed according to the pair_modify
-mix value. The default mix value is *geometric*\ . See the
-"pair_modify" command for details.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift option, since the pair interaction goes to 0.0 at the cutoff.
-
-The :doc:`pair_modify <pair_modify>` table and tail options are not
-relevant for this pair style.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`fix nve/limit <fix_nve_limit>`, :doc:`fix adapt <fix_adapt>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_sph_heatconduction.txt b/doc/html/_sources/pair_sph_heatconduction.txt
deleted file mode 100644
index 919300c89..000000000
--- a/doc/html/_sources/pair_sph_heatconduction.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-.. index:: pair_style sph/heatconduction
-
-pair_style sph/heatconduction command
-=====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style sph/heatconduction
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style sph/heatconduction
- pair_coeff * * 1.0 2.4
-
-Description
-"""""""""""
-
-The sph/heatconduction style computes heat transport between SPH particles.
-The transport model is the diffusion euqation for the internal energy.
-
-See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in
-LAMMPS.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above.
-
-* D diffusion coefficient (length^2/time units)
-* h kernel function cutoff (distance units)
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-This style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This style does not write information to :doc:`binary restart files <restart>`. Thus, you need to re-specify the pair_style and
-pair_coeff commands in an input script that reads a restart file.
-
-This style can only be used via the *pair* keyword of the :doc:`run_style respa <run_style>` command. It does not support the *inner*\ ,
-*middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the USER-SPH package. It is only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, pair_sph/rhosum
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_sph_idealgas.txt b/doc/html/_sources/pair_sph_idealgas.txt
deleted file mode 100644
index 3b1ba0ef1..000000000
--- a/doc/html/_sources/pair_sph_idealgas.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-.. index:: pair_style sph/idealgas
-
-pair_style sph/idealgas command
-===============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style sph/idealgas
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style sph/idealgas
- pair_coeff * * 1.0 2.4
-
-Description
-"""""""""""
-
-The sph/idealgas style computes pressure forces between particles
-according to the ideal gas equation of state:
-
-.. image:: Eqs/pair_sph_ideal.jpg
- :align: center
-
-where gamma = 1.4 is the heat capacity ratio, rho is the local
-density, and e is the internal energy per unit mass. This pair style
-also computes Monaghan's artificial viscosity to prevent particles
-from interpentrating :ref:`(Monaghan) <ideal-Monoghan>`.
-
-See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in
-LAMMPS.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above.
-
-* nu artificial viscosity (no units)
-* h kernel function cutoff (distance units)
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-This style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This style does not write information to :doc:`binary restart files <restart>`. Thus, you need to re-specify the pair_style and
-pair_coeff commands in an input script that reads a restart file.
-
-This style can only be used via the *pair* keyword of the :doc:`run_style respa <run_style>` command. It does not support the *inner*\ ,
-*middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the USER-SPH package. It is only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, pair_sph/rhosum
-
-**Default:** none
-
-
-----------
-
-
-.. _ideal-Monoghan:
-
-
-
-**(Monaghan)** Monaghan and Gingold, Journal of Computational Physics,
-52, 374-389 (1983).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_sph_lj.txt b/doc/html/_sources/pair_sph_lj.txt
deleted file mode 100644
index 0da8d6d78..000000000
--- a/doc/html/_sources/pair_sph_lj.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-.. index:: pair_style sph/lj
-
-pair_style sph/lj command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style sph/lj
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style sph/lj
- pair_coeff * * 1.0 2.4
-
-Description
-"""""""""""
-
-The sph/lj style computes pressure forces between particles according
-to the Lennard-Jones equation of state, which is computed according to
-Ree's 1980 polynomial fit :ref:`(Ree) <Ree>`. The Lennard-Jones parameters
-epsilon and sigma are set to unity. This pair style also computes
-Monaghan's artificial viscosity to prevent particles from
-interpentrating :ref:`(Monaghan) <Monoghan>`.
-
-See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in
-LAMMPS.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above.
-
-* nu artificial viscosity (no units)
-* h kernel function cutoff (distance units)
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-This style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This style does not write information to :doc:`binary restart files <restart>`. Thus, you need to re-specify the pair_style and
-pair_coeff commands in an input script that reads a restart file.
-
-This style can only be used via the *pair* keyword of the :doc:`run_style respa <run_style>` command. It does not support the *inner*\ ,
-*middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-As noted above, the Lennard-Jones parameters epsilon and sigma are set
-to unity.
-
-This pair style is part of the USER-SPH package. It is only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, pair_sph/rhosum
-
-**Default:** none
-
-
-----------
-
-
-.. _Ree:
-
-
-
-**(Ree)** Ree, Journal of Chemical Physics, 73, 5401 (1980).
-
-.. _Monoghan:
-
-
-
-**(Monaghan)** Monaghan and Gingold, Journal of Computational Physics,
-52, 374-389 (1983).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_sph_rhosum.txt b/doc/html/_sources/pair_sph_rhosum.txt
deleted file mode 100644
index b8032bc8a..000000000
--- a/doc/html/_sources/pair_sph_rhosum.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-.. index:: pair_style sph/rhosum
-
-pair_style sph/rhosum command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style sph/rhosum Nstep
-
-* Nstep = timestep interval
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style sph/rhosum 10
- pair_coeff * * 2.4
-
-Description
-"""""""""""
-
-The sph/rhosum style computes the local particle mass density rho for
-SPH particles by kernel function interpolation, every Nstep timesteps.
-
-See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in
-LAMMPS.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above.
-
-* h (distance units)
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-This style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This style does not write information to :doc:`binary restart files <restart>`. Thus, you need to re-specify the pair_style and
-pair_coeff commands in an input script that reads a restart file.
-
-This style can only be used via the *pair* keyword of the :doc:`run_style respa <run_style>` command. It does not support the *inner*\ ,
-*middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the USER-SPH package. It is only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, pair_sph/taitwater
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_sph_taitwater.txt b/doc/html/_sources/pair_sph_taitwater.txt
deleted file mode 100644
index f0ca12573..000000000
--- a/doc/html/_sources/pair_sph_taitwater.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-.. index:: pair_style sph/taitwater
-
-pair_style sph/taitwater command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style sph/taitwater
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style sph/taitwater
- pair_coeff * * 1000.0 1430.0 1.0 2.4
-
-Description
-"""""""""""
-
-The sph/taitwater style computes pressure forces between SPH particles
-according to Tait's equation of state:
-
-.. image:: Eqs/pair_sph_tait.jpg
- :align: center
-
-where gamma = 7 and B = c_0^2 rho_0 / gamma, with rho_0 being the
-reference density and c_0 the reference speed of sound.
-
-This pair style also computes Monaghan's artificial viscosity to
-prevent particles from interpentrating :ref:`(Monaghan) <Monaghan>`.
-
-See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in
-LAMMPS.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above.
-
-* rho0 reference density (mass/volume units)
-* c0 reference soundspeed (distance/time units)
-* nu artificial viscosity (no units)
-* h kernel function cutoff (distance units)
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-This style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This style does not write information to :doc:`binary restart files <restart>`. Thus, you need to re-specify the pair_style and
-pair_coeff commands in an input script that reads a restart file.
-
-This style can only be used via the *pair* keyword of the :doc:`run_style respa <run_style>` command. It does not support the *inner*\ ,
-*middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the USER-SPH package. It is only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, pair_sph/rhosum
-
-**Default:** none
-
-
-----------
-
-
-.. _Monaghan:
-
-
-
-**(Monaghan)** Monaghan and Gingold, Journal of Computational Physics,
-52, 374-389 (1983).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_sph_taitwater_morris.txt b/doc/html/_sources/pair_sph_taitwater_morris.txt
deleted file mode 100644
index fc3c0ceab..000000000
--- a/doc/html/_sources/pair_sph_taitwater_morris.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-.. index:: pair_style sph/taitwater/morris
-
-pair_style sph/taitwater/morris command
-=======================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style sph/taitwater/morris
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style sph/taitwater/morris
- pair_coeff * * 1000.0 1430.0 1.0 2.4
-
-Description
-"""""""""""
-
-The sph/taitwater/morris style computes pressure forces between SPH
-particles according to Tait's equation of state:
-
-.. image:: Eqs/pair_sph_tait.jpg
- :align: center
-
-where gamma = 7 and B = c_0^2 rho_0 / gamma, with rho_0 being the
-reference density and c_0 the reference speed of sound.
-
-This pair style also computes laminar viscosity :ref:`(Morris) <Morris>`.
-
-See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to using SPH in
-LAMMPS.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above.
-
-* rho0 reference density (mass/volume units)
-* c0 reference soundspeed (distance/time units)
-* nu dynamic viscosity (mass*distance/time units)
-* h kernel function cutoff (distance units)
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-This style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This style does not write information to :doc:`binary restart files <restart>`. Thus, you need to re-specify the pair_style and
-pair_coeff commands in an input script that reads a restart file.
-
-This style can only be used via the *pair* keyword of the :doc:`run_style respa <run_style>` command. It does not support the *inner*\ ,
-*middle*\ , *outer* keywords.
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the USER-SPH package. It is only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, pair_sph/rhosum
-
-**Default:** none
-
-
-----------
-
-
-.. _Morris:
-
-
-
-**(Morris)** Morris, Fox, Zhu, J Comp Physics, 136, 214-226 (1997).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_srp.txt b/doc/html/_sources/pair_srp.txt
deleted file mode 100644
index 945972b22..000000000
--- a/doc/html/_sources/pair_srp.txt
+++ /dev/null
@@ -1,190 +0,0 @@
-.. index:: pair_style srp
-
-pair_style srp command
-======================
-
-Syntax
-""""""
-
-pair_style srp cutoff btype dist keyword value ...
-
-* cutoff = global cutoff for SRP interactions (distance units)
-* btype = bond type to apply SRP interactions to (can be wildcard, see below)
-* distance = *min* or *mid*
-* zero or more keyword/value pairs may be appended
-* keyword = *exclude*
-.. parsed-literal::
-
- *bptype* value = atom type for bond particles
- *exclude* value = *yes* or *no*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style hybrid dpd 1.0 1.0 12345 srp 0.8 1 mid exclude yes
- pair_coeff 1 1 dpd 60.0 4.5 1.0
- pair_coeff 1 2 none
- pair_coeff 2 2 srp 100.0 0.8
-
-.. parsed-literal::
-
- pair_style hybrid dpd 1.0 1.0 12345 srp 0.8 * min exclude yes
- pair_coeff 1 1 dpd 60.0 50 1.0
- pair_coeff 1 2 none
- pair_coeff 2 2 srp 40.0
-
-.. parsed-literal::
-
- pair_style hybrid srp 0.8 2 mid
- pair_coeff 1 1 none
- pair_coeff 1 2 none
- pair_coeff 2 2 srp 100.0 0.8
-
-Description
-"""""""""""
-
-Style *srp* computes a soft segmental repulsive potential (SRP) that
-acts between pairs of bonds. This potential is useful for preventing
-bonds from passing through one another when a soft non-bonded
-potential acts between beads in, for example, DPD polymer chains. An
-example input script that uses this command is provided in
-examples/USER/srp.
-
-Bonds of specified type *btype* interact with one another through a
-bond-pairwise potential, such that the force on bond *i* due to bond
-*j* is as follows
-
-.. image:: Eqs/pair_srp1.jpg
- :align: center
-
-where *r* and *rij* are the distance and unit vector between the two
-bonds. Note that *btype* can be specified as an asterisk "*", which
-case the interaction is applied to all bond types. The *mid* option
-computes *r* and *rij* from the midpoint distance between bonds. The
-*min* option computes *r* and *rij* from the minimum distance between
-bonds. The force acting on a bond is mapped onto the two bond atoms
-according to the lever rule,
-
-.. image:: Eqs/pair_srp2.jpg
- :align: center
-
-where *L* is the normalized distance from the atom to the point of
-closest approach of bond *i* and *j*\ . The *mid* option takes *L* as
-0.5 for each interaction as described in :ref:`(Sirk) <Sirk>`.
-
-The following coefficients must be defined via the
-:doc:`pair_coeff <pair_coeff>` command as in the examples above, or in
-the data file or restart file read by the :doc:`read_data <read_data>`
-or :doc:`read_restart <read_restart>` commands:
-
-* *C* (force units)
-* *rc* (distance units)
-
-The last coefficient is optional. If not specified, the global cutoff
-is used.
-
-.. note::
-
- Pair style srp considers each bond of type *btype* to be a
- fictitious "particle" of type *bptype*\ , where *bptype* is either the
- largest atom type in the system, or the type set by the *bptype* flag.
- Any actual existing particles with this atom type will be deleted at
- the beginning of a run. This means you must specify the number of
- types in your system accordingly; usually to be one larger than what
- would normally be the case, e.g. via the :doc:`create_box <create_box>`
- or by changing the header in your :doc:`data file <read_data>`. The
- ficitious "bond particles" are inserted at the beginning of the run,
- and serve as placeholders that define the position of the bonds. This
- allows neighbor lists to be constructed and pairwise interactions to
- be computed in almost the same way as is done for actual particles.
- Because bonds interact only with other bonds, :doc:`pair_style hybrid <pair_hybrid>` should be used to turn off interactions
- between atom type *bptype* and all other types of atoms. An error
- will be flagged if :doc:`pair_style hybrid <pair_hybrid>` is not used.
-
-The optional *exclude* keyword determines if forces are computed
-between first neighbor (directly connected) bonds. For a setting of
-*no*\ , first neighbor forces are computed; for *yes* they are not
-computed. A setting of *no* cannot be used with the *min* option for
-distance calculation because the the minimum distance between directly
-connected bonds is zero.
-
-Pair style *srp* turns off normalization of thermodynamic properties
-by particle number, as if the command :doc:`thermo_modify norm no <thermo_modify>` had been issued.
-
-The pairwise energy associated with style *srp* is shifted to be zero
-at the cutoff distance *rc*\ .
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair styles does not support mixing.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift option for the energy of the pair interaction. Note that as
-discussed above, the energy term is already shifted to be 0.0 at the
-cutoff distance *rc*\ .
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant for
-this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style writes global and per-atom information to :doc:`binary restart files <restart>`. Pair srp should be used with :doc:`pair_style hybrid <pair_hybrid>`, thus the pair_coeff commands need to be
-specified in the input script when reading a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the USER-MISC package. It is only enabled
-if LAMMPS was built with that package. See the Making LAMMPS section
-for more info.
-
-This pair style must be used with :doc:`pair_style hybrid <pair_hybrid>`.
-
-This pair style requires the :doc:`newton <newton>` command to be *on*
-for non-bonded interactions.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style hybrid <pair_hybrid>`, :doc:`pair_coeff <pair_coeff>`,
-:doc:`pair dpd <pair_dpd>`
-
-Default
-"""""""
-
-The default keyword value is exclude = yes.
-
-
-----------
-
-
-.. _Sirk:
-
-
-
-**(Sirk)** Sirk TW, Sliozberg YR, Brennan JK, Lisal M, Andzelm JW, J
-Chem Phys, 136 (13) 134903, 2012.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_style.txt b/doc/html/_sources/pair_style.txt
deleted file mode 100644
index 9f0ba93be..000000000
--- a/doc/html/_sources/pair_style.txt
+++ /dev/null
@@ -1,249 +0,0 @@
-.. index:: pair_style
-
-pair_style command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = one of the styles from the list below
-* args = arguments used by a particular style
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style lj/cut 2.5
- pair_style eam/alloy
- pair_style hybrid lj/charmm/coul/long 10.0 eam
- pair_style table linear 1000
- pair_style none
-
-Description
-"""""""""""
-
-Set the formula(s) LAMMPS uses to compute pairwise interactions. In
-LAMMPS, pair potentials are defined between pairs of atoms that are
-within a cutoff distance and the set of active interactions typically
-changes over time. See the :doc:`bond_style <bond_style>` command to
-define potentials between pairs of bonded atoms, which typically
-remain in place for the duration of a simulation.
-
-In LAMMPS, pairwise force fields encompass a variety of interactions,
-some of which include many-body effects, e.g. EAM, Stillinger-Weber,
-Tersoff, REBO potentials. They are still classified as "pairwise"
-potentials because the set of interacting atoms changes with time
-(unlike molecular bonds) and thus a neighbor list is used to find
-nearby interacting atoms.
-
-Hybrid models where specified pairs of atom types interact via
-different pair potentials can be setup using the *hybrid* pair style.
-
-The coefficients associated with a pair style are typically set for
-each pair of atom types, and are specified by the
-:doc:`pair_coeff <pair_coeff>` command or read from a file by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands.
-
-The :doc:`pair_modify <pair_modify>` command sets options for mixing of
-type I-J interaction coefficients and adding energy offsets or tail
-corrections to Lennard-Jones potentials. Details on these options as
-they pertain to individual potentials are described on the doc page
-for the potential. Likewise, info on whether the potential
-information is stored in a :doc:`restart file <write_restart>` is listed
-on the potential doc page.
-
-In the formulas listed for each pair style, *E* is the energy of a
-pairwise interaction between two atoms separated by a distance *r*\ .
-The force between the atoms is the negative derivative of this
-expression.
-
-If the pair_style command has a cutoff argument, it sets global
-cutoffs for all pairs of atom types. The distance(s) can be smaller
-or larger than the dimensions of the simulation box.
-
-Typically, the global cutoff value can be overridden for a specific
-pair of atom types by the :doc:`pair_coeff <pair_coeff>` command. The
-pair style settings (including global cutoffs) can be changed by a
-subsequent pair_style command using the same style. This will reset
-the cutoffs for all atom type pairs, including those previously set
-explicitly by a :doc:`pair_coeff <pair_coeff>` command. The exceptions
-to this are that pair_style *table* and *hybrid* settings cannot be
-reset. A new pair_style command for these styles will wipe out all
-previously specified pair_coeff values.
-
-
-----------
-
-
-Here is an alphabetic list of pair styles defined in LAMMPS. They are
-also given in more compact form in the pair section of :ref:`this page <cmd_5>`.
-
-Click on the style to display the formula it computes, arguments
-specified in the pair_style command, and coefficients specified by the
-associated :doc:`pair_coeff <pair_coeff>` command.
-
-There are also additional pair styles (not listed here) submitted by
-users which are included in the LAMMPS distribution. The list of
-these with links to the individual styles are given in the pair
-section of :ref:`this page <cmd_5>`.
-
-There are also additional accelerated pair styles (not listed here)
-included in the LAMMPS distribution for faster performance on CPUs and
-GPUs. The list of these with links to the individual styles are given
-in the pair section of :ref:`this page <cmd_5>`.
-
-* :doc:`pair_style none <pair_none>` - turn off pairwise interactions
-* :doc:`pair_style hybrid <pair_hybrid>` - multiple styles of pairwise interactions
-* :doc:`pair_style hybrid/overlay <pair_hybrid>` - multiple styles of superposed pairwise interactions
-* :doc:`pair_style zero <pair_zero>` - neighbor list but no interactions
-
-* :doc:`pair_style adp <pair_adp>` - angular dependent potential (ADP) of Mishin
-* :doc:`pair_style airebo <pair_airebo>` - AIREBO potential of Stuart
-* :doc:`pair_style airebo/morse <pair_airebo>` - AIREBO with Morse instead of LJ
-* :doc:`pair_style beck <pair_beck>` - Beck potential
-* :doc:`pair_style body <pair_body>` - interactions between body particles
-* :doc:`pair_style bop <pair_bop>` - BOP potential of Pettifor
-* :doc:`pair_style born <pair_born>` - Born-Mayer-Huggins potential
-* :doc:`pair_style born/coul/long <pair_born>` - Born-Mayer-Huggins with long-range Coulombics
-* :doc:`pair_style born/coul/long/cs <pair_born>` - Born-Mayer-Huggins with long-range Coulombics and core/shell
-* :doc:`pair_style born/coul/msm <pair_born>` - Born-Mayer-Huggins with long-range MSM Coulombics
-* :doc:`pair_style born/coul/wolf <pair_born>` - Born-Mayer-Huggins with Coulombics via Wolf potential
-* :doc:`pair_style brownian <pair_brownian>` - Brownian potential for Fast Lubrication Dynamics
-* :doc:`pair_style brownian/poly <pair_brownian>` - Brownian potential for Fast Lubrication Dynamics with polydispersity
-* :doc:`pair_style buck <pair_buck>` - Buckingham potential
-* :doc:`pair_style buck/coul/cut <pair_buck>` - Buckingham with cutoff Coulomb
-* :doc:`pair_style buck/coul/long <pair_buck>` - Buckingham with long-range Coulombics
-* :doc:`pair_style buck/coul/long/cs <pair_buck>` - Buckingham with long-range Coulombics and core/shell
-* :doc:`pair_style buck/coul/msm <pair_buck>` - Buckingham long-range MSM Coulombics
-* :doc:`pair_style buck/long/coul/long <pair_buck_long>` - long-range Buckingham with long-range Coulombics
-* :doc:`pair_style colloid <pair_colloid>` - integrated colloidal potential
-* :doc:`pair_style comb <pair_comb>` - charge-optimized many-body (COMB) potential
-* :doc:`pair_style comb3 <pair_comb>` - charge-optimized many-body (COMB3) potential
-* :doc:`pair_style coul/cut <pair_coul>` - cutoff Coulombic potential
-* :doc:`pair_style coul/debye <pair_coul>` - cutoff Coulombic potential with Debye screening
-* :doc:`pair_style coul/dsf <pair_coul>` - Coulombics via damped shifted forces
-* :doc:`pair_style coul/long <pair_coul>` - long-range Coulombic potential
-* :doc:`pair_style coul/long/cs <pair_coul>` - long-range Coulombic potential and core/shell
-* :doc:`pair_style coul/msm <pair_coul>` - long-range MSM Coulombics
-* :doc:`pair_style coul/streitz <pair_coul>` - Coulombics via Streitz/Mintmire Slater orbitals
-* :doc:`pair_style coul/wolf <pair_coul>` - Coulombics via Wolf potential
-* :doc:`pair_style dpd <pair_dpd>` - dissipative particle dynamics (DPD)
-* :doc:`pair_style dpd/tstat <pair_dpd>` - DPD thermostatting
-* :doc:`pair_style dsmc <pair_dsmc>` - Direct Simulation Monte Carlo (DSMC)
-* :doc:`pair_style eam <pair_eam>` - embedded atom method (EAM)
-* :doc:`pair_style eam/alloy <pair_eam>` - alloy EAM
-* :doc:`pair_style eam/fs <pair_eam>` - Finnis-Sinclair EAM
-* :doc:`pair_style eim <pair_eim>` - embedded ion method (EIM)
-* :doc:`pair_style gauss <pair_gauss>` - Gaussian potential
-* :doc:`pair_style gayberne <pair_gayberne>` - Gay-Berne ellipsoidal potential
-* :doc:`pair_style gran/hertz/history <pair_gran>` - granular potential with Hertzian interactions
-* :doc:`pair_style gran/hooke <pair_gran>` - granular potential with history effects
-* :doc:`pair_style gran/hooke/history <pair_gran>` - granular potential without history effects
-* :doc:`pair_style hbond/dreiding/lj <pair_hbond_dreiding>` - DREIDING hydrogen bonding LJ potential
-* :doc:`pair_style hbond/dreiding/morse <pair_hbond_dreiding>` - DREIDING hydrogen bonding Morse potential
-* :doc:`pair_style kim <pair_kim>` - interface to potentials provided by KIM project
-* :doc:`pair_style lcbop <pair_lcbop>` - long-range bond-order potential (LCBOP)
-* :doc:`pair_style line/lj <pair_line_lj>` - LJ potential between line segments
-* :doc:`pair_style lj/charmm/coul/charmm <pair_charmm>` - CHARMM potential with cutoff Coulomb
-* :doc:`pair_style lj/charmm/coul/charmm/implicit <pair_charmm>` - CHARMM for implicit solvent
-* :doc:`pair_style lj/charmm/coul/long <pair_charmm>` - CHARMM with long-range Coulomb
-* :doc:`pair_style lj/charmm/coul/msm <pair_charmm>` - CHARMM with long-range MSM Coulombics
-* :doc:`pair_style lj/class2 <pair_class2>` - COMPASS (class 2) force field with no Coulomb
-* :doc:`pair_style lj/class2/coul/cut <pair_class2>` - COMPASS with cutoff Coulomb
-* :doc:`pair_style lj/class2/coul/long <pair_class2>` - COMPASS with long-range Coulomb
-* :doc:`pair_style lj/cubic <pair_lj_cubic>` - LJ with cubic after inflection point
-* :doc:`pair_style lj/cut <pair_lj>` - cutoff Lennard-Jones potential with no Coulomb
-* :doc:`pair_style lj/cut/coul/cut <pair_lj>` - LJ with cutoff Coulomb
-* :doc:`pair_style lj/cut/coul/debye <pair_lj>` - LJ with Debye screening added to Coulomb
-* :doc:`pair_style lj/cut/coul/dsf <pair_lj>` - LJ with Coulombics via damped shifted forces
-* :doc:`pair_style lj/cut/coul/long <pair_lj>` - LJ with long-range Coulombics
-* :doc:`pair_style lj/cut/coul/long/cs <pair_lj>` - LJ with long-range Coulombics and core/shell
-* :doc:`pair_style lj/cut/coul/msm <pair_lj>` - LJ with long-range MSM Coulombics
-* :doc:`pair_style lj/cut/dipole/cut <pair_dipole>` - point dipoles with cutoff
-* :doc:`pair_style lj/cut/dipole/long <pair_dipole>` - point dipoles with long-range Ewald
-* :doc:`pair_style lj/cut/tip4p/cut <pair_lj>` - LJ with cutoff Coulomb for TIP4P water
-* :doc:`pair_style lj/cut/tip4p/long <pair_lj>` - LJ with long-range Coulomb for TIP4P water
-* :doc:`pair_style lj/expand <pair_lj_expand>` - Lennard-Jones for variable size particles
-* :doc:`pair_style lj/gromacs <pair_gromacs>` - GROMACS-style Lennard-Jones potential
-* :doc:`pair_style lj/gromacs/coul/gromacs <pair_gromacs>` - GROMACS-style LJ and Coulombic potential
-* :doc:`pair_style lj/long/coul/long <pair_lj_long>` - long-range LJ and long-range Coulombics
-* :doc:`pair_style lj/long/dipole/long <pair_dipole>` - long-range LJ and long-range point dipoles
-* :doc:`pair_style lj/long/tip4p/long <pair_lj_long>` - long-range LJ and long-range Coulomb for TIP4P water
-* :doc:`pair_style lj/smooth <pair_lj_smooth>` - smoothed Lennard-Jones potential
-* :doc:`pair_style lj/smooth/linear <pair_lj_smooth_linear>` - linear smoothed Lennard-Jones potential
-* :doc:`pair_style lj96/cut <pair_lj96>` - Lennard-Jones 9/6 potential
-* :doc:`pair_style lubricate <pair_lubricate>` - hydrodynamic lubrication forces
-* :doc:`pair_style lubricate/poly <pair_lubricate>` - hydrodynamic lubrication forces with polydispersity
-* :doc:`pair_style lubricateU <pair_lubricateU>` - hydrodynamic lubrication forces for Fast Lubrication Dynamics
-* :doc:`pair_style lubricateU/poly <pair_lubricateU>` - hydrodynamic lubrication forces for Fast Lubrication with polydispersity
-* :doc:`pair_style meam <pair_meam>` - modified embedded atom method (MEAM)
-* :doc:`pair_style mie/cut <pair_mie>` - Mie potential
-* :doc:`pair_style morse <pair_morse>` - Morse potential
-* :doc:`pair_style nb3b/harmonic <pair_nb3b_harmonic>` - nonbonded 3-body harmonic potential
-* :doc:`pair_style nm/cut <pair_nm>` - N-M potential
-* :doc:`pair_style nm/cut/coul/cut <pair_nm>` - N-M potential with cutoff Coulomb
-* :doc:`pair_style nm/cut/coul/long <pair_nm>` - N-M potential with long-range Coulombics
-* :doc:`pair_style peri/eps <pair_peri>` - peridynamic EPS potential
-* :doc:`pair_style peri/lps <pair_peri>` - peridynamic LPS potential
-* :doc:`pair_style peri/pmb <pair_peri>` - peridynamic PMB potential
-* :doc:`pair_style peri/ves <pair_peri>` - peridynamic VES potential
-* :doc:`pair_style polymorphic <pair_polymorphic>` - polymorphic 3-body potential
-* :doc:`pair_style reax <pair_reax>` - ReaxFF potential
-* :doc:`pair_style rebo <pair_airebo>` - 2nd generation REBO potential of Brenner
-* :doc:`pair_style resquared <pair_resquared>` - Everaers RE-Squared ellipsoidal potential
-* :doc:`pair_style snap <pair_snap>` - SNAP quantum-accurate potential
-* :doc:`pair_style soft <pair_soft>` - Soft (cosine) potential
-* :doc:`pair_style sw <pair_sw>` - Stillinger-Weber 3-body potential
-* :doc:`pair_style table <pair_table>` - tabulated pair potential
-* :doc:`pair_style tersoff <pair_tersoff>` - Tersoff 3-body potential
-* :doc:`pair_style tersoff/mod <pair_tersoff_mod>` - modified Tersoff 3-body potential
-* :doc:`pair_style tersoff/zbl <pair_tersoff_zbl>` - Tersoff/ZBL 3-body potential
-* :doc:`pair_style tip4p/cut <pair_coul>` - Coulomb for TIP4P water w/out LJ
-* :doc:`pair_style tip4p/long <pair_coul>` - long-range Coulombics for TIP4P water w/out LJ
-* :doc:`pair_style tri/lj <pair_tri_lj>` - LJ potential between triangles
-* :doc:`pair_style vashishta <pair_vashishta>` - Vashishta 2-body and 3-body potential
-* :doc:`pair_style yukawa <pair_yukawa>` - Yukawa potential
-* :doc:`pair_style yukawa/colloid <pair_yukawa_colloid>` - screened Yukawa potential for finite-size particles
-* :doc:`pair_style zbl <pair_zbl>` - Ziegler-Biersack-Littmark potential
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command must be used before any coefficients are set by the
-:doc:`pair_coeff <pair_coeff>`, :doc:`read_data <read_data>`, or
-:doc:`read_restart <read_restart>` commands.
-
-Some pair styles are part of specific packages. They are only enabled
-if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info on packages.
-The doc pages for individual pair potentials tell if it is part of a
-package.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`read_data <read_data>`,
-:doc:`pair_modify <pair_modify>`, :doc:`kspace_style <kspace_style>`,
-:doc:`dielectric <dielectric>`, :doc:`pair_write <pair_write>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- pair_style none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_sw.txt b/doc/html/_sources/pair_sw.txt
deleted file mode 100644
index 84d8ce223..000000000
--- a/doc/html/_sources/pair_sw.txt
+++ /dev/null
@@ -1,245 +0,0 @@
-.. index:: pair_style sw
-
-pair_style sw command
-=====================
-
-pair_style sw/gpu command
-=========================
-
-pair_style sw/intel command
-===========================
-
-pair_style sw/kk command
-========================
-
-pair_style sw/omp command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style sw
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style sw
- pair_coeff * * si.sw Si
- pair_coeff * * GaN.sw Ga N Ga
-
-Description
-"""""""""""
-
-The *sw* style computes a 3-body :ref:`Stillinger-Weber <Stillinger>`
-potential for the energy E of a system of atoms as
-
-.. image:: Eqs/pair_sw.jpg
- :align: center
-
-where phi2 is a two-body term and phi3 is a three-body term. The
-summations in the formula are over all neighbors J and K of atom I
-within a cutoff distance = a*sigma.
-
-Only a single pair_coeff command is used with the *sw* style which
-specifies a Stillinger-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 SW elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-As an example, imagine a file SiC.sw has Stillinger-Weber values for
-Si and C. If your LAMMPS simulation has 4 atoms types and you want
-the 1st 3 to be Si, and the 4th to be C, you would use the following
-pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * SiC.sw Si Si Si C
-
-The 1st 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 SW file. The final C argument maps LAMMPS atom type 4
-to the C element in the SW file. If a mapping value is specified as
-NULL, the mapping is not performed. This can be used when a *sw*
-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.
-
-Stillinger-Weber files in the *potentials* directory of the LAMMPS
-distribution have a ".sw" suffix. Lines that are not blank or
-comments (starting with #) define parameters for a triplet of
-elements. The parameters in a single entry correspond to the two-body
-and three-body coefficients in the formula above:
-
-* element 1 (the center atom in a 3-body interaction)
-* element 2
-* element 3
-* epsilon (energy units)
-* sigma (distance units)
-* a
-* lambda
-* gamma
-* costheta0
-* A
-* B
-* p
-* q
-* tol
-
-The A, B, p, and q parameters are used only for two-body
-interactions. The lambda and costheta0 parameters are used only for
-three-body interactions. The epsilon, sigma and a parameters are used
-for both two-body and three-body interactions. gamma is used only in the
-three-body interactions, but is defined for pairs of atoms.
-The non-annotated parameters are unitless.
-
-LAMMPS introduces an additional performance-optimization parameter tol
-that is used for both two-body and three-body interactions. In the
-Stillinger-Weber potential, the interaction energies become negligibly
-small at atomic separations substantially less than the theoretical
-cutoff distances. LAMMPS therefore defines a virtual cutoff distance
-based on a user defined tolerance tol. The use of the virtual cutoff
-distance in constructing atom neighbor lists can significantly reduce
-the neighbor list sizes and therefore the computational cost. LAMMPS
-provides a *tol* value for each of the three-body entries so that they
-can be separately controlled. If tol = 0.0, then the standard
-Stillinger-Weber cutoff is used.
-
-The Stillinger-Weber potential file must contain entries for all the
-elements listed in the pair_coeff command. It can also contain
-entries for additional elements not being used in a particular
-simulation; LAMMPS ignores those entries.
-
-For a single-element simulation, only a single entry is required
-(e.g. SiSiSi). For a two-element simulation, the file must contain 8
-entries (for SiSiSi, SiSiC, SiCSi, SiCC, CSiSi, CSiC, CCSi, CCC), that
-specify SW parameters for all permutations of the two elements
-interacting in three-body configurations. Thus for 3 elements, 27
-entries would be required, etc.
-
-As annotated above, the first element in the entry is the center atom
-in a three-body interaction. Thus an entry for SiCC means a Si atom
-with 2 C atoms as neighbors. The parameter values used for the
-two-body interaction come from the entry where the 2nd and 3rd
-elements are the same. Thus the two-body parameters for Si
-interacting with C, comes from the SiCC entry. The three-body
-parameters can in principle be specific to the three elements of the
-configuration. In the literature, however, the three-body parameters
-are usually defined by simple formulas involving two sets of pair-wise
-parameters, corresponding to the ij and ik pairs, where i is the
-center atom. The user must ensure that the correct combining rule is
-used to calculate the values of the threebody parameters for
-alloys. Note also that the function phi3 contains two exponential
-screening factors with parameter values from the ij pair and ik
-pairs. So phi3 for a C atom bonded to a Si atom and a second C atom
-will depend on the three-body parameters for the CSiC entry, and also
-on the two-body parameters for the CCC and CSiSi entries. Since the
-order of the two neighbors is arbitrary, the threebody parameters for
-entries CSiC and CCSi should be the same. Similarly, the two-body
-parameters for entries SiCC and CSiSi should also be the same. The
-parameters used only for two-body interactions (A, B, p, and q) in
-entries whose 2nd and 3rd element are different (e.g. SiCSi) are not
-used for anything and can be set to 0.0 if desired.
-This is also true for the parameters in phi3 that are
-taken from the ij and ik pairs (sigma, a, gamma)
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-When using the USER-INTEL package with this style, there is an
-additional 5 to 10 percent performance improvement when the
-Stillinger-Weber parameters p and q are set to 4 and 0 respectively.
-These parameters are common for modeling silicon and water.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the MANYBODY package. It is only enabled
-if LAMMPS was built with that package (which it is by default). See
-the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This pair style requires the :doc:`newton <newton>` setting to be "on"
-for pair interactions.
-
-The Stillinger-Weber potential files provided with LAMMPS (see the
-potentials directory) are parameterized for metal :doc:`units <units>`.
-You can use the SW potential with any LAMMPS units, but you would need
-to create your own SW potential file with coefficients listed in the
-appropriate units if your simulation doesn't use "metal" units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Stillinger:
-
-
-
-**(Stillinger)** Stillinger and Weber, Phys Rev B, 31, 5262 (1985).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_table.txt b/doc/html/_sources/pair_table.txt
deleted file mode 100644
index 0c8339a93..000000000
--- a/doc/html/_sources/pair_table.txt
+++ /dev/null
@@ -1,299 +0,0 @@
-.. index:: pair_style table
-
-pair_style table command
-========================
-
-pair_style table/gpu command
-============================
-
-pair_style table/kk command
-===========================
-
-pair_style table/omp command
-============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style table style N keyword ...
-
-* style = *lookup* or *linear* or *spline* or *bitmap* = method of interpolation
-* N = use N values in *lookup*\ , *linear*\ , *spline* tables
-* N = use 2^N values in *bitmap* tables
-* zero or more keywords may be appended
-* keyword = *ewald* or *pppm* or *msm* or *dispersion* or *tip4p*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style table linear 1000
- pair_style table linear 1000 pppm
- pair_style table bitmap 12
- pair_coeff * 3 morse.table ENTRY1
- pair_coeff * 3 morse.table ENTRY1 7.0
-
-Description
-"""""""""""
-
-Style *table* creates interpolation tables from potential energy and
-force values listed in a file(s) as a function of distance. When
-performing dynamics or minimation, the interpolation tables are used
-to evaluate energy and forces for pairwise interactions between
-particles, similar to how analytic formulas are used for other pair
-styles.
-
-The interpolation tables are created as a pre-computation by fitting
-cubic splines to the file values and interpolating energy and force
-values at each of *N* distances. During a simulation, the tables are
-used to interpolate energy and force values as needed for each pair of
-particles separated by a distance *R*\ . The interpolation is done in
-one of 4 styles: *lookup*\ , *linear*\ , *spline*\ , or *bitmap*\ .
-
-For the *lookup* style, the distance *R* is used to find the nearest
-table entry, which is the energy or force.
-
-For the *linear* style, the distance *R* is used to find the 2
-surrounding table values from which an energy or force is computed by
-linear interpolation.
-
-For the *spline* style, a cubic spline coefficients are computed and
-stored for each of the *N* values in the table, one set of splines for
-energy, another for force. Note that these splines are different than
-the ones used to pre-compute the *N* values. Those splines were fit
-to the *Nfile* values in the tabulated file, where often *Nfile* <
-*N*\ . The distance *R* is used to find the appropriate set of spline
-coefficients which are used to evaluate a cubic polynomial which
-computes the energy or force.
-
-For the *bitmap* style, the specified *N* is used to create
-interpolation tables that are 2^N in length. The distance *R* is used
-to index into the table via a fast bit-mapping technique due to
-:ref:`(Wolff) <Wolff>`, and a linear interpolation is performed between
-adjacent table values.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above.
-
-* filename
-* keyword
-* cutoff (distance units)
-
-The filename specifies a file containing tabulated energy and force
-values. The keyword specifies a section of the file. The cutoff is
-an optional coefficient. If not specified, the outer cutoff in the
-table itself (see below) will be used to build an interpolation table
-that extend to the largest tabulated distance. If specified, only
-file values up to the cutoff are used to create the interpolation
-table. The format of this file is described below.
-
-If your tabulated potential(s) are designed to be used as the
-short-range part of one of the long-range solvers specified by the
-:doc:`kspace_style <kspace_style>` command, then you must use one or
-more of the optional keywords listed above for the pair_style command.
-These are *ewald* or *pppm* or *msm* or *dispersion* or *tip4p*\ . This
-is so LAMMPS can insure the short-range potential and long-range
-solver are compatible with each other, as it does for other
-short-range pair styles, such as :doc:`pair_style lj/cut/coul/long <pair_lj>`. Note that it is up to you to insure
-the tabulated values for each pair of atom types has the correct
-functional form to be compatible with the matching long-range solver.
-
-
-----------
-
-
-Here are some guidelines for using the pair_style table command to
-best effect:
-
-* Vary the number of table points; you may need to use more than you think
- to get good resolution.
-* Always use the :doc:`pair_write <pair_write>` command to produce a plot
- of what the final interpolated potential looks like. This can show up
- interpolation "features" you may not like.
-* Start with the linear style; it's the style least likely to have problems.
-* Use *N* in the pair_style command equal to the "N" in the tabulation
- file, and use the "RSQ" or "BITMAP" parameter, so additional interpolation
- is not needed. See discussion below.
-* Make sure that your tabulated forces and tabulated energies are
- consistent (dE/dr = -F) over the entire range of r values. LAMMPS
- will warn if this is not the case.
-* Use as large an inner cutoff as possible. This avoids fitting splines
- to very steep parts of the potential.
-
-----------
-
-
-The format of a tabulated file is a series of one or more sections,
-defined as follows (without the parenthesized comments):
-
-.. parsed-literal::
-
- # Morse potential for Fe (one or more comment or blank lines)
-
-.. parsed-literal::
-
- MORSE_FE (keyword is first text on line)
- N 500 R 1.0 10.0 (N, R, RSQ, BITMAP, FPRIME parameters)
- (blank)
- 1 1.0 25.5 102.34 (index, r, energy, force)
- 2 1.02 23.4 98.5
- ...
- 500 10.0 0.001 0.003
-
-A section begins with a non-blank line whose 1st character is not a
-"#"; blank lines or lines starting with "#" can be used as comments
-between sections. The first line begins with a keyword which
-identifies the section. The line can contain additional text, but the
-initial text must match the argument specified in the pair_coeff
-command. The next line lists (in any order) one or more parameters
-for the table. Each parameter is a keyword followed by one or more
-numeric values.
-
-The parameter "N" is required and its value is the number of table
-entries that follow. Note that this may be different than the *N*
-specified in the :doc:`pair_style table <pair_style>` command. Let
-Ntable = *N* in the pair_style command, and Nfile = "N" in the
-tabulated file. What LAMMPS does is a preliminary interpolation by
-creating splines using the Nfile tabulated values as nodal points. It
-uses these to interpolate energy and force values at Ntable different
-points. The resulting tables of length Ntable are then used as
-described above, when computing energy and force for individual pair
-distances. This means that if you want the interpolation tables of
-length Ntable to match exactly what is in the tabulated file (with
-effectively no preliminary interpolation), you should set Ntable =
-Nfile, and use the "RSQ" or "BITMAP" parameter. This is because the
-internal table abscissa is always RSQ (separation distance squared),
-for efficient lookup.
-
-All other parameters are optional. If "R" or "RSQ" or "BITMAP" does
-not appear, then the distances in each line of the table are used
-as-is to perform spline interpolation. In this case, the table values
-can be spaced in *r* uniformly or however you wish to position table
-values in regions of large gradients.
-
-If used, the parameters "R" or "RSQ" are followed by 2 values *rlo*
-and *rhi*\ . If specified, the distance associated with each energy and
-force value is computed from these 2 values (at high accuracy), rather
-than using the (low-accuracy) value listed in each line of the table.
-The distance values in the table file are ignored in this case.
-For "R", distances uniformly spaced between *rlo* and *rhi* are
-computed; for "RSQ", squared distances uniformly spaced between
-*rlo*rlo* and *rhi*rhi* are computed.
-
-.. note::
-
- If you use "R" or "RSQ", the tabulated distance values in the
- file are effectively ignored, and replaced by new values as described
- in the previous paragraph. If the distance value in the table is not
- very close to the new value (i.e. round-off difference), then you will
- be assingning energy/force values to a different distance, which is
- probably not what you want. LAMMPS will warn if this is occurring.
-
-If used, the parameter "BITMAP" is also followed by 2 values *rlo* and
-*rhi*\ . These values, along with the "N" value determine the ordering
-of the N lines that follow and what distance is associated with each.
-This ordering is complex, so it is not documented here, since this
-file is typically produced by the :doc:`pair_write <pair_write>` command
-with its *bitmap* option. When the table is in BITMAP format, the "N"
-parameter in the file must be equal to 2^M where M is the value
-specified in the pair_style command. Also, a cutoff parameter cannot
-be used as an optional 3rd argument in the pair_coeff command; the
-entire table extent as specified in the file must be used.
-
-If used, the parameter "FPRIME" is followed by 2 values *fplo* and
-*fphi* which are the derivative of the force at the innermost and
-outermost distances listed in the table. These values are needed by
-the spline construction routines. If not specified by the "FPRIME"
-parameter, they are estimated (less accurately) by the first 2 and
-last 2 force values in the table. This parameter is not used by
-BITMAP tables.
-
-Following a blank line, the next N lines list the tabulated values.
-On each line, the 1st value is the index from 1 to N, the 2nd value is
-r (in distance units), the 3rd value is the energy (in energy units),
-and the 4th is the force (in force units). The r values must increase
-from one line to the next (unless the BITMAP parameter is specified).
-
-Note that one file can contain many sections, each with a tabulated
-potential. LAMMPS reads the file section by section until it finds
-one that matches the specified keyword.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-The :doc:`pair_modify <pair_modify>` shift, table, and tail options are
-not relevant for this pair style.
-
-This pair style writes the settings for the "pair_style table" command
-to :doc:`binary restart files <restart>`, so a pair_style command does
-not need to specified in an input script that reads a restart file.
-However, the coefficient information is not stored in the restart
-file, since it is tabulated in the potential files. Thus, pair_coeff
-commands do need to be specified in the restart input script.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_write <pair_write>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Wolff:
-
-
-
-**(Wolff)** Wolff and Rudd, Comp Phys Comm, 120, 200-32 (1999).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_table_rx.txt b/doc/html/_sources/pair_table_rx.txt
deleted file mode 100644
index 1c5a57b03..000000000
--- a/doc/html/_sources/pair_table_rx.txt
+++ /dev/null
@@ -1,257 +0,0 @@
-.. index:: pair_style table/rx
-
-pair_style table/rx command
-===========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style table style N
-
-style = *lookup* or *linear* or *spline* or *bitmap* = method of interpolation
-N = use N values in *lookup*\ , *linear*\ , *spline* tables
-N = use 2^N values in *bitmap* tables
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style table/rx linear 1000
- pair_style table/rx bitmap 12
- pair_coeff * * rxn.table ENTRY1 h2o h2o 10.0
- pair_coeff * * rxn.table ENTRY1 1fluid 1fluid 10.0
- pair_coeff * 3 rxn.table ENTRY1 h2o no2 10.0
-
-Description
-"""""""""""
-
-Style *table/rx* is used in reaction DPD simulations,where the
-coarse-grained (CG) particles are composed of *m* species whose
-reaction rate kinetics are determined from a set of *n* reaction rate
-equations through the :doc:`fix rx <fix_rx>` command. The species of
-one CG particle can interact with a species in a neighboring CG
-particle through a site-site interaction potential model. Style
-*table/rx* creates interpolation tables of length *N* from pair
-potential and force values listed in a file(s) as a function of
-distance. The files are read by the :doc:`pair_coeff <pair_coeff>`
-command.
-
-The interpolation tables are created by fitting cubic splines to the
-file values and interpolating energy and force values at each of *N*
-distances. During a simulation, these tables are used to interpolate
-energy and force values as needed. The interpolation is done in one
-of 4 styles: *lookup*\ , *linear*\ , *spline*\ , or *bitmap*\ .
-
-For the *lookup* style, the distance between 2 atoms is used to find
-the nearest table entry, which is the energy or force.
-
-For the *linear* style, the pair distance is used to find 2
-surrounding table values from which an energy or force is computed by
-linear interpolation.
-
-For the *spline* style, a cubic spline coefficients are computed and
-stored at each of the *N* values in the table. The pair distance is
-used to find the appropriate set of coefficients which are used to
-evaluate a cubic polynomial which computes the energy or force.
-
-For the *bitmap* style, the N means to create interpolation tables
-that are 2^N in length. The pair distance is used to index into the
-table via a fast bit-mapping technique :ref:`(Wolff) <Wolff>` and a linear
-interpolation is performed between adjacent table values.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above.
-
-* filename
-* keyword
-* species1
-* species2
-* cutoff (distance units)
-
-The filename specifies a file containing tabulated energy and force
-values. The keyword specifies a section of the file. The cutoff is
-an optional coefficient. If not specified, the outer cutoff in the
-table itself (see below) will be used to build an interpolation table
-that extend to the largest tabulated distance. If specified, only
-file values up to the cutoff are used to create the interpolation
-table. The format of this file is described below.
-
-The species tags define the site-site interaction potential between
-two species contained within two different particles. The species
-tags must either correspond to the species defined in the reaction
-kinetics files specified with the :doc:`fix rx <fix_rx>` command or they
-must correspond to the tag "1fluid", signifying interaction with a
-product species mixture determined through a one-fluid approximation.
-The interaction potential is weighted by the geometric average of the
-concentrations of the two species. The coarse-grained potential is
-stored before and after the reaction kinetics solver is applied, where
-the difference is defined to be the internal chemical energy (uChem).
-
-
-----------
-
-
-Here are some guidelines for using the pair_style table/rx command to
-best effect:
-
-* Vary the number of table points; you may need to use more than you think
- to get good resolution.
-* Always use the :doc:`pair_write <pair_write>` command to produce a plot
- of what the final interpolated potential looks like. This can show up
- interpolation "features" you may not like.
-* Start with the linear style; it's the style least likely to have problems.
-* Use *N* in the pair_style command equal to the "N" in the tabulation
- file, and use the "RSQ" or "BITMAP" parameter, so additional interpolation
- is not needed. See discussion below.
-* Make sure that your tabulated forces and tabulated energies are consistent
- (dE/dr = -F) along the entire range of r values.
-* Use as large an inner cutoff as possible. This avoids fitting splines
- to very steep parts of the potential.
-
-----------
-
-
-The format of a tabulated file is a series of one or more sections,
-defined as follows (without the parenthesized comments):
-
-.. parsed-literal::
-
- # Morse potential for Fe (one or more comment or blank lines)
-
-.. parsed-literal::
-
- MORSE_FE (keyword is first text on line)
- N 500 R 1.0 10.0 (N, R, RSQ, BITMAP, FPRIME parameters)
- (blank)
- 1 1.0 25.5 102.34 (index, r, energy, force)
- 2 1.02 23.4 98.5
- ...
- 500 10.0 0.001 0.003
-
-A section begins with a non-blank line whose 1st character is not a
-"#"; blank lines or lines starting with "#" can be used as comments
-between sections. The first line begins with a keyword which
-identifies the section. The line can contain additional text, but the
-initial text must match the argument specified in the pair_coeff
-command. The next line lists (in any order) one or more parameters
-for the table. Each parameter is a keyword followed by one or more
-numeric values.
-
-The parameter "N" is required and its value is the number of table
-entries that follow. Note that this may be different than the *N*
-specified in the :doc:`pair_style table/rx <pair_style>` command. Let
-Ntable = *N* in the pair_style command, and Nfile = "N" in the
-tabulated file. What LAMMPS does is a preliminary interpolation by
-creating splines using the Nfile tabulated values as nodal points. It
-uses these to interpolate as needed to generate energy and force
-values at Ntable different points. The resulting tables of length
-Ntable are then used as described above, when computing energy and
-force for individual pair distances. This means that if you want the
-interpolation tables of length Ntable to match exactly what is in the
-tabulated file (with effectively no preliminary interpolation), you
-should set Ntable = Nfile, and use the "RSQ" or "BITMAP" parameter.
-The internal table abscissa is RSQ (separation distance squared).
-
-All other parameters are optional. If "R" or "RSQ" or "BITMAP" does
-not appear, then the distances in each line of the table are used
-as-is to perform spline interpolation. In this case, the table values
-can be spaced in *r* uniformly or however you wish to position table
-values in regions of large gradients.
-
-If used, the parameters "R" or "RSQ" are followed by 2 values *rlo*
-and *rhi*\ . If specified, the distance associated with each energy and
-force value is computed from these 2 values (at high accuracy), rather
-than using the (low-accuracy) value listed in each line of the table.
-The distance values in the table file are ignored in this case.
-For "R", distances uniformly spaced between *rlo* and *rhi* are
-computed; for "RSQ", squared distances uniformly spaced between
-*rlo*rlo* and *rhi*rhi* are computed.
-
-If used, the parameter "BITMAP" is also followed by 2 values *rlo* and
-*rhi*\ . These values, along with the "N" value determine the ordering
-of the N lines that follow and what distance is associated with each.
-This ordering is complex, so it is not documented here, since this
-file is typically produced by the :doc:`pair_write <pair_write>` command
-with its *bitmap* option. When the table is in BITMAP format, the "N"
-parameter in the file must be equal to 2^M where M is the value
-specified in the pair_style command. Also, a cutoff parameter cannot
-be used as an optional 3rd argument in the pair_coeff command; the
-entire table extent as specified in the file must be used.
-
-If used, the parameter "FPRIME" is followed by 2 values *fplo* and
-*fphi* which are the derivative of the force at the innermost and
-outermost distances listed in the table. These values are needed by
-the spline construction routines. If not specified by the "FPRIME"
-parameter, they are estimated (less accurately) by the first 2 and
-last 2 force values in the table. This parameter is not used by
-BITMAP tables.
-
-Following a blank line, the next N lines list the tabulated values.
-On each line, the 1st value is the index from 1 to N, the 2nd value is
-r (in distance units), the 3rd value is the energy (in energy units),
-and the 4th is the force (in force units). The r values must increase
-from one line to the next (unless the BITMAP parameter is specified).
-
-Note that one file can contain many sections, each with a tabulated
-potential. LAMMPS reads the file section by section until it finds
-one that matches the specified keyword.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support mixing. Thus, coefficients for all
-I,J pairs must be specified explicitly.
-
-The :doc:`pair_modify <pair_modify>` shift, table, and tail options are
-not relevant for this pair style.
-
-This pair style writes the settings for the "pair_style table/rx" command
-to :doc:`binary restart files <restart>`, so a pair_style command does
-not need to specified in an input script that reads a restart file.
-However, the coefficient information is not stored in the restart
-file, since it is tabulated in the potential files. Thus, pair_coeff
-commands do need to be specified in the restart input script.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command is part of the USER-DPD package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Wolff:
-
-
-
-**(Wolff)** Wolff and Rudd, Comp Phys Comm, 120, 200-32 (1999).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_tersoff.txt b/doc/html/_sources/pair_tersoff.txt
deleted file mode 100644
index 5d34feb1d..000000000
--- a/doc/html/_sources/pair_tersoff.txt
+++ /dev/null
@@ -1,295 +0,0 @@
-.. index:: pair_style tersoff
-
-pair_style tersoff command
-==========================
-
-pair_style tersoff/table command
-================================
-
-pair_style tersoff/gpu
-======================
-
-pair_style tersoff/intel
-========================
-
-pair_style tersoff/kk
-=====================
-
-pair_style tersoff/omp
-======================
-
-pair_style tersoff/table/omp command
-====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style
-
-style = *tersoff* or *tersoff/table* or *tersoff/gpu* or *tersoff/omp* or *tersoff/table/omp*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style tersoff
- pair_coeff * * Si.tersoff Si
- pair_coeff * * SiC.tersoff Si C Si
-
-.. parsed-literal::
-
- pair_style tersoff/table
- pair_coeff * * SiCGe.tersoff Si(D)
-
-Description
-"""""""""""
-
-The *tersoff* style computes a 3-body Tersoff potential
-:ref:`(Tersoff_1) <Tersoff_1>` for the energy E of a system of atoms as
-
-.. image:: Eqs/pair_tersoff_1.jpg
- :align: center
-
-where f_R is a two-body term and f_A includes three-body interactions.
-The summations in the formula are over all neighbors J and K of atom I
-within a cutoff distance = R + D.
-
-The *tersoff/table* style uses tabulated forms for the two-body,
-environment and angular functions. Linear interpolation is performed
-between adjacent table entries. The table length is chosen to be
-accurate within 10^-6 with respect to the *tersoff* style energy.
-The *tersoff/table* should give better performance in terms of speed.
-
-Only a single pair_coeff command is used with the *tersoff* style
-which specifies a Tersoff 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 Tersoff elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-As an example, imagine the SiC.tersoff file has Tersoff values for Si
-and C. If your LAMMPS simulation has 4 atoms types and you want the
-1st 3 to be Si, and the 4th to be C, you would use the following
-pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * SiC.tersoff Si Si Si C
-
-The 1st 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 Tersoff file. The final C argument maps LAMMPS atom
-type 4 to the C element in the Tersoff file. If a mapping value is
-specified as NULL, the mapping is not performed. This can be used
-when a *tersoff* 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.
-
-Tersoff files in the *potentials* directory of the LAMMPS distribution
-have a ".tersoff" suffix. Lines that are not blank or comments
-(starting with #) define parameters for a triplet of elements. The
-parameters in a single entry correspond to coefficients in the formula
-above:
-
-* element 1 (the center atom in a 3-body interaction)
-* element 2 (the atom bonded to the center atom)
-* element 3 (the atom influencing the 1-2 bond in a bond-order sense)
-* m
-* gamma
-* lambda3 (1/distance units)
-* c
-* d
-* costheta0 (can be a value < -1 or > 1)
-* n
-* beta
-* lambda2 (1/distance units)
-* B (energy units)
-* R (distance units)
-* D (distance units)
-* lambda1 (1/distance units)
-* A (energy units)
-
-The n, beta, lambda2, B, lambda1, and A parameters are only used for
-two-body interactions. The m, gamma, lambda3, c, d, and costheta0
-parameters are only used for three-body interactions. The R and D
-parameters are used for both two-body and three-body interactions. The
-non-annotated parameters are unitless. The value of m must be 3 or 1.
-
-The Tersoff potential file must contain entries for all the elements
-listed in the pair_coeff command. It can also contain entries for
-additional elements not being used in a particular simulation; LAMMPS
-ignores those entries.
-
-For a single-element simulation, only a single entry is required
-(e.g. SiSiSi). For a two-element simulation, the file must contain 8
-entries (for SiSiSi, SiSiC, SiCSi, SiCC, CSiSi, CSiC, CCSi, CCC), that
-specify Tersoff parameters for all permutations of the two elements
-interacting in three-body configurations. Thus for 3 elements, 27
-entries would be required, etc.
-
-As annotated above, the first element in the entry is the center atom
-in a three-body interaction and it is bonded to the 2nd atom and the
-bond is influenced by the 3rd atom. Thus an entry for SiCC means Si
-bonded to a C with another C atom influencing the bond. Thus
-three-body parameters for SiCSi and SiSiC entries will not, in
-general, be the same. The parameters used for the two-body
-interaction come from the entry where the 2nd element is repeated.
-Thus the two-body parameters for Si interacting with C, comes from the
-SiCC entry.
-
-The parameters used for a particular
-three-body interaction come from the entry with the corresponding
-three elements. The parameters used only for two-body interactions
-(n, beta, lambda2, B, lambda1, and A) in entries whose 2nd and 3rd
-element are different (e.g. SiCSi) are not used for anything and can
-be set to 0.0 if desired.
-
-Note that the twobody parameters in entries such as SiCC and CSiSi
-are often the same, due to the common use of symmetric mixing rules,
-but this is not always the case. For example, the beta and n parameters in
-Tersoff_2 :ref:`(Tersoff_2) <Tersoff_2>` are not symmetric.
-
-We chose the above form so as to enable users to define all commonly
-used variants of the Tersoff potential. In particular, our form
-reduces to the original Tersoff form when m = 3 and gamma = 1, while
-it reduces to the form of :ref:`Albe et al. <Albe>` when beta = 1 and m = 1.
-Note that in the current Tersoff implementation in LAMMPS, m must be
-specified as either 3 or 1. Tersoff used a slightly different but
-equivalent form for alloys, which we will refer to as Tersoff_2
-potential :ref:`(Tersoff_2) <Tersoff_2>`. The *tersoff/table* style implements
-Tersoff_2 parameterization only.
-
-LAMMPS parameter values for Tersoff_2 can be obtained as follows:
-gamma_ijk = omega_ik, lambda3 = 0 and the value of
-m has no effect. The parameters for species i and j can be calculated
-using the Tersoff_2 mixing rules:
-
-.. image:: Eqs/pair_tersoff_2.jpg
- :align: center
-
-Tersoff_2 parameters R and S must be converted to the LAMMPS
-parameters R and D (R is different in both forms), using the following
-relations: R=(R'+S')/2 and D=(S'-R')/2, where the primes indicate the
-Tersoff_2 parameters.
-
-In the potentials directory, the file SiCGe.tersoff provides the
-LAMMPS parameters for Tersoff's various versions of Si, as well as his
-alloy parameters for Si, C, and Ge. This file can be used for pure Si,
-(three different versions), pure C, pure Ge, binary SiC, and binary
-SiGe. LAMMPS will generate an error if this file is used with any
-combination involving C and Ge, since there are no entries for the GeC
-interactions (Tersoff did not publish parameters for this
-cross-interaction.) Tersoff files are also provided for the SiC alloy
-(SiC.tersoff) and the GaN (GaN.tersoff) alloys.
-
-Many thanks to Rutuparna Narulkar, David Farrell, and Xiaowang Zhou
-for helping clarify how Tersoff parameters for alloys have been
-defined in various papers.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the MANYBODY package. It is only enabled
-if LAMMPS was built with that package (which it is by default). See
-the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This pair style requires the :doc:`newton <newton>` setting to be "on"
-for pair interactions.
-
-The Tersoff potential files provided with LAMMPS (see the potentials
-directory) are parameterized for metal :doc:`units <units>`. You can
-use the Tersoff potential with any LAMMPS units, but you would need to
-create your own Tersoff potential file with coefficients listed in the
-appropriate units if your simulation doesn't use "metal" units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Tersoff_1:
-
-
-
-**(Tersoff_1)** J. Tersoff, Phys Rev B, 37, 6991 (1988).
-
-.. _Albe:
-
-
-
-**(Albe)** J. Nord, K. Albe, P. Erhart, and K. Nordlund, J. Phys.:
-Condens. Matter, 15, 5649(2003).
-
-.. _Tersoff_2:
-
-
-
-**(Tersoff_2)** J. Tersoff, Phys Rev B, 39, 5566 (1989); errata (PRB 41, 3248)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_tersoff_mod.txt b/doc/html/_sources/pair_tersoff_mod.txt
deleted file mode 100644
index 1cd1b1849..000000000
--- a/doc/html/_sources/pair_tersoff_mod.txt
+++ /dev/null
@@ -1,232 +0,0 @@
-.. index:: pair_style tersoff/mod
-
-pair_style tersoff/mod command
-==============================
-
-pair_style tersoff/mod/gpu command
-==================================
-
-pair_style tersoff/mod/kk command
-=================================
-
-pair_style tersoff/mod/omp command
-==================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style tersoff/mod
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style tersoff/mod
- pair_coeff * * Si.tersoff.mod Si Si
-
-Description
-"""""""""""
-
-The *tersoff/mod* style computes a bond-order type interatomic
-potential :ref:`(Kumagai) <Kumagai>` based on a 3-body Tersoff potential
-:ref:`(Tersoff_1) <Tersoff_1>`, :ref:`(Tersoff_2) <Tersoff_2>` with modified
-cutoff function and angular-dependent term, giving the energy E of a
-system of atoms as
-
-.. image:: Eqs/pair_tersoff_mod.jpg
- :align: center
-
-where f_R is a two-body term and f_A includes three-body interactions.
-The summations in the formula are over all neighbors J and K of atom I
-within a cutoff distance = R + D.
-
-The modified cutoff function f_C proposed by :ref:`(Murty) <Murty>` and
-having a continuous second-order differential is employed. The
-angular-dependent term g(theta) was modified to increase the
-flexibility of the potential.
-
-The *tersoff/mod* potential is fitted to both the elastic constants
-and melting point by employing the modified Tersoff potential function
-form in which the angular-dependent term is improved. The model
-performs extremely well in describing the crystalline, liquid, and
-amorphous phases :ref:`(Schelling) <Schelling>`.
-
-Only a single pair_coeff command is used with the *tersoff/mod* style
-which specifies a Tersoff/MOD 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 Tersoff/MOD elements to atom types
-
-As an example, imagine the Si.tersoff_mod file has Tersoff values for Si.
-If your LAMMPS simulation has 3 Si atoms types, you would use the following
-pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * Si.tersoff_mod Si Si Si
-
-The 1st 2 arguments must be * * so as to span all LAMMPS atom types.
-The three Si arguments map LAMMPS atom types 1,2,3 to the Si element
-in the Tersoff/MOD file. If a mapping value is specified as NULL, the
-mapping is not performed. This can be used when a *tersoff/mod*
-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.
-
-Tersoff/MOD file in the *potentials* directory of the LAMMPS
-distribution have a ".tersoff.mod" suffix. Lines that are not blank
-or comments (starting with #) define parameters for a triplet of
-elements. The parameters in a single entry correspond to coefficients
-in the formula above:
-
-* element 1 (the center atom in a 3-body interaction)
-* element 2 (the atom bonded to the center atom)
-* element 3 (the atom influencing the 1-2 bond in a bond-order sense)
-* beta
-* alpha
-* h
-* eta
-* beta_ters = 1 (dummy parameter)
-* lambda2 (1/distance units)
-* B (energy units)
-* R (distance units)
-* D (distance units)
-* lambda1 (1/distance units)
-* A (energy units)
-* n
-* c1
-* c2
-* c3
-* c4
-* c5
-
-The n, eta, lambda2, B, lambda1, and A parameters are only used for
-two-body interactions. The beta, alpha, c1, c2, c3, c4, c5, h
-parameters are only used for three-body interactions. The R and D
-parameters are used for both two-body and three-body interactions. The
-non-annotated parameters are unitless.
-
-The Tersoff/MOD potential file must contain entries for all the elements
-listed in the pair_coeff command. It can also contain entries for
-additional elements not being used in a particular simulation; LAMMPS
-ignores those entries.
-
-For a single-element simulation, only a single entry is required
-(e.g. SiSiSi). As annotated above, the first element in the entry is
-the center atom in a three-body interaction and it is bonded to the
-2nd atom and the bond is influenced by the 3rd atom. Thus an entry
-for SiSiSi means Si bonded to a Si with another Si atom influencing the bond.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the MANYBODY package. It is only enabled
-if LAMMPS was built with that package (which it is by default). See
-the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This pair style requires the :doc:`newton <newton>` setting to be "on"
-for pair interactions.
-
-The Tersoff/MOD potential files provided with LAMMPS (see the potentials
-directory) are parameterized for metal :doc:`units <units>`. You can
-use the Tersoff/MOD potential with any LAMMPS units, but you would need to
-create your own Tersoff/MOD potential file with coefficients listed in the
-appropriate units if your simulation doesn't use "metal" units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Kumagai:
-
-
-
-**(Kumagai)** T. Kumagai, S. Izumi, S. Hara, S. Sakai,
-Comp. Mat. Science, 39, 457 (2007).
-
-.. _Tersoff_1:
-
-
-
-**(Tersoff_1)** J. Tersoff, Phys Rev B, 37, 6991 (1988).
-
-.. _Tersoff_2:
-
-
-
-**(Tersoff_2)** J. Tersoff, Phys Rev B, 38, 9902 (1988).
-
-.. _Murty:
-
-
-
-**(Murty)** M.V.R. Murty, H.A. Atwater, Phys Rev B, 51, 4889 (1995).
-
-.. _Schelling:
-
-
-
-**(Schelling)** Patrick K. Schelling, Comp. Mat. Science, 44, 274 (2008).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_tersoff_zbl.txt b/doc/html/_sources/pair_tersoff_zbl.txt
deleted file mode 100644
index 96daa6a72..000000000
--- a/doc/html/_sources/pair_tersoff_zbl.txt
+++ /dev/null
@@ -1,305 +0,0 @@
-.. index:: pair_style tersoff/zbl
-
-pair_style tersoff/zbl command
-==============================
-
-pair_style tersoff/zbl/gpu command
-==================================
-
-pair_style tersoff/zbl/kk command
-=================================
-
-pair_style tersoff/zbl/omp command
-==================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style tersoff/zbl
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style tersoff/zbl
- pair_coeff * * SiC.tersoff.zbl Si C Si
-
-Description
-"""""""""""
-
-The *tersoff/zbl* style computes a 3-body Tersoff potential
-:ref:`(Tersoff_1) <Tersoff_1>` with a close-separation pairwise modification
-based on a Coulomb potential and the Ziegler-Biersack-Littmark
-universal screening function :ref:`(ZBL) <ZBL>`, giving the energy E of a
-system of atoms as
-
-.. image:: Eqs/pair_tersoff_zbl.jpg
- :align: center
-
-The f_F term is a fermi-like function used to smoothly connect the ZBL
-repulsive potential with the Tersoff potential. There are 2
-parameters used to adjust it: A_F and r_C. A_F controls how "sharp"
-the transition is between the two, and r_C is essentially the cutoff
-for the ZBL potential.
-
-For the ZBL portion, there are two terms. The first is the Coulomb
-repulsive term, with Z1, Z2 as the number of protons in each nucleus,
-e as the electron charge (1 for metal and real units) and epsilon0 as
-the permittivity of vacuum. The second part is the ZBL universal
-screening function, with a0 being the Bohr radius (typically 0.529
-Angstroms), and the remainder of the coefficients provided by the
-original paper. This screening function should be applicable to most
-systems. However, it is only accurate for small separations
-(i.e. less than 1 Angstrom).
-
-For the Tersoff portion, f_R is a two-body term and f_A includes
-three-body interactions. The summations in the formula are over all
-neighbors J and K of atom I within a cutoff distance = R + D.
-
-Only a single pair_coeff command is used with the *tersoff/zbl* style
-which specifies a Tersoff/ZBL 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 Tersoff/ZBL elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-As an example, imagine the SiC.tersoff.zbl file has Tersoff/ZBL values
-for Si and C. If your LAMMPS simulation has 4 atoms types and you
-want the 1st 3 to be Si, and the 4th to be C, you would use the
-following pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * SiC.tersoff Si Si Si C
-
-The 1st 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 Tersoff/ZBL file. The final C argument maps LAMMPS
-atom type 4 to the C element in the Tersoff/ZBL file. If a mapping
-value is specified as NULL, the mapping is not performed. This can be
-used when a *tersoff/zbl* 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.
-
-Tersoff/ZBL files in the *potentials* directory of the LAMMPS
-distribution have a ".tersoff.zbl" suffix. Lines that are not blank
-or comments (starting with #) define parameters for a triplet of
-elements. The parameters in a single entry correspond to coefficients
-in the formula above:
-
-* element 1 (the center atom in a 3-body interaction)
-* element 2 (the atom bonded to the center atom)
-* element 3 (the atom influencing the 1-2 bond in a bond-order sense)
-* m
-* gamma
-* lambda3 (1/distance units)
-* c
-* d
-* costheta0 (can be a value < -1 or > 1)
-* n
-* beta
-* lambda2 (1/distance units)
-* B (energy units)
-* R (distance units)
-* D (distance units)
-* lambda1 (1/distance units)
-* A (energy units)
-* Z_i
-* Z_j
-* ZBLcut (distance units)
-* ZBLexpscale (1/distance units)
-
-The n, beta, lambda2, B, lambda1, and A parameters are only used for
-two-body interactions. The m, gamma, lambda3, c, d, and costheta0
-parameters are only used for three-body interactions. The R and D
-parameters are used for both two-body and three-body interactions. The
-Z_i,Z_j, ZBLcut, ZBLexpscale parameters are used in the ZBL repulsive
-portion of the potential and in the Fermi-like function. The
-non-annotated parameters are unitless. The value of m must be 3 or 1.
-
-The Tersoff/ZBL potential file must contain entries for all the
-elements listed in the pair_coeff command. It can also contain
-entries for additional elements not being used in a particular
-simulation; LAMMPS ignores those entries.
-
-For a single-element simulation, only a single entry is required
-(e.g. SiSiSi). For a two-element simulation, the file must contain 8
-entries (for SiSiSi, SiSiC, SiCSi, SiCC, CSiSi, CSiC, CCSi, CCC), that
-specify Tersoff parameters for all permutations of the two elements
-interacting in three-body configurations. Thus for 3 elements, 27
-entries would be required, etc.
-
-As annotated above, the first element in the entry is the center atom
-in a three-body interaction and it is bonded to the 2nd atom and the
-bond is influenced by the 3rd atom. Thus an entry for SiCC means Si
-bonded to a C with another C atom influencing the bond. Thus
-three-body parameters for SiCSi and SiSiC entries will not, in
-general, be the same. The parameters used for the two-body
-interaction come from the entry where the 2nd element is repeated.
-Thus the two-body parameters for Si interacting with C, comes from the
-SiCC entry.
-
-The parameters used for a particular
-three-body interaction come from the entry with the corresponding
-three elements. The parameters used only for two-body interactions
-(n, beta, lambda2, B, lambda1, and A) in entries whose 2nd and 3rd
-element are different (e.g. SiCSi) are not used for anything and can
-be set to 0.0 if desired.
-
-Note that the twobody parameters in entries such as SiCC and CSiSi
-are often the same, due to the common use of symmetric mixing rules,
-but this is not always the case. For example, the beta and n parameters in
-Tersoff_2 :ref:`(Tersoff_2) <Tersoff_2>` are not symmetric.
-
-We chose the above form so as to enable users to define all commonly
-used variants of the Tersoff portion of the potential. In particular,
-our form reduces to the original Tersoff form when m = 3 and gamma =
-1, while it reduces to the form of :ref:`Albe et al. <Albe>` when beta = 1
-and m = 1. Note that in the current Tersoff implementation in LAMMPS,
-m must be specified as either 3 or 1. Tersoff used a slightly
-different but equivalent form for alloys, which we will refer to as
-Tersoff_2 potential :ref:`(Tersoff_2) <Tersoff_2>`.
-
-LAMMPS parameter values for Tersoff_2 can be obtained as follows:
-gamma = omega_ijk, lambda3 = 0 and the value of
-m has no effect. The parameters for species i and j can be calculated
-using the Tersoff_2 mixing rules:
-
-.. image:: Eqs/pair_tersoff_2.jpg
- :align: center
-
-Tersoff_2 parameters R and S must be converted to the LAMMPS
-parameters R and D (R is different in both forms), using the following
-relations: R=(R'+S')/2 and D=(S'-R')/2, where the primes indicate the
-Tersoff_2 parameters.
-
-In the potentials directory, the file SiCGe.tersoff provides the
-LAMMPS parameters for Tersoff's various versions of Si, as well as his
-alloy parameters for Si, C, and Ge. This file can be used for pure Si,
-(three different versions), pure C, pure Ge, binary SiC, and binary
-SiGe. LAMMPS will generate an error if this file is used with any
-combination involving C and Ge, since there are no entries for the GeC
-interactions (Tersoff did not publish parameters for this
-cross-interaction.) Tersoff files are also provided for the SiC alloy
-(SiC.tersoff) and the GaN (GaN.tersoff) alloys.
-
-Many thanks to Rutuparna Narulkar, David Farrell, and Xiaowang Zhou
-for helping clarify how Tersoff parameters for alloys have been
-defined in various papers. Also thanks to Ram Devanathan for
-providing the base ZBL implementation.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the MANYBODY package. It is only enabled
-if LAMMPS was built with that package (which it is by default). See
-the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This pair style requires the :doc:`newton <newton>` setting to be "on"
-for pair interactions.
-
-The Tersoff/ZBL potential files provided with LAMMPS (see the
-potentials directory) are parameterized for metal :doc:`units <units>`.
-You can use the Tersoff potential with any LAMMPS units, but you would
-need to create your own Tersoff potential file with coefficients
-listed in the appropriate units if your simulation doesn't use "metal"
-units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Tersoff_1:
-
-
-
-**(Tersoff_1)** J. Tersoff, Phys Rev B, 37, 6991 (1988).
-
-.. _ZBL:
-
-
-
-**(ZBL)** J.F. Ziegler, J.P. Biersack, U. Littmark, 'Stopping and Ranges
-of Ions in Matter' Vol 1, 1985, Pergamon Press.
-
-.. _Albe:
-
-
-
-**(Albe)** J. Nord, K. Albe, P. Erhart and K. Nordlund, J. Phys.:
-Condens. Matter, 15, 5649(2003).
-
-.. _Tersoff_2:
-
-
-
-**(Tersoff_2)** J. Tersoff, Phys Rev B, 39, 5566 (1989); errata (PRB 41, 3248)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_thole.txt b/doc/html/_sources/pair_thole.txt
deleted file mode 100644
index ad674665b..000000000
--- a/doc/html/_sources/pair_thole.txt
+++ /dev/null
@@ -1,220 +0,0 @@
-.. index:: pair_style thole
-
-pair_style thole command
-========================
-
-pair_style lj/cut/thole/long command
-====================================
-
-pair_style lj/cut/thole/long/omp command
-========================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style style args
-
-* style = *thole* or *lj/cut/thole/long* or *lj/cut/thole/long/omp*
-* args = list of arguments for a particular style
-
-.. parsed-literal::
-
- *thole* args = damp cutoff
- damp = global damping parameter
- cutoff = global cutoff (distance units)
- *lj/cut/thole/long* or *lj/cut/thole/long/omp* args = damp cutoff (cutoff2)
- damp = global damping parameter
- cutoff = global cutoff for LJ (and Thole if only 1 arg) (distance units)
- cutoff2 = global cutoff for Thole (optional) (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style hybrid/overlay ... thole 2.6 12.0
- pair_coeff 1 1 thole 1.0
- pair_coeff 1 2 thole 1.0 2.6 10.0
- pair_coeff * 2 thole 1.0 2.6
-
-.. parsed-literal::
-
- pair_style lj/cut/thole/long 2.6 12.0
-
-Description
-"""""""""""
-
-The *thole* pair styles are meant to be used with force fields that
-include explicit polarization through Drude dipoles. This link
-describes how to use the :doc:`thermalized Drude oscillator model <tutorial_drude>` in LAMMPS and polarizable models in LAMMPS
-are discussed in :ref:`this Section <howto_25>`.
-
-The *thole* pair style should be used as a sub-style within in the
-:doc:`pair_hybrid/overlay <pair_hybrid>` command, in conjunction with a
-main pair style including Coulomb interactions, i.e. any pair style
-containing *coul/cut* or *coul/long* in its style name.
-
-The *lj/cut/thole/long* pair style is equivalent to, but more convenient that
-the frequent combination *hybrid/overlay lj/cut/coul/long cutoff thole damp
-cutoff2*\ . It is not only a shorthand for this pair_style combination, but
-it also allows for mixing pair coefficients instead of listing them all.
-The *lj/cut/thole/long* pair style is also a bit faster because it avoids an
-overlay and can benefit from OMP acceleration. Moreover, it uses a more
-precise approximation of the direct Coulomb interaction at short range similar
-to :doc:`coul/long/cs <pair_coul_long_cs>`, which stabilizes the temperature of
-Drude particles.
-
-The *thole* pair styles compute the Coulomb interaction damped at
-short distances by a function
-
-
-.. math::
-
- \begin{equation} T_{ij}(r_{ij}) = 1 - \left( 1 +
- \frac{s_{ij} r_{ij} }{2} \right)
- \exp \left( - s_{ij} r_{ij} \right) \end{equation}
-
-This function results from an adaptation to point charges
-:ref:`(Noskov) <Noskov>` of the dipole screening scheme originally proposed
-by :ref:`Thole <Thole>`. The scaling coefficient :math:`s_{ij}` is determined
-by the polarizability of the atoms, :math:`\alpha_i`, and by a Thole
-damping parameter :math:`a`. This Thole damping parameter usually takes
-a value of 2.6, but in certain force fields the value can depend upon
-the atom types. The mixing rule for Thole damping parameters is the
-arithmetic average, and for polarizabilities the geometric average
-between the atom-specific values.
-
-
-.. math::
-
- \begin{equation} s_{ij} = \frac{ a_{ij} }{
- (\alpha_{ij})^{1/3} } = \frac{ (a_i + a_j)/2 }{
- [(\alpha_i\alpha_j)^{1/2}]^{1/3} } \end{equation}
-
-The damping function is only applied to the interactions between the
-point charges representing the induced dipoles on polarizable sites,
-that is, charges on Drude particles, :math:`q_{D,i}`, and opposite
-charges, :math:`-q_{D,i}`, located on the respective core particles
-(to which each Drude particle is bonded). Therefore, Thole screening
-is not applied to the full charge of the core particle :math:`q_i`, but
-only to the :math:`-q_{D,i}` part of it.
-
-The interactions between core charges are subject to the weighting
-factors set by the :doc:`special_bonds <special_bonds>` command. The
-interactions between Drude particles and core charges or
-non-polarizable atoms are also subject to these weighting factors. The
-Drude particles inherit the 1-2, 1-3 and 1-4 neighbor relations from
-their respective cores.
-
-For pair_style *thole*\ , the following coefficients must be defined for
-each pair of atoms types via the :doc:`pair_coeff <pair_coeff>` command
-as in the example above.
-
-* alpha (distance units^3)
-* damp
-* cutoff (distance units)
-
-The last two coefficients are optional. If not specified the global
-Thole damping parameter or global cutoff specified in the pair_style
-command are used. In order to specify a cutoff (third argument) a damp
-parameter (second argument) must also be specified.
-
-For pair style *lj/cut/thole/long*\ , the following coefficients must be
-defined for each pair of atoms types via the :doc:`pair_coeff <pair_coeff>`
-command.
-
-* epsilon (energy units)
-* sigma (length units)
-* alpha (distance units^3)
-* damps
-* LJ cutoff (distance units)
-
-The last two coefficients are optional and default to the global values from
-the *pair_style* command 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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-**Mixing**\ :
-
-The *thole* pair style does not support mixing. Thus, coefficients
-for all I,J pairs must be specified explicitly.
-
-The *lj/cut/thole/long* pair style does support mixing. Mixed coefficients
-are defined using
-
-
-.. math::
-
- \begin{equation} \alpha_{ij} = \sqrt{\alpha_i\alpha_j}\end{equation}
-
-
-.. math::
-
- \begin{equation} a_{ij} = \frac 1 2 (a_i + a_j)\end{equation}
-
-Restrictions
-""""""""""""
-
-
-These pair styles are part of the USER-DRUDE package. They are only
-enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This pair_style should currently not be used with the :doc:`charmm dihedral style <dihedral_charmm>` if the latter has non-zero 1-4 weighting
-factors. This is because the *thole* pair style does not know which
-pairs are 1-4 partners of which dihedrals.
-
-The *lj/cut/thole/long* pair style should be used with a :doc:`Kspace solver <kspace_style>`
-like PPPM or Ewald, which is only enabled if LAMMPS was built with the kspace
-package.
-
-Related commands
-""""""""""""""""
-
-:doc:`fix drude <fix_drude>`, :doc:`fix langevin/drude <fix_langevin_drude>`, :doc:`fix drude/transform <fix_drude_transform>`, :doc:`compute temp/drude <compute_temp_drude>`
-`pair_style lj/cut/coul/long <pair_lj_cut_coul_long>`_
-
-**Default:** none
-
-
-----------
-
-
-.. _Noskov:
-
-
-
-**(Noskov)** Noskov, Lamoureux and Roux, J Phys Chem B, 109, 6705 (2005).
-
-.. _Thole:
-
-
-
-**(Thole)** Chem Phys, 59, 341 (1981).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_tri_lj.txt b/doc/html/_sources/pair_tri_lj.txt
deleted file mode 100644
index 4ff299b0a..000000000
--- a/doc/html/_sources/pair_tri_lj.txt
+++ /dev/null
@@ -1,126 +0,0 @@
-.. index:: pair_style tri/lj
-
-pair_style tri/lj command
-=========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style tri/lj cutoff
-
-cutoff = global cutoff for interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style tri/lj 3.0
- pair_coeff * * 1.0 1.0
- pair_coeff 1 1 1.0 1.5 2.5
-
-Description
-"""""""""""
-
-Style *tri/lj* treats particles which are triangles as a set of small
-spherical particles that tile the triangle surface as explained below.
-Interactions between two triangles, each with N1 and N2 spherical
-particles, are calculated as the pairwise sum of N1*N2 Lennard-Jones
-interactions. Interactions between a triangle with N spherical
-particles and a point particle are treated as the pairwise sum of N
-Lennard-Jones interactions. See the :doc:`pair_style lj/cut <pair_lj>`
-doc page for the definition of Lennard-Jones interactions.
-
-The cutoff distance for an interaction between 2 triangles, or between
-a triangle and a point particle, is calculated from the position of
-the triangle (its centroid), not between pairs of individual spheres
-comprising the triangle. Thus an interaction is either calculated in
-its entirety or not at all.
-
-The set of non-overlapping spherical particles that represent a
-triangle, for purposes of this pair style, are generated in the
-following manner. Assume the triangle is of type I, and sigma_II has
-been specified. We want a set of spheres with centers in the plane of
-the triangle, none of them larger in diameter than sigma_II, which
-completely cover the triangle's area, but with minimial overlap and a
-minimal total number of spheres. This is done in a recursive manner.
-Place a sphere at the centroid of the original triangle. Calculate
-what diameter it must have to just cover all 3 corner points of the
-triangle. If that diameter is equal to or smaller than sigma_II, then
-include a sphere of the calculated diameter in the set of covering
-spheres. It the diameter is larger than sigma_II, then split the
-triangle into 2 triangles by bisecting its longest side. Repeat the
-process on each sub-triangle, recursing as far as needed to generate a
-set of covering spheres. When finished, the original criteria are
-met, and the set of covering spheres shoule be near minimal in number
-and overlap, at least for input triangles with a reasonable
-aspect-ratio.
-
-The LJ interaction between 2 spheres on different triangles of types
-I,J is computed with an arithmetic mixing of the sigma values of the 2
-spheres and using the specified epsilon value for I,J atom types.
-Note that because the sigma values for triangles spheres is computed
-using only sigma_II values, specific to the triangles's type, this
-means that any specified sigma_IJ values (for I != J) are effectively
-ignored.
-
-For style *tri/lj*\ , the following coefficients must be defined for
-each pair of atoms types via the :doc:`pair_coeff <pair_coeff>` command
-as in the examples above, or in the data file or restart files read by
-the :doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands:
-
-* epsilon (energy units)
-* sigma (distance units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global cutoff
-is used.
-
-
-----------
-
-
-**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 all of this pair style can be mixed. The
-default mix value is *geometric*\ . See the "pair_modify" command for
-details.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This style is part of the ASPHERE package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <2_3>` section for more info.
-
-Defining particles to be triangles so they participate in tri/tri or
-tri/particle interactions requires the use the :doc:`atom_style tri <atom_style>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`, :doc:`pair_style line/lj <pair_line_lj>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_vashishta.txt b/doc/html/_sources/pair_vashishta.txt
deleted file mode 100644
index 8914b1298..000000000
--- a/doc/html/_sources/pair_vashishta.txt
+++ /dev/null
@@ -1,256 +0,0 @@
-.. index:: pair_style vashishta
-
-pair_style vashishta command
-============================
-
-pair_style vashishta/omp command
-================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style vashishta
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style vashishta
- pair_coeff * * SiC.vashishta Si C
-
-Description
-"""""""""""
-
-The *vashishta* style computes the combined 2-body and 3-body
-family of potentials developed in the group of Vashishta and
-co-workers. By combining repulsive, screened Coulombic,
-screened charge-dipole, and dispersion interactions with a
-bond-angle energy based on the Stillinger-Weber potential,
-this potential has been used to describe a variety of inorganic
-compounds, including SiO2 :ref:`Vashishta1990 <Vashishta1990>`,
-SiC :ref:`Vashishta2007 <Vashishta2007>`,
-and InP :ref:`Branicio2009 <Branicio2009>`.
-
-The potential for the energy U of a system of atoms is
-
-.. image:: Eqs/pair_vashishta.jpg
- :align: center
-
-where we follow the notation used in :ref:`Branicio2009 <Branicio2009>`.
-U2 is a two-body term and U3 is a three-body term. The
-summation over two-body terms is over all neighbors J within
-a cutoff distance = *rc*\ . The twobody terms are shifted and
-tilted by a linear function so that the energy and force are
-both zero at *rc*\ . The summation over three-body terms
-is over all neighbors J and K within a cut-off distance = *r0*\ ,
-where the exponential screening function becomes zero.
-
-Only a single pair_coeff command is used with the *vashishta* style which
-specifies a Vashishta 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 Vashishta elements to atom types
-
-See the :doc:`pair_coeff <pair_coeff>` doc page for alternate ways
-to specify the path for the potential file.
-
-As an example, imagine a file SiC.vashishta has parameters for
-Si and C. If your LAMMPS simulation has 4 atoms types and you want
-the 1st 3 to be Si, and the 4th to be C, you would use the following
-pair_coeff command:
-
-.. parsed-literal::
-
- pair_coeff * * SiC.vashishta Si Si Si C
-
-The 1st 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 file. The final C argument maps LAMMPS atom type 4
-to the C element in the file. If a mapping value is specified as
-NULL, the mapping is not performed. This can be used when a *vashishta*
-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.
-
-Vashishta files in the *potentials* directory of the LAMMPS
-distribution have a ".vashishta" suffix. Lines that are not blank or
-comments (starting with #) define parameters for a triplet of
-elements. The parameters in a single entry correspond to the two-body
-and three-body coefficients in the formulae above:
-
-* element 1 (the center atom in a 3-body interaction)
-* element 2
-* element 3
-* H (energy units)
-* eta
-* Zi (electron charge units)
-* Zj (electron charge units)
-* lambda1 (distance units)
-* D (energy units)
-* lambda4 (distance units)
-* W (energy units)
-* rc (distance units)
-* B (energy units)
-* gamma
-* r0 (distance units)
-* C
-* costheta0
-
-The non-annotated parameters are unitless.
-The Vashishta potential file must contain entries for all the
-elements listed in the pair_coeff command. It can also contain
-entries for additional elements not being used in a particular
-simulation; LAMMPS ignores those entries.
-For a single-element simulation, only a single entry is required
-(e.g. SiSiSi). For a two-element simulation, the file must contain 8
-entries (for SiSiSi, SiSiC, SiCSi, SiCC, CSiSi, CSiC, CCSi, CCC), that
-specify parameters for all permutations of the two elements
-interacting in three-body configurations. Thus for 3 elements, 27
-entries would be required, etc.
-
-Depending on the particular version of the Vashishta potential,
-the values of these parameters may be keyed to the identities of
-zero, one, two, or three elements.
-In order to make the input file format unambiguous, general,
-and simple to code,
-LAMMPS uses a slightly confusing method for specifying parameters.
-All parameters are divided into two classes: two-body and three-body.
-Two-body and three-body parameters are handled differently,
-as described below.
-The two-body parameters are H, eta, lambda1, D, lambda4, W, rc, gamma, and r0.
-They appear in the above formulae with two subscripts.
-The parameters Zi and Zj are also classified as two-body parameters,
-even though they only have 1 subscript.
-The three-body parameters are B, C, costheta0.
-They appear in the above formulae with three subscripts.
-Two-body and three-body parameters are handled differently,
-as described below.
-
-The first element in each entry is the center atom
-in a three-body interaction, while the second and third elements
-are two neighbor atoms. Three-body parameters for a central atom I
-and two neighbors J and K are taken from the IJK entry.
-Note that even though three-body parameters do not depend on the order of
-J and K, LAMMPS stores three-body parameters for both IJK and IKJ.
-The user must ensure that these values are equal.
-Two-body parameters for an atom I interacting with atom J are taken from
-the IJJ entry, where the 2nd and 3rd
-elements are the same. Thus the two-body parameters
-for Si interacting with C come from the SiCC entry. Note that even
-though two-body parameters (except possibly gamma and r0 in U3)
-do not depend on the order of the two elements,
-LAMMPS will get the Si-C value from the SiCC entry
-and the C-Si value from the CSiSi entry. The user must ensure
-that these values are equal. Two-body parameters appearing
-in entries where the 2nd and 3rd elements are different are
-stored but never used. It is good practice to enter zero for
-these values. Note that the three-body function U3 above
-contains the two-body parameters gamma and r0. So U3 for a
-central C atom bonded to an Si atom and a second C atom
-will take three-body parameters from the CSiC entry, but
-two-body parameters from the CCC and CSiSi entries.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**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 :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style does not write its information to :doc:`binary restart files <restart>`, since it is stored in potential files. Thus, you
-need to re-specify the pair_style and pair_coeff commands in an input
-script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This pair style is part of the MANYBODY package. It is only enabled
-if LAMMPS was built with that package (which it is by default). See
-the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This pair style requires the :doc:`newton <newton>` setting to be "on"
-for pair interactions.
-
-The Vashishta potential files provided with LAMMPS (see the
-potentials directory) are parameterized for metal :doc:`units <units>`.
-You can use the Vashishta potential with any LAMMPS units, but you would need
-to create your own Vashishta potential file with coefficients listed in the
-appropriate units if your simulation doesn't use "metal" units.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Vashishta1990:
-
-
-
-**(Vashishta1990)** P. Vashishta, R. K. Kalia, J. P. Rino, Phys. Rev. B 41, 12197 (1990).
-
-.. _Vashishta2007:
-
-
-
-**(Vashishta2007)** P. Vashishta, R. K. Kalia, A. Nakano, J. P. Rino. J. Appl. Phys. 101, 103515 (2007).
-
-.. _Branicio2009:
-
-
-
-**(Branicio2009)** Branicio, Rino, Gan and Tsuzuki, J. Phys Condensed Matter 21 (2009) 095002
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_write.txt b/doc/html/_sources/pair_write.txt
deleted file mode 100644
index 14460bd59..000000000
--- a/doc/html/_sources/pair_write.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-.. index:: pair_write
-
-pair_write command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_write itype jtype N style inner outer file keyword Qi Qj
-
-* itype,jtype = 2 atom types
-* N = # of values
-* style = *r* or *rsq* or *bitmap*
-* inner,outer = inner and outer cutoff (distance units)
-* file = name of file to write values to
-* keyword = section name in file for this set of tabulated values
-* Qi,Qj = 2 atom charges (charge units) (optional)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_write 1 3 500 r 1.0 10.0 table.txt LJ
- pair_write 1 1 1000 rsq 2.0 8.0 table.txt Yukawa_1_1 -0.5 0.5
-
-Description
-"""""""""""
-
-Write energy and force values to a file as a function of distance for
-the currently defined pair potential. This is useful for plotting the
-potential function or otherwise debugging its values. If the file
-already exists, the table of values is appended to the end of the file
-to allow multiple tables of energy and force to be included in one
-file.
-
-The energy and force values are computed at distances from inner to
-outer for 2 interacting atoms of type itype and jtype, using the
-appropriate :doc:`pair_coeff <pair_coeff>` coefficients. If the style
-is *r*\ , then N distances are used, evenly spaced in r; if the style is
-*rsq*\ , N distances are used, evenly spaced in r^2.
-
-For example, for N = 7, style = *r*\ , inner = 1.0, and outer = 4.0,
-values are computed at r = 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0.
-
-If the style is *bitmap*\ , then 2^N values are written to the file in a
-format and order consistent with how they are read in by the
-:doc:`pair_coeff <pair_coeff>` command for pair style *table*\ . For
-reasonable accuracy in a bitmapped table, choose N >= 12, an *inner*
-value that is smaller than the distance of closest approach of 2
-atoms, and an *outer* value <= cutoff of the potential.
-
-If the pair potential is computed between charged atoms, the charges
-of the pair of interacting atoms can optionally be specified. If not
-specified, values of Qi = Qj = 1.0 are used.
-
-The file is written in the format used as input for the
-:doc:`pair_style <pair_style>` *table* option with *keyword* as the
-section name. Each line written to the file lists an index number
-(1-N), a distance (in distance units), an energy (in energy units),
-and a force (in force units).
-
-Restrictions
-""""""""""""
-
-
-All force field coefficients for pair and other kinds of interactions
-must be set before this command can be invoked.
-
-Due to how the pairwise force is computed, an inner value > 0.0 must
-be specified even if the potential has a finite value at r = 0.0.
-
-For EAM potentials, the pair_write command only tabulates the
-pairwise portion of the potential, not the embedding portion.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style table <pair_table>`,
-:doc:`pair_style <pair_style>`, :doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_yukawa.txt b/doc/html/_sources/pair_yukawa.txt
deleted file mode 100644
index 08785af46..000000000
--- a/doc/html/_sources/pair_yukawa.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-.. index:: pair_style yukawa
-
-pair_style yukawa command
-=========================
-
-pair_style yukawa/gpu command
-=============================
-
-pair_style yukawa/omp command
-=============================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style yukawa kappa cutoff
-
-* kappa = screening length (inverse distance units)
-* cutoff = global cutoff for Yukawa interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style yukawa 2.0 2.5
- pair_coeff 1 1 100.0 2.3
- pair_coeff * * 100.0
-
-Description
-"""""""""""
-
-Style *yukawa* computes pairwise interactions with the formula
-
-.. image:: Eqs/pair_yukawa.jpg
- :align: center
-
-Rc is the cutoff.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* A (energy*distance units)
-* cutoff (distance units)
-
-The last coefficient is optional. If not specified, the global yukawa
-cutoff is used.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the A coefficient and cutoff
-distance for this pair style can be mixed. A is an energy value mixed
-like a LJ epsilon. The default mix value is *geometric*\ . See the
-"pair_modify" command for details.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_yukawa_colloid.txt b/doc/html/_sources/pair_yukawa_colloid.txt
deleted file mode 100644
index 4676c361a..000000000
--- a/doc/html/_sources/pair_yukawa_colloid.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-.. index:: pair_style yukawa/colloid
-
-pair_style yukawa/colloid command
-=================================
-
-pair_style yukawa/colloid/gpu command
-=====================================
-
-pair_style yukawa/colloid/omp command
-=====================================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style yukawa/colloid kappa cutoff
-
-* kappa = screening length (inverse distance units)
-* cutoff = global cutoff for colloidal Yukawa interactions (distance units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style yukawa/colloid 2.0 2.5
- pair_coeff 1 1 100.0 2.3
- pair_coeff * * 100.0
-
-Description
-"""""""""""
-
-Style *yukawa/colloid* computes pairwise interactions with the formula
-
-.. image:: Eqs/pair_yukawa_colloid.jpg
- :align: center
-
-where Ri and Rj are the radii of the two particles and Rc is the
-cutoff.
-
-In contrast to :doc:`pair_style yukawa <pair_yukawa>`, this functional
-form arises from the Coulombic interaction between two colloid
-particles, screened due to the presence of an electrolyte, see the
-book by :ref:`Safran <Safran>` for a derivation in the context of DVLO
-theory. :doc:`Pair_style yukawa <pair_yukawa>` is a screened Coulombic
-potential between two point-charges and uses no such approximation.
-
-This potential applies to nearby particle pairs for which the Derjagin
-approximation holds, meaning h << Ri + Rj, where h is the
-surface-to-surface separation of the two particles.
-
-When used in combination with :doc:`pair_style colloid <pair_colloid>`,
-the two terms become the so-called DLVO potential, which combines
-electrostatic repulsion and van der Waals attraction.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* A (energy/distance units)
-* cutoff (distance units)
-
-The prefactor A is determined from the relationship between surface
-charge and surface potential due to the presence of electrolyte. Note
-that the A for this potential style has different units than the A
-used in :doc:`pair_style yukawa <pair_yukawa>`. For low surface
-potentials, i.e. less than about 25 mV, A can be written as:
-
-.. parsed-literal::
-
- A = 2 * PI * R*eps*eps0 * kappa * psi^2
-
-where
-
-* R = colloid radius (distance units)
-* eps0 = permittivity of free space (charge^2/energy/distance units)
-* eps = relative permittivity of fluid medium (dimensionless)
-* kappa = inverse screening length (1/distance units)
-* psi = surface potential (energy/charge units)
-
-The last coefficient is optional. If not specified, the global
-yukawa/colloid cutoff is used.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the A coefficient and cutoff
-distance for this pair style can be mixed. A is an energy value mixed
-like a LJ epsilon. The default mix value is *geometric*\ . See the
-"pair_modify" command for details.
-
-This pair style supports the :doc:`pair_modify <pair_modify>` shift
-option for the energy of the pair interaction.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant
-for this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This style is part of the COLLOID package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-This pair style requires that atoms be finite-size spheres with a
-diameter, as defined by the :doc:`atom_style sphere <atom_style>`
-command.
-
-Per-particle polydispersity is not yet supported by this pair style;
-per-type polydispersity is allowed. This means all particles of the
-same type must have the same diameter. Each type can have a different
-diameter.
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Safran:
-
-
-
-**(Safran)** Safran, Statistical Thermodynamics of Surfaces, Interfaces,
-And Membranes, Westview Press, ISBN: 978-0813340791 (2003).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_zbl.txt b/doc/html/_sources/pair_zbl.txt
deleted file mode 100644
index b2dde5cda..000000000
--- a/doc/html/_sources/pair_zbl.txt
+++ /dev/null
@@ -1,165 +0,0 @@
-.. index:: pair_style zbl
-
-pair_style zbl command
-======================
-
-pair_style zbl/gpu command
-==========================
-
-pair_style zbl/omp command
-==========================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style zbl inner outer
-
-* inner = distance where switching function begins
-* outer = global cutoff for ZBL interaction
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style zbl 3.0 4.0
- pair_coeff * * 73.0 73.0
- pair_coeff 1 1 14.0 14.0
-
-Description
-"""""""""""
-
-Style *zbl* computes the Ziegler-Biersack-Littmark (ZBL) screened nuclear
-repulsion for describing high-energy collisions between atoms.
-:ref:`(Ziegler) <Ziegler>`. It includes an additional switching function
-that ramps the energy, force, and curvature smoothly to zero
-between an inner and outer cutoff. The potential
-energy due to a pair of atoms at a distance r_ij is given by:
-
-.. image:: Eqs/pair_zbl.jpg
- :align: center
-
-where e is the electron charge, epsilon_0 is the electrical
-permittivity of vacuum, and Z_i and Z_j are the nuclear charges of the
-two atoms. The switching function S(r) is identical to that used by
-:doc:`pair_style lj/gromacs <pair_gromacs>`. Here, the inner and outer
-cutoff are the same for all pairs of atom types.
-
-The following coefficients must be defined for each pair of atom types
-via the :doc:`pair_coeff <pair_coeff>` command as in the examples above,
-or in the LAMMPS data file.
-
-* Z_i (atomic number for first atom type, e.g. 13.0 for aluminum)
-
-* Z_j (ditto for second atom type)
-
-The values of Z_i and Z_j are normally equal to the atomic
-numbers of the two atom types. Thus, the user may optionally
-specify only the coefficients for each I==I pair, and rely
-on the obvious mixing rule for cross interactions (see below).
-Note that when I==I it is required that Z_i == Z_j. When used
-with :doc:`hybrid/overlay <pair_hybrid>` and pairs are assigned
-to more than one sub-style, the mixing rule is not used and
-each pair of types interacting with the ZBL sub-style must
-be included in a pair_coeff command.
-
-.. note::
-
- The numerical values of the exponential decay constants in the
- screening function depend on the unit of distance. In the above
- equation they are given for units of angstroms. LAMMPS will
- automatically convert these values to the distance unit of the
- specified LAMMPS :doc:`units <units>` setting. The values of Z should
- always be given as multiples of a proton's charge, e.g. 29.0 for
- copper.
-
-
-----------
-
-
-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 :doc:`Section_accelerate <Section_accelerate>`
-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 :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-For atom type pairs I,J and I != J, the Z_i and Z_j coefficients
-can be mixed by taking Z_i and Z_j from the values specified for
-I == I and J == J cases. When used
-with :doc:`hybrid/overlay <pair_hybrid>` and pairs are assigned
-to more than one sub-style, the mixing rule is not used and
-each pair of types interacting with the ZBL sub-style
-must be included in a pair_coeff command.
-The :doc:`pair_modify <pair_modify>` mix option has no effect on
-the mixing behavior
-
-The ZBL pair style does not support the :doc:`pair_modify <pair_modify>`
-shift option, since the ZBL interaction is already smoothed to 0.0 at
-the cutoff.
-
-The :doc:`pair_modify <pair_modify>` table option is not relevant for
-this pair style.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-tail option for adding long-range tail corrections to energy and
-pressure, since there are no corrections for a potential that goes to
-0.0 at the cutoff.
-
-This pair style does not write information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands must be
-specified in an input script that reads a restart file.
-
-This pair style can only be used via the *pair* keyword of the
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_coeff <pair_coeff>`
-
-**Default:** none
-
-
-----------
-
-
-.. _Ziegler:
-
-
-
-**(Ziegler)** J.F. Ziegler, J. P. Biersack and U. Littmark, "The
-Stopping and Range of Ions in Matter," Volume 1, Pergamon, 1985.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/pair_zero.txt b/doc/html/_sources/pair_zero.txt
deleted file mode 100644
index 989479114..000000000
--- a/doc/html/_sources/pair_zero.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-.. index:: pair_style zero
-
-pair_style zero command
-=======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- pair_style zero cutoff *nocoeff*
-
-* zero = style name of this pair style
- cutoff = global cutoff (distance units)
- nocoeff = ignore all pair_coeff parameters (optional)
-Examples
-""""""""
-
-.. parsed-literal::
-
- pair_style zero 10.0
- pair_style zero 5.0 nocoeff
- pair_coeff * *
- pair_coeff 1 2*4 3.0
-
-Description
-"""""""""""
-
-Define a global or per-type cutoff length for the purpose of
-building a neighbor list and acquiring ghost atoms, but do
-not compute any pairwise forces or energies.
-
-This can be useful for fixes or computes which require a neighbor list
-to enumerate pairs of atoms within some cutoff distance, but when
-pairwise forces are not otherwise needed. Examples are the :doc:`fix bond/create <fix_bond_create>`, :doc:`compute rdf <compute_rdf>`,
-:doc:`compute voronoi/atom <compute_voronoi_atom>` commands.
-
-Note that the :doc:`comm_modify cutoff <comm_modify>` command can be
-used to insure communication of ghost atoms even when a pair style is
-not defined, but it will not trigger neighbor list generation.
-
-The optional *nocoeff* flag allows to read data files with a PairCoeff
-section for any pair style. Similarly, any pair_coeff commands
-will only be checked for the atom type numbers and the rest ignored.
-In this case, only the global cutoff will be used.
-
-The following coefficients must be defined for each pair of atoms
-types via the :doc:`pair_coeff <pair_coeff>` command as in the examples
-above, or in the data file or restart files read by the
-:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
-commands, or by mixing as described below:
-
-* cutoff (distance units)
-
-This coefficient is optional. If not specified, the global cutoff
-specified in the pair_style command is used. If the pair_style has
-been specified with the optional *nocoeff* flag, then a cutoff
-pair coefficient is ignored.
-
-
-----------
-
-
-**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
-
-The cutoff distance for this pair style can be mixed. The default mix
-value is *geometric*\ . See the "pair_modify" command for details.
-
-This pair style does not support the :doc:`pair_modify <pair_modify>`
-shift, table, and tail options.
-
-This pair style writes its information to :doc:`binary restart files <restart>`, 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
-:doc:`run_style respa <run_style>` command. It does not support the
-*inner*\ , *middle*\ , *outer* keywords.
-
-
-----------
-
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`pair_style none <pair_none>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/partition.txt b/doc/html/_sources/partition.txt
deleted file mode 100644
index feed23771..000000000
--- a/doc/html/_sources/partition.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-.. index:: partition
-
-partition command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- partition style N command ...
-
-* style = *yes* or *no*
-* N = partition number (see asterisk form below)
-* command = any LAMMPS command
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- partition yes 1 processors 4 10 6
- partition no 5 print "Active partition"
- partition yes *5 fix all nve
- partition yes 6* fix all nvt temp 1.0 1.0 0.1
-
-Description
-"""""""""""
-
-This command invokes the specified command on a subset of the
-partitions of processors you have defined via the -partition
-command-line switch. See :ref:`Section_start 6 <start_7>`
-for an explanation of the switch.
-
-Normally, every input script command in your script is invoked by
-every partition. This behavior can be modified by defining world- or
-universe-style :doc:`variables <variable>` that have different values
-for each partition. This mechanism can be used to cause your script
-to jump to different input script files on different partitions, if
-such a variable is used in a :doc:`jump <jump>` command.
-
-The "partition" command is another mechanism for having as input
-script operate differently on different partitions. It is basically a
-prefix on any LAMMPS command. The commmand will only be invoked on
-the partition(s) specified by the *style* and *N* arguments.
-
-If the *style* is *yes*\ , the command will be invoked on any partition
-which matches the *N* argument. If the *style* is *no* the command
-will be invoked on all the partitions which do not match the Np
-argument.
-
-Partitions are numbered from 1 to Np, where Np is the number of
-partitions specified by the :ref:`-partition command-line switch <start_7>`.
-
-*N* can be specified in one of two ways. An explicit numeric value
-can be used, as in the 1st example above. Or a wild-card asterisk can
-be used to span a range of partition numbers. This takes the form "*"
-or "*n" or "n*" or "m*n". An asterisk with no numeric values means
-all partitions from 1 to Np. A leading asterisk means all partitions
-from 1 to n (inclusive). A trailing asterisk means all partitions
-from n to Np (inclusive). A middle asterisk means all partitions from
-m to n (inclusive).
-
-This command can be useful for the "run_style verlet/split" command
-which imposed requirements on how the :doc:`processors <processors>`
-command lays out a 3d grid of processors in each of 2 partitions.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`run_style verlet/split <run_style>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/prd.txt b/doc/html/_sources/prd.txt
deleted file mode 100644
index 23daecbb1..000000000
--- a/doc/html/_sources/prd.txt
+++ /dev/null
@@ -1,353 +0,0 @@
-.. index:: prd
-
-prd command
-===========
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- prd N t_event n_dephase t_dephase t_correlate compute-ID seed keyword value ...
-
-* N = # of timesteps to run (not including dephasing/quenching)
-* t_event = timestep interval between event checks
-* n_dephase = number of velocity randomizations to perform in each dephase run
-* t_dephase = number of timesteps to run dynamics after each velocity randomization during dephase
-* t_correlate = number of timesteps within which 2 consecutive events are considered to be correlated
-* compute-ID = ID of the compute used for event detection
-* random_seed = random # seed (positive integer)
-* zero or more keyword/value pairs may be appended
-* keyword = *min* or *temp* or *vel*
-.. parsed-literal::
-
- *min* values = etol ftol maxiter maxeval
- etol = stopping tolerance for energy, used in quenching
- ftol = stopping tolerance for force, used in quenching
- maxiter = max iterations of minimize, used in quenching
- maxeval = max number of force/energy evaluations, used in quenching
- *temp* value = Tdephase
- Tdephase = target temperature for velocity randomization, used in dephasing
- *vel* values = loop dist
- loop = *all* or *local* or *geom*\ , used in dephasing
- dist = *uniform* or *gaussian*\ , used in dephasing
- *time* value = *steps* or *clock*
- *steps* = simulation runs for N timesteps on each replica (default)
- *clock* = simulation runs for N timesteps across all replicas
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- prd 5000 100 10 10 100 1 54982
- prd 5000 100 10 10 100 1 54982 min 0.1 0.1 100 200
-
-Description
-"""""""""""
-
-Run a parallel replica dynamics (PRD) simulation using multiple
-replicas of a system. One or more replicas can be used. The total
-number of steps *N* to run can be interpreted in one of two ways; see
-discussion of the *time* keyword below.
-
-PRD is described in :ref:`this paper <Voter>` by Art Voter. It is a method
-for performing accelerated dynamics that is suitable for
-infrequent-event systems that obey first-order kinetics. A good
-overview of accelerated dynamics methods for such systems in given in
-:ref:`this review paper <Voter2>` from the same group. To quote from the
-paper: "The dynamical evolution is characterized by vibrational
-excursions within a potential basin, punctuated by occasional
-transitions between basins." The transition probability is
-characterized by p(t) = k*exp(-kt) where k is the rate constant.
-Running multiple replicas gives an effective enhancement in the
-timescale spanned by the multiple simulations, while waiting for an
-event to occur.
-
-Each replica runs on a partition of one or more processors. Processor
-partitions are defined at run-time using the -partition command-line
-switch; see :ref:`Section_start 6 <start_7>` of the
-manual. Note that if you have MPI installed, you can run a
-multi-replica simulation with more replicas (partitions) than you have
-physical processors, e.g you can run a 10-replica simulation on one or
-two processors. For PRD, this makes little sense, since this offers
-no effective parallel speed-up in searching for infrequent events. See
-:ref:`Section_howto 5 <howto_5>` of the manual for further
-discussion.
-
-When a PRD simulation is performed, it is assumed that each replica is
-running the same model, though LAMMPS does not check for this.
-I.e. the simulation domain, the number of atoms, the interaction
-potentials, etc should be the same for every replica.
-
-A PRD run has several stages, which are repeated each time an "event"
-occurs in one of the replicas, as defined below. The logic for a PRD
-run is as follows:
-
-.. parsed-literal::
-
- while (time remains):
- dephase for n_dephase*t_dephase steps
- until (event occurs on some replica):
- run dynamics for t_event steps
- quench
- check for uncorrelated event on any replica
- until (no correlated event occurs):
- run dynamics for t_correlate steps
- quench
- check for correlated event on this replica
- event replica shares state with all replicas
-
-Before this loop begins, the state of the system on replica 0 is
-shared with all replicas, so that all replicas begin from the same
-initial state. The first potential energy basin is identified by
-quenching (an energy minimization, see below) the initial state and
-storing the resulting coordinates for reference.
-
-In the first stage, dephasing is performed by each replica
-independently to eliminate correlations between replicas. This is
-done by choosing a random set of velocities, based on the
-*random_seed* that is specified, and running *t_dephase* timesteps of
-dynamics. This is repeated *n_dephase* times. At each of the
-*n_dephase* stages, if an event occurs during the *t_dephase* steps of
-dynamics for a particular replica, the replica repeats the stage until
-no event occurs.
-
-If the *temp* keyword is not specified, the target temperature for
-velocity randomization for each replica is the current temperature of
-that replica. Otherwise, it is the specified *Tdephase* temperature.
-The style of velocity randomization is controlled using the keyword
-*vel* with arguments that have the same meaning as their counterparts
-in the :doc:`velocity <velocity>` command.
-
-In the second stage, each replica runs dynamics continuously, stopping
-every *t_event* steps to check if a transition event has occurred.
-This check is performed by quenching the system and comparing the
-resulting atom coordinates to the coordinates from the previous basin.
-The first time through the PRD loop, the "previous basin" is the set
-of quenched coordinates from the initial state of the system.
-
-A quench is an energy minimization and is performed by whichever
-algorithm has been defined by the :doc:`min_style <min_style>` command.
-Minimization parameters may be set via the
-:doc:`min_modify <min_modify>` command and by the *min* keyword of the
-PRD command. The latter are the settings that would be used with the
-:doc:`minimize <minimize>` command. Note that typically, you do not
-need to perform a highly-converged minimization to detect a transition
-event.
-
-The event check is performed by a compute with the specified
-*compute-ID*\ . Currently there is only one compute that works with the
-PRD commmand, which is the :doc:`compute event/displace <compute_event_displace>` command. Other
-event-checking computes may be added. :doc:`Compute event/displace <compute_event_displace>` checks whether any atom in
-the compute group has moved further than a specified threshold
-distance. If so, an "event" has occurred.
-
-In the third stage, the replica on which the event occurred (event
-replica) continues to run dynamics to search for correlated events.
-This is done by running dynamics for *t_correlate* steps, quenching
-every *t_event* steps, and checking if another event has occurred.
-
-The first time no correlated event occurs, the final state of the
-event replica is shared with all replicas, the new basin reference
-coordinates are updated with the quenched state, and the outer loop
-begins again. While the replica event is searching for correlated
-events, all the other replicas also run dynamics and event checking
-with the same schedule, but the final states are always overwritten by
-the state of the event replica.
-
-The outer loop of the pseudo-code above continues until *N* steps of
-dynamics have been performed. Note that *N* only includes the
-dynamics of stages 2 and 3, not the steps taken during dephasing or
-the minimization iterations of quenching. The specified *N* is
-interpreted in one of two ways, depending on the *time* keyword. If
-the *time* value is *steps*\ , which is the default, then each replica
-runs for *N* timesteps. If the *time* value is *clock*\ , then the
-simulation runs until *N* aggregate timesteps across all replicas have
-elapsed. This aggregate time is the "clock" time defined below, which
-typically advances nearly M times faster than the timestepping on a
-single replica.
-
-
-----------
-
-
-Four kinds of output can be generated during a PRD run: event
-statistics, thermodynamic output by each replica, dump files, and
-restart files.
-
-When running with multiple partitions (each of which is a replica in
-this case), the print-out to the screen and master log.lammps file is
-limited to event statistics. Note that if a PRD run is performed on
-only a single replica then the event statistics will be intermixed
-with the usual thermodynamic output discussed below.
-
-The quantities printed each time an event occurs are the timestep, CPU
-time, clock, event number, a correlation flag, the number of
-coincident events, and the replica number of the chosen event.
-
-The timestep is the usual LAMMPS timestep, except that time does not
-advance during dephasing or quenches, but only during dynamics. Note
-that are two kinds of dynamics in the PRD loop listed above. The
-first is when all replicas are performing independent dynamics,
-waiting for an event to occur. The second is when correlated events
-are being searched for and only one replica is running dynamics.
-
-The CPU time is the total processor time since the start of the PRD
-run.
-
-The clock is the same as the timestep except that it advances by M
-steps every timestep during the first kind of dynamics when the M
-replicas are running independently. The clock advances by only 1 step
-per timestep during the second kind of dynamics, since only a single
-replica is checking for a correlated event. Thus "clock" time
-represents the aggregate time (in steps) that effectively elapses
-during a PRD simulation on M replicas. If most of the PRD run is
-spent in the second stage of the loop above, searching for infrequent
-events, then the clock will advance nearly M times faster than it
-would if a single replica was running. Note the clock time between
-events will be drawn from p(t).
-
-The event number is a counter that increments with each event, whether
-it is uncorrelated or correlated.
-
-The correlation flag will be 0 when an uncorrelated event occurs
-during the second stage of the loop listed above, i.e. when all
-replicas are running independently. The correlation flag will be 1
-when a correlated event occurs during the third stage of the loop
-listed above, i.e. when only one replica is running dynamics.
-
-When more than one replica detects an event at the end of the second
-stage, then one of them is chosen at random. The number of coincident
-events is the number of replicas that detected an event. Normally, we
-expect this value to be 1. If it is often greater than 1, then either
-the number of replicas is too large, or *t_event* is too large.
-
-The replica number is the ID of the replica (from 0 to M-1) that
-found the event.
-
-
-----------
-
-
-When running on multiple partitions, LAMMPS produces additional log
-files for each partition, e.g. log.lammps.0, log.lammps.1, etc. For
-the PRD command, these contain the thermodynamic output for each
-replica. You will see short runs and minimizations corresponding to
-the dynamics and quench operations of the loop listed above. The
-timestep will be reset aprpopriately depending on whether the
-operation advances time or not.
-
-After the PRD command completes, timing statistics for the PRD run are
-printed in each replica's log file, giving a breakdown of how much CPU
-time was spent in each stage (dephasing, dynamics, quenching, etc).
-
-
-----------
-
-
-Any :doc:`dump files <dump>` defined in the input script, will be
-written to during a PRD run at timesteps corresponding to both
-uncorrelated and correlated events. This means the the requested dump
-frequency in the :doc:`dump <dump>` command is ignored. There will be
-one dump file (per dump command) created for all partitions.
-
-The atom coordinates of the dump snapshot are those of the minimum
-energy configuration resulting from quenching following a transition
-event. The timesteps written into the dump files correspond to the
-timestep at which the event occurred and NOT the clock. A dump
-snapshot corresponding to the initial minimum state used for event
-detection is written to the dump file at the beginning of each PRD
-run.
-
-
-----------
-
-
-If the :doc:`restart <restart>` command is used, a single restart file
-for all the partitions is generated, which allows a PRD run to be
-continued by a new input script in the usual manner.
-
-The restart file is generated at the end of the loop listed above. If
-no correlated events are found, this means it contains a snapshot of
-the system at time T + *t_correlate*\ , where T is the time at which the
-uncorrelated event occurred. If correlated events were found, then it
-contains a snapshot of the system at time T + *t_correlate*\ , where T
-is the time of the last correlated event.
-
-The restart frequency specified in the :doc:`restart <restart>` command
-is interpreted differently when performing a PRD run. It does not
-mean the timestep interval between restart files. Instead it means an
-event interval for uncorrelated events. Thus a frequency of 1 means
-write a restart file every time an uncorrelated event occurs. A
-frequency of 10 means write a restart file every 10th uncorrelated
-event.
-
-When an input script reads a restart file from a previous PRD run, the
-new script can be run on a different number of replicas or processors.
-However, it is assumed that *t_correlate* in the new PRD command is
-the same as it was previously. If not, the calculation of the "clock"
-value for the first event in the new run will be slightly off.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command can only be used if LAMMPS was built with the REPLICA
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info on packages.
-
-*N* and *t_correlate* settings must be integer multiples of
-*t_event*\ .
-
-Runs restarted from restart file written during a PRD run will not
-produce identical results due to changes in the random numbers used
-for dephasing.
-
-This command cannot be used when any fixes are defined that keep track
-of elapsed time to perform time-dependent operations. Examples
-include the "ave" fixes such as :doc:`fix ave/chunk <fix_ave_chunk>`.
-Also :doc:`fix dt/reset <fix_dt_reset>` and :doc:`fix deposit <fix_deposit>`.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute event/displace <compute_event_displace>`,
-:doc:`min_modify <min_modify>`, :doc:`min_style <min_style>`,
-:doc:`run_style <run_style>`, :doc:`minimize <minimize>`,
-:doc:`velocity <velocity>`, :doc:`temper <temper>`, :doc:`neb <neb>`,
-:doc:`tad <tad>`
-
-Default
-"""""""
-
-The option defaults are min = 0.1 0.1 40 50, no temp setting, vel =
-geom gaussian, and time = steps.
-
-
-----------
-
-
-.. _Voter:
-
-
-
-**(Voter)** Voter, Phys Rev B, 57, 13985 (1998).
-
-.. _Voter2:
-
-
-
-**(Voter2)** Voter, Montalenti, Germann, Annual Review of Materials
-Research 32, 321 (2002).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/print.txt b/doc/html/_sources/print.txt
deleted file mode 100644
index abac4f340..000000000
--- a/doc/html/_sources/print.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-.. index:: print
-
-print command
-=============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- print string keyword value
-
-* string = text string to print, which may contain variables
-* zero or more keyword/value pairs may be appended
-* keyword = *file* or *append* or *screen*
-.. parsed-literal::
-
- *file* value = filename
- *append* value = filename
- *screen* value = *yes* or *no*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- print "Done with equilibration" file info.dat
- print Vol=$v append info.dat screen no
- print "The system volume is now $v"
- print 'The system volume is now $v'
- print """
- System volume = $v
- System temperature = $t
- """
-
-Description
-"""""""""""
-
-Print a text string to the screen and logfile. The text string must
-be a single argument, so if it is one line but more than one word, it
-should be enclosed in single or double quotes. To generate multiple
-lines of output, the string can be enclosed in triple quotes, as in
-the last example above. If the text string contains variables, they
-will be evaluated and their current values printed.
-
-If the *file* or *append* keyword is used, a filename is specified to
-which the output will be written. If *file* is used, then the
-filename is overwritten if it already exists. If *append* is used,
-then the filename is appended to if it already exists, or created if
-it does not exist.
-
-If the *screen* keyword is used, output to the screen and logfile can
-be turned on or off as desired.
-
-If you want the print command to be executed multiple times (with
-changing variable values), there are 3 options. First, consider using
-the :doc:`fix print <fix_print>` command, which will print a string
-periodically during a simulation. Second, the print command can be
-used as an argument to the *every* option of the :doc:`run <run>`
-command. Third, the print command could appear in a section of the
-input script that is looped over (see the :doc:`jump <jump>` and
-:doc:`next <next>` commands).
-
-See the :doc:`variable <variable>` command for a description of *equal*
-style variables which are typically the most useful ones to use with
-the print command. Equal-style variables can calculate formulas
-involving mathematical operations, atom properties, group properties,
-thermodynamic properties, global values calculated by a
-:doc:`compute <compute>` or :doc:`fix <fix>`, or references to other
-:doc:`variables <variable>`.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix print <fix_print>`, :doc:`variable <variable>`
-
-Default
-"""""""
-
-The option defaults are no file output and screen = yes.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/processors.txt b/doc/html/_sources/processors.txt
deleted file mode 100644
index 4ede58be7..000000000
--- a/doc/html/_sources/processors.txt
+++ /dev/null
@@ -1,378 +0,0 @@
-.. index:: processors
-
-processors command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- processors Px Py Pz keyword args ...
-
-* Px,Py,Pz = # of processors in each dimension of 3d grid overlaying the simulation domain
-* zero or more keyword/arg pairs may be appended
-* keyword = *grid* or *map* or *part* or *file*
-.. parsed-literal::
-
- *grid* arg = gstyle params ...
- gstyle = *onelevel* or *twolevel* or *numa* or *custom*
- onelevel params = none
- twolevel params = Nc Cx Cy Cz
- Nc = number of cores per node
- Cx,Cy,Cz = # of cores in each dimension of 3d sub-grid assigned to each node
- numa params = none
- custom params = infile
- infile = file containing grid layout
- *map* arg = *cart* or *cart/reorder* or *xyz* or *xzy* or *yxz* or *yzx* or *zxy* or *zyx*
- cart = use MPI_Cart() methods to map processors to 3d grid with reorder = 0
- cart/reorder = use MPI_Cart() methods to map processors to 3d grid with reorder = 1
- xyz,xzy,yxz,yzx,zxy,zyx = map procesors to 3d grid in IJK ordering
- *numa* arg = none
- *part* args = Psend Precv cstyle
- Psend = partition # (1 to Np) which will send its processor layout
- Precv = partition # (1 to Np) which will recv the processor layout
- cstyle = *multiple*
- *multiple* = Psend grid will be multiple of Precv grid in each dimension
- *file* arg = outfile
- outfile = name of file to write 3d grid of processors to
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- processors * * 5
- processors 2 4 4
- processors * * 8 map xyz
- processors * * * grid numa
- processors * * * grid twolevel 4 * * 1
- processors 4 8 16 grid custom myfile
- processors * * * part 1 2 multiple
-
-Description
-"""""""""""
-
-Specify how processors are mapped as a regular 3d grid to the global
-simulation box. The mapping involves 2 steps. First if there are P
-processors it means choosing a factorization P = Px by Py by Pz so
-that there are Px processors in the x dimension, and similarly for the
-y and z dimensions. Second, the P processors are mapped to the
-regular 3d grid. The arguments to this command control each of these
-2 steps.
-
-The Px, Py, Pz parameters affect the factorization. Any of the 3
-parameters can be specified with an asterisk "*", which means LAMMPS
-will choose the number of processors in that dimension of the grid.
-It will do this based on the size and shape of the global simulation
-box so as to minimize the surface-to-volume ratio of each processor's
-sub-domain.
-
-Choosing explicit values for Px or Py or Pz can be used to override
-the default manner in which LAMMPS will create the regular 3d grid of
-processors, if it is known to be sub-optimal for a particular problem.
-E.g. a problem where the extent of atoms will change dramatically in a
-particular dimension over the course of the simulation.
-
-The product of Px, Py, Pz must equal P, the total # of processors
-LAMMPS is running on. For a :doc:`2d simulation <dimension>`, Pz must
-equal 1.
-
-Note that if you run on a prime number of processors P, then a grid
-such as 1 x P x 1 will be required, which may incur extra
-communication costs due to the high surface area of each processor's
-sub-domain.
-
-Also note that if multiple partitions are being used then P is the
-number of processors in this partition; see :ref:`this section <start_7>` for an explanation of the
--partition command-line switch. Also note that you can prefix the
-processors command with the :doc:`partition <partition>` command to
-easily specify different Px,Py,Pz values for different partitions.
-
-You can use the :doc:`partition <partition>` command to specify
-different processor grids for different partitions, e.g.
-
-.. parsed-literal::
-
- partition yes 1 processors 4 4 4
- partition yes 2 processors 2 3 2
-
-.. note::
-
- This command only affects the initial regular 3d grid created
- when the simulation box is first specified via a
- :doc:`create_box <create_box>` or :doc:`read_data <read_data>` or
- :doc:`read_restart <read_restart>` command. Or if the simulation box is
- re-created via the :doc:`replicate <replicate>` command. The same
- regular grid is initially created, regardless of which
- :doc:`comm_style <comm_style>` command is in effect.
-
-If load-balancing is never invoked via the :doc:`balance <balance>` or
-:doc:`fix balance <fix_balance>` commands, then the initial regular grid
-will persist for all simulations. If balancing is performed, some of
-the methods invoked by those commands retain the logical toplogy of
-the initial 3d grid, and the mapping of processors to the grid
-specified by the processors command. However the grid spacings in
-different dimensions may change, so that processors own sub-domains of
-different sizes. If the :doc:`comm_style tiled <comm_style>` command is
-used, methods invoked by the balancing commands may discard the 3d
-grid of processors and tile the simulation domain with sub-domains of
-different sizes and shapes which no longer have a logical 3d
-connectivity. If that occurs, all the information specified by the
-processors command is ignored.
-
-
-----------
-
-
-The *grid* keyword affects the factorization of P into Px,Py,Pz and it
-can also affect how the P processor IDs are mapped to the 3d grid of
-processors.
-
-The *onelevel* style creates a 3d grid that is compatible with the
-Px,Py,Pz settings, and which minimizes the surface-to-volume ratio of
-each processor's sub-domain, as described above. The mapping of
-processors to the grid is determined by the *map* keyword setting.
-
-The *twolevel* style can be used on machines with multicore nodes to
-minimize off-node communication. It insures that contiguous
-sub-sections of the 3d grid are assigned to all the cores of a node.
-For example if *Nc* is 4, then 2x2x1 or 2x1x2 or 1x2x2 sub-sections of
-the 3d grid will correspond to the cores of each node. This affects
-both the factorization and mapping steps.
-
-The *Cx*\ , *Cy*\ , *Cz* settings are similar to the *Px*\ , *Py*\ , *Pz*
-settings, only their product should equal *Nc*\ . Any of the 3
-parameters can be specified with an asterisk "*", which means LAMMPS
-will choose the number of cores in that dimension of the node's
-sub-grid. As with Px,Py,Pz, it will do this based on the size and
-shape of the global simulation box so as to minimize the
-surface-to-volume ratio of each processor's sub-domain.
-
-.. note::
-
- For the *twolevel* style to work correctly, it assumes the MPI
- ranks of processors LAMMPS is running on are ordered by core and then
- by node. E.g. if you are running on 2 quad-core nodes, for a total of
- 8 processors, then it assumes processors 0,1,2,3 are on node 1, and
- processors 4,5,6,7 are on node 2. This is the default rank ordering
- for most MPI implementations, but some MPIs provide options for this
- ordering, e.g. via environment variable settings.
-
-The *numa* style operates similar to the *twolevel* keyword except
-that it auto-detects which cores are running on which nodes.
-Currently, it does this in only 2 levels, but it may be extended in
-the future to account for socket topology and other non-uniform memory
-access (NUMA) costs. It also uses a different algorithm than the
-*twolevel* keyword for doing the two-level factorization of the
-simulation box into a 3d processor grid to minimize off-node
-communication, and it does its own MPI-based mapping of nodes and
-cores to the regular 3d grid. Thus it may produce a different layout
-of the processors than the *twolevel* options.
-
-The *numa* style will give an error if the number of MPI processes is
-not divisible by the number of cores used per node, or any of the Px
-or Py of Pz values is greater than 1.
-
-.. note::
-
- Unlike the *twolevel* style, the *numa* style does not require
- any particular ordering of MPI ranks i norder to work correctly. This
- is because it auto-detects which processes are running on which nodes.
-
-The *custom* style uses the file *infile* to define both the 3d
-factorization and the mapping of processors to the grid.
-
-The file should have the following format. Any number of initial
-blank or comment lines (starting with a "#" character) can be present.
-The first non-blank, non-comment line should have
-3 values:
-
-.. parsed-literal::
-
- Px Py Py
-
-These must be compatible with the total number of processors
-and the Px, Py, Pz settings of the processors commmand.
-
-This line should be immediately followed by
-P = Px*Py*Pz lines of the form:
-
-.. parsed-literal::
-
- ID I J K
-
-where ID is a processor ID (from 0 to P-1) and I,J,K are the
-processors location in the 3d grid. I must be a number from 1 to Px
-(inclusive) and similarly for J and K. The P lines can be listed in
-any order, but no processor ID should appear more than once.
-
-
-----------
-
-
-The *map* keyword affects how the P processor IDs (from 0 to P-1) are
-mapped to the 3d grid of processors. It is only used by the
-*onelevel* and *twolevel* grid settings.
-
-The *cart* style uses the family of MPI Cartesian functions to perform
-the mapping, namely MPI_Cart_create(), MPI_Cart_get(),
-MPI_Cart_shift(), and MPI_Cart_rank(). It invokes the
-MPI_Cart_create() function with its reorder flag = 0, so that MPI is
-not free to reorder the processors.
-
-The *cart/reorder* style does the same thing as the *cart* style
-except it sets the reorder flag to 1, so that MPI can reorder
-processors if it desires.
-
-The *xyz*\ , *xzy*\ , *yxz*\ , *yzx*\ , *zxy*\ , and *zyx* styles are all
-similar. If the style is IJK, then it maps the P processors to the
-grid so that the processor ID in the I direction varies fastest, the
-processor ID in the J direction varies next fastest, and the processor
-ID in the K direction varies slowest. For example, if you select
-style *xyz* and you have a 2x2x2 grid of 8 processors, the assignments
-of the 8 octants of the simulation domain will be:
-
-.. parsed-literal::
-
- proc 0 = lo x, lo y, lo z octant
- proc 1 = hi x, lo y, lo z octant
- proc 2 = lo x, hi y, lo z octant
- proc 3 = hi x, hi y, lo z octant
- proc 4 = lo x, lo y, hi z octant
- proc 5 = hi x, lo y, hi z octant
- proc 6 = lo x, hi y, hi z octant
- proc 7 = hi x, hi y, hi z octant
-
-Note that, in principle, an MPI implementation on a particular machine
-should be aware of both the machine's network topology and the
-specific subset of processors and nodes that were assigned to your
-simulation. Thus its MPI_Cart calls can optimize the assignment of
-MPI processes to the 3d grid to minimize communication costs. In
-practice, however, few if any MPI implementations actually do this.
-So it is likely that the *cart* and *cart/reorder* styles simply give
-the same result as one of the IJK styles.
-
-Also note, that for the *twolevel* grid style, the *map* setting is
-used to first map the nodes to the 3d grid, then again to the cores
-within each node. For the latter step, the *cart* and *cart/reorder*
-styles are not supported, so an *xyz* style is used in their place.
-
-
-----------
-
-
-The *part* keyword affects the factorization of P into Px,Py,Pz.
-
-It can be useful when running in multi-partition mode, e.g. with the
-:doc:`run_style verlet/split <run_style>` command. It specifies a
-dependency bewteen a sending partition *Psend* and a receiving
-partition *Precv* which is enforced when each is setting up their own
-mapping of their processors to the simulation box. Each of *Psend*
-and *Precv* must be integers from 1 to Np, where Np is the number of
-partitions you have defined via the :ref:`-partition command-line switch <start_7>`.
-
-A "dependency" means that the sending partition will create its
-regular 3d grid as Px by Py by Pz and after it has done this, it will
-send the Px,Py,Pz values to the receiving partition. The receiving
-partition will wait to receive these values before creating its own
-regular 3d grid and will use the sender's Px,Py,Pz values as a
-constraint. The nature of the constraint is determined by the
-*cstyle* argument.
-
-For a *cstyle* of *multiple*\ , each dimension of the sender's processor
-grid is required to be an integer multiple of the corresponding
-dimension in the receiver's processor grid. This is a requirement of
-the :doc:`run_style verlet/split <run_style>` command.
-
-For example, assume the sending partition creates a 4x6x10 grid = 240
-processor grid. If the receiving partition is running on 80
-processors, it could create a 4x2x10 grid, but it will not create a
-2x4x10 grid, since in the y-dimension, 6 is not an integer multiple of
-4.
-
-.. note::
-
- If you use the :doc:`partition <partition>` command to invoke
- different "processsors" commands on different partitions, and you also
- use the *part* keyword, then you must insure that both the sending and
- receiving partitions invoke the "processors" command that connects the
- 2 partitions via the *part* keyword. LAMMPS cannot easily check for
- this, but your simulation will likely hang in its setup phase if this
- error has been made.
-
-
-----------
-
-
-The *file* keyword writes the mapping of the factorization of P
-processors and their mapping to the 3d grid to the specified file
-*outfile*\ . This is useful to check that you assigned physical
-processors in the manner you desired, which can be tricky to figure
-out, especially when running on multiple partitions or on, a multicore
-machine or when the processor ranks were reordered by use of the
-:ref:`-reorder command-line switch <start_7>` or due to
-use of MPI-specific launch options such as a config file.
-
-If you have multiple partitions you should insure that each one writes
-to a different file, e.g. using a :doc:`world-style variable <variable>`
-for the filename. The file has a self-explanatory header, followed by
-one-line per processor in this format:
-
-world-ID universe-ID original-ID: I J K: name
-
-The IDs are the processor's rank in this simulation (the world), the
-universe (of multiple simulations), and the original MPI communicator
-used to instantiate LAMMPS, respectively. The world and universe IDs
-will only be different if you are running on more than one partition;
-see the :ref:`-partition command-line switch <start_7>`.
-The universe and original IDs will only be different if you used the
-:ref:`-reorder command-line switch <start_7>` to reorder
-the processors differently than their rank in the original
-communicator LAMMPS was instantiated with.
-
-I,J,K are the indices of the processor in the regular 3d grid, each
-from 1 to Nd, where Nd is the number of processors in that dimension
-of the grid.
-
-The *name* is what is returned by a call to MPI_Get_processor_name()
-and should represent an identifier relevant to the physical processors
-in your machine. Note that depending on the MPI implementation,
-multiple cores can have the same *name*\ .
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command cannot be used after the simulation box is defined by a
-:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command.
-It can be used before a restart file is read to change the 3d
-processor grid from what is specified in the restart file.
-
-The *grid numa* keyword only currently works with the *map cart*
-option.
-
-The *part* keyword (for the receiving partition) only works with the
-*grid onelevel* or *grid twolevel* options.
-
-Related commands
-""""""""""""""""
-
-:doc:`partition <partition>`, :ref:`-reorder command-line switch <start_7>`
-
-Default
-"""""""
-
-The option defaults are Px Py Pz = * * *, grid = onelevel, and map =
-cart.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/python.txt b/doc/html/_sources/python.txt
deleted file mode 100644
index ae02e6c9d..000000000
--- a/doc/html/_sources/python.txt
+++ /dev/null
@@ -1,543 +0,0 @@
-.. index:: python
-
-python command
-==============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- python func keyword args ...
-
-* func = name of Python function
-* one or more keyword/args pairs must be appended
-.. parsed-literal::
-
- keyword = *invoke* or *input* or *return* or *format* or *file* or *here* or *exists*
- *invoke* arg = none = invoke the previously defined Python function
- *input* args = N i1 i2 ... iN
- N = # of inputs to function
- i1,...,iN = value, SELF, or LAMMPS variable name
- value = integer number, floating point number, or string
- SELF = reference to LAMMPS itself which can be accessed by Python function
- variable = v_name, where name = name of LAMMPS variable, e.g. v_abc
- *return* arg = varReturn
- varReturn = v_name = LAMMPS variable name which return value of function will be assigned to
- *format* arg = fstring with M characters
- M = N if no return value, where N = # of inputs
- M = N+1 if there is a return value
- fstring = each character (i,f,s,p) corresponds in order to an input or return value
- 'i' = integer, 'f' = floating point, 's' = string, 'p' = SELF
- *file* arg = filename
- filename = file of Python code, which defines func
- *here* arg = inline
- inline = one or more lines of Python code which defines func
- must be a single argument, typically enclosed between triple quotes
- *exists* arg = none = Python code has been loaded by previous python command
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- python pForce input 2 v_x 20.0 return v_f format fff file force.py
- python pForce invoke
-
-.. parsed-literal::
-
- python factorial input 1 myN return v_fac format ii here """
- def factorial(n):
- if n == 1: return n
- return n * factorial(n-1)
- """
-
-.. parsed-literal::
-
- python loop input 1 SELF return v_value format -f here """
- def loop(lmpptr,N,cut0):
- from lammps import lammps
- lmp = lammps(ptr=lmpptr)
-
-.. parsed-literal::
-
- # loop N times, increasing cutoff each time
-
-.. parsed-literal::
-
- for i in range(N):
- cut = cut0 + i*0.1
- lmp.set_variable("cut",cut) # set a variable in LAMMPS
- lmp.command("pair_style lj/cut ${cut}") # LAMMPS commands
- lmp.command("pair_coeff * * 1.0 1.0")
- lmp.command("run 100")
- """
-
-Description
-"""""""""""
-
-.. note::
-
- It is not currently possible to use the :doc:`python <python>`
- command described in this section with Python 3, only with Python 2.
- The C API changed from Python 2 to 3 and the LAMMPS code is not
- compatible with both.
-
-Define a Python function or execute a previously defined function.
-Arguments, including LAMMPS variables, can be passed to the function
-from the LAMMPS input script and a value returned by the Python
-function to a LAMMPS variable. The Python code for the function can
-be included directly in the input script or in a separate Python file.
-The function can be standard Python code or it can make "callbacks" to
-LAMMPS through its library interface to query or set internal values
-within LAMMPS. This is a powerful mechanism for performing complex
-operations in a LAMMPS input script that are not possible with the
-simple input script and variable syntax which LAMMPS defines. Thus
-your input script can operate more like a true programming language.
-
-Use of this command requires building LAMMPS with the PYTHON package
-which links to the Python library so that the Python interpreter is
-embedded in LAMMPS. More details about this process are given below.
-
-There are two ways to invoke a Python function once it has been
-defined. One is using the *invoke* keyword. The other is to assign
-the function to a :doc:`python-style variable <variable>` defined in
-your input script. Whenever the variable is evaluated, it will
-execute the Python function to assign a value to the variable. Note
-that variables can be evaluated in many different ways within LAMMPS.
-They can be substituted for directly in an input script. Or they can
-be passed to various commands as arguments, so that the variable is
-evaluated during a simulation run.
-
-A broader overview of how Python can be used with LAMMPS is
-given in :doc:`Section python <Section_python>`. There is an
-examples/python directory which illustrates use of the python
-command.
-
-
-----------
-
-
-The *func* setting specifies the name of the Python function. The
-code for the function is defined using the *file* or *here* keywords
-as explained below.
-
-If the *invoke* keyword is used, no other keywords can be used, and a
-previous python command must have defined the Python function
-referenced by this command. This invokes the Python function with the
-previously defined arguments and return value processed as explained
-below. You can invoke the function as many times as you wish in your
-input script.
-
-The *input* keyword defines how many arguments *N* the Python function
-expects. If it takes no arguments, then the *input* keyword should
-not be used. Each argument can be specified directly as a value,
-e.g. 6 or 3.14159 or abc (a string of characters). The type of each
-argument is specified by the *format* keyword as explained below, so
-that Python will know how to interpret the value. If the word SELF is
-used for an argument it has a special meaning. A pointer is passed to
-the Python function which it converts into a reference to LAMMPS
-itself. This enables the function to call back to LAMMPS through its
-library interface as explained below. This allows the Python function
-to query or set values internal to LAMMPS which can affect the
-subsequent execution of the input script. A LAMMPS variable can also
-be used as an argument, specified as v_name, where "name" is the name
-of the variable. Any style of LAMMPS variable can be used, as defined
-by the :doc:`variable <variable>` command. Each time the Python
-function is invoked, the LAMMPS variable is evaluated and its value is
-passed to the Python function.
-
-The *return* keyword is only needed if the Python function returns a
-value. The specified *varReturn* must be of the form v_name, where
-"name" is the name of a python-style LAMMPS variable, defined by the
-:doc:`variable <variable>` command. The Python function can return a
-numeric or string value, as specified by the *format* keyword.
-
-As explained on the :doc:`variable <variable>` doc page, the definition
-of a python-style variable associates a Python function name with the
-variable. This must match the *func* setting for this command. For
-exampe these two commands would be self-consistent:
-
-.. parsed-literal::
-
- variable foo python myMultiply
- python myMultiply return v_foo format f file funcs.py
-
-The two commands can appear in either order in the input script so
-long as both are specified before the Python function is invoked for
-the first time.
-
-The *format* keyword must be used if the *input* or *return* keyword
-is used. It defines an *fstring* with M characters, where M = sum of
-number of inputs and outputs. The order of characters corresponds to
-the N inputs, followed by the return value (if it exists). Each
-character must be one of the following: "i" for integer, "f" for
-floating point, "s" for string, or "p" for SELF. Each character
-defines the type of the corresponding input or output value of the
-Python function and affects the type conversion that is performed
-internally as data is passed back and forth between LAMMPS and Python.
-Note that it is permissible to use a :doc:`python-style variable <variable>` in a LAMMPS command that allows for an
-equal-style variable as an argument, but only if the output of the
-Python function is flagged as a numeric value ("i" or "f") via the
-*format* keyword.
-
-Either the *file*\ , *here*\ , or *exists* keyword must be used, but only
-one of them. These keywords specify what Python code to load into the
-Python interpreter. The *file* keyword gives the name of a file,
-which should end with a ".py" suffix, which contains Python code. The
-code will be immediately loaded into and run in the "main" module of
-the Python interpreter. Note that Python code which contains a
-function definition does not "execute" the function when it is run; it
-simply defines the function so that it can be invoked later.
-
-The *here* keyword does the same thing, except that the Python code
-follows as a single argument to the *here* keyword. This can be done
-using triple quotes as delimiters, as in the examples above. This
-allows Python code to be listed verbatim in your input script, with
-proper indentation, blank lines, and comments, as desired. See
-:ref:`Section 3.2 <cmd_2>`, for an explanation of how
-triple quotes can be used as part of input script syntax.
-
-The *exists* keyword takes no argument. It means that Python code
-containing the required Python function defined by the *func* setting,
-is assumed to have been previously loaded by another python command.
-
-Note that the Python code that is loaded and run must contain a
-function with the specified *func* name. To operate properly when
-later invoked, the the function code must match the *input* and
-*return* and *format* keywords specified by the python command.
-Otherwise Python will generate an error.
-
-
-----------
-
-
-This section describes how Python code can be written to work with
-LAMMPS.
-
-Whether you load Python code from a file or directly from your input
-script, via the *file* and *here* keywords, the code can be identical.
-It must be indented properly as Python requires. It can contain
-comments or blank lines. If the code is in your input script, it
-cannot however contain triple-quoted Python strings, since that will
-conflict with the triple-quote parsing that the LAMMPS input script
-performs.
-
-All the Python code you specify via one or more python commands is
-loaded into the Python "main" module, i.e. __main__. The code can
-define global variables or statements that are outside of function
-definitions. It can contain multiple functions, only one of which
-matches the *func* setting in the python command. This means you can
-use the *file* keyword once to load several functions, and the
-*exists* keyword thereafter in subsequent python commands to access
-the other functions previously loaded.
-
-A Python function you define (or more generally, the code you load)
-can import other Python modules or classes, it can make calls to other
-system functions or functions you define, and it can access or modify
-global variables (in the "main" module) which will persist between
-successive function calls. The latter can be useful, for example, to
-prevent a function from being invoke multiple times per timestep by
-different commands in a LAMMPS input script that access the returned
-python-style variable associated with the function. For example,
-consider this function loaded with two global variables defined
-outside the function:
-
-.. parsed-literal::
-
- nsteplast = -1
- nvaluelast = 0
-
-.. parsed-literal::
-
- def expensive(nstep):
- global nsteplast,nvaluelast
- if nstep == nsteplast: return nvaluelast
- nsteplast = nstep
- # perform complicated calculation
- nvalue = ...
- nvaluelast = nvalue
- return nvalue
-
-Nsteplast stores the previous timestep the function was invoked
-(passed as an argument to the function). Nvaluelast stores the return
-value computed on the last function invocation. If the function is
-invoked again on the same timestep, the previous value is simply
-returned, without re-computing it. The "global" statement inside the
-Python function allows it to overwrite the global variables.
-
-Note that if you load Python code multiple times (via multiple python
-commands), you can overwrite previously loaded variables and functions
-if you are not careful. E.g. if the code above were loaded twice, the
-global variables would be re-initialized, which might not be what you
-want. Likewise, if a function with the same name exists in two chunks
-of Python code you load, the function loaded second will override the
-function loaded first.
-
-It's important to realize that if you are running LAMMPS in parallel,
-each MPI task will load the Python interpreter and execute a local
-copy of the Python function(s) you define. There is no connection
-between the Python interpreters running on different processors.
-This implies three important things.
-
-First, if you put a print statement in your Python function, you will
-see P copies of the output, when running on P processors. If the
-prints occur at (nearly) the same time, the P copies of the output may
-be mixed together. Welcome to the world of parallel programming and
-debugging.
-
-Second, if your Python code loads modules that are not pre-loaded by
-the Python library, then it will load the module from disk. This may
-be a bottleneck if 1000s of processors try to load a module at the
-same time. On some large supercomputers, loading of modules from disk
-by Python may be disabled. In this case you would need to pre-build a
-Python library that has the required modules pre-loaded and link
-LAMMPS with that library.
-
-Third, if your Python code calls back to LAMMPS (discussed in the
-next section) and causes LAMMPS to perform an MPI operation requires
-global communication (e.g. via MPI_Allreduce), such as computing the
-global temperature of the system, then you must insure all your Python
-functions (running independently on different processors) call back to
-LAMMPS. Otherwise the code may hang.
-
-
-----------
-
-
-Your Python function can "call back" to LAMMPS through its
-library interface, if you use the SELF input to pass Python
-a pointer to LAMMPS. The mechanism for doing this in your
-Python function is as follows:
-
-.. parsed-literal::
-
- def foo(lmpptr,...):
- from lammps import lammps
- lmp = lammps(ptr=lmpptr)
- lmp.command('print "Hello from inside Python"')
- ...
-
-The function definition must include a variable (lmpptr in this case)
-which corresponds to SELF in the python command. The first line of
-the function imports the Python module lammps.py in the python dir of
-the distribution. The second line creates a Python object "lmp" which
-wraps the instance of LAMMPS that called the function. The
-"ptr=lmpptr" argument is what makes that happen. The thrid line
-invokes the command() function in the LAMMPS library interface. It
-takes a single string argument which is a LAMMPS input script command
-for LAMMPS to execute, the same as if it appeared in your input
-script. In this case, LAMMPS should output
-
-.. parsed-literal::
-
- Hello from inside Python
-
-to the screen and log file. Note that since the LAMMPS print command
-itself takes a string in quotes as its argument, the Python string
-must be delimited with a different style of quotes.
-
-:ref:`Section 11.7 <py_7>` describes the syntax for how
-Python wraps the various functions included in the LAMMPS library
-interface.
-
-A more interesting example is in the examples/python/in.python script
-which loads and runs the following function from examples/python/funcs.py:
-
-.. parsed-literal::
-
- def loop(N,cut0,thresh,lmpptr):
- print "LOOP ARGS",N,cut0,thresh,lmpptr
- from lammps import lammps
- lmp = lammps(ptr=lmpptr)
- natoms = lmp.get_natoms()
-
-.. parsed-literal::
-
- for i in range(N):
- cut = cut0 + i*0.1
-
-.. parsed-literal::
-
- lmp.set_variable("cut",cut) # set a variable in LAMMPS
- lmp.command("pair_style lj/cut ${cut}") # LAMMPS command
- #lmp.command("pair_style lj/cut %d" % cut) # LAMMPS command option
-
-.. parsed-literal::
-
- lmp.command("pair_coeff * * 1.0 1.0") # ditto
- lmp.command("run 10") # ditto
- pe = lmp.extract_compute("thermo_pe",0,0) # extract total PE from LAMMPS
- print "PE",pe/natoms,thresh
- if pe/natoms < thresh: return
-
-with these input script commands:
-
-.. parsed-literal::
-
- python loop input 4 10 1.0 -4.0 SELF format iffp file funcs.py
- python loop invoke
-
-This has the effect of looping over a series of 10 short runs (10
-timesteps each) where the pair style cutoff is increased from a value
-of 1.0 in distance units, in increments of 0.1. The looping stops
-when the per-atom potential energy falls below a threshhold of -4.0 in
-energy units. More generally, Python can be used to implement a loop
-with complex logic, much more so than can be created using the LAMMPS
-:doc:`jump <jump>` and :doc:`if <if>` commands.
-
-Several LAMMPS library functions are called from the loop function.
-Get_natoms() returns the number of atoms in the simulation, so that it
-can be used to normalize the potential energy that is returned by
-extract_compute() for the "thermo_pe" compute that is defined by
-default for LAMMPS thermodynamic output. Set_variable() sets the
-value of a string variable defined in LAMMPS. This library function
-is a useful way for a Python function to return multiple values to
-LAMMPS, more than the single value that can be passed back via a
-return statement. This cutoff value in the "cut" variable is then
-substituted (by LAMMPS) in the pair_style command that is executed
-next. Alternatively, the "LAMMPS command option" line could be used
-in place of the 2 preceeding lines, to have Python insert the value
-into the LAMMPS command string.
-
-.. note::
-
- When using the callback mechanism just described, recognize that
- there are some operations you should not attempt because LAMMPS cannot
- execute them correctly. If the Python function is invoked between
- runs in the LAMMPS input script, then it should be OK to invoke any
- LAMMPS input script command via the library interface command() or
- file() functions, so long as the command would work if it were
- executed in the LAMMPS input script directly at the same point.
-
-However, a Python function can also be invoked during a run, whenever
-an associated LAMMPS variable it is assigned to is evaluted. If the
-variable is an input argument to another LAMMPS command (e.g. :doc:`fix setforce <fix_setforce>`), then the Python function will be invoked
-inside the class for that command, in one of its methods that is
-invoked in the middle of a timestep. You cannot execute arbitrary
-input script commands from the Python function (again, via the
-command() or file() functions) at that point in the run and expect it
-to work. Other library functions such as those that invoke computes
-or other variables may have hidden side effects as well. In these
-cases, LAMMPS has no simple way to check that something illogical is
-being attempted.
-
-
-----------
-
-
-If you run Python code directly on your workstation, either
-interactively or by using Python to launch a Python script stored in a
-file, and your code has an error, you will typically see informative
-error messages. That is not the case when you run Python code from
-LAMMPS using an embedded Python interpreter. The code will typically
-fail silently. LAMMPS will catch some errors but cannot tell you
-where in the Python code the problem occurred. For example, if the
-Python code cannot be loaded and run because it has syntax or other
-logic errors, you may get an error from Python pointing to the
-offending line, or you may get one of these generic errors from
-LAMMPS:
-
-.. parsed-literal::
-
- Could not process Python file
- Could not process Python string
-
-When the Python function is invoked, if it does not return properly,
-you will typically get this generic error from LAMMPS:
-
-.. parsed-literal::
-
- Python function evaluation failed
-
-Here are three suggestions for debugging your Python code while
-running it under LAMMPS.
-
-First, don't run it under LAMMPS, at least to start with! Debug it
-using plain Python. Load and invoke your function, pass it arguments,
-check return values, etc.
-
-Second, add Python print statements to the function to check how far
-it gets and intermediate values it calculates. See the discussion
-above about printing from Python when running in parallel.
-
-Third, use Python exception handling. For example, say this statement
-in your Python function is failing, because you have not initialized the
-variable foo:
-
-.. parsed-literal::
-
- foo += 1
-
-If you put one (or more) statements inside a "try" statement,
-like this:
-
-.. parsed-literal::
-
- import exceptions
- print "Inside simple function"
- try:
- foo += 1 # one or more statements here
- except Exception, e:
- print "FOO error:",e
-
-then you will get this message printed to the screen:
-
-.. parsed-literal::
-
- FOO error: local variable 'foo' referenced before assignment
-
-If there is no error in the try statements, then nothing is printed.
-Either way the function continues on (unless you put a return or
-sys.exit() in the except clause).
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command is part of the PYTHON package. It is only enabled if
-LAMMPS was built with that package. See the :ref:`Making LAMMPS <start_3>` section for more info.
-
-Building LAMMPS with the PYTHON package will link LAMMPS with the
-Python library on your system. Settings to enable this are in the
-lib/python/Makefile.lammps file. See the lib/python/README file for
-information on those settings.
-
-If you use Python code which calls back to LAMMPS, via the SELF input
-argument explained above, there is an extra step required when
-building LAMMPS. LAMMPS must also be built as a shared library and
-your Python function must be able to to load the Python module in
-python/lammps.py that wraps the LAMMPS library interface. These are
-the same steps required to use Python by itself to wrap LAMMPS.
-Details on these steps are explained in :doc:`Section python <Section.python>`. Note that it is important that the
-stand-alone LAMMPS executable and the LAMMPS shared library be
-consistent (built from the same source code files) in order for this
-to work. If the two have been built at different times using
-different source files, problems may occur.
-
-As described above, you can use the python command to invoke a Python
-function which calls back to LAMMPS through its Python-wrapped library
-interface. However you cannot do the opposite. I.e. you cannot call
-LAMMPS from Python and invoke the python command to "callback" to
-Python and execute a Python function. LAMMPS will generate an error
-if you try to do that. Note that we think there actually should be a
-way to do that, but haven't yet been able to figure out how to do it
-successfully.
-
-Related commands
-""""""""""""""""
-
-:doc:`shell <shell>`, :doc:`variable <variable>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/quit.txt b/doc/html/_sources/quit.txt
deleted file mode 100644
index bcb0f48b3..000000000
--- a/doc/html/_sources/quit.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-.. index:: quit
-
-quit command
-============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- quit status
-
-status = numerical exit status (optional)
-
-Examples
-""""""""
-
-quit
-if "$n > 10000" then "quit 1":pre
-
-Description
-"""""""""""
-
-This command causes LAMMPS to exit, after shutting down all output
-cleanly.
-
-It can be used as a debug statement in an input script, to terminate
-the script at some intermediate point.
-
-It can also be used as an invoked command inside the "then" or "else"
-portion of an :doc:`if <if>` command.
-
-The optional status argument is an integer which signals the return
-status to a program calling LAMMPS. A return status of 0 usually
-indicates success. A status != 0 is failure, where the specified
-value can be used to distinguish the kind of error, e.g. where in the
-input script the quit was invoked. If not specified, a status of 0 is
-returned.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`if <if>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/read_data.txt b/doc/html/_sources/read_data.txt
deleted file mode 100644
index 2f03a1aa8..000000000
--- a/doc/html/_sources/read_data.txt
+++ /dev/null
@@ -1,1354 +0,0 @@
-.. index:: read_data
-
-read_data command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- read_data file keyword args ...
-
-* file = name of data file to read in
-* zero or more keyword/arg pairs may be appended
-* 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*
-.. parsed-literal::
-
- *add* arg = *append* or *Nstart* or *merge*
- append = add new atoms with IDs appended to current IDs
- Nstart = add new atoms with IDs starting with Nstart
- merge = add new atoms with their IDs unchanged
- *offset* args = toff boff aoff doff ioff
- toff = offset to add to atom types
- boff = offset to add to bond types
- aoff = offset to add to angle types
- doff = offset to add to dihedral types
- ioff = offset to add to improper types
- *shift* args = Sx Sy Sz
- Sx,Sy,Sz = distance to shift atoms when adding to system (distance units)
- *extra/atom/types* arg = # of extra atom types
- *extra/bond/types* arg = # of extra bond types
- *extra/angle/types* arg = # of extra angle types
- *extra/dihedral/types* arg = # of extra dihedral types
- *extra/improper/types* arg = # of extra improper types
- *group* args = groupID
- groupID = add atoms in data file to this group
- *nocoeff* = ignore force field parameters
- *fix* args = fix-ID header-string section-string
- fix-ID = ID of fix to process header lines and sections of data file
- header-string = header lines containing this string will be passed to fix
- section-string = section names with this string will be passed to fix
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- read_data data.lj
- read_data ../run7/data.polymer.gz
- read_data data.protein fix mycmap crossterm CMAP
- read_data data.water add append offset 3 1 1 1 1 shift 0.0 0.0 50.0
- read_data data.water add merge 1 group solvent
-
-Description
-"""""""""""
-
-Read in a data file containing information LAMMPS needs to run a
-simulation. The file can be ASCII text or a gzipped text file
-(detected by a .gz suffix). This is one of 3 ways to specify initial
-atom coordinates; see the :doc:`read_restart <read_restart>` and
-:doc:`create_atoms <create_atoms>` commands for alternative methods.
-Also see the explanation of the :ref:`-restart command-line switch <start_7>` which can convert a restart file to
-a data file.
-
-This command can be used multiple times to add new atoms and their
-properties to an existing system by using the *add*\ , *offset*\ , and
-*shift* keywords. See more details below, which includes the use case
-for the *extra* keywords.
-
-The *group* keyword adds all the atoms in the data file to the
-specified group-ID. The group will be created if it does not already
-exist. This is useful if you are reading multiple data files and wish
-to put sets of atoms into different groups so they can be operated on
-later. E.g. a group of added atoms can be moved to new positions via
-the :doc:`displace_atoms <displace_atoms>` command. Note that atoms
-read from the data file are also always added to the "all" group. The
-:doc:`group <group>` command discusses atom groups, as used in LAMMPS.
-
-The *nocoeff* keyword tells read_data to ignore force field parameters.
-The various Coeff sections are still read and have to have the correct
-number of lines, but they are not applied. This also allows to read a
-data file without having any pair, bond, angle, dihedral or improper
-styles defined, or to read a data file for a different force field.
-
-The use of the *fix* keyword is discussed below.
-
-
-----------
-
-
-**Reading multiple data files**
-
-The read_data command can be used multiple times with the same or
-different data files to build up a complex system from components
-contained in individual data files. For example one data file could
-contain fluid in a confined domain; a second could contain wall atoms,
-and the second file could be read a third time to create a wall on the
-other side of the fluid. The third set of atoms could be rotated to
-an opposing direction using the :doc:`displace_atoms <displace_atoms>`
-command, after the third read_data command is used.
-
-The *add*\ , *offset*\ , *shift*\ , *extra*\ , and *group* keywords are
-useful in this context.
-
-If a simulation box does not yet exist, the *add* keyword
-cannot be used; the read_data command is being used for the first
-time. If a simulation box does exist, due to using the
-:doc:`create_box <create_box>` command, or a previous read_data command,
-then the *add* keyword must be used.
-
-.. note::
-
- The simulation box size (xlo to xhi, ylo to yhi, zlo to zhi) in
- the new data file will be merged with the existing simulation box to
- create a large enough box in each dimension to contain both the
- existing and new atoms. Each box dimension never shrinks due to this
- merge operation, it only stays the same or grows. Care must be used if
- you are growing the existing simulation box in a periodic dimension.
- If there are existing atoms with bonds that straddle that periodic
- boundary, then the atoms may become far apart if the box size grows.
- This will separate the atoms in the bond, which can lead to "lost"
- bond atoms or bad dynamics.
-
-The three choices for the *add* argument affect how the IDs of atoms
-in the data file are treated. If *append* is specified, atoms in the
-data file are added to the current system, with their atom IDs reset
-so that an atomID = M in the data file becomes atomID = N+M, where N
-is the largest atom ID in the current system. This rule is applied to
-all occurrences of atom IDs in the data file, e.g. in the Velocity or
-Bonds section. If *Nstart* is specified, then *Nstart* is a numeric
-value is given, e.g. 1000, so that an atomID = M in the data file
-becomes atomID = 1000+M. If *merge* is specified, the data file atoms
-are added to the current system without changing their IDs. They are
-assumed to merge (without duplication) with the currently defined
-atoms. It is up to you to insure there are no multiply defined atom
-IDs, as LAMMPS only performs an incomplete check that this is the case
-by insuring the resulting max atomID >= the number of atoms.
-
-The *offset* and *shift* keywords can only be used if the *add*
-keyword is also specified.
-
-The *offset* keyword adds the specified offset values to the atom
-types, bond types, angle types, dihedral types, and improper types as
-they are read from the data file. E.g. if *toff* = 2, and the file
-uses atom types 1,2,3, then the added atoms will have atom types
-3,4,5. These offsets apply to all occurrences of types in the data
-file, e.g. for the Atoms or Masses or Pair Coeffs or Bond Coeffs
-sections. This makes it easy to use atoms and molecules and their
-attributes from a data file in different simulations, where you want
-their types (atom, bond, angle, etc) to be different depending on what
-other types already exist. All five offset values must be specified,
-but individual values will be ignored if the data file does not use
-that attribute (e.g. no bonds).
-
-The *shift* keyword can be used to specify an (Sx, Sy, Sz)
-displacement applied to the coordinates of each atom. Sz must be 0.0
-for a 2d simulation. This is a mechanism for adding structured
-collections of atoms at different locations within the simulation box,
-to build up a complex geometry. It is up to you to insure atoms do
-not end up overlapping unphysically which would lead to bad dynamics.
-Note that the :doc:`displace_atoms <displace_atoms>` command can be used
-to move a subset of atoms after they have been read from a data file.
-Likewise, the :doc:`delete_atoms <delete_atoms>` command can be used to
-remove overlapping atoms. Note that the shift values (Sx, Sy, Sz) are
-also added to the simulation box information (xlo, xhi, ylo, yhi, zlo,
-zhi) in the data file to shift its boundaries. E.g. xlo_new = xlo +
-Sx, xhi_new = xhi + Sx.
-
-The *extra* keywords can only be used the first time the read_data
-command is used. They are useful if you intend to add new atom, bond,
-angle, etc types later with additional read_data commands. This is
-because the maximum number of allowed atom, bond, angle, etc types is
-set by LAMMPS when the system is first initialized. If you do not use
-the *extra* keywords, then the number of these types will be limited
-to what appears in the first data file you read. For example, if the
-first data file is a solid substrate of Si, it will likely specify a
-single atom type. If you read a second data file with a different
-material (water molecules) that sit on top of the substrate, you will
-want to use different atom types for those atoms. You can only do
-this if you set the *extra/atom/types* keyword to a sufficiently large
-value when reading the substrate data file. Note that use of the
-*extra* keywords also allows each data file to contain sections like
-Masses or Pair Coeffs or Bond Coeffs which are sized appropriately for
-the number of types in that data file. If the *offset* keyword is
-used appropriately when each data file is read, the values in those
-sections will be stored correctly in the larger data structures
-allocated by the use of the *extra* keywords. E.g. the substrate file
-can list mass and pair coefficients for type 1 silicon atoms. The
-water file can list mass and pair coeffcients for type 1 and type 2
-hydrogen and oxygen atoms. Use of the *extra* and *offset* keywords
-will store those mass and pair coefficient values appropriately in
-data structures that allow for 3 atom types (Si, H, O). Of course,
-you would still need to specify coefficients for H/Si and O/Si
-interactions in your input script to have a complete pairwise
-interaction model.
-
-An alternative to using the *extra* keywords with the read_data
-command, is to use the :doc:`create_box <create_box>` command to
-initialize the simulation box and all the various type limits you need
-via its *extra* keywords. Then use the read_data command one or more
-times to populate the system with atoms, bonds, angles, etc, using the
-*offset* keyword if desired to alter types used in the various data
-files you read.
-
-
-----------
-
-
-**Format of a data file**
-
-The structure of the data file is important, though many settings and
-sections are optional or can come in any order. See the examples
-directory for sample data files for different problems.
-
-A data file has a header and a body. The header appears first. The
-first line of the header is always skipped; it typically contains a
-description of the file. Then lines are read one at a time. Lines
-can have a trailing comment starting with '#' that is ignored. If the
-line is blank (only whitespace after comment is deleted), it is
-skipped. If the line contains a header keyword, the corresponding
-value(s) is read from the line. If it doesn't contain a header
-keyword, the line begins the body of the file.
-
-The body of the file contains zero or more sections. The first line
-of a section has only a keyword. This line can have a trailing
-comment starting with '#' that is either ignored or can be used to
-check for a style match, as described below. The next line is
-skipped. The remaining lines of the section contain values. The
-number of lines depends on the section keyword as described below.
-Zero or more blank lines can be used between sections. Sections can
-appear in any order, with a few exceptions as noted below.
-
-The keyword *fix* can be used one or more times. Each usage specifies
-a fix that will be used to process a specific portion of the data
-file. Any header line containing *header-string* and any section with
-a name containing *section-string* will be passed to the specified
-fix. See the :doc:`fix property/atom <fix_property_atom>` command for
-an example of a fix that operates in this manner. The doc page for
-the fix defines the syntax of the header line(s) and section(s) that
-it reads from the data file. Note that the *header-string* can be
-specified as NULL, in which case no header lines are passed to the
-fix. This means that it can infer the length of its Section from
-standard header settings, such as the number of atoms.
-
-The formatting of individual lines in the data file (indentation,
-spacing between words and numbers) is not important except that header
-and section keywords (e.g. atoms, xlo xhi, Masses, Bond Coeffs) must
-be capitalized as shown and can't have extra white space between their
-words - e.g. two spaces or a tab between the 2 words in "xlo xhi" or
-the 2 words in "Bond Coeffs", is not valid.
-
-
-----------
-
-
-**Format of the header of a data file**
-
-These are the recognized header keywords. Header lines can come in
-any order. The value(s) are read from the beginning of the line.
-Thus the keyword *atoms* should be in a line like "1000 atoms"; the
-keyword *ylo yhi* should be in a line like "-10.0 10.0 ylo yhi"; the
-keyword *xy xz yz* should be in a line like "0.0 5.0 6.0 xy xz yz".
-All these settings have a default value of 0, except the lo/hi box
-size defaults are -0.5 and 0.5. A line need only appear if the value
-is different than the default.
-
-* *atoms* = # of atoms in system
-* *bonds* = # of bonds in system
-* *angles* = # of angles in system
-* *dihedrals* = # of dihedrals in system
-* *impropers* = # of impropers in system
-* *atom types* = # of atom types in system
-* *bond types* = # of bond types in system
-* *angle types* = # of angle types in system
-* *dihedral types* = # of dihedral types in system
-* *improper types* = # of improper types in system
-* *extra bond per atom* = leave space for this many new bonds per atom
-* *extra angle per atom* = leave space for this many new angles per atom
-* *extra dihedral per atom* = leave space for this many new dihedrals per atom
-* *extra improper per atom* = leave space for this many new impropers per atom
-* *extra special per atom* = leave space for this many new special bonds per atom
-* *ellipsoids* = # of ellipsoids in system
-* *lines* = # of line segments in system
-* *triangles* = # of triangles in system
-* *bodies* = # of bodies in system
-* *xlo xhi* = simulation box boundaries in x dimension
-* *ylo yhi* = simulation box boundaries in y dimension
-* *zlo zhi* = simulation box boundaries in z dimension
-* *xy xz yz* = simulation box tilt factors for triclinic system
-
-The initial simulation box size is determined by the lo/hi settings.
-In any dimension, the system may be periodic or non-periodic; see the
-:doc:`boundary <boundary>` command. When the simulation box is created
-it is also partitioned into a regular 3d grid of rectangular bricks,
-one per processor, based on the number of processors being used and
-the settings of the :doc:`processors <processors>` command. The
-partitioning can later be changed by the :doc:`balance <balance>` or
-:doc:`fix balance <fix_balance>` commands.
-
-If the *xy xz yz* line does not appear, LAMMPS will set up an
-axis-aligned (orthogonal) simulation box. If the line does appear,
-LAMMPS creates a non-orthogonal simulation domain shaped as a
-parallelepiped with triclinic symmetry. The parallelepiped has its
-"origin" at (xlo,ylo,zlo) and is defined by 3 edge vectors starting
-from the origin given by A = (xhi-xlo,0,0); B = (xy,yhi-ylo,0); C =
-(xz,yz,zhi-zlo). *Xy,xz,yz* can be 0.0 or positive or negative values
-and are called "tilt factors" because they are the amount of
-displacement applied to faces of an originally orthogonal box to
-transform it into the parallelepiped.
-
-By default, the tilt factors (xy,xz,yz) can not skew the box more than
-half the distance of the corresponding parallel box length. For
-example, if xlo = 2 and xhi = 12, then the x box length is 10 and the
-xy tilt factor must be between -5 and 5. Similarly, both xz and yz
-must be between -(xhi-xlo)/2 and +(yhi-ylo)/2. Note that this is not
-a limitation, since if the maximum tilt factor is 5 (as in this
-example), then configurations with tilt = ..., -15, -5, 5, 15, 25,
-... are all geometrically equivalent. If you wish to define a box
-with tilt factors that exceed these limits, you can use the :doc:`box tilt <box>` command, with a setting of *large*\ ; a setting of
-*small* is the default.
-
-See :ref:`Section_howto 12 <howto_12>` of the doc pages
-for a geometric description of triclinic boxes, as defined by LAMMPS,
-and how to transform these parameters to and from other commonly used
-triclinic representations.
-
-When a triclinic system is used, the simulation domain should normally
-be periodic in the dimension that the tilt is applied to, which is
-given by the second dimension of the tilt factor (e.g. y for xy tilt).
-This is so that pairs of atoms interacting across that boundary will
-have one of them shifted by the tilt factor. Periodicity is set by
-the :doc:`boundary <boundary>` command. For example, if the xy tilt
-factor is non-zero, then the y dimension should be periodic.
-Similarly, the z dimension should be periodic if xz or yz is non-zero.
-LAMMPS does not require this periodicity, but you may lose atoms if
-this is not the case.
-
-Also note that if your simulation will tilt the box, e.g. via the :doc:`fix deform <fix_deform>` command, the simulation box must be setup to
-be triclinic, even if the tilt factors are initially 0.0. You can
-also change an orthogonal box to a triclinic box or vice versa by
-using the :doc:`change box <change_box>` command with its *ortho* and
-*triclinic* options.
-
-For 2d simulations, the *zlo zhi* values should be set to bound the z
-coords for atoms that appear in the file; the default of -0.5 0.5 is
-valid if all z coords are 0.0. For 2d triclinic simulations, the xz
-and yz tilt factors must be 0.0.
-
-If the system is periodic (in a dimension), then atom coordinates can
-be outside the bounds (in that dimension); they will be remapped (in a
-periodic sense) back inside the box. Note that if the *add* option is
-being used to add atoms to a simulation box that already exists, this
-periodic remapping will be performed using simulation box bounds that
-are the union of the existing box and the box boundaries in the new
-data file.
-
-.. note::
-
- If the system is non-periodic (in a dimension), then all atoms
- in the data file must have coordinates (in that dimension) that are
- "greater than or equal to" the lo value and "less than or equal to"
- the hi value. If the non-periodic dimension is of style "fixed" (see
- the :doc:`boundary <boundary>` command), then the atom coords must be
- strictly "less than" the hi value, due to the way LAMMPS assign atoms
- to processors. Note that you should not make the lo/hi values
- radically smaller/larger than the extent of the atoms. For example,
- if your atoms extend from 0 to 50, you should not specify the box
- bounds as -10000 and 10000. This is because LAMMPS uses the specified
- box size to layout the 3d grid of processors. A huge (mostly empty)
- box will be sub-optimal for performance when using "fixed" boundary
- conditions (see the :doc:`boundary <boundary>` command). When using
- "shrink-wrap" boundary conditions (see the :doc:`boundary <boundary>`
- command), a huge (mostly empty) box may cause a parallel simulation to
- lose atoms when LAMMPS shrink-wraps the box around the atoms. The
- read_data command will generate an error in this case.
-
-The "extra bond per atom" setting (angle, dihedral, improper) is only
-needed if new bonds (angles, dihedrals, impropers) will be added to
-the system when a simulation runs, e.g. by using the :doc:`fix bond/create <fix_bond_create>` command. This will pre-allocate
-space in LAMMPS data structures for storing the new bonds (angles,
-dihedrals, impropers).
-
-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 :doc:`fix bond/create <fix_bond_create>` command. Or if entire new molecules
-will be added to the system, e.g. by using the :doc:`fix deposit <fix_deposit>` or :doc:`fix pour <fix_pour>` commands, which
-will have more special 1-2,1-3,1-4 neighbors than any other molecules
-defined in the data file. Using this setting will pre-allocate space
-in the LAMMPS data structures for storing these neighbors. See the
-:doc:`special_bonds <special_bonds>` and :doc:`molecule <molecule>` doc
-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
- first data file read; 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
-only used with :doc:`atom_style ellipsoid or line or tri or body <atom_style>` and specify how many of the atoms are
-finite-size ellipsoids or lines or triangles or bodies; the remainder
-are point particles. See the discussion of ellipsoidflag and the
-*Ellipsoids* section below. See the discussion of lineflag and the
-*Lines* section below. See the discussion of triangleflag and the
-*Triangles* section below. See the discussion of bodyflag and the
-*Bodies* section below.
-
-.. note::
-
- For :doc:`atom_style template <atom_style>`, the molecular
- topology (bonds,angles,etc) is contained in the molecule templates
- read-in by the :doc:`molecule <molecule>` command. This means you
- cannot set the *bonds*\ , *angles*\ , etc header keywords in the data
- file, nor can you define *Bonds*\ , *Angles*\ , etc sections as discussed
- below. You can set the *bond types*\ , *angle types*\ , etc header
- keywords, though it is not necessary. If specified, they must match
- the maximum values defined in any of the template molecules.
-
-
-----------
-
-
-**Format of the body of a data file**
-
-These are the section keywords for the body of the file.
-
-* *Atoms, Velocities, Masses, Ellipsoids, Lines, Triangles, Bodies* = atom-property sections
-* *Bonds, Angles, Dihedrals, Impropers* = molecular topology sections
-* *Pair Coeffs, PairIJ Coeffs, Bond Coeffs, Angle Coeffs, Dihedral Coeffs, Improper Coeffs* = force field sections
-* *BondBond Coeffs, BondAngle Coeffs, MiddleBondTorsion Coeffs, EndBondTorsion Coeffs, AngleTorsion Coeffs, AngleAngleTorsion Coeffs, BondBond13 Coeffs, AngleAngle Coeffs* = class 2 force field sections
-
-These keywords will check an appended comment for a match with the
-currently defined style:
-
-* *Atoms, Pair Coeffs, PairIJ Coeffs, Bond Coeffs, Angle Coeffs, Dihedral Coeffs, Improper Coeffs*
-
-For example, these lines:
-
-.. parsed-literal::
-
- Atoms # sphere
- Pair Coeffs # lj/cut
-
-will check if the currently-defined :doc:`atom_style <atom_style>` is
-*sphere*\ , and the current `pair_style <pair_style>`_ is *lj/cut*\ . If
-not, LAMMPS will issue a warning to indicate that the data file
-section likely does not contain the correct number or type of
-parameters expected for the currently-defined style.
-
-Each section is listed below in alphabetic order. The format of each
-section is described including the number of lines it must contain and
-rules (if any) for where it can appear in the data file.
-
-Any individual line in the various sections can have a trailing
-comment starting with "#" for annotation purposes. E.g. in the
-Atoms section:
-
-.. parsed-literal::
-
- 10 1 17 -1.0 10.0 5.0 6.0 # salt ion
-
-
-----------
-
-
-*Angle Coeffs* section:
-
-* one line per angle type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = angle type (1-N)
- coeffs = list of coeffs
-
-* example:
-.. parsed-literal::
-
- 6 70 108.5 0 0
-
-
-
-The number and meaning of the coefficients are specific to the defined
-angle style. See the :doc:`angle_style <angle_style>` and
-:doc:`angle_coeff <angle_coeff>` commands for details. Coefficients can
-also be set via the :doc:`angle_coeff <angle_coeff>` command in the
-input script.
-
-
-----------
-
-
-*AngleAngle Coeffs* section:
-
-* one line per improper type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = improper type (1-N)
- coeffs = list of coeffs (see :doc:`improper_coeff <improper_coeff>`)
-
-
-
-
-----------
-
-
-*AngleAngleTorsion Coeffs* section:
-
-* one line per dihedral type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = dihedral type (1-N)
- coeffs = list of coeffs (see :doc:`dihedral_coeff <dihedral_coeff>`)
-
-
-
-
-----------
-
-
-*Angles* section:
-
-* one line per angle
-* line syntax: ID type atom1 atom2 atom3
-.. parsed-literal::
-
- ID = number of angle (1-Nangles)
- type = angle type (1-Nangletype)
- atom1,atom2,atom3 = IDs of 1st,2nd,3rd atoms in angle
-
-example:
-.. parsed-literal::
-
- 2 2 17 29 430
-
-
-
-The 3 atoms are ordered linearly within the angle. Thus the central
-atom (around which the angle is computed) is the atom2 in the list.
-E.g. H,O,H for a water molecule. The *Angles* section must appear
-after the *Atoms* section. All values in this section must be
-integers (1, not 1.0).
-
-
-----------
-
-
-*AngleTorsion Coeffs* section:
-
-* one line per dihedral type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = dihedral type (1-N)
- coeffs = list of coeffs (see :doc:`dihedral_coeff <dihedral_coeff>`)
-
-
-
-
-----------
-
-
-*Atoms* section:
-
-* one line per atom
-* line syntax: depends on atom style
-
-An *Atoms* section must appear in the data file if natoms > 0 in the
-header section. The atoms can be listed in any order. These are the
-line formats for each :doc:`atom style <atom_style>` in LAMMPS. As
-discussed below, each line can optionally have 3 flags (nx,ny,nz)
-appended to it, which indicate which image of a periodic simulation
-box the atom is in. These may be important to include for some kinds
-of analysis.
-
-+------------+---------------------------------------------------------------------------+
-| angle | atom-ID molecule-ID atom-type x y z |
-+------------+---------------------------------------------------------------------------+
-| atomic | atom-ID atom-type x y z |
-+------------+---------------------------------------------------------------------------+
-| body | atom-ID atom-type bodyflag mass x y z |
-+------------+---------------------------------------------------------------------------+
-| bond | atom-ID molecule-ID atom-type x y z |
-+------------+---------------------------------------------------------------------------+
-| charge | atom-ID atom-type q x y z |
-+------------+---------------------------------------------------------------------------+
-| dipole | atom-ID atom-type q x y z mux muy muz |
-+------------+---------------------------------------------------------------------------+
-| dpd | atom-ID atom-type theta x y z |
-+------------+---------------------------------------------------------------------------+
-| electron | atom-ID atom-type q spin eradius x y z |
-+------------+---------------------------------------------------------------------------+
-| ellipsoid | atom-ID atom-type ellipsoidflag density x y z |
-+------------+---------------------------------------------------------------------------+
-| full | atom-ID molecule-ID atom-type q x y z |
-+------------+---------------------------------------------------------------------------+
-| line | atom-ID molecule-ID atom-type lineflag density x y z |
-+------------+---------------------------------------------------------------------------+
-| meso | atom-ID atom-type rho e cv x y z |
-+------------+---------------------------------------------------------------------------+
-| molecular | atom-ID molecule-ID atom-type x y z |
-+------------+---------------------------------------------------------------------------+
-| peri | atom-ID atom-type volume density x y z |
-+------------+---------------------------------------------------------------------------+
-| smd | atom-ID atom-type molecule volume mass kernel-radius contact-radius x y z |
-+------------+---------------------------------------------------------------------------+
-| sphere | atom-ID atom-type diameter density x y z |
-+------------+---------------------------------------------------------------------------+
-| template | atom-ID molecule-ID template-index template-atom atom-type x y z |
-+------------+---------------------------------------------------------------------------+
-| tri | atom-ID molecule-ID atom-type triangleflag density x y z |
-+------------+---------------------------------------------------------------------------+
-| wavepacket | atom-ID atom-type charge spin eradius etag cs_re cs_im x y z |
-+------------+---------------------------------------------------------------------------+
-| hybrid | atom-ID atom-type x y z sub-style1 sub-style2 ... |
-+------------+---------------------------------------------------------------------------+
-
-The per-atom values have these meanings and units, listed alphabetically:
-
-* atom-ID = integer ID of atom
-* atom-type = type of atom (1-Ntype)
-* bodyflag = 1 for body particles, 0 for point particles
-* contact-radius = ??? (distance units)
-* cs_re,cs_im = real/imaginary parts of wavepacket coefficients
-* cv = heat capacity (need units) for SPH particles
-* density = density of particle (mass/distance^3 or mass/distance^2 or mass/distance units, depending on dimensionality of particle)
-* diameter = diameter of spherical atom (distance units)
-* e = energy (need units) for SPH particles
-* ellipsoidflag = 1 for ellipsoidal particles, 0 for point particles
-* eradius = electron radius (or fixed-core radius)
-* etag = integer ID of electron that each wavepacket belongs to
-* kernel-radius = ??? (distance units)
-* lineflag = 1 for line segment particles, 0 for point or spherical particles
-* mass = mass of particle (mass units)
-* molecule-ID = integer ID of molecule the atom belongs to
-* mux,muy,muz = components of dipole moment of atom (dipole units)
-* q = charge on atom (charge units)
-* rho = density (need units) for SPH particles
-* spin = electron spin (+1/-1), 0 = nuclei, 2 = fixed-core, 3 = pseudo-cores (i.e. ECP)
-* template-atom = which atom within a template molecule the atom is
-* template-index = which molecule within the molecule template the atom is part of
-* theta = internal temperature of a DPD particle
-* triangleflag = 1 for triangular particles, 0 for point or sperhical particles
-* volume = volume of Peridynamic particle (distance^3 units)
-* x,y,z = coordinates of atom (distance units)
-
-The units for these quantities depend on the unit style; see the
-:doc:`units <units>` command for details.
-
-For 2d simulations specify z as 0.0, or a value within the *zlo zhi*
-setting in the data file header.
-
-The atom-ID is used to identify the atom throughout the simulation and
-in dump files. Normally, it is a unique value from 1 to Natoms for
-each atom. Unique values larger than Natoms can be used, but they
-will cause extra memory to be allocated on each processor, if an atom
-map array is used, but not if an atom map hash is used; see the
-:doc:`atom_modify <atom_modify>` command for details. If an atom map is
-not used (e.g. an atomic system with no bonds), and you don't care if
-unique atom IDs appear in dump files, then the atom-IDs can all be set
-to 0.
-
-The molecule ID is a 2nd identifier attached to an atom. Normally, it
-is a number from 1 to N, identifying which molecule the atom belongs
-to. It can be 0 if it is an unbonded atom or if you don't care to
-keep track of molecule assignments.
-
-The diameter specifies the size of a finite-size spherical particle.
-It can be set to 0.0, which means that atom is a point particle.
-
-The ellipsoidflag, lineflag, triangleflag, and bodyflag determine
-whether the particle is a finite-size ellipsoid or line or triangle or
-body of finite size, or whether the particle is a point particle.
-Additional attributes must be defined for each ellipsoid, line,
-triangle, or body in the corresponding *Ellipsoids*\ , *Lines*\ ,
-*Triangles*\ , or *Bodies* section.
-
-The *template-index* and *template-atom* are only defined used by
-:doc:`atom_style template <atom_style>`. In this case the
-:doc:`molecule <molecule>` command is used to define a molecule template
-which contains one or more molecules. If an atom belongs to one of
-those molecules, its *template-index* and *template-atom* are both set
-to positive integers; if not the values are both 0. The
-*template-index* is which molecule (1 to Nmols) the atom belongs to.
-The *template-atom* is which atom (1 to Natoms) within the molecule
-the atom is.
-
-Some pair styles and fixes and computes that operate on finite-size
-particles allow for a mixture of finite-size and point particles. See
-the doc pages of individual commands for details.
-
-For finite-size particles, the density is used in conjunction with the
-particle volume to set the mass of each particle as mass = density *
-volume. In this context, volume can be a 3d quantity (for spheres or
-ellipsoids), a 2d quantity (for triangles), or a 1d quantity (for line
-segments). If the volume is 0.0, meaning a point particle, then the
-density value is used as the mass. One exception is for the body atom
-style, in which case the mass of each particle (body or point
-particle) is specified explicitly. This is because the volume of the
-body is unknown.
-
-For atom_style hybrid, following the 5 initial values (ID,type,x,y,z),
-specific values for each sub-style must be listed. The order of the
-sub-styles is the same as they were listed in the
-:doc:`atom_style <atom_style>` command. The sub-style specific values
-are those that are not the 5 standard ones (ID,type,x,y,z). For
-example, for the "charge" sub-style, a "q" value would appear. For
-the "full" sub-style, a "molecule-ID" and "q" would appear. These are
-listed in the same order they appear as listed above. Thus if
-
-.. parsed-literal::
-
- atom_style hybrid charge sphere
-
-were used in the input script, each atom line would have these fields:
-
-.. parsed-literal::
-
- atom-ID atom-type x y z q diameter density
-
-Note that if a non-standard value is defined by multiple sub-styles,
-it must appear mutliple times in the atom line. E.g. the atom line
-for atom_style hybrid dipole full would list "q" twice:
-
-.. parsed-literal::
-
- atom-ID atom-type x y z q mux muy myz molecule-ID q
-
-Atom lines specify the (x,y,z) coordinates of atoms. These can be
-inside or outside the simulation box. When the data file is read,
-LAMMPS wraps coordinates outside the box back into the box for
-dimensions that are periodic. As discussed above, if an atom is
-outside the box in a non-periodic dimension, it will be lost.
-
-LAMMPS always stores atom coordinates as values which are inside the
-simulation box. It also stores 3 flags which indicate which image of
-the simulation box (in each dimension) the atom would be in if its
-coordinates were unwrapped across periodic boundaries. An image flag
-of 0 means the atom is still inside the box when unwrapped. A value
-of 2 means add 2 box lengths to get the unwrapped coordinate. A value
-of -1 means subtract 1 box length to get the unwrapped coordinate.
-LAMMPS updates these flags as atoms cross periodic boundaries during
-the simulation. The :doc:`dump <dump>` command can output atom atom
-coordinates in wrapped or unwrapped form, as well as the 3 image
-flags.
-
-In the data file, atom lines (all lines or none of them) can
-optionally list 3 trailing integer values (nx,ny,nz), which are used
-to initialize the atom's image flags. If nx,ny,nz values are not
-listed in the data file, LAMMPS initializes them to 0. Note that the
-image flags are immediately updated if an atom's coordinates need to
-wrapped back into the simulation box.
-
-It is only important to set image flags correctly in a data file if a
-simulation model relies on unwrapped coordinates for some calculation;
-otherwise they can be left unspecified. Examples of LAMMPS commands
-that use unwrapped coordinates internally are as follows:
-
-* Atoms in a rigid body (see :doc:`fix rigid <fix_rigid>`, :doc:`fix rigid/small <fix_rigid>`) must have consistent image flags, so that
- when the atoms are unwrapped, they are near each other, i.e. as a
- single body.
-* If the :doc:`replicate <replicate>` command is used to generate a larger
- system, image flags must be consistent for bonded atoms when the bond
- crosses a periodic boundary. I.e. the values of the image flags
- should be different by 1 (in the appropriate dimension) for the two
- atoms in such a bond.
-* If you plan to :doc:`dump <dump>` image flags and perform post-analysis
- that will unwrap atom coordinates, it may be important that a
- continued run (restarted from a data file) begins with image flags
- that are consistent with the previous run.
-.. note::
-
- If your system is an infinite periodic crystal with bonds then
- it is impossible to have fully consistent image flags. This is because
- some bonds will cross periodic boundaries and connect two atoms with the
- same image flag.
-
-Atom velocities and other atom quantities not defined above are set to
-0.0 when the *Atoms* section is read. Velocities can be set later by
-a *Velocities* section in the data file or by a
-:doc:`velocity <velocity>` or :doc:`set <set>` command in the input
-script.
-
-
-----------
-
-
-*Bodies* section:
-
-* one or more lines per body
-* first line syntax: atom-ID Ninteger Ndouble
-.. parsed-literal::
-
- Ninteger = # of integer quantities for this particle
- Ndouble = # of floating-point quantities for this particle
-
-* 0 or more integer lines with total of Ninteger values
-* 0 or more double lines with total of Ndouble values
-* example:
-.. parsed-literal::
-
- 12 3 6
- 2 3 2
- 1.0 2.0 3.0 1.0 2.0 4.0
-
-* example:
-.. parsed-literal::
-
- 12 0 14
- 1.0 2.0 3.0 1.0 2.0 4.0 1.0
- 2.0 3.0 1.0 2.0 4.0 4.0 2.0
-
-
-
-The *Bodies* section must appear if :doc:`atom_style body <atom_style>`
-is used and any atoms listed in the *Atoms* section have a bodyflag =
-1. The number of bodies should be specified in the header section via
-the "bodies" keyword.
-
-Each body can have a variable number of integer and/or floating-point
-values. The number and meaning of the values is defined by the body
-style, as described in the :doc:`body <body>` doc page. The body style
-is given as an argument to the :doc:`atom_style body <atom_style>`
-command.
-
-The Ninteger and Ndouble values determine how many integer and
-floating-point values are specified for this particle. Ninteger and
-Ndouble can be as large as needed and can be different for every body.
-Integer values are then listed next on subsequent lines. Lines are
-read one at a time until Ninteger values are read. Floating-point
-values follow on subsequent lines, Again lines are read one at a time
-until Ndouble values are read. Note that if there are no values of a
-particular type, no lines appear for that type.
-
-The *Bodies* section must appear after the *Atoms* section.
-
-
-----------
-
-
-*Bond Coeffs* section:
-
-* one line per bond type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = bond type (1-N)
- coeffs = list of coeffs
-
-* example:
-.. parsed-literal::
-
- 4 250 1.49
-
-
-
-The number and meaning of the coefficients are specific to the defined
-bond style. See the :doc:`bond_style <bond_style>` and
-:doc:`bond_coeff <bond_coeff>` commands for details. Coefficients can
-also be set via the :doc:`bond_coeff <bond_coeff>` command in the input
-script.
-
-
-----------
-
-
-*BondAngle Coeffs* section:
-
-* one line per angle type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = angle type (1-N)
- coeffs = list of coeffs (see class 2 section of :doc:`angle_coeff <angle_coeff>`)
-
-
-
-
-----------
-
-
-*BondBond Coeffs* section:
-
-* one line per angle type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = angle type (1-N)
- coeffs = list of coeffs (see class 2 section of :doc:`angle_coeff <angle_coeff>`)
-
-
-
-
-----------
-
-
-*BondBond13 Coeffs* section:
-
-* one line per dihedral type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = dihedral type (1-N)
- coeffs = list of coeffs (see class 2 section of :doc:`dihedral_coeff <dihedral_coeff>`)
-
-
-
-
-----------
-
-
-*Bonds* section:
-
-* one line per bond
-* line syntax: ID type atom1 atom2
-.. parsed-literal::
-
- ID = bond number (1-Nbonds)
- type = bond type (1-Nbondtype)
- atom1,atom2 = IDs of 1st,2nd atoms in bond
-
-* example:
-.. parsed-literal::
-
- 12 3 17 29
-
-
-
-The *Bonds* section must appear after the *Atoms* section. All values
-in this section must be integers (1, not 1.0).
-
-
-----------
-
-
-*Dihedral Coeffs* section:
-
-* one line per dihedral type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = dihedral type (1-N)
- coeffs = list of coeffs
-
-* example:
-.. parsed-literal::
-
- 3 0.6 1 0 1
-
-
-
-The number and meaning of the coefficients are specific to the defined
-dihedral style. See the :doc:`dihedral_style <dihedral_style>` and
-:doc:`dihedral_coeff <dihedral_coeff>` commands for details.
-Coefficients can also be set via the
-:doc:`dihedral_coeff <dihedral_coeff>` command in the input script.
-
-
-----------
-
-
-*Dihedrals* section:
-
-* one line per dihedral
-* line syntax: ID type atom1 atom2 atom3 atom4
-.. parsed-literal::
-
- ID = number of dihedral (1-Ndihedrals)
- type = dihedral type (1-Ndihedraltype)
- atom1,atom2,atom3,atom4 = IDs of 1st,2nd,3rd,4th atoms in dihedral
-
-* example:
-.. parsed-literal::
-
- 12 4 17 29 30 21
-
-
-
-The 4 atoms are ordered linearly within the dihedral. The *Dihedrals*
-section must appear after the *Atoms* section. All values in this
-section must be integers (1, not 1.0).
-
-
-----------
-
-
-*Ellipsoids* section:
-
-* one line per ellipsoid
-* line syntax: atom-ID shapex shapey shapez quatw quati quatj quatk
-.. parsed-literal::
-
- atom-ID = ID of atom which is an ellipsoid
- shapex,shapey,shapez = 3 diameters of ellipsoid (distance units)
- quatw,quati,quatj,quatk = quaternion components for orientation of atom
-
-* example:
-.. parsed-literal::
-
- 12 1 2 1 1 0 0 0
-
-
-
-The *Ellipsoids* section must appear if :doc:`atom_style ellipsoid <atom_style>` is used and any atoms are listed in the
-*Atoms* section with an ellipsoidflag = 1. The number of ellipsoids
-should be specified in the header section via the "ellipsoids"
-keyword.
-
-The 3 shape values specify the 3 diameters or aspect ratios of a
-finite-size ellipsoidal particle, when it is oriented along the 3
-coordinate axes. They must all be non-zero values.
-
-The values *quatw*\ , *quati*\ , *quatj*\ , and *quatk* set the orientation
-of the atom as a quaternion (4-vector). Note that the shape
-attributes specify the aspect ratios of an ellipsoidal particle, which
-is oriented by default with its x-axis along the simulation box's
-x-axis, and similarly for y and z. If this body is rotated (via the
-right-hand rule) by an angle theta around a unit vector (a,b,c), then
-the quaternion that represents its new orientation is given by
-(cos(theta/2), a*sin(theta/2), b*sin(theta/2), c*sin(theta/2)). These
-4 components are quatw, quati, quatj, and quatk as specified above.
-LAMMPS normalizes each atom's quaternion in case (a,b,c) is not
-specified as a unit vector.
-
-The *Ellipsoids* section must appear after the *Atoms* section.
-
-
-----------
-
-
-*EndBondTorsion Coeffs* section:
-
-* one line per dihedral type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = dihedral type (1-N)
- coeffs = list of coeffs (see class 2 section of :doc:`dihedral_coeff <dihedral_coeff>`)
-
-
-
-
-----------
-
-
-*Improper Coeffs* section:
-
-* one line per improper type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = improper type (1-N)
- coeffs = list of coeffs
-
-* example:
-.. parsed-literal::
-
- 2 20 0.0548311
-
-
-
-The number and meaning of the coefficients are specific to the defined
-improper style. See the :doc:`improper_style <improper_style>` and
-:doc:`improper_coeff <improper_coeff>` commands for details.
-Coefficients can also be set via the
-:doc:`improper_coeff <improper_coeff>` command in the input script.
-
-
-----------
-
-
-*Impropers* section:
-
-* one line per improper
-* line syntax: ID type atom1 atom2 atom3 atom4
-.. parsed-literal::
-
- ID = number of improper (1-Nimpropers)
- type = improper type (1-Nimpropertype)
- atom1,atom2,atom3,atom4 = IDs of 1st,2nd,3rd,4th atoms in improper
-
-* example:
-.. parsed-literal::
-
- 12 3 17 29 13 100
-
-
-
-The ordering of the 4 atoms determines the definition of the improper
-angle used in the formula for each :doc:`improper style <improper_style>`. See the doc pages for individual styles
-for details.
-
-The *Impropers* section must appear after the *Atoms* section. All
-values in this section must be integers (1, not 1.0).
-
-
-----------
-
-
-*Lines* section:
-
-* one line per line segment
-* line syntax: atom-ID x1 y1 x2 y2
-.. parsed-literal::
-
- atom-ID = ID of atom which is a line segment
- x1,y1 = 1st end point
- x2,y2 = 2nd end point
-
-* example:
-.. parsed-literal::
-
- 12 1.0 0.0 2.0 0.0
-
-
-
-The *Lines* section must appear if :doc:`atom_style line <atom_style>`
-is used and any atoms are listed in the *Atoms* section with a
-lineflag = 1. The number of lines should be specified in the header
-section via the "lines" keyword.
-
-The 2 end points are the end points of the line segment. The ordering
-of the 2 points should be such that using a right-hand rule to cross
-the line segment with a unit vector in the +z direction, gives an
-"outward" normal vector perpendicular to the line segment.
-I.e. normal = (c2-c1) x (0,0,1). This orientation may be important
-for defining some interactions.
-
-The *Lines* section must appear after the *Atoms* section.
-
-
-----------
-
-
-*Masses* section:
-
-* one line per atom type
-* line syntax: ID mass
-.. parsed-literal::
-
- ID = atom type (1-N)
- mass = mass value
-
-* example:
-.. parsed-literal::
-
- 3 1.01
-
-
-
-This defines the mass of each atom type. This can also be set via the
-:doc:`mass <mass>` command in the input script. This section cannot be
-used for atom styles that define a mass for individual atoms -
-e.g. :doc:`atom_style sphere <atom_style>`.
-
-
-----------
-
-
-*MiddleBondTorsion Coeffs* section:
-
-* one line per dihedral type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = dihedral type (1-N)
- coeffs = list of coeffs (see class 2 section of :doc:`dihedral_coeff <dihedral_coeff>`)
-
-
-
-
-----------
-
-
-*Pair Coeffs* section:
-
-* one line per atom type
-* line syntax: ID coeffs
-.. parsed-literal::
-
- ID = atom type (1-N)
- coeffs = list of coeffs
-
-* example:
-.. parsed-literal::
-
- 3 0.022 2.35197 0.022 2.35197
-
-
-
-The number and meaning of the coefficients are specific to the defined
-pair style. See the :doc:`pair_style <pair_style>` and
-:doc:`pair_coeff <pair_coeff>` commands for details. Since pair
-coefficients for types I != J are not specified, these will be
-generated automatically by the pair style's mixing rule. See the
-individual pair_style doc pages and the :doc:`pair_modify mix <pair_modify>` command for details. Pair coefficients can also
-be set via the :doc:`pair_coeff <pair_coeff>` command in the input
-script.
-
-
-----------
-
-
-*PairIJ Coeffs* section:
-
-* one line per pair of atom types for all I,J with I <= J
-* line syntax: ID1 ID2 coeffs
-.. parsed-literal::
-
- ID1 = atom type I = 1-N
- ID2 = atom type J = I-N, with I <= J
- coeffs = list of coeffs
-
-* examples:
-.. parsed-literal::
-
- 3 3 0.022 2.35197 0.022 2.35197
- 3 5 0.022 2.35197 0.022 2.35197
-
-
-
-This section must have N*(N+1)/2 lines where N = # of atom types. The
-number and meaning of the coefficients are specific to the defined
-pair style. See the :doc:`pair_style <pair_style>` and
-:doc:`pair_coeff <pair_coeff>` commands for details. Since pair
-coefficients for types I != J are all specified, these values will
-turn off the default mixing rule defined by the pair style. See the
-individual pair_style doc pages and the :doc:`pair_modify mix <pair_modify>` command for details. Pair coefficients can also
-be set via the :doc:`pair_coeff <pair_coeff>` command in the input
-script.
-
-
-----------
-
-
-*Triangles* section:
-
-* one line per triangle
-* line syntax: atom-ID x1 y1 z1 x2 y2 z2 x3 y3 z3
-.. parsed-literal::
-
- atom-ID = ID of atom which is a line segment
- x1,y1,z1 = 1st corner point
- x2,y2,z2 = 2nd corner point
- x3,y3,z3 = 3rd corner point
-
-* example:
-.. parsed-literal::
-
- 12 0.0 0.0 0.0 2.0 0.0 1.0 0.0 2.0 1.0
-
-
-
-The *Triangles* section must appear if :doc:`atom_style tri <atom_style>` is used and any atoms are listed in the *Atoms*
-section with a triangleflag = 1. The number of lines should be
-specified in the header section via the "triangles" keyword.
-
-The 3 corner points are the corner points of the triangle. The
-ordering of the 3 points should be such that using a right-hand rule
-to go from point1 to point2 to point3 gives an "outward" normal vector
-to the face of the triangle. I.e. normal = (c2-c1) x (c3-c1). This
-orientation may be important for defining some interactions.
-
-The *Triangles* section must appear after the *Atoms* section.
-
-
-----------
-
-
-*Velocities* section:
-
-* one line per atom
-* line syntax: depends on atom style
-
-+--------------------------------+--------------------------------------------+
-| all styles except those listed | atom-ID vx vy vz |
-+--------------------------------+--------------------------------------------+
-| electron | atom-ID vx vy vz ervel |
-+--------------------------------+--------------------------------------------+
-| ellipsoid | atom-ID vx vy vz lx ly lz |
-+--------------------------------+--------------------------------------------+
-| sphere | atom-ID vx vy vz wx wy wz |
-+--------------------------------+--------------------------------------------+
-| hybrid | atom-ID vx vy vz sub-style1 sub-style2 ... |
-+--------------------------------+--------------------------------------------+
-
-where the keywords have these meanings:
-
-vx,vy,vz = translational velocity of atom
-lx,ly,lz = angular momentum of aspherical atom
-wx,wy,wz = angular velocity of spherical atom
-ervel = electron radial velocity (0 for fixed-core):ul
-
-The velocity lines can appear in any order. This section can only be
-used after an *Atoms* section. This is because the *Atoms* section
-must have assigned a unique atom ID to each atom so that velocities
-can be assigned to them.
-
-Vx, vy, vz, and ervel are in :doc:`units <units>` of velocity. Lx, ly,
-lz are in units of angular momentum (distance-velocity-mass). Wx, Wy,
-Wz are in units of angular velocity (radians/time).
-
-For atom_style hybrid, following the 4 initial values (ID,vx,vy,vz),
-specific values for each sub-style must be listed. The order of the
-sub-styles is the same as they were listed in the
-:doc:`atom_style <atom_style>` command. The sub-style specific values
-are those that are not the 5 standard ones (ID,vx,vy,vz). For
-example, for the "sphere" sub-style, "wx", "wy", "wz" values would
-appear. These are listed in the same order they appear as listed
-above. Thus if
-
-.. parsed-literal::
-
- atom_style hybrid electron sphere
-
-were used in the input script, each velocity line would have these
-fields:
-
-.. parsed-literal::
-
- atom-ID vx vy vz ervel wx wy wz
-
-Translational velocities can also be set by the
-:doc:`velocity <velocity>` command in the input script.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-To read gzipped data files, you must compile LAMMPS with the
--DLAMMPS_GZIP option - see the :ref:`Making LAMMPS <start_2>` section of the documentation.
-
-Related commands
-""""""""""""""""
-
-:doc:`read_dump <read_dump>`, :doc:`read_restart <read_restart>`,
-:doc:`create_atoms <create_atoms>`, :doc:`write_data <write_data>`
-
-Default
-"""""""
-
-The default for all the *extra* keywords is 0.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/read_dump.txt b/doc/html/_sources/read_dump.txt
deleted file mode 100644
index 062e35d61..000000000
--- a/doc/html/_sources/read_dump.txt
+++ /dev/null
@@ -1,354 +0,0 @@
-.. index:: read_dump
-
-read_dump command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- read_dump file Nstep field1 field2 ... keyword values ...
-
-* file = name of dump file to read
-* Nstep = snapshot timestep to read from file
-* one or more fields may be appended
-.. parsed-literal::
-
- field = *x* or *y* or *z* or *vx* or *vy* or *vz* or *q* or *ix* or *iy* or *iz*
- *x*\ ,\ *y*\ ,\ *z* = atom coordinates
- *vx*\ ,\ *vy*\ ,\ *vz* = velocity components
- *q* = charge
- *ix*\ ,\ *iy*\ ,\ *iz* = image flags in each dimension
-
-* zero or more keyword/value pairs may be appended
-* keyword = *box* or *replace* or *purge* or *trim* or *add* or *label* or *scaled* or *wrapped* or *format*
-.. parsed-literal::
-
- *box* value = *yes* or *no* = replace simulation box with dump box
- *replace* value = *yes* or *no* = overwrite atoms with dump atoms
- *purge* value = *yes* or *no* = delete all atoms before adding dump atoms
- *trim* value = *yes* or *no* = trim atoms not in dump snapshot
- *add* value = *yes* or *no* = add new dump atoms to system
- *label* value = field column
- field = one of the listed fields or *id* or *type*
- column = label on corresponding column in dump file
- *scaled* value = *yes* or *no* = coords in dump file are scaled/unscaled
- *wrapped* value = *yes* or *no* = coords in dump file are wrapped/unwrapped
- *format* values = format of dump file, must be last keyword if used
- *native* = native LAMMPS dump file
- *xyz* = XYZ file
- *molfile* style path = VMD molfile plugin interface
- style = *dcd* or *xyz* or others supported by molfile plugins
- path = optional path for location of molfile plugins
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- read_dump dump.file 5000 x y z
- read_dump dump.xyz 5 x y z box no format xyz
- read_dump dump.xyz 10 x y z box no format molfile xyz "../plugins"
- read_dump dump.dcd 0 x y z box yes format molfile dcd
- read_dump dump.file 1000 x y z vx vy vz box yes format molfile lammpstrj /usr/local/lib/vmd/plugins/LINUXAMD64/plugins/molfile
- read_dump dump.file 5000 x y vx vy trim yes
- read_dump ../run7/dump.file.gz 10000 x y z box yes
- read_dump dump.xyz 10 x y z box no format molfile xyz ../plugins
- read_dump dump.dcd 0 x y z format molfile dcd
- read_dump dump.file 1000 x y z vx vy vz format molfile lammpstrj /usr/local/lib/vmd/plugins/LINUXAMD64/plugins/molfile
-
-Description
-"""""""""""
-
-Read atom information from a dump file to overwrite the current atom
-coordinates, and optionally the atom velocities and image flags and
-the simluation box dimensions. This is useful for restarting a run
-from a particular snapshot in a dump file. See the
-:doc:`read_restart <read_restart>` and :doc:`read_data <read_data>`
-commands for alternative methods to do this. Also see the
-:doc:`rerun <rerun>` command for a means of reading multiple snapshots
-from a dump file.
-
-Note that a simulation box must already be defined before using the
-read_dump command. This can be done by the
-:doc:`create_box <create_box>`, :doc:`read_data <read_data>`, or
-:doc:`read_restart <read_restart>` commands. The read_dump command can
-reset the simulation box dimensions, as explained below.
-
-Also note that reading per-atom information from a dump snapshot is
-limited to the atom coordinates, velocities and image flags, as
-explained below. Other atom properties, which may be necessary to run
-a valid simulation, such as atom charge, or bond topology information
-for a molecular system, are not read from (or even contained in) dump
-files. Thus this auxiliary information should be defined in the usual
-way, e.g. in a data file read in by a :doc:`read_data <read_data>`
-command, before using the read_dump command, or by the :doc:`set <set>`
-command, after the dump snapshot is read.
-
-
-----------
-
-
-If the dump filename specified as *file* ends with ".gz", the dump
-file is read in gzipped format. You cannot (yet) read a dump file
-that was written in binary format with a ".bin" suffix, or to multiple
-files via the "%" option in the dump file name. See the
-:doc:`dump <dump>` command for details.
-
-The format of the dump file is selected through the *format* keyword.
-If specified, it must be the last keyword used, since all remaining
-arguments are passed on to the dump reader. The *native* format is
-for native LAMMPS dump files, written with a :doc:`dump atom <dump>` or
-:doc:`dump custom <dump>` command. The *xyz* format is for generic XYZ
-formatted dump files. These formats take no additional values.
-
-The *molfile* format supports reading data through using the `VMD <vmd>`_
-molfile plugin interface. This dump reader format is only available,
-if the USER-MOLFILE package has been installed when compiling
-LAMMPS.
-
-The *molfile* format takes one or two additional values. The *style*
-value determines the file format to be used and can be any format that
-the molfile plugins support, such as DCD or XYZ. Note that DCD dump
-files can be written by LAMMPS via the :doc:`dump dcd <dump>` command.
-The *path* value specifies a list of directories which LAMMPS will
-search for the molfile plugins appropriate to the specified *style*\ .
-The syntax of the *path* value is like other search paths: it can
-contain multiple directories separated by a colon (or semi-colon on
-windows). The *path* keyword is optional and defaults to ".",
-i.e. the current directory.
-
-Support for other dump format readers may be added in the future.
-
-
-----------
-
-
-Global information is first read from the dump file, namely timestep
-and box information.
-
-The dump file is scanned for a snapshot with a time stamp that matches
-the specified *Nstep*\ . This means the LAMMPS timestep the dump file
-snapshot was written on for the *native* format. Note that the *xyz*
-and *molfile* formats do not store the timestep. For these formats,
-timesteps are numbered logically, in a sequential manner, starting
-from 0. Thus to access the 10th snapshot in an *xyz* or *mofile*
-formatted dump file, use *Nstep* = 9.
-
-The dimensions of the simulation box for the selected snapshot are
-also read; see the *box* keyword discussion below. For the *native*
-format, an error is generated if the snapshot is for a triclinic box
-and the current simulation box is orthogonal or vice versa. A warning
-will be generated if the snapshot box boundary conditions (periodic,
-shrink-wrapped, etc) do not match the current simulation boundary
-conditions, but the boundary condition information in the snapshot is
-otherwise ignored. See the "boundary" command for more details.
-
-For the *xyz* format, no information about the box is available, so
-you must set the *box* flag to *no*\ . See details below.
-
-For the *molfile* format, reading simulation box information is
-typically supported, but the location of the simulation box origin is
-lost and no explicit information about periodicity or
-orthogonal/triclinic box shape is available. The USER-MOLFILE package
-makes a best effort to guess based on heuristics, but this may not
-always work perfectly.
-
-
-----------
-
-
-Per-atom information from the dump file snapshot is then read from the
-dump file snapshot. This corresponds to the specified *fields* listed
-in the read_dump command. It is an error to specify a z-dimension
-field, namely *z*\ , *vz*\ , or *iz*\ , for a 2d simulation.
-
-For dump files in *native* format, each column of per-atom data has a
-text label listed in the file. A matching label for each field must
-appear, e.g. the label "vy" for the field *vy*\ . For the *x*\ , *y*\ , *z*
-fields any of the following labels are considered a match:
-
-.. parsed-literal::
-
- x, xs, xu, xsu for field *x*
- y, ys, yu, ysu for field *y*
- z, zs, zu, zsu for field *z*
-
-The meaning of xs (scaled), xu (unwrapped), and xsu (scaled and
-unwrapped) is explained on the :doc:`dump <dump>` command doc page.
-These labels are searched for in the list of column labels in the dump
-file, in order, until a match is found.
-
-The dump file must also contain atom IDs, with a column label of "id".
-
-If the *add* keyword is specified with a value of *yes*\ , as discussed
-below, the dump file must contain atom types, with a column label of
-"type".
-
-If a column label you want to read from the dump file is not a match
-to a specified field, the *label* keyword can be used to specify the
-specific column label from the dump file to associate with that field.
-An example is if a time-averaged coordinate is written to the dump
-file via the :doc:`fix ave/atom <fix_ave_atom>` command. The column
-will then have a label corresponding to the fix-ID rather than "x" or
-"xs". The *label* keyword can also be used to specify new column
-labels for fields *id* and *type*\ .
-
-For dump files in *xyz* format, only the *x*\ , *y*\ , and *z* fields are
-supported. The dump file does not store atom IDs, so these are
-assigned consecutively to the atoms as they appear in the dump file,
-starting from 1. Thus you should insure that order of atoms is
-consistent from snapshot to snapshot in the the XYZ dump file. See
-the :doc:`dump_modify sort <dump_modify>` command if the XYZ dump file
-was written by LAMMPS.
-
-For dump files in *molfile* format, the *x*\ , *y*\ , *z*\ , *vx*\ , *vy*\ , and
-*vz* fields can be specified. However, not all molfile formats store
-velocities, or their respective plugins may not support reading of
-velocities. The molfile dump files do not store atom IDs, so these
-are assigned consecutively to the atoms as they appear in the dump
-file, starting from 1. Thus you should insure that order of atoms are
-consistent from snapshot to snapshot in the the molfile dump file.
-See the :doc:`dump_modify sort <dump_modify>` command if the dump file
-was written by LAMMPS.
-
-
-----------
-
-
-Information from the dump file snapshot is used to overwrite or
-replace properties of the current system. There are various options
-for how this is done, determined by the specified fields and optional
-keywords.
-
-The timestep of the snapshot becomes the current timestep for the
-simulation. See the :doc:`reset_timestep <reset_timestep>` command if
-you wish to change this after the dump snapshot is read.
-
-If the *box* keyword is specified with a *yes* value, then the current
-simulation box dimensions are replaced by the dump snapshot box
-dimensions. If the *box* keyword is specified with a *no* value, the
-current simulatoin box is unchanged.
-
-If the *purge* keyword is specified with a *yes* value, then all
-current atoms in the system are deleted before any of the operations
-invoked by the *replace*\ , *trim*\ , or *add* keywords take place.
-
-If the *replace* keyword is specified with a *yes* value, then atoms
-with IDs that are in both the current system and the dump snapshot
-have their properties overwritten by field values. If the *replace*
-keyword is specified with a *no* value, atoms with IDs that are in
-both the current system and the dump snapshot are not modified.
-
-If the *trim* keyword is specified with a *yes* value, then atoms with
-IDs that are in the current system but not in the dump snapshot are
-deleted. These atoms are unaffected if the *trim* keyword is
-specified with a *no* value.
-
-If the *add* keyword is specified with a *yes* value, then atoms with
-IDs that are in the dump snapshot, but not in the current system are
-added to the system. These dump atoms are ignored if the *add*
-keyword is specified with a *no* value.
-
-Note that atoms added via the *add* keyword will have only the
-attributes read from the dump file due to the *field* arguments. If
-*x* or *y* or *z* is not specified as a field, a value of 0.0 is used
-for added atoms. Added atoms must have an atom type, so this value
-must appear in the dump file.
-
-Any other attributes (e.g. charge or particle diameter for spherical
-particles) will be set to default values, the same as if the
-:doc:`create_atoms <create_atoms>` command were used.
-
-Note that atom IDs are not preserved for new dump snapshot atoms added
-via the *add* keyword. The procedure for assigning new atom IDS to
-added atoms is the same as is described for the
-:doc:`create_atoms <create_atoms>` command.
-
-
-----------
-
-
-Atom coordinates read from the dump file are first converted into
-unscaled coordinates, relative to the box dimensions of the snapshot.
-These coordinates are then be assigned to an existing or new atom in
-the current simulation. The coordinates will then be remapped to the
-simulation box, whether it is the original box or the dump snapshot
-box. If periodic boundary conditions apply, this means the atom will
-be remapped back into the simulation box if necessary. If shrink-wrap
-boundary conditions apply, the new coordinates may change the
-simulation box dimensions. If fixed boundary conditions apply, the
-atom will be lost if it is outside the simulation box.
-
-For *native* format dump files, the 3 xyz image flags for an atom in
-the dump file are set to the corresponding values appearing in the
-dump file if the *ix*\ , *iy*\ , *iz* fields are specified. If not
-specified, the image flags for replaced atoms are not changed and
-image flags for new atoms are set to default values. If coordinates
-read from the dump file are in unwrapped format (e.g. *xu*\ ) then the
-image flags for read-in atoms are also set to default values. The
-remapping procedure described in the previous paragraph will then
-change images flags for all atoms (old and new) if periodic boundary
-conditions are applied to remap an atom back into the simulation box.
-
-.. note::
-
- If you get a warning about inconsistent image flags after
- reading in a dump snapshot, it means one or more pairs of bonded atoms
- now have inconsistent image flags. As discussed in :doc:`Section errors <Section_errors>` this may or may not cause problems for
- subsequent simulations, One way this can happen is if you read image
- flag fields from the dump file but do not also use the dump file box
- parameters.
-
-LAMMPS knows how to compute unscaled and remapped coordinates for the
-snapshot column labels discussed above, e.g. *x*\ , *xs*\ , *xu*\ , *xsu*\ .
-If another column label is assigned to the *x* or *y* or *z* field via
-the *label* keyword, e.g. for coordinates output by the :doc:`fix ave/atom <fix_ave_atom>` command, then LAMMPS needs to know whether
-the coordinate information in the dump file is scaled and/or wrapped.
-This can be set via the *scaled* and *wrapped* keywords. Note that
-the value of the *scaled* and *wrapped* keywords is ignored for fields
-*x* or *y* or *z* if the *label* keyword is not used to assign a
-column label to that field.
-
-The scaled/unscaled and wrapped/unwrapped setting must be identical
-for any of the *x*\ , *y*\ , *z* fields that are specified. Thus you
-cannot read *xs* and *yu* from the dump file. Also, if the dump file
-coordinates are scaled and the simulation box is triclinic, then all 3
-of the *x*\ , *y*\ , *z* fields must be specified, since they are all
-needed to generate absolute, unscaled coordinates.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-To read gzipped dump files, you must compile LAMMPS with the
--DLAMMPS_GZIP option - see the :ref:`Making LAMMPS <start_2>` section of the documentation.
-
-The *molfile* dump file formats are part of the USER-MOLFILE package.
-They are only enabled if LAMMPS was built with that packages. See the
-:ref:`Making LAMMPS <start_3>` section for more info.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump <dump>`, :doc:`dump molfile <dump_molfile>`,
-:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`,
-:doc:`rerun <rerun>`
-
-Default
-"""""""
-
-The option defaults are box = yes, replace = yes, purge = no, trim =
-no, add = no, scaled = no, wrapped = yes, and format = native.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/read_restart.txt b/doc/html/_sources/read_restart.txt
deleted file mode 100644
index 632a90d3a..000000000
--- a/doc/html/_sources/read_restart.txt
+++ /dev/null
@@ -1,270 +0,0 @@
-.. index:: read_restart
-
-read_restart command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- read_restart file flag
-
-* file = name of binary restart file to read in
-* flag = remap (optional)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- read_restart save.10000
- read_restart save.10000 remap
- read_restart restart.*
- read_restart restart.*.mpiio
- read_restart poly.*.% remap
-
-.. parsed-literal::
-
-
-Description
-"""""""""""
-
-Read in a previously saved system configuration from a restart file.
-This allows continuation of a previous run. Details about what
-information is stored (and not stored) in a restart file is given
-below. Basically this operation will re-create the simulation box
-with all its atoms and their attributes as well as some related global
-settings, at the point in time it was written to the restart file by a
-previous simluation. The simulation box will be partitioned into a
-regular 3d grid of rectangular bricks, one per processor, based on the
-number of processors in the current simulation and the settings of the
-:doc:`processors <processors>` command. The partitioning can later be
-changed by the :doc:`balance <balance>` or :doc:`fix balance <fix_balance>` commands.
-
-.. note::
-
- Normally, restart files are written by the
- :doc:`restart <restart>` or :doc:`write_restart <write_restart>` commands
- so that all atoms in the restart file are inside the simulation box.
- If this is not the case, the read_restart command will print an error
- that atoms were "lost" when the file is read. This error should be
- reported to the LAMMPS developers so the invalid writing of the
- restart file can be fixed. If you still wish to use the restart file,
- the optional *remap* flag can be appended to the read_restart command.
- This should avoid the error, by explicitly remapping each atom back
- into the simulation box, updating image flags for the atom
- appropriately.
-
-Restart files are saved in binary format to enable exact restarts,
-meaning that the trajectories of a restarted run will precisely match
-those produced by the original run had it continued on.
-
-Several things can prevent exact restarts due to round-off effects, in
-which case the trajectories in the 2 runs will slowly diverge. These
-include running on a different number of processors or changing
-certain settings such as those set by the :doc:`newton <newton>` or
-:doc:`processors <processors>` commands. LAMMPS will issue a warning in
-these cases.
-
-Certain fixes will not restart exactly, though they should provide
-statistically similar results. These include :doc:`fix shake <fix_shake>` and :doc:`fix langevin <fix_langevin>`.
-
-Certain pair styles will not restart exactly, though they should
-provide statistically similar results. This is because the forces
-they compute depend on atom velocities, which are used at half-step
-values every timestep when forces are computed. When a run restarts,
-forces are initially evaluated with a full-step velocity, which is
-different than if the run had continued. These pair styles include
-:doc:`granular pair styles <pair_gran>`, :doc:`pair dpd <pair_dpd>`, and
-:doc:`pair lubricate <pair_lubricate>`.
-
-If a restarted run is immediately different than the run which
-produced the restart file, it could be a LAMMPS bug, so consider
-:ref:`reporting it <err_2>` if you think the behavior is
-wrong.
-
-Because restart files are binary, they may not be portable to other
-machines. In this case, you can use the :ref:`-restart command-line switch <start_7>` to convert a restart file to a data
-file.
-
-Similar to how restart files are written (see the
-:doc:`write_restart <write_restart>` and :doc:`restart <restart>`
-commands), the restart filename can contain two wild-card characters.
-If a "*" appears in the filename, the directory is searched for all
-filenames that match the pattern where "*" is replaced with a timestep
-value. The file with the largest timestep value is read in. Thus,
-this effectively means, read the latest restart file. It's useful if
-you want your script to continue a run from where it left off. See
-the :doc:`run <run>` command and its "upto" option for how to specify
-the run command so it doesn't need to be changed either.
-
-If a "%" character appears in the restart filename, LAMMPS expects a
-set of multiple files to exist. The :doc:`restart <restart>` and
-:doc:`write_restart <write_restart>` commands explain how such sets are
-created. Read_restart will first read a filename where "%" is
-replaced by "base". This file tells LAMMPS how many processors
-created the set and how many files are in it. Read_restart then reads
-the additional files. For example, if the restart file was specified
-as save.% when it was written, then read_restart reads the files
-save.base, save.0, save.1, ... save.P-1, where P is the number of
-processors that created the restart file.
-
-Note that P could be the total number of processors in the previous
-simulation, or some subset of those processors, if the *fileper* or
-*nfile* options were used when the restart file was written; see the
-:doc:`restart <restart>` and :doc:`write_restart <write_restart>` commands
-for details. The processors in the current LAMMPS simulation share
-the work of reading these files; each reads a roughly equal subset of
-the files. The number of processors which created the set can be
-different the number of processors in the current LAMMPS simulation.
-This can be a fast mode of input on parallel machines that support
-parallel I/O.
-
-A restart file can also be read in parallel as one large binary file
-via the MPI-IO library, assuming it was also written with MPI-IO.
-MPI-IO is part of the MPI standard for versions 2.0 and above. Using
-MPI-IO requires two steps. First, build LAMMPS with its MPIIO package
-installed, e.g.
-
-.. parsed-literal::
-
- make yes-mpiio # installs the MPIIO package
- make g++ # build LAMMPS for your platform
-
-Second, use a restart filename which contains ".mpiio". Note that it
-does not have to end in ".mpiio", just contain those characters.
-Unlike MPI-IO dump files, a particular restart file must be both
-written and read using MPI-IO.
-
-
-----------
-
-
-Here is the list of information included in a restart file, which
-means these quantities do not need to be re-specified in the input
-script that reads the restart file, though you can redefine many of
-these settings after the restart file is read.
-
-* :doc:`units <units>`
-* :doc:`newton bond <newton>` (see discussion of newton command below)
-* :doc:`atom style <atom_style>` and :doc:`atom_modify <atom_modify>` settings id, map, sort
-* :doc:`comm style <comm_style>` and `comm_modify <comm_modify>`_ settings mode, cutoff, vel
-* :doc:`timestep <timestep>`
-* simulation box size and shape and :doc:`boundary <boundary>` settings
-* atom :doc:`group <group>` definitions
-* per-type atom settings such as `mass <mass.thml>`_
-* per-atom attributes including their group assignments and molecular topology attributes (bonds, angles, etc)
-* force field styles (:doc:`pair <pair_style>`, :doc:`bond <bond_style>`, :doc:`angle <angle_style>`, etc)
-* force field coefficients (:doc:`pair <pair_coeff>`, :doc:`bond <bond_coeff>`, :doc:`angle <angle_coeff>`, etc) in some cases (see below)
-* :doc:`pair_modify <pair_modify>` settings, except the compute option
-* :doc:`special_bonds <special_bonds>` settings
-
-Here is a list of information not stored in a restart file, which
-means you must re-issue these commands in your input script, after
-reading the restart file.
-
-* :doc:`newton pair <newton>` (see discussion of newton command below)
-* :doc:`fix <fix>` commands (see below)
-* :doc:`compute <compute>` commands (see below)
-* :doc:`variable <variable>` commands
-* :doc:`region <region>` commands
-* :doc:`neighbor list <neighbor>` criteria including :doc:`neigh_modify <neigh_modify>` settings
-* :doc:`kspace_style <kspace_style>` and :doc:`kspace_modify <kspace_modify>` settings
-* info for :doc:`thermodynamic <thermo_style>`, :doc:`dump <dump>`, or :doc:`restart <restart>` output
-
-The :doc:`newton <newton>` command has two settings, one for pairwise
-interactions, the other for bonded. Both settings are stored in the
-restart file. For the bond setting, the value in the file will
-overwrite the current value (at the time the read_restart command is
-issued) and warn if the two values are not the same and the current
-value is not the default. For the pair setting, the value in the file
-will not overwrite the current value (so that you can override the
-previous run's value), but a warning is issued if the two values are
-not the same and the current value is not the default.
-
-Note that some force field styles (pair, bond, angle, etc) do not
-store their coefficient info in restart files. Typically these are
-many-body or tabulated potentials which read their parameters from
-separate files. In these cases you will need to re-specify the "pair
-:doc:`pair_coeff <pair_coeff>`, :doc:`bond_coeff <bond_coeff>`, etc
-commands in your restart input script. The doc pages for individual
-force field styles mention if this is the case. This is also true of
-:doc:`pair_style hybrid <pair_hybrid>` (bond hybrid, angle hybrid, etc)
-commands; they do not store coefficient info.
-
-As indicated in the above list, the :doc:`fixes <fix>` used for a
-simulation are not stored in the restart file. This means the new
-input script should specify all fixes it will use. However, note that
-some fixes store an internal "state" which is written to the restart
-file. This allows the fix to continue on with its calculations in a
-restarted simulation. To re-enable such a fix, the fix command in the
-new input script must use the same fix-ID and group-ID as was used in
-the input script that wrote the restart file. If a match is found,
-LAMMPS prints a message indicating that the fix is being re-enabled.
-If no match is found before the first run or minimization is performed
-by the new script, the "state" information for the saved fix is
-discarded. See the doc pages for individual fixes for info on which
-ones can be restarted in this manner.
-
-Likewise, the :doc:`computes <fix>` used for a simulation are not stored
-in the restart file. This means the new input script should specify
-all computes it will use. However, some computes create a fix
-internally to store "state" information that persists from timestep to
-timestep. An example is the :doc:`compute msd <compute_msd>` command
-which uses a fix to store a reference coordinate for each atom, so
-that a displacement can be calculated at any later time. If the
-compute command in the new input script uses the same compute-ID and
-group-ID as was used in the input script that wrote the restart file,
-then it will create the same fix in the restarted run. This means the
-re-created fix will be re-enabled with the stored state information as
-described in the previous paragraph, so that the compute can continue
-its calculations in a consistent manner.
-
-Some pair styles, like the :doc:`granular pair styles <pair_gran>`, also
-use a fix to store "state" information that persists from timestep to
-timestep. In the case of granular potentials, it is contact
-information between pairs of touching particles. This info will also
-be re-enabled in the restart script, assuming you re-use the same
-granular pair style.
-
-LAMMPS allows bond interactions (angle, etc) to be turned off or
-deleted in various ways, which can affect how their info is stored in
-a restart file.
-
-If bonds (angles, etc) have been turned off by the :doc:`fix shake <fix_shake>` or :doc:`delete_bonds <delete_bonds>` command,
-their info will be written to a restart file as if they are turned on.
-This means they will need to be turned off again in a new run after
-the restart file is read.
-
-Bonds that are broken (e.g. by a bond-breaking potential) are written
-to the restart file as broken bonds with a type of 0. Thus these
-bonds will still be broken when the restart file is read.
-
-Bonds that have been broken by the :doc:`fix bond/break <fix_bond_break>` command have disappeared from the
-system. No information about these bonds is written to the restart
-file.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-To write and read restart files in parallel with MPI-IO, the MPIIO
-package must be installed.
-
-Related commands
-""""""""""""""""
-
-:doc:`read_data <read_data>`, :doc:`read_dump <read_dump>`,
-:doc:`write_restart <write_restart>`, :doc:`restart <restart>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/region.txt b/doc/html/_sources/region.txt
deleted file mode 100644
index a9057b779..000000000
--- a/doc/html/_sources/region.txt
+++ /dev/null
@@ -1,367 +0,0 @@
-.. index:: region
-
-region command
-==============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- region ID style args keyword arg ...
-
-* ID = user-assigned name for the region
-* style = *delete* or *block* or *cone* or *cylinder* or *plane* or *prism* or *sphere* or *union* or *intersect*
-.. parsed-literal::
-
- *delete* = no args
- *block* args = xlo xhi ylo yhi zlo zhi
- xlo,xhi,ylo,yhi,zlo,zhi = bounds of block in all dimensions (distance units)
- *cone* args = dim c1 c2 radlo radhi lo hi
- dim = *x* or *y* or *z* = axis of cone
- c1,c2 = coords of cone axis in other 2 dimensions (distance units)
- radlo,radhi = cone radii at lo and hi end (distance units)
- lo,hi = bounds of cone in dim (distance units)
- *cylinder* args = dim c1 c2 radius lo hi
- dim = *x* or *y* or *z* = axis of cylinder
- c1,c2 = coords of cylinder axis in other 2 dimensions (distance units)
- radius = cylinder radius (distance units)
- radius can be a variable (see below)
- lo,hi = bounds of cylinder in dim (distance units)
- *plane* args = px py pz nx ny nz
- px,py,pz = point on the plane (distance units)
- nx,ny,nz = direction normal to plane (distance units)
- *prism* args = xlo xhi ylo yhi zlo zhi xy xz yz
- xlo,xhi,ylo,yhi,zlo,zhi = bounds of untilted prism (distance units)
- xy = distance to tilt y in x direction (distance units)
- xz = distance to tilt z in x direction (distance units)
- yz = distance to tilt z in y direction (distance units)
- *sphere* args = x y z radius
- x,y,z = center of sphere (distance units)
- radius = radius of sphere (distance units)
- radius can be a variable (see below)
- *union* args = N reg-ID1 reg-ID2 ...
- N = # of regions to follow, must be 2 or greater
- reg-ID1,reg-ID2, ... = IDs of regions to join together
- *intersect* args = N reg-ID1 reg-ID2 ...
- N = # of regions to follow, must be 2 or greater
- reg-ID1,reg-ID2, ... = IDs of regions to intersect
-
-* zero or more keyword/arg pairs may be appended
-* keyword = *side* or *units* or *move* or *rotate*
-.. parsed-literal::
-
- *side* value = *in* or *out*
- *in* = the region is inside the specified geometry
- *out* = the region is outside the specified geometry
- *units* value = *lattice* or *box*
- *lattice* = the geometry is defined in lattice units
- *box* = the geometry is defined in simulation box units
- *move* args = v_x v_y v_z
- v_x,v_y,v_z = equal-style variables for x,y,z displacement of region over time
- *rotate* args = v_theta Px Py Pz Rx Ry Rz
- v_theta = equal-style variable for rotaton of region over time (in radians)
- Px,Py,Pz = origin for axis of rotation (distance units)
- Rx,Ry,Rz = axis of rotation vector
-
-* accelerated styles (with same args) = *block/kk*
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- region 1 block -3.0 5.0 INF 10.0 INF INF
- region 2 sphere 0.0 0.0 0.0 5 side out
- region void cylinder y 2 3 5 -5.0 EDGE units box
- region 1 prism 0 10 0 10 0 10 2 0 0
- region outside union 4 side1 side2 side3 side4
- region 2 sphere 0.0 0.0 0.0 5 side out move v_left v_up NULL
-
-Description
-"""""""""""
-
-This command defines a geometric region of space. Various other
-commands use regions. For example, the region can be filled with
-atoms via the :doc:`create_atoms <create_atoms>` command. Or a bounding
-box around the region, can be used to define the simulation box via
-the :doc:`create_box <create_box>` command. Or the atoms in the region
-can be identified as a group via the :doc:`group <group>` command, or
-deleted via the :doc:`delete_atoms <delete_atoms>` command. Or the
-surface of the region can be used as a boundary wall via the :doc:`fix wall/region <fix_wall_region>` command.
-
-Commands which use regions typically test whether an atom's position
-is contained in the region or not. For this purpose, coordinates
-exactly on the region boundary are considered to be interior to the
-region. This means, for example, for a spherical region, an atom on
-the sphere surface would be part of the region if the sphere were
-defined with the *side in* keyword, but would not be part of the
-region if it were defined using the *side out* keyword. See more
-details on the *side* keyword below.
-
-Normally, regions in LAMMPS are "static", meaning their geometric
-extent does not change with time. If the *move* or *rotate* keyword
-is used, as described below, the region becomes "dynamic", meaning
-it's location or orientation changes with time. This may be useful,
-for example, when thermostatting a region, via the compute temp/region
-command, or when the fix wall/region command uses a region surface as
-a bounding wall on particle motion, i.e. a rotating container.
-
-The *delete* style removes the named region. Since there is little
-overhead to defining extra regions, there is normally no need to do
-this, unless you are defining and discarding large numbers of regions
-in your input script.
-
-The lo/hi values for *block* or *cone* or *cylinder* or *prism* styles
-can be specified as EDGE or INF. EDGE means they extend all the way
-to the global simulation box boundary. Note that this is the current
-box boundary; if the box changes size during a simulation, the region
-does not. INF means a large negative or positive number (1.0e20), so
-it should encompass the simulation box even if it changes size. If a
-region is defined before the simulation box has been created (via
-:doc:`create_box <create_box>` or :doc:`read_data <read_data>` or
-:doc:`read_restart <read_restart>` commands), then an EDGE or INF
-parameter cannot be used. For a *prism* region, a non-zero tilt
-factor in any pair of dimensions cannot be used if both the lo/hi
-values in either of those dimensions are INF. E.g. if the xy tilt is
-non-zero, then xlo and xhi cannot both be INF, nor can ylo and yhi.
-
-.. note::
-
- Regions in LAMMPS do not get wrapped across periodic boundaries,
- as specified by the :doc:`boundary <boundary>` command. For example, a
- spherical region that is defined so that it overlaps a periodic
- boundary is not treated as 2 half-spheres, one on either side of the
- simulation box.
-
-.. note::
-
- Regions in LAMMPS are always 3d geometric objects, regardless of
- whether the :doc:`dimension <dimension>` of a simulation is 2d or 3d.
- Thus when using regions in a 2d simulation, you should be careful to
- define the region so that its intersection with the 2d x-y plane of
- the simulation has the 2d geometric extent you want.
-
-For style *cone*\ , an axis-aligned cone is defined which is like a
-*cylinder* except that two different radii (one at each end) can be
-defined. Either of the radii (but not both) can be 0.0.
-
-For style *cone* and *cylinder*\ , the c1,c2 params are coordinates in
-the 2 other dimensions besides the cylinder axis dimension. For dim =
-x, c1/c2 = y/z; for dim = y, c1/c2 = x/z; for dim = z, c1/c2 = x/y.
-Thus the third example above specifies a cylinder with its axis in the
-y-direction located at x = 2.0 and z = 3.0, with a radius of 5.0, and
-extending in the y-direction from -5.0 to the upper box boundary.
-
-For style *plane*\ , a plane is defined which contain the point
-(px,py,pz) and has a normal vector (nx,ny,nz). The normal vector does
-not have to be of unit length. The "inside" of the plane is the
-half-space in the direction of the normal vector; see the discussion
-of the *side* option below.
-
-For style *prism*\ , a parallelepiped is defined (it's too hard to spell
-parallelepiped in an input script!). The parallelepiped has its
-"origin" at (xlo,ylo,zlo) and is defined by 3 edge vectors starting
-from the origin given by A = (xhi-xlo,0,0); B = (xy,yhi-ylo,0); C =
-(xz,yz,zhi-zlo). *Xy,xz,yz* can be 0.0 or positive or negative values
-and are called "tilt factors" because they are the amount of
-displacement applied to faces of an originally orthogonal box to
-transform it into the parallelepiped.
-
-A prism region that will be used with the :doc:`create_box <create_box>`
-command to define a triclinic simulation box must have tilt factors
-(xy,xz,yz) that do not skew the box more than half the distance of
-corresponding the parallel box length. For example, if xlo = 2 and
-xhi = 12, then the x box length is 10 and the xy tilt factor must be
-between -5 and 5. Similarly, both xz and yz must be between
--(xhi-xlo)/2 and +(yhi-ylo)/2. Note that this is not a limitation,
-since if the maximum tilt factor is 5 (as in this example), then
-configurations with tilt = ..., -15, -5, 5, 15, 25, ... are all
-geometrically equivalent.
-
-The *radius* value for style *sphere* and *cylinder* can be specified
-as an equal-style :doc:`variable <variable>`. If the value is a
-variable, it should be specified as v_name, where name is the variable
-name. In this case, the variable will be evaluated each timestep, and
-its value used to determine the radius of the region.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. Thus it is easy to specify a time-dependent radius.
-
-See :ref:`Section_howto 12 <howto_12>` of the doc pages
-for a geometric description of triclinic boxes, as defined by LAMMPS,
-and how to transform these parameters to and from other commonly used
-triclinic representations.
-
-The *union* style creates a region consisting of the volume of all the
-listed regions combined. The *intersect* style creates a region
-consisting of the volume that is common to all the listed regions.
-
-.. note::
-
- The *union* and *intersect* regions operate by invoking methods
- from their list of sub-regions. Thus you cannot delete the
- sub-regions after defining the *union* or *intersection* region.
-
-
-----------
-
-
-The *side* keyword determines whether the region is considered to be
-inside or outside of the specified geometry. Using this keyword in
-conjunction with *union* and *intersect* regions, complex geometries
-can be built up. For example, if the interior of two spheres were
-each defined as regions, and a *union* style with *side* = out was
-constructed listing the region-IDs of the 2 spheres, the resulting
-region would be all the volume in the simulation box that was outside
-both of the spheres.
-
-The *units* keyword determines the meaning of the distance units used
-to define the region for any argument above listed as having distance
-units. It also affects the scaling of the velocity vector specfied
-with the *vel* keyword, the amplitude vector specified with the
-*wiggle* keyword, and the rotation point specified with the *rotate*
-keyword, since they each involve a distance metric.
-
-A *box* value selects standard distance units as defined by the
-:doc:`units <units>` command, e.g. Angstroms for units = real or metal.
-A *lattice* value means the distance units are in lattice spacings.
-The :doc:`lattice <lattice>` command must have been previously used to
-define the lattice spacings which are used as follows:
-
-* For style *block*\ , the lattice spacing in dimension x is applied to
- xlo and xhi, similarly the spacings in dimensions y,z are applied to
- ylo/yhi and zlo/zhi.
-* For style *cone*\ , the lattice spacing in argument *dim* is applied to
- lo and hi. The spacings in the two radial dimensions are applied to
- c1 and c2. The two cone radii are scaled by the lattice
- spacing in the dimension corresponding to c1.
-* For style *cylinder*\ , the lattice spacing in argument *dim* is applied
- to lo and hi. The spacings in the two radial dimensions are applied
- to c1 and c2. The cylinder radius is scaled by the lattice
- spacing in the dimension corresponding to c1.
-* For style *plane*\ , the lattice spacing in dimension x is applied to
- px and nx, similarly the spacings in dimensions y,z are applied to
- py/ny and pz/nz.
-* For style *prism*\ , the lattice spacing in dimension x is applied to
- xlo and xhi, similarly for ylo/yhi and zlo/zhi. The lattice spacing
- in dimension x is applied to xy and xz, and the spacing in dimension y
- to yz.
-* For style *sphere*\ , the lattice spacing in dimensions x,y,z are
- applied to the sphere center x,y,z. The spacing in dimension x is
- applied to the sphere radius.
-
-----------
-
-
-If the *move* or *rotate* keywords are used, the region is "dynamic",
-meaning its location or orientation changes with time. These keywords
-cannot be used with a *union* or *intersect* style region. Instead,
-the keywords should be used to make the individual sub-regions of the
-*union* or *intersect* region dynamic. Normally, each sub-region
-should be "dynamic" in the same manner (e.g. rotate around the same
-point), though this is not a requirement.
-
-The *move* keyword allows one or more :doc:`equal-style variables <variable>` to be used to specify the x,y,z displacement
-of the region, typically as a function of time. A variable is
-specified as v_name, where name is the variable name. Any of the
-three variables can be specified as NULL, in which case no
-displacement is calculated in that dimension.
-
-Note that equal-style variables can specify formulas with various
-mathematical functions, and include :doc:`thermo_style <thermo_style>`
-command keywords for the simulation box parameters and timestep and
-elapsed time. Thus it is easy to specify a region displacement that
-change as a function of time or spans consecutive runs in a continuous
-fashion. For the latter, see the *start* and *stop* keywords of the
-:doc:`run <run>` command and the *elaplong* keyword of :doc:`thermo_style custom <thermo_style>` for details.
-
-For example, these commands would displace a region from its initial
-position, in the positive x direction, effectively at a constant
-velocity:
-
-.. parsed-literal::
-
- variable dx equal ramp(0,10)
- region 2 sphere 10.0 10.0 0.0 5 move v_dx NULL NULL
-
-Note that the initial displacemet is 0.0, though that is not required.
-
-Either of these varaibles would "wiggle" the region back and forth in
-the y direction:
-
-.. parsed-literal::
-
- variable dy equal swiggle(0,5,100)
- variable dysame equal 5*sin(2*PI*elaplong*dt/100)
- region 2 sphere 10.0 10.0 0.0 5 move NULL v_dy NULL
-
-The *rotate* keyword rotates the region around a rotation axis *R* =
-(Rx,Ry,Rz) that goes thru a point *P* = (Px,Py,Pz). The rotation
-angle is calculated, presumably as a function of time, by a variable
-specified as v_theta, where theta is the variable name. The variable
-should generate its result in radians. The direction of rotation for
-the region around the rotation axis is consistent with the right-hand
-rule: if your right-hand thumb points along *R*\ , then your fingers
-wrap around the axis in the direction of rotation.
-
-The *move* and *rotate* keywords can be used together. In this case,
-the displacement specified by the *move* keyword is applied to the *P*
-point of the *rotate* keyword.
-
-
-----------
-
-
-Styles with a *kk* 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
-:doc:`Section_accelerate <Section_accelerate>` of the manual. The
-accelerated styles take the same arguments and should produce the same
-results, except for round-off and precision issues.
-
-The code using the region (such as a fix or compute) must also be supported
-by Kokkos or no acceleration will occur. Currently, only *block* style
-regions are supported by Kokkos.
-
-These accelerated styles are part of the Kokkos package. They are
-only enabled if LAMMPS was built with that package. See the :ref:`Making LAMMPS <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 :ref:`-suffix command-line switch <start_7>` when you invoke LAMMPS, or you can
-use the :doc:`suffix <suffix>` command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-A prism cannot be of 0.0 thickness in any dimension; use a small z
-thickness for 2d simulations. For 2d simulations, the xz and yz
-parameters must be 0.0.
-
-Related commands
-""""""""""""""""
-
-:doc:`lattice <lattice>`, :doc:`create_atoms <create_atoms>`,
-:doc:`delete_atoms <delete_atoms>`, :doc:`group <group>`
-
-Default
-"""""""
-
-The option defaults are side = in, units = lattice, and no move or
-rotation.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/replicate.txt b/doc/html/_sources/replicate.txt
deleted file mode 100644
index 7280d9839..000000000
--- a/doc/html/_sources/replicate.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-.. index:: replicate
-
-replicate command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- replicate nx ny nz
-
-* nx,ny,nz = replication factors in each dimension
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- replicate 2 3 2
-
-Description
-"""""""""""
-
-Replicate the current simulation one or more times in each dimension.
-For example, replication factors of 2,2,2 will create a simulation
-with 8x as many atoms by doubling the simulation domain in each
-dimension. A replication factor of 1 in a dimension leaves the
-simulation domain unchanged. When the new simulation box is created
-it is also partitioned into a regular 3d grid of rectangular bricks,
-one per processor, based on the number of processors being used and
-the settings of the :doc:`processors <processors>` command. The
-partitioning can later be changed by the :doc:`balance <balance>` or
-:doc:`fix balance <fix_balance>` commands.
-
-All properties of the atoms are replicated, including their
-velocities, which may or may not be desirable. New atom IDs are
-assigned to new atoms, as are molecule IDs. Bonds and other topology
-interactions are created between pairs of new atoms as well as between
-old and new atoms. This is done by using the image flag for each atom
-to "unwrap" it out of the periodic box before replicating it.
-
-This means that any molecular bond you specify in the original data
-file that crosses a periodic boundary should be between two atoms with
-image flags that differ by 1. This will allow the bond to be
-unwrapped appropriately.
-
-Restrictions
-""""""""""""
-
-
-A 2d simulation cannot be replicated in the z dimension.
-
-If a simulation is non-periodic in a dimension, care should be used
-when replicating it in that dimension, as it may put atoms nearly on
-top of each other.
-
-.. note::
-
- You cannot use the replicate command on a system which has a
- molecule that spans the box and is bonded to itself across a periodic
- boundary, so that the molecule is efffectively a loop. A simple
- example would be a linear polymer chain that spans the simulation box
- and bonds back to itself across the periodic boundary. More realistic
- examples would be a CNT (meant to be an infinitely long CNT) or a
- graphene sheet or a bulk periodic crystal where there are explicit
- bonds specified between near neighbors. (Note that this only applies
- to systems that have permanent bonds as specified in the data file. A
- CNT that is just atoms modeled with the :doc:`AIREBO potential <pair_airebo>` has no such permanent bonds, so it can be
- replicated.) The reason replication does not work with those systems
- is that the image flag settings described above cannot be made
- consistent. I.e. it is not possible to define images flags so that
- when every pair of bonded atoms is unwrapped (using the image flags),
- they will be close to each other. The only way the replicate command
- could work in this scenario is for it to break a bond, insert more
- atoms, and re-connect the loop for the larger simulation box. But it
- is not clever enough to do this. So you will have to construct a
- larger version of your molecule as a pre-processing step and input a
- new data file to LAMMPS.
-
-If the current simulation was read in from a restart file (before a
-run is performed), there can have been no fix information stored in
-the file for individual atoms. Similarly, no fixes can be defined at
-the time the replicate command is used that require vectors of atom
-information to be stored. This is because the replicate command does
-not know how to replicate that information for new atoms it creates.
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/rerun.txt b/doc/html/_sources/rerun.txt
deleted file mode 100644
index 86bda2c66..000000000
--- a/doc/html/_sources/rerun.txt
+++ /dev/null
@@ -1,212 +0,0 @@
-.. index:: rerun
-
-rerun command
-=============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- rerun file1 file2 ... keyword args ...
-
-* file1,file2,... = dump file(s) to read
-* one or more keywords may be appended, keyword *dump* must appear and be last
-.. parsed-literal::
-
- keyword = *first* or *last* or *every* or *skip* or *start* or *stop* or *dump*
- *first* args = Nfirts
- Nfirst = dump timestep to start on
- *last* args = Nlast
- Nlast = dumptimestep to stop on
- *every* args = Nevery
- Nevery = read snapshots matching every this many timesteps
- *skip* args = Nskip
- Nskip = read one out of every Nskip snapshots
- *start* args = Nstart
- Nstart = timestep on which pseudo run will start
- *stop* args = Nstop
- Nstop = timestep to which pseudo run will end
- *dump* args = same as :doc:`read_dump <read_dump>` command starting with its field arguments
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- rerun dump.file dump x y z vx vy vz
- rerun dump1.txt dump2.txt first 10000 every 1000 dump x y z
- rerun dump.vels dump x y z vx vy vz box yes format molfile lammpstrj
- rerun dump.dcd dump x y z box no format molfile dcd
- rerun ../run7/dump.file.gz skip 2 dump x y z box yes
-
-Description
-"""""""""""
-
-Perform a psuedo simulation run where atom information is read one
-snapshot at a time from a dump file(s), and energies and forces are
-computed on the shapshot to produce thermodynamic or other output.
-
-This can be useful in the following kinds of scenarios, after an
-initial simulation produced the dump file:
-
-* Compute the energy and forces of snaphots using a different potential.
-* Calculate one or more diagnostic quantities on the snapshots that
- weren't computed in the initial run. These can also be computed with
- settings not used in the initial run, e.g. computing an RDF via the
- :doc:`compute rdf <compute.rdf>` command with a longer cutoff than was
- used initially.
-* Calculate the portion of per-atom forces resulting from a subset of
- the potential. E.g. compute only Coulombic forces. This can be done
- by only defining only a Coulombic pair style in the rerun script.
- Doing this in the original script would result in different (bad)
- dynamics.
-Conceptually, using the rerun command is like running an input script
-that has a loop in it (see the :doc:`next <next>` and :doc:`jump <jump>`
-commands). Each iteration of the loop reads one snapshot from the
-dump file via the :doc:`read_dump <read_dump>` command, sets the
-timestep to the appropriate value, and then invokes a :doc:`run <run>`
-command for zero timesteps to simply compute energy and forces, and
-any other :doc:`thermodynamic output <thermo_style>` or diagnostic info
-you have defined. This computation also invokes any fixes you have
-defined that apply constraints to the system, such as :doc:`fix shake <fix_shake>` or :doc:`fix indent <fix_indent>`.
-
-Note that a simulation box must already be defined before using the
-rerun command. This can be done by the :doc:`create_box <create_box>`,
-:doc:`read_data <read_data>`, or :doc:`read_restart <read_restart>`
-commands.
-
-Also note that reading per-atom information from dump snapshots is
-limited to the atom coordinates, velocities and image flags as
-explained in the :doc:`read_dump <read_dump>` command. Other atom
-properties, which may be necessary to compute energies and forces,
-such as atom charge, or bond topology information for a molecular
-system, are not read from (or even contained in) dump files. Thus
-this auxiliary information should be defined in the usual way, e.g. in
-a data file read in by a :doc:`read_data <read_data>` command, before
-using the rerun command.
-
-
-----------
-
-
-If more than one dump file is specified, the dump files are read one
-after the other. It is assumed that snapshot timesteps will be in
-ascending order. If a snapshot is encountered that is not in
-ascending order, it will cause the rerun command to complete.
-
-The *first*\ , *last*\ , *every*\ , *skip* keywords determine which
-snapshots are read from the dump file(s). Snapshots are skipped until
-they have a timestamp >= *Nfirst*\ . When a snapshot with a timestamp >
-*Nlast* is encountered, the rerun command finishes. Note below that
-the defaults for *first* and *last* are to read all snapshots. If the
-*every* keyword is set to a value > 0, then only snapshots with
-timestamps that are a multiple of *Nevery* are read (the first
-snapshot is always read). If *Nevery* = 0, then this criterion is
-ignored, i.e. every snapshot is read that meets the other criteria.
-If the *skip* keyword is used, then after the first snapshot is read,
-every Nth snapshot is read, where N = *Nskip*\ . E.g. if *Nskip* = 3,
-then only 1 out of every 3 snapshots is read, assuming the snapshot
-timestamp is also consistent with the other criteria.
-
-The *start* and *stop* keywords do not affect which snapshots are read
-from the dump file(s). Rather, they have the same meaning that they
-do for the :doc:`run <run>` command. They only need to be defined if
-(a) you are using a :doc:`fix <fix>` command that changes some value
-over time, and (b) you want the reference point for elapsed time (from
-start to stop) to be different than the *first* and *last* settings.
-See the doc page for individual fixes to see which ones can be used
-with the *start/stop* keywords. Note that if you define neither of
-the *start*\ /\ *stop* or *first*\ /\ *last* keywords, then LAMMPS treats the
-pseudo run as going from 0 to a huge value (effectively infinity).
-This means that any quantity that a fix scales as a fraction of
-elapsed time in the run, will essentially remain at its intiial value.
-Also note that an error will occur if you read a snapshot from the
-dump file with a timestep value larger than the *stop* setting you
-have specified.
-
-The *dump* keyword is required and must be the last keyword specified.
-Its arguments are passed internally to the :doc:`read_dump <read_dump>`
-command. The first argument following the *dump* keyword should be
-the *field1* argument of the :doc:`read_dump <read_dump>` command. See
-the :doc:`read_dump <read_dump>` doc page for details on the various
-options it allows for extracting information from the dump file
-snapshots, and for using that information to alter the LAMMPS
-simulation.
-
-
-----------
-
-
-In general, a LAMMPS input script that uses a rerun command can
-include and perform all the usual operations of an input script that
-uses the :doc:`run <run>` command. There are a few exceptions and
-points to consider, as discussed here.
-
-Fixes that perform time integration, such as :doc:`fix nve <fix_nve>` or
-:doc:`fix npt <fix_nh>` are not invoked, since no time integration is
-performed. Fixes that perturb or constrain the forces on atoms will
-be invoked, just as they would during a normal run. Examples are :doc:`fix indent <fix_indent>` and :doc:`fix langevin <fix_langevin>`. So you
-should think carefully as to whether that makes sense for the manner
-in which you are reprocessing the dump snapshots.
-
-If you only want the rerun script to perform analyses that do not
-involve pair interactions, such as use compute msd to calculated
-displacements over time, you do not need to define a :doc:`pair style <pair_style>`, which may also mean neighbor lists will not
-need to be calculated which saves time. The :doc:`comm_modify cutoff <comm_modify>` command can also be used to insure ghost
-atoms are acquired from far enough away for operations like bond and
-angle evaluations, if no pair style is being used.
-
-Every time a snapshot is read, the timestep for the simulation is
-reset, as if the :doc:`reset_timestep <reset_timestep>` command were
-used. This command has some restrictions as to what fixes can be
-defined. See its doc page for details. For example, the :doc:`fix deposit <fix_deposit>` and :doc:`fix dt/reset <fix_dt_reset>` fixes
-are in this category. They also make no sense to use with a rerun
-command.
-
-If time-averaging fixes like :doc:`fix ave/time <fix_ave_time>` are
-used, they are invoked on timesteps that are a function of their
-*Nevery*\ , *Nrepeat*\ , and *Nfreq* settings. As an example, see the
-:doc:`fix ave/time <fix_ave_time>` doc page for details. You must
-insure those settings are consistent with the snapshot timestamps that
-are read from the dump file(s). If an averaging fix is not invoked on
-a timestep it expects to be, LAMMPS will flag an error.
-
-The various forms of LAMMPS output, as defined by the
-:doc:`thermo_style <thermo_style>`, :doc:`thermo <thermo>`,
-:doc:`dump <dump>`, and :doc:`restart <restart>` commands occur on
-specific timesteps. If successvive dump snapshots skip those
-timesteps, then no output will be produced. E.g. if you request
-thermodynamic output every 100 steps, but the dump file snapshots are
-every 1000 steps, then you will only see thermodynamic output every
-1000 steps.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-To read gzipped dump files, you must compile LAMMPS with the
--DLAMMPS_GZIP option - see the :ref:`Making LAMMPS <start_2>` section of the documentation.
-
-Related commands
-""""""""""""""""
-
-:doc:`read_dump <read_dump>`
-
-Default
-"""""""
-
-The option defaults are first = 0, last = a huge value (effectively
-infinity), start = same as first, stop = same as last, every = 0, skip
-= 1;
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/reset_timestep.txt b/doc/html/_sources/reset_timestep.txt
deleted file mode 100644
index e52739884..000000000
--- a/doc/html/_sources/reset_timestep.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-.. index:: reset_timestep
-
-reset_timestep command
-======================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- reset_timestep N
-
-* N = timestep number
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- reset_timestep 0
- reset_timestep 4000000
-
-Description
-"""""""""""
-
-Set the timestep counter to the specified value. This command
-normally comes after the timestep has been set by reading a restart
-file via the :doc:`read_restart <read_restart>` command, or a previous
-simulation advanced the timestep.
-
-The :doc:`read_data <read_data>` and :doc:`create_box <create_box>`
-commands set the timestep to 0; the :doc:`read_restart <read_restart>`
-command sets the timestep to the value it had when the restart file
-was written.
-
-Restrictions
-""""""""""""
- none
-
-This command cannot be used when any fixes are defined that keep track
-of elapsed time to perform certain kinds of time-dependent operations.
-Examples are the :doc:`fix deposit <fix_deposit>` and :doc:`fix dt/reset <fix_dt_reset>` commands. The former adds atoms on
-specific timesteps. The latter keeps track of accumulated time.
-
-Various fixes use the current timestep to calculate related
-quantities. If the timestep is reset, this may produce unexpected
-behavior, but LAMMPS allows the fixes to be defined even if the
-timestep is reset. For example, commands which thermostat the system,
-e.g. :doc:`fix nvt <fix_nh>`, allow you to specify a target temperature
-which ramps from Tstart to Tstop which may persist over several runs.
-If you change the timestep, you may induce an instantaneous change in
-the target temperature.
-
-Resetting the timestep clears flags for :doc:`computes <compute>` that
-may have calculated some quantity from a previous run. This means
-these quantity cannot be accessed by a variable in between runs until
-a new run is performed. See the :doc:`variable <variable>` command for
-more details.
-
-Related commands
-""""""""""""""""
-
-:doc:`rerun <rerun>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/restart.txt b/doc/html/_sources/restart.txt
deleted file mode 100644
index 1437db889..000000000
--- a/doc/html/_sources/restart.txt
+++ /dev/null
@@ -1,199 +0,0 @@
-.. index:: restart
-
-restart command
-===============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- restart 0
- restart N root keyword value ...
- restart N file1 file2 keyword value ...
-
-* N = write a restart file every this many timesteps
-* N can be a variable (see below)
-* root = filename to which timestep # is appended
-* file1,file2 = two full filenames, toggle between them when writing file
-* zero or more keyword/value pairs may be appended
-* keyword = *fileper* or *nfile*
-.. parsed-literal::
-
- *fileper* arg = Np
- Np = write one file for every this many processors
- *nfile* arg = Nf
- Nf = write this many files, one from each of Nf processors
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- restart 0
- restart 1000 poly.restart
- restart 1000 poly.restart.mpiio
- restart 1000 restart.*.equil
- restart 10000 poly.%.1 poly.%.2 nfile 10
- restart v_mystep poly.restart
-
-Description
-"""""""""""
-
-Write out a binary restart file with the current state of the
-simulation every so many timesteps, in either or both of two modes, as
-a run proceeds. A value of 0 means do not write out any restart
-files. The two modes are as follows. If one filename is specified, a
-series of filenames will be created which include the timestep in the
-filename. If two filenames are specified, only 2 restart files will
-be created, with those names. LAMMPS will toggle between the 2 names
-as it writes successive restart files.
-
-Note that you can specify the restart command twice, once with a
-single filename and once with two filenames. This would allow you,
-for example, to write out archival restart files every 100000 steps
-using a single filenname, and more frequent temporary restart files
-every 1000 steps, using two filenames. Using restart 0 will turn off
-both modes of output.
-
-Similar to :doc:`dump <dump>` files, the restart filename(s) can contain
-two wild-card characters.
-
-If a "*" appears in the single filename, it is replaced with the
-current timestep value. This is only recognized when a single
-filename is used (not when toggling back and forth). Thus, the 3rd
-example above creates restart files as follows: restart.1000.equil,
-restart.2000.equil, etc. If a single filename is used with no "*",
-then the timestep value is appended. E.g. the 2nd example above
-creates restart files as follows: poly.restart.1000,
-poly.restart.2000, etc.
-
-If a "%" character appears in the restart filename(s), then one file
-is written for each processor and the "%" character is replaced with
-the processor ID from 0 to P-1. An additional file with the "%"
-replaced by "base" is also written, which contains global information.
-For example, the files written on step 1000 for filename restart.%
-would be restart.base.1000, restart.0.1000, restart.1.1000, ...,
-restart.P-1.1000. This creates smaller files and can be a fast mode
-of output and subsequent input on parallel machines that support
-parallel I/O. The optional *fileper* and *nfile* keywords discussed
-below can alter the number of files written.
-
-The restart file can also be written in parallel as one large binary
-file via the MPI-IO library, which is part of the MPI standard for
-versions 2.0 and above. Using MPI-IO requires two steps. First,
-build LAMMPS with its MPIIO package installed, e.g.
-
-.. parsed-literal::
-
- make yes-mpiio # installs the MPIIO package
- make g++ # build LAMMPS for your platform
-
-Second, use a restart filename which contains ".mpiio". Note that it
-does not have to end in ".mpiio", just contain those characters.
-Unlike MPI-IO dump files, a particular restart file must be both
-written and read using MPI-IO.
-
-Restart files are written on timesteps that are a multiple of N but
-not on the first timestep of a run or minimization. You can use the
-:doc:`write_restart <write_restart>` command to write a restart file
-before a run begins. A restart file is not written on the last
-timestep of a run unless it is a multiple of N. A restart file is
-written on the last timestep of a minimization if N > 0 and the
-minimization converges.
-
-Instead of a numeric value, N can be specifed as an :doc:`equal-style variable <variable>`, which should be specified as v_name, where
-name is the variable name. In this case, the variable is evaluated at
-the beginning of a run to determine the next timestep at which a
-restart file will be written out. On that timestep, the variable will
-be evaluated again to determine the next timestep, etc. Thus the
-variable should return timestep values. See the stagger() and
-logfreq() and stride() math functions for :doc:`equal-style variables <variable>`, as examples of useful functions to use in
-this context. Other similar math functions could easily be added as
-options for :doc:`equal-style variables <variable>`.
-
-For example, the following commands will write restart files
-every step from 1100 to 1200, and could be useful for debugging
-a simulation where something goes wrong at step 1163:
-
-.. parsed-literal::
-
- variable s equal stride(1100,1200,1)
- restart v_s tmp.restart
-
-
-----------
-
-
-See the :doc:`read_restart <read_restart>` command for information about
-what is stored in a restart file.
-
-Restart files can be read by a :doc:`read_restart <read_restart>`
-command to restart a simulation from a particular state. Because the
-file is binary (to enable exact restarts), it may not be readable on
-another machine. In this case, you can use the :ref:`-r command-line switch <start_7>` to convert a restart file to a data
-file.
-
-.. note::
-
- Although the purpose of restart files is to enable restarting a
- simulation from where it left off, not all information about a
- simulation is stored in the file. For example, the list of fixes that
- were specified during the initial run is not stored, which means the
- new input script must specify any fixes you want to use. Even when
- restart information is stored in the file, as it is for some fixes,
- commands may need to be re-specified in the new input script, in order
- to re-use that information. See the :doc:`read_restart <read_restart>`
- command for information about what is stored in a restart file.
-
-
-----------
-
-
-The optional *nfile* or *fileper* keywords can be used in conjunction
-with the "%" wildcard character in the specified restart file name(s).
-As explained above, the "%" character causes the restart file to be
-written in pieces, one piece for each of P processors. By default P =
-the number of processors the simulation is running on. The *nfile* or
-*fileper* keyword can be used to set P to a smaller value, which can
-be more efficient when running on a large number of processors.
-
-The *nfile* keyword sets P to the specified Nf value. For example, if
-Nf = 4, and the simulation is running on 100 processors, 4 files will
-be written, by processors 0,25,50,75. Each will collect information
-from itself and the next 24 processors and write it to a restart file.
-
-For the *fileper* keyword, the specified value of Np means write one
-file for every Np processors. For example, if Np = 4, every 4th
-processor (0,4,8,12,etc) will collect information from itself and the
-next 3 processors and write it to a restart file.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-To write and read restart files in parallel with MPI-IO, the MPIIO
-package must be installed.
-
-Related commands
-""""""""""""""""
-
-:doc:`write_restart <write_restart>`, :doc:`read_restart <read_restart>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- restart 0
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/run.txt b/doc/html/_sources/run.txt
deleted file mode 100644
index f17324f07..000000000
--- a/doc/html/_sources/run.txt
+++ /dev/null
@@ -1,232 +0,0 @@
-.. index:: run
-
-run command
-===========
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- run N keyword values ...
-
-* N = # of timesteps
-* zero or more keyword/value pairs may be appended
-* keyword = *upto* or *start* or *stop* or *pre* or *post* or *every*
-.. parsed-literal::
-
- *upto* value = none
- *start* value = N1
- N1 = timestep at which 1st run started
- *stop* value = N2
- N2 = timestep at which last run will end
- *pre* value = *no* or *yes*
- *post* value = *no* or *yes*
- *every* values = M c1 c2 ...
- M = break the run into M-timestep segments and invoke one or more commands between each segment
- c1,c2,...,cN = one or more LAMMPS commands, each enclosed in quotes
- c1 = NULL means no command will be invoked
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- run 10000
- run 1000000 upto
- run 100 start 0 stop 1000
- run 1000 pre no post yes
- run 100000 start 0 stop 1000000 every 1000 "print 'Protein Rg = $r'"
- run 100000 every 1000 NULL
-
-Description
-"""""""""""
-
-Run or continue dynamics for a specified number of timesteps.
-
-When the :doc:`run style <run_style>` is *respa*\ , N refers to outer
-loop (largest) timesteps.
-
-A value of N = 0 is acceptable; only the thermodynamics of the system
-are computed and printed without taking a timestep.
-
-The *upto* keyword means to perform a run starting at the current
-timestep up to the specified timestep. E.g. if the current timestep
-is 10,000 and "run 100000 upto" is used, then an additional 90,000
-timesteps will be run. This can be useful for very long runs on a
-machine that allocates chunks of time and terminate your job when time
-is exceeded. If you need to restart your script multiple times
-(reading in the last restart file), you can keep restarting your
-script with the same run command until the simulation finally
-completes.
-
-The *start* or *stop* keywords can be used if multiple runs are being
-performed and you want a :doc:`fix <fix>` command that changes some
-value over time (e.g. temperature) to make the change across the
-entire set of runs and not just a single run. See the doc page for
-individual fixes to see which ones can be used with the *start/stop*
-keywords.
-
-For example, consider this fix followed by 10 run commands:
-
-.. parsed-literal::
-
- fix 1 all nvt 200.0 300.0 1.0
- run 1000 start 0 stop 10000
- run 1000 start 0 stop 10000
- ...
- run 1000 start 0 stop 10000
-
-The NVT fix ramps the target temperature from 200.0 to 300.0 during a
-run. If the run commands did not have the start/stop keywords (just
-"run 1000"), then the temperature would ramp from 200.0 to 300.0
-during the 1000 steps of each run. With the start/stop keywords, the
-ramping takes place over the 10000 steps of all runs together.
-
-The *pre* and *post* keywords can be used to streamline the setup,
-clean-up, and associated output to the screen that happens before and
-after a run. This can be useful if you wish to do many short runs in
-succession (e.g. LAMMPS is being called as a library which is doing
-other computations between successive short LAMMPS runs).
-
-By default (pre and post = yes), LAMMPS creates neighbor lists,
-computes forces, and imposes fix constraints before every run. And
-after every run it gathers and prints timings statistics. If a run is
-just a continuation of a previous run (i.e. no settings are changed),
-the initial computation is not necessary; the old neighbor list is
-still valid as are the forces. So if *pre* is specified as "no" then
-the initial setup is skipped, except for printing thermodynamic info.
-Note that if *pre* is set to "no" for the very 1st run LAMMPS
-performs, then it is overridden, since the initial setup computations
-must be done.
-
-.. note::
-
- If your input script changes the system between 2 runs, then the
- initial setup must be performed to insure the change is recognized by
- all parts of the code that are affected. Examples are adding a
- :doc:`fix <fix>` or :doc:`dump <dump>` or :doc:`compute <compute>`, changing
- a :doc:`neighbor <neigh_modify>` list parameter, or writing restart file
- which can migrate atoms between processors. LAMMPS has no easy way to
- check if this has happened, but it is an error to use the *pre no*
- option in this case.
-
-If *post* is specified as "no", the full timing summary is skipped;
-only a one-line summary timing is printed.
-
-The *every* keyword provides a means of breaking a LAMMPS run into a
-series of shorter runs. Optionally, one or more LAMMPS commands (c1,
-c2, ..., cN) will be executed in between the short runs. If used, the
-*every* keyword must be the last keyword, since it has a variable
-number of arguments. Each of the trailing arguments is a single
-LAMMPS command, and each command should be enclosed in quotes, so that
-the entire command will be treated as a single argument. This will
-also prevent any variables in the command from being evaluated until
-it is executed multiple times during the run. Note that if a command
-itself needs one of its arguments quoted (e.g. the :doc:`print <print>`
-command), then you can use a combination of single and double quotes,
-as in the example above or below.
-
-The *every* keyword is a means to avoid listing a long series of runs
-and interleaving commands in your input script. For example, a
-:doc:`print <print>` command could be invoked or a :doc:`fix <fix>` could
-be redefined, e.g. to reset a thermostat temperature. Or this could
-be useful for invoking a command you have added to LAMMPS that wraps
-some other code (e.g. as a library) to perform a computation
-periodically during a long LAMMPS run. See :doc:`this section <Section_modify>` of the documentation for info about how
-to add new commands to LAMMPS. See :ref:`this section <howto_10>` of the documentation for ideas
-about how to couple LAMMPS to other codes.
-
-With the *every* option, N total steps are simulated, in shorter runs
-of M steps each. After each M-length run, the specified commands are
-invoked. If only a single command is specified as NULL, then no
-command is invoked. Thus these lines:
-
-.. parsed-literal::
-
- variable q equal x[100]
- run 6000 every 2000 "print 'Coord = $q'"
-
-are the equivalent of:
-
-.. parsed-literal::
-
- variable q equal x[100]
- run 2000
- print "Coord = $q"
- run 2000
- print "Coord = $q"
- run 2000
- print "Coord = $q"
-
-which does 3 runs of 2000 steps and prints the x-coordinate of a
-particular atom between runs. Note that the variable "$q" will
-be evaluated afresh each time the print command is executed.
-
-Note that by using the line continuation character "&", the run every
-command can be spread across many lines, though it is still a single
-command:
-
-.. parsed-literal::
-
- run 100000 every 1000 &
- "print 'Minimum value = $a'" &
- "print 'Maximum value = $b'" &
- "print 'Temp = $c'" &
- "print 'Press = $d'"
-
-If the *pre* and *post* options are set to "no" when used with the
-*every* keyword, then the 1st run will do the full setup and the last
-run will print the full timing summary, but these operations will be
-skipped for intermediate runs.
-
-.. note::
-
- You might hope to specify a command that exits the run by
- jumping out of the loop, e.g.
-
-.. parsed-literal::
-
- variable t equal temp
- run 10000 every 100 "if '$t < 300.0' then 'jump SELF afterrun'"
-
-Unfortunately this will not currently work. The run command simply
-executes each command one at a time each time it pauses, then
-continues the run. You can replace the jump command with a simple
-:doc:`quit <quit>` command and cause LAMMPS to exit during the
-middle of a run when the condition is met.
-
-Restrictions
-""""""""""""
-
-
-When not using the *upto* keyword, the number of specified timesteps N
-must fit in a signed 32-bit integer, so you are limited to slightly
-more than 2 billion steps (2^31) in a single run. When using *upto*\ ,
-N can be larger than a signed 32-bit integer, however the difference
-between N and the current timestep must still be no larger than
-2^31 steps.
-
-However, with or without the *upto* keyword, you can perform
-successive runs to run a simulation for any number of steps (ok, up to
-2^63 total steps). I.e. the timestep counter within LAMMPS is a
-64-bit signed integer.
-
-Related commands
-""""""""""""""""
-
-:doc:`minimize <minimize>`, :doc:`run_style <run_style>`,
-:doc:`temper <temper>`
-
-Default
-"""""""
-
-The option defaults are start = the current timestep, stop = current
-timestep + N, pre = yes, and post = yes.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/run_style.txt b/doc/html/_sources/run_style.txt
deleted file mode 100644
index 380f4536c..000000000
--- a/doc/html/_sources/run_style.txt
+++ /dev/null
@@ -1,334 +0,0 @@
-.. index:: run_style
-
-run_style command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- run_style style args
-
-* style = *verlet* or *verlet/split* or *respa* or *respa/omp*
-.. parsed-literal::
-
- *verlet* args = none
- *verlet/split* args = none
- *respa* args = N n1 n2 ... keyword values ...
- N = # of levels of rRESPA
- n1, n2, ... = loop factor between rRESPA levels (N-1 values)
- zero or more keyword/value pairings may be appended to the loop factors
- keyword = *bond* or *angle* or *dihedral* or *improper* or
- *pair* or *inner* or *middle* or *outer* or *hybrid* or *kspace*
- *bond* value = M
- M = which level (1-N) to compute bond forces in
- *angle* value = M
- M = which level (1-N) to compute angle forces in
- *dihedral* value = M
- M = which level (1-N) to compute dihedral forces in
- *improper* value = M
- M = which level (1-N) to compute improper forces in
- *pair* value = M
- M = which level (1-N) to compute pair forces in
- *inner* values = M cut1 cut2
- M = which level (1-N) to compute pair inner forces in
- cut1 = inner cutoff between pair inner and
- pair middle or outer (distance units)
- cut2 = outer cutoff between pair inner and
- pair middle or outer (distance units)
- *middle* values = M cut1 cut2
- M = which level (1-N) to compute pair middle forces in
- cut1 = inner cutoff between pair middle and pair outer (distance units)
- cut2 = outer cutoff between pair middle and pair outer (distance units)
- *outer* value = M
- M = which level (1-N) to compute pair outer forces in
- *hybrid* values = M1 M2 ... (as many values as there are hybrid sub-styles
- M1 = which level (1-N) to compute the first pair_style hybrid sub-style in
- M2 = which level (1-N) to compute the second pair_style hybrid sub-style in
- M3,etc
- *kspace* value = M
- M = which level (1-N) to compute kspace forces in
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- 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 inner 3 5.0 6.0 outer 4 kspace 4
-
-.. parsed-literal::
-
- run_style respa 3 4 2 bond 1 hybrid 2 2 1 kspace 3
-
-Description
-"""""""""""
-
-Choose the style of time integrator used for molecular dynamics
-simulations performed by LAMMPS.
-
-The *verlet* style is a standard velocity-Verlet integrator.
-
-
-----------
-
-
-The *verlet/split* style is also a velocity-Verlet integrator, but it
-splits the force calculation within each timestep over 2 partitions of
-processors. See :ref:`Section_start 6 <start_7>` for an
-explanation of the -partition command-line switch.
-
-Specifically, this style performs all computation except the
-:doc:`kspace_style <kspace_style>` portion of the force field on the 1st
-partition. This include the :doc:`pair style <pair_style>`, :doc:`bond style <bond_style>`, :doc:`neighbor list building <neighbor>`,
-:doc:`fixes <fix>` including time intergration, and output. The
-:doc:`kspace_style <kspace_style>` portion of the calculation is
-performed on the 2nd partition.
-
-This is most useful for the PPPM kspace_style when its performance on
-a large number of processors degrades due to the cost of communication
-in its 3d FFTs. In this scenario, splitting your P total processors
-into 2 subsets of processors, P1 in the 1st partition and P2 in the
-2nd partition, can enable your simulation to run faster. This is
-because the long-range forces in PPPM can be calculated at the same
-time as pair-wise and bonded forces are being calculated, and the FFTs
-can actually speed up when running on fewer processors.
-
-To use this style, you must define 2 partitions where P1 is a multiple
-of P2. Typically having P1 be 3x larger than P2 is a good choice.
-The 3d processor layouts in each partition must overlay in the
-following sense. If P1 is a Px1 by Py1 by Pz1 grid, and P2 = Px2 by
-Py2 by Pz2, then Px1 must be an integer multiple of Px2, and similarly
-for Py1 a multiple of Py2, and Pz1 a multiple of Pz2.
-
-Typically the best way to do this is to let the 1st partition choose
-its onn optimal layout, then require the 2nd partition's layout to
-match the integer multiple constraint. See the
-:doc:`processors <processors>` command with its *part* keyword for a way
-to control this, e.g.
-
-.. parsed-literal::
-
- procssors * * * part 1 2 multiple
-
-You can also use the :doc:`partition <partition>` command to explicitly
-specity the processor layout on each partition. E.g. for 2 partitions
-of 60 and 15 processors each:
-
-.. parsed-literal::
-
- partition yes 1 processors 3 4 5
- partition yes 2 processors 3 1 5
-
-When you run in 2-partition mode with the *verlet/split* style, the
-thermodyanmic data for the entire simulation will be output to the log
-and screen file of the 1st partition, which are log.lammps.0 and
-screen.0 by default; see the "-plog and -pscreen command-line
-switches"Section_start.html#start_7 to change this. The log and
-screen file for the 2nd partition will not contain thermodynamic
-output beyone the 1st timestep of the run.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-performance details of the speed-up offered by the *verlet/split*
-style. One important performance consideration is the assignemnt of
-logical processors in the 2 partitions to the physical cores of a
-parallel machine. The :doc:`processors <processors>` command has
-options to support this, and strategies are discussed in
-:doc:`Section_accelerate <Section_accelerate>` of the manual.
-
-
-----------
-
-
-The *respa* style implements the rRESPA multi-timescale integrator
-:ref:`(Tuckerman) <Tuckerman>` with N hierarchical levels, where level 1 is
-the innermost loop (shortest timestep) and level N is the outermost
-loop (largest timestep). The loop factor arguments specify what the
-looping factor is between levels. N1 specifies the number of
-iterations of level 1 for a single iteration of level 2, N2 is the
-iterations of level 2 per iteration of level 3, etc. N-1 looping
-parameters must be specified.
-
-The :doc:`timestep <timestep>` command sets the timestep for the
-outermost rRESPA level. Thus if the example command above for a
-4-level rRESPA had an outer timestep of 4.0 fmsec, the inner timestep
-would be 8x smaller or 0.5 fmsec. All other LAMMPS commands that
-specify number of timesteps (e.g. :doc:`neigh_modify <neigh_modify>`
-parameters, :doc:`dump <dump>` every N timesteps, etc) refer to the
-outermost timesteps.
-
-The rRESPA keywords enable you to specify at what level of the
-hierarchy various forces will be computed. If not specified, the
-defaults are that bond forces are computed at level 1 (innermost
-loop), angle forces are computed where bond forces are, dihedral
-forces are computed where angle forces are, improper forces are
-computed where dihedral forces are, pair forces are computed at the
-outermost level, and kspace forces are computed where pair forces are.
-The inner, middle, outer forces have no defaults.
-
-For fixes that support it, the rRESPA level at which a given fix is
-active, can be selected through the :doc:`fix_modify <fix_modify>` command.
-
-The *inner* and *middle* keywords take additional arguments for
-cutoffs that are used by the pairwise force computations. If the 2
-cutoffs for *inner* are 5.0 and 6.0, this means that all pairs up to
-6.0 apart are computed by the inner force. Those between 5.0 and 6.0
-have their force go ramped to 0.0 so the overlap with the next regime
-(middle or outer) is smooth. The next regime (middle or outer) will
-compute forces for all pairs from 5.0 outward, with those from 5.0 to
-6.0 having their value ramped in an inverse manner.
-
-Only some pair potentials support the use of the *inner* and *middle*
-and *outer* keywords. If not, only the *pair* keyword can be used
-with that pair style, meaning all pairwise forces are computed at the
-same rRESPA level. See the doc pages for individual pair styles for
-details.i
-
-Another option for using pair potentials with rRESPA is with the
-*hybrid* keyword, which requires the use of the :doc:`pair_style hybrid or hybrid/overlay <pair_hybrid>` command. In this scenario, different
-sub-styles of the hybrid pair style are evaluated at different rRESPA
-levels. This can be useful, for example, to set different timesteps
-for hybrid coarse-grained/all-atom models. The *hybrid* keyword
-requires as many level assignments as there are hybrid substyles,
-which assigns each sub-style to a rRESPA level, following their order
-of definition in the pair_style command. Since the *hybrid* keyword
-operates on pair style computations, it is mututally exclusive with
-either the *pair* or the *inner*\ /\ *middle*\ /\ *outer* keywords.
-
-When using rRESPA (or for any MD simulation) care must be taken to
-choose a timestep size(s) that insures the Hamiltonian for the chosen
-ensemble is conserved. For the constant NVE ensemble, total energy
-must be conserved. Unfortunately, it is difficult to know *a priori*
-how well energy will be conserved, and a fairly long test simulation
-(~10 ps) is usually necessary in order to verify that no long-term
-drift in energy occurs with the trial set of parameters.
-
-With that caveat, a few rules-of-thumb may be useful in selecting
-*respa* settings. The following applies mostly to biomolecular
-simulations using the CHARMM or a similar all-atom force field, but
-the concepts are adaptable to other problems. Without SHAKE, bonds
-involving hydrogen atoms exhibit high-frequency vibrations and require
-a timestep on the order of 0.5 fmsec in order to conserve energy. The
-relatively inexpensive force computations for the bonds, angles,
-impropers, and dihedrals can be computed on this innermost 0.5 fmsec
-step. The outermost timestep cannot be greater than 4.0 fmsec without
-risking energy drift. Smooth switching of forces between the levels
-of the rRESPA hierarchy is also necessary to avoid drift, and a 1-2
-angstrom "healing distance" (the distance between the outer and inner
-cutoffs) works reasonably well. We thus recommend the following
-settings for use of the *respa* style without SHAKE in biomolecular
-simulations:
-
-.. parsed-literal::
-
- timestep 4.0
- run_style respa 4 2 2 2 inner 2 4.5 6.0 middle 3 8.0 10.0 outer 4
-
-With these settings, users can expect good energy conservation and
-roughly a 2.5 fold speedup over the *verlet* style with a 0.5 fmsec
-timestep.
-
-If SHAKE is used with the *respa* style, time reversibility is lost,
-but substantially longer time steps can be achieved. For biomolecular
-simulations using the CHARMM or similar all-atom force field, bonds
-involving hydrogen atoms exhibit high frequency vibrations and require
-a time step on the order of 0.5 fmsec in order to conserve energy.
-These high frequency modes also limit the outer time step sizes since
-the modes are coupled. It is therefore desirable to use SHAKE with
-respa in order to freeze out these high frequency motions and increase
-the size of the time steps in the respa hierarchy. The following
-settings can be used for biomolecular simulations with SHAKE and
-rRESPA:
-
-.. parsed-literal::
-
- fix 2 all shake 0.000001 500 0 m 1.0 a 1
- timestep 4.0
- run_style respa 2 2 inner 1 4.0 5.0 outer 2
-
-With these settings, users can expect good energy conservation and
-roughly a 1.5 fold speedup over the *verlet* style with SHAKE and a
-2.0 fmsec timestep.
-
-For non-biomolecular simulations, the *respa* style can be
-advantageous if there is a clear separation of time scales - fast and
-slow modes in the simulation. Even a LJ system can benefit from
-rRESPA if the interactions are divided by the inner, middle and outer
-keywords. A 2-fold or more speedup can be obtained while maintaining
-good energy conservation. In real units, for a pure LJ fluid at
-liquid density, with a sigma of 3.0 angstroms, and epsilon of 0.1
-Kcal/mol, the following settings seem to work well:
-
-.. parsed-literal::
-
- timestep 36.0
- run_style respa 3 3 4 inner 1 3.0 4.0 middle 2 6.0 7.0 outer 3
-
-
-----------
-
-
-The *respa/omp* styles is a variant of *respa* adapted for use with
-pair, bond, angle, dihedral, improper, or kspace styles with an *omp*
-suffix. It is functionally equivalent to *respa* but performs additional
-operations required for managing *omp* styles. For more on *omp* styles
-see the :doc:`Section_accelerate <Section_accelerate>` of the manual.
-Accelerated styles take the same arguments and should produce the same
-results, except for round-off and precision issues.
-
-You can specify *respa/omp* explicitly in your input script, or
-you can use the :ref:`-suffix command-line switch <start_7>`
-when you invoke LAMMPS, or you can use the :doc:`suffix <suffix>`
-command in your input script.
-
-See :doc:`Section_accelerate <Section_accelerate>` of the manual for
-more instructions on how to use the accelerated styles effectively.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-The *verlet/split* style can only be used if LAMMPS was built with the
-REPLICA package. Correspondingly the *respa/omp* style is available only
-if the USER-OMP package was included. See the :ref:`Making LAMMPS <start_3>`
-section for more info on packages.
-
-Whenever using rRESPA, the user should experiment with trade-offs in
-speed and accuracy for their system, and verify that they are
-conserving energy to adequate precision.
-
-Related commands
-""""""""""""""""
-
-:doc:`timestep <timestep>`, :doc:`run <run>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- run_style verlet
-
-
-----------
-
-
-.. _Tuckerman:
-
-
-
-**(Tuckerman)** Tuckerman, Berne and Martyna, J Chem Phys, 97, p 1990
-(1992).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/set.txt b/doc/html/_sources/set.txt
deleted file mode 100644
index 92dffc024..000000000
--- a/doc/html/_sources/set.txt
+++ /dev/null
@@ -1,435 +0,0 @@
-.. index:: set
-
-set command
-===========
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- set style ID keyword values ...
-
-* style = *atom* or *type* or *mol* or *group* or *region*
-* ID = atom ID range or type range or mol ID range or group ID or region ID
-* one or more keyword/value pairs may be appended
-* keyword = *type* or *type/fraction* or *mol* or *x* or *y* or *z* or *charge* or *dipole* or *dipole/random* or *quat* or *quat/random* or *diameter* or *shape* or *length* or *tri* or *theta* or *theta/random* or *angmom* or *omega* or *mass* or *density* or *volume* or *image* or *bond* or *angle* or *dihedral* or *improper* or *meso/e* or *meso/cv* or *meso/rho* or *smd/contact/radius* or *smd/mass/density* or *dpd/theta* or *i_name* or *d_name*
-.. parsed-literal::
-
- *type* value = atom type
- value can be an atom-style variable (see below)
- *type/fraction* values = type fraction seed
- type = new atom type
- fraction = fraction of selected atoms to set to new atom type
- seed = random # seed (positive integer)
- *mol* value = molecule ID
- value can be an atom-style variable (see below)
- *x*\ ,\ *y*\ ,\ *z* value = atom coordinate (distance units)
- value can be an atom-style variable (see below)
- *charge* value = atomic charge (charge units)
- value can be an atom-style variable (see below)
- *dipole* values = x y z
- x,y,z = orientation of dipole moment vector
- any of x,y,z can be an atom-style variable (see below)
- *dipole/random* value = seed Dlen
- seed = random # seed (positive integer) for dipole moment orientations
- Dlen = magnitude of dipole moment (dipole units)
- *quat* values = a b c theta
- a,b,c = unit vector to rotate particle around via right-hand rule
- theta = rotation angle (degrees)
- any of a,b,c,theta can be an atom-style variable (see below)
- *quat/random* value = seed
- seed = random # seed (positive integer) for quaternion orientations
- *diameter* value = diameter of spherical particle (distance units)
- value can be an atom-style variable (see below)
- *shape* value = Sx Sy Sz
- Sx,Sy,Sz = 3 diameters of ellipsoid (distance units)
- *length* value = len
- len = length of line segment (distance units)
- len can be an atom-style variable (see below)
- *tri* value = side
- side = side length of equilateral triangle (distance units)
- side can be an atom-style variable (see below)
- *theta* value = angle (degrees)
- angle = orientation of line segment with respect to x-axis
- angle can be an atom-style variable (see below)
- *theta/random* value = seed
- seed = random # seed (positive integer) for line segment orienations
- *angmom* values = Lx Ly Lz
- Lx,Ly,Lz = components of angular momentum vector (distance-mass-velocity units)
- any of Lx,Ly,Lz can be an atom-style variable (see below)
- *omega* values = Wx Wy Wz
- Wx,Wy,Wz = components of angular velocity vector (radians/time units)
- any of wx,wy,wz can be an atom-style variable (see below)
- *mass* value = per-atom mass (mass units)
- value can be an atom-style variable (see below)
- *density* value = particle density for sphere or ellipsoid (mass/distance^3 or mass/distance^2 or mass/distance units, depending on dimensionality of particle)
- value can be an atom-style variable (see below)
- *volume* value = particle volume for Peridynamic particle (distance^3 units)
- value can be an atom-style variable (see below)
- *image* nx ny nz
- nx,ny,nz = which periodic image of the simulation box the atom is in
- *bond* value = bond type for all bonds between selected atoms
- *angle* value = angle type for all angles between selected atoms
- *dihedral* value = dihedral type for all dihedrals between selected atoms
- *improper* value = improper type for all impropers between selected atoms
- *meso/e* value = energy of SPH particles (need units)
- value can be an atom-style variable (see below)
- *meso/cv* value = heat capacity of SPH particles (need units)
- value can be an atom-style variable (see below)
- *meso/rho* value = density of SPH particles (need units)
- value can be an atom-style variable (see below)
- *smd/contact/radius* = radius for short range interactions, i.e. contact and friction
- value can be an atom-style variable (see below)
- *smd/mass/density* = set particle mass based on volume by providing a mass density
- value can be an atom-style variable (see below)
- *dpd/theta* value = internal temperature of DPD particles (temperature units)
- value can be an atom-style variable (see below)
- value can be NULL which sets internal temp of each particle to KE temp
- *i_name* value = value for custom integer vector with name
- *d_name* value = value for custom floating-point vector with name
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- set group solvent type 2
- set group solvent type/fraction 2 0.5 12393
- set group edge bond 4
- set region half charge 0.5
- set type 3 charge 0.5
- set type 1*3 charge 0.5
- set atom * charge v_atomfile
- set atom 100*200 x 0.5 y 1.0
- set atom 1492 type 3
-
-Description
-"""""""""""
-
-Set one or more properties of one or more atoms. Since atom
-properties are initially assigned by the :doc:`read_data <read_data>`,
-:doc:`read_restart <read_restart>` or :doc:`create_atoms <create_atoms>`
-commands, this command changes those assignments. This can be useful
-for overriding the default values assigned by the
-:doc:`create_atoms <create_atoms>` command (e.g. charge = 0.0). It can
-be useful for altering pairwise and molecular force interactions,
-since force-field coefficients are defined in terms of types. It can
-be used to change the labeling of atoms by atom type or molecule ID
-when they are output in :doc:`dump <dump>` files. It can also be useful
-for debugging purposes; i.e. positioning an atom at a precise location
-to compute subsequent forces or energy.
-
-Note that the *style* and *ID* arguments determine which atoms have
-their properties reset. The remaining keywords specify which
-properties to reset and what the new values are. Some strings like
-*type* or *mol* can be used as a style and/or a keyword.
-
-
-----------
-
-
-This section describes how to select which atoms to change
-the properties of, via the *style* and *ID* arguments.
-
-The style *atom* selects all the atoms in a range of atom IDs. The
-style *type* selects all the atoms in a range of types. The style
-*mol* selects all the atoms in a range of molecule IDs.
-
-In each of the range cases, the range can be specified as a single
-numeric value, or a wildcard asterisk can be used to specify a range
-of values. This takes the form "*" or "*n" or "n*" or "m*n". For
-example, for the style *type*\ , if N = the number of atom types, then
-an asterisk with no numeric values means all types from 1 to N. A
-leading asterisk means all types from 1 to n (inclusive). A trailing
-asterisk means all types from n to N (inclusive). A middle asterisk
-means all types from m to n (inclusive). For all the styles except
-*mol*\ , the lowest value for the wildcard is 1; for *mol* it is 0.
-
-The style *group* selects all the atoms in the specified group. The
-style *region* selects all the atoms in the specified geometric
-region. See the :doc:`group <group>` and :doc:`region <region>` commands
-for details of how to specify a group or region.
-
-
-----------
-
-
-This section describes the keyword options for which properties to
-change, for the selected atoms.
-
-Note that except where explicitly prohibited below, all of the
-keywords allow an :doc:`atom-style or atomfile-style variable <variable>` to be used as the specified value(s). If the
-value is a variable, it should be specified as v_name, where name is
-the variable name. In this case, the variable will be evaluated, and
-its resulting per-atom value used to determine the value assigned to
-each selected atom. Note that the per-atom value from the variable
-will be ignored for atoms that are not selected via the *style* and
-*ID* settings explained above. A simple way to use per-atom values
-from the variable to reset a property for all atoms is to use style
-*atom* with *ID* = "*"; this selects all atom IDs.
-
-Atom-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters and timestep and elapsed
-time. They can also include per-atom values, such as atom
-coordinates. Thus it is easy to specify a time-dependent or
-spatially-dependent set of per-atom values. As explained on the
-:doc:`variable <variable>` doc page, atomfile-style variables can be
-used in place of atom-style variables, and thus as arguments to the
-set command. Atomfile-style variables read their per-atoms values
-from a file.
-
-.. note::
-
- Atom-style and atomfile-style variables return floating point
- per-atom values. If the values are assigned to an integer variable,
- such as the molecule ID, then the floating point value is truncated to
- its integer portion, e.g. a value of 2.6 would become 2.
-
-Keyword *type* sets the atom type for all selected atoms. The
-specified value must be from 1 to ntypes, where ntypes was set by the
-:doc:`create_box <create_box>` command or the *atom types* field in the
-header of the data file read by the :doc:`read_data <read_data>`
-command.
-
-Keyword *type/fraction* sets the atom type for a fraction of the
-selected atoms. The actual number of atoms changed is not guaranteed
-to be exactly the requested fraction, but should be statistically
-close. Random numbers are used in such a way that a particular atom
-is changed or not changed, regardless of how many processors are being
-used. This keyword does not allow use of an atom-style variable.
-
-Keyword *mol* sets the molecule ID for all selected atoms. The :doc:`atom style <atom_style>` being used must support the use of molecule
-IDs.
-
-Keywords *x*\ , *y*\ , *z*\ , and *charge* set the coordinates or charge of
-all selected atoms. For *charge*\ , the :doc:`atom style <atom_style>`
-being used must support the use of atomic charge.
-
-Keyword *dipole* uses the specified x,y,z values as components of a
-vector to set as the orientation of the dipole moment vectors of the
-selected atoms. The magnitude of the dipole moment is set
-by the length of this orientation vector.
-
-Keyword *dipole/random* randomizes the orientation of the dipole
-moment vectors for the selected atoms and sets the magnitude of each
-to the specified *Dlen* value. For 2d systems, the z component of the
-orientation is set to 0.0. Random numbers are used in such a way that
-the orientation of a particular atom is the same, regardless of how
-many processors are being used. This keyword does not allow use of an
-atom-style variable.
-
-Keyword *quat* uses the specified values to create a quaternion
-(4-vector) that represents the orientation of the selected atoms. The
-particles must define a quaternion for their orientation
-(e.g. ellipsoids, triangles, body particles) as defined by the
-:doc:`atom_style <atom_style>` command. Note that particles defined by
-:doc:`atom_style ellipsoid <atom_style>` have 3 shape parameters. The 3
-values must be non-zero for each particle set by this command. They
-are used to specify the aspect ratios of an ellipsoidal particle,
-which is oriented by default with its x-axis along the simulation
-box's x-axis, and similarly for y and z. If this body is rotated (via
-the right-hand rule) by an angle theta around a unit rotation vector
-(a,b,c), then the quaternion that represents its new orientation is
-given by (cos(theta/2), a*sin(theta/2), b*sin(theta/2),
-c*sin(theta/2)). The theta and a,b,c values are the arguments to the
-*quat* keyword. LAMMPS normalizes the quaternion in case (a,b,c) was
-not specified as a unit vector. For 2d systems, the a,b,c values are
-ignored, since a rotation vector of (0,0,1) is the only valid choice.
-
-Keyword *quat/random* randomizes the orientation of the quaternion for
-the selected atoms. The particles must define a quaternion for their
-orientation (e.g. ellipsoids, triangles, body particles) as defined by
-the :doc:`atom_style <atom_style>` command. Random numbers are used in
-such a way that the orientation of a particular atom is the same,
-regardless of how many processors are being used. For 2d systems,
-only orientations in the xy plane are generated. As with keyword
-*quat*\ , for ellipsoidal particles, the 3 shape values must be non-zero
-for each particle set by this command. This keyword does not allow
-use of an atom-style variable.
-
-Keyword *diameter* sets the size of the selected atoms. The particles
-must be finite-size spheres as defined by the :doc:`atom_style sphere <atom_style>` command. The diameter of a particle can be
-set to 0.0, which means they will be treated as point particles. Note
-that this command does not adjust the particle mass, even if it was
-defined with a density, e.g. via the :doc:`read_data <read_data>`
-command.
-
-Keyword *shape* sets the size and shape of the selected atoms. The
-particles must be ellipsoids as defined by the :doc:`atom_style ellipsoid <atom_style>` command. The *Sx*\ , *Sy*\ , *Sz* settings are
-the 3 diameters of the ellipsoid in each direction. All 3 can be set
-to the same value, which means the ellipsoid is effectively a sphere.
-They can also all be set to 0.0 which means the particle will be
-treated as a point particle. Note that this command does not adjust
-the particle mass, even if it was defined with a density, e.g. via the
-:doc:`read_data <read_data>` command.
-
-Keyword *length* sets the length of selected atoms. The particles
-must be line segments as defined by the :doc:`atom_style line <atom_style>` command. If the specified value is non-zero the
-line segment is (re)set to a length = the specified value, centered
-around the particle position, with an orientation along the x-axis.
-If the specified value is 0.0, the particle will become a point
-particle. Note that this command does not adjust the particle mass,
-even if it was defined with a density, e.g. via the
-:doc:`read_data <read_data>` command.
-
-Keyword *tri* sets the size of selected atoms. The particles must be
-triangles as defined by the :doc:`atom_style tri <atom_style>` command.
-If the specified value is non-zero the triangle is (re)set to be an
-equilateral triangle in the xy plane with side length = the specified
-value, with a centroid at the particle position, with its base
-parallel to the x axis, and the y-axis running from the center of the
-base to the top point of the triangle. If the specified value is 0.0,
-the particle will become a point particle. Note that this command
-does not adjust the particle mass, even if it was defined with a
-density, e.g. via the :doc:`read_data <read_data>` command.
-
-Keyword *theta* sets the orientation of selected atoms. The particles
-must be line segments as defined by the :doc:`atom_style line <atom_style>` command. The specified value is used to set the
-orientation angle of the line segments with respect to the x axis.
-
-Keyword *theta/random* randomizes the orientation of theta for the
-selected atoms. The particles must be line segments as defined by the
-:doc:`atom_style line <atom_style>` command. Random numbers are used in
-such a way that the orientation of a particular atom is the same,
-regardless of how many processors are being used. This keyword does
-not allow use of an atom-style variable.
-
-Keyword *angmom* sets the angular momentum of selected atoms. The
-particles must be ellipsoids as defined by the :doc:`atom_style ellipsoid <atom_style>` command or triangles as defined by the
-:doc:`atom_style tri <atom_style>` command. The angular momentum vector
-of the particles is set to the 3 specified components.
-
-Keyword *omega* sets the angular velocity of selected atoms. The
-particles must be spheres as defined by the "atom_style sphere"_
-atom_style.html command. The angular velocity vector of the particles
-is set to the 3 specified components.
-
-Keyword *mass* sets the mass of all selected particles. The particles
-must have a per-atom mass attribute, as defined by the
-:doc:`atom_style <atom_style>` command. See the "mass" command for how
-to set mass values on a per-type basis.
-
-Keyword *density* also sets the mass of all selected particles, but in
-a different way. The particles must have a per-atom mass attribute,
-as defined by the :doc:`atom_style <atom_style>` command. If the atom
-has a radius attribute (see :doc:`atom_style sphere <atom_style>`) and
-its radius is non-zero, its mass is set from the density and particle
-volume. If the atom has a shape attribute (see :doc:`atom_style ellipsoid <atom_style>`) and its 3 shape parameters are non-zero,
-then its mass is set from the density and particle volume. If the
-atom has a length attribute (see :doc:`atom_style line <atom_style>`)
-and its length is non-zero, then its mass is set from the density and
-line segment length (the input density is assumed to be in
-mass/distance units). If the atom has an area attribute (see
-:doc:`atom_style tri <atom_style>`) and its area is non-zero, then its
-mass is set from the density and triangle area (the input density is
-assumed to be in mass/distance^2 units). If none of these cases are
-valid, then the mass is set to the density value directly (the input
-density is assumed to be in mass units).
-
-Keyword *volume* sets the volume of all selected particles.
-Currently, only the :doc:`atom_style peri <atom_style>` command defines
-particles with a volume attribute. Note that this command does not
-adjust the particle mass.
-
-Keyword *image* sets which image of the simulation box the atom is
-considered to be in. An image of 0 means it is inside the box as
-defined. A value of 2 means add 2 box lengths to get the true value.
-A value of -1 means subtract 1 box length to get the true value.
-LAMMPS updates these flags as atoms cross periodic boundaries during
-the simulation. The flags can be output with atom snapshots via the
-:doc:`dump <dump>` command. If a value of NULL is specified for any of
-nx,ny,nz, then the current image value for that dimension is
-unchanged. For non-periodic dimensions only a value of 0 can be
-specified. This keyword does not allow use of atom-style variables.
-This command can be useful after a system has been equilibrated and
-atoms have diffused one or more box lengths in various directions.
-This command can then reset the image values for atoms so that they
-are effectively inside the simulation box, e.g if a diffusion
-coefficient is about to be measured via the :doc:`compute msd <compute_msd>` command. Care should be taken not to reset the
-image flags of two atoms in a bond to the same value if the bond
-straddles a periodic boundary (rather they should be different by +/-
-1). This will not affect the dynamics of a simulation, but may mess
-up analysis of the trajectories if a LAMMPS diagnostic or your own
-analysis relies on the image flags to unwrap a molecule which
-straddles the periodic box.
-
-Keywords *bond*\ , *angle*\ , *dihedral*\ , and *improper*\ , set the bond
-type (angle type, etc) of all bonds (angles, etc) of selected atoms to
-the specified value from 1 to nbondtypes (nangletypes, etc). All
-atoms in a particular bond (angle, etc) must be selected atoms in
-order for the change to be made. The value of nbondtype (nangletypes,
-etc) was set by the *bond types* (\ *angle types*\ , etc) field in the
-header of the data file read by the :doc:`read_data <read_data>`
-command. These keywords do not allow use of an atom-style variable.
-
-Keywords *meso/e*\ , *meso/cv*\ , and *meso/rho* set the energy, heat
-capacity, and density of smmothed particle hydrodynamics (SPH)
-particles. See `this PDF guide <USER/sph/SPH_LAMMPS_userguide.pdf>`_ to
-using SPH in LAMMPS.
-
-Keyword *smd/mass/density* sets the mass of all selected particles,
-but it is only applicable to the Smooth Mach Dynamics package
-USER-SMD. It assumes that the particle volume has already been
-correctly set and calculates particle mass from the provided mass
-density value.
-
-Keyword *smd/contact/radius* only applies to simulations with the
-Smooth Mach Dynamics package USER-SMD. Itsets an interaction radius
-for computing short-range interactions, e.g. repulsive forces to
-prevent different individual physical bodies from penetrating each
-other. Note that the SPH smoothing kernel diameter used for computing
-long range, nonlocal interactions, is set using the *diameter*
-keyword.
-
-Keyword *dpd/theta* sets the internal temperature of a DPD particle as
-defined by the USER-DPD package. If the specified value is a number
-it must be >= 0.0. If the specified value is NULL, then the kinetic
-temperature Tkin of each particle is computed as 3/2 k Tkin = KE = 1/2
-m v^2 = 1/2 m (vx*vx+vy*vy+vz*vz). Each particle's internal
-temperature is set to Tkin. If the specified value is an atom-style
-variable, then the variable is evaluated for each particle. If a
-value >= 0.0, the internal temperature is set to that value. If it is
-< 0.0, the computation of Tkin is performed and the internal
-temperature is set to that value.
-
-Keywords *i_name* and *d_name* refer to custom integer and
-floating-point properties that have been added to each atom via the
-:doc:`fix property/atom <fix_property_atom>` command. When that command
-is used specific names are given to each attribute which are what is
-specified as the "name" portion of *i_name* or *d_name*\ .
-
-Restrictions
-""""""""""""
-
-
-You cannot set an atom attribute (e.g. *mol* or *q* or *volume*\ ) if
-the :doc:`atom_style <atom_style>` does not have that attribute.
-
-This command requires inter-processor communication to coordinate the
-setting of bond types (angle types, etc). This means that your system
-must be ready to perform a simulation before using one of these
-keywords (force fields set, atom mass set, etc). This is not
-necessary for other keywords.
-
-Using the *region* style with the bond (angle, etc) keywords can give
-unpredictable results if there are bonds (angles, etc) that straddle
-periodic boundaries. This is because the region may only extend up to
-the boundary and partner atoms in the bond (angle, etc) may have
-coordinates outside the simulation box if they are ghost atoms.
-
-Related commands
-""""""""""""""""
-
-:doc:`create_box <create_box>`, :doc:`create_atoms <create_atoms>`,
-:doc:`read_data <read_data>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/shell.txt b/doc/html/_sources/shell.txt
deleted file mode 100644
index a4a911be1..000000000
--- a/doc/html/_sources/shell.txt
+++ /dev/null
@@ -1,123 +0,0 @@
-.. index:: shell
-
-shell command
-=============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- shell cmd args
-
-* cmd = *cd* or *mkdir* or *mv* or *rm* or *rmdir* or *putenv* or arbitrary command
-.. parsed-literal::
-
- *cd* arg = dir
- dir = directory to change to
- *mkdir* args = dir1 dir2 ...
- dir1,dir2 = one or more directories to create
- *mv* args = old new
- old = old filename
- new = new filename
- *rm* args = file1 file2 ...
- file1,file2 = one or more filenames to delete
- *rmdir* args = dir1 dir2 ...
- dir1,dir2 = one or more directories to delete
- *putenv* args = var1=value1 var2=value2
- var=value = one of more definitions of environment variables
- anything else is passed as a command to the shell for direct execution
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- shell cd sub1
- shell cd ..
- shell mkdir tmp1 tmp2 tmp3
- shell rmdir tmp1
- shell mv log.lammps hold/log.1
- shell rm TMP/file1 TMP/file2
- shell putenv LAMMPS_POTENTIALS=../../potentials
- shell my_setup file1 10 file2
- shell my_post_process 100 dump.out
-
-Description
-"""""""""""
-
-Execute a shell command. A few simple file-based shell commands are
-supported directly, in Unix-style syntax. Any command not listed
-above is passed as-is to the C-library system() call, which invokes
-the command in a shell.
-
-This is means to invoke other commands from your input script. For
-example, you can move files around in preparation for the next section
-of the input script. Or you can run a program that pre-processes data
-for input into LAMMPS. Or you can run a program that post-processes
-LAMMPS output data.
-
-With the exception of *cd*\ , all commands, including ones invoked via a
-system() call, are executed by only a single processor, so that
-files/directories are not being manipulated by multiple processors.
-
-The *cd* cmd executes the Unix "cd" command to change the working
-directory. All subsequent LAMMPS commands that read/write files will
-use the new directory. All processors execute this command.
-
-The *mkdir* cmd executes the Unix "mkdir" command to create one or
-more directories.
-
-The *mv* cmd executes the Unix "mv" command to rename a file and/or
-move it to a new directory.
-
-The *rm* cmd executes the Unix "rm" command to remove one or more
-files.
-
-The *rmdir* cmd executes the Unix "rmdir" command to remove one or
-more directories. A directory must be empty to be successfully
-removed.
-
-The *putenv* cmd defines or updates an environment variable directly.
-Since this command does not pass through the shell, no shell variable
-expansion or globbing is performed, only the usual substitution for
-LAMMPS variables defined with the :doc:`variable <variable>` command is
-performed. The resulting string is then used literally.
-
-Any other cmd is passed as-is to the shell along with its arguments as
-one string, invoked by the C-library system() call. For example,
-these lines in your input script:
-
-.. parsed-literal::
-
- variable n equal 10
- variable foo string file2
- shell my_setup file1 $n ${foo}
-
-would be the same as invoking
-
-.. parsed-literal::
-
- % my_setup file1 10 file2
-
-from a command-line prompt. The executable program "my_setup" is run
-with 3 arguments: file1 10 file2.
-
-Restrictions
-""""""""""""
-
-
-LAMMPS does not detect errors or print warnings when any of these
-commands execute. E.g. if the specified directory does not exist,
-executing the *cd* command will silently do nothing.
-
-**Related commands:** none
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/special_bonds.txt b/doc/html/_sources/special_bonds.txt
deleted file mode 100644
index 512e6a556..000000000
--- a/doc/html/_sources/special_bonds.txt
+++ /dev/null
@@ -1,305 +0,0 @@
-.. index:: special_bonds
-
-special_bonds command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- special_bonds keyword values ...
-
-* one or more keyword/value pairs may be appended
-* keyword = *amber* or *charmm* or *dreiding* or *fene* or *lj/coul* or *lj* or *coul* or *angle* or *dihedral* or *extra*
-.. parsed-literal::
-
- *amber* values = none
- *charmm* values = none
- *dreiding* values = none
- *fene* values = none
- *lj/coul* values = w1,w2,w3
- w1,w2,w3 = weights (0.0 to 1.0) on pairwise Lennard-Jones and Coulombic interactions
- *lj* values = w1,w2,w3
- w1,w2,w3 = weights (0.0 to 1.0) on pairwise Lennard-Jones interactions
- *coul* values = w1,w2,w3
- w1,w2,w3 = weights (0.0 to 1.0) on pairwise Coulombic interactions
- *angle* value = *yes* or *no*
- *dihedral* value = *yes* or *no*
- *extra* value = N
- N = number of extra 1-2,1-3,1-4 interactions to save space for
-
-
-
-Examples:
-
-.. parsed-literal::
-
- special_bonds amber
- special_bonds charmm
- special_bonds fene dihedral no
- special_bonds lj/coul 0.0 0.0 0.5 angle yes dihedral yes
- special_bonds lj 0.0 0.0 0.5 coul 0.0 0.0 0.0 dihedral yes
- special_bonds lj/coul 0 1 1 extra 2
-
-Description
-"""""""""""
-
-Set weighting coefficients for pairwise energy and force contributions
-between pairs of atoms that are also permanently bonded to each other,
-either directly or via one or two intermediate bonds. These weighting
-factors are used by nearly all :doc:`pair styles <pair_style>` in LAMMPS
-that compute simple pairwise interactions. Permanent bonds between
-atoms are specified by defining the bond topology in the data file
-read by the :doc:`read_data <read_data>` command. Typically a
-:doc:`bond_style <bond_style>` command is also used to define a bond
-potential. The rationale for using these weighting factors is that
-the interaction between a pair of bonded atoms is all (or mostly)
-specified by the bond, angle, dihedral potentials, and thus the
-non-bonded Lennard-Jones or Coulombic interaction between the pair of
-atoms should be excluded (or reduced by a weighting factor).
-
-.. note::
-
- These weighting factors are NOT used by :doc:`pair styles <pair_style>` that compute many-body interactions, since the
- "bonds" that result from such interactions are not permanent, but are
- created and broken dynamically as atom conformations change. Examples
- of pair styles in this category are EAM, MEAM, Stillinger-Weber,
- Tersoff, COMB, AIREBO, and ReaxFF. In fact, it generally makes no
- sense to define permanent bonds between atoms that interact via these
- potentials, though such bonds may exist elsewhere in your system,
- e.g. when using the :doc:`pair_style hybrid <pair_hybrid>` command.
- Thus LAMMPS ignores special_bonds settings when manybody potentials
- are calculated.
-
-.. note::
-
- Unlike some commands in LAMMPS, you cannot use this command
- multiple times in an incremental fashion: e.g. to first set the LJ
- settings and then the Coulombic ones. Each time you use this command
- it sets all the coefficients to default values and only overrides the
- one you specify, so you should set all the options you need each time
- you use it. See more details at the bottom of this page.
-
-The Coulomb factors are applied to any Coulomb (charge interaction)
-term that the potential calculates. The LJ factors are applied to the
-remaining terms that the potential calculates, whether they represent
-LJ interactions or not. The weighting factors are a scaling
-pre-factor on the energy and force between the pair of atoms. A value
-of 1.0 means include the full interaction; a value of 0.0 means
-exclude it completely.
-
-The 1st of the 3 coefficients (LJ or Coulombic) is the weighting
-factor on 1-2 atom pairs, which are pairs of atoms directly bonded to
-each other. The 2nd coefficient is the weighting factor on 1-3 atom
-pairs which are those separated by 2 bonds (e.g. the two H atoms in a
-water molecule). The 3rd coefficient is the weighting factor on 1-4
-atom pairs which are those separated by 3 bonds (e.g. the 1st and 4th
-atoms in a dihedral interaction). Thus if the 1-2 coefficient is set
-to 0.0, then the pairwise interaction is effectively turned off for
-all pairs of atoms bonded to each other. If it is set to 1.0, then
-that interaction will be at full strength.
-
-.. note::
-
- For purposes of computing weighted pairwise interactions, 1-3
- and 1-4 interactions are not defined from the list of angles or
- dihedrals used by the simulation. Rather, they are inferred
- topologically from the set of bonds specified when the simulation is
- defined from a data or restart file (see :doc:`read_data <read_data>` or
- :doc:`read_restart <read_restart>` commands). Thus the set of
- 1-2,1-3,1-4 interactions that the weights apply to is the same whether
- angle and dihedral potentials are computed or not, and remains the
- same even if bonds are constrained, or turned off, or removed during a
- simulation.
-
-The two exceptions to this rule are (a) if the *angle* or *dihedral*
-keywords are set to *yes* (see below), or (b) if the
-:doc:`delete_bonds <delete_bonds>` command is used with the *special*
-option that recomputes the 1-2,1-3,1-4 topologies after bonds are
-deleted; see the :doc:`delete_bonds <delete_bonds>` command for more
-details.
-
-The *amber* keyword sets the 3 coefficients to 0.0, 0.0, 0.5 for LJ
-interactions and to 0.0, 0.0, 0.8333 for Coulombic interactions, which
-is the default for a commonly used version of the AMBER force field,
-where the last value is really 5/6. See :ref:`(Cornell) <Cornell>` for a
-description of the AMBER force field.
-
-The *charmm* keyword sets the 3 coefficients to 0.0, 0.0, 0.0 for both
-LJ and Coulombic interactions, which is the default for a commonly
-used version of the CHARMM force field. Note that in pair styles
-*lj/charmm/coul/charmm* and *lj/charmm/coul/long* the 1-4 coefficients
-are defined explicitly, and these pairwise contributions are computed
-as part of the charmm dihedral style - see the
-:doc:`pair_coeff <pair_coeff>` and :doc:`dihedral_style <dihedral_style>`
-commands for more information. See :ref:`(MacKerell) <MacKerell>` for a
-description of the CHARMM force field.
-
-The *dreiding* keyword sets the 3 coefficients to 0.0, 0.0, 1.0 for both
-LJ and Coulombic interactions, which is the default for the Dreiding
-force field, as discussed in :ref:`(Mayo) <Mayo>`.
-
-The *fene* keyword sets the 3 coefficients to 0.0, 1.0, 1.0 for both
-LJ and Coulombic interactions, which is consistent with a
-coarse-grained polymer model with :doc:`FENE bonds <bond_fene>`. See
-:ref:`(Kremer) <Kremer>` for a description of FENE bonds.
-
-The *lj/coul*\ , *lj*\ , and *coul* keywords allow the 3 coefficients to
-be set explicitly. The *lj/coul* keyword sets both the LJ and
-Coulombic coefficients to the same 3 values. The *lj* and *coul*
-keywords only set either the LJ or Coulombic coefficients. Use both
-of them if you wish to set the LJ coefficients to different values
-than the Coulombic coefficients.
-
-The *angle* keyword allows the 1-3 weighting factor to be ignored for
-individual atom pairs if they are not listed as the first and last
-atoms in any angle defined in the simulation or as 1,3 or 2,4 atoms in
-any dihedral defined in the simulation. For example, imagine the 1-3
-weighting factor is set to 0.5 and you have a linear molecule with 4
-atoms and bonds as follows: 1-2-3-4. If your data file defines 1-2-3
-as an angle, but does not define 2-3-4 as an angle or 1-2-3-4 as a
-dihedral, then the pairwise interaction between atoms 1 and 3 will
-always be weighted by 0.5, but different force fields use different
-rules for weighting the pairwise interaction between atoms 2 and 4.
-If the *angle* keyword is specified as *yes*\ , then the pairwise
-interaction between atoms 2 and 4 will be unaffected (full weighting
-of 1.0). If the *angle* keyword is specified as *no* which is the
-default, then the 2,4 interaction will also be weighted by 0.5.
-
-The *dihedral* keyword allows the 1-4 weighting factor to be ignored
-for individual atom pairs if they are not listed as the first and last
-atoms in any dihedral defined in the simulation. For example, imagine
-the 1-4 weighting factor is set to 0.5 and you have a linear molecule
-with 5 atoms and bonds as follows: 1-2-3-4-5. If your data file
-defines 1-2-3-4 as a dihedral, but does not define 2-3-4-5 as a
-dihedral, then the pairwise interaction between atoms 1 and 4 will
-always be weighted by 0.5, but different force fields use different
-rules for weighting the pairwise interaction between atoms 2 and 5.
-If the *dihedral* keyword is specified as *yes*\ , then the pairwise
-interaction between atoms 2 and 5 will be unaffected (full weighting
-of 1.0). If the *dihedral* keyword is specified as *no* which is the
-default, then the 2,5 interaction will also be weighted by 0.5.
-
-The *extra* keyword can be used when additional bonds will be created
-during a simulation run, e.g. by the :doc:`fix bond/create <fix_bond_create>` command. It can also be used if
-molecules will be added to the system, e.g. via the :doc:`fix deposit <fix_deposit>`, or :doc:`fix pour <fix_pour>` commands, which
-will have atoms with more special neighbors than any atom in the
-current system has.
-
-
-----------
-
-
-.. note::
-
- LAMMPS stores and maintains a data structure with a list of the
- 1st, 2nd, and 3rd neighbors of each atom (within the bond topology of
- the system). If new bonds are created (or molecules added containing
- atoms with more special neighbors), the size of this list needs to
- grow. Note that adding a single bond always adds a new 1st neighbor
- but may also induce *many* new 2nd and 3rd neighbors, depending on the
- molecular topology of your system. Using the *extra* keyword leaves
- empty space in the list for this N additional 1st, 2nd, or 3rd
- neighbors to be added. If you do not do this, you may get an error
- when bonds (or molecules) are added.
-
-
-----------
-
-
-.. note::
-
- If you reuse this command in an input script, you should set all
- the options you need each time. This command cannot be used a 2nd
- time incrementally, e.g. to add some extra storage locations via the
- *extra* keyword. E.g. these two commands:
-
-special_bonds lj 0.0 1.0 1.0
-special_bonds coul 0.0 0.0 1.0
-
-are not the same as
-
-special_bonds lj 0.0 1.0 1.0 coul 0.0 0.0 1.0
-
-In the first case you end up with (after the 2nd command):
-
-LJ: 0.0 0.0 0.0
-Coul: coul 0.0 0.0 1.0
-
-because the LJ settings are reset to their default values
-each time the command is issued.
-
-Likewise
-
-.. parsed-literal::
-
- special_bonds amber
- special_bonds extra 2
-
-is not the same as this single command:
-
-.. parsed-literal::
-
- special_bonds amber extra 2
-
-since in the former case, the 2nd command will reset all the LJ and
-Coulombic weights to 0.0 (the default).
-
-One exception to this rule is the *extra* option itself. It is not
-reset to its default value of 0 each time the special_bonds command is
-invoked. This is because it can also be set by the
-:doc:`read_data <read_data>` and :doc:`create_box <create_box>` commands,
-so this command will not override those settings unless you explicitly
-use *extra* as an option.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`delete_bonds <delete_bonds>`, :doc:`fix bond/create <fix_bond_create>`
-
-Default
-"""""""
-
-All 3 Lennard-Jones and 3 Coulombic weighting coefficients = 0.0,
-angle = no, dihedral = no, and extra = 0.
-
-
-----------
-
-
-.. _Cornell:
-
-
-
-**(Cornell)** Cornell, Cieplak, Bayly, Gould, Merz, Ferguson,
-Spellmeyer, Fox, Caldwell, Kollman, JACS 117, 5179-5197 (1995).
-
-.. _Kremer:
-
-
-
-**(Kremer)** Kremer, Grest, J Chem Phys, 92, 5057 (1990).
-
-.. _MacKerell:
-
-
-
-**(MacKerell)** MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field,
-Fischer, Gao, Guo, Ha, et al, J Phys Chem, 102, 3586 (1998).
-
-.. _Mayo:
-
-
-
-**(Mayo)** Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909
-(1990).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/suffix.txt b/doc/html/_sources/suffix.txt
deleted file mode 100644
index 2e407852e..000000000
--- a/doc/html/_sources/suffix.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-.. index:: suffix
-
-suffix command
-==============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- suffix style args
-
-* style = *off* or *on* or *gpu* or *intel* or *kk* or *omp* or *opt* or *hybrid*
-* args = for hybrid style, default suffix to be used and alternative suffix
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- suffix off
- suffix on
- suffix gpu
- suffix intel
- suffix hybrid intel omp
- suffix kk
-
-Description
-"""""""""""
-
-This command allows you to use variants of various styles if they
-exist. In that respect it operates the same as the :ref:`-suffix command-line switch <start_7>`. It also has options
-to turn off or back on any suffix setting made via the command line.
-
-The specified style can be *gpu*\ , *intel*\ , *kk*\ , *omp*\ , *opt* or
-*hybrid*\ . These refer to optional packages that LAMMPS can be built
-with, as described in :ref:`this section of the manual <start_3>`. The "gpu" style corresponds to
-the GPU package, the "intel" style to the USER-INTEL package, the "kk"
-style to the KOKKOS package, the "omp" style to the USER-OMP package,
-and the "opt" style to the OPT package.
-
-These are the variants these packages provide:
-
-* GPU = a handful of pair styles and the PPPM kspace_style, optimized to
- run on one or more GPUs or multicore CPU/GPU nodes
-* USER-INTEL = a collection of pair styles and neighbor routines
- optimized to run in single, mixed, or double precision on CPUs and
- Intel(R) Xeon Phi(TM) coprocessors.
-* KOKKOS = a collection of atom, pair, and fix styles optimized to run
- using the Kokkos library on various kinds of hardware, including GPUs
- via Cuda and many-core chips via OpenMP or threading.
-* USER-OMP = a collection of pair, bond, angle, dihedral, improper,
- kspace, compute, and fix styles with support for OpenMP
- multi-threading
-* OPT = a handful of pair styles, cache-optimized for faster CPU
- performance
-* HYBRID = a combination of two packages can be specified (see below)
-
-As an example, all of the packages provide a :doc:`pair_style lj/cut <pair_lj>` variant, with style names lj/cut/opt, lj/cut/omp,
-lj/cut/gpu, lj/cut/intel, or lj/cut/kk. A variant styles
-can be specified explicitly in your input script, e.g. pair_style
-lj/cut/gpu. If the suffix command is used with the appropriate style,
-you do not need to modify your input script. The specified suffix
-(opt,omp,gpu,intel,kk) is automatically appended whenever your
-input script command creates a new :doc:`atom <atom_style>`,
-:doc:`pair <pair_style>`, :doc:`bond <bond_style>`,
-:doc:`angle <angle_style>`, :doc:`dihedral <dihedral_style>`,
-:doc:`improper <improper_style>`, :doc:`kspace <kspace_style>`,
-:doc:`fix <fix>`, :doc:`compute <compute>`, or :doc:`run <run_style>` style.
-If the variant version does not exist, the standard version is
-created.
-
-For "hybrid", two packages are specified. The first is used whenever
-available. If a style with the first suffix is not available, the style
-with the suffix for the second package will be used if available. For
-example, "hybrid intel omp" will use styles from the USER-INTEL package
-as a first choice and styles from the USER-OMP package as a second choice
-if no USER-INTEL variant is available.
-
-If the specified style is *off*\ , then any previously specified suffix
-is temporarily disabled, whether it was specified by a command-line
-switch or a previous suffix command. If the specified style is *on*\ ,
-a disabled suffix is turned back on. The use of these 2 commands lets
-your input script use a standard LAMMPS style (i.e. a non-accelerated
-variant), which can be useful for testing or benchmarking purposes.
-Of course this is also possible by not using any suffix commands, and
-explictly appending or not appending the suffix to the relevant
-commands in your input script.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:ref:`Command-line switch -suffix <start_7>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/tad.txt b/doc/html/_sources/tad.txt
deleted file mode 100644
index 2d028b693..000000000
--- a/doc/html/_sources/tad.txt
+++ /dev/null
@@ -1,335 +0,0 @@
-.. index:: tad
-
-tad command
-===========
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- tad N t_event T_lo T_hi delta tmax compute-ID keyword value ...
-
-* N = # of timesteps to run (not including dephasing/quenching)
-* t_event = timestep interval between event checks
-* T_lo = temperature at which event times are desired
-* T_hi = temperature at which MD simulation is performed
-* delta = desired confidence level for stopping criterion
-* tmax = reciprocal of lowest expected preexponential factor (time units)
-* compute-ID = ID of the compute used for event detection
-* zero or more keyword/value pairs may be appended
-* keyword = *min* or *neb* or *min_style* or *neb_style* or *neb_log*
-.. parsed-literal::
-
- *min* values = etol ftol maxiter maxeval
- etol = stopping tolerance for energy (energy units)
- ftol = stopping tolerance for force (force units)
- maxiter = max iterations of minimize
- maxeval = max number of force/energy evaluations
- *neb* values = ftol N1 N2 Nevery
- etol = stopping tolerance for energy (energy units)
- ftol = stopping tolerance for force (force units)
- N1 = max # of iterations (timesteps) to run initial NEB
- N2 = max # of iterations (timesteps) to run barrier-climbing NEB
- Nevery = print NEB statistics every this many timesteps
- *neb_style* value = *quickmin* or *fire*
- *neb_step* value = dtneb
- dtneb = timestep for NEB damped dynamics minimization
- *neb_log* value = file where NEB statistics are printed
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- tad 2000 50 1800 2300 0.01 0.01 event
- tad 2000 50 1800 2300 0.01 0.01 event &
- min 1e-05 1e-05 100 100 &
- neb 0.0 0.01 200 200 20 &
- min_style cg &
- neb_style fire &
- neb_log log.neb
-
-Description
-"""""""""""
-
-Run a temperature accelerated dynamics (TAD) simulation. This method
-requires two or more partitions to perform NEB transition state
-searches.
-
-TAD is described in :ref:`this paper <Voter>` by Art Voter. It is a method
-that uses accelerated dynamics at an elevated temperature to generate
-results at a specified lower temperature. A good overview of
-accelerated dynamics methods for such systems is given in :ref:`this review paper <Voter2>` from the same group. In general, these methods assume
-that the long-time dynamics is dominated by infrequent events i.e. the
-system is is confined to low energy basins for long periods,
-punctuated by brief, randomly-occurring transitions to adjacent
-basins. TAD is suitable for infrequent-event systems, where in
-addition, the transition kinetics are well-approximated by harmonic
-transition state theory (hTST). In hTST, the temperature dependence of
-transition rates follows the Arrhenius relation. As a consequence a
-set of event times generated in a high-temperature simulation can be
-mapped to a set of much longer estimated times in the low-temperature
-system. However, because this mapping involves the energy barrier of
-the transition event, which is different for each event, the first
-event at the high temperature may not be the earliest event at the low
-temperature. TAD handles this by first generating a set of possible
-events from the current basin. After each event, the simulation is
-reflected backwards into the current basin. This is repeated until
-the stopping criterion is satisfied, at which point the event with the
-earliest low-temperature occurrence time is selected. The stopping
-criterion is that the confidence measure be greater than
-1-\ *delta*\ . The confidence measure is the probability that no earlier
-low-temperature event will occur at some later time in the
-high-temperature simulation. hTST provides an lower bound for this
-probability, based on the user-specified minimum pre-exponential
-factor (reciprocal of *tmax*\ ).
-
-In order to estimate the energy barrier for each event, the TAD method
-invokes the :doc:`NEB <neb>` method. Each NEB replica runs on a
-partition of processors. The current NEB implementation in LAMMPS
-restricts you to having exactly one processor per replica. For more
-information, see the documentation for the :doc:`neb <neb>` command. In
-the current LAMMPS implementation of TAD, all the non-NEB TAD
-operations are performed on the first partition, while the other
-partitions remain idle. See :ref:`Section_howto 5 <howto_5>` of the manual for further discussion of
-multi-replica simulations.
-
-A TAD run has several stages, which are repeated each time an event is
-performed. The logic for a TAD run is as follows:
-
-.. parsed-literal::
-
- while (time remains):
- while (time < tstop):
- until (event occurs):
- run dynamics for t_event steps
- quench
- run neb calculation using all replicas
- compute tlo from energy barrier
- update earliest event
- update tstop
- reflect back into current basin
- execute earliest event
-
-Before this outer loop begins, the initial potential energy basin is
-identified by quenching (an energy minimization, see below) the
-initial state and storing the resulting coordinates for reference.
-
-Inside the inner loop, dynamics is run continuously according to
-whatever integrator has been specified by the user, stopping every
-*t_event* steps to check if a transition event has occurred. This
-check is performed by quenching the system and comparing the resulting
-atom coordinates to the coordinates from the previous basin.
-
-A quench is an energy minimization and is performed by whichever
-algorithm has been defined by the :doc:`min_style <min_style>` command;
-its default is the CG minimizer. The tolerances and limits for each
-quench can be set by the *min* keyword. Note that typically, you do
-not need to perform a highly-converged minimization to detect a
-transition event.
-
-The event check is performed by a compute with the specified
-*compute-ID*\ . Currently there is only one compute that works with the
-TAD commmand, which is the :doc:`compute event/displace <compute_event_displace>` command. Other
-event-checking computes may be added. :doc:`Compute event/displace <compute_event_displace>` checks whether any atom in
-the compute group has moved further than a specified threshold
-distance. If so, an "event" has occurred.
-
-The NEB calculation is similar to that invoked by the :doc:`neb <neb>`
-command, except that the final state is generated internally, instead
-of being read in from a file. The style of minimization performed by
-NEB is determined by the *neb_style* keyword and must be a damped
-dynamics minimizer. The tolerances and limits for each NEB
-calculation can be set by the *neb* keyword. As discussed on the
-:doc:`neb <neb>`, it is often advantageous to use a larger timestep for
-NEB than for normal dyanmics. Since the size of the timestep set by
-the :doc:`timestep <timestep>` command is used by TAD for performing
-dynamics, there is a *neb_step* keyword which can be used to set a
-larger timestep for each NEB calculation if desired.
-
-
-----------
-
-
-A key aspect of the TAD method is setting the stopping criterion
-appropriately. If this criterion is too conservative, then many
-events must be generated before one is finally executed. Conversely,
-if this criterion is too aggressive, high-entropy high-barrier events
-will be over-sampled, while low-entropy low-barrier events will be
-under-sampled. If the lowest pre-exponential factor is known fairly
-accurately, then it can be used to estimate *tmax*\ , and the value of
-*delta* can be set to the desired confidence level e.g. *delta* = 0.05
-corresponds to 95% confidence. However, for systems where the dynamics
-are not well characterized (the most common case), it will be
-necessary to experiment with the values of *delta* and *tmax* to get a
-good trade-off between accuracy and performance.
-
-A second key aspect is the choice of *t_hi*\ . A larger value greatly
-increases the rate at which new events are generated. However, too
-large a value introduces errors due to anharmonicity (not accounted
-for within hTST). Once again, for any given system, experimentation is
-necessary to determine the best value of *t_hi*\ .
-
-
-----------
-
-
-Five kinds of output can be generated during a TAD run: event
-statistics, NEB statistics, thermodynamic output by each replica, dump
-files, and restart files.
-
-Event statistics are printed to the screen and master log.lammps file
-each time an event is executed. The quantities are the timestep, CPU
-time, global event number *N*\ , local event number *M*\ , event status,
-energy barrier, time margin, *t_lo* and *delt_lo*\ . The timestep is
-the usual LAMMPS timestep, which corresponds to the high-temperature
-time at which the event was detected, in units of timestep. The CPU
-time is the total processor time since the start of the TAD run. The
-global event number *N* is a counter that increments with each
-executed event. The local event number *M* is a counter that resets to
-zero upon entering each new basin. The event status is *E* when an
-event is executed, and is *D* for an event that is detected, while
-*DF* is for a detected event that is also the earliest (first) event
-at the low temperature.
-
-The time margin is the ratio of the high temperature time in the
-current basin to the stopping time. This last number can be used to
-judge whether the stopping time is too short or too long (see above).
-
-*t_lo* is the low-temperature event time when the current basin was
-entered, in units of timestep. del\ *t_lo* is the time of each detected
-event, measured relative to *t_lo*\ . *delt_lo* is equal to the
-high-temperature time since entering the current basin, scaled by an
-exponential factor that depends on the hi/lo temperature ratio and the
-energy barrier for that event.
-
-On lines for executed events, with status *E*\ , the global event number
-is incremented by one,
-the local event number and time margin are reset to zero,
-while the global event number, energy barrier, and
-*delt_lo* match the last event with status *DF*
-in the immediately preceding block of detected events.
-The low-temperature event time *t_lo* is incremented by *delt_lo*\ .
-
-NEB statistics are written to the file specified by the *neb_log*
-keyword. If the keyword value is "none", then no NEB statistics are
-printed out. The statistics are written every *Nevery* timesteps. See
-the :doc:`neb <neb>` command for a full description of the NEB
-statistics. When invoked from TAD, NEB statistics are never printed to
-the screen.
-
-Because the NEB calculation must run on multiple partitions, LAMMPS
-produces additional screen and log files for each partition,
-e.g. log.lammps.0, log.lammps.1, etc. For the TAD command, these
-contain the thermodynamic output of each NEB replica. In addition, the
-log file for the first partition, log.lammps.0, will contain
-thermodynamic output from short runs and minimizations corresponding
-to the dynamics and quench operations, as well as a line for each new
-detected event, as described above.
-
-After the TAD command completes, timing statistics for the TAD run are
-printed in each replica's log file, giving a breakdown of how much CPU
-time was spent in each stage (NEB, dynamics, quenching, etc).
-
-Any :doc:`dump files <dump>` defined in the input script will be written
-to during a TAD run at timesteps when an event is executed. This
-means the the requested dump frequency in the :doc:`dump <dump>` command
-is ignored. There will be one dump file (per dump command) created
-for all partitions. The atom coordinates of the dump snapshot are
-those of the minimum energy configuration resulting from quenching
-following the executed event. The timesteps written into the dump
-files correspond to the timestep at which the event occurred and NOT
-the clock. A dump snapshot corresponding to the initial minimum state
-used for event detection is written to the dump file at the beginning
-of each TAD run.
-
-If the :doc:`restart <restart>` command is used, a single restart file
-for all the partitions is generated, which allows a TAD run to be
-continued by a new input script in the usual manner. The restart file
-is generated after an event is executed. The restart file contains a
-snapshot of the system in the new quenched state, including the event
-number and the low-temperature time. The restart frequency specified
-in the :doc:`restart <restart>` command is interpreted differently when
-performing a TAD run. It does not mean the timestep interval between
-restart files. Instead it means an event interval for executed
-events. Thus a frequency of 1 means write a restart file every time
-an event is executed. A frequency of 10 means write a restart file
-every 10th executed event. When an input script reads a restart file
-from a previous TAD run, the new script can be run on a different
-number of replicas or processors.
-
-Note that within a single state, the dynamics will typically
-temporarily continue beyond the event that is ultimately chosen, until
-the stopping criterionis satisfied. When the event is eventually
-executed, the timestep counter is reset to the value when the event
-was detected. Similarly, after each quench and NEB minimization, the
-timestep counter is reset to the value at the start of the
-minimization. This means that the timesteps listed in the replica log
-files do not always increase monotonically. However, the timestep
-values printed to the master log file, dump files, and restart files
-are always monotonically increasing.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command can only be used if LAMMPS was built with the REPLICA
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info on packages.
-
-*N* setting must be integer multiple of *t_event*\ .
-
-Runs restarted from restart files written during a TAD run will only
-produce identical results if the user-specified integrator supports
-exact restarts. So :doc:`fix nvt <fix_nh>` will produce an exact
-restart, but :doc:`fix langevin <fix_langevin>` will not.
-
-This command cannot be used when any fixes are defined that keep track
-of elapsed time to perform time-dependent operations. Examples
-include the "ave" fixes such as :doc:`fix ave/chunk <fix_ave_chunk>`.
-Also :doc:`fix dt/reset <fix_dt_reset>` and :doc:`fix deposit <fix_deposit>`.
-
-Related commands
-""""""""""""""""
-
-:doc:`compute event/displace <compute_event_displace>`,
-:doc:`min_modify <min_modify>`, :doc:`min_style <min_style>`,
-:doc:`run_style <run_style>`, :doc:`minimize <minimize>`,
-:doc:`temper <temper>`, :doc:`neb <neb>`,
-:doc:`prd <prd>`
-
-Default
-"""""""
-
-The option defaults are *min* = 0.1 0.1 40 50, *neb* = 0.01 100 100
-10, *neb_style* = *quickmin*\ , *neb_step* = the same timestep set by
-the :doc:`timestep <timestep>` command, and *neb_log* = "none".
-
-
-----------
-
-
-.. _Voter:
-
-
-
-**(Voter)** Sorensen and Voter, J Chem Phys, 112, 9599 (2000)
-
-.. _Voter2:
-
-
-
-**(Voter2)** Voter, Montalenti, Germann, Annual Review of Materials
-Research 32, 321 (2002).
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/temper.txt b/doc/html/_sources/temper.txt
deleted file mode 100644
index 3b895e1b0..000000000
--- a/doc/html/_sources/temper.txt
+++ /dev/null
@@ -1,171 +0,0 @@
-.. index:: temper
-
-temper command
-==============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- temper N M temp fix-ID seed1 seed2 index
-
-* N = total # of timesteps to run
-* M = attempt a tempering swap every this many steps
-* temp = initial temperature for this ensemble
-* fix-ID = ID of the fix that will control temperature during the run
-* seed1 = random # seed used to decide on adjacent temperature to partner with
-* seed2 = random # seed for Boltzmann factor in Metropolis swap
-* index = which temperature (0 to N-1) I am simulating (optional)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- temper 100000 100 $t tempfix 0 58728
- temper 40000 100 $t tempfix 0 32285 $w
-
-Description
-"""""""""""
-
-Run a parallel tempering or replica exchange simulation using multiple
-replicas (ensembles) of a system. Two or more replicas must be used.
-
-Each replica runs on a partition of one or more processors. Processor
-partitions are defined at run-time using the -partition command-line
-switch; see :ref:`Section_start 6 <start_7>` of the
-manual. Note that if you have MPI installed, you can run a
-multi-replica simulation with more replicas (partitions) than you have
-physical processors, e.g you can run a 10-replica simulation on one or
-two processors. You will simply not get the performance speed-up you
-would see with one or more physical processors per replica. See :ref:`this section <howto_5>` of the manual for further
-discussion.
-
-Each replica's temperature is controlled at a different value by a fix
-with *fix-ID* that controls temperature. Most thermostat fix styles
-(with and without included time integration) are supported. The command
-will print an error message and abort, if the chosen fix is unsupported.
-The desired temperature is specified by *temp*\ , which is typically a
-variable previously set in the input script, so that each partition is
-assigned a different temperature. See the :doc:`variable <variable>`
-command for more details. For example:
-
-.. parsed-literal::
-
- variable t world 300.0 310.0 320.0 330.0
- fix myfix all nvt temp $t $t 100.0
- temper 100000 100 $t myfix 3847 58382
-
-would define 4 temperatures, and assign one of them to the thermostat
-used by each replica, and to the temper command.
-
-As the tempering simulation runs for *N* timesteps, a temperature swap
-between adjacent ensembles will be attempted every *M* timesteps. If
-*seed1* is 0, then the swap attempts will alternate between odd and
-even pairings. If *seed1* is non-zero then it is used as a seed in a
-random number generator to randomly choose an odd or even pairing each
-time. Each attempted swap of temperatures is either accepted or
-rejected based on a Boltzmann-weighted Metropolis criterion which uses
-*seed2* in the random number generator.
-
-As a tempering run proceeds, multiple log files and screen output
-files are created, one per replica. By default these files are named
-log.lammps.M and screen.M where M is the replica number from 0 to N-1,
-with N = # of replicas. See the :ref:`section on command-line switches <start_7>` for info on how to change these
-names.
-
-The main screen and log file (log.lammps) will list information about
-which temperature is assigned to each replica at each thermodynamic
-output timestep. E.g. for a simulation with 16 replicas:
-
-.. parsed-literal::
-
- Running on 16 partitions of processors
- Step T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 T15
- 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
- 500 1 0 3 2 5 4 6 7 8 9 10 11 12 13 14 15
- 1000 2 0 4 1 5 3 6 7 8 9 10 11 12 14 13 15
- 1500 2 1 4 0 5 3 6 7 9 8 10 11 12 14 13 15
- 2000 2 1 3 0 6 4 5 7 10 8 9 11 12 14 13 15
- 2500 2 1 3 0 6 4 5 7 11 8 9 10 12 14 13 15
- ...
-
-The column headings T0 to TN-1 mean which temperature is currently
-assigned to the replica 0 to N-1. Thus the columns represent replicas
-and the value in each column is its temperature (also numbered 0 to
-N-1). For example, a 0 in the 4th column (column T3, step 2500) means
-that the 4th replica is assigned temperature 0, i.e. the lowest
-temperature. You can verify this time sequence of temperature
-assignments for the Nth replica by comparing the Nth column of screen
-output to the thermodynamic data in the corresponding log.lammps.N or
-screen.N files as time proceeds.
-
-You can have each replica create its own dump file in the following
-manner:
-
-.. parsed-literal::
-
- variable rep world 0 1 2 3 4 5 6 7
- dump 1 all atom 1000 dump.temper.$\ *rep*
-
-.. note::
-
- Each replica's dump file will contain a continuous trajectory
- for its atoms where the temperature varies over time as swaps take
- place involving that replica. If you want a series of dump files,
- each with snapshots (from all replicas) that are all at a single
- temperature, then you will need to post-process the dump files using
- the information from the log.lammps file. E.g. you could produce one
- dump file with snapshots at 300K (from all replicas), another with
- snapshots at 310K, etc. Note that these new dump files will not
- contain "continuous trajectories" for individual atoms, because two
- successive snapshots (in time) may be from different replicas.
-
-The last argument *index* in the temper command is optional and is
-used when restarting a tempering run from a set of restart files (one
-for each replica) which had previously swapped to new temperatures.
-The *index* value (from 0 to N-1, where N is the # of replicas)
-identifies which temperature the replica was simulating on the
-timestep the restart files were written. Obviously, this argument
-must be a variable so that each partition has the correct value. Set
-the variable to the *N* values listed in the log file for the previous
-run for the replica temperatures at that timestep. For example if the
-log file listed the following for a simulation with 5 replicas:
-
-.. parsed-literal::
-
- 500000 2 4 0 1 3
-
-then a setting of
-
-.. parsed-literal::
-
- variable w world 2 4 0 1 3
-
-would be used to restart the run with a tempering command like the
-example above with $w as the last argument.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command can only be used if LAMMPS was built with the REPLICA
-package. See the :ref:`Making LAMMPS <start_3>` section
-for more info on packages.
-
-Related commands
-""""""""""""""""
-
-:doc:`variable <variable>`, :doc:`prd <prd>`, :doc:`neb <neb>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/thermo.txt b/doc/html/_sources/thermo.txt
deleted file mode 100644
index 05257f0ea..000000000
--- a/doc/html/_sources/thermo.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-.. index:: thermo
-
-thermo command
-==============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- thermo N
-
-* N = output thermodynamics every N timesteps
-* N can be a variable (see below)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- thermo 100
-
-Description
-"""""""""""
-
-Compute and print thermodynamic info (e.g. temperature, energy,
-pressure) on timesteps that are a multiple of N and at the beginning
-and end of a simulation. A value of 0 will only print thermodynamics
-at the beginning and end.
-
-The content and format of what is printed is controlled by the
-:doc:`thermo_style <thermo_style>` and
-:doc:`thermo_modify <thermo_modify>` commands.
-
-Instead of a numeric value, N can be specifed as an :doc:`equal-style variable <variable>`, which should be specified as v_name, where
-name is the variable name. In this case, the variable is evaluated at
-the beginning of a run to determine the next timestep at which
-thermodynamic info will be written out. On that timestep, the
-variable will be evaluated again to determine the next timestep, etc.
-Thus the variable should return timestep values. See the stagger()
-and logfreq() and stride() math functions for :doc:`equal-style variables <variable>`, as examples of useful functions to use in
-this context. Other similar math functions could easily be added as
-options for :doc:`equal-style variables <variable>`.
-
-For example, the following commands will output thermodynamic info at
-timesteps 0,10,20,30,100,200,300,1000,2000,etc:
-
-.. parsed-literal::
-
- variable s equal logfreq(10,3,10)
- thermo v_s
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`thermo_style <thermo_style>`, :doc:`thermo_modify <thermo_modify>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- thermo 0
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/thermo_modify.txt b/doc/html/_sources/thermo_modify.txt
deleted file mode 100644
index 40b3e3b6f..000000000
--- a/doc/html/_sources/thermo_modify.txt
+++ /dev/null
@@ -1,197 +0,0 @@
-.. index:: thermo_modify
-
-thermo_modify command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- thermo_modify keyword value ...
-
-* one or more keyword/value pairs may be listed
-.. parsed-literal::
-
- keyword = *lost* or *lost/bond* or *norm* or *flush* or *line* or *format* or *temp* or *press*\ :l
- *lost* value = *error* or *warn* or *ignore*
- *lost/bond* value = *error* or *warn* or *ignore*
- *norm* value = *yes* or *no*
- *flush* value = *yes* or *no*
- *line* value = *one* or *multi*
- *format* values = *line* string, *int* string, *float* string, M string, or *none*
- string = C-style format string
- M = integer from 1 to N, where N = # of quantities being output
- *temp* value = compute ID that calculates a temperature
- *press* value = compute ID that calculates a pressure
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- thermo_modify lost ignore flush yes
- thermo_modify temp myTemp format 3 %15.8g
- thermo_modify temp myTemp format line "%ld %g %g %15.8g"
- thermo_modify line multi format float %g
-
-Description
-"""""""""""
-
-Set options for how thermodynamic information is computed and printed
-by LAMMPS.
-
-.. note::
-
- These options apply to the currently defined thermo style. When
- you specify a :doc:`thermo_style <thermo_style>` command, all
- thermodynamic settings are restored to their default values, including
- those previously reset by a thermo_modify command. Thus if your input
- script specifies a thermo_style command, you should use the
- thermo_modify command after it.
-
-The *lost* keyword determines whether LAMMPS checks for lost atoms
-each time it computes thermodynamics and what it does if atoms are
-lost. An atom can be "lost" if it moves across a non-periodic
-simulation box :doc:`boundary <boundary>` or if it moves more than a box
-length outside the simulation domain (or more than a processor
-sub-domain length) before reneighboring occurs. The latter case is
-typically due to bad dynamics, e.g. too large a timestep or huge
-forces and velocities. If the value is *ignore*\ , LAMMPS does not
-check for lost atoms. If the value is *error* or *warn*\ , LAMMPS
-checks and either issues an error or warning. The code will exit with
-an error and continue with a warning. A warning will only be issued
-once, the first time an atom is lost. This can be a useful debugging
-option.
-
-The *lost/bond* keyword determines whether LAMMPS throws an error or
-not if an atom in a bonded interaction (bond, angle, etc) cannot be
-found when it creates bonded neighbor lists. By default this is a
-fatal error. However in some scenarios it may be desirable to only
-issue a warning or ignore it and skip the computation of the missing
-bond, angle, etc. An example would be when gas molecules in a vapor
-are drifting out of the box through a fixed boundary condition (see
-the :doc:`boundary <boundary>` command). In this case one atom may be
-deleted before the rest of the molecule is, on a later timestep.
-
-The *norm* keyword determines whether various thermodynamic output
-values are normalized by the number of atoms or not, depending on
-whether it is set to *yes* or *no*\ . Different unit styles have
-different defaults for this setting (see below). Even if *norm* is
-set to *yes*\ , a value is only normalized if it is an "extensive"
-quantity, meaning that it scales with the number of atoms in the
-system. For the thermo keywords described by the doc page for the
-:doc:`thermo_style <thermo_style>` command, all energy-related keywords
-are extensive, such as *pe* or *ebond* or *enthalpy*\ . Other keywords
-such as *temp* or *press* are "intensive" meaning their value is
-independent (in a statistical sense) of the number of atoms in the
-system and thus are never normalized. For thermodynamic output values
-extracted from fixes and computes in a :doc:`thermo_style custom <thermo_style>` command, the doc page for the individual
-:doc:`fix <fix>` or :doc:`compute <compute>` lists whether the value is
-"extensive" or "intensive" and thus whether it is normalized.
-Thermodynamic output values calculated by a variable formula are
-assumed to be "intensive" and thus are never normalized. You can
-always include a divide by the number of atoms in the variable formula
-if this is not the case.
-
-The *flush* keyword invokes a flush operation after thermodynamic info
-is written to the log file. This insures the output in that file is
-current (no buffering by the OS), even if LAMMPS halts before the
-simulation completes.
-
-The *line* keyword determines whether thermodynamics will be output as
-a series of numeric values on one line or in a multi-line format with
-3 quantities with text strings per line and a dashed-line header
-containing the timestep and CPU time. This modify option overrides
-the *one* and *multi* thermo_style settings.
-
-The *format* keyword can be used to change the default numeric format
-of any of quantities the :doc:`thermo_style <thermo_style>` command
-outputs. All the specified format strings are C-style formats,
-e.g. as used by the C/C++ printf() command. The *line* keyword takes
-a single argument which is the format string for the entire line of
-thermo output, with N fields, which you must enclose in quotes if it
-is more than one field. The *int* and *float* keywords take a single
-format argument and are applied to all integer or floating-point
-quantities output. The setting for *M string* also takes a single
-format argument which is used for the Mth value output in each line,
-e.g. the 5th column is output in high precision for "format 5
-%20.15g".
-
-The *format* keyword can be used multiple times. The precedence is
-that for each value in a line of output, the *M* format (if specified)
-is used, else the *int* or *float* setting (if specified) is used,
-else the *line* setting (if specified) for that value is used, else
-the default setting is used. A setting of *none* clears all previous
-settings, reverting all values to their default format.
-
-.. note::
-
- The thermo output values *step* and *atoms* are stored
- internally as 8-byte signed integers, rather than the usual 4-byte
- signed integers. When specifying the *format int* option you can use
- a "%d"-style format identifier in the format string and LAMMPS will
- convert this to the corresponding 8-byte form when it is applied to
- those keywords. However, when specifying the *line* option or *format
- M string* option for *step* and *natoms*\ , you should specify a format
- string appropriate for an 8-byte signed integer, e.g. one with "%ld".
-
-The *temp* keyword is used to determine how thermodynamic temperature
-is calculated, which is used by all thermo quantities that require a
-temperature ("temp", "press", "ke", "etotal", "enthalpy", "pxx", etc).
-The specified compute ID must have been previously defined by the user
-via the :doc:`compute <compute>` command and it must be a style of
-compute that calculates a temperature. As described in the
-:doc:`thermo_style <thermo_style>` command, thermo output uses a default
-compute for temperature with ID = *thermo_temp*\ . This option allows
-the user to override the default.
-
-The *press* keyword is used to determine how thermodynamic pressure is
-calculated, which is used by all thermo quantities that require a
-pressure ("press", "enthalpy", "pxx", etc). The specified compute ID
-must have been previously defined by the user via the
-:doc:`compute <compute>` command and it must be a style of compute that
-calculates a pressure. As described in the
-:doc:`thermo_style <thermo_style>` command, thermo output uses a default
-compute for pressure with ID = *thermo_press*\ . This option allows the
-user to override the default.
-
-.. note::
-
- If both the *temp* and *press* keywords are used in a single
- thermo_modify command (or in two separate commands), then the order in
- which the keywords are specified is important. Note that a :doc:`pressure compute <compute_pressure>` defines its own temperature compute as
- an argument when it is specified. The *temp* keyword will override
- this (for the pressure compute being used by thermodynamics), but only
- if the *temp* keyword comes after the *press* keyword. If the *temp*
- keyword comes before the *press* keyword, then the new pressure
- compute specified by the *press* keyword will be unaffected by the
- *temp* setting.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`thermo <thermo>`, :doc:`thermo_style <thermo_style>`
-
-Default
-"""""""
-
-The option defaults are lost = error, norm = yes for unit style of
-*lj*\ , norm = no for unit style of *real* and *metal*\ , flush = no,
-and temp/press = compute IDs defined by thermo_style.
-
-The defaults for the line and format options depend on the thermo
-style. For styles "one" and "custom", the line and format defaults
-are "one", "%8d", and "%12.8g". For style "multi", the line and
-format defaults are "multi", "%8d", and "%14.4f".
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/thermo_style.txt b/doc/html/_sources/thermo_style.txt
deleted file mode 100644
index 9feba5fec..000000000
--- a/doc/html/_sources/thermo_style.txt
+++ /dev/null
@@ -1,442 +0,0 @@
-.. index:: thermo_style
-
-thermo_style command
-====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- thermo_style style args
-
-* style = *one* or *multi* or *custom*
-* args = list of arguments for a particular style
-.. parsed-literal::
-
- *one* args = none
- *multi* args = none
- *custom* args = list of keywords
- possible keywords = step, elapsed, elaplong, dt, time,
- cpu, tpcpu, spcpu, cpuremain, part, timeremain,
- atoms, temp, press, pe, ke, etotal, enthalpy,
- evdwl, ecoul, epair, ebond, eangle, edihed, eimp,
- emol, elong, etail,
- vol, density, lx, ly, lz, xlo, xhi, ylo, yhi, zlo, zhi,
- xy, xz, yz, xlat, ylat, zlat,
- bonds, angles, dihedrals, impropers,
- pxx, pyy, pzz, pxy, pxz, pyz,
- fmax, fnorm, nbuild, ndanger,
- cella, cellb, cellc, cellalpha, cellbeta, cellgamma,
- c_ID, c_ID[I], c_ID[I][J],
- f_ID, f_ID[I], f_ID[I][J],
- v_name, v_name[I]
- step = timestep
- elapsed = timesteps since start of this run
- elaplong = timesteps since start of initial run in a series of runs
- dt = timestep size
- time = simulation time
- cpu = elapsed CPU time in seconds
- tpcpu = time per CPU second
- spcpu = timesteps per CPU second
- cpuremain = estimated CPU time remaining in run
- part = which partition (0 to Npartition-1) this is
- timeremain = remaining time in seconds on timer timeout.
- atoms = # of atoms
- temp = temperature
- press = pressure
- pe = total potential energy
- ke = kinetic energy
- etotal = total energy (pe + ke)
- enthalpy = enthalpy (etotal + press*vol)
- evdwl = VanderWaal pairwise energy (includes etail)
- ecoul = Coulombic pairwise energy
- epair = pairwise energy (evdwl + ecoul + elong)
- ebond = bond energy
- eangle = angle energy
- edihed = dihedral energy
- eimp = improper energy
- emol = molecular energy (ebond + eangle + edihed + eimp)
- elong = long-range kspace energy
- etail = VanderWaal energy long-range tail correction
- vol = volume
- density = mass density of system
- lx,ly,lz = box lengths in x,y,z
- xlo,xhi,ylo,yhi,zlo,zhi = box boundaries
- xy,xz,yz = box tilt for triclinic (non-orthogonal) simulation boxes
- xlat,ylat,zlat = lattice spacings as calculated by :doc:`lattice <lattice>` command
- bonds,angles,dihedrals,impropers = # of these interactions defined
- pxx,pyy,pzz,pxy,pxz,pyz = 6 components of pressure tensor
- fmax = max component of force on any atom in any dimension
- fnorm = length of force vector for all atoms
- nbuild = # of neighbor list builds
- ndanger = # of dangerous neighbor list builds
- cella,cellb,cellc = periodic cell lattice constants a,b,c
- cellalpha, cellbeta, cellgamma = periodic cell angles alpha,beta,gamma
- c_ID = global scalar value calculated by a compute with ID
- c_ID[I] = Ith component of global vector calculated by a compute with ID, I can include wildcard (see below)
- c_ID[I][J] = I,J component of global array calculated by a compute with ID
- f_ID = global scalar value calculated by a fix with ID
- f_ID[I] = Ith component of global vector calculated by a fix with ID, I can include wildcard (see below)
- f_ID[I][J] = I,J component of global array calculated by a fix with ID
- v_name = value calculated by an equal-style variable with name
- v_name[I] = value calculated by a vector-style variable with name
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- thermo_style multi
- thermo_style custom step temp pe etotal press vol
- thermo_style custom step temp etotal c_myTemp v_abc
- thermo_style custom step temp etotal c_myTemp[*] v_abc
-
-Description
-"""""""""""
-
-Set the style and content for printing thermodynamic data to the
-screen and log file.
-
-Style *one* prints a one-line summary of thermodynamic info that is
-the equivalent of "thermo_style custom step temp epair emol etotal
-press". The line contains only numeric values.
-
-Style *multi* prints a multiple-line listing of thermodynamic info
-that is the equivalent of "thermo_style custom etotal ke temp pe ebond
-eangle edihed eimp evdwl ecoul elong press". The listing contains
-numeric values and a string ID for each quantity.
-
-Style *custom* is the most general setting and allows you to specify
-which of the keywords listed above you want printed on each
-thermodynamic timestep. Note that the keywords c_ID, f_ID, v_name are
-references to :doc:`computes <compute>`, :doc:`fixes <fix>`, and
-equal-style `variables <variable.html">`_ that have been defined
-elsewhere in the input script or can even be new styles which users
-have added to LAMMPS (see the :doc:`Section_modify <Section_modify>`
-section of the documentation). Thus the *custom* style provides a
-flexible means of outputting essentially any desired quantity as a
-simulation proceeds.
-
-All styles except *custom* have *vol* appended to their list of
-outputs if the simulation box volume changes during the simulation.
-
-The values printed by the various keywords are instantaneous values,
-calculated on the current timestep. Time-averaged quantities, which
-include values from previous timesteps, can be output by using the
-f_ID keyword and accessing a fix that does time-averaging such as the
-:doc:`fix ave/time <fix_ave_time>` command.
-
-Options invoked by the :doc:`thermo_modify <thermo_modify>` command can
-be used to set the one- or multi-line format of the print-out, the
-normalization of thermodynamic output (total values versus per-atom
-values for extensive quantities (ones which scale with the number of
-atoms in the system), and the numeric precision of each printed value.
-
-.. note::
-
- When you use a "thermo_style" command, all thermodynamic
- settings are restored to their default values, including those
- previously set by a :doc:`thermo_modify <thermo_modify>` command. Thus
- if your input script specifies a thermo_style command, you should use
- the thermo_modify command after it.
-
-
-----------
-
-
-Several of the thermodynamic quantities require a temperature to be
-computed: "temp", "press", "ke", "etotal", "enthalpy", "pxx", etc. By
-default this is done by using a *temperature* compute which is created
-when LAMMPS starts up, as if this command had been issued:
-
-.. parsed-literal::
-
- compute thermo_temp all temp
-
-See the :doc:`compute temp <compute_temp>` command for details. Note
-that the ID of this compute is *thermo_temp* and the group is *all*\ .
-You can change the attributes of this temperature (e.g. its
-degrees-of-freedom) via the :doc:`compute_modify <compute_modify>`
-command. Alternatively, you can directly assign a new compute (that
-calculates temperature) which you have defined, to be used for
-calculating any thermodynamic quantity that requires a temperature.
-This is done via the :doc:`thermo_modify <thermo_modify>` command.
-
-Several of the thermodynamic quantities require a pressure to be
-computed: "press", "enthalpy", "pxx", etc. By default this is done by
-using a *pressure* compute which is created when LAMMPS starts up, as
-if this command had been issued:
-
-.. parsed-literal::
-
- compute thermo_press all pressure thermo_temp
-
-See the :doc:`compute pressure <compute_pressure>` command for details.
-Note that the ID of this compute is *thermo_press* and the group is
-*all*\ . You can change the attributes of this pressure via the
-:doc:`compute_modify <compute_modify>` command. Alternatively, you can
-directly assign a new compute (that calculates pressure) which you
-have defined, to be used for calculating any thermodynamic quantity
-that requires a pressure. This is done via the
-:doc:`thermo_modify <thermo_modify>` command.
-
-Several of the thermodynamic quantities require a potential energy to
-be computed: "pe", "etotal", "ebond", etc. This is done by using a
-*pe* compute which is created when LAMMPS starts up, as if this
-command had been issued:
-
-.. parsed-literal::
-
- compute thermo_pe all pe
-
-See the :doc:`compute pe <compute_pe>` command for details. Note that
-the ID of this compute is *thermo_pe* and the group is *all*\ . You can
-change the attributes of this potential energy via the
-:doc:`compute_modify <compute_modify>` command.
-
-
-----------
-
-
-The kinetic energy of the system *ke* is inferred from the temperature
-of the system with 1/2 Kb T of energy for each degree of freedom.
-Thus, using different :doc:`compute commands <compute>` for calculating
-temperature, via the :doc:`thermo_modify temp <thermo_modify>` command,
-may yield different kinetic energies, since different computes that
-calculate temperature can subtract out different non-thermal
-components of velocity and/or include different degrees of freedom
-(translational, rotational, etc).
-
-The potential energy of the system *pe* will include contributions
-from fixes if the :doc:`fix_modify thermo <fix_modify>` option is set
-for a fix that calculates such a contribution. For example, the :doc:`fix wall/lj93 <fix_wall>` fix calculates the energy of atoms
-interacting with the wall. See the doc pages for "individual fixes"
-to see which ones contribute.
-
-A long-range tail correction *etail* for the VanderWaal pairwise
-energy will be non-zero only if the :doc:`pair_modify tail <pair_modify>` option is turned on. The *etail* contribution
-is included in *evdwl*\ , *epair*\ , *pe*\ , and *etotal*\ , and the
-corresponding tail correction to the pressure is included in *press*
-and *pxx*\ , *pyy*\ , etc.
-
-
-----------
-
-
-The *step*\ , *elapsed*\ , and *elaplong* keywords refer to timestep
-count. *Step* is the current timestep, or iteration count when a
-:doc:`minimization <minimize>` is being performed. *Elapsed* is the
-number of timesteps elapsed since the beginning of this run.
-*Elaplong* is the number of timesteps elapsed since the beginning of
-an initial run in a series of runs. See the *start* and *stop*
-keywords for the :doc:`run <run>` for info on how to invoke a series of
-runs that keep track of an initial starting time. If these keywords
-are not used, then *elapsed* and *elaplong* are the same value.
-
-The *dt* keyword is the current timestep size in time
-:doc:`units <units>`. The *time* keyword is the current elapsed
-simulation time, also in time :doc:`units <units>`, which is simply
-(step*dt) if the timestep size has not changed and the timestep has
-not been reset. If the timestep has changed (e.g. via :doc:`fix dt/reset <fix_dt_reset>`) or the timestep has been reset (e.g. via
-the "reset_timestep" command), then the simulation time is effectively
-a cummulative value up to the current point.
-
-The *cpu* keyword is elapsed CPU seconds since the beginning of this
-run. The *tpcpu* and *spcpu* keywords are measures of how fast your
-simulation is currently running. The *tpcpu* keyword is simulation
-time per CPU second, where simulation time is in time
-:doc:`units <units>`. E.g. for metal units, the *tpcpu* value would be
-picoseconds per CPU second. The *spcpu* keyword is the number of
-timesteps per CPU second. Both quantities are on-the-fly metrics,
-measured relative to the last time they were invoked. Thus if you are
-printing out thermodyamic output every 100 timesteps, the two keywords
-will continually output the time and timestep rate for the last 100
-steps. The *tpcpu* keyword does not attempt to track any changes in
-timestep size, e.g. due to using the :doc:`fix dt/reset <fix_dt_reset>`
-command.
-
-The *cpuremain* keyword estimates the CPU time remaining in the
-current run, based on the time elapsed thus far. It will only be a
-good estimate if the CPU time/timestep for the rest of the run is
-similar to the preceding timesteps. On the initial timestep the value
-will be 0.0 since there is no history to estimate from. For a
-minimization run performed by the "minimize" command, the estimate is
-based on the *maxiter* parameter, assuming the minimization will
-proceed for the maximum number of allowed iterations.
-
-The *part* keyword is useful for multi-replica or multi-partition
-simulations to indicate which partition this output and this file
-corresponds to, or for use in a :doc:`variable <variable>` to append to
-a filename for output specific to this partition. See :ref:`Section_start 7 <start_7>` of the manual for details on running in
-multi-partition mode.
-
-The *timeremain* keyword returns the remaining seconds when a
-timeout has been configured via the :doc:`timer timeout <timer>` command.
-If the timeout timer is inactive, the value of this keyword is 0.0 and
-if the timer is expired, it is negative. This allows for example to exit
-loops cleanly, if the timeout is expired with:
-
-.. parsed-literal::
-
- if "$(timeremain) < 0.0" then "quit 0"
-
-The *fmax* and *fnorm* keywords are useful for monitoring the progress
-of an :doc:`energy minimization <minimize>`. The *fmax* keyword
-calculates the maximum force in any dimension on any atom in the
-system, or the infinity-norm of the force vector for the system. The
-*fnorm* keyword calculates the 2-norm or length of the force vector.
-
-The *nbuild* and *ndanger* keywords are useful for monitoring neighbor
-list builds during a run. Note that both these values are also
-printed with the end-of-run statistics. The *nbuild* keyword is the
-number of re-builds during the current run. The *ndanger* keyword is
-the number of re-builds that LAMMPS considered potentially
-"dangerous". If atom movement triggered neighbor list rebuilding (see
-the :doc:`neigh_modify <neigh_modify>` command), then dangerous
-reneighborings are those that were triggered on the first timestep
-atom movement was checked for. If this count is non-zero you may wish
-to reduce the delay factor to insure no force interactions are missed
-by atoms moving beyond the neighbor skin distance before a rebuild
-takes place.
-
-The keywords *cella*\ , *cellb*\ , *cellc*\ , *cellalpha*\ , *cellbeta*\ ,
-*cellgamma*\ , correspond to the usual crystallographic quantities that
-define the periodic unit cell of a crystal. See :ref:`this section <howto_12>` of the doc pages for a geometric
-description of triclinic periodic cells, including a precise defintion
-of these quantities in terms of the internal LAMMPS cell dimensions
-*lx*\ , *ly*\ , *lz*\ , *yz*\ , *xz*\ , *xy*\ .
-
-
-----------
-
-
-For output values from a compute or fix, the bracketed index I used to
-index a vector, as in *c_ID[I]* or *f_ID[I]*\ , can be specified
-using a wildcard asterisk with the index to effectively specify
-multiple values. This takes the form "*" or "*n" or "n*" or "m*n".
-If N = the size of the vector (for *mode* = scalar) or the number of
-columns in the array (for *mode* = vector), then an asterisk with no
-numeric values means all indices from 1 to N. A leading asterisk
-means all indices from 1 to n (inclusive). A trailing asterisk means
-all indices from n to N (inclusive). A middle asterisk means all
-indices from m to n (inclusive).
-
-Using a wildcard is the same as if the individual elements of the
-vector had been listed one by one. E.g. these 2 thermo_style commands
-are equivalent, since the :doc:`compute temp <compute_temp>` command
-creates a global vector with 6 values.
-
-.. parsed-literal::
-
- compute myTemp all temp
- thermo_style custom step temp etotal c_myTemp[*]
- thermo_style custom step temp etotal &
- c_myTemp[1] c_myTemp[2] c_myTemp[3] &
- c_myTemp[4] c_myTemp[5] c_myTemp[6]
-
-
-----------
-
-
-The *c_ID* and *c_ID[I]* and *c_ID[I][J]* keywords allow global
-values calculated by a compute to be output. As discussed on the
-:doc:`compute <compute>` doc page, computes can calculate global,
-per-atom, or local values. Only global values can be referenced by
-this command. However, per-atom compute values for an individual atom
-can be referenced in a :doc:`variable <variable>` and the variable
-referenced by thermo_style custom, as discussed below. See the
-discussion above for how the I in *c_ID[I]* can be specified with a
-wildcard asterisk to effectively specify multiple values from a global
-compute vector.
-
-The ID in the keyword should be replaced by the actual ID of a compute
-that has been defined elsewhere in the input script. See the
-:doc:`compute <compute>` command for details. If the compute calculates
-a global scalar, vector, or array, then the keyword formats with 0, 1,
-or 2 brackets will reference a scalar value from the compute.
-
-Note that some computes calculate "intensive" global quantities like
-temperature; others calculate "extensive" global quantities like
-kinetic energy that are summed over all atoms in the compute group.
-Intensive quantities are printed directly without normalization by
-thermo_style custom. Extensive quantities may be normalized by the
-total number of atoms in the simulation (NOT the number of atoms in
-the compute group) when output, depending on the :doc:`thermo_modify norm <thermo_modify>` option being used.
-
-The *f_ID* and *f_ID[I]* and *f_ID[I][J]* keywords allow global
-values calculated by a fix to be output. As discussed on the
-:doc:`fix <fix>` doc page, fixes can calculate global, per-atom, or
-local values. Only global values can be referenced by this command.
-However, per-atom fix values can be referenced for an individual atom
-in a :doc:`variable <variable>` and the variable referenced by
-thermo_style custom, as discussed below. See the discussion above for
-how the I in *f_ID[I]* can be specified with a wildcard asterisk to
-effectively specify multiple values from a global fix vector.
-
-The ID in the keyword should be replaced by the actual ID of a fix
-that has been defined elsewhere in the input script. See the
-:doc:`fix <fix>` command for details. If the fix calculates a global
-scalar, vector, or array, then the keyword formats with 0, 1, or 2
-brackets will reference a scalar value from the fix.
-
-Note that some fixes calculate "intensive" global quantities like
-timestep size; others calculate "extensive" global quantities like
-energy that are summed over all atoms in the fix group. Intensive
-quantities are printed directly without normalization by thermo_style
-custom. Extensive quantities may be normalized by the total number of
-atoms in the simulation (NOT the number of atoms in the fix group)
-when output, depending on the :doc:`thermo_modify norm <thermo_modify>`
-option being used.
-
-The *v_name* keyword allow the current value of a variable to be
-output. The name in the keyword should be replaced by the variable
-name that has been defined elsewhere in the input script. Only
-equal-style and vector-style variables can be referenced; the latter
-requires a bracketed term to specify the Ith element of the vector
-calculated by the variable. However, an atom-style variable can be
-referenced for an individual atom by an equal-style variable and that
-variable referenced. See the :doc:`variable <variable>` command for
-details. Variables of style *equal* and *vector* and *atom* define a
-formula which can reference per-atom properties or thermodynamic
-keywords, or they can invoke other computes, fixes, or variables when
-evaluated, so this is a very general means of creating thermodynamic
-output.
-
-Note that equal-style and vector-style variables are assumed to
-produce "intensive" global quantities, which are thus printed as-is,
-without normalization by thermo_style custom. You can include a
-division by "natoms" in the variable formula if this is not the case.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command must come after the simulation box is defined by a
-:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`, or
-:doc:`create_box <create_box>` command.
-
-Related commands
-""""""""""""""""
-
-:doc:`thermo <thermo>`, :doc:`thermo_modify <thermo_modify>`,
-:doc:`fix_modify <fix_modify>`, :doc:`compute temp <compute_temp>`,
-:doc:`compute pressure <compute_pressure>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- thermo_style one
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/timer.txt b/doc/html/_sources/timer.txt
deleted file mode 100644
index 9ea8b0854..000000000
--- a/doc/html/_sources/timer.txt
+++ /dev/null
@@ -1,134 +0,0 @@
-.. index:: timer
-
-timer command
-=============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- timer args
-
-* *args* = one or more of *off* or *loop* or *normal* or *full* or *sync* or *nosync* or *timeout* or *every*
-.. parsed-literal::
-
- *off* = do not collect or print any timing information
- *loop* = collect only the total time for the simulation loop
- *normal* = collect timer information broken down by sections (default)
- *full* = like *normal* but also include CPU and thread utilzation
- *sync* = explicitly synchronize MPI tasks between sections
- *nosync* = do not synchronize MPI tasks between sections (default)
- *timeout* elapse = set walltime limit to *elapse*
- *every* Ncheck = perform timeout check every *Ncheck* steps
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- timer full sync
- timer timeout 2:00:00 every 100
- timer loop
-
-Description
-"""""""""""
-
-Select the level of detail at which LAMMPS performs its CPU timings.
-Multiple keywords can be specified with the *timer* command. For
-keywords that are mutually exclusive, the last one specified takes
-effect.
-
-During a simulation run LAMMPS collects information about how much
-time is spent in different sections of the code and thus can provide
-information for determining performance and load imbalance problems.
-This can be done at different levels of detail and accuracy. For more
-information about the timing output, see this :ref:`discussion of screen output <start_8>`.
-
-The *off* setting will turn all time measurements off. The *loop*
-setting will only measure the total time for a run and not collect any
-detailed per section information. With the *normal* setting, timing
-information for portions of the timestep (pairwise calculations,
-neighbor list construction, output, etc) are collected as well as
-information about load imbalances for those sections across
-procsessors. The *full* setting adds information about CPU
-utilization and thread utilization, when multi-threading is enabled.
-
-With the *sync* setting, all MPI tasks are synchronized at each timer
-call which meaures load imbalance more accuractly, though it can also
-slow down the simulation. Using the *nosync* setting (which is the
-default) turns off this synchronization.
-
-With the *timeout* keyword a walltime limit can be imposed that
-affects the :doc:`run <run>` and :doc:`minimize <minimize>` commands.
-This can be convenient when runs have to confirm to time limits,
-e.g. when running under a batch system and you want to maximize
-the utilization of the batch time slot, especially when the time
-per timestep varies and is thus difficult to predict how many
-steps a simulation can perform, or for difficult to converge
-minimizations. The timeout *elapse* value should be somewhat smaller
-than the time requested from the batch system, as there is usually
-some overhead to launch jobs, and it may be advisable to write
-out a restart after terminating a run due to a timeout.
-
-The timeout timer starts when the command is issued. When the time
-limit is reached, the run or energy minimization will exit on the
-next step or iteration that is a multiple of the *Ncheck* value
-which can be set with the *every* keyword. Default is checking
-every 10 steps. After the timer timeout has expired all subsequent
-run or minimize commands in the input script will be skipped.
-The remaining time or timer status can be accessed with the
-:doc:`thermo <thermo_style>` variable *timeremain*\ , which will be
-zero, if the timeout is inactive (default setting), it will be
-negative, if the timeout time is expired and positive if there
-is time remaining and in this case the value of the variable are
-the number of seconds remaining.
-
-When the *timeout* key word is used a second time, the timer is
-restarted with a new time limit. The timeout *elapse* value can
-be specified as *off* or *unlimited* to impose a no timeout condition
-(which is the default). The *elapse* setting can be specified as
-a single number for seconds, two numbers separated by a colon (MM:SS)
-for minutes and seconds, or as three numbers separated by colons for
-hours, minutes, and seconds (H:MM:SS).
-
-The *every* keyword sets how frequently during a run or energy
-minimization the wall clock will be checked. This check count applies
-to the outer iterations or time steps during minimizations or :doc:`r-RESPA runs <run_style>`, respectively. Checking for timeout too often,
-can slow a calculation down. Checking too infrequently can make the
-timeout measurement less accurate, with the run being stopped later
-than desired.
-
-.. note::
-
- Using the *full* and *sync* options provides the most detailed
- and accurate timing information, but can also have a negative
- performance impact due to the overhead of the many required system
- calls. It is thus recommended to use these settings only when testing
- tests to identify performance bottlenecks. For calculations with few
- atoms or a very large number of processors, even the *normal* setting
- can have a measurable negative performance impact. In those cases you
- can just use the *loop* or *off* setting.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`run post no <run>`, :doc:`kspace_modify fftbench <kspace_modify>`
-
-Default
-"""""""
-
-.. parsed-literal::
-
- timer normal nosync
- timer timeout off
- timer every 10
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/timestep.txt b/doc/html/_sources/timestep.txt
deleted file mode 100644
index 1d73e1f0f..000000000
--- a/doc/html/_sources/timestep.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-.. index:: timestep
-
-timestep command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- timestep dt
-
-* dt = timestep size (time units)
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- timestep 2.0
- timestep 0.003
-
-Description
-"""""""""""
-
-Set the timestep size for subsequent molecular dynamics simulations.
-See the :doc:`units <units>` command for the time units associated with
-each choice of units that LAMMPS supports.
-
-The default value for the timestep size also depends on the choice of
-units for the simulation; see the default values below.
-
-When the :doc:`run style <run_style>` is *respa*\ , dt is the timestep for
-the outer loop (largest) timestep.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix dt/reset <fix_dt_reset>`, :doc:`run <run>`,
-:doc:`run_style <run_style>` respa, :doc:`units <units>`
-
-Default
-"""""""
-
-+--------------------------------+------------+-----------------------+
-| choice of :doc:`units <units>` | time units | default timestep size |
-+--------------------------------+------------+-----------------------+
-| lj | tau | 0.005 tau |
-+--------------------------------+------------+-----------------------+
-| real | fmsec | 1.0 fmsec |
-+--------------------------------+------------+-----------------------+
-| metal | psec | 0.001 psec |
-+--------------------------------+------------+-----------------------+
-| si | sec | 1.0e-8 sec (10 nsec) |
-+--------------------------------+------------+-----------------------+
-| cgs | sec | 1.0e-8 sec (10 nsec) |
-+--------------------------------+------------+-----------------------+
-| electron | fmsec | 0.001 fmsec |
-+--------------------------------+------------+-----------------------+
-| micro | usec | 2.0 usec |
-+--------------------------------+------------+-----------------------+
-| nano | nsec | 0.00045 nsec |
-+--------------------------------+------------+-----------------------+
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/tutorial_drude.txt b/doc/html/_sources/tutorial_drude.txt
deleted file mode 100644
index 494cd9f15..000000000
--- a/doc/html/_sources/tutorial_drude.txt
+++ /dev/null
@@ -1,514 +0,0 @@
-Tutorial for Thermalized Drude oscillators in LAMMPS
-====================================================
-
-This tutorial explains how to use Drude oscillators in LAMMPS to
-simulate polarizable systems using the USER-DRUDE package. As an
-illustration, the input files for a simulation of 250 phenol molecules
-are documented. First of all, LAMMPS has to be compiled with the
-USER-DRUDE package activated. Then, the data file and input scripts
-have to be modified to include the Drude dipoles and how to handle
-them.
-
-
-----------
-
-
-**Overview of Drude induced dipoles**
-
-Polarizable atoms acquire an induced electric dipole moment under the
-action of an external electric field, for example the electric field
-created by the surrounding particles. Drude oscillators represent
-these dipoles by two fixed charges: the core (DC) and the Drude
-particle (DP) bound by a harmonic potential. The Drude particle can be
-thought of as the electron cloud whose center can be displaced from
-the position of the the corresponding nucleus.
-
-The sum of the masses of a core-Drude pair should be the mass of the
-initial (unsplit) atom, :math:`m_C + m_D = m`. The sum of their charges
-should be the charge of the initial (unsplit) atom, :math:`q_C + q_D = q`.
-A harmonic potential between the core and Drude partners should be
-present, with force constant :math:`k_D` and an equilibrium distance of
-zero. The (half-)stiffness of the :doc:`harmonic bond <bond_harmonic>`
-:math:`K_D = k_D/2` and the Drude charge :math:`q_D` are related to the atom
-polarizability :math:`\alpha` by
-
-
-.. math::
-
- \begin{equation} K_D = \frac 1 2\, \frac {q_D^2} \alpha\end{equation}
-
-Ideally, the mass of the Drude particle should be small, and the
-stiffness of the harmonic bond should be large, so that the Drude
-particle remains close ot the core. The values of Drude mass, Drude
-charge, and force constant can be chosen following different
-strategies, as in the following examples of polarizable force
-fields:
-
-* :ref:`Lamoureux and Roux <Lamoureux>` suggest adopting a global half-stiffness, :math:`K_D` = 500 kcal/(mol Ang :math:`{}^2`) - which corresponds to a force constant :math:`k_D` = 4184 kJ/(mol Ang :math:`{}^2`) - for all types of core-Drude bond, a global mass :math:`m_D` = 0.4 g/mol (or u) for all types of Drude particles, and to calculate the Drude charges for individual atom types from the atom polarizabilities using equation (1). This choice is followed in the polarizable CHARMM force field.
-* Alternately :ref:`Schroeder and Steinhauser <Schroeder>` suggest adopting a global charge :math:`q_D` = -1.0e and a global mass :math:`m_D` = 0.1 g/mol (or u) for all Drude particles, and to calculate the force constant for each type of core-Drude bond from equation (1). The timesteps used by these authors are between 0.5 and 2 fs, with the degrees of freedom of the Drude oscillators kept cold at 1 K.
-* In both these force fields hydrogen atoms are treated as non-polarizable.
-
-The motion of of the Drude particles can be calculated by minimizing
-the energy of the induced dipoles at each timestep, by an interative,
-self-consistent procedure. The Drude particles can be massless and
-therefore do not contribute to the kinetic energy. However, the
-relaxed method is computationall slow. An extended-lagrangian method
-can be used to calculate the positions of the Drude particles, but
-this requires them to have mass. It is important in this case to
-decouple the degrees of freedom associated with the Drude oscillators
-from those of the normal atoms. Thermalizing the Drude dipoles at
-temperatures comparable to the rest of the simulation leads to several
-problems (kinetic energy transfer, very short timestep, etc.), which
-can be remediated by the "cold Drude" technique (:ref:`Lamoureux and Roux <Lamoureux>`).
-
-Two closely related models are used to represent polarization through
-"charges on a spring": the core-shell model and the Drude
-model. Although the basic idea is the same, the core-shell model is
-normally used for ionic/crystalline materials, whereas the Drude model
-is normally used for molecular systems and fluid states. In ionic
-crystals the symmetry around each ion and the distance between them
-are such that the core-shell model is sufficiently stable. But to be
-applicable to molecular/covalent systems the Drude model includes two
-important features:
-
-#. The possibility to thermostat the additional degrees of freedom associated with the induced dipoles at very low temperature, in terms of the reduced coordinates of the Drude particles with respect to their cores. This makes the trajectory close to that of relaxed induced dipoles.
-#. The Drude dipoles on covalently bonded atoms interact too strongly due to the short distances, so an atom may capture the Drude particle (shell) of a neighbor, or the induced dipoles within the same molecule may align too much. To avoid this, damping at short of the interactions between the point charges composing the induced dipole can be done by :ref:`Thole <Thole>` functions.
-
-
-----------
-
-
-**Preparation of the data file**
-
-The data file is similar to a standard LAMMPS data file for
-*atom_style full*\ . The DPs and the *harmonic bonds* connecting them
-to their DC should appear in the data file as normal atoms and bonds.
-
-You can use the *polarizer* tool (Python script distributed with the
-USER-DRUDE package) to convert a non-polarizable data file (here
-*data.102494.lmp*\ ) to a polarizable data file (\ *data-p.lmp*\ )
-
-.. parsed-literal::
-
- polarizer -q -f phenol.dff data.102494.lmp data-p.lmp
-
-This will automatically insert the new atoms and bonds.
-The masses and charges of DCs and DPs are computed
-from *phenol.dff*\ , as well as the DC-DP bond constants. The file
-*phenol.dff* contains the polarizabilities of the atom types
-and the mass of the Drude particles, for instance:
-
-.. parsed-literal::
-
- # units: kJ/mol, A, deg
- # kforce is in the form k/2 r_D^2
- # type m_D/u q_D/e k_D alpha/A3 thole
- OH 0.4 -1.0 4184.0 0.63 0.67
- CA 0.4 -1.0 4184.0 1.36 2.51
- CAI 0.4 -1.0 4184.0 1.09 2.51
-
-The hydrogen atoms are absent from this file, so they will be treated
-as non-polarizable atoms. In the non-polarizable data file
-*data.102494.lmp*\ , atom names corresponding to the atom type numbers
-have to be specified as comments at the end of lines of the *Masses*
-section. You probably need to edit it to add these names. It should
-look like
-
-.. parsed-literal::
-
- Masses
-
-.. parsed-literal::
-
- 1 12.011 # CAI
- 2 12.011 # CA
- 3 15.999 # OH
- 4 1.008 # HA
- 5 1.008 # HO
-
-
-----------
-
-
-**Basic input file**
-
-The atom style should be set to (or derive from) *full*\ , so that you
-can define atomic charges and molecular bonds, angles, dihedrals...
-
-The *polarizer* tool also outputs certain lines related to the input
-script (the use of these lines will be explained below). In order for
-LAMMPS to recognize that you are using Drude oscillators, you should
-use the fix *drude*\ . The command is
-
-.. parsed-literal::
-
- fix DRUDE all drude C C C N N D D D
-
-The N, C, D following the *drude* keyword have the following meaning:
-There is one tag for each atom type. This tag is C for DCs, D for DPs
-and N for non-polarizable atoms. Here the atom types 1 to 3 (C and O
-atoms) are DC, atom types 4 and 5 (H atoms) are non-polarizable and
-the atom types 6 to 8 are the newly created DPs.
-
-By recognizing the fix *drude*\ , LAMMPS will find and store matching
-DC-DP pairs and will treat DP as equivalent to their DC in the
-*special bonds* relations. It may be necessary to extend the space
-for storing such special relations. In this case extra space should
-be reserved by using the *extra* keyword of the *special_bonds*
-command. With our phenol, there is 1 more special neighbor for which
-space is required. Otherwise LAMMPS crashes and gives the required
-value.
-
-.. parsed-literal::
-
- special_bonds lj/coul 0.0 0.0 0.5 extra 1
-
-Let us assume we want to run a simple NVT simulation at 300 K. Note
-that Drude oscillators need to be thermalized at a low temperature in
-order to approximate a self-consistent field (SCF), therefore it is not
-possible to simulate an NVE ensemble with this package. Since dipoles
-are approximated by a charged DC-DP pair, the *pair_style* must
-include Coulomb interactions, for instance *lj/cut/coul/long* with
-*kspace_style pppm*\ . For example, with a cutoff of 10. and a precision
-1.e-4:
-
-.. parsed-literal::
-
- pair_style lj/cut/coul/long 10.0
- kspace_style pppm 1.0e-4
-
-As compared to the non-polarizable input file, *pair_coeff* lines need
-to be added for the DPs. Since the DPs have no Lennard-Jones
-interactions, their *epsilon* is 0. so the only *pair_coeff* line
-that needs to be added is
-
-.. parsed-literal::
-
- pair_coeff * 6* 0.0 0.0 # All-DPs
-
-Now for the thermalization, the simplest choice is to use the :doc:`fix langevin/drude <fix_langevin_drude>`.
-
-.. parsed-literal::
-
- fix LANG all langevin/drude 300. 100 12435 1. 20 13977
-
-This applies a Langevin thermostat at temperature 300. to the centers
-of mass of the DC-DP pairs, with relaxation time 100 and with random
-seed 12345. This fix applies also a Langevin thermostat at temperature
-1. to the relative motion of the DPs around their DCs, with relaxation
-time 20 and random seed 13977. Only the DCs and non-polarizable
-atoms need to be in this fix's group. LAMMPS will thermostate the DPs
-together with their DC. For this, ghost atoms need to know their
-velocities. Thus you need to add the following command:
-
-.. parsed-literal::
-
- comm_modify vel yes
-
-In order to avoid that the center of mass of the whole system
-drifts due to the random forces of the Langevin thermostat on DCs, you
-can add the *zero yes* option at the end of the fix line.
-
-If the fix *shake* is used to constrain the C-H bonds, it should be
-invoked after the fix *langevin/drude* for more accuracy.
-
-.. parsed-literal::
-
- fix SHAKE ATOMS shake 0.0001 20 0 t 4 5
-
-.. note::
-
- The group of the fix *shake* must not include the DPs. If the
- group *ATOMS* is defined by non-DPs atom types, you could use
-
-Since the fix *langevin/drude* does not perform time integration (just
-modification of forces but no position/velocity updates), the fix
-*nve* should be used in conjunction.
-
-.. parsed-literal::
-
- fix NVE all nve
-
-Finally, do not forget to update the atom type elements if you use
-them in a *dump_modify ... element ...* command, by adding the element
-type of the DPs. Here for instance
-
-.. parsed-literal::
-
- dump DUMP all custom 10 dump.lammpstrj id mol type element x y z ix iy iz
- dump_modify DUMP element C C O H H D D D
-
-The input file should now be ready for use!
-
-You will notice that the global temperature *thermo_temp* computed by
-LAMMPS is not 300. K as wanted. This is because LAMMPS treats DPs as
-standard atoms in his default compute. If you want to output the
-temperatures of the DC-DP pair centers of mass and of the DPs relative
-to their DCs, you should use the :doc:`compute temp_drude <compute_temp_drude>`
-
-.. parsed-literal::
-
- compute TDRUDE all temp/drude
-
-And then output the correct temperatures of the Drude oscillators
-using *thermo_style custom* with respectively *c_TDRUDE[1]* and
-*c_TDRUDE[2]*\ . These should be close to 300.0 and 1.0 on average.
-
-.. parsed-literal::
-
- thermo_style custom step temp c_TDRUDE[1] c_TDRUDE[2]
-
-
-----------
-
-
-**Thole screening**
-
-Dipolar interactions represented by point charges on springs may not
-be stable, for example if the atomic polarizability is too high for
-instance, a DP can escape from its DC and be captured by another DC,
-which makes the force and energy diverge and the simulation
-crash. Even without reaching this extreme case, the correlation
-between nearby dipoles on the same molecule may be exagerated. Often,
-special bond relations prevent bonded neighboring atoms to see the
-charge of each other's DP, so that the problem does not always appear.
-It is possible to use screened dipole dipole interactions by using the
-:doc:`\ *pair_style thole*\ <pair_thole>`. This is implemented as a
-correction to the Coulomb pair_styles, which dampens at short distance
-the interactions between the charges representing the induced dipoles.
-It is to be used as *hybrid/overlay* with any standard *coul* pair
-style. In our example, we would use
-
-.. parsed-literal::
-
- pair_style hybrid/overlay lj/cut/coul/long 10.0 thole 2.6 10.0
-
-This tells LAMMPS that we are using two pair_styles. The first one is
-as above (\ *lj/cut/coul/long 10.0*\ ). The second one is a *thole*
-pair_style with default screening factor 2.6 (:ref:`Noskov <Noskov>`) and
-cutoff 10.0.
-
-Since *hybrid/overlay* does not support mixing rules, the interaction
-coefficients of all the pairs of atom types with i < j should be
-explicitly defined. The output of the *polarizer* script can be used
-to complete the *pair_coeff* section of the input file. In our
-example, this will look like:
-
-.. parsed-literal::
-
- pair_coeff 1 1 lj/cut/coul/long 0.0700 3.550
- pair_coeff 1 2 lj/cut/coul/long 0.0700 3.550
- pair_coeff 1 3 lj/cut/coul/long 0.1091 3.310
- pair_coeff 1 4 lj/cut/coul/long 0.0458 2.985
- pair_coeff 2 2 lj/cut/coul/long 0.0700 3.550
- pair_coeff 2 3 lj/cut/coul/long 0.1091 3.310
- pair_coeff 2 4 lj/cut/coul/long 0.0458 2.985
- pair_coeff 3 3 lj/cut/coul/long 0.1700 3.070
- pair_coeff 3 4 lj/cut/coul/long 0.0714 2.745
- pair_coeff 4 4 lj/cut/coul/long 0.0300 2.420
- pair_coeff * 5 lj/cut/coul/long 0.0000 0.000
- pair_coeff * 6* lj/cut/coul/long 0.0000 0.000
- pair_coeff 1 1 thole 1.090 2.510
- pair_coeff 1 2 thole 1.218 2.510
- pair_coeff 1 3 thole 0.829 1.590
- pair_coeff 1 6 thole 1.090 2.510
- pair_coeff 1 7 thole 1.218 2.510
- pair_coeff 1 8 thole 0.829 1.590
- pair_coeff 2 2 thole 1.360 2.510
- pair_coeff 2 3 thole 0.926 1.590
- pair_coeff 2 6 thole 1.218 2.510
- pair_coeff 2 7 thole 1.360 2.510
- pair_coeff 2 8 thole 0.926 1.590
- pair_coeff 3 3 thole 0.630 0.670
- pair_coeff 3 6 thole 0.829 1.590
- pair_coeff 3 7 thole 0.926 1.590
- pair_coeff 3 8 thole 0.630 0.670
- pair_coeff 6 6 thole 1.090 2.510
- pair_coeff 6 7 thole 1.218 2.510
- pair_coeff 6 8 thole 0.829 1.590
- pair_coeff 7 7 thole 1.360 2.510
- pair_coeff 7 8 thole 0.926 1.590
- pair_coeff 8 8 thole 0.630 0.670
-
-For the *thole* pair style the coefficients are
-
-#. the atom polarizability in units of cubic length
-#. the screening factor of the Thole function (optional, default value
- specified by the pair_style command)
-* the cutoff (optional, default value defined by the pair_style command)
-The special neighbors have charge-charge and charge-dipole
-interactions screened by the *coul* factors of the *special_bonds*
-command (0.0, 0.0, and 0.5 in the example above). Without using the
-pair_style *thole*\ , dipole-dipole interactions are screened by the
-same factor. By using the pair_style *thole*\ , dipole-dipole
-interactions are screened by Thole's function, whatever their special
-relationship (except within each DC-DP pair of course). Consider for
-example 1-2 neighbors: using the pair_style *thole*\ , their dipoles
-will see each other (despite the *coul* factor being 0.) and the
-interactions between these dipoles will be damped by Thole's function.
-
-
-----------
-
-
-**Thermostats and barostats**
-
-Using a Nose-Hoover barostat with the *langevin/drude* thermostat is
-straightforward using fix *nph* instead of *nve*\ . For example:
-
-.. parsed-literal::
-
- fix NPH all nph iso 1. 1. 500
-
-It is also possible to use a Nose-Hoover instead of a Langevin
-thermostat. This requires to use :doc:`\ *fix drude/transform*\ <fix_drude_transform>` just before and after the
-time intergation fixes. The *fix drude/transform/direct* converts the
-atomic masses, positions, velocities and forces into a reduced
-representation, where the DCs transform into the centers of mass of
-the DC-DP pairs and the DPs transform into their relative position
-with respect to their DC. The *fix drude/transform/inverse* performs
-the reverse transformation. For a NVT simulation, with the DCs and
-atoms at 300 K and the DPs at 1 K relative to their DC one would use
-
-.. parsed-literal::
-
- fix DIRECT all drude/transform/direct
- fix NVT1 ATOMS nvt temp 300. 300. 100
- fix NVT2 DRUDES nvt temp 1. 1. 20
- fix INVERSE all drude/transform/inverse
-
-For our phenol example, the groups would be defined as
-
-.. parsed-literal::
-
- group ATOMS type 1 2 3 4 5 # DCs and non-polarizable atoms
- group CORES type 1 2 3 # DCs
- group DRUDES type 6 7 8 # DPs
-
-Note that with the fixes *drude/transform*\ , it is not required to
-specify *comm_modify vel yes* because the fixes do it anyway (several
-times and for the forces also). To avoid the flying ice cube artifact
-:ref:`(Lamoureux) <Lamoureux>`, where the atoms progressively freeze and the
-center of mass of the whole system drifts faster and faster, the *fix
-momentum* can be used. For instance:
-
-.. parsed-literal::
-
- fix MOMENTUM all momentum 100 linear 1 1 1
-
-It is a bit more tricky to run a NPT simulation with Nose-Hoover
-barostat and thermostat. First, the volume should be integrated only
-once. So the fix for DCs and atoms should be *npt* while the fix for
-DPs should be *nvt* (or vice versa). Second, the *fix npt* computes a
-global pressure and thus a global temperature whatever the fix group.
-We do want the pressure to correspond to the whole system, but we want
-the temperature to correspond to the fix group only. We must then use
-the *fix_modify* command for this. In the end, the block of
-instructions for thermostating and barostating will look like
-
-.. parsed-literal::
-
- compute TATOMS ATOMS temp
- fix DIRECT all drude/transform/direct
- fix NPT ATOMS npt temp 300. 300. 100 iso 1. 1. 500
- fix_modify NPT temp TATOMS press thermo_press
- fix NVT DRUDES nvt temp 1. 1. 20
- fix INVERSE all drude/transform/inverse
-
-
-----------
-
-
-**Rigid bodies**
-
-You may want to simulate molecules as rigid bodies (but polarizable).
-Common cases are water models such as :ref:`SWM4-NDP <SWM4-NDP>`, which is a
-kind of polarizable TIP4P water. The rigid bodies and the DPs should
-be integrated separately, even with the Langevin thermostat. Let us
-review the different thermostats and ensemble combinations.
-
-NVT ensemble using Langevin thermostat:
-
-.. parsed-literal::
-
- comm_modify vel yes
- fix LANG all langevin/drude 300. 100 12435 1. 20 13977
- fix RIGID ATOMS rigid/nve/small molecule
- fix NVE DRUDES nve
-
-NVT ensemble using Nose-Hoover thermostat:
-
-.. parsed-literal::
-
- fix DIRECT all drude/transform/direct
- fix RIGID ATOMS rigid/nvt/small molecule temp 300. 300. 100
- fix NVT DRUDES nvt temp 1. 1. 20
- fix INVERSE all drude/transform/inverse
-
-NPT ensemble with Langevin thermostat:
-
-.. parsed-literal::
-
- comm_modify vel yes
- fix LANG all langevin/drude 300. 100 12435 1. 20 13977
- fix RIGID ATOMS rigid/nph/small molecule iso 1. 1. 500
- fix NVE DRUDES nve
-
-NPT ensemble using Nose-Hoover thermostat:
-
-.. parsed-literal::
-
- compute TATOM ATOMS temp
- fix DIRECT all drude/transform/direct
- fix RIGID ATOMS rigid/npt/small molecule temp 300. 300. 100 iso 1. 1. 500
- fix_modify RIGID temp TATOM press thermo_press
- fix NVT DRUDES nvt temp 1. 1. 20
- fix INVERSE all drude/transform/inverse
-
-
-----------
-
-
-.. _Lamoureux:
-
-
-
-**(Lamoureux)** Lamoureux and Roux, J Chem Phys, 119, 3025-3039 (2003)
-
-.. _Schroeder:
-
-
-
-**(Schroeder)** Schroeder and Steinhauser, J Chem Phys, 133,
-154511 (2010).
-
-.. _Jiang:
-
-
-
-**(Jiang)** Jiang, Hardy, Phillips, MacKerell, Schulten, and Roux,
- J Phys Chem Lett, 2, 87-92 (2011).
-
-.. _Thole:
-
-
-
-**(Thole)** Chem Phys, 59, 341 (1981).
-
-.. _Noskov:
-
-
-
-**(Noskov)** Noskov, Lamoureux and Roux, J Phys Chem B, 109, 6705 (2005).
-
-.. _SWM4-NDP:
-
-
-
-**(SWM4-NDP)** Lamoureux, Harder, Vorobyov, Roux, MacKerell, Chem Phys
-Let, 418, 245-249 (2006)
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/tutorial_github.txt b/doc/html/_sources/tutorial_github.txt
deleted file mode 100644
index 586ac009d..000000000
--- a/doc/html/_sources/tutorial_github.txt
+++ /dev/null
@@ -1,248 +0,0 @@
-LAMMPS GitHub tutorial
-======================
-
-**written by Stefan Paquay**
-
-
-----------
-
-
-This document briefly describes how to use GitHub to merge changes you
-make into LAMMPS, using GitHub. It assumes that you are familiar with
-git. You may want to have a look at the `Git book <http://git-scm.com/book/>`_ to reacquaint yourself.
-
-
-----------
-
-
-**Making an account**
-
-First of all, you need a GitHub account. This is fairly simple, just
-go to `GitHub <https://github.com>`_ and create an account by clicking
-the ``Sign up for GitHub'' button. Once your account is created, you
-can sign in by clicking the button in the top left and filling in your
-username or e-mail address and password.
-
-
-----------
-
-
-**Forking the repository**
-
-To get changes into LAMMPS, you need to first fork the repository. At
-the time of writing, LAMMPS-ICMS is the preferred fork. Go to `LAMMPS on GitHub <https://github.com/lammps/lammps>`_ and make sure branch is
-set to ``lammps-icms'', see the figure below.
-
-.. image:: JPG/tutorial_branch.png
- :align: center
-
-Now, click on fork in the top right corner:
-
-.. image:: JPG/tutorial_fork.png
- :align: center
-
-This will create your own fork of the LAMMPS repository. You can make
-changes in this fork and later file *pull requests* to allow the
-upstream repository to merge changes from your own fork into the one
-we just forked from. At the same time, you can set things up, so you
-can include changes from upstream into your repository.
-
-
-----------
-
-
-**Adding changes to your own fork**
-
-Before adding changes, it is better to first create a new branch that
-will contain these changes, a so-called feature branch.
-
-**Feature branches**
-
-Since LAMMPS is such a big project and most user contributions come in
-small portions, the most ideal workflow for LAMMPS is the so-called
-``Feature branch'' workflow. It is explained in great detail here:
-`feature branch workflow <https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow>`_.
-
-The idea is that every new feature for LAMMPS gets its own
-branch. This way, it is fairly painless to incorporate new features
-into the upstream repository. I will explain briefly here how to do
-it. In this feature branch, I will add a USER-package.
-
-I assume that git is installed on the local machine and you know how
-to use a command line.
-
-First of all, you need to clone your own fork of LAMMPS:
-
-.. parsed-literal::
-
- $ git clone https://github.com/<your user name>/lammps.git
-
-You can find the proper url to the right of the "HTTPS" block, see figure.
-
-.. image:: JPG/tutorial_https_block.png
- :align: center
-
-The above command copies (``clones'') the git repository to your local
-machine. You can use this local clone to make changes and test them
-without interfering with the repository on github. First, however, it
-is recommended to make a new branch for a particular feature you would
-like added to LAMMPS. In this example, I will try adding a new
-USER-package called USER-MANIFOLD.
-
-To create a new branch, run the following git command in your repository:
-
-.. parsed-literal::
-
- $ git checkout -b add-user-manifold
-
-The name of this new branch is "add-user-manifold" in my case. Just
-name it after something that resembles the feature you want added to
-LAMMPS.
-
-Now that you've changed branches, you can edit the files as you see
-fit, add new files, and commit as much as you would like. Just
-remember that if halfway you decide to add another, unrelated feature,
-you should switch branches!
-
-After everything is done, add the files to the branch and commit them:
-
-.. parsed-literal::
-
- $ git add src/USER-MANIFOLD examples/USER/manifold/
- $ git add doc/fix_nv\ *t,e*\ _manifold_rattle.txt
- $ git add doc/fix_manifoldforce.txt doc/user_manifolds.txt
-
-After the files are added, the change should be comitted:
-
-.. parsed-literal::
-
- $ git commit -m 'Added user-manifold package'
-
-The "-m" switch is used to add a message to the commit. Use this to
-indicate what type of change was commited.
-
-**Wisdom by Axel**
-
-*"Do not use "git commit -a". the -a flag will automatically include
-*all* modified or new files. mercurial does that and it find it
-hugely annoying and often leading to accidental commits of files you
-don't want. use git add, git rm, git mv for adding, removing,
-renaming and then git commit to finalize the commit. personally, i
-find it very convenient to use the bundled gui for commits, i.e. git
-gui. typically, i will do git add and other operations, but then
-verify and review them with git gui. git gui also allows to do
-line-by-line unstaging and other convenient operations."*
-
-After the commit, the changes can be pushed to the same branch on GitHub:
-
-.. parsed-literal::
-
- $ git push
-
-Git will ask you for your user name and password on GitHub if you have
-not configured anything. If you correctly type your user name and
-password, the change should be added to your fork on GitHub.
-
-If you want to make really sure you push to the right repository
-(which is good practice), you can provide it explicitly:
-
-.. parsed-literal::
-
- $ git push origin
-
-or using an explicit URL:
-
-.. parsed-literal::
-
- $ git push git@github.com:Pakketeretet2/lammps.git
-
-After that, you can file a new pull request based on this
-branch. GitHub will now look like this:
-
-.. image:: JPG/tutorial_pull_request_feature_branch1.png
- :align: center
-
-Make sure that the current branch is set to the correct one, which, in
-this case, is "add-user-manifold". Now click "New pull request". If
-done correctly, the only changes you will see are those that were made
-on this branch, so in my case, I will see nothing related to
-$\mathrm*pair\_dzugatov*.$
-
-This will open up a new window that lists changes made to the
-repository. If you are just adding new files, there is not much to do,
-but I suppose merge conflicts are to be resolved here if there are
-changes in existing files. If all changes can automatically be merged,
-green text at the top will say so and you can click the "Create pull
-request" button, see image.
-
-.. image:: JPG/tutorial_pull_request2.png
- :align: center
-
-After this you have to specify a short title and a comment with
-details about your pull request. I guess here you write what your
-modifications do and why they should be incorporated upstream. After
-that, click the "Create pull request" button, see image below.
-
-.. image:: JPG/tutorial_pull_request3.png
- :align: center
-
-Now just write some nice comments, click "Comment", and that is it. It
-is now up to the maintainer(s) of the upstream repository to
-incorporate the changes into the repository and to close the pull
-request.
-
-.. image:: JPG/tutorial_pull_request4.png
- :align: center
-
-
-----------
-
-
-**Additional changes**
-
-Before the pull request is accepted, any additional changes you push
-into your repository will automatically become part of the pull
-request.
-
-
-----------
-
-
-**After a merge**
-
-When everything is fine the feature branch is merged into the LAMMPS
-repositories:
-
-.. image:: JPG/tutorial_merged.png
- :align: center
-
-Now one question remains: What to do with the feature branch that got
-merged into upstream?
-
-It is in principle safe to delete them from your own fork. This helps
-keep it a bit more tidy. Note that you first have to switch to another
-branch!
-
-.. parsed-literal::
-
- $ git checkout lammps-icms
- $ git pull lammps-icms
- $ git branch -d add-user-manifold
-
-If you do not pull first, it is not really a problem but git will warn
-you at the next statement that you are deleting a local branch that
-was not yet fully merged into HEAD. This is because git does not yet
-know your branch just got merged into lammps-icms upstream. If you
-first delete and then pull, everything should still be fine.
-
-Finally, if you delete the branch locally, you might want to push this
-to your remote(s) as well:
-
-.. parsed-literal::
-
- $ git push origin :add-user-manifold
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/uncompute.txt b/doc/html/_sources/uncompute.txt
deleted file mode 100644
index 88b06b8e7..000000000
--- a/doc/html/_sources/uncompute.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-.. index:: uncompute
-
-uncompute command
-=================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- uncompute compute-ID
-
-* compute-ID = ID of a previously defined compute
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- uncompute 2
- uncompute lower-boundary
-
-Description
-"""""""""""
-
-Delete a compute that was previously defined with a :doc:`compute <compute>`
-command. This also wipes out any additional changes made to the compute
-via the :doc:`compute_modify <compute_modify>` command.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`compute <compute>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/undump.txt b/doc/html/_sources/undump.txt
deleted file mode 100644
index 584e2e7a6..000000000
--- a/doc/html/_sources/undump.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-.. index:: undump
-
-undump command
-==============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- undump dump-ID
-
-* dump-ID = ID of previously defined dump
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- undump mine
- undump 2
-
-Description
-"""""""""""
-
-Turn off a previously defined dump so that it is no longer active.
-This closes the file associated with the dump.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`dump <dump>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/unfix.txt b/doc/html/_sources/unfix.txt
deleted file mode 100644
index 23400f454..000000000
--- a/doc/html/_sources/unfix.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-.. index:: unfix
-
-unfix command
-=============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- unfix fix-ID
-
-* fix-ID = ID of a previously defined fix
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- unfix 2
- unfix lower-boundary
-
-Description
-"""""""""""
-
-Delete a fix that was previously defined with a :doc:`fix <fix>`
-command. This also wipes out any additional changes made to the fix
-via the :doc:`fix_modify <fix_modify>` command.
-
-Restrictions
-""""""""""""
- none
-
-Related commands
-""""""""""""""""
-
-:doc:`fix <fix>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/units.txt b/doc/html/_sources/units.txt
deleted file mode 100644
index 8390cf53a..000000000
--- a/doc/html/_sources/units.txt
+++ /dev/null
@@ -1,235 +0,0 @@
-.. index:: units
-
-units command
-=============
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- units style
-
-* style = *lj* or *real* or *metal* or *si* or *cgs* or *electron* or *micro* or *nano*
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- units metal
- units lj
-
-Description
-"""""""""""
-
-This command sets the style of units used for a simulation. It
-determines the units of all quantities specified in the input script
-and data file, as well as quantities output to the screen, log file,
-and dump files. Typically, this command is used at the very beginning
-of an input script.
-
-For all units except *lj*\ , LAMMPS uses physical constants from
-www.physics.nist.gov. For the definition of Kcal in real units,
-LAMMPS uses the thermochemical calorie = 4.184 J.
-
-The choice you make for units simply sets some internal conversion
-factors within LAMMPS. This means that any simulation you perform for
-one choice of units can be duplicated with any other unit setting
-LAMMPS supports. In this context "duplicate" means the particles will
-have identical trajectories and all output generated by the simulation
-will be identical. This will be the case for some number of timesteps
-until round-off effects accumulate, since the conversion factors for
-two different unit systems are not identical to infinite precision.
-
-To perform the same simulation in a different set of units you must
-change all the unit-based input parameters in your input script and
-other input files (data file, potential files, etc) correctly to the
-new units. And you must correctly convert all output from the new
-units to the old units when comparing to the original results. That
-is often not simple to do.
-
-
-----------
-
-
-For style *lj*\ , all quantities are unitless. Without loss of
-generality, LAMMPS sets the fundamental quantities mass, sigma,
-epsilon, and the Boltzmann constant = 1. The masses, distances,
-energies you specify are multiples of these fundamental values. The
-formulas relating the reduced or unitless quantity (with an asterisk)
-to the same quantity with units is also given. Thus you can use the
-mass & sigma & epsilon values for a specific material and convert the
-results from a unitless LJ simulation into physical quantities.
-
-* mass = mass or m
-* distance = sigma, where x* = x / sigma
-* time = tau, where t* = t (epsilon / m / sigma^2)^1/2
-* energy = epsilon, where E* = E / epsilon
-* velocity = sigma/tau, where v* = v tau / sigma
-* force = epsilon/sigma, where f* = f sigma / epsilon
-* torque = epsilon, where t* = t / epsilon
-* temperature = reduced LJ temperature, where T* = T Kb / epsilon
-* pressure = reduced LJ pressure, where P* = P sigma^3 / epsilon
-* dynamic viscosity = reduced LJ viscosity, where eta* = eta sigma^3 / epsilon / tau
-* charge = reduced LJ charge, where q* = q / (4 pi perm0 sigma epsilon)^1/2
-* dipole = reduced LJ dipole, moment where *mu = mu / (4 pi perm0 sigma^3 epsilon)^1/2
-* electric field = force/charge, where E* = E (4 pi perm0 sigma epsilon)^1/2 sigma / epsilon
-* density = mass/volume, where rho* = rho sigma^dim
-
-Note that for LJ units, the default mode of thermodyamic output via
-the :doc:`thermo_style <thermo_style>` command is to normalize all
-extensive quantities by the number of atoms. E.g. potential energy is
-extensive because it is summed over atoms, so it is output as
-energy/atom. Temperature is intensive since it is already normalized
-by the number of atoms, so it is output as-is. This behavior can be
-changed via the :doc:`thermo_modify norm <thermo_modify>` command.
-
-For style *real*\ , these are the units:
-
-* mass = grams/mole
-* distance = Angstroms
-* time = femtoseconds
-* energy = Kcal/mole
-* velocity = Angstroms/femtosecond
-* force = Kcal/mole-Angstrom
-* torque = Kcal/mole
-* temperature = Kelvin
-* pressure = atmospheres
-* dynamic viscosity = Poise
-* charge = multiple of electron charge (1.0 is a proton)
-* dipole = charge*Angstroms
-* electric field = volts/Angstrom
-* density = gram/cm^dim
-
-For style *metal*\ , these are the units:
-
-* mass = grams/mole
-* distance = Angstroms
-* time = picoseconds
-* energy = eV
-* velocity = Angstroms/picosecond
-* force = eV/Angstrom
-* torque = eV
-* temperature = Kelvin
-* pressure = bars
-* dynamic viscosity = Poise
-* charge = multiple of electron charge (1.0 is a proton)
-* dipole = charge*Angstroms
-* electric field = volts/Angstrom
-* density = gram/cm^dim
-
-For style *si*\ , these are the units:
-
-* mass = kilograms
-* distance = meters
-* time = seconds
-* energy = Joules
-* velocity = meters/second
-* force = Newtons
-* torque = Newton-meters
-* temperature = Kelvin
-* pressure = Pascals
-* dynamic viscosity = Pascal*second
-* charge = Coulombs (1.6021765e-19 is a proton)
-* dipole = Coulombs*meters
-* electric field = volts/meter
-* density = kilograms/meter^dim
-
-For style *cgs*\ , these are the units:
-
-* mass = grams
-* distance = centimeters
-* time = seconds
-* energy = ergs
-* velocity = centimeters/second
-* force = dynes
-* torque = dyne-centimeters
-* temperature = Kelvin
-* pressure = dyne/cm^2 or barye = 1.0e-6 bars
-* dynamic viscosity = Poise
-* charge = statcoulombs or esu (4.8032044e-10 is a proton)
-* dipole = statcoul-cm = 10^18 debye
-* electric field = statvolt/cm or dyne/esu
-* density = grams/cm^dim
-
-For style *electron*\ , these are the units:
-
-* mass = atomic mass units
-* distance = Bohr
-* time = femtoseconds
-* energy = Hartrees
-* velocity = Bohr/atomic time units [1.03275e-15 seconds]
-* force = Hartrees/Bohr
-* temperature = Kelvin
-* pressure = Pascals
-* charge = multiple of electron charge (1.0 is a proton)
-* dipole moment = Debye
-* electric field = volts/cm
-
-For style *micro*\ , these are the units:
-
-* mass = picograms
-* distance = micrometers
-* time = microseconds
-* energy = picogram-micrometer^2/microsecond^2
-* velocity = micrometers/microsecond
-* force = picogram-micrometer/microsecond^2
-* torque = picogram-micrometer^2/microsecond^2
-* temperature = Kelvin
-* pressure = picogram/(micrometer-microsecond^2)
-* dynamic viscosity = picogram/(micrometer-microsecond)
-* charge = picocoulombs (1.6021765e-7 is a proton)
-* dipole = picocoulomb-micrometer
-* electric field = volt/micrometer
-* density = picograms/micrometer^dim
-
-For style *nano*\ , these are the units:
-
-* mass = attograms
-* distance = nanometers
-* time = nanoseconds
-* energy = attogram-nanometer^2/nanosecond^2
-* velocity = nanometers/nanosecond
-* force = attogram-nanometer/nanosecond^2
-* torque = attogram-nanometer^2/nanosecond^2
-* temperature = Kelvin
-* pressure = attogram/(nanometer-nanosecond^2)
-* dynamic viscosity = attogram/(nanometer-nanosecond)
-* charge = multiple of electron charge (1.0 is a proton)
-* dipole = charge-nanometer
-* electric field = volt/nanometer
-* density = attograms/nanometer^dim
-
-The units command also sets the timestep size and neighbor skin
-distance to default values for each style:
-
-* For style *lj* these are dt = 0.005 tau and skin = 0.3 sigma.
-* For style *real* these are dt = 1.0 fmsec and skin = 2.0 Angstroms.
-* For style *metal* these are dt = 0.001 psec and skin = 2.0 Angstroms.
-* For style *si* these are dt = 1.0e-8 sec and skin = 0.001 meters.
-* For style *cgs* these are dt = 1.0e-8 sec and skin = 0.1 cm.
-* For style *electron* these are dt = 0.001 fmsec and skin = 2.0 Bohr.
-* For style *micro* these are dt = 2.0 microsec and skin = 0.1 micrometers.
-* For style *nano* these are dt = 0.00045 nanosec and skin = 0.1 nanometers.
-
-Restrictions
-""""""""""""
-
-
-This command cannot be used after the simulation box is defined by a
-:doc:`read_data <read_data>` or :doc:`create_box <create_box>` command.
-
-**Related commands:** none
-
-Default
-"""""""
-
-.. parsed-literal::
-
- units lj
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/variable.txt b/doc/html/_sources/variable.txt
deleted file mode 100644
index 46d7c60c4..000000000
--- a/doc/html/_sources/variable.txt
+++ /dev/null
@@ -1,1419 +0,0 @@
-.. index:: variable
-
-variable command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- variable name style args ...
-
-* name = name of variable to define
-* style = *delete* or *index* or *loop* or *world* or *universe* or *uloop* or *string* or *format* or *getenv* or *file* or *atomfile* or *python* or *internal* or *equal* or *vector* or *atom*
-.. parsed-literal::
-
- *delete* = no args
- *index* args = one or more strings
- *loop* args = N
- N = integer size of loop, loop from 1 to N inclusive
- *loop* args = N pad
- N = integer size of loop, loop from 1 to N inclusive
- pad = all values will be same length, e.g. 001, 002, ..., 100
- *loop* args = N1 N2
- N1,N2 = loop from N1 to N2 inclusive
- *loop* args = N1 N2 pad
- N1,N2 = loop from N1 to N2 inclusive
- pad = all values will be same length, e.g. 050, 051, ..., 100
- *world* args = one string for each partition of processors
- *universe* args = one or more strings
- *uloop* args = N
- N = integer size of loop
- *uloop* args = N pad
- N = integer size of loop
- pad = all values will be same length, e.g. 001, 002, ..., 100
- *string* arg = one string
- *format* args = vname fstr
- vname = name of equal-style variable to evaluate
- fstr = C-style format string
- *getenv* arg = one string
- *file* arg = filename
- *atomfile* arg = filename
- *python* arg = function
- *internal* arg = numeric value
- *equal* or *vector* or *atom* args = one formula containing numbers, thermo keywords, math operations, group functions, atom values and vectors, compute/fix/variable references
- numbers = 0.0, 100, -5.4, 2.8e-4, etc
- constants = PI, version, on, off, true, false, yes, no
- thermo keywords = vol, ke, press, etc from :doc:`thermo_style <thermo_style>`
- math operators = (), -x, x+y, x-y, x*y, x/y, x^y, x%y,
- x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x
- math functions = sqrt(x), exp(x), ln(x), log(x), abs(x),
- sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x),
- random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x)
- ramp(x,y), stagger(x,y), logfreq(x,y,z), logfreq2(x,y,z),
- stride(x,y,z), stride2(x,y,z,a,b,c),
- vdisplace(x,y), swiggle(x,y,z), cwiggle(x,y,z)
- group functions = count(group), mass(group), charge(group),
- xcm(group,dim), vcm(group,dim), fcm(group,dim),
- bound(group,dir), gyration(group), ke(group),
- angmom(group,dim), torque(group,dim),
- inertia(group,dimdim), omega(group,dim)
- region functions = count(group,region), mass(group,region), charge(group,region),
- xcm(group,dim,region), vcm(group,dim,region), fcm(group,dim,region),
- bound(group,dir,region), gyration(group,region), ke(group,reigon),
- angmom(group,dim,region), torque(group,dim,region),
- inertia(group,dimdim,region), omega(group,dim,region)
- special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x)
- feature functions = is_active(category,feature,exact), is_defined(category,id,exact)
- atom value = id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i], q[i]
- atom vector = id, mass, type, mol, x, y, z, vx, vy, vz, fx, fy, fz, q
- compute references = c_ID, c_ID[i], c_ID[i][j], C_ID, C_ID[i]
- fix references = f_ID, f_ID[i], f_ID[i][j], F_ID, F_ID[i]
- variable references = v_name, v_name[i]
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- variable x index run1 run2 run3 run4 run5 run6 run7 run8
- variable LoopVar loop $n
- variable beta equal temp/3.0
- variable b1 equal x[234]+0.5*vol
- variable b1 equal "x[234] + 0.5*vol"
- variable b equal xcm(mol1,x)/2.0
- variable b equal c_myTemp
- variable b atom x*y/vol
- variable foo string myfile
- variable foo internal 3.5
- variable myPy python increase
- variable f file values.txt
- variable temp world 300.0 310.0 320.0 ${Tfinal}
- variable x universe 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
- variable x uloop 15 pad
- variable str format x %.6g
- variable x delete
-
-Description
-"""""""""""
-
-This command assigns one or more strings to a variable name for
-evaluation later in the input script or during a simulation.
-
-Variables can thus be useful in several contexts. A variable can be
-defined and then referenced elsewhere in an input script to become
-part of a new input command. For variable styles that store multiple
-strings, the :doc:`next <next>` command can be used to increment which
-string is assigned to the variable. Variables of style *equal* store
-a formula which when evaluated produces a single numeric value which
-can be output either directly (see the :doc:`print <print>`, :doc:`fix print <fix_print>`, and :doc:`run every <run>` commands) or as part
-of thermodynamic output (see the :doc:`thermo_style <thermo_style>`
-command), or used as input to an averaging fix (see the :doc:`fix ave/time <fix_ave_time>` command). Variables of style *vector*
-store a formula which produces a vector of such values which can be
-used as input to various averaging fixes, or elements of which can be
-part of thermodynamic output. Variables of style *atom* store a
-formula which when evaluated produces one numeric value per atom which
-can be output to a dump file (see the :doc:`dump custom <dump>` command)
-or used as input to an averaging fix (see the :doc:`fix ave/chunk <fix_ave_chunk>` and :doc:`fix ave/atom <fix_ave_atom>`
-commands). Variables of style *atomfile* can be used anywhere in an
-input script that atom-style variables are used; they get their
-per-atom values from a file rather than from a formula. Variables of
-style *python* can be hooked to Python functions using code you
-provide, so that the variable gets its value from the evaluation of
-the Python code. Variables of style *internal* are used by a few
-commands which set their value directly.
-
-.. note::
-
- As discussed in :ref:`Section 3.2 <cmd_2>` of the
- manual, an input script can use "immediate" variables, specified as
- $(formula) with parenthesis, where the formula has the same syntax as
- equal-style variables described on this page. This is a convenient
- way to evaluate a formula immediately without using the variable
- command to define a named variable and then evaluate that
- variable. See below for a more detailed discussion of this feature.
-
-In the discussion that follows, the "name" of the variable is the
-arbitrary string that is the 1st argument in the variable command.
-This name can only contain alphanumeric characters and underscores.
-The "string" is one or more of the subsequent arguments. The "string"
-can be simple text as in the 1st example above, it can contain other
-variables as in the 2nd example, or it can be a formula as in the 3rd
-example. The "value" is the numeric quantity resulting from
-evaluation of the string. Note that the same string can generate
-different values when it is evaluated at different times during a
-simulation.
-
-.. note::
-
- When an input script line is encountered that defines a variable
- of style *equal* or *vector* or *atom* or *python* that contains a
- formula or Python code, the formula is NOT immediately evaluated. It
- will be evaluated every time when the variable is **used** instead. If
- you simply want to evaluate a formula in place you can use as
- so-called. See the section below about "Immediate Evaluation of
- Variables" for more details on the topic. This is also true of a
- *format* style variable since it evaluates another variable when it is
- invoked.
-
-Variables of style *equal* and *vector* and *atom* can be used as
-inputs to various other commands which evaluate their formulas as
-needed, e.g. at different timesteps during a :doc:`run <run>`.
-
-Variables of style *internal* can be used in place of an equal-style
-variable, except by commands that set the value stored by the
-internal-style variable. Thus any command that states it can use an
-equal-style variable as an argument, can also use an internal-style
-variable. This means that when the command evaluates the variable, it
-will use the value set (internally) by another command.
-
-Variables of style *python* can be used in place of an equal-style
-variable so long as the associated Python function, as defined by the
-:doc:`python <python>` command, returns a numeric value. Thus any
-command that states it can use an equal-style variable as an argument,
-can also use such a python-style variable. This means that when the
-LAMMPS command evaluates the variable, the Python function will be
-executed.
-
-.. note::
-
- When a variable command is encountered in the input script and
- the variable name has already been specified, the command is ignored.
- This means variables can NOT be re-defined in an input script (with
- two exceptions, read further). This is to allow an input script to be
- processed multiple times without resetting the variables; see the
- :doc:`jump <jump>` or :doc:`include <include>` commands. It also means
- that using the :ref:`command-line switch <start_7>` -var
- will override a corresponding index variable setting in the input
- script.
-
-There are two exceptions to this rule. First, variables of style
-*string*\ , *getenv*\ , *internal*\ , *equal*\ , *vector*\ , *atom*\ , and
-*python* ARE redefined each time the command is encountered. This
-allows these style of variables to be redefined multiple times in an
-input script. In a loop, this means the formula associated with an
-*equal* or *atom* style variable can change if it contains a
-substitution for another variable, e.g. $x or v_x.
-
-Second, as described below, if a variable is iterated on to the end of
-its list of strings via the :doc:`next <next>` command, it is removed
-from the list of active variables, and is thus available to be
-re-defined in a subsequent variable command. The *delete* style does
-the same thing.
-
-
-----------
-
-
-:ref:`This section <cmd_2>` of the manual explains how
-occurrences of a variable name in an input script line are replaced by
-the variable's string. The variable name can be referenced as $x if
-the name "x" is a single character, or as ${LoopVar} if the name
-"LoopVar" is one or more characters.
-
-As described below, for variable styles *index*\ , *loop*\ , *file*\ ,
-*universe*\ , and *uloop*\ , which string is assigned to a variable can be
-incremented via the :doc:`next <next>` command. When there are no more
-strings to assign, the variable is exhausted and a flag is set that
-causes the next :doc:`jump <jump>` command encountered in the input
-script to be skipped. This enables the construction of simple loops
-in the input script that are iterated over and then exited from.
-
-As explained above, an exhausted variable can be re-used in an input
-script. The *delete* style also removes the variable, the same as if
-it were exhausted, allowing it to be redefined later in the input
-script or when the input script is looped over. This can be useful
-when breaking out of a loop via the :doc:`if <if>` and :doc:`jump <jump>`
-commands before the variable would become exhausted. For example,
-
-.. parsed-literal::
-
- label loop
- variable a loop 5
- print "A = $a"
- if "$a > 2" then "jump in.script break"
- next a
- jump in.script loop
- label break
- variable a delete
-
-
-----------
-
-
-This section describes how all the various variable styles are defined
-and what they store. Except for the *equal* and *vector* and *atom*
-styles, which are explained in the next section.
-
-Many of the styles store one or more strings. Note that a single
-string can contain spaces (multiple words), if it is enclosed in
-quotes in the variable command. When the variable is substituted for
-in another input script command, its returned string will then be
-interpreted as multiple arguments in the expanded command.
-
-For the *index* style, one or more strings are specified. Initially,
-the 1st string is assigned to the variable. Each time a
-:doc:`next <next>` command is used with the variable name, the next
-string is assigned. All processors assign the same string to the
-variable.
-
-*Index* style variables with a single string value can also be set by
-using the command-line switch -var; see :ref:`this section <start_7>` for details.
-
-The *loop* style is identical to the *index* style except that the
-strings are the integers from 1 to N inclusive, if only one argument N
-is specified. This allows generation of a long list of runs
-(e.g. 1000) without having to list N strings in the input script.
-Initially, the string "1" is assigned to the variable. Each time a
-:doc:`next <next>` command is used with the variable name, the next
-string ("2", "3", etc) is assigned. All processors assign the same
-string to the variable. The *loop* style can also be specified with
-two arguments N1 and N2. In this case the loop runs from N1 to N2
-inclusive, and the string N1 is initially assigned to the variable.
-N1 <= N2 and N2 >= 0 is required.
-
-For the *world* style, one or more strings are specified. There must
-be one string for each processor partition or "world". See :ref:`this section <start_7>` of the manual for information on
-running LAMMPS with multiple partitions via the "-partition"
-command-line switch. This variable command assigns one string to each
-world. All processors in the world are assigned the same string. The
-next command cannot be used with *equal* style variables, since there
-is only one value per world. This style of variable is useful when
-you wish to run different simulations on different partitions, or when
-performing a parallel tempering simulation (see the
-:doc:`temper <temper>` command), to assign different temperatures to
-different partitions.
-
-For the *universe* style, one or more strings are specified. There
-must be at least as many strings as there are processor partitions or
-"worlds". See :ref:`this page <start_7>` for information
-on running LAMMPS with multiple partitions via the "-partition"
-command-line switch. This variable command initially assigns one
-string to each world. When a :doc:`next <next>` command is encountered
-using this variable, the first processor partition to encounter it, is
-assigned the next available string. This continues until all the
-variable strings are consumed. Thus, this command can be used to run
-50 simulations on 8 processor partitions. The simulations will be run
-one after the other on whatever partition becomes available, until
-they are all finished. *Universe* style variables are incremented
-using the files "tmp.lammps.variable" and "tmp.lammps.variable.lock"
-which you will see in your directory during such a LAMMPS run.
-
-The *uloop* style is identical to the *universe* style except that the
-strings are the integers from 1 to N. This allows generation of long
-list of runs (e.g. 1000) without having to list N strings in the input
-script.
-
-For the *string* style, a single string is assigned to the variable.
-The only difference between this and using the *index* style with a
-single string is that a variable with *string* style can be redefined.
-E.g. by another command later in the input script, or if the script is
-read again in a loop.
-
-For the *format* style, an equal-style variable is specified along
-with a C-style format string, e.g. "%f" or "%.10g", which must be
-appropriate for formatting a double-precision floating-point value.
-This allows an equal-style variable to be formatted specifically for
-output as a string, e.g. by the :doc:`print <print>` command, if the
-default format "%.15g" has too much precision.
-
-For the *getenv* style, a single string is assigned to the variable
-which should be the name of an environment variable. When the
-variable is evaluated, it returns the value of the environment
-variable, or an empty string if it not defined. This style of
-variable can be used to adapt the behavior of LAMMPS input scripts via
-environment variable settings, or to retrieve information that has
-been previously stored with the :doc:`shell putenv <shell>` command.
-Note that because environment variable settings are stored by the
-operating systems, they persist beyond a :doc:`clear <clear>` command.
-
-For the *file* style, a filename is provided which contains a list of
-strings to assign to the variable, one per line. The strings can be
-numeric values if desired. See the discussion of the next() function
-below for equal-style variables, which will convert the string of a
-file-style variable into a numeric value in a formula.
-
-When a file-style variable is defined, the file is opened and the
-string on the first line is read and stored with the variable. This
-means the variable can then be evaluated as many times as desired and
-will return that string. There are two ways to cause the next string
-from the file to be read: use the :doc:`next <next>` command or the
-next() function in an equal- or atom-style variable, as discussed
-below.
-
-The rules for formatting the file are as follows. A comment character
-"#" can be used anywhere on a line; text starting with the comment
-character is stripped. Blank lines are skipped. The first "word" of
-a non-blank line, delimited by white space, is the "string" assigned
-to the variable.
-
-For the *atomfile* style, a filename is provided which contains one or
-more sets of values, to assign on a per-atom basis to the variable.
-The format of the file is described below.
-
-When an atomfile-style variable is defined, the file is opened and the
-first set of per-atom values are read and stored with the variable.
-This means the variable can then be evaluated as many times as desired
-and will return those values. There are two ways to cause the next
-set of per-atom values from the file to be read: use the
-:doc:`next <next>` command or the next() function in an atom-style
-variable, as discussed below.
-
-The rules for formatting the file are as follows. Each time a set of
-per-atom values is read, a non-blank line is searched for in the file.
-A comment character "#" can be used anywhere on a line; text starting
-with the comment character is stripped. Blank lines are skipped. The
-first "word" of a non-blank line, delimited by white space, is read as
-the count N of per-atom lines to immediately follow. N can be be the
-total number of atoms in the system, or only a subset. The next N
-lines have the following format
-
-.. parsed-literal::
-
- ID value
-
-where ID is an atom ID and value is the per-atom numeric value that
-will be assigned to that atom. IDs can be listed in any order.
-
-.. note::
-
- Every time a set of per-atom lines is read, the value for all
- atoms is first set to 0.0. Thus values for atoms whose ID does not
- appear in the set, will remain 0.0.
-
-For the *python* style a Python function name is provided. This needs
-to match a function name specified in a :doc:`python <python>` command
-which returns a value to this variable as defined by its *return*
-keyword. For example these two commands would be self-consistent:
-
-.. parsed-literal::
-
- variable foo python myMultiply
- python myMultiply return v_foo format f file funcs.py
-
-The two commands can appear in either order so long as both are
-specified before the Python function is invoked for the first time.
-
-Each time the variable is evaluated, the associated Python function is
-invoked, and the value it returns is also returned by the variable.
-Since the Python function can use other LAMMPS variables as input, or
-query interal LAMMPS quantities to perform its computation, this means
-the variable can return a different value each time it is evaluated.
-
-The type of value stored in the variable is determined by the *format*
-keyword of the :doc:`python <python>` command. It can be an integer
-(i), floating point (f), or string (s) value. As mentioned above, if
-it is a numeric value (integer or floating point), then the
-python-style variable can be used in place of an equal-style variable
-anywhere in an input script, e.g. as an argument to another command
-that allows for equal-style variables.
-
-For the *internal* style a numeric value is provided. This value will
-be assigned to the variable until a LAMMPS command sets it to a new
-value. There are currently only two LAMMPS commands that require
-*internal* variables as inputs, because they reset them:
-:doc:`create_atoms <create_atoms>` and :doc:`fix controller <fix_controller>`. As mentioned above, an
-internal-style variable can be used in place of an equal-style
-variable anywhere else in an input script, e.g. as an argument to
-another command that allows for equal-style variables.
-
-
-----------
-
-
-For the *equal* and *vector* and *atom* styles, a single string is
-specified which represents a formula that will be evaluated afresh
-each time the variable is used. If you want spaces in the string,
-enclose it in double quotes so the parser will treat it as a single
-argument. For *equal*\ -style variables the formula computes a scalar
-quantity, which becomes the value of the variable whenever it is
-evaluated. For *vector*\ -style variables the formula must compute a
-vector of quantities, which becomes the value of the variable whenever
-it is evaluated. The calculated vector can be on length one, but it
-cannot be a simple scalar value like that produced by an equal-style
-compute. I.e. the formula for a vector-style variable must have at
-least one quantity in it that refers to a global vector produced by a
-compute, fix, or other vector-style variable. For *atom*\ -style
-variables the formula computes one quantity for each atom whenever it
-is evaluated.
-
-Note that *equal*\ , *vector*\ , and *atom* variables can produce
-different values at different stages of the input script or at
-different times during a run. For example, if an *equal* variable is
-used in a :doc:`fix print <fix_print>` command, different values could
-be printed each timestep it was invoked. If you want a variable to be
-evaluated immediately, so that the result is stored by the variable
-instead of the string, see the section below on "Immediate Evaluation
-of Variables".
-
-The next command cannot be used with *equal* or *vector* or *atom*
-style variables, since there is only one string.
-
-The formula for an *equal*\ , *vector*\ , or *atom* variable can contain a
-variety of quantities. The syntax for each kind of quantity is
-simple, but multiple quantities can be nested and combined in various
-ways to build up formulas of arbitrary complexity. For example, this
-is a valid (though strange) variable formula:
-
-.. parsed-literal::
-
- variable x equal "pe + c_MyTemp / vol^(1/3)"
-
-Specifically, a formula can contain numbers, constants, thermo
-keywords, math operators, math functions, group functions, region
-functions, atom values, atom vectors, compute references, fix
-references, and references to other variables.
-
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Number | 0.2, 100, 1.0e20, -15.4, etc |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Constant | PI, version, on, off, true, false, yes, no |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Thermo keywords | vol, pe, ebond, etc |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Math operators | (), -x, x+y, x-y, x*y, x/y, x^y, x%y, x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Math functions | sqrt(x), exp(x), ln(x), log(x), abs(x), sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x), random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x), ramp(x,y), stagger(x,y), logfreq(x,y,z), logfreq2(x,y,z), stride(x,y,z), stride2(x,y,z,a,b,c), vdisplace(x,y), swiggle(x,y,z), cwiggle(x,y,z) |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Group functions | count(ID), mass(ID), charge(ID), xcm(ID,dim), vcm(ID,dim), fcm(ID,dim), bound(ID,dir), gyration(ID), ke(ID), angmom(ID,dim), torque(ID,dim), inertia(ID,dimdim), omega(ID,dim) |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Region functions | count(ID,IDR), mass(ID,IDR), charge(ID,IDR), xcm(ID,dim,IDR), vcm(ID,dim,IDR), fcm(ID,dim,IDR), bound(ID,dir,IDR), gyration(ID,IDR), ke(ID,IDR), angmom(ID,dim,IDR), torque(ID,dim,IDR), inertia(ID,dimdim,IDR), omega(ID,dim,IDR) |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Special functions | sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x) |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Atom values | id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i], q[i] |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Atom vectors | id, mass, type, mol, x, y, z, vx, vy, vz, fx, fy, fz, q |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Compute references | c_ID, c_ID[i], c_ID[i][j], C_ID, C_ID[i] |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Fix references | f_ID, f_ID[i], f_ID[i][j], F_ID, F_ID[i] |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Other variables | v_name, v_name[i] |
-+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-
-Most of the formula elements produce a scalar value. Some produce a
-global or per-atom vector of values. Global vectors can be produced
-by computes or fixes or by other vector-style variables. Per-atom
-vectors are produced by atom vectors, compute references that
-represent a per-atom vector, fix references that represent a per-atom
-vector, and variables that are atom-style variables. Math functions
-that operate on scalar values produce a scalar value; math function
-that operate on global or per-atom vectors do so element-by-element
-and produce a global or per-atom vector.
-
-A formula for equal-style variables cannot use any formula element
-that produces a global or per-atom vector. A formula for a
-vector-style variable can use formula elements that produce either a
-scalar value or a global vector value, but cannot use a formula
-element that produces a per-atom vector. A formula for an atom-style
-variable can use formula elements that produce either a scalar value
-or a per-atom vector, but not one that produces a global vector.
-Atom-style variables are evaluated by other commands that define a
-:doc:`group <group>` on which they operate, e.g. a :doc:`dump <dump>` or
-:doc:`compute <compute>` or :doc:`fix <fix>` command. When they invoke
-the atom-style variable, only atoms in the group are included in the
-formula evaluation. The variable evaluates to 0.0 for atoms not in
-the group.
-
-
-----------
-
-
-Numers, constants, and thermo keywords
---------------------------------------
-
-Numbers can contain digits, scientific notation
-(3.0e20,3.0e-20,3.0E20,3.0E-20), and leading minus signs.
-
-Constants are set at compile time and cannot be changed. *PI* will
-return the number 3.14159265358979323846; *on*\ , *true* or *yes* will
-return 1.0; *off*\ , *false* or *no* will return 0.0; *version* will
-return a numeric version code of the current LAMMPS version (e.g.
-version 2 Sep 2015 will return the number 20150902). The corresponding
-value for newer versions of LAMMPS will be larger, for older versions
-of LAMMPS will be smaller. This can be used to have input scripts
-adapt automatically to LAMMPS versions, when non-backwards compatible
-syntax changes are introduced. Here is an illustrative example (which
-will not work, since the *version* has been introduced more recently):
-
-.. parsed-literal::
-
- if $(version<20140513) then "communicate vel yes" else "comm_modify vel yes"
-
-The thermo keywords allowed in a formula are those defined by the
-:doc:`thermo_style custom <thermo_style>` command. Thermo keywords that
-require a :doc:`compute <compute>` to calculate their values such as
-"temp" or "press", use computes stored and invoked by the
-:doc:`thermo_style <thermo_style>` command. This means that you can
-only use those keywords in a variable if the style you are using with
-the thermo_style command (and the thermo keywords associated with that
-style) also define and use the needed compute. Note that some thermo
-keywords use a compute indirectly to calculate their value (e.g. the
-enthalpy keyword uses temp, pe, and pressure). If a variable is
-evaluated directly in an input script (not during a run), then the
-values accessed by the thermo keyword must be current. See the
-discussion below about "Variable Accuracy".
-
-
-----------
-
-
-Math Operators
---------------
-
-Math operators are written in the usual way, where the "x" and "y" in
-the examples can themselves be arbitrarily complex formulas, as in the
-examples above. In this syntax, "x" and "y" can be scalar values or
-per-atom vectors. For example, "ke/natoms" is the division of two
-scalars, where "vy+vz" is the element-by-element sum of two per-atom
-vectors of y and z velocities.
-
-Operators are evaluated left to right and have the usual C-style
-precedence: unary minus and unary logical NOT operator "!" have the
-highest precedence, exponentiation "^" is next; multiplication and
-division and the modulo operator "%" are next; addition and
-subtraction are next; the 4 relational operators "<", "<=", ">", and
-">=" are next; the two remaining relational operators "==" and "!="
-are next; then the logical AND operator "&&"; and finally the logical
-OR operator "||" has the lowest precedence. Parenthesis can be used
-to group one or more portions of a formula and/or enforce a different
-order of evaluation than what would occur with the default precedence.
-
-.. note::
-
- Because a unary minus is higher precedence than exponentiation,
- the formula "-2^2" will evaluate to 4, not -4. This convention is
- compatible with some programming languages, but not others. As
- mentioned, this behavior can be easily overridden with parenthesis;
- the formula "-(2^2)" will evaluate to -4.
-
-The 6 relational operators return either a 1.0 or 0.0 depending on
-whether the relationship between x and y is TRUE or FALSE. For
-example the expression x<10.0 in an atom-style variable formula will
-return 1.0 for all atoms whose x-coordinate is less than 10.0, and 0.0
-for the others. The logical AND operator will return 1.0 if both its
-arguments are non-zero, else it returns 0.0. The logical OR operator
-will return 1.0 if either of its arguments is non-zero, else it
-returns 0.0. The logical NOT operator returns 1.0 if its argument is
-0.0, else it returns 0.0.
-
-These relational and logical operators can be used as a masking or
-selection operation in a formula. For example, the number of atoms
-whose properties satifsy one or more criteria could be calculated by
-taking the returned per-atom vector of ones and zeroes and passing it
-to the :doc:`compute reduce <compute_reduce>` command.
-
-
-----------
-
-
-Math Functions
---------------
-
-Math functions are specified as keywords followed by one or more
-parenthesized arguments "x", "y", "z", each of which can themselves be
-arbitrarily complex formulas. In this syntax, the arguments can
-represent scalar values or global vectors or per-atom vectors. In the
-latter case, the math operation is performed on each element of the
-vector. For example, "sqrt(natoms)" is the sqrt() of a scalar, where
-"sqrt(y*z)" yields a per-atom vector with each element being the
-sqrt() of the product of one atom's y and z coordinates.
-
-Most of the math functions perform obvious operations. The ln() is
-the natural log; log() is the base 10 log.
-
-The random(x,y,z) function takes 3 arguments: x = lo, y = hi, and z =
-seed. It generates a uniform random number between lo and hi. The
-normal(x,y,z) function also takes 3 arguments: x = mu, y = sigma, and
-z = seed. It generates a Gaussian variate centered on mu with
-variance sigma^2. In both cases the seed is used the first time the
-internal random number generator is invoked, to initialize it. For
-equal-style and vector-style variables, every processor uses the same
-seed so that they each generate the same sequence of random numbers.
-For atom-style variables, a unique seed is created for each processor,
-based on the specified seed. This effectively generates a different
-random number for each atom being looped over in the atom-style
-variable.
-
-.. note::
-
- Internally, there is just one random number generator for all
- equal-style and vector-style variables and another one for all
- atom-style variables. If you define multiple variables (of each
- style) which use the random() or normal() math functions, then the
- internal random number generators will only be initialized once, which
- means only one of the specified seeds will determine the sequence of
- generated random numbers.
-
-The ceil(), floor(), and round() functions are those in the C math
-library. Ceil() is the smallest integer not less than its argument.
-Floor() if the largest integer not greater than its argument. Round()
-is the nearest integer to its argument.
-
-The ramp(x,y) function uses the current timestep to generate a value
-linearly intepolated between the specified x,y values over the course
-of a run, according to this formula:
-
-.. parsed-literal::
-
- value = x + (y-x) * (timestep-startstep) / (stopstep-startstep)
-
-The run begins on startstep and ends on stopstep. Startstep and
-stopstep can span multiple runs, using the *start* and *stop* keywords
-of the :doc:`run <run>` command. See the :doc:`run <run>` command for
-details of how to do this.
-
-The stagger(x,y) function uses the current timestep to generate a new
-timestep. X,y > 0 and x > y are required. The generated timesteps
-increase in a staggered fashion, as the sequence
-x,x+y,2x,2x+y,3x,3x+y,etc. For any current timestep, the next
-timestep in the sequence is returned. Thus if stagger(1000,100) is
-used in a variable by the :doc:`dump_modify every <dump_modify>`
-command, it will generate the sequence of output timesteps:
-
-.. parsed-literal::
-
- 100,1000,1100,2000,2100,3000,etc
-
-The logfreq(x,y,z) function uses the current timestep to generate a
-new timestep. X,y,z > 0 and y < z are required. The generated
-timesteps are on a base-z logarithmic scale, starting with x, and the
-y value is how many of the z-1 possible timesteps within one
-logarithmic interval are generated. I.e. the timesteps follow the
-sequence x,2x,3x,...y*x,x*z,2x*z,3x*z,...y*x*z,x*z^2,2x*z^2,etc. For
-any current timestep, the next timestep in the sequence is returned.
-Thus if logfreq(100,4,10) is used in a variable by the :doc:`dump_modify every <dump_modify>` command, it will generate this sequence of
-output timesteps:
-
-.. parsed-literal::
-
- 100,200,300,400,1000,2000,3000,4000,10000,20000,etc
-
-The logfreq2(x,y,z) function is similar to logfreq, except a single
-logarithmic interval is divided into y equally-spaced timesteps and
-all of them are output. Y < z is not required. Thus, if
-logfreq2(100,18,10) is used in a variable by the :doc:`dump_modify every <dump_modify>` command, then the interval between 100 and
-1000 is divided as 900/18 = 50 steps, and it will generate the
-sequence of output timesteps:
-
-.. parsed-literal::
-
- 100,150,200,...950,1000,1500,2000,...9500,10000,15000,etc
-
-The stride(x,y,z) function uses the current timestep to generate a new
-timestep. X,y >= 0 and z > 0 and x <= y are required. The generated
-timesteps increase in increments of z, from x to y, i.e. it generates
-the sequece x,x+z,x+2z,...,y. If y-x is not a multiple of z, then
-similar to the way a for loop operates, the last value will be one
-that does not exceed y. For any current timestep, the next timestep
-in the sequence is returned. Thus if stride(1000,2000,100) is used
-in a variable by the :doc:`dump_modify every <dump_modify>` command, it
-will generate the sequence of output timesteps:
-
-.. parsed-literal::
-
- 1000,1100,1200, ... ,1900,2000
-
-The stride2(x,y,z,a,b,c) function is similar to the stride() function
-except it generates two sets of strided timesteps, one at a coarser
-level and one at a finer level. Thus it is useful for debugging,
-e.g. to produce output every timestep at the point in simulation when
-a problem occurs. X,y >= 0 and z > 0 and x <= y are required, as are
-a,b >= 0 and c > 0 and a < b. Also, a >= x and b <= y are required so
-that the second stride is inside the first. The generated timesteps
-increase in increments of z, starting at x, until a is reached. At
-that point the timestep increases in increments of c, from a to b,
-then after b, increments by z are resumed until y is reached. For any
-current timestep, the next timestep in the sequence is returned. Thus
-if stride(1000,2000,100,1350,1360,1) is used in a variable by the
-:doc:`dump_modify every <dump_modify>` command, it will generate the
-sequence of output timesteps:
-
-.. parsed-literal::
-
- 1000,1100,1200,1300,1350,1351,1352, ... 1359,1360,1400,1500, ... ,2000
-
-The vdisplace(x,y) function takes 2 arguments: x = value0 and y =
-velocity, and uses the elapsed time to change the value by a linear
-displacement due to the applied velocity over the course of a run,
-according to this formula:
-
-.. parsed-literal::
-
- value = value0 + velocity*(timestep-startstep)*dt
-
-where dt = the timestep size.
-
-The run begins on startstep. Startstep can span multiple runs, using
-the *start* keyword of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this. Note that the
-:doc:`thermo_style <thermo_style>` keyword elaplong =
-timestep-startstep.
-
-The swiggle(x,y,z) and cwiggle(x,y,z) functions each take 3 arguments:
-x = value0, y = amplitude, z = period. They use the elapsed time to
-oscillate the value by a sin() or cos() function over the course of a
-run, according to one of these formulas, where omega = 2 PI / period:
-
-.. parsed-literal::
-
- value = value0 + Amplitude * sin(omega*(timestep-startstep)*dt)
- value = value0 + Amplitude * (1 - cos(omega*(timestep-startstep)*dt))
-
-where dt = the timestep size.
-
-The run begins on startstep. Startstep can span multiple runs, using
-the *start* keyword of the :doc:`run <run>` command. See the
-:doc:`run <run>` command for details of how to do this. Note that the
-:doc:`thermo_style <thermo_style>` keyword elaplong =
-timestep-startstep.
-
-
-----------
-
-
-Group and Region Functions
---------------------------
-
-Group functions are specified as keywords followed by one or two
-parenthesized arguments. The first argument *ID* is the group-ID.
-The *dim* argument, if it exists, is *x* or *y* or *z*\ . The *dir*
-argument, if it exists, is *xmin*\ , *xmax*\ , *ymin*\ , *ymax*\ , *zmin*\ , or
-*zmax*\ . The *dimdim* argument, if it exists, is *xx* or *yy* or *zz*
-or *xy* or *yz* or *xz*\ .
-
-The group function count() is the number of atoms in the group. The
-group functions mass() and charge() are the total mass and charge of
-the group. Xcm() and vcm() return components of the position and
-velocity of the center of mass of the group. Fcm() returns a
-component of the total force on the group of atoms. Bound() returns
-the min/max of a particular coordinate for all atoms in the group.
-Gyration() computes the radius-of-gyration of the group of atoms. See
-the :doc:`compute gyration <compute_gyration>` command for a definition
-of the formula. Angmom() returns components of the angular momentum
-of the group of atoms around its center of mass. Torque() returns
-components of the torque on the group of atoms around its center of
-mass, based on current forces on the atoms. Inertia() returns one of
-6 components of the symmetric inertia tensor of the group of atoms
-around its center of mass, ordered as Ixx,Iyy,Izz,Ixy,Iyz,Ixz.
-Omega() returns components of the angular velocity of the group of
-atoms around its center of mass.
-
-Region functions are specified exactly the same way as group functions
-except they take an extra final argument *IDR* which is the region ID.
-The function is computed for all atoms that are in both the group and
-the region. If the group is "all", then the only criteria for atom
-inclusion is that it be in the region.
-
-
-----------
-
-
-Special Functions
------------------
-
-Special functions take specific kinds of arguments, meaning their
-arguments cannot be formulas themselves.
-
-The sum(x), min(x), max(x), ave(x), trap(x), and slope(x) functions
-each take 1 argument which is of the form "c_ID" or "c_ID[N]" or
-"f_ID" or "f_ID[N]" or "v_name". The first two are computes and the
-second two are fixes; the ID in the reference should be replaced by
-the ID of a compute or fix defined elsewhere in the input script. The
-compute or fix must produce either a global vector or array. If it
-produces a global vector, then the notation without "[N]" should be
-used. If it produces a global array, then the notation with "[N]"
-should be used, when N is an integer, to specify which column of the
-global array is being referenced. The last form of argument "v_name"
-is for a vector-style variable where "name" is replaced by the name of
-the variable.
-
-These functions operate on a global vector of inputs and reduce it to
-a single scalar value. This is analagous to the operation of the
-:doc:`compute reduce <compute_reduce>` command, which performs similar
-operations on per-atom and local vectors.
-
-The sum() function calculates the sum of all the vector elements. The
-min() and max() functions find the minimum and maximum element
-respectively. The ave() function is the same as sum() except that it
-divides the result by the length of the vector.
-
-The trap() function is the same as sum() except the first and last
-elements are multiplied by a weighting factor of 1/2 when performing
-the sum. This effectively implements an integration via the
-trapezoidal rule on the global vector of data. I.e. consider a set of
-points, equally spaced by 1 in their x coordinate: (1,V1), (2,V2),
-..., (N,VN), where the Vi are the values in the global vector of
-length N. The integral from 1 to N of these points is trap(). When
-appropriately normalized by the timestep size, this function is useful
-for calculating integrals of time-series data, like that generated by
-the :doc:`fix ave/correlate <fix_ave_correlate>` command.
-
-The slope() function uses linear regression to fit a line to the set
-of points, equally spaced by 1 in their x coordinate: (1,V1), (2,V2),
-..., (N,VN), where the Vi are the values in the global vector of
-length N. The returned value is the slope of the line. If the line
-has a single point or is vertical, it returns 1.0e20.
-
-The gmask(x) function takes 1 argument which is a group ID. It
-can only be used in atom-style variables. It returns a 1 for
-atoms that are in the group, and a 0 for atoms that are not.
-
-The rmask(x) function takes 1 argument which is a region ID. It can
-only be used in atom-style variables. It returns a 1 for atoms that
-are in the geometric region, and a 0 for atoms that are not.
-
-The grmask(x,y) function takes 2 arguments. The first is a group ID,
-and the second is a region ID. It can only be used in atom-style
-variables. It returns a 1 for atoms that are in both the group and
-region, and a 0 for atoms that are not in both.
-
-The next(x) function takes 1 argument which is a variable ID (not
-"v_foo", just "foo"). It must be for a file-style or atomfile-style
-variable. Each time the next() function is invoked (i.e. each time
-the equal-style or atom-style variable is evaluated), the following
-steps occur.
-
-For file-style variables, the current string value stored by the
-file-style variable is converted to a numeric value and returned by
-the function. And the next string value in the file is read and
-stored. Note that if the line previously read from the file was not a
-numeric string, then it will typically evaluate to 0.0, which is
-likely not what you want.
-
-For atomfile-style variables, the current per-atom values stored by
-the atomfile-style variable are returned by the function. And the
-next set of per-atom values in the file is read and stored.
-
-Since file-style and atomfile-style variables read and store the first
-line of the file or first set of per-atoms values when they are
-defined in the input script, these are the value(s) that will be
-returned the first time the next() function is invoked. If next() is
-invoked more times than there are lines or sets of lines in the file,
-the variable is deleted, similar to how the :doc:`next <next>` command
-operates.
-
-
-----------
-
-
-Feature Functions
------------------
-
-Feature functions allow to probe the running LAMMPS executable for
-whether specific features are either active, defined, or available.
-The functions take two arguments, a *category* and a corresponding
-*argument*\ . The arguments are strings thus cannot be formulas
-themselves (only $-style immediate variable expansion is possible).
-Return value is either 1.0 or 0.0 depending on whether the function
-evaluates to true or false, respectively.
-
-The *is_active()* function allows to query for active settings which
-are grouped by categories. Currently supported categories and
-arguments are:
-
-* *package* (argument = *cuda* or *gpu* or *intel* or *kokkos* or *omp*\ )
-* *newton* (argument = *pair* or *bond* or *any*\ )
-* *pair* (argument = *single* or *respa* or *manybody* or *tail* or *shift*\ )
-* *comm_style* (argument = *brick* or *tiled*\ )
-* *min_style* (argument = any of the compiled in minimizer styles)
-* *run_style* (argument = any of the compiled in run styles)
-* *atom_style* (argument = any of the compiled in atom styles)
-* *pair_style* (argument = any of the compiled in pair styles)
-* *bond_style* (argument = any of the compiled in bond styles)
-* *angle_style* (argument = any of the compiled in angle styles)
-* *dihedral_style* (argument = any of the compiled in dihedral styles)
-* *improper_style* (argument = any of the compiled in improper styles)
-* *kspace_style* (argument = any of the compiled in kspace styles)
-
-Most of the settings are self-explanatory, the *single* argument in the
-*pair* category allows to check whether a pair style supports a
-Pair::single() function as needed by compute group/group and others
-features or LAMMPS, *respa* allows to check whether the inner/middle/outer
-mode of r-RESPA is supported. In the various style categories,
-the checking is also done using suffix flags, if available and enabled.
-
-Example 1: disable use of suffix for pppm when using GPU package (i.e. run it on the CPU concurrently to running the pair style on the GPU), but do use the suffix otherwise (e.g. with USER-OMP).
-
-.. parsed-literal::
-
- pair_style lj/cut/coul/long 14.0
- if $(is_active(package,gpu)) then "suffix off"
- kspace_style pppm
-
-Example 2: use r-RESPA with inner/outer cutoff, if supported by pair style, otherwise fall back to using pair and reducing the outer time step
-
-.. parsed-literal::
-
- timestep $(2.0*(1.0+*is_active(pair,respa))
- if $(is_active(pair,respa)) then "run_style respa 4 3 2 2 improper 1 inner 2 5.5 7.0 outer 3 kspace 4" else "run_style respa 3 3 2 improper 1 pair 2 kspace 3"
-
-The *is_defined()* function allows to query categories like *compute*\ ,
-*dump*\ , *fix*\ , *group*\ , *region*\ , and *variable* whether an entry
-with the provided name or id is defined.
-
-The *is_available()* function allows to query whether a specific
-optional feature is available, i.e. compiled in. This currently
-works for the following categories: *command*\ , *compute*\ , *fix*\ ,
-and *pair_style*\ . For all categories except *command* also appending
-active suffixes is tried before reporting failure.
-
-
-----------
-
-
-Atom Values and Vectors
------------------------
-
-Atom values take an integer argument I from 1 to N, where I is the
-atom-ID, e.g. x[243], which means use the x coordinate of the atom
-with ID = 243. Or they can take a variable name, specified as v_name,
-where name is the name of the variable, like x[v_myIndex]. The
-variable can be of any style except *vector* or *atom* or *atomfile*
-variables. The variable is evaluated and the result is expected to be
-numeric and is cast to an integer (i.e. 3.4 becomes 3), to use an an
-index, which must be a value from 1 to N. Note that a "formula"
-cannot be used as the argument between the brackets, e.g. x[243+10]
-or x[v_myIndex+1] are not allowed. To do this a single variable can
-be defined that contains the needed formula.
-
-Note that the 0 < atom-ID <= N, where N is the largest atom ID
-in the system. If an ID is specified for an atom that does not
-currently exist, then the generated value is 0.0.
-
-Atom vectors generate one value per atom, so that a reference like
-"vx" means the x-component of each atom's velocity will be used when
-evaluating the variable.
-
-The meaning of the different atom values and vectors is mostly
-self-explanatory. *Mol* refers to the molecule ID of an atom, and is
-only defined if an :doc:`atom_style <atom_style>` is being used that
-defines molecule IDs.
-
-Note that many other atom attributes can be used as inputs to a
-variable by using the :doc:`compute property/atom <compute_property_atom>` command and then specifying
-a quantity from that compute.
-
-
-----------
-
-
-Compute References
-------------------
-
-Compute references access quantities calculated by a
-:doc:`compute <compute>`. The ID in the reference should be replaced by
-the ID of a compute defined elsewhere in the input script. As
-discussed in the doc page for the :doc:`compute <compute>` command,
-computes can produce global, per-atom, or local values. Only global
-and per-atom values can be used in a variable. Computes can also
-produce a scalar, vector, or array.
-
-An equal-style variable can only use scalar values, which means a
-global scalar, or an element of a global or per-atom vector or array.
-A vector-style variable can use scalar values or a global vector of
-values, or a column of a global array of values. Atom-style variables
-can use global scalar values. They can also use per-atom vector
-values, or a column of a per-atom array. See the doc pages for
-individual computes to see what kind of values they produce.
-
-Examples of different kinds of compute references are as follows.
-There is typically no ambiguity (see exception below) as to what a
-reference means, since computes only produce either global or per-atom
-quantities, never both.
-
-+------------+-------------------------------------------------------------------------------------------------------+
-| c_ID | global scalar, or per-atom vector |
-+------------+-------------------------------------------------------------------------------------------------------+
-| c_ID[I] | Ith element of global vector, or atom I's value in per-atom vector, or Ith column from per-atom array |
-+------------+-------------------------------------------------------------------------------------------------------+
-| c_ID[I][J] | I,J element of global array, or atom I's Jth value in per-atom array |
-+------------+-------------------------------------------------------------------------------------------------------+
-
-For I and J indices, integers can be specified or a variable name,
-specified as v_name, where name is the name of the variable. The
-rules for this syntax are the same as for the "Atom Values and
-Vectors" discussion above.
-
-One source of ambiguity for compute references is when a vector-style
-variable refers to a compute that produces both a global scalar and a
-global vector. Consider a compute with ID "foo" that does this,
-referenced as follows by variable "a", where "myVec" is another
-vector-style variable:
-
-.. parsed-literal::
-
- variable a vector c_foo*v_myVec
-
-The reference "c_foo" could refer to either the global scalar or
-global vector produced by compute "foo". In this case, "c_foo" will
-always refer to the global scalar, and "C_foo" can be used to
-reference the global vector. Similarly if the compute produces both a
-global vector and global array, then "c_foo[I]" will always refer to
-an element of the global vector, and "C_foo[I]" can be used to
-reference the Ith column of the global array.
-
-Note that if a variable containing a compute is evaluated directly in
-an input script (not during a run), then the values accessed by the
-compute must be current. See the discussion below about "Variable
-Accuracy".
-
-
-----------
-
-
-Fix References
---------------
-
-Fix references access quantities calculated by a :doc:`fix <compute>`.
-The ID in the reference should be replaced by the ID of a fix defined
-elsewhere in the input script. As discussed in the doc page for the
-:doc:`fix <fix>` command, fixes can produce global, per-atom, or local
-values. Only global and per-atom values can be used in a variable.
-Fixes can also produce a scalar, vector, or array. An equal-style
-variable can only use scalar values, which means a global scalar, or
-an element of a global or per-atom vector or array. Atom-style
-variables can use the same scalar values. They can also use per-atom
-vector values. A vector value can be a per-atom vector itself, or a
-column of an per-atom array. See the doc pages for individual fixes
-to see what kind of values they produce.
-
-The different kinds of fix references are exactly the same as the
-compute references listed in the above table, where "c_" is replaced
-by "f_". Again, there is typically no ambiguity (see exception below)
-as to what a reference means, since fixes only produce either global
-or per-atom quantities, never both.
-
-+------------+-------------------------------------------------------------------------------------------------------+
-| f_ID | global scalar, or per-atom vector |
-+------------+-------------------------------------------------------------------------------------------------------+
-| f_ID[I] | Ith element of global vector, or atom I's value in per-atom vector, or Ith column from per-atom array |
-+------------+-------------------------------------------------------------------------------------------------------+
-| f_ID[I][J] | I,J element of global array, or atom I's Jth value in per-atom array |
-+------------+-------------------------------------------------------------------------------------------------------+
-
-For I and J indices, integers can be specified or a variable name,
-specified as v_name, where name is the name of the variable. The
-rules for this syntax are the same as for the "Atom Values and
-Vectors" discussion above.
-
-One source of ambiguity for fix references is the same ambiguity
-discussed for compute references above. Namely when a vector-style
-variable refers to a fix that produces both a global scalar and a
-global vector. The solution is the same as for compute references.
-For a fix with ID "foo", "f_foo" will always refer to the global
-scalar, and "F_foo" can be used to reference the global vector. And
-similarly for distinguishing between a fix's global vector versus
-global array with "f_foo[I]" versus "F_foo[I]".
-
-Note that if a variable containing a fix is evaluated directly in an
-input script (not during a run), then the values accessed by the fix
-should be current. See the discussion below about "Variable
-Accuracy".
-
-Note that some fixes only generate quantities on certain timesteps.
-If a variable attempts to access the fix on non-allowed timesteps, an
-error is generated. For example, the :doc:`fix ave/time <fix_ave_time>`
-command may only generate averaged quantities every 100 steps. See
-the doc pages for individual fix commands for details.
-
-
-----------
-
-
-Variable References
--------------------
-
-Variable references access quantities stored or calculated by other
-variables, which will cause those variables to be evaluated. The name
-in the reference should be replaced by the name of a variable defined
-elsewhere in the input script.
-
-As discussed on this doc page, equal-style variables generate a single
-global numeric value, vector-style variables gerarate a vector of
-global numeric values, and atom-style and atomfile-style variables
-generate a per-atom vector of numeric values. All other variables
-store one or more strings.
-
-The formula for an equal-style variable can use any style of variable
-including a vector_style or atom-style or atomfile-style. For these
-3 styles, a subscript must be used to access a single value from
-the vector-, atom-, or atomfile-style variable. If a string-storing
-variable is used, the string is converted to a numeric value. Note
-that this will typically produce a 0.0 if the string is not a numeric
-string, which is likely not what you want.
-
-The formula for a vector-style variable can use any style of variable,
-including atom-style or atomfile-style variables. For these 2 styles,
-a subscript must be used to access a single value from the atom-, or
-atomfile-style variable.
-
-The formula for an atom-style variable can use any style of variable,
-including other atom-style or atomfile-style variables. If it uses a
-vector-style variable, a subscript must be used to access a single
-value from the vector-style variable.
-
-Examples of different kinds of variable references are as follows.
-There is no ambiguity as to what a reference means, since variables
-produce only a global scalar or global vector or per-atom vector.
-
-+-----------+----------------------------------------------------------------------+
-| v_name | global scalar from equal-style variable |
-+-----------+----------------------------------------------------------------------+
-| v_name | global vector from vector-style variable |
-+-----------+----------------------------------------------------------------------+
-| v_name | per-atom vector from atom-style or atomfile-style variable |
-+-----------+----------------------------------------------------------------------+
-| v_name[I] | Ith element of a global vector from vector-style variable |
-+-----------+----------------------------------------------------------------------+
-| v_name[I] | value of atom with ID = I from atom-style or atomfile-style variable |
-+-----------+----------------------------------------------------------------------+
-
-For the I index, an integer can be specified or a variable name,
-specified as v_name, where name is the name of the variable. The
-rules for this syntax are the same as for the "Atom Values and
-Vectors" discussion above.
-
-
-----------
-
-
-**Immediate Evaluation of Variables:**
-
-If you want an equal-style variable to be evaluated immediately, it
-may be the case that you do not need to define a variable at all. See
-:ref:`Section 3.2 <cmd_2>` of the manual, which
-describes the use of "immediate" variables in an input script,
-specified as $(formula) with parenthesis, where the formula has the
-same syntax as equal-style variables described on this page. This
-effectively evaluates a formula immediately without using the variable
-command to define a named variable.
-
-More generally, there is a difference between referencing a variable
-with a leading $ sign (e.g. $x or ${abc}) versus with a leading "v_"
-(e.g. v_x or v_abc). The former can be used in any input script
-command, including a variable command. The input script parser
-evaluates the reference variable immediately and substitutes its value
-into the command. As explained in :ref:`Section commands 3.2 <3_2>` for "Parsing rules", you can also use
-un-named "immediate" variables for this purpose. For example, a
-string like this $((xlo+xhi)/2+sqrt(v_area)) in an input script
-command evaluates the string between the parenthesis as an equal-style
-variable formula.
-
-Referencing a variable with a leading "v_" is an optional or required
-kind of argument for some commands (e.g. the :doc:`fix ave/chunk <fix_ave_chunk>` or :doc:`dump custom <dump>` or
-:doc:`thermo_style <thermo_style>` commands) if you wish it to evaluate
-a variable periodically during a run. It can also be used in a
-variable formula if you wish to reference a second variable. The
-second variable will be evaluated whenever the first variable is
-evaluated.
-
-As an example, suppose you use this command in your input script to
-define the variable "v" as
-
-.. parsed-literal::
-
- variable v equal vol
-
-before a run where the simulation box size changes. You might think
-this will assign the initial volume to the variable "v". That is not
-the case. Rather it assigns a formula which evaluates the volume
-(using the thermo_style keyword "vol") to the variable "v". If you
-use the variable "v" in some other command like :doc:`fix ave/time <fix_ave_time>` then the current volume of the box will be
-evaluated continuously during the run.
-
-If you want to store the initial volume of the system, you can do it
-this way:
-
-.. parsed-literal::
-
- variable v equal vol
- variable v0 equal $v
-
-The second command will force "v" to be evaluated (yielding the
-initial volume) and assign that value to the variable "v0". Thus the
-command
-
-.. parsed-literal::
-
- thermo_style custom step v_v v_v0
-
-would print out both the current and initial volume periodically
-during the run.
-
-Note that it is a mistake to enclose a variable formula in double
-quotes if it contains variables preceeded by $ signs. For example,
-
-.. parsed-literal::
-
- variable vratio equal "${vfinal}/${v0}"
-
-This is because the quotes prevent variable substitution (see :ref:`this section <cmd_2>` on parsing input script
-commands), and thus an error will occur when the formula for "vratio"
-is evaluated later.
-
-
-----------
-
-
-**Variable Accuracy:**
-
-Obviously, LAMMPS attempts to evaluate variables containing formulas
-(\ *equal* and *atom* style variables) accurately whenever the
-evaluation is performed. Depending on what is included in the
-formula, this may require invoking a :doc:`compute <compute>`, either
-directly or indirectly via a thermo keyword, or accessing a value
-previously calculated by a compute, or accessing a value calculated
-and stored by a :doc:`fix <fix>`. If the compute is one that calculates
-the pressure or energy of the system, then these quantities need to be
-tallied during the evaluation of the interatomic potentials (pair,
-bond, etc) on timesteps that the variable will need the values.
-
-LAMMPS keeps track of all of this during a :doc:`run <run>` or :doc:`energy minimization <minimize>`. An error will be generated if you
-attempt to evaluate a variable on timesteps when it cannot produce
-accurate values. For example, if a :doc:`thermo_style custom <thermo_style>` command prints a variable which accesses
-values stored by a :doc:`fix ave/time <fix_ave_time>` command and the
-timesteps on which thermo output is generated are not multiples of the
-averaging frequency used in the fix command, then an error will occur.
-
-An input script can also request variables be evaluated before or
-after or in between runs, e.g. by including them in a
-:doc:`print <print>` command. In this case, if a compute is needed to
-evaluate a variable (either directly or indirectly), LAMMPS will not
-invoke the compute, but it will use a value previously calculated by
-the compute, and can do this only if it was invoked on the current
-timestep. Fixes will always provide a quantity needed by a variable,
-but the quantity may or may not be current. This leads to one of
-three kinds of behavior:
-
-(1) The variable may be evaluated accurately. If it contains
-references to a compute or fix, and these values were calculated on
-the last timestep of a preceeding run, then they will be accessed and
-used by the variable and the result will be accurate.
-
-(2) LAMMPS may not be able to evaluate the variable and will generate
-an error message stating so. For example, if the variable requires a
-quantity from a :doc:`compute <compute>` that has not been invoked on
-the current timestep, LAMMPS will generate an error. This means, for
-example, that such a variable cannot be evaluated before the first run
-has occurred. Likewise, in between runs, a variable containing a
-compute cannot be evaluated unless the compute was invoked on the last
-timestep of the preceding run, e.g. by thermodynamic output.
-
-One way to get around this problem is to perform a 0-timestep run
-before using the variable. For example, these commands
-
-.. parsed-literal::
-
- variable t equal temp
- print "Initial temperature = $t"
- run 1000
-
-will generate an error if the run is the first run specified in the
-input script, because generating a value for the "t" variable requires
-a compute for calculating the temperature to be invoked.
-
-However, this sequence of commands would be fine:
-
-.. parsed-literal::
-
- run 0
- variable t equal temp
- print "Initial temperature = $t"
- run 1000
-
-The 0-timestep run initializes and invokes various computes, including
-the one for temperature, so that the value it stores is current and
-can be accessed by the variable "t" after the run has completed. Note
-that a 0-timestep run does not alter the state of the system, so it
-does not change the input state for the 1000-timestep run that
-follows. Also note that the 0-timestep run must actually use and
-invoke the compute in question (e.g. via :doc:`thermo <thermo_style>` or
-:doc:`dump <dump>` output) in order for it to enable the compute to be
-used in a variable after the run. Thus if you are trying to print a
-variable that uses a compute you have defined, you can insure it is
-invoked on the last timestep of the preceding run by including it in
-thermodynamic output.
-
-Unlike computes, :doc:`fixes <fix>` will never generate an error if
-their values are accessed by a variable in between runs. They always
-return some value to the variable. However, the value may not be what
-you expect if the fix has not yet calculated the quantity of interest
-or it is not current. For example, the :doc:`fix indent <fix_indent>`
-command stores the force on the indenter. But this is not computed
-until a run is performed. Thus if a variable attempts to print this
-value before the first run, zeroes will be output. Again, performing
-a 0-timestep run before printing the variable has the desired effect.
-
-(3) The variable may be evaluated incorrectly and LAMMPS may have no
-way to detect this has occurred. Consider the following sequence of
-commands:
-
-.. parsed-literal::
-
- pair_coeff 1 1 1.0 1.0
- run 1000
- pair_coeff 1 1 1.5 1.0
- variable e equal pe
- print "Final potential energy = $e"
-
-The first run is performed using one setting for the pairwise
-potential defined by the :doc:`pair_style <pair_style>` and
-:doc:`pair_coeff <pair_coeff>` commands. The potential energy is
-evaluated on the final timestep and stored by the :doc:`compute pe <compute_pe>` compute (this is done by the
-:doc:`thermo_style <thermo_style>` command). Then a pair coefficient is
-changed, altering the potential energy of the system. When the
-potential energy is printed via the "e" variable, LAMMPS will use the
-potential energy value stored by the :doc:`compute pe <compute_pe>`
-compute, thinking it is current. There are many other commands which
-could alter the state of the system between runs, causing a variable
-to evaluate incorrectly.
-
-The solution to this issue is the same as for case (2) above, namely
-perform a 0-timestep run before the variable is evaluated to insure
-the system is up-to-date. For example, this sequence of commands
-would print a potential energy that reflected the changed pairwise
-coefficient:
-
-.. parsed-literal::
-
- pair_coeff 1 1 1.0 1.0
- run 1000
- pair_coeff 1 1 1.5 1.0
- run 0
- variable e equal pe
- print "Final potential energy = $e"
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-Indexing any formula element by global atom ID, such as an atom value,
-requires the :doc:`atom style <atom_style>` to use a global mapping in
-order to look up the vector indices. By default, only atom styles
-with molecular information create global maps. The :doc:`atom_modify map <atom_modify>` command can override the default, e.g. for
-atomic-style atom styles.
-
-All *universe*\ - and *uloop*\ -style variables defined in an input script
-must have the same number of values.
-
-Related commands
-""""""""""""""""
-
-:doc:`next <next>`, :doc:`jump <jump>`, :doc:`include <include>`,
-:doc:`temper <temper>`, :doc:`fix print <fix_print>`, :doc:`print <print>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/velocity.txt b/doc/html/_sources/velocity.txt
deleted file mode 100644
index ed0dd2b12..000000000
--- a/doc/html/_sources/velocity.txt
+++ /dev/null
@@ -1,281 +0,0 @@
-.. index:: velocity
-
-velocity command
-================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- velocity group-ID style args keyword value ...
-
-* group-ID = ID of group of atoms whose velocity will be changed
-* style = *create* or *set* or *scale* or *ramp* or *zero*
-.. parsed-literal::
-
- *create* args = temp seed
- temp = temperature value (temperature units)
- seed = random # seed (positive integer)
- *set* args = vx vy vz
- vx,vy,vz = velocity value or NULL (velocity units)
- any of vx,vy,vz van be a variable (see below)
- *scale* arg = temp
- temp = temperature value (temperature units)
- *ramp* args = vdim vlo vhi dim clo chi
- vdim = *vx* or *vy* or *vz*
- vlo,vhi = lower and upper velocity value (velocity units)
- dim = *x* or *y* or *z*
- clo,chi = lower and upper coordinate bound (distance units)
- *zero* arg = *linear* or *angular*
- *linear* = zero the linear momentum
- *angular* = zero the angular momentum
-
-* zero or more keyword/value pairs may be appended
-* keyword = *dist* or *sum* or *mom* or *rot* or *temp* or *bias* or *loop* or *units*
-.. parsed-literal::
-
- *dist* value = *uniform* or *gaussian*
- *sum* value = *no* or *yes*
- *mom* value = *no* or *yes*
- *rot* value = *no* or *yes*
- *temp* value = temperature compute ID
- *bias* value = *no* or *yes*
- *loop* value = *all* or *local* or *geom*
- *rigid* value = fix-ID
- fix-ID = ID of rigid body fix
- *units* value = *box* or *lattice*
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- velocity all create 300.0 4928459 rot yes dist gaussian
- velocity border set NULL 4.0 v_vz sum yes units box
- velocity flow scale 300.0
- velocity flow ramp vx 0.0 5.0 y 5 25 temp mytemp
- velocity all zero linear
-
-Description
-"""""""""""
-
-Set or change the velocities of a group of atoms in one of several
-styles. For each style, there are required arguments and optional
-keyword/value parameters. Not all options are used by each style.
-Each option has a default as listed below.
-
-The *create* style generates an ensemble of velocities using a random
-number generator with the specified seed as the specified temperature.
-
-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
-not set. Any of the vx,vy,vz velocity components can be specified as
-an equal-style or atom-style :doc:`variable <variable>`. If the value
-is a variable, it should be specified as v_name, where name is the
-variable name. In this case, the variable will be evaluated, and its
-value used to determine the velocity component. Note that if a
-variable is used, the velocity it calculates must be in box units, not
-lattice units; see the discussion of the *units* keyword below.
-
-Equal-style variables can specify formulas with various mathematical
-functions, and include :doc:`thermo_style <thermo_style>` command
-keywords for the simulation box parameters or other parameters.
-
-Atom-style variables can specify the same formulas as equal-style
-variables but can also include per-atom values, such as atom
-coordinates. Thus it is easy to specify a spatially-dependent
-velocity field.
-
-The *scale* style computes the current temperature of the group of
-atoms and then rescales the velocities to the specified temperature.
-
-The *ramp* style is similar to that used by the :doc:`compute temp/ramp <compute_temp_ramp>` command. Velocities ramped
-uniformly from vlo to vhi are applied to dimension vx, or vy, or vz.
-The value assigned to a particular atom depends on its relative
-coordinate value (in dim) from clo to chi. For the example above, an
-atom with y-coordinate of 10 (1/4 of the way from 5 to 25), would be
-assigned a x-velocity of 1.25 (1/4 of the way from 0.0 to 5.0). Atoms
-outside the coordinate bounds (less than 5 or greater than 25 in this
-case), are assigned velocities equal to vlo or vhi (0.0 or 5.0 in this
-case).
-
-The *zero* style adjusts the velocities of the group of atoms so that
-the aggregate linear or angular momentum is zero. No other changes
-are made to the velocities of the atoms. If the *rigid* option is
-specified (see below), then the zeroing is performed on individual
-rigid bodies, as defined by the :doc:`fix rigid or fix rigid/small <fix_rigid>` commands. In other words, zero linear
-will set the linear momentum of each rigid body to zero, and zero
-angular will set the angular momentum of each rigid body to zero.
-This is done by adjusting the velocities of the atoms in each rigid
-body.
-
-All temperatures specified in the velocity command are in temperature
-units; see the :doc:`units <units>` command. The units of velocities and
-coordinates depend on whether the *units* keyword is set to *box* or
-*lattice*\ , as discussed below.
-
-For all styles, no atoms are assigned z-component velocities if the
-simulation is 2d; see the :doc:`dimension <dimension>` command.
-
-
-----------
-
-
-The keyword/value options are used in the following ways by the
-various styles.
-
-The *dist* keyword is used by *create*\ . The ensemble of generated
-velocities can be a *uniform* distribution from some minimum to
-maximum value, scaled to produce the requested temperature. Or it can
-be a *gaussian* distribution with a mean of 0.0 and a sigma scaled to
-produce the requested temperature.
-
-The *sum* keyword is used by all styles, except *zero*\ . The new
-velocities will be added to the existing ones if sum = yes, or will
-replace them if sum = no.
-
-The *mom* and *rot* keywords are used by *create*\ . If mom = yes, the
-linear momentum of the newly created ensemble of velocities is zeroed;
-if rot = yes, the angular momentum is zeroed.
-
-*line
-
-If specified, the *temp* keyword is used by *create* and *scale* to
-specify a :doc:`compute <compute>` that calculates temperature in a
-desired way, e.g. by first subtracting out a velocity bias, as
-discussed in :ref:`Section howto 16 <howto_15>` of the doc
-pages. If this keyword is not specified, *create* and *scale*
-calculate temperature using a compute that is defined internally as
-follows:
-
-.. parsed-literal::
-
- compute velocity_temp group-ID temp
-
-where group-ID is the same ID used in the velocity command. i.e. the
-group of atoms whose velocity is being altered. This compute is
-deleted when the velocity command is finished. See the :doc:`compute temp <compute_temp>` command for details. If the calculated
-temperature should have degrees-of-freedom removed due to fix
-constraints (e.g. SHAKE or rigid-body constraints), then the
-appropriate fix command must be specified before the velocity command
-is issued.
-
-The *bias* keyword with a *yes* setting is used by *create* and
-*scale*\ , but only if the *temp* keyword is also used to specify a
-:doc:`compute <compute>` that calculates temperature in a desired way.
-If the temperature compute also calculates a velocity bias, the the
-bias is subtracted from atom velocities before the *create* and
-*scale* operations are performed. After the operations, the bias is
-added back to the atom velocities. See :ref:`Section howto 16 <howto_15>` of the doc pages for more discussion
-of temperature computes with biases. Note that the velocity bias is
-only applied to atoms in the temperature compute specified with the
-*temp* keyword.
-
-As an example, assume atoms are currently streaming in a flow
-direction (which could be separately initialized with the *ramp*
-style), and you wish to initialize their thermal velocity to a desired
-temperature. In this context thermal velocity means the per-particle
-velocity that remains when the streaming velocity is subtracted. This
-can be done using the *create* style with the *temp* keyword
-specifying the ID of a :doc:`compute temp/ramp <compute_temp_ramp>` or
-:doc:`compute temp/profile <compute_temp_profile>` command, and the
-*bias* keyword set to a *yes* value.
-
-
-----------
-
-
-The *loop* keyword is used by *create* in the following ways.
-
-If loop = all, then each processor loops over all atoms in the
-simulation to create velocities, but only stores velocities for atoms
-it owns. This can be a slow loop for a large simulation. If atoms
-were read from a data file, the velocity assigned to a particular atom
-will be the same, independent of how many processors are being used.
-This will not be the case if atoms were created using the
-:doc:`create_atoms <create_atoms>` command, since atom IDs will likely
-be assigned to atoms differently.
-
-If loop = local, then each processor loops over only its atoms to
-produce velocities. The random number seed is adjusted to give a
-different set of velocities on each processor. This is a fast loop,
-but the velocity assigned to a particular atom will depend on which
-processor owns it. Thus the results will always be different when a
-simulation is run on a different number of processors.
-
-If loop = geom, then each processor loops over only its atoms. For
-each atom a unique random number seed is created, based on the atom's
-xyz coordinates. A velocity is generated using that seed. This is a
-fast loop and the velocity assigned to a particular atom will be the
-same, independent of how many processors are used. However, the set
-of generated velocities may be more correlated than if the *all* or
-*local* keywords are used.
-
-Note that the *loop geom* keyword will not necessarily assign
-identical velocities for two simulations run on different machines.
-This is because the computations based on xyz coordinates are
-sensitive to tiny differences in the double-precision value for a
-coordinate as stored on a particular machine.
-
-
-----------
-
-
-The *rigid* keyword only has meaning when used with the *zero* style.
-It allows specification of a fix-ID for one of the :doc:`rigid-body fix <fix_rigid>` variants which defines a set of rigid bodies. The
-zeroing of linear or angular momentum is then performed for each rigid
-body defined by the fix, as described above.
-
-The *units* keyword is used by *set* and *ramp*\ . If units = box,
-the velocities and coordinates specified in the velocity command are
-in the standard units described by the :doc:`units <units>` command
-(e.g. Angstroms/fmsec for real units). If units = lattice, velocities
-are in units of lattice spacings per time (e.g. spacings/fmsec) and
-coordinates are in lattice spacings. The :doc:`lattice <lattice>`
-command must have been previously used to define the lattice spacing.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-Assigning a temperature via the *create* style to a system with :doc:`rigid bodies <fix_rigid>` or :doc:`SHAKE constraints <fix_shake>` may not
-have the desired outcome for two reasons. First, the velocity command
-can be invoked before all of the relevant fixes are created and
-initialized and the number of adjusted degrees of freedom (DOFs) is
-known. Thus it is not possible to compute the target temperature
-correctly. Second, the assigned velocities may be partially canceled
-when constraints are first enforced, leading to a different
-temperature than desired. A workaround for this is to perform a :doc:`run 0 <run>` command, which insures all DOFs are accounted for
-properly, and then rescale the temperature to the desired value before
-performing a simulation. For example:
-
-.. parsed-literal::
-
- velocity all create 300.0 12345
- run 0 # temperature may not be 300K
- velocity all scale 300.0 # now it should be
-
-Related commands
-""""""""""""""""
-
-:doc:`fix rigid <fix_rigid>`, :doc:`fix shake <fix_shake>`,
-:doc:`lattice <lattice>`
-
-Default
-"""""""
-
-The keyword defaults are dist = uniform, sum = no, mom = yes, rot =
-no, bias = no, loop = all, and units = lattice. The temp and rigid
-keywords are not defined by default.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/write_coeff.txt b/doc/html/_sources/write_coeff.txt
deleted file mode 100644
index 5de40196b..000000000
--- a/doc/html/_sources/write_coeff.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-.. index:: write_coeff
-
-write_coeff command
-===================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- write_coeff file
-
-.. parsed-literal::
-
- file = name of data file to write out
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- write_coeff polymer.coeff
-
-Description
-"""""""""""
-
-Write a text format file with the currently defined force field
-coefficients in a way, that it can be read by LAMMPS with the
-:doc:`include <include>` command. In combination with the nocoeff
-option of :doc:`write_data <write_data>` this can be used to move
-the Coeffs sections from a data file into a separate file.
-
-.. note::
-
- The write_coeff command is not yet fully implemented in two
- respects. First, some pair styles do not yet write their coefficient
- information into the coeff file. This means you will need to specify
- that information in your input script that reads the data file, via
- the :doc:`pair_coeff <pair_coeff>` command.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-none
-
-Related commands
-""""""""""""""""
-
-:doc:`read_data <read_data>`, :doc:`write_restart <write_restart>`,
-:doc:`write_data <write_data>`
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/write_data.txt b/doc/html/_sources/write_data.txt
deleted file mode 100644
index 7ecfba0d8..000000000
--- a/doc/html/_sources/write_data.txt
+++ /dev/null
@@ -1,142 +0,0 @@
-.. index:: write_data
-
-write_data command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- write_data file keyword value ...
-
-* file = name of data file to write out
-* zero or more keyword/value pairs may be appended
-* keyword = *pair* or *nocoeff*
-.. parsed-literal::
-
- *nocoeff* = do not write out force field info
- *pair* value = *ii* or *ij*
- *ii* = write one line of pair coefficient info per atom type
- *ij* = write one line of pair coefficient info per IJ atom type pair
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- write_data data.polymer
- write_data data.*
-
-Description
-"""""""""""
-
-Write a data file in text format of the current state of the
-simulation. Data files can be read by the :doc:`read data <read_data>`
-command to begin a simulation. The :doc:`read_data <read_data>` command
-also describes their format.
-
-Similar to :doc:`dump <dump>` files, the data filename can contain a "*"
-wild-card character. The "*" is replaced with the current timestep
-value.
-
-.. note::
-
- The write-data command is not yet fully implemented in two
- respects. First, most pair styles do not yet write their coefficient
- information into the data file. This means you will need to specify
- that information in your input script that reads the data file, via
- the :doc:`pair_coeff <pair_coeff>` command. Second, a few of the :doc:`atom styles <atom_style>` (body, ellipsoid, line, tri) that store
- auxiliary "bonus" information about aspherical particles, do not yet
- write the bonus info into the data file. Both these functionalities
- will be added to the write_data command later.
-
-Because a data file is in text format, if you use a data file written
-out by this command to restart a simulation, the initial state of the
-new run will be slightly different than the final state of the old run
-(when the file was written) which was represented internally by LAMMPS
-in binary format. A new simulation which reads the data file will
-thus typically diverge from a simulation that continued in the
-original input script.
-
-If you want to do more exact restarts, using binary files, see the
-:doc:`restart <restart>`, :doc:`write_restart <write_restart>`, and
-:doc:`read_restart <read_restart>` commands. You can also convert
-binary restart files to text data files, after a simulation has run,
-using the :ref:`-r command-line switch <start_7>`.
-
-.. note::
-
- Only limited information about a simulation is stored in a data
- file. For example, no information about atom :doc:`groups <group>` and
- :doc:`fixes <fix>` are stored. :doc:`Binary restart files <read_restart>`
- store more information.
-
-Bond interactions (angle, etc) that have been turned off by the :doc:`fix shake <fix_shake>` or :doc:`delete_bonds <delete_bonds>` command will
-be written to a data file as if they are turned on. This means they
-will need to be turned off again in a new run after the data file is
-read.
-
-Bonds that are broken (e.g. by a bond-breaking potential) are not
-written to the data file. Thus these bonds will not exist when the
-data file is read.
-
-
-----------
-
-
-The *nocoeff* keyword requests that no force field parameters should
-be written to the data file. This can be very helpful, if one wants
-to make significant changes to the force field or if the parameters
-are read in separately anyway, e.g. from an include file.
-
-The *pair* keyword lets you specify in what format the pair
-coefficient information is written into the data file. If the value
-is specified as *ii*\ , then one line per atom type is written, to
-specify the coefficients for each of the I=J interactions. This means
-that no cross-interactions for I != J will be specified in the data
-file and the pair style will apply its mixing rule, as documented on
-individual :doc:`pair_style <pair_style>` doc pages. Of course this
-behavior can be overridden in the input script after reading the data
-file, by specifying additional :doc:`pair_coeff <pair_coeff>` commands
-for any desired I,J pairs.
-
-If the value is specified as *ij*\ , then one line of coefficients is
-written for all I,J pairs where I <= J. These coefficients will
-include any specific settings made in the input script up to that
-point. The presence of these I != J coefficients in the data file
-will effectively turn off the default mixing rule for the pair style.
-Again, the coefficient values in the data file can can be overridden
-in the input script after reading the data file, by specifying
-additional :doc:`pair_coeff <pair_coeff>` commands for any desired I,J
-pairs.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command requires inter-processor communication to migrate atoms
-before the data file is written. This means that your system must be
-ready to perform a simulation before using this command (force fields
-setup, atom masses initialized, etc).
-
-Related commands
-""""""""""""""""
-
-:doc:`read_data <read_data>`, :doc:`write_restart <write_restart>`
-
-Default
-"""""""
-
-The option defaults are pair = ii.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/write_dump.txt b/doc/html/_sources/write_dump.txt
deleted file mode 100644
index 2a161ba8a..000000000
--- a/doc/html/_sources/write_dump.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-.. index:: write_dump
-
-write_dump command
-==================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- write_dump group-ID style file dump-args modify dump_modify-args
-
-* group-ID = ID of the group of atoms to be dumped
-* style = any of the supported :doc:`dump styles <dump>`
-* file = name of file to write dump info to
-* dump-args = any additional args needed for a particular :doc:`dump style <dump>`
-* modify = all args after this keyword are passed to :doc:`dump_modify <dump_modify>` (optional)
-* dump-modify-args = args for :doc:`dump_modify <dump_modify>` (optional)
-Examples
-""""""""
-
-.. parsed-literal::
-
- write_dump all atom dump.atom
- write_dump subgroup atom dump.run.bin
- write_dump all custom dump.myforce.* id type x y vx fx
- write_dump flow custom dump.%.myforce id type c_myF[3] v_ke modify sort id
- write_dump all xyz system.xyz modify sort id elements O H
- write_dump all image snap*.jpg type type size 960 960 modify backcolor white
- write_dump all image snap*.jpg element element &
- bond atom 0.3 shiny 0.1 ssao yes 6345 0.2 size 1600 1600 &
- modify backcolor white element C C O H N C C C O H H S O H
-
-Description
-"""""""""""
-
-Dump a single snapshot of atom quantities to one or more files for the
-current state of the system. This is a one-time immediate operation,
-in contrast to the :doc:`dump <dump>` command which will will set up a
-dump style to write out snapshots periodically during a running
-simulation.
-
-The syntax for this command is mostly identical to that of the
-:doc:`dump <dump>` and :doc:`dump_modify <dump_modify>` commands as if
-they were concatenated together, with the following exceptions: There
-is no need for a dump ID or dump frequency and the keyword *modify* is
-added. The latter is so that the full range of
-:doc:`dump_modify <dump_modify>` options can be specified for the single
-snapshot, just as they can be for multiple snapshots. The *modify*
-keyword separates the arguments that would normally be passed to the
-*dump* command from those that would be given the *dump_modify*\ . Both
-support optional arguments and thus LAMMPS needs to be able to cleanly
-separate the two sets of args.
-
-Note that if the specified filename uses wildcard characters "*" or
-"%", as supported by the :doc:`dump <dump>` commmand, they will operate
-in the same fashion to create the new filename(s). Normally, :doc:`dump image <dump_image>` files require a filename with a "*" character
-for the timestep. That is not the case for the write_dump command; no
-wildcard "*" character is necessary.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-All restrictions for the :doc:`dump <dump>` and
-:doc:`dump_modify <dump_modify>` commands apply to this command as well,
-with the exception of the :doc:`dump image <dump_image>` filename not
-requiring a wildcard "*" character, as noted above.
-
-Since dumps are normally written during a :doc:`run <run>` or :doc:`energy minimization <minimize>`, the simulation has to be ready to run
-before this command can be used. Similarly, if the dump requires
-information from a compute, fix, or variable, the information needs to
-have been calculated for the current timestep (e.g. by a prior run),
-else LAMMPS will generate an error message.
-
-For example, it is not possible to dump per-atom energy with this
-command before a run has been performed, since no energies and forces
-have yet been calculated. See the :doc:`variable <variable>` doc page
-sectinn on Variable Accuracy for more information on this topic.
-
-Related commands
-""""""""""""""""
-
-:doc:`dump <dump>`, :doc:`dump image <dump_image>`,
-:doc:`dump_modify <dump_modify>`
-
-Default
-"""""""
-
-The defaults are listed on the doc pages for the :doc:`dump <dump>` and
-:doc:`dump image <dump_image>` and :doc:`dump_modify <dump_modify>`
-commands.
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/_sources/write_restart.txt b/doc/html/_sources/write_restart.txt
deleted file mode 100644
index 33b0548f9..000000000
--- a/doc/html/_sources/write_restart.txt
+++ /dev/null
@@ -1,141 +0,0 @@
-.. index:: write_restart
-
-write_restart command
-=====================
-
-Syntax
-""""""
-
-.. parsed-literal::
-
- write_restart file keyword value ...
-
-* file = name of file to write restart information to
-* zero or more keyword/value pairs may be appended
-* keyword = *fileper* or *nfile*
-.. parsed-literal::
-
- *fileper* arg = Np
- Np = write one file for every this many processors
- *nfile* arg = Nf
- Nf = write this many files, one from each of Nf processors
-
-
-
-Examples
-""""""""
-
-.. parsed-literal::
-
- write_restart restart.equil
- write_restart restart.equil.mpiio
- write_restart poly.%.* nfile 10
-
-Description
-"""""""""""
-
-Write a binary restart file of the current state of the simulation.
-
-During a long simulation, the :doc:`restart <restart>` command is
-typically used to output restart files periodically. The
-write_restart command is useful after a minimization or whenever you
-wish to write out a single current restart file.
-
-Similar to :doc:`dump <dump>` files, the restart filename can contain
-two wild-card characters. If a "*" appears in the filename, it is
-replaced with the current timestep value. If a "%" character appears
-in the filename, then one file is written by each processor and the
-"%" character is replaced with the processor ID from 0 to P-1. An
-additional file with the "%" replaced by "base" is also written, which
-contains global information. For example, the files written for
-filename restart.% would be restart.base, restart.0, restart.1, ...
-restart.P-1. This creates smaller files and can be a fast mode of
-output and subsequent input on parallel machines that support parallel
-I/O. The optional *fileper* and *nfile* keywords discussed below can
-alter the number of files written.
-
-The restart file can also be written in parallel as one large binary
-file via the MPI-IO library, which is part of the MPI standard for
-versions 2.0 and above. Using MPI-IO requires two steps. First,
-build LAMMPS with its MPIIO package installed, e.g.
-
-.. parsed-literal::
-
- make yes-mpiio # installs the MPIIO package
- make g++ # build LAMMPS for your platform
-
-Second, use a restart filename which contains ".mpiio". Note that it
-does not have to end in ".mpiio", just contain those characters.
-Unlike MPI-IO dump files, a particular restart file must be both
-written and read using MPI-IO.
-
-Restart files can be read by a :doc:`read_restart <read_restart>`
-command to restart a simulation from a particular state. Because the
-file is binary (to enable exact restarts), it may not be readable on
-another machine. In this case, you can use the :ref:`-r command-line switch <start_7>` to convert a restart file to a data
-file.
-
-.. note::
-
- Although the purpose of restart files is to enable restarting a
- simulation from where it left off, not all information about a
- simulation is stored in the file. For example, the list of fixes that
- were specified during the initial run is not stored, which means the
- new input script must specify any fixes you want to use. Even when
- restart information is stored in the file, as it is for some fixes,
- commands may need to be re-specified in the new input script, in order
- to re-use that information. Details are usually given in the
- documentation of the respective command. Also, see the
- :doc:`read_restart <read_restart>` command for general information about
- what is stored in a restart file.
-
-
-----------
-
-
-The optional *nfile* or *fileper* keywords can be used in conjunction
-with the "%" wildcard character in the specified restart file name.
-As explained above, the "%" character causes the restart file to be
-written in pieces, one piece for each of P processors. By default P =
-the number of processors the simulation is running on. The *nfile* or
-*fileper* keyword can be used to set P to a smaller value, which can
-be more efficient when running on a large number of processors.
-
-The *nfile* keyword sets P to the specified Nf value. For example, if
-Nf = 4, and the simulation is running on 100 processors, 4 files will
-be written, by processors 0,25,50,75. Each will collect information
-from itself and the next 24 processors and write it to a restart file.
-
-For the *fileper* keyword, the specified value of Np means write one
-file for every Np processors. For example, if Np = 4, every 4th
-processor (0,4,8,12,etc) will collect information from itself and the
-next 3 processors and write it to a restart file.
-
-
-----------
-
-
-Restrictions
-""""""""""""
-
-
-This command requires inter-processor communication to migrate atoms
-before the restart file is written. This means that your system must
-be ready to perform a simulation before using this command (force
-fields setup, atom masses initialized, etc).
-
-To write and read restart files in parallel with MPI-IO, the MPIIO
-package must be installed.
-
-Related commands
-""""""""""""""""
-
-:doc:`restart <restart>`, :doc:`read_restart <read_restart>`,
-:doc:`write_data <write_data>`
-
-**Default:** none
-
-
-.. _lws: http://lammps.sandia.gov
-.. _ld: Manual.html
-.. _lc: Section_commands.html#comm
diff --git a/doc/html/compute_sna_atom.html b/doc/html/compute_sna_atom.html
index f5986941a..e61705f25 100644
--- a/doc/html/compute_sna_atom.html
+++ b/doc/html/compute_sna_atom.html
@@ -1,396 +1,396 @@
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>compute sna/atom command &mdash; LAMMPS documentation</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/sphinxcontrib-images/LightBox2/lightbox2/css/lightbox.css" type="text/css" />
<link rel="top" title="LAMMPS documentation" href="index.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-nav-search">
<a href="Manual.html" class="icon icon-home"> LAMMPS
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="Section_intro.html">1. Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_start.html">2. Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_commands.html">3. Commands</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_packages.html">4. Packages</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_accelerate.html">5. Accelerating LAMMPS performance</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_howto.html">6. How-to discussions</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_example.html">7. Example problems</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_perf.html">8. Performance &amp; scalability</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_tools.html">9. Additional tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_modify.html">10. Modifying &amp; extending LAMMPS</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_python.html">11. Python interface to LAMMPS</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_errors.html">12. Errors</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_history.html">13. Future and history</a></li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="Manual.html">LAMMPS</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="Manual.html">Docs</a> &raquo;</li>
<li>compute sna/atom command</li>
<li class="wy-breadcrumbs-aside">
<a href="http://lammps.sandia.gov">Website</a>
<a href="Section_commands.html#comm">Commands</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="compute-sna-atom-command">
<span id="index-0"></span><h1>compute sna/atom command</h1>
</div>
<div class="section" id="compute-snad-atom-command">
<h1>compute snad/atom command</h1>
</div>
<div class="section" id="compute-snav-atom-command">
<h1>compute snav/atom command</h1>
<div class="section" id="syntax">
<h2>Syntax</h2>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">compute</span> <span class="n">ID</span> <span class="n">group</span><span class="o">-</span><span class="n">ID</span> <span class="n">sna</span><span class="o">/</span><span class="n">atom</span> <span class="n">rcutfac</span> <span class="n">rfac0</span> <span class="n">twojmax</span> <span class="n">R_1</span> <span class="n">R_2</span> <span class="o">...</span> <span class="n">w_1</span> <span class="n">w_2</span> <span class="o">...</span> <span class="n">keyword</span> <span class="n">values</span> <span class="o">...</span>
<span class="n">compute</span> <span class="n">ID</span> <span class="n">group</span><span class="o">-</span><span class="n">ID</span> <span class="n">snad</span><span class="o">/</span><span class="n">atom</span> <span class="n">rcutfac</span> <span class="n">rfac0</span> <span class="n">twojmax</span> <span class="n">R_1</span> <span class="n">R_2</span> <span class="o">...</span> <span class="n">w_1</span> <span class="n">w_2</span> <span class="o">...</span> <span class="n">keyword</span> <span class="n">values</span> <span class="o">...</span>
<span class="n">compute</span> <span class="n">ID</span> <span class="n">group</span><span class="o">-</span><span class="n">ID</span> <span class="n">snav</span><span class="o">/</span><span class="n">atom</span> <span class="n">rcutfac</span> <span class="n">rfac0</span> <span class="n">twojmax</span> <span class="n">R_1</span> <span class="n">R_2</span> <span class="o">...</span> <span class="n">w_1</span> <span class="n">w_2</span> <span class="o">...</span> <span class="n">keyword</span> <span class="n">values</span> <span class="o">...</span>
</pre></div>
</div>
<ul class="simple">
<li>ID, group-ID are documented in <a class="reference internal" href="compute.html"><span class="doc">compute</span></a> command</li>
<li>sna/atom = style name of this compute command</li>
<li>rcutfac = scale factor applied to all cutoff radii (positive real)</li>
<li>rfac0 = parameter in distance to angle conversion (0 &lt; rcutfac &lt; 1)</li>
<li>twojmax = band limit for bispectrum components (non-negative integer)</li>
<li>R_1, R_2,... = list of cutoff radii, one for each type (distance units)</li>
<li>w_1, w_2,... = list of neighbor weights, one for each type</li>
<li>zero or more keyword/value pairs may be appended</li>
<li>keyword = <em>diagonal</em> or <em>rmin0</em> or <em>switchflag</em></li>
</ul>
<pre class="literal-block">
<em>diagonal</em> value = <em>0</em> or <em>1</em> or <em>2</em> or <em>3</em>
<em>0</em> = all j1, j2, j &lt;= twojmax, j2 &lt;= j1
<em>1</em> = subset satisfying j1 == j2
<em>2</em> = subset satisfying j1 == j2 == j3
<em>3</em> = subset satisfying j2 &lt;= j1 &lt;= j
<em>rmin0</em> value = parameter in distance to angle conversion (distance units)
<em>switchflag</em> value = <em>0</em> or <em>1</em>
<em>0</em> = do not use switching function
<em>1</em> = use switching function
</pre>
</div>
<div class="section" id="examples">
<h2>Examples</h2>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">compute</span> <span class="n">b</span> <span class="nb">all</span> <span class="n">sna</span><span class="o">/</span><span class="n">atom</span> <span class="mf">1.4</span> <span class="mf">0.99363</span> <span class="mi">6</span> <span class="mf">2.0</span> <span class="mf">2.4</span> <span class="mf">0.75</span> <span class="mf">1.0</span> <span class="n">diagonal</span> <span class="mi">3</span> <span class="n">rmin0</span> <span class="mf">0.0</span>
<span class="n">compute</span> <span class="n">db</span> <span class="nb">all</span> <span class="n">sna</span><span class="o">/</span><span class="n">atom</span> <span class="mf">1.4</span> <span class="mf">0.95</span> <span class="mi">6</span> <span class="mf">2.0</span> <span class="mf">1.0</span>
<span class="n">compute</span> <span class="n">vb</span> <span class="nb">all</span> <span class="n">sna</span><span class="o">/</span><span class="n">atom</span> <span class="mf">1.4</span> <span class="mf">0.95</span> <span class="mi">6</span> <span class="mf">2.0</span> <span class="mf">1.0</span>
</pre></div>
</div>
</div>
<div class="section" id="description">
<h2>Description</h2>
<p>Define a computation that calculates a set of bispectrum components
for each atom in a group.</p>
<p>Bispectrum components of an atom are order parameters characterizing
the radial and angular distribution of neighbor atoms. The detailed
mathematical definition is given in the paper by Thompson et
al. <a class="reference internal" href="pair_snap.html#thompson2014"><span class="std std-ref">(Thompson)</span></a></p>
<p>The position of a neighbor atom <em>i&#8217;</em> relative to a central atom <em>i</em> is
a point within the 3D ball of radius <em>R_ii&#8217; = rcutfac*(R_i + R_i&#8217;)</em></p>
<p>Bartok et al. <a class="reference internal" href="pair_snap.html#bartok2010"><span class="std std-ref">(Bartok)</span></a>, proposed mapping this 3D ball
onto the 3-sphere, the surface of the unit ball in a four-dimensional
space. The radial distance <em>r</em> within <em>R_ii&#8217;</em> is mapped on to a third
polar angle <em>theta0</em> defined by,</p>
<img alt="_images/compute_sna_atom1.jpg" class="align-center" src="_images/compute_sna_atom1.jpg" />
<p>In this way, all possible neighbor positions are mapped on to a subset
of the 3-sphere. Points south of the latitude <em>theta0max=rfac0*Pi</em>
are excluded.</p>
<p>The natural basis for functions on the 3-sphere is formed by the 4D
hyperspherical harmonics <em>U^j_m,m&#8217;(theta, phi, theta0).</em> These
functions are better known as <em>D^j_m,m&#8217;,</em> the elements of the Wigner
<em>D</em>-matrices <a class="reference internal" href="#meremianin2006"><span class="std std-ref">(Meremianin</span></a>,
<a class="reference internal" href="#varshalovich1987"><span class="std std-ref">Varshalovich)</span></a>.</p>
<p>The density of neighbors on the 3-sphere can be written as a sum of
Dirac-delta functions, one for each neighbor, weighted by species and
radial distance. Expanding this density function as a generalized
Fourier series in the basis functions, we can write each Fourier
coefficient as</p>
<img alt="_images/compute_sna_atom2.jpg" class="align-center" src="_images/compute_sna_atom2.jpg" />
<p>The <em>w_i&#8217;</em> neighbor weights are dimensionless numbers that are chosen
to distinguish atoms of different types, while the central atom is
arbitrarily assigned a unit weight. The function <em>fc(r)</em> ensures that
the contribution of each neighbor atom goes smoothly to zero at
<em>R_ii&#8217;</em>:</p>
<img alt="_images/compute_sna_atom4.jpg" class="align-center" src="_images/compute_sna_atom4.jpg" />
<p>The expansion coefficients <em>u^j_m,m&#8217;</em> are complex-valued and they are
not directly useful as descriptors, because they are not invariant
under rotation of the polar coordinate frame. However, the following
scalar triple products of expansion coefficients can be shown to be
real-valued and invariant under rotation <a class="reference internal" href="pair_snap.html#bartok2010"><span class="std std-ref">(Bartok)</span></a>.</p>
<img alt="_images/compute_sna_atom3.jpg" class="align-center" src="_images/compute_sna_atom3.jpg" />
<p>The constants <em>H^jmm&#8217;_j1m1m1&#8217;_j2m2m2&#8217;</em> are coupling coefficients,
analogous to Clebsch-Gordan coefficients for rotations on the
2-sphere. These invariants are the components of the bispectrum and
these are the quantities calculated by the compute <em>sna/atom</em>. They
characterize the strength of density correlations at three points on
the 3-sphere. The j2=0 subset form the power spectrum, which
characterizes the correlations of two points. The lowest-order
components describe the coarsest features of the density function,
while higher-order components reflect finer detail. Note that the
central atom is included in the expansion, so three point-correlations
can be either due to three neighbors, or two neighbors and the central
atom.</p>
<p>Compute <em>snad/atom</em> calculates the derivative of the bispectrum components
summed separately for each atom type:</p>
<img alt="_images/compute_sna_atom5.jpg" class="align-center" src="_images/compute_sna_atom5.jpg" />
<p>The sum is over all atoms <em>i&#8217;</em> of atom type <em>I</em>. For each atom <em>i</em>,
this compute evaluates the above expression for each direction, each
atom type, and each bispectrum component. See section below on output
for a detailed explanation.</p>
<p>Compute <em>snav/atom</em> calculates the virial contribution due to the
derivatives:</p>
<img alt="_images/compute_sna_atom6.jpg" class="align-center" src="_images/compute_sna_atom6.jpg" />
<p>Again, the sum is over all atoms <em>i&#8217;</em> of atom type <em>I</em>. For each atom
<em>i</em>, this compute evaluates the above expression for each of the six
virial components, each atom type, and each bispectrum component. See
section below on output for a detailed explanation.</p>
<p>The value of all bispectrum components will be zero for atoms not in
the group. Neighbor atoms not in the group do not contribute to the
bispectrum of atoms in the group.</p>
<p>The neighbor list needed to compute this quantity is constructed each
time the calculation is performed (i.e. each time a snapshot of atoms
is dumped). Thus it can be inefficient to compute/dump this quantity
too frequently.</p>
<p>The argument <em>rcutfac</em> is a scale factor that controls the ratio of
atomic radius to radial cutoff distance.</p>
<p>The argument <em>rfac0</em> and the optional keyword <em>rmin0</em> define the
linear mapping from radial distance to polar angle <em>theta0</em> on the
3-sphere.</p>
<p>The argument <em>twojmax</em> and the keyword <em>diagonal</em> define which
bispectrum components are generated. See section below on output for a
detailed explanation of the number of bispectrum components and the
ordered in which they are listed</p>
<p>The keyword <em>switchflag</em> can be used to turn off the switching
function.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">If you have a bonded system, then the settings of
<a class="reference internal" href="special_bonds.html"><span class="doc">special_bonds</span></a> command can remove pairwise
interactions between atoms in the same bond, angle, or dihedral. This
is the default setting for the <a class="reference internal" href="special_bonds.html"><span class="doc">special_bonds</span></a>
command, and means those pairwise interactions do not appear in the
neighbor list. Because this fix uses the neighbor list, it also means
those pairs will not be included in the calculation. One way to get
around this, is to write a dump file, and use the <a class="reference internal" href="rerun.html"><span class="doc">rerun</span></a>
command to compute the bispectrum components for snapshots in the dump
file. The rerun script can use a <a class="reference internal" href="special_bonds.html"><span class="doc">special_bonds</span></a>
command that includes all pairs in the neighbor list.</p>
</div>
<p>;line</p>
<p><strong>Output info:</strong></p>
<p>Compute <em>sna/atom</em> calculates a per-atom array, each column
corresponding to a particular bispectrum component. The total number
of columns and the identities of the bispectrum component contained in
each column depend on the values of <em>twojmax</em> and <em>diagonal</em>, as
described by the following piece of python code:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">j1</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">twojmax</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="k">if</span><span class="p">(</span><span class="n">diagonal</span><span class="o">==</span><span class="mi">2</span><span class="p">):</span>
- <span class="nb">print</span> <span class="n">j1</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">j1</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">j1</span><span class="o">/</span><span class="mi">2</span>
+ <span class="nb">print</span> <span class="n">j1</span><span class="o">/</span><span class="mf">2.</span><span class="p">,</span><span class="n">j1</span><span class="o">/</span><span class="mf">2.</span><span class="p">,</span><span class="n">j1</span><span class="o">/</span><span class="mf">2.</span>
<span class="k">elif</span><span class="p">(</span><span class="n">diagonal</span><span class="o">==</span><span class="mi">1</span><span class="p">):</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="nb">min</span><span class="p">(</span><span class="n">twojmax</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">j1</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">):</span>
- <span class="nb">print</span> <span class="n">j1</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">j1</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">j</span><span class="o">/</span><span class="mi">2</span>
+ <span class="nb">print</span> <span class="n">j1</span><span class="o">/</span><span class="mf">2.</span><span class="p">,</span><span class="n">j1</span><span class="o">/</span><span class="mf">2.</span><span class="p">,</span><span class="n">j</span><span class="o">/</span><span class="mf">2.</span>
<span class="k">elif</span><span class="p">(</span><span class="n">diagonal</span><span class="o">==</span><span class="mi">0</span><span class="p">):</span>
<span class="k">for</span> <span class="n">j2</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">j1</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">j1</span><span class="o">-</span><span class="n">j2</span><span class="p">,</span><span class="nb">min</span><span class="p">(</span><span class="n">twojmax</span><span class="p">,</span><span class="n">j1</span><span class="o">+</span><span class="n">j2</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">):</span>
- <span class="nb">print</span> <span class="n">j1</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">j2</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">j</span><span class="o">/</span><span class="mi">2</span>
+ <span class="nb">print</span> <span class="n">j1</span><span class="o">/</span><span class="mf">2.</span><span class="p">,</span><span class="n">j2</span><span class="o">/</span><span class="mf">2.</span><span class="p">,</span><span class="n">j</span><span class="o">/</span><span class="mf">2.</span>
<span class="k">elif</span><span class="p">(</span><span class="n">diagonal</span><span class="o">==</span><span class="mi">3</span><span class="p">):</span>
<span class="k">for</span> <span class="n">j2</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">j1</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">j1</span><span class="o">-</span><span class="n">j2</span><span class="p">,</span><span class="nb">min</span><span class="p">(</span><span class="n">twojmax</span><span class="p">,</span><span class="n">j1</span><span class="o">+</span><span class="n">j2</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">):</span>
- <span class="k">if</span> <span class="p">(</span><span class="n">j</span><span class="o">&gt;=</span><span class="n">j1</span><span class="p">):</span> <span class="nb">print</span> <span class="n">j1</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">j2</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="n">j</span><span class="o">/</span><span class="mi">2</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">j</span><span class="o">&gt;=</span><span class="n">j1</span><span class="p">):</span> <span class="nb">print</span> <span class="n">j1</span><span class="o">/</span><span class="mf">2.</span><span class="p">,</span><span class="n">j2</span><span class="o">/</span><span class="mf">2.</span><span class="p">,</span><span class="n">j</span><span class="o">/</span><span class="mf">2.</span>
</pre></div>
</div>
<p>Compute <em>snad/atom</em> evaluates a per-atom array. The columns are
arranged into <em>ntypes</em> blocks, listed in order of atom type <em>I</em>. Each
block contains three sub-blocks corresponding to the <em>x</em>, <em>y</em>, and <em>z</em>
components of the atom position. Each of these sub-blocks contains
one column for each bispectrum component, the same as for compute
<em>sna/atom</em></p>
<p>Compute <em>snav/atom</em> evaluates a per-atom array. The columns are
arranged into <em>ntypes</em> blocks, listed in order of atom type <em>I</em>. Each
block contains six sub-blocks corresponding to the <em>xx</em>, <em>yy</em>, <em>zz</em>,
<em>yz</em>, <em>xz</em>, and <em>xy</em> components of the virial tensor in Voigt
notation. Each of these sub-blocks contains one column for each
bispectrum component, the same as for compute <em>sna/atom</em></p>
<p>These values can be accessed by any command that uses per-atom values
from a compute as input. See <a class="reference internal" href="Section_howto.html#howto-15"><span class="std std-ref">Section_howto 15</span></a> for an overview of LAMMPS output
options.</p>
</div>
<div class="section" id="restrictions">
<h2>Restrictions</h2>
<p>These computes are part of the SNAP package. They are only enabled if
LAMMPS was built with that package. See the <a class="reference internal" href="Section_start.html#start-3"><span class="std std-ref">Making LAMMPS</span></a> section for more info.</p>
</div>
<div class="section" id="related-commands">
<h2>Related commands</h2>
<p><a class="reference internal" href="pair_snap.html"><span class="doc">pair_style snap</span></a></p>
</div>
<div class="section" id="default">
<h2>Default</h2>
<p>The optional keyword defaults are <em>diagonal</em> = 0, <em>rmin0</em> = 0,
<em>switchflag</em> = 1.</p>
<hr class="docutils" />
<p id="thompson2014"><strong>(Thompson)</strong> Thompson, Swiler, Trott, Foiles, Tucker, under review, preprint
available at <a class="reference external" href="http://arxiv.org/abs/1409.3880">arXiv:1409.3880</a></p>
<p id="bartok2010"><strong>(Bartok)</strong> Bartok, Payne, Risi, Csanyi, Phys Rev Lett, 104, 136403 (2010).</p>
<p id="meremianin2006"><strong>(Meremianin)</strong> Meremianin, J. Phys. A, 39, 3099 (2006).</p>
<p id="varshalovich1987"><strong>(Varshalovich)</strong> Varshalovich, Moskalev, Khersonskii, Quantum Theory
of Angular Momentum, World Scientific, Singapore (1987).</p>
</div>
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2013 Sandia Corporation.
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./',
VERSION:'',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/lightbox.min.js"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2-customize/jquery-noconflict.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>
\ No newline at end of file
diff --git a/doc/html/fix_flow_gauss.html b/doc/html/fix_flow_gauss.html
new file mode 100644
index 000000000..ca10c2d38
--- /dev/null
+++ b/doc/html/fix_flow_gauss.html
@@ -0,0 +1,321 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <title>fix flow/gauss command &mdash; LAMMPS documentation</title>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+
+
+
+ <link rel="stylesheet" href="_static/sphinxcontrib-images/LightBox2/lightbox2/css/lightbox.css" type="text/css" />
+
+
+
+ <link rel="top" title="LAMMPS documentation" href="index.html"/>
+
+
+ <script src="_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+ <div class="wy-grid-for-nav">
+
+
+ <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+ <div class="wy-side-nav-search">
+
+
+
+ <a href="Manual.html" class="icon icon-home"> LAMMPS
+
+
+
+ </a>
+
+
+<div role="search">
+ <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+ <input type="text" name="q" placeholder="Search docs" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+</div>
+
+
+ </div>
+
+ <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+
+
+
+ <ul>
+<li class="toctree-l1"><a class="reference internal" href="Section_intro.html">1. Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_start.html">2. Getting Started</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_commands.html">3. Commands</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_packages.html">4. Packages</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_accelerate.html">5. Accelerating LAMMPS performance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_howto.html">6. How-to discussions</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_example.html">7. Example problems</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_perf.html">8. Performance &amp; scalability</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_tools.html">9. Additional tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_modify.html">10. Modifying &amp; extending LAMMPS</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_python.html">11. Python interface to LAMMPS</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_errors.html">12. Errors</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Section_history.html">13. Future and history</a></li>
+</ul>
+
+
+
+ </div>
+ &nbsp;
+ </nav>
+
+ <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+
+ <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+ <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+ <a href="Manual.html">LAMMPS</a>
+ </nav>
+
+
+
+ <div class="wy-nav-content">
+ <div class="rst-content">
+ <div role="navigation" aria-label="breadcrumbs navigation">
+ <ul class="wy-breadcrumbs">
+ <li><a href="Manual.html">Docs</a> &raquo;</li>
+
+ <li>fix flow/gauss command</li>
+ <li class="wy-breadcrumbs-aside">
+
+
+ <a href="http://lammps.sandia.gov">Website</a>
+ <a href="Section_commands.html#comm">Commands</a>
+
+ </li>
+ </ul>
+ <hr/>
+
+</div>
+ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+ <div itemprop="articleBody">
+
+ <div class="section" id="fix-flow-gauss-command">
+<span id="index-0"></span><h1>fix flow/gauss command</h1>
+<div class="section" id="syntax">
+<h2>Syntax</h2>
+<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">fix</span> <span class="n">ID</span> <span class="n">group</span><span class="o">-</span><span class="n">ID</span> <span class="n">flow</span><span class="o">/</span><span class="n">gauss</span> <span class="n">xflag</span> <span class="n">yflag</span> <span class="n">zflag</span> <span class="n">keyword</span>
+</pre></div>
+</div>
+<ul class="simple">
+<li>ID, group-ID are documented in <a class="reference internal" href="fix.html"><span class="doc">fix</span></a> command</li>
+<li>flow/gauss = style name of this fix command</li>
+<li>xflag,yflag,zflag = 0 or 1</li>
+</ul>
+<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">0</span> <span class="o">=</span> <span class="n">do</span> <span class="ow">not</span> <span class="n">conserve</span> <span class="n">current</span> <span class="ow">in</span> <span class="n">this</span> <span class="n">dimension</span>
+<span class="mi">1</span> <span class="o">=</span> <span class="n">conserve</span> <span class="n">current</span> <span class="ow">in</span> <span class="n">this</span> <span class="n">dimension</span>
+</pre></div>
+</div>
+<ul class="simple">
+<li>zero or more keyword/value pairs may be appended</li>
+<li>keyword = <em>energy</em></li>
+</ul>
+<pre class="literal-block">
+<em>energy</em> value = no or yes
+ no = do not compute work done by this fix
+ yes = compute work done by this fix
+</pre>
+</div>
+<div class="section" id="examples">
+<h2>Examples</h2>
+<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">fix</span> <span class="n">GD</span> <span class="n">fluid</span> <span class="n">flow</span><span class="o">/</span><span class="n">gauss</span> <span class="mi">1</span> <span class="mi">0</span> <span class="mi">0</span>
+<span class="n">fix</span> <span class="n">GD</span> <span class="n">fluid</span> <span class="n">flow</span><span class="o">/</span><span class="n">gauss</span> <span class="mi">1</span> <span class="mi">1</span> <span class="mi">1</span> <span class="n">energy</span> <span class="n">yes</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="description">
+<h2>Description</h2>
+<p>This fix implements the Gaussian dynamics (GD) method to simulate a
+system at constant mass flux <a class="reference internal" href="#strong"><span class="std std-ref">(Strong)</span></a>. GD is a
+nonequilibrium molecular dynamics simulation method that can be used
+to study fluid flows through pores, pipes, and channels. In its
+original implementation GD was used to compute the pressure required
+to achieve a fixed mass flux through an opening. The flux can be
+conserved in any combination of the directions, x, y, or z, using
+xflag,yflag,zflag. This fix does not initialize a net flux through a
+system, it only conserves the center-of-mass momentum that is present
+when the fix is declared in the input script. Use the
+<a class="reference internal" href="velocity.html"><span class="doc">velocity</span></a> command to generate an initial center-of-mass
+momentum.</p>
+<p>GD applies an external fluctuating gravitational field that acts as a
+driving force to keep the system away from equilibrium. To maintain
+steady state, a profile-unbiased thermostat must be implemented to
+dissipate the heat that is added by the driving force. <a class="reference internal" href="compute_temp_profile.html"><span class="doc">Compute temp/profile</span></a> can be used to implement a
+profile-unbiased thermostat.</p>
+<p>A common use of this fix is to compute a pressure drop across a pipe,
+pore, or membrane. The pressure profile can be computed in LAMMPS with
+<a class="reference internal" href="compute_stress_atom.html"><span class="doc">compute stress/atom</span></a> and <a class="reference internal" href="fix_ave_chunk.html"><span class="doc">fix ave/chunk</span></a>, or with the hardy method in <a class="reference internal" href="fix_atc.html"><span class="doc">fix atc</span></a>. Note that the simple <a class="reference internal" href="compute_stress_atom.html"><span class="doc">compute stress/atom</span></a> method is only accurate away
+from inhomogeneities in the fluid, such as fixed wall atoms. Further,
+the computed pressure profile must be corrected for the acceleration
+applied by GD before computing a pressure drop or comparing it to
+other methods, such as the pump method <a class="reference internal" href="#zhu"><span class="std std-ref">(Zhu)</span></a>. The pressure
+correction is discussed and described in <a class="reference internal" href="#strong"><span class="std std-ref">(Strong)</span></a>.</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">For a complete example including the considerations discussed
+above, see the examples/USER/flow_gauss directory.</p>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">Only the flux of the atoms in group-ID will be conserved. If the
+velocities of the group-ID atoms are coupled to the velocities of
+other atoms in the simulation, the flux will not be conserved. For
+example, in a simulation with fluid atoms and harmonically constrained
+wall atoms, if a single thermostat is applied to group <em>all</em>, the
+fluid atom velocities will be coupled to the wall atom velocities, and
+the flux will not be conserved. This issue can be avoided by
+thermostatting the fluid and wall groups separately.</p>
+</div>
+<p>Adding an acceleration to atoms does work on the system. This added
+energy can be optionally subtracted from the potential energy for the
+thermodynamic output (see below) to check that the timestep is small
+enough to conserve energy. Since the applied acceleration is
+fluctuating in time, the work cannot be computed from a potential. As
+a result, computing the work is slightly more computationally
+expensive than usual, so it is not performed by default. To invoke the
+work calculation, use the <em>energy</em> keyword. The
+<a class="reference internal" href="fix_modify.html"><span class="doc">fix_modify</span></a> <em>energy</em> option also invokes the work
+calculation, and overrides an <em>energy no</em> setting here. If neither
+<em>energy yes</em> or <em>fix_modify energy yes</em> are set, the global scalar
+computed by the fix will return zero.</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">In order to check energy conservation, any other fixes that do
+work on the system must have <em>fix_modify energy yes</em> set as well. This
+includes thermostat fixes and any constraints that hold the positions
+of wall atoms fixed, such as <a class="reference internal" href="fix_spring_self.html"><span class="doc">fix spring/self</span></a>.</p>
+</div>
+</div>
+<hr class="docutils" />
+<div class="section" id="restart-fix-modify-output-run-start-stop-minimize-info">
+<h2>Restart, fix_modify, output, run start/stop, minimize info</h2>
+<p>This fix is part of the USER-MISC package. It is only enabled if
+LAMMPS was built with that package. See the <a class="reference internal" href="Section_start.html#start-3"><span class="std std-ref">Making LAMMPS</span></a> section for more info.</p>
+<p>No information about this fix is written to <a class="reference internal" href="restart.html"><span class="doc">binary restart files</span></a>.</p>
+<p>The <a class="reference internal" href="fix_modify.html"><span class="doc">fix_modify</span></a> <em>energy</em> option is supported by this
+fix to subtract the work done from the
+system&#8217;s potential energy as part of <a class="reference internal" href="thermo_style.html"><span class="doc">thermodynamic output</span></a>.</p>
+<p>This fix computes a global scalar and a global 3-vector of forces,
+which can be accessed by various <a class="reference internal" href="Section_howto.html#howto-15"><span class="std std-ref">output commands</span></a>. The scalar is the negative of the
+work done on the system, see above discussion. The vector is the total force
+that this fix applied to the group of atoms on the current timestep.
+The scalar and vector values calculated by this fix are &#8220;extensive&#8221;.</p>
+<p>No parameter of this fix can be used with the <em>start/stop</em> keywords of
+the <a class="reference internal" href="run.html"><span class="doc">run</span></a> command.</p>
+</div>
+<div class="section" id="restrictions">
+<h2>Restrictions</h2>
+<blockquote>
+<div>none</div></blockquote>
+</div>
+<div class="section" id="related-commands">
+<h2>Related commands</h2>
+<p><a class="reference internal" href="fix_addforce.html"><span class="doc">fix addforce</span></a>, <a class="reference internal" href="compute_temp_profile.html"><span class="doc">compute temp/profile</span></a>, <a class="reference internal" href="velocity.html"><span class="doc">velocity</span></a></p>
+</div>
+<div class="section" id="default">
+<h2>Default</h2>
+<p>The option default for the <em>energy</em> keyword is energy = no.</p>
+<hr class="docutils" />
+<p id="strong"><strong>(Strong)</strong> Strong and Eaves, J. Phys. Chem. Lett. 7, 1907 (2016).</p>
+<p id="evans"><strong>(Evans)</strong> Evans and Morriss, Phys. Rev. Lett. 56, 2172 (1986).</p>
+<p id="zhu"><strong>(Zhu)</strong> Zhu, Tajkhorshid, and Schulten, Biophys. J. 83, 154 (2002).</p>
+</div>
+</div>
+
+
+ </div>
+ </div>
+ <footer>
+
+
+ <hr/>
+
+ <div role="contentinfo">
+ <p>
+ &copy; Copyright 2013 Sandia Corporation.
+ </p>
+ </div>
+ Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
+
+</footer>
+
+ </div>
+ </div>
+
+ </section>
+
+ </div>
+
+
+
+
+
+ <script type="text/javascript">
+ var DOCUMENTATION_OPTIONS = {
+ URL_ROOT:'./',
+ VERSION:'',
+ COLLAPSE_INDEX:false,
+ FILE_SUFFIX:'.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+ <script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/jquery-1.11.0.min.js"></script>
+ <script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/lightbox.min.js"></script>
+ <script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2-customize/jquery-noconflict.js"></script>
+
+
+
+
+
+ <script type="text/javascript" src="_static/js/theme.js"></script>
+
+
+
+
+ <script type="text/javascript">
+ jQuery(function () {
+ SphinxRtdTheme.StickyNav.enable();
+ });
+ </script>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/html/genindex.html b/doc/html/genindex.html
index bce13de5a..a4ece0112 100644
--- a/doc/html/genindex.html
+++ b/doc/html/genindex.html
@@ -1,2392 +1,2396 @@
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Index &mdash; LAMMPS documentation</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/sphinxcontrib-images/LightBox2/lightbox2/css/lightbox.css" type="text/css" />
<link rel="top" title="LAMMPS documentation" href="index.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-nav-search">
<a href="Manual.html" class="icon icon-home"> LAMMPS
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="Section_intro.html">1. Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_start.html">2. Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_commands.html">3. Commands</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_packages.html">4. Packages</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_accelerate.html">5. Accelerating LAMMPS performance</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_howto.html">6. How-to discussions</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_example.html">7. Example problems</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_perf.html">8. Performance &amp; scalability</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_tools.html">9. Additional tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_modify.html">10. Modifying &amp; extending LAMMPS</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_python.html">11. Python interface to LAMMPS</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_errors.html">12. Errors</a></li>
<li class="toctree-l1"><a class="reference internal" href="Section_history.html">13. Future and history</a></li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="Manual.html">LAMMPS</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="Manual.html">Docs</a> &raquo;</li>
<li></li>
<li class="wy-breadcrumbs-aside">
<a href="http://lammps.sandia.gov">Website</a>
<a href="Section_commands.html#comm">Commands</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
<a href="#A"><strong>A</strong></a>
| <a href="#B"><strong>B</strong></a>
| <a href="#C"><strong>C</strong></a>
| <a href="#D"><strong>D</strong></a>
| <a href="#E"><strong>E</strong></a>
| <a href="#F"><strong>F</strong></a>
| <a href="#G"><strong>G</strong></a>
| <a href="#I"><strong>I</strong></a>
| <a href="#J"><strong>J</strong></a>
| <a href="#K"><strong>K</strong></a>
| <a href="#L"><strong>L</strong></a>
| <a href="#M"><strong>M</strong></a>
| <a href="#N"><strong>N</strong></a>
| <a href="#P"><strong>P</strong></a>
| <a href="#Q"><strong>Q</strong></a>
| <a href="#R"><strong>R</strong></a>
| <a href="#S"><strong>S</strong></a>
| <a href="#T"><strong>T</strong></a>
| <a href="#U"><strong>U</strong></a>
| <a href="#V"><strong>V</strong></a>
| <a href="#W"><strong>W</strong></a>
</div>
<h2 id="A">A</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="angle_coeff.html#index-0">angle_coeff</a>
</dt>
<dt><a href="angle_style.html#index-0">angle_style</a>
</dt>
<dt><a href="angle_charmm.html#index-0">angle_style charmm</a>
</dt>
<dt><a href="angle_class2.html#index-0">angle_style class2</a>
</dt>
<dt><a href="angle_cosine.html#index-0">angle_style cosine</a>
</dt>
<dt><a href="angle_cosine_delta.html#index-0">angle_style cosine/delta</a>
</dt>
<dt><a href="angle_cosine_periodic.html#index-0">angle_style cosine/periodic</a>
</dt>
<dt><a href="angle_cosine_shift.html#index-0">angle_style cosine/shift</a>
</dt>
<dt><a href="angle_cosine_shift_exp.html#index-0">angle_style cosine/shift/exp</a>
</dt>
<dt><a href="angle_cosine_squared.html#index-0">angle_style cosine/squared</a>
</dt>
<dt><a href="angle_dipole.html#index-0">angle_style dipole</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="angle_fourier.html#index-0">angle_style fourier</a>
</dt>
<dt><a href="angle_fourier_simple.html#index-0">angle_style fourier/simple</a>
</dt>
<dt><a href="angle_harmonic.html#index-0">angle_style harmonic</a>
</dt>
<dt><a href="angle_hybrid.html#index-0">angle_style hybrid</a>
</dt>
<dt><a href="angle_none.html#index-0">angle_style none</a>
</dt>
<dt><a href="angle_quartic.html#index-0">angle_style quartic</a>
</dt>
<dt><a href="angle_sdk.html#index-0">angle_style sdk</a>
</dt>
<dt><a href="angle_table.html#index-0">angle_style table</a>
</dt>
<dt><a href="angle_zero.html#index-0">angle_style zero</a>
</dt>
<dt><a href="atom_modify.html#index-0">atom_modify</a>
</dt>
<dt><a href="atom_style.html#index-0">atom_style</a>
</dt>
</dl></td>
</tr></table>
<h2 id="B">B</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="balance.html#index-0">balance</a>
</dt>
<dt><a href="bond_coeff.html#index-0">bond_coeff</a>
</dt>
<dt><a href="bond_style.html#index-0">bond_style</a>
</dt>
<dt><a href="bond_class2.html#index-0">bond_style class2</a>
</dt>
<dt><a href="bond_fene.html#index-0">bond_style fene</a>
</dt>
<dt><a href="bond_fene_expand.html#index-0">bond_style fene/expand</a>
</dt>
<dt><a href="bond_harmonic.html#index-0">bond_style harmonic</a>
</dt>
<dt><a href="bond_harmonic_shift.html#index-0">bond_style harmonic/shift</a>
</dt>
<dt><a href="bond_harmonic_shift_cut.html#index-0">bond_style harmonic/shift/cut</a>
</dt>
<dt><a href="bond_hybrid.html#index-0">bond_style hybrid</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="bond_morse.html#index-0">bond_style morse</a>
</dt>
<dt><a href="bond_none.html#index-0">bond_style none</a>
</dt>
<dt><a href="bond_nonlinear.html#index-0">bond_style nonlinear</a>
</dt>
<dt><a href="bond_quartic.html#index-0">bond_style quartic</a>
</dt>
<dt><a href="bond_table.html#index-0">bond_style table</a>
</dt>
<dt><a href="bond_zero.html#index-0">bond_style zero</a>
</dt>
<dt><a href="bond_write.html#index-0">bond_write</a>
</dt>
<dt><a href="boundary.html#index-0">boundary</a>
</dt>
<dt><a href="box.html#index-0">box</a>
</dt>
</dl></td>
</tr></table>
<h2 id="C">C</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="change_box.html#index-0">change_box</a>
</dt>
<dt><a href="clear.html#index-0">clear</a>
</dt>
<dt><a href="comm_modify.html#index-0">comm_modify</a>
</dt>
<dt><a href="comm_style.html#index-0">comm_style</a>
</dt>
<dt><a href="compute.html#index-0">compute</a>
</dt>
<dt><a href="compute_ackland_atom.html#index-0">compute ackland/atom</a>
</dt>
<dt><a href="compute_angle.html#index-0">compute angle</a>
</dt>
<dt><a href="compute_angle_local.html#index-0">compute angle/local</a>
</dt>
<dt><a href="compute_angmom_chunk.html#index-0">compute angmom/chunk</a>
</dt>
<dt><a href="compute_basal_atom.html#index-0">compute basal/atom</a>
</dt>
<dt><a href="compute_body_local.html#index-0">compute body/local</a>
</dt>
<dt><a href="compute_bond.html#index-0">compute bond</a>
</dt>
<dt><a href="compute_bond_local.html#index-0">compute bond/local</a>
</dt>
<dt><a href="compute_centro_atom.html#index-0">compute centro/atom</a>
</dt>
<dt><a href="compute_chunk_atom.html#index-0">compute chunk/atom</a>
</dt>
<dt><a href="compute_cluster_atom.html#index-0">compute cluster/atom</a>
</dt>
<dt><a href="compute_cna_atom.html#index-0">compute cna/atom</a>
</dt>
<dt><a href="compute_com.html#index-0">compute com</a>
</dt>
<dt><a href="compute_com_chunk.html#index-0">compute com/chunk</a>
</dt>
<dt><a href="compute_contact_atom.html#index-0">compute contact/atom</a>
</dt>
<dt><a href="compute_coord_atom.html#index-0">compute coord/atom</a>
</dt>
<dt><a href="compute_damage_atom.html#index-0">compute damage/atom</a>
</dt>
<dt><a href="compute_dihedral.html#index-0">compute dihedral</a>
</dt>
<dt><a href="compute_dihedral_local.html#index-0">compute dihedral/local</a>
</dt>
<dt><a href="compute_dilatation_atom.html#index-0">compute dilatation/atom</a>
</dt>
<dt><a href="compute_dipole_chunk.html#index-0">compute dipole/chunk</a>
</dt>
<dt><a href="compute_displace_atom.html#index-0">compute displace/atom</a>
</dt>
<dt><a href="compute_dpd.html#index-0">compute dpd</a>
</dt>
<dt><a href="compute_dpd_atom.html#index-0">compute dpd/atom</a>
</dt>
<dt><a href="compute_erotate_asphere.html#index-0">compute erotate/asphere</a>
</dt>
<dt><a href="compute_erotate_rigid.html#index-0">compute erotate/rigid</a>
</dt>
<dt><a href="compute_erotate_sphere.html#index-0">compute erotate/sphere</a>
</dt>
<dt><a href="compute_erotate_sphere_atom.html#index-0">compute erotate/sphere/atom</a>
</dt>
<dt><a href="compute_event_displace.html#index-0">compute event/displace</a>
</dt>
<dt><a href="compute_fep.html#index-0">compute fep</a>
</dt>
<dt><a href="compute_tally.html#index-0">compute force/tally</a>
</dt>
<dt><a href="compute_group_group.html#index-0">compute group/group</a>
</dt>
<dt><a href="compute_gyration.html#index-0">compute gyration</a>
</dt>
<dt><a href="compute_gyration_chunk.html#index-0">compute gyration/chunk</a>
</dt>
<dt><a href="compute_heat_flux.html#index-0">compute heat/flux</a>
</dt>
<dt><a href="compute_hexorder_atom.html#index-0">compute hexorder/atom</a>
</dt>
<dt><a href="compute_improper.html#index-0">compute improper</a>
</dt>
<dt><a href="compute_improper_local.html#index-0">compute improper/local</a>
</dt>
<dt><a href="compute_inertia_chunk.html#index-0">compute inertia/chunk</a>
</dt>
<dt><a href="compute_ke.html#index-0">compute ke</a>
</dt>
<dt><a href="compute_ke_atom.html#index-0">compute ke/atom</a>
</dt>
<dt><a href="compute_ke_atom_eff.html#index-0">compute ke/atom/eff</a>
</dt>
<dt><a href="compute_ke_eff.html#index-0">compute ke/eff</a>
</dt>
<dt><a href="compute_ke_rigid.html#index-0">compute ke/rigid</a>
</dt>
<dt><a href="compute_meso_e_atom.html#index-0">compute meso/e/atom</a>
</dt>
<dt><a href="compute_meso_rho_atom.html#index-0">compute meso/rho/atom</a>
</dt>
<dt><a href="compute_meso_t_atom.html#index-0">compute meso/t/atom</a>
</dt>
<dt><a href="compute_msd.html#index-0">compute msd</a>
</dt>
<dt><a href="compute_msd_chunk.html#index-0">compute msd/chunk</a>
</dt>
<dt><a href="compute_msd_nongauss.html#index-0">compute msd/nongauss</a>
</dt>
<dt><a href="compute_omega_chunk.html#index-0">compute omega/chunk</a>
</dt>
<dt><a href="compute_orientorder_atom.html#index-0">compute orientorder/atom</a>
</dt>
<dt><a href="compute_pair.html#index-0">compute pair</a>
</dt>
<dt><a href="compute_pair_local.html#index-0">compute pair/local</a>
</dt>
<dt><a href="compute_pe.html#index-0">compute pe</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="compute_pe_atom.html#index-0">compute pe/atom</a>
</dt>
<dt><a href="compute_plasticity_atom.html#index-0">compute plasticity/atom</a>
</dt>
<dt><a href="compute_pressure.html#index-0">compute pressure</a>
</dt>
<dt><a href="compute_property_atom.html#index-0">compute property/atom</a>
</dt>
<dt><a href="compute_property_chunk.html#index-0">compute property/chunk</a>
</dt>
<dt><a href="compute_property_local.html#index-0">compute property/local</a>
</dt>
<dt><a href="compute_rdf.html#index-0">compute rdf</a>
</dt>
<dt><a href="compute_reduce.html#index-0">compute reduce</a>
</dt>
<dt><a href="compute_rigid_local.html#index-0">compute rigid/local</a>
</dt>
<dt><a href="compute_saed.html#index-0">compute saed</a>
</dt>
<dt><a href="compute_slice.html#index-0">compute slice</a>
</dt>
<dt><a href="compute_smd_contact_radius.html#index-0">compute smd/contact/radius</a>
</dt>
<dt><a href="compute_smd_damage.html#index-0">compute smd/damage</a>
</dt>
<dt><a href="compute_smd_hourglass_error.html#index-0">compute smd/hourglass/error</a>
</dt>
<dt><a href="compute_smd_internal_energy.html#index-0">compute smd/internal/energy</a>
</dt>
<dt><a href="compute_smd_plastic_strain.html#index-0">compute smd/plastic/strain</a>
</dt>
<dt><a href="compute_smd_plastic_strain_rate.html#index-0">compute smd/plastic/strain/rate</a>
</dt>
<dt><a href="compute_smd_rho.html#index-0">compute smd/rho</a>
</dt>
<dt><a href="compute_smd_tlsph_defgrad.html#index-0">compute smd/tlsph/defgrad</a>
</dt>
<dt><a href="compute_smd_tlsph_dt.html#index-0">compute smd/tlsph/dt</a>
</dt>
<dt><a href="compute_smd_tlsph_num_neighs.html#index-0">compute smd/tlsph/num/neighs</a>
</dt>
<dt><a href="compute_smd_tlsph_shape.html#index-0">compute smd/tlsph/shape</a>
</dt>
<dt><a href="compute_smd_tlsph_strain.html#index-0">compute smd/tlsph/strain</a>
</dt>
<dt><a href="compute_smd_tlsph_strain_rate.html#index-0">compute smd/tlsph/strain/rate</a>
</dt>
<dt><a href="compute_smd_tlsph_stress.html#index-0">compute smd/tlsph/stress</a>
</dt>
<dt><a href="compute_smd_ulsph_num_neighs.html#index-0">compute smd/ulsph/num/neighs</a>
</dt>
<dt><a href="compute_smd_ulsph_strain.html#index-0">compute smd/ulsph/strain</a>
</dt>
<dt><a href="compute_smd_ulsph_strain_rate.html#index-0">compute smd/ulsph/strain/rate</a>
</dt>
<dt><a href="compute_smd_ulsph_stress.html#index-0">compute smd/ulsph/stress</a>
</dt>
<dt><a href="compute_smd_vol.html#index-0">compute smd/vol</a>
</dt>
<dt><a href="compute_sna_atom.html#index-0">compute sna/atom</a>
</dt>
<dt><a href="compute_stress_atom.html#index-0">compute stress/atom</a>
</dt>
<dt><a href="compute_temp.html#index-0">compute temp</a>
</dt>
<dt><a href="compute_temp_asphere.html#index-0">compute temp/asphere</a>
</dt>
<dt><a href="compute_temp_body.html#index-0">compute temp/body</a>
</dt>
<dt><a href="compute_temp_chunk.html#index-0">compute temp/chunk</a>
</dt>
<dt><a href="compute_temp_com.html#index-0">compute temp/com</a>
</dt>
<dt><a href="compute_temp_cs.html#index-0">compute temp/cs</a>
</dt>
<dt><a href="compute_temp_deform.html#index-0">compute temp/deform</a>
</dt>
<dt><a href="compute_temp_deform_eff.html#index-0">compute temp/deform/eff</a>
</dt>
<dt><a href="compute_temp_drude.html#index-0">compute temp/drude</a>
</dt>
<dt><a href="compute_temp_eff.html#index-0">compute temp/eff</a>
</dt>
<dt><a href="compute_temp_partial.html#index-0">compute temp/partial</a>
</dt>
<dt><a href="compute_temp_profile.html#index-0">compute temp/profile</a>
</dt>
<dt><a href="compute_temp_ramp.html#index-0">compute temp/ramp</a>
</dt>
<dt><a href="compute_temp_region.html#index-0">compute temp/region</a>
</dt>
<dt><a href="compute_temp_region_eff.html#index-0">compute temp/region/eff</a>
</dt>
<dt><a href="compute_temp_rotate.html#index-0">compute temp/rotate</a>
</dt>
<dt><a href="compute_temp_sphere.html#index-0">compute temp/sphere</a>
</dt>
<dt><a href="compute_ti.html#index-0">compute ti</a>
</dt>
<dt><a href="compute_torque_chunk.html#index-0">compute torque/chunk</a>
</dt>
<dt><a href="compute_vacf.html#index-0">compute vacf</a>
</dt>
<dt><a href="compute_vcm_chunk.html#index-0">compute vcm/chunk</a>
</dt>
<dt><a href="compute_voronoi_atom.html#index-0">compute voronoi/atom</a>
</dt>
<dt><a href="compute_xrd.html#index-0">compute xrd</a>
</dt>
<dt><a href="compute_modify.html#index-0">compute_modify</a>
</dt>
<dt><a href="create_atoms.html#index-0">create_atoms</a>
</dt>
<dt><a href="create_bonds.html#index-0">create_bonds</a>
</dt>
<dt><a href="create_box.html#index-0">create_box</a>
</dt>
</dl></td>
</tr></table>
<h2 id="D">D</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="delete_atoms.html#index-0">delete_atoms</a>
</dt>
<dt><a href="delete_bonds.html#index-0">delete_bonds</a>
</dt>
<dt><a href="dielectric.html#index-0">dielectric</a>
</dt>
<dt><a href="dihedral_coeff.html#index-0">dihedral_coeff</a>
</dt>
<dt><a href="dihedral_style.html#index-0">dihedral_style</a>
</dt>
<dt><a href="dihedral_charmm.html#index-0">dihedral_style charmm</a>
</dt>
<dt><a href="dihedral_class2.html#index-0">dihedral_style class2</a>
</dt>
<dt><a href="dihedral_cosine_shift_exp.html#index-0">dihedral_style cosine/shift/exp</a>
</dt>
<dt><a href="dihedral_fourier.html#index-0">dihedral_style fourier</a>
</dt>
<dt><a href="dihedral_harmonic.html#index-0">dihedral_style harmonic</a>
</dt>
<dt><a href="dihedral_helix.html#index-0">dihedral_style helix</a>
</dt>
<dt><a href="dihedral_hybrid.html#index-0">dihedral_style hybrid</a>
</dt>
<dt><a href="dihedral_multi_harmonic.html#index-0">dihedral_style multi/harmonic</a>
</dt>
<dt><a href="dihedral_nharmonic.html#index-0">dihedral_style nharmonic</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="dihedral_none.html#index-0">dihedral_style none</a>
</dt>
<dt><a href="dihedral_opls.html#index-0">dihedral_style opls</a>
</dt>
<dt><a href="dihedral_quadratic.html#index-0">dihedral_style quadratic</a>
</dt>
<dt><a href="dihedral_spherical.html#index-0">dihedral_style spherical</a>
</dt>
<dt><a href="dihedral_table.html#index-0">dihedral_style table</a>
</dt>
<dt><a href="dihedral_zero.html#index-0">dihedral_style zero</a>
</dt>
<dt><a href="dimension.html#index-0">dimension</a>
</dt>
<dt><a href="displace_atoms.html#index-0">displace_atoms</a>
</dt>
<dt><a href="dump.html#index-0">dump</a>
</dt>
<dt><a href="dump_custom_vtk.html#index-0">dump custom/vtk</a>
</dt>
<dt><a href="dump_h5md.html#index-0">dump h5md</a>
</dt>
<dt><a href="dump_image.html#index-0">dump image</a>
</dt>
<dt><a href="dump_molfile.html#index-0">dump molfile</a>
</dt>
<dt><a href="dump_modify.html#index-0">dump_modify</a>
</dt>
</dl></td>
</tr></table>
<h2 id="E">E</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="echo.html#index-0">echo</a>
</dt>
</dl></td>
</tr></table>
<h2 id="F">F</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="fix.html#index-0">fix</a>
</dt>
<dt><a href="fix_adapt.html#index-0">fix adapt</a>
</dt>
<dt><a href="fix_adapt_fep.html#index-0">fix adapt/fep</a>
</dt>
<dt><a href="fix_addforce.html#index-0">fix addforce</a>
</dt>
<dt><a href="fix_addtorque.html#index-0">fix addtorque</a>
</dt>
<dt><a href="fix_append_atoms.html#index-0">fix append/atoms</a>
</dt>
<dt><a href="fix_atc.html#index-0">fix atc</a>
</dt>
<dt><a href="fix_atom_swap.html#index-0">fix atom/swap</a>
</dt>
<dt><a href="fix_ave_atom.html#index-0">fix ave/atom</a>
</dt>
<dt><a href="fix_ave_chunk.html#index-0">fix ave/chunk</a>
</dt>
<dt><a href="fix_ave_correlate.html#index-0">fix ave/correlate</a>
</dt>
<dt><a href="fix_ave_correlate_long.html#index-0">fix ave/correlate/long</a>
</dt>
<dt><a href="fix_ave_histo.html#index-0">fix ave/histo</a>
</dt>
<dt><a href="fix_ave_time.html#index-0">fix ave/time</a>
</dt>
<dt><a href="fix_aveforce.html#index-0">fix aveforce</a>
</dt>
<dt><a href="fix_balance.html#index-0">fix balance</a>
</dt>
<dt><a href="fix_bond_break.html#index-0">fix bond/break</a>
</dt>
<dt><a href="fix_bond_create.html#index-0">fix bond/create</a>
</dt>
<dt><a href="fix_bond_swap.html#index-0">fix bond/swap</a>
</dt>
<dt><a href="fix_box_relax.html#index-0">fix box/relax</a>
</dt>
<dt><a href="fix_colvars.html#index-0">fix colvars</a>
</dt>
<dt><a href="fix_controller.html#index-0">fix controller</a>
</dt>
<dt><a href="fix_deform.html#index-0">fix deform</a>
</dt>
<dt><a href="fix_deposit.html#index-0">fix deposit</a>
</dt>
<dt><a href="fix_drag.html#index-0">fix drag</a>
</dt>
<dt><a href="fix_drude.html#index-0">fix drude</a>
</dt>
<dt><a href="fix_drude_transform.html#index-0">fix drude/transform/direct</a>
</dt>
<dt><a href="fix_dt_reset.html#index-0">fix dt/reset</a>
</dt>
<dt><a href="fix_efield.html#index-0">fix efield</a>
</dt>
<dt><a href="fix_ehex.html#index-0">fix ehex</a>
</dt>
<dt><a href="fix_enforce2d.html#index-0">fix enforce2d</a>
</dt>
<dt><a href="fix_eos_cv.html#index-0">fix eos/cv</a>
</dt>
<dt><a href="fix_eos_table.html#index-0">fix eos/table</a>
</dt>
<dt><a href="fix_eos_table_rx.html#index-0">fix eos/table/rx</a>
</dt>
<dt><a href="fix_evaporate.html#index-0">fix evaporate</a>
</dt>
<dt><a href="fix_external.html#index-0">fix external</a>
</dt>
+ <dt><a href="fix_flow_gauss.html#index-0">fix flow/gauss</a>
+ </dt>
+
+
<dt><a href="fix_freeze.html#index-0">fix freeze</a>
</dt>
<dt><a href="fix_gcmc.html#index-0">fix gcmc</a>
</dt>
<dt><a href="fix_gld.html#index-0">fix gld</a>
</dt>
<dt><a href="fix_gle.html#index-0">fix gle</a>
</dt>
<dt><a href="fix_gravity.html#index-0">fix gravity</a>
</dt>
<dt><a href="fix_heat.html#index-0">fix heat</a>
</dt>
<dt><a href="fix_imd.html#index-0">fix imd</a>
</dt>
<dt><a href="fix_indent.html#index-0">fix indent</a>
</dt>
<dt><a href="fix_ipi.html#index-0">fix ipi</a>
</dt>
<dt><a href="fix_langevin.html#index-0">fix langevin</a>
</dt>
<dt><a href="fix_langevin_drude.html#index-0">fix langevin/drude</a>
</dt>
<dt><a href="fix_langevin_eff.html#index-0">fix langevin/eff</a>
</dt>
<dt><a href="fix_lb_fluid.html#index-0">fix lb/fluid</a>
</dt>
<dt><a href="fix_lb_momentum.html#index-0">fix lb/momentum</a>
</dt>
<dt><a href="fix_lb_pc.html#index-0">fix lb/pc</a>
</dt>
<dt><a href="fix_lb_rigid_pc_sphere.html#index-0">fix lb/rigid/pc/sphere</a>
</dt>
<dt><a href="fix_lb_viscous.html#index-0">fix lb/viscous</a>
</dt>
<dt><a href="fix_lineforce.html#index-0">fix lineforce</a>
</dt>
<dt><a href="fix_manifoldforce.html#index-0">fix manifoldforce</a>
</dt>
<dt><a href="fix_meso.html#index-0">fix meso</a>
</dt>
<dt><a href="fix_meso_stationary.html#index-0">fix meso/stationary</a>
</dt>
<dt><a href="fix_momentum.html#index-0">fix momentum</a>
</dt>
<dt><a href="fix_move.html#index-0">fix move</a>
</dt>
<dt><a href="fix_msst.html#index-0">fix msst</a>
</dt>
<dt><a href="fix_neb.html#index-0">fix neb</a>
</dt>
<dt><a href="fix_nph_asphere.html#index-0">fix nph/asphere</a>
</dt>
<dt><a href="fix_nph_body.html#index-0">fix nph/body</a>
</dt>
<dt><a href="fix_nph_sphere.html#index-0">fix nph/sphere</a>
</dt>
<dt><a href="fix_nphug.html#index-0">fix nphug</a>
</dt>
<dt><a href="fix_npt_asphere.html#index-0">fix npt/asphere</a>
</dt>
<dt><a href="fix_npt_body.html#index-0">fix npt/body</a>
</dt>
<dt><a href="fix_npt_sphere.html#index-0">fix npt/sphere</a>
</dt>
- <dt><a href="fix_nve.html#index-0">fix nve</a>
+ <dt><a href="fix_nve.html#index-0">fix nve</a>, <a href="foo.html#index-0">[1]</a>
</dt>
<dt><a href="fix_nve_asphere.html#index-0">fix nve/asphere</a>
</dt>
<dt><a href="fix_nve_asphere_noforce.html#index-0">fix nve/asphere/noforce</a>
</dt>
<dt><a href="fix_nve_body.html#index-0">fix nve/body</a>
</dt>
<dt><a href="fix_nve_eff.html#index-0">fix nve/eff</a>
</dt>
+ </dl></td>
+ <td style="width: 33%" valign="top"><dl>
<dt><a href="fix_nve_limit.html#index-0">fix nve/limit</a>
</dt>
- </dl></td>
- <td style="width: 33%" valign="top"><dl>
<dt><a href="fix_nve_line.html#index-0">fix nve/line</a>
</dt>
<dt><a href="fix_nve_manifold_rattle.html#index-0">fix nve/manifold/rattle</a>
</dt>
<dt><a href="fix_nve_noforce.html#index-0">fix nve/noforce</a>
</dt>
<dt><a href="fix_nve_sphere.html#index-0">fix nve/sphere</a>
</dt>
<dt><a href="fix_nve_tri.html#index-0">fix nve/tri</a>
</dt>
<dt><a href="fix_nh.html#index-0">fix nvt</a>
</dt>
<dt><a href="fix_nvt_asphere.html#index-0">fix nvt/asphere</a>
</dt>
<dt><a href="fix_nvt_body.html#index-0">fix nvt/body</a>
</dt>
<dt><a href="fix_nh_eff.html#index-0">fix nvt/eff</a>
</dt>
<dt><a href="fix_nvt_manifold_rattle.html#index-0">fix nvt/manifold/rattle</a>
</dt>
<dt><a href="fix_nvt_sllod.html#index-0">fix nvt/sllod</a>
</dt>
<dt><a href="fix_nvt_sllod_eff.html#index-0">fix nvt/sllod/eff</a>
</dt>
<dt><a href="fix_nvt_sphere.html#index-0">fix nvt/sphere</a>
</dt>
<dt><a href="fix_oneway.html#index-0">fix oneway</a>
</dt>
<dt><a href="fix_orient.html#index-0">fix orient/fcc</a>
</dt>
<dt><a href="fix_phonon.html#index-0">fix phonon</a>
</dt>
<dt><a href="fix_pimd.html#index-0">fix pimd</a>
</dt>
<dt><a href="fix_planeforce.html#index-0">fix planeforce</a>
</dt>
<dt><a href="fix_pour.html#index-0">fix pour</a>
</dt>
<dt><a href="fix_press_berendsen.html#index-0">fix press/berendsen</a>
</dt>
<dt><a href="fix_print.html#index-0">fix print</a>
</dt>
<dt><a href="fix_property_atom.html#index-0">fix property/atom</a>
</dt>
<dt><a href="fix_qbmsst.html#index-0">fix qbmsst</a>
</dt>
<dt><a href="fix_qeq_comb.html#index-0">fix qeq/comb</a>
</dt>
<dt><a href="fix_qeq.html#index-0">fix qeq/point</a>
</dt>
<dt><a href="fix_qeq_reax.html#index-0">fix qeq/reax</a>
</dt>
<dt><a href="fix_qmmm.html#index-0">fix qmmm</a>
</dt>
<dt><a href="fix_qtb.html#index-0">fix qtb</a>
</dt>
<dt><a href="fix_reax_bonds.html#index-0">fix reax/bonds</a>
</dt>
<dt><a href="fix_reaxc_species.html#index-0">fix reax/c/species</a>
</dt>
<dt><a href="fix_recenter.html#index-0">fix recenter</a>
</dt>
<dt><a href="fix_restrain.html#index-0">fix restrain</a>
</dt>
<dt><a href="fix_rigid.html#index-0">fix rigid</a>
</dt>
<dt><a href="fix_rx.html#index-0">fix rx</a>
</dt>
<dt><a href="fix_saed_vtk.html#index-0">fix saed/vtk</a>
</dt>
<dt><a href="fix_setforce.html#index-0">fix setforce</a>
</dt>
<dt><a href="fix_shake.html#index-0">fix shake</a>
</dt>
<dt><a href="fix_shardlow.html#index-0">fix shardlow</a>
</dt>
<dt><a href="fix_smd.html#index-0">fix smd</a>
</dt>
<dt><a href="fix_smd_adjust_dt.html#index-0">fix smd/adjust_dt</a>
</dt>
<dt><a href="fix_smd_integrate_tlsph.html#index-0">fix smd/integrate_tlsph</a>
</dt>
<dt><a href="fix_smd_integrate_ulsph.html#index-0">fix smd/integrate_ulsph</a>
</dt>
<dt><a href="fix_smd_move_triangulated_surface.html#index-0">fix smd/move_tri_surf</a>
</dt>
<dt><a href="fix_smd_setvel.html#index-0">fix smd/setvel</a>
</dt>
<dt><a href="fix_smd_wall_surface.html#index-0">fix smd/wall_surface</a>
</dt>
<dt><a href="fix_spring.html#index-0">fix spring</a>
</dt>
<dt><a href="fix_spring_chunk.html#index-0">fix spring/chunk</a>
</dt>
<dt><a href="fix_spring_rg.html#index-0">fix spring/rg</a>
</dt>
<dt><a href="fix_spring_self.html#index-0">fix spring/self</a>
</dt>
<dt><a href="fix_srd.html#index-0">fix srd</a>
</dt>
<dt><a href="fix_store_force.html#index-0">fix store/force</a>
</dt>
<dt><a href="fix_store_state.html#index-0">fix store/state</a>
</dt>
<dt><a href="fix_temp_berendsen.html#index-0">fix temp/berendsen</a>
</dt>
<dt><a href="fix_temp_csvr.html#index-0">fix temp/csvr</a>
</dt>
<dt><a href="fix_temp_rescale.html#index-0">fix temp/rescale</a>
</dt>
<dt><a href="fix_temp_rescale_eff.html#index-0">fix temp/rescale/eff</a>
</dt>
<dt><a href="fix_tfmc.html#index-0">fix tfmc</a>
</dt>
<dt><a href="fix_thermal_conductivity.html#index-0">fix thermal/conductivity</a>
</dt>
<dt><a href="fix_ti_rs.html#index-0">fix ti/rs</a>
</dt>
<dt><a href="fix_ti_spring.html#index-0">fix ti/spring</a>
</dt>
<dt><a href="fix_tmd.html#index-0">fix tmd</a>
</dt>
<dt><a href="fix_ttm.html#index-0">fix ttm</a>
</dt>
<dt><a href="fix_tune_kspace.html#index-0">fix tune/kspace</a>
</dt>
<dt><a href="fix_vector.html#index-0">fix vector</a>
</dt>
<dt><a href="fix_viscosity.html#index-0">fix viscosity</a>
</dt>
<dt><a href="fix_viscous.html#index-0">fix viscous</a>
</dt>
<dt><a href="fix_wall_gran.html#index-0">fix wall/gran</a>
</dt>
<dt><a href="fix_wall.html#index-0">fix wall/lj93</a>
</dt>
<dt><a href="fix_wall_piston.html#index-0">fix wall/piston</a>
</dt>
<dt><a href="fix_wall_reflect.html#index-0">fix wall/reflect</a>
</dt>
<dt><a href="fix_wall_region.html#index-0">fix wall/region</a>
</dt>
<dt><a href="fix_wall_srd.html#index-0">fix wall/srd</a>
</dt>
<dt><a href="fix_modify.html#index-0">fix_modify</a>
</dt>
</dl></td>
</tr></table>
<h2 id="G">G</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="group.html#index-0">group</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="group2ndx.html#index-0">group2ndx</a>
</dt>
</dl></td>
</tr></table>
<h2 id="I">I</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="if.html#index-0">if</a>
</dt>
<dt><a href="improper_coeff.html#index-0">improper_coeff</a>
</dt>
<dt><a href="improper_style.html#index-0">improper_style</a>
</dt>
<dt><a href="improper_class2.html#index-0">improper_style class2</a>
</dt>
<dt><a href="improper_cossq.html#index-0">improper_style cossq</a>
</dt>
<dt><a href="improper_cvff.html#index-0">improper_style cvff</a>
</dt>
<dt><a href="improper_distance.html#index-0">improper_style distance</a>
</dt>
<dt><a href="improper_fourier.html#index-0">improper_style fourier</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="improper_harmonic.html#index-0">improper_style harmonic</a>
</dt>
<dt><a href="improper_hybrid.html#index-0">improper_style hybrid</a>
</dt>
<dt><a href="improper_none.html#index-0">improper_style none</a>
</dt>
<dt><a href="improper_ring.html#index-0">improper_style ring</a>
</dt>
<dt><a href="improper_umbrella.html#index-0">improper_style umbrella</a>
</dt>
<dt><a href="improper_zero.html#index-0">improper_style zero</a>
</dt>
<dt><a href="include.html#index-0">include</a>
</dt>
<dt><a href="info.html#index-0">info</a>
</dt>
</dl></td>
</tr></table>
<h2 id="J">J</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="jump.html#index-0">jump</a>
</dt>
</dl></td>
</tr></table>
<h2 id="K">K</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="kspace_modify.html#index-0">kspace_modify</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="kspace_style.html#index-0">kspace_style</a>
</dt>
</dl></td>
</tr></table>
<h2 id="L">L</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="label.html#index-0">label</a>
</dt>
<dt><a href="lattice.html#index-0">lattice</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="log.html#index-0">log</a>
</dt>
</dl></td>
</tr></table>
<h2 id="M">M</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="mass.html#index-0">mass</a>
</dt>
<dt><a href="min_modify.html#index-0">min_modify</a>
</dt>
<dt><a href="min_style.html#index-0">min_style</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="minimize.html#index-0">minimize</a>
</dt>
<dt><a href="molecule.html#index-0">molecule</a>
</dt>
</dl></td>
</tr></table>
<h2 id="N">N</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="neb.html#index-0">neb</a>
</dt>
<dt><a href="neigh_modify.html#index-0">neigh_modify</a>
</dt>
<dt><a href="neighbor.html#index-0">neighbor</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="newton.html#index-0">newton</a>
</dt>
<dt><a href="next.html#index-0">next</a>
</dt>
</dl></td>
</tr></table>
<h2 id="P">P</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="package.html#index-0">package</a>
</dt>
<dt><a href="pair_coeff.html#index-0">pair_coeff</a>
</dt>
<dt><a href="pair_modify.html#index-0">pair_modify</a>
</dt>
<dt><a href="pair_style.html#index-0">pair_style</a>
</dt>
<dt><a href="pair_adp.html#index-0">pair_style adp</a>
</dt>
<dt><a href="pair_airebo.html#index-0">pair_style airebo</a>
</dt>
<dt><a href="pair_awpmd.html#index-0">pair_style awpmd/cut</a>
</dt>
<dt><a href="pair_beck.html#index-0">pair_style beck</a>
</dt>
<dt><a href="pair_body.html#index-0">pair_style body</a>
</dt>
<dt><a href="pair_bop.html#index-0">pair_style bop</a>
</dt>
<dt><a href="pair_born.html#index-0">pair_style born</a>
</dt>
<dt><a href="pair_cs.html#index-0">pair_style born/coul/long/cs</a>
</dt>
<dt><a href="pair_brownian.html#index-0">pair_style brownian</a>
</dt>
<dt><a href="pair_buck.html#index-0">pair_style buck</a>
</dt>
<dt><a href="pair_buck_long.html#index-0">pair_style buck/long/coul/long</a>
</dt>
<dt><a href="pair_colloid.html#index-0">pair_style colloid</a>
</dt>
<dt><a href="pair_comb.html#index-0">pair_style comb</a>
</dt>
<dt><a href="pair_coul.html#index-0">pair_style coul/cut</a>
</dt>
<dt><a href="pair_coul_diel.html#index-0">pair_style coul/diel</a>
</dt>
<dt><a href="pair_dpd.html#index-0">pair_style dpd</a>
</dt>
<dt><a href="pair_dpd_fdt.html#index-0">pair_style dpd/fdt</a>
</dt>
<dt><a href="pair_dsmc.html#index-0">pair_style dsmc</a>
</dt>
<dt><a href="pair_eam.html#index-0">pair_style eam</a>
</dt>
<dt><a href="pair_edip.html#index-0">pair_style edip</a>
</dt>
<dt><a href="pair_eff.html#index-0">pair_style eff/cut</a>
</dt>
<dt><a href="pair_eim.html#index-0">pair_style eim</a>
</dt>
<dt><a href="pair_exp6_rx.html#index-0">pair_style exp6/rx</a>
</dt>
<dt><a href="pair_gauss.html#index-0">pair_style gauss</a>
</dt>
<dt><a href="pair_gayberne.html#index-0">pair_style gayberne</a>
</dt>
<dt><a href="pair_gran.html#index-0">pair_style gran/hooke</a>
</dt>
<dt><a href="pair_hbond_dreiding.html#index-0">pair_style hbond/dreiding/lj</a>
</dt>
<dt><a href="pair_hybrid.html#index-0">pair_style hybrid</a>
</dt>
<dt><a href="pair_kim.html#index-0">pair_style kim</a>
</dt>
<dt><a href="pair_lcbop.html#index-0">pair_style lcbop</a>
</dt>
<dt><a href="pair_line_lj.html#index-0">pair_style line/lj</a>
</dt>
<dt><a href="pair_list.html#index-0">pair_style list</a>
</dt>
<dt><a href="pair_charmm.html#index-0">pair_style lj/charmm/coul/charmm</a>
</dt>
<dt><a href="pair_class2.html#index-0">pair_style lj/class2</a>
</dt>
<dt><a href="pair_lj_cubic.html#index-0">pair_style lj/cubic</a>
</dt>
<dt><a href="pair_lj.html#index-0">pair_style lj/cut</a>
</dt>
<dt><a href="pair_dipole.html#index-0">pair_style lj/cut/dipole/cut</a>
</dt>
<dt><a href="pair_lj_soft.html#index-0">pair_style lj/cut/soft</a>
</dt>
<dt><a href="pair_lj_expand.html#index-0">pair_style lj/expand</a>
</dt>
<dt><a href="pair_gromacs.html#index-0">pair_style lj/gromacs</a>
</dt>
<dt><a href="pair_lj_long.html#index-0">pair_style lj/long/coul/long</a>
</dt>
<dt><a href="pair_mdf.html#index-0">pair_style lj/mdf</a>
</dt>
<dt><a href="pair_sdk.html#index-0">pair_style lj/sdk</a>
</dt>
<dt><a href="pair_lj_sf.html#index-0">pair_style lj/sf</a>
</dt>
<dt><a href="pair_lj_smooth.html#index-0">pair_style lj/smooth</a>
</dt>
<dt><a href="pair_lj_smooth_linear.html#index-0">pair_style lj/smooth/linear</a>
</dt>
<dt><a href="pair_lj96.html#index-0">pair_style lj96/cut</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="pair_lubricate.html#index-0">pair_style lubricate</a>
</dt>
<dt><a href="pair_lubricateU.html#index-0">pair_style lubricateU</a>
</dt>
<dt><a href="pair_meam.html#index-0">pair_style meam</a>
</dt>
<dt><a href="pair_mgpt.html#index-0">pair_style mgpt</a>
</dt>
<dt><a href="pair_mie.html#index-0">pair_style mie/cut</a>
</dt>
<dt><a href="pair_morse.html#index-0">pair_style morse</a>
</dt>
<dt><a href="pair_multi_lucy.html#index-0">pair_style multi/lucy</a>
</dt>
<dt><a href="pair_multi_lucy_rx.html#index-0">pair_style multi/lucy/rx</a>
</dt>
<dt><a href="pair_nb3b_harmonic.html#index-0">pair_style nb3b/harmonic</a>
</dt>
<dt><a href="pair_nm.html#index-0">pair_style nm/cut</a>
</dt>
<dt><a href="pair_none.html#index-0">pair_style none</a>
</dt>
<dt><a href="pair_peri.html#index-0">pair_style peri/pmb</a>
</dt>
<dt><a href="pair_polymorphic.html#index-0">pair_style polymorphic</a>
</dt>
<dt><a href="pair_quip.html#index-0">pair_style quip</a>
</dt>
<dt><a href="pair_reax.html#index-0">pair_style reax</a>
</dt>
<dt><a href="pair_reax_c.html#index-0">pair_style reax/c</a>
</dt>
<dt><a href="pair_resquared.html#index-0">pair_style resquared</a>
</dt>
<dt><a href="pair_smd_hertz.html#index-0">pair_style smd/hertz</a>
</dt>
<dt><a href="pair_smd_tlsph.html#index-0">pair_style smd/tlsph</a>
</dt>
<dt><a href="pair_smd_triangulated_surface.html#index-0">pair_style smd/tri_surface</a>
</dt>
<dt><a href="pair_smd_ulsph.html#index-0">pair_style smd/ulsph</a>
</dt>
<dt><a href="pair_smtbq.html#index-0">pair_style smtbq</a>
</dt>
<dt><a href="pair_snap.html#index-0">pair_style snap</a>
</dt>
<dt><a href="pair_soft.html#index-0">pair_style soft</a>
</dt>
<dt><a href="pair_sph_heatconduction.html#index-0">pair_style sph/heatconduction</a>
</dt>
<dt><a href="pair_sph_idealgas.html#index-0">pair_style sph/idealgas</a>
</dt>
<dt><a href="pair_sph_lj.html#index-0">pair_style sph/lj</a>
</dt>
<dt><a href="pair_sph_rhosum.html#index-0">pair_style sph/rhosum</a>
</dt>
<dt><a href="pair_sph_taitwater.html#index-0">pair_style sph/taitwater</a>
</dt>
<dt><a href="pair_sph_taitwater_morris.html#index-0">pair_style sph/taitwater/morris</a>
</dt>
<dt><a href="pair_srp.html#index-0">pair_style srp</a>
</dt>
<dt><a href="pair_sw.html#index-0">pair_style sw</a>
</dt>
<dt><a href="pair_table.html#index-0">pair_style table</a>
</dt>
<dt><a href="pair_table_rx.html#index-0">pair_style table/rx</a>
</dt>
<dt><a href="pair_tersoff.html#index-0">pair_style tersoff</a>
</dt>
<dt><a href="pair_tersoff_mod.html#index-0">pair_style tersoff/mod</a>
</dt>
<dt><a href="pair_tersoff_zbl.html#index-0">pair_style tersoff/zbl</a>
</dt>
<dt><a href="pair_thole.html#index-0">pair_style thole</a>
</dt>
<dt><a href="pair_tri_lj.html#index-0">pair_style tri/lj</a>
</dt>
<dt><a href="pair_vashishta.html#index-0">pair_style vashishta</a>
</dt>
<dt><a href="pair_yukawa.html#index-0">pair_style yukawa</a>
</dt>
<dt><a href="pair_yukawa_colloid.html#index-0">pair_style yukawa/colloid</a>
</dt>
<dt><a href="pair_zbl.html#index-0">pair_style zbl</a>
</dt>
<dt><a href="pair_zero.html#index-0">pair_style zero</a>
</dt>
<dt><a href="pair_write.html#index-0">pair_write</a>
</dt>
<dt><a href="partition.html#index-0">partition</a>
</dt>
<dt><a href="prd.html#index-0">prd</a>
</dt>
<dt><a href="print.html#index-0">print</a>
</dt>
<dt><a href="processors.html#index-0">processors</a>
</dt>
<dt><a href="python.html#index-0">python</a>
</dt>
</dl></td>
</tr></table>
<h2 id="Q">Q</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="quit.html#index-0">quit</a>
</dt>
</dl></td>
</tr></table>
<h2 id="R">R</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="read_data.html#index-0">read_data</a>
</dt>
<dt><a href="read_dump.html#index-0">read_dump</a>
</dt>
<dt><a href="read_restart.html#index-0">read_restart</a>
</dt>
<dt><a href="region.html#index-0">region</a>
</dt>
<dt><a href="replicate.html#index-0">replicate</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="rerun.html#index-0">rerun</a>
</dt>
<dt><a href="reset_timestep.html#index-0">reset_timestep</a>
</dt>
<dt><a href="restart.html#index-0">restart</a>
</dt>
<dt><a href="run.html#index-0">run</a>
</dt>
<dt><a href="run_style.html#index-0">run_style</a>
</dt>
</dl></td>
</tr></table>
<h2 id="S">S</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="set.html#index-0">set</a>
</dt>
<dt><a href="shell.html#index-0">shell</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="special_bonds.html#index-0">special_bonds</a>
</dt>
<dt><a href="suffix.html#index-0">suffix</a>
</dt>
</dl></td>
</tr></table>
<h2 id="T">T</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="tad.html#index-0">tad</a>
</dt>
<dt><a href="temper.html#index-0">temper</a>
</dt>
<dt><a href="thermo.html#index-0">thermo</a>
</dt>
<dt><a href="thermo_modify.html#index-0">thermo_modify</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="thermo_style.html#index-0">thermo_style</a>
</dt>
<dt><a href="timer.html#index-0">timer</a>
</dt>
<dt><a href="timestep.html#index-0">timestep</a>
</dt>
</dl></td>
</tr></table>
<h2 id="U">U</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="uncompute.html#index-0">uncompute</a>
</dt>
<dt><a href="undump.html#index-0">undump</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="unfix.html#index-0">unfix</a>
</dt>
<dt><a href="units.html#index-0">units</a>
</dt>
</dl></td>
</tr></table>
<h2 id="V">V</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="variable.html#index-0">variable</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="velocity.html#index-0">velocity</a>
</dt>
</dl></td>
</tr></table>
<h2 id="W">W</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="write_coeff.html#index-0">write_coeff</a>
</dt>
<dt><a href="write_data.html#index-0">write_data</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="write_dump.html#index-0">write_dump</a>
</dt>
<dt><a href="write_restart.html#index-0">write_restart</a>
</dt>
</dl></td>
</tr></table>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2013 Sandia Corporation.
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./',
VERSION:'',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2/js/lightbox.min.js"></script>
<script type="text/javascript" src="_static/sphinxcontrib-images/LightBox2/lightbox2-customize/jquery-noconflict.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>
\ No newline at end of file
diff --git a/doc/html/searchindex.js b/doc/html/searchindex.js
index cefe96143..655458bf7 100644
--- a/doc/html/searchindex.js
+++ b/doc/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({envversion:50,filenames:["Manual","Section_accelerate","Section_commands","Section_errors","Section_example","Section_history","Section_howto","Section_intro","Section_modify","Section_packages","Section_perf","Section_python","Section_start","Section_tools","accelerate_gpu","accelerate_intel","accelerate_kokkos","accelerate_omp","accelerate_opt","angle_charmm","angle_class2","angle_coeff","angle_cosine","angle_cosine_delta","angle_cosine_periodic","angle_cosine_shift","angle_cosine_shift_exp","angle_cosine_squared","angle_dipole","angle_fourier","angle_fourier_simple","angle_harmonic","angle_hybrid","angle_none","angle_quartic","angle_sdk","angle_style","angle_table","angle_zero","atom_modify","atom_style","balance","body","bond_class2","bond_coeff","bond_fene","bond_fene_expand","bond_harmonic","bond_harmonic_shift","bond_harmonic_shift_cut","bond_hybrid","bond_morse","bond_none","bond_nonlinear","bond_quartic","bond_style","bond_table","bond_write","bond_zero","boundary","box","change_box","clear","comm_modify","comm_style","compute","compute_ackland_atom","compute_angle","compute_angle_local","compute_angmom_chunk","compute_basal_atom","compute_body_local","compute_bond","compute_bond_local","compute_centro_atom","compute_chunk_atom","compute_cluster_atom","compute_cna_atom","compute_com","compute_com_chunk","compute_contact_atom","compute_coord_atom","compute_damage_atom","compute_dihedral","compute_dihedral_local","compute_dilatation_atom","compute_dipole_chunk","compute_displace_atom","compute_dpd","compute_dpd_atom","compute_erotate_asphere","compute_erotate_rigid","compute_erotate_sphere","compute_erotate_sphere_atom","compute_event_displace","compute_fep","compute_group_group","compute_gyration","compute_gyration_chunk","compute_heat_flux","compute_hexorder_atom","compute_improper","compute_improper_local","compute_inertia_chunk","compute_ke","compute_ke_atom","compute_ke_atom_eff","compute_ke_eff","compute_ke_rigid","compute_meso_e_atom","compute_meso_rho_atom","compute_meso_t_atom","compute_modify","compute_msd","compute_msd_chunk","compute_msd_nongauss","compute_omega_chunk","compute_orientorder_atom","compute_pair","compute_pair_local","compute_pe","compute_pe_atom","compute_plasticity_atom","compute_pressure","compute_property_atom","compute_property_chunk","compute_property_local","compute_rdf","compute_reduce","compute_rigid_local","compute_saed","compute_slice","compute_smd_contact_radius","compute_smd_damage","compute_smd_hourglass_error","compute_smd_internal_energy","compute_smd_plastic_strain","compute_smd_plastic_strain_rate","compute_smd_rho","compute_smd_tlsph_defgrad","compute_smd_tlsph_dt","compute_smd_tlsph_num_neighs","compute_smd_tlsph_shape","compute_smd_tlsph_strain","compute_smd_tlsph_strain_rate","compute_smd_tlsph_stress","compute_smd_triangle_mesh_vertices","compute_smd_ulsph_num_neighs","compute_smd_ulsph_strain","compute_smd_ulsph_strain_rate","compute_smd_ulsph_stress","compute_smd_vol","compute_sna_atom","compute_stress_atom","compute_tally","compute_temp","compute_temp_asphere","compute_temp_body","compute_temp_chunk","compute_temp_com","compute_temp_cs","compute_temp_deform","compute_temp_deform_eff","compute_temp_drude","compute_temp_eff","compute_temp_partial","compute_temp_profile","compute_temp_ramp","compute_temp_region","compute_temp_region_eff","compute_temp_rotate","compute_temp_sphere","compute_ti","compute_torque_chunk","compute_vacf","compute_vcm_chunk","compute_voronoi_atom","compute_xrd","create_atoms","create_bonds","create_box","delete_atoms","delete_bonds","dielectric","dihedral_charmm","dihedral_class2","dihedral_coeff","dihedral_cosine_shift_exp","dihedral_fourier","dihedral_harmonic","dihedral_helix","dihedral_hybrid","dihedral_multi_harmonic","dihedral_nharmonic","dihedral_none","dihedral_opls","dihedral_quadratic","dihedral_spherical","dihedral_style","dihedral_table","dihedral_zero","dimension","displace_atoms","dump","dump_custom_vtk","dump_h5md","dump_image","dump_modify","dump_molfile","echo","fix","fix_adapt","fix_adapt_fep","fix_addforce","fix_addtorque","fix_append_atoms","fix_atc","fix_atom_swap","fix_ave_atom","fix_ave_chunk","fix_ave_correlate","fix_ave_correlate_long","fix_ave_histo","fix_ave_time","fix_aveforce","fix_balance","fix_bond_break","fix_bond_create","fix_bond_swap","fix_box_relax","fix_colvars","fix_controller","fix_deform","fix_deposit","fix_drag","fix_drude","fix_drude_transform","fix_dt_reset","fix_efield","fix_ehex","fix_enforce2d","fix_eos_cv","fix_eos_table","fix_eos_table_rx","fix_evaporate","fix_external","fix_freeze","fix_gcmc","fix_gld","fix_gle","fix_gravity","fix_heat","fix_imd","fix_indent","fix_ipi","fix_langevin","fix_langevin_drude","fix_langevin_eff","fix_lb_fluid","fix_lb_momentum","fix_lb_pc","fix_lb_rigid_pc_sphere","fix_lb_viscous","fix_lineforce","fix_manifoldforce","fix_meso","fix_meso_stationary","fix_modify","fix_momentum","fix_move","fix_msst","fix_neb","fix_nh","fix_nh_eff","fix_nph_asphere","fix_nph_body","fix_nph_sphere","fix_nphug","fix_npt_asphere","fix_npt_body","fix_npt_sphere","fix_nve","fix_nve_asphere","fix_nve_asphere_noforce","fix_nve_body","fix_nve_eff","fix_nve_limit","fix_nve_line","fix_nve_manifold_rattle","fix_nve_noforce","fix_nve_sphere","fix_nve_tri","fix_nvt_asphere","fix_nvt_body","fix_nvt_manifold_rattle","fix_nvt_sllod","fix_nvt_sllod_eff","fix_nvt_sphere","fix_oneway","fix_orient","fix_phonon","fix_pimd","fix_planeforce","fix_poems","fix_pour","fix_press_berendsen","fix_print","fix_property_atom","fix_qbmsst","fix_qeq","fix_qeq_comb","fix_qeq_reax","fix_qmmm","fix_qtb","fix_reax_bonds","fix_reaxc_species","fix_recenter","fix_restrain","fix_rigid","fix_rx","fix_saed_vtk","fix_setforce","fix_shake","fix_shardlow","fix_smd","fix_smd_adjust_dt","fix_smd_integrate_tlsph","fix_smd_integrate_ulsph","fix_smd_move_triangulated_surface","fix_smd_setvel","fix_smd_tlsph_reference_configuration","fix_smd_wall_surface","fix_spring","fix_spring_chunk","fix_spring_rg","fix_spring_self","fix_srd","fix_store_force","fix_store_state","fix_temp_berendsen","fix_temp_csvr","fix_temp_rescale","fix_temp_rescale_eff","fix_tfmc","fix_thermal_conductivity","fix_ti_rs","fix_ti_spring","fix_tmd","fix_ttm","fix_tune_kspace","fix_vector","fix_viscosity","fix_viscous","fix_wall","fix_wall_gran","fix_wall_piston","fix_wall_reflect","fix_wall_region","fix_wall_srd","group","group2ndx","if","improper_class2","improper_coeff","improper_cossq","improper_cvff","improper_distance","improper_fourier","improper_harmonic","improper_hybrid","improper_none","improper_ring","improper_style","improper_umbrella","improper_zero","include","info","jump","kspace_modify","kspace_style","label","lattice","log","manifolds","mass","min_modify","min_style","minimize","molecule","neb","neigh_modify","neighbor","newton","next","package","pair_adp","pair_airebo","pair_awpmd","pair_beck","pair_body","pair_bop","pair_born","pair_brownian","pair_buck","pair_buck_long","pair_charmm","pair_class2","pair_coeff","pair_colloid","pair_comb","pair_coul","pair_coul_diel","pair_cs","pair_dipole","pair_dpd","pair_dpd_fdt","pair_dsmc","pair_eam","pair_edip","pair_eff","pair_eim","pair_exp6_rx","pair_gauss","pair_gayberne","pair_gran","pair_gromacs","pair_hbond_dreiding","pair_hybrid","pair_kim","pair_lcbop","pair_line_lj","pair_list","pair_lj","pair_lj96","pair_lj_cubic","pair_lj_expand","pair_lj_long","pair_lj_sf","pair_lj_smooth","pair_lj_smooth_linear","pair_lj_soft","pair_lubricate","pair_lubricateU","pair_mdf","pair_meam","pair_meam_spline","pair_meam_sw_spline","pair_mgpt","pair_mie","pair_modify","pair_morse","pair_multi_lucy","pair_multi_lucy_rx","pair_nb3b_harmonic","pair_nm","pair_none","pair_peri","pair_polymorphic","pair_quip","pair_reax","pair_reax_c","pair_resquared","pair_sdk","pair_smd_hertz","pair_smd_tlsph","pair_smd_triangulated_surface","pair_smd_ulsph","pair_smtbq","pair_snap","pair_soft","pair_sph_heatconduction","pair_sph_idealgas","pair_sph_lj","pair_sph_rhosum","pair_sph_taitwater","pair_sph_taitwater_morris","pair_srp","pair_style","pair_sw","pair_table","pair_table_rx","pair_tersoff","pair_tersoff_mod","pair_tersoff_zbl","pair_thole","pair_tri_lj","pair_vashishta","pair_write","pair_yukawa","pair_yukawa_colloid","pair_zbl","pair_zero","partition","prd","print","processors","python","quit","read_data","read_dump","read_restart","region","replicate","rerun","reset_timestep","restart","run","run_style","set","shell","special_bonds","suffix","tad","temper","thermo","thermo_modify","thermo_style","timer","timestep","tutorial_drude","tutorial_github","uncompute","undump","unfix","units","variable","velocity","write_coeff","write_data","write_dump","write_restart"],objects:{},objnames:{},objtypes:{},terms:{"00a":345,"00b":345,"02214e23":99,"03275e":524,"0892e":12,"0b1":11,"0e20":[361,501,525],"0e4":[270,354,424],"0e5":270,"0x98b5e0":206,"100k":1,"1024x1024":206,"10e":412,"10f":3,"10g":525,"10th":[493,499,512],"10x":[3,386,387,389,390,400],"10x10x10":166,"10x20x20":381,"12th":319,"15g":[207,515,525],"16e":319,"16g":[219,223],"16x":1,"18986e":387,"1_12":381,"1_3":381,"1_6":381,"1_prop":6,"1fluid":[421,452,480],"1st":[2,6,8,12,19,21,37,44,56,59,60,62,75,95,172,184,186,199,211,212,219,220,221,222,223,227,232,242,243,272,306,316,319,347,359,363,384,390,395,396,400,407,409,417,419,420,421,428,429,438,439,444,445,446,451,452,453,457,468,478,479,480,481,482,483,486,492,498,506,507,510,525],"1x2x2":495,"2000k":206,"20x":400,"23899e":387,"2400k":206,"2697v2":15,"2697v4":15,"298k":411,"2_3":381,"2k_ss":419,"2nd":[2,3,6,11,12,14,16,37,45,46,56,59,62,75,81,96,160,167,199,207,219,220,221,222,223,227,229,232,242,243,272,318,324,332,359,362,369,377,387,388,389,390,394,396,409,419,426,427,444,451,452,468,477,478,479,480,481,482,483,486,498,505,507,510,525],"2pi":199,"2theta":177,"2x1x2":495,"2x2x1":495,"2x2x2":495,"2x4x10":495,"2x5":419,"300k":[249,318,513,526],"310k":513,"3419e":270,"36x":15,"3806504e":[6,99],"3n_k":248,"3nk":308,"3nkb":313,"3rd":[4,9,14,16,19,37,56,75,115,125,199,219,220,222,223,227,242,243,318,320,359,388,392,394,409,419,421,426,427,451,452,468,478,479,480,481,482,483,486,498,505,510,525],"3x3":[99,381],"4857990943e":419,"49e":319,"4_94":11,"4th":[6,37,56,87,113,114,127,174,184,199,207,319,332,359,379,393,395,396,400,417,420,421,424,428,444,451,452,453,457,468,478,479,480,481,483,486,498,505,510,513,530],"4x10":377,"4x2x10":495,"4x6x10":495,"50k":1,"512k":15,"524k":15,"53xx":17,"54xx":17,"58i":211,"5_1":400,"5_12":381,"5_6":381,"5kx":[213,238],"5nlog_2":12,"5th":[127,207,387,421,515],"6021765e":524,"66e":319,"6863e22":456,"6x6":6,"7120p":15,"72360e":270,"7797e":270,"7842e":12,"8032044e":524,"8706e":467,"8706q":467,"8730m":467,"8730n":467,"8e12":221,"8x1":6,"8x2":[6,12],"948q":467,"9e18":[12,39],"9e9":456,"9jan09":[354,424],"9th":389,"abstract":16,"boolean":[3,359,361],"break":[2,3,7,8,9,12,54,55,61,182,210],"byte":[3,12,207,221,515],"case":[1,2,3,6,8,11,12,13,14,15,16,17,39,40,41,45,46,61,63,65,74,75,77,113,114,119,125,127,128,155,156,157,158,159,161,164,165,166,167,168,170,171,172,176,178,180,181,182,184,202,203,204,205,206,207,213,214,218,219,220,222,223,224,225,227,229,231,232,236,238,244,247,250,251,253,254,255,256,258,270,272,273,274,275,276,277,278,279,280,288,292,293,295,297,299,300,304,305,307,308,309,310,317,318,319,321,324,326,327,329,332,336,339,340,341,343,344,348,350,351,353,354,356,357,358,359,361,377,378,379,381,384,386,387,388,389,391,393,394,396,405,408,410,412,417,419,423,424,426,427,428,440,441,442,444,447,449,451,452,453,457,460,463,465,469,476,479,480,481,483,490,491,493,496,498,500,501,505,506,508,510,512,514,515,516,517,519,520,524,525,526,529,530],"catch":[1,3,496],"char":[6,8,467],"class":[1,3,5,6,7,8,9,11,12,13,21,36,44,55,186,198,245,307,363,372,406,427,459,460,477,486,496,498],"default":[1,2,3,6,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"else":[8,205],"export":[15,206,407],"false":[361,525],"final":[3,5,6,7,8,9,11,12,16,41,61,95,153,207,218,219,220,222,223,225,229,232,247,271,272,277,308,312,318,319,320,324,345,347,348,355,361,387,389,395,396,400,417,420,421,428,440,444,453,457,458,478,479,480,481,483,486,493,506,512,519,520,525,528],"float":[3,6,8,12,15,40,42,75,124,203,207,219,223,252,307,320,338,419,464,466,496,498,508,515,525],"function":[1,3,6,7,8,9,11,12,14,16,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,42,43,45,46,47,48,49,51,53,54,56,57,65,69,75,85,95,99,103,110,116,123,127,128,152,155,165,172,173,174,184,185,187,188,189,190,192,193,195,196,197,199,202,203,207,211,212,213,214,216,220,221,224,227,229,230,232,237,238,240,242,243,245,246,248,250,251,253,255,256,258,269,271,272,274,275,276,277,278,279,280,281,282,289,290,292,293,295,297,300,301,305,310,311,312,313,317,318,319,321,322,329,339,340,341,345,346,348,350,353,356,358,361,362,364,365,367,368,371,373,378,379,387,395,396,397,398,400,401,402,403,404,405,406,408,409,410,411,413,414,415,417,418,419,420,422,423,424,425,426,427,430,431,432,433,434,435,436,437,438,439,440,441,443,444,445,446,447,448,449,450,451,452,453,454,456,457,459,460,461,462,467,469,470,471,472,473,474,475,478,479,480,481,482,483,484,486,487,488,489,490,495,496,501,503,505,507,508,514,519],"import":[1,2,3,6,9,11,16,75,115,178,189,210,229,247,250,251,255,256,272,313,339,340,341,343,348,358,360,440,447,460,496,498,507,515,519],"int":[3,6,8,11,111,207,245,247,255,257,313,348,515],"long":[1,2,3,6,7,8,9,10,12,14,15,17,35,61,63,76,95,96,119,120,121,123,127,153,172,179,182,183,184,190,202,206,210,211,212,216,217,220],"new":[0,3,5,6,7],"null":[3,6,99,100,117,123,128,153,178,203,210,218,220,224,230,234,237,269,307,316,319,321,324,328,329,332,334,354,395,396,409,417,420,424,427,428,429,444,445,446,453,457,459,460,468,478,481,482,483,486,498,501,506,508,526],"public":[0,7,8,12,245,254,420,451,452,458,467],"return":[2,3,6,8,11,14,15,16,17,18,41,75,118,119,128,146,147,151,176,178,207,219,232,245,272,361,375,377,424,495,496,497,505,508,514,516,525],"short":[1,3,6,7,9,13,15,176,272,318,336,349,379,383,390,391,394,396,400,401,403,404,405,409,410,412,419,427,430,432,436,440,443,444,449,450,454,462,467,479,484,493,496,506,508,512,519,520],"static":[2,3,5,6,7,8],"switch":[1,3,6,10,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,34,37,39,40,43,45,46,47,48,49,51,53,54,56,99,123,152,155,165,177,184,185,187,188,189,190,192,193,195,196,199,206,209,213,217,224,232,240,246,250,254,255,258,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,310,311,318,321,322,345,346,356,362,364,365,367,368,371,373,375,377,379,382,389,393,394,395,396,398,401,402,403,404,405,406,408,409,410,413,414,417,418,420,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,445,447,450,453,454,456,459,460,461,462,469,478,479,481,482,483,484,486,488,489,490,492,493,495,498,500,501,505,507,511,513,520,525,528,530],"throw":515,"true":[6,12,13,16,119,126,129,203,204,219,225,227,232,272,273,299,300,301,305,318,343,347,359,361,394,419,424,467,478,496,500,508,525],"try":[1,3,8,12,16,18,219,252,258,344,345,346,351,496,520,525],"var":[3,11,12,178,359,377,509,525],"void":[4,6,7,8,41,181,225,245,501],"while":[1,3,9,11,12,13,17,74,75,115,152,161,176,189,203,208,217,229,231,232,236,248,249,254,255,256,258,264,272,295,308,309,313,315,319,349,379,387,394,400,411,417,459,460,481,483,486,493,496,507,512,519],__main__:496,__pthread_key_cr:12,_boundingbox:204,_compute_group_group:154,_compute_heat_flux:154,_compute_t:8,_j1m1m1:152,_j2m2m2:152,_manifold_rattl:520,_pair_lj:9,_serial:12,_wirnsberg:239,a10:361,a123:361,a12:461,a2m:[6,99],a_0:[258,348,400],a_0_real:258,a_1:348,a_2:348,a_3:348,a_4:348,a_c:408,a_cc:408,a_f:483,a_ij:400,a_pi:400,a_sigma:400,a_ss:408,aat:185,aatom1:[68,126],aatom2:[68,126],aatom3:[68,126],ab_23_cd:361,abbrevi:12,abc:[3,12,361,496,525],aberdeen:[88,89,241,323],abf:230,abf_integr:13,abi:208,abil:[3,229,272,305,318,419],abl:[3,8,9,11,12,39,94,203,208,228,238,246,288,344,351,394,496,525,529],ablat:348,abort:513,about:[0,1,3,6,8,9,11,12,13,15,16,39,41,42,63,65,82,119,126,127,130,172,178,203,204,206,207,208,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,234,236,237,238,239,240,244,245,246,247,250,251,252,253,255,256,257,258,259,260,261,262,263,264,265,266,268,271,277,281,282,283,284,285,286,287,288,289,290,291,294,298,299,300,302,303,304,305,306,307,309,310,311,312,313,314,315,316,317,318,320,321,322,332,333,334,336,337,339,340,341,342,343,344,345,346,347,348,350,351,352,353,355,356,357,358,359,376,379,383,386,387,389,394,399,405,410,427,456,460,489,496,499,500,505,506,508,513,517,520,525,528,530],abov:[1,2,6,7,8,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,37,40,41,42,43,44,45,46,47,48,49,50,51,53,54,56,59,65,66,71,74,75,76,77,80,81,94,95,97,98,99,103,104,106,107,123,125,127,128,130,152,153,155,156,157,158,159,160,161,164,165,166,167,168,170,171,172,176,177,178,180,181,184,185,186,187,188,189,190,191,192,193,195,196,197,199,203,204,205,206,207,210,211,212,213,214,218,219,220,222,223,225,228,229,231,232,233,238,242,245,247,251,253,255,256,257,261,271,272,277,301,304,306,311,317,318,319,324,332,336,339,340,341,342,359,361,362,363,364,365,366,367,368,369,371,373,379,381,384,388,389,393,394,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,430,432,433,434,435,436,437,438,439,440,441,442,443,444,447,448,449,450,451,452,454,456,457,459,460,461,462,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,484,485,486,488,489,490,491,492,493,494,495,496,498,499,500,501,502,505,506,507,508,509,512,513,516,519,520,525,526,529,530],abscissa:[451,452,479,480],absenc:214,absent:519,absolut:[3,207,217,230,232,236,319,324,338,378,379,387,424,432,499],absorb:348,absoult:379,abstol:319,ac3:177,academ:247,acc:343,acceler:0,accelri:[6,13],accept:[7,12,95,176,178,207,228,232,247,319,343,404,436,506,513,520],acceptanc:217,acceptor:426,access:[0,3,6,7,8,9,11,12,15,38,40,58,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,93,96,97,98,99,100,101,102,103,105,106,109,110,111,113,114,115,116,117,118,119,121,122,123,124,125,126,128,129,130,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,165,166,167,168,169,170,171,173,174,175,176,177,200,210,211,212,213,214,215,216,217,218,219,220,222,223,224,225,226,227,228,229,230,231,232,233,234,237,238,239,240,244,245,246,247,248,249,250,251,252,253,255,257,258,259,260,261,262,263,264,265,266,268,269,270,271,272,277,281,282,283,284,285,286,287,288,289,290,291,294,298,299,300,302,303,304,305,306,307,308,309,310,311,312,314,315,316,317,318,320,321,322,324,329,332,333,334,335,336,337,338,339,340,341,342,344,345,346,347,348,350,351,352,353,354,355,356,357,358,374,378,394,396,422,424,426,427,444,459,460,469,495,496,499,504,516,517,525],accident:520,accidenti:371,accler:[9,12],accommod:215,accomod:272,accompani:8,accomplish:[15,232,259,289],accord:[6,66,75,88,133,139,142,160,206,217,226,227,243,258,272,288,300,308,324,326,345,346,348,353,354,356,357,358,390,419,424,435,438,457,464,466,467,469,471,472,474,475,476,512,525],accordingli:[11,112,156,157,171,176,182,390,441,442,476],account:[3,6,95,130,160,176,177,186,198,220,222,237,239,252,253,255,272,278,279,280,292,293,295,297,299,303,309,318,320,322,332,334,335,336,339,340,341,344,348,351,367,388,410,415,424,432,436,441,442,444,447,467,495,512,520,526],accuml:[3,318,344,351],accumul:[6,8,14,75,88,154,210,220,221,255,318,324,350,376,394,504,524],accur:[1,3,6,9,14,16,37,41,56,161,225,270,313,318,319,322,336,344,351,357,359,379,400,419,423,424,449,461,477,479,480,481,483,512,517,525],accuraci:[1,3,6,12,41,202,203,207,225,239,249,272,310,322,349,359,378,379,386,396,419,449,451,452,459,460,479,480,487,507,512,517,519,525,529],accuractli:517,ach:378,achiev:[1,3,6,9,10,15,16,17,28,41,225,239,247,249,272,273,288,300,301,308,378,427,507],achiv:17,acid:9,ackland1:417,ackland2:417,ackland:2,acknowledg:0,acml:12,aco:525,acolor:[206,207],acoust:300,acquir:[3,6,60,63,64,181,182,227,229,232,272,455,491,503,519],across:[1,2,3,6,9,12,13,14,41,59,63,68,71,73,75,84,102,119,126,128,166,180,182,219,222,225,237,251,318,319,320,325,344,348,351,357,361,389,394,493,498,501,502,506,515,517],act:[3,6,73,119,129,163,236,250,253,254,255,256,258,261,271,318,329,343,345,346,348,357,358,359,387,402,413,423,424,426,461,476],acta:[130,177,395],actinid:[9,447],action:[2,6,11,12,75,248,253,346,519],activ:[5,8,11,12,13,15,55,61,95,176,230,248,252,255,261,267,271,298,318,319,327,347,376,440,477,507,519,522,525],active:[267,492],actual:[1,3,6,8,12,56,64,134,161,203,204,207,211,212,224,226,227,231,236,255,256,295,299,304,305,313,316,324,336,339,340,341,343,349,358,359,378,390,423,425,430,435,441,442,476,495,496,507,508,516,525],actualli:338,adam:[378,379],adapt:[2,3,6,9,95,172,210],adapti:299,adaptiv:[9,230,396],add:[0,1,3,5,6,7,8,9,11,12,13,14,15,16,17,18,40,42,75,95,99,112,125,128,129,131,176,178,179,203,204,205,206,210,211,212,213,214,216,218,219,220,222,223,227,230,231,236,238,239,245,249,250,251,253,255,257,258,262,270,271,272,273,274,275,276,277,278,279,280,292,293,295,296,297,299,307,317,318,321,322,332,333,335,339,341,342,346,347,348,350,352,353,357,359,379,381,386,388,396,401,403,406,410,419,427,432,444,449,450,454,460,462,496,498,499,504,506,508,510,517,519,520],add_molecul:216,add_speci:216,add_to_nodeset:216,added:[499,520],addforc:[2,3,210],adding:[8,213,238,317,520],addit:[1,2,3,4,6,7,8,9,12,13,14,15,16,17,19,21,28,32,36,37,39,40,41,42,44,50,55,56,65,118,119,124,154,178,179,181,182,186,191,197,198,199,200,201,206,207,208,210,213,221,224,225,229,230,236,238,239,242,243,247,249,250,251,255,258,272,273,274,275,276,277,278,279,280,290,292,293,295,296,297,299,307,318,321,322,323,325,349,352,353,357,363,369,372,374,379,381,389,391,394,395,396,400,401,403,405,407,409,410,413,415,416,417,418,419,420,424,425,427,428,429,431,432,440,442,443,444,445,446,447,449,451,452,453,454,457,459,460,462,467,468,477,478,479,480,481,482,483,486,490,493,498,499,500,505,506,507,510,512,519,520,521,523,525,528,529,530],addition:[0,4,6,8,11],additionali:204,addres:9,address:[7,8,11,206,254,520],addtorqu:2,adequ:[264,336,349,378,389,507],adher:28,adhikari:258,adiabat:0,adiam:[206,207],adjac:[39,176,178,239,389,449,479,480,481,512,513],adjiman:448,adjust:[2,3,6,15,16,41,61,130,140,156,157,158,161,162,165,166,171,172,177,182,203,206,219,225,229,231,232,252,255,259,263,268,269,272,273,277,295,299,302,304,305,308,309,310,311,316,318,319,327,336,340,344,349,351,352,353,355,356,358,378,379,387,389,394,396,416,441,442,467,483,508,526],adjust_radiu:327,adjust_radius_factor:327,admiss:277,adof:[158,219],adopt:[317,519],adp:[2,3,7],adri:[9,314,459,460],adust:172,advanc:[3,15,252,400,493,504],advantag:[1,6,8,11,17,39,40,41,225,231,394,418,507,512],advect:[3,6,336],advertis:8,advis:[319,389,458,517],afer:3,affect:[1,6,10,14,16,40,62,63,75,96,128,153,162,176,182,206,207,212,219,220,222,223,226,227,228,229,232,233,239,245,251,253,255,261,267,269,273,274,275,276,278,279,280,286,292,293,295,297,318,320,334,348,358,371,378,385,386,387,389,390,391,394,419,441,442,449,495,496,498,500,501,503,506,508,517],affin:[15,16,17,232,394,409],affiniti:394,afile:249,aforement:17,afresh:[306,506,525],afshar:414,after:[2,3,5,6,8,11,12,14,20,21,32,39,40,41,44,50,59,60,61,63,65,75,156,157,158,159,160,161,162,165,166,167,168,170,171,179,181,182,185,186,191,197,202,203,204,205,206,207,208,210,211,212,216,217,219,220,225,226,227,228,229,231,232,236,247,258,259,260,261,262,268,269,270,272,278,279,280,286,292,293,295,297,300,304,308,316,318,319,322,331,333,337,339,340,341,343,344,345,346,347,351,353,355,359,362,363,369,377,384,385,387,388,390,392,393,394,395,396,400,407,409,417,418,419,420,421,427,428,429,440,441,442,444,445,446,447,451,452,453,457,459,460,467,468,477,478,480,481,482,483,486,493,495,497,498,499,500,501,503,504,506,508,510,512,515,516,517,519,520,524,525,526,528,529,530],afterrun:506,afterward:3,afterword:41,ag1:177,ag2:177,again:[6,11,12,16,64,152,158,164,172,203,207,232,239,251,304,362,377,389,441,442,493,495,496,498,500,505,512,514,525,528],against:[11,12,13,66,233,389,459,460],aggreg:[6,12,68,71,73,84,102,119,126,251,268,316,318,334,493,526],aggress:[239,251,512],agilio:[9,13],agre:[3,8,199,387,396,429,460],agreement:[5,7],ahd:426,ahead:355,aidan:[0,5,7,9,13,381],aij:13,aim:6,airebo:[2,3,7,226,227,315],ajaramil:[7,9,13],aka:206,akohlmei:[7,9,13,208,252],aktulga:[7,9,311,460],al2o3:467,al2o3_001:[130,320],al3:177,ala:[258,467],alain:9,alat:[299,444],albe:[457,481,483],albeit:317,albert:9,alchem:[95,172],alcohol:351,alcu:[395,400],alcu_eam:457,alderton:413,alejandr:[272,273],alessandro:13,algebra:447,algorithm:[0,1,6,7,8,9,41,63,207,210,216,225,228,232,239,251,258,260,261,286,301,309,318,322,323,343,344,348,351,356,385,386,387,391,394,415,419,442,447,464,466,493,495,512],alia:[9,15],alias:[1,379],aliceblu:207,align:[6,9,12,28,41,75,180,199,225,253,381,498,501,519],alkali:419,all:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,21,32,36,38,39,40,41,42,44,50,54,55,57,58,59,61,62,63,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,166,171,172,173,174,175,176,177,178,179,180,181,182,184,186,191,197,198,199,200,203,204,205,206,207,208,210,211,212,213,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,235,236,237,238,239,240,241,242,243,244,245,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,264,265,267,268,270,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,290,291,292,293,294,295,296,297,298,299,300,301,303,304,305,306,307,308,309,310,311,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,331,332,333,335,336,337,338,339,340,343,344,345,346,347,348,349,350,351,353,354,355,356,357,358,359,360,361,362,363,367,372,374,376,377,378,379,380,381,384,387,388,389,390,391,393,394,395,396,397,399,400,401,403,404,405,406,407,409,410,413,414,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,436,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,456,457,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,489,490,491,492,493,495,496,497,498,499,500,501,502,503,505,506,507,508,509,510,511,512,513,515,516,517,519,520,524,525,526,528,529,530],allen:[28,95,413,423],allentildeslei:95,allign:3,allindex:360,alloc:[3,5,6,8,9,11,12,62,245,350,388,390,394,455,460,498,506],allocat:3,alloi:[2,3,12,13,395,400,410],allosw:75,allow:[1,2,3,6,8,9,11,12,13,14,15,16,17,21,36,38,39,40,41,55,57,58,59,60,61,63,64,65,81,100,117,119,154,156,157,158,171,176,177,178,180,186,198,199,200,202,203,204,206,207,208,210,211,213,214,215,216,217,219,220,221,222,223,224,225,227,228,229,230,231,232,233,234,237,238,245,247,248,249,250,252,253,255,258,261,262,267,269,272,273,290,299,303,304,305,306,307,308,310,312,317,318,319,320,321,322,324,326,327,331,332,333,334,335,336,343,344,345,346,348,349,350,351,352,353,357,359,361,363,372,374,378,379,381,387,388,389,390,393,394,396,397,400,401,402,403,404,405,410,417,419,424,425,426,427,432,436,441,442,447,449,457,460,461,464,466,467,476,484,487,489,491,493,496,498,500,501,502,503,504,505,508,510,511,512,515,516,520,525,526],almost:[2,3,12,15,62,253,308,348,379,391,394,476],alo:410,alon:[6,7,228,314,459,460,496],alond:13,along:[6,8,12,28,40,74,75,95,130,176,177,178,202,203,206,219,228,239,253,258,259,263,264,269,271,308,318,322,324,328,332,334,343,347,348,354,357,359,381,383,385,386,387,389,410,413,424,427,430,432,436,444,459,460,479,480,498,501,508,509,525],alonso:[445,446],alpha:[6,12,51,211,231,258,308,309,313,387,395,398,401,410,414,415,417,418,420,421,426,431,432,444,450,456,482,484,516,519],alpha_c:440,alpha_i:468,alpha_lj:440,alphabet:[2,3,21,36,44,55,65,186,198,210,363,372,388,407,477,498],alphanumer:[3,65,210,307,315,361,388,525],alreadi:[3,7,8,9,12,16,17,42,57,178,179,181,205,215,219,225,227,232,262,306,308,336,359,360,388,389,414,425,427,434,442,476,487,490,494,498,499,503,508,524,525],also:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,21,28,35,36,37,39,40,41,42,44,54,55,56,60,61,63,65,69,74,75,76,77,79,81,86,87,88,89,95,97,98,100,103,113,114,115,116,117,118,120,121,123,125,127,128,131,152,153,154,155,156,157,158,159,160,161,162,164,165,166,167,168,170,171,172,173,174,175,178,179,180,181,182,184,186,198,199,201,202,203,204,205,206,207,208,210,211,212,213,215,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,238,241,242,243,245,246,247,248,249,251,252,255,256,257,258,267,269,270,272,273,274,275,276,277,278,279,280,285,289,290,292,293,295,296,297,299,300,301,303,304,305,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,328,329,332,334,336,339,340,341,342,343,347,348,349,350,352,354,357,359,360,361,363,369,372,376,378,379,381,382,384,387,388,389,390,391,393,394,400,404,405,407,411,412,413,414,417,418,419,423,424,426,427,428,436,440,441,444,447,449,453,455,456,457,458,460,461,462,464,471,472,474,475,477,478,479,480,481,482,483,484,486,493,495,496,497,498,499,500,501,502,503,505,506,507,508,510,511,512,513,515,516,517,518,519,520,521,523,524,525,526,528,530],alter:[3,6,8,9,11,12,41,61,155,156,157,158,159,161,164,165,166,167,170,171,178,182,203,204,206,208,211,212,219,226,227,228,229,231,232,271,272,313,316,318,321,329,336,344,351,358,386,389,427,498,503,505,508,525,526,530],altern:[1,6,8,9,11,12,15,16,17,99,178,203,210,220,232,241,252,256,272,307,318,319,343,344,351,364,368,378,386,387,395,396,410,415,417,418,420,429,432,440,444,445,446,453,457,458,468,478,481,483,486,496,498,499,511,513,516],alternat:[387,519],although:[15,28,42,199,261,272,305,309,318,343,377,505,519,530],aluminum:490,alwai:[0,6,11,12,15,16,17,54,59,65,75,176,207,219,220,221,223,227,230,247,249,253,310,313,318,336,353,357,358,362,378,379,385,387,388,390,391,394,403,406,417,435,447,451,452,459,460,467,469,479,480,481,483,490,493,498,499,501,503,510,512,515,519,525,526],amap:207,amatrix:249,amaz:11,amazingli:13,amber2lmp:0,amber:0,ambient:206,ambigu:[3,65,210,525],amd:[16,394,447],amino:9,amit:9,among:[15,153,217,258],amorph:[178,482],amount:[1,3,6,12,61,96,126,176,180,202,206,217,221,229,230,247,251,255,272,299,305,318,319,327,336,341,344,349,351,359,378,394,414,455,498,501],amplitud:[232,269,328,354,371,501,525],amu:247,amzallag:467,analag:[6,525],analalog:6,analog:[6,117,152,180,199,231,424],analys:[7,503],analysi:[7,9,13,65,66,77,208,314,315,325,360,447,468,498,508],analyt:[1,3,9,13,130,172,177,322,378,400,428,429,434,447,457,479],analyz:[6,8,9,13,389,447],andersen:[288,294,322],anderson:[303,414],andre:[7,9,13],andrew:13,andzelm:476,ang:[15,299,519],angl:[0,1,2,3,6,7],angle1:317,angle2:317,angle:[3,8,15,21,28,32,36,37,68,388,498],angle_coeff:[2,3,19,20],angle_cosine_shift:26,angle_cosine_shift_exp:[25,187],angle_cutof:426,angle_cutoff:426,angle_hybrid:[28,67],angle_info:460,angle_styl:0,angle_typ:40,angleangl:[3,362,369,498],angleangletors:[3,185,498],anglecoeff:[3,38],angles:207,angletors:[3,185,191,498],angletyp:227,angmom:[2,3,6,65],angmomi:[124,129,203,204,219,338],angmomx:[124,129,203,204,219,338],angmomz:[124,129,203,204,219,338],angstrom:[6,10,61,75,129,130,167,177,178,202,203,204,206,207,215,232,233,247,252,253,269,311,316,353,355,356,358,379,381,385,391,395,396,405,417,440,444,453,458,459,460,483,490,501,507,524,526],angular:[6,28,40,63,65,69,90,91,92,93,116,124,129,152,156,157,170,171,178,203,204,210,255,261,268,269,274,275,276,278,279,280,282,283,284,287,290,291,292,293,297,316,318,322,328,338,395,400,409,424,441,442,444,447,457,477,481,482,498,508,525,526],angularm:283,anharmon:[26,53,187,313,512],ani:[1,3,6,7,8,9,10,11,12,13,15,16,21,28,37,38,39,40,41,42,44,55,56,58,60,61,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,181,182,184,186,197,199,200,202,203,204,205,206,207,210,213,214,215,217,219,220,223,224,225,226,227,228,229,230,231,232,233,235,236,238,239,243,244,247,250,251,253,255,258,261,268,269,272,277,299,301,303,304,305,307,309,310,311,313,315,316,318,319,321,322,324,328,329,332,335,336,337,338,347,348,353,354,355,357,359,360,361,363,374,377,378,379,381,384,385,387,388,389,391,392,393,394,396,400,404,405,409,410,413,414,417,418,420,423,427,428,429,436,447,449,451,452,457,459,460,461,468,477,478,479,480,481,482,483,484,485,486,491,492,493,495,496,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,515,516,517,519,520,521,523,524,525,526,528,529,530],anihil:[440,450],anim:[2,4,7,11,13,206,389],animat:[4,206],anion:[420,467],aniso:[3,229,232,272,273,274,275,276,277,278,279,280,305,318],anisotrop:[255,423,461],ann:448,annoi:520,annot:[7,478,481,482,483,486,498],annual:[493,512],anoth:[3,6,7,8,9,11,12,15,16,28,40,65,75,131,205,206,210,211,217,219,222,223,228,232,233,239,248,251,255,256,261,272,273,277,304,318,320,339,340,341,348,358,361,385,387,389,390,393,410,414,419,420,423,426,427,431,432,440,459,461,469,476,479,481,482,483,492,493,496,499,505,513,519,520,525,530],another:[1,6,12,76,95,127,307,318,383,507],ansi:[9,12,15],answer:[3,4,8,12,318,391,392],anthoni:346,antiquewhit:207,antisymmetr:[9,40,397],antisymmetri:419,antonelli:[345,346],antonio:456,any:[1,3,6,12,14,42,61,68,73,176,202,203,206,207,213,214,224,227,232,234,250,253,269,305,321,329,354,356,358,427,459,476,493,495,496,498,499,501,509,512,526],anymor:346,anyon:7,anyparticl:94,anyth:[8,11,178,232,254,478,481,483,509,520],anywai:[181,394,519,528],anywher:[12,178,407,444,468,525],aoff:[388,498],aparam:[95,211,212],apart:[3,179,261,332,390,399,469,498,507],aperiod:300,api:[9,11,12,208,428,496],appar:3,appear:[2,3,6,11,12,13,39,40,41,76,81,95,100,117,119,126,127,152,161,178,179,181,203,204,206,207,219,225,229,233,236,247,252,304,315,347,359,361,362,378,387,388,389,408,417,444,449,451,452,467,479,480,486,494,495,496,498,499,500,503,505,519,525,530],append:[1,2,3,9,11,12,14,15,16,17,18,39,41,57,60,61,63,68,71,73,74,75,84,95,96,98,99,100,102,113,115,117,119,120,121,123,126,128,130,131,152,153,156,157,158,166,167,171,172,176,177,178,180,181,182,202,204,206,207,210,211,212,213],appendix:[28,413,467],appl:[229,272,273,486],appli:[2,3,4,5,6,8,9,12,16,17,28,32,41,50,59,61,63,65,75,76,95,96,115,127,152,153,158,164,166,168,172,177,178,180,184,186,191,198,202,203,204,206,207,210,211,212,213,214,216,219,225,229,230,232,234,237,238,239,241,242,243,245,246,247,248,249,250,252,253,255,256,257,258,262,272,273,277,278,279,280,286,292,293,297,298,299,301,305,308,316,317,318,321,322,324,325,328,332,333,335,337,339,340,341,342,344,346,347,348,351,359,378,381,387,388,389,399,401,403,405,410,413,419,421,424,425,426,427,429,430,432,438,442,447,449,452,454,459,462,463,464,465,466,476,480,484,489,498,499,501,502,503,507,508,510,515,517,519,525,526,528,529],applic:[1,6,9,12,15,16,208,228,231,233,234,245,247,249,252,299,304,307,317,324,332,344,351,378,394,483,508,519],applicat:216,appling:229,apply:[95,224,229,234,249,255,256,257,322,332,333,334,335],applyt:3,appopri:[9,16],approach:[6,7,15,197,203,216,248,300,301,313,318,343,344,346,348,351,378,400,410,412,415,416,423,427,447,461,463,465,476,487],appropri:[1,2,3,6,8,9,11,12,13,14,16,32,37,42,50,56,57,63,77,96,99,119,126,127,128,129,156,157,158,186,191,198,199,202,203,204,207,219,220,223,228,229,232,245,246,249,258,267,269,270,272,274,275,276,277,278,279,280,292,293,295,297,301,304,305,308,313,318,323,336,339,340,341,344,351,353,354,356,357,358,369,379,389,396,400,404,408,409,410,418,424,427,429,436,440,447,458,459,460,478,479,480,481,482,483,486,487,498,499,500,502,503,511,512,515,525,526],approri:250,approxim:[6,9,130,134,177,247,249,258,301,320,322,343,378,383,385,386,387,402,412,419,421,423,441,442,447,449,452,458,461,467,480,484,489,512,519],april:11,aprpopri:493,apu:[441,442],aqua:[206,207],aquamarin:207,ar_thermal:216,ar_ttm:216,ara:13,arbitrari:[6,40,60,127,203,204,206,208,230,232,250,272,301,305,309,319,478,496,509,525],arbitrarili:[11,61,127,152,202,229,272,410,525],arcco:3,arch:[1,9,12,14,16],architect:376,architectur:[394,447],archiv:[6,7,9,12,338,407,505],archive:[11,12],arcsin:3,area:[6,41,99,123,127,176,225,232,258,344,351,416,424,456,485,495,508],aren:[127,361,460],arflags:12,arg:[3,11,12,21,40,41,44,55,61,65,75,95,119,126,128,166,172,176,178,181,182,186,202,203,204,205,207,210,211,212,213,215,217,219,220,221,222,223,224,225,226,227,230,232,233,238,239,245,247,250,251,252,253,261,264,269,274,275,276,288,294,304,317,318,320,321,325,328,329,331,343,346,353,354,355,356,358,359,363,376,389,394,401,402,403,405,406,407,412,413,415,419,425,427,432,436,440,441,442,443,450,454,462,464,466,477,484,495,496,498,501,503,505,507,509,511,516,517,525,526,529,530],argon:247,argonn:12,args:496,argument:[2,3,6,8,11,12,15,16,19,20,21,22,23,24,25,26,27,28,29,30,31,34,37,40,41,42,43,44,45,46,47,48,49,51,53,54,56,61,65,74,77,95,99,117,123,127,152,153,155,160,165,166,167,172,176,178,179,180,182,184,185,186,187,188,189,190,192,193,195,196,199,203,204,207,210,211,212,213,215,218,219,220,221,222,223,224,225,229,230,232,240,242,243,245,246,247,249,250,254,255,261,269,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,303,304,306,310,311,315,318,319,320,321,322,336,348,350,354,356,359,361,362,363,364,365,367,368,369,371,373,376,377,379,380,381,384,389,393,394,395,396,398,399,400,401,402,403,404,405,406,407,408,409,410,412,413,414,415,417,418,420,421,422,423,424,425,426,427,428,429,430,432,433,434,435,436,437,438,439,440,441,443,444,445,446,449,450,451,452,453,454,456,457,459,460,461,462,467,468,469,477,478,479,480,481,482,483,484,486,488,489,490,492,493,494,495,496,497,498,499,501,503,506,507,508,509,513,515,516,525,526,529],aris:[12,489],arithmet:[3,6,113,378,405,408,435,449,484,485],arkansa:9,arl:[9,88,89,241,323],armv8:16,army:[88,89,241,323],arnold:378,around:[1,3,4,6,9,12,42,59,60,61,69,74,75,76,77,81,127,129,152,156,173,176,178,180,184,197,202,206,207,214,215,229,232,233,253,269,272,305,307,309,313,318,328,332,336,353,354,357,377,383,388,467,498,501,508,509,519,525],aroung:3,arrai:3,arrang:152,arrheniu:[319,512],arriv:15,art:[9,493,512],artefact:249,articl:[6,467],articul:[7,9,303],artifact:[96,176,519],artifici:[270,308,471,472,474],arun:13,arxiv:[152,205,288,294,383,468],ascend:[41,207,252,261,318,503],asci:7,ascii:[13,204,320,347,389,417,420,444,498],ash:[441,442],asid:[8,394],aside:[178,444],asin:525,ask:[3,11,520],askari:456,askoos:13,asoci:206,aspect:[6,7,61,232,247,423,461,485,498,508,512],aspect_ratio:320,asper:4,aspher:[0,2,3,4],asphere:4,asq:[441,442],assembl:4,assign:[1,2,3,6,7,11,12,14,16,17,32,38,39,40,41,50,58,59,61,63,65,69,75,76,79,86,98,103,114,116,121,124,125,129,130,152,153,158,173,175,177,178,181,191,202,203,204,205,206,207,208,210,211,212,215,219,222,225,227,228,229,231,233,235,247,252,255,256,257,258,269,272,274,275,276,277,278,279,280,290,292,293,295,296,297,301,304,305,307,309,315,318,320,339,340,341,342,359,369,379,381,384,388,389,393,394,400,417,420,423,426,427,451,452,460,461,490,495,496,498,499,500,501,502,507,508,513,516,525,526],assignemnt:[6,507],assignment:14,assing:307,assingn:479,assist:[7,270],associ:[3,5,6,8,12,21,36,39,40,44,55,61,69,78,79,86,87,95,97,98,103,109,111,113,114,116,129,142,173,186,198,203,204,206,207,211,212,213,217,229,232,238,245,247,248,254,258,269,272,303,313,317,318,319,320,334,336,360,361,363,372,381,387,389,393,394,407,410,414,415,416,417,419,426,427,429,432,436,451,452,463,465,476,477,479,480,496,499,506,518,519,522,525],associd:70,assum:[2,3,4,6,9,11,12,16,17,39,61,70,75,96,106,112,114,155,156,157,158,159,160,161,163,164,165,166,167,168,170,171,176,178,181,207,211,212,217,219,220,222,223,229,232,244,252,254,258,261,274,275,276,278,279,280,282,284,287,290,291,292,293,297,299,300,304,305,306,309,318,321,324,332,344,347,348,353,356,359,366,378,379,388,389,394,400,402,404,407,408,416,419,426,427,431,436,441,442,493,495,496,498,500,503,508,512,515,516,519,520,526],assume:[172,389,485],assumpt:[176,252,395,449],astar:444,astart:469,asterisk:[21,44,63,81,95,127,128,172,182,186,203,207,211,212,218,219,220,222,223,261,318,363,384,407,426,476,492,495,508,516,524],astop:[387,469],asu:417,asub:444,asubrama:13,asum:307,asymmetr:[139,239,356,400,417],asynchron:[14,15],atan2:525,atan:525,atc:[2,7],atc_fe_output:216,athomp:[0,7,9,13],atm2pa:6,atmospher:524,atobodi:129,atol:12,atom1:[303,317,388,498],atom2:[303,317,388,498],atom3:[303,317,388,498],atom4:[317,388,498],atom:[0,1,2,3,4,5],atom_element_map:216,atom_forc:460,atom_info:460,atom_modifi:[2,3,11],atom_styl:[2,3,6,9,12,36,39],atom_vec:8,atom_vec_atom:8,atom_vec_electron:8,atom_veloc:460,atom_weight:216,atomey:[6,7,11,13,203,206,207],atomfil:[3,6,75,307,359,393,508,525],atomic:[0,467],atomic_charg:216,atomic_numb:457,atomid:[129,498],atomist:[6,216,343,447],atomperbin:3,atoms:[203,256,519],atomt:207,atomvec:8,attach:[6,301,324,332,498],attatch:346,attempt:[3,6,41,61,75,202,217,225,226,227,228,233,247,304,305,336,356,378,382,389,427,496,513,516,525],attend:216,attent:[14,17],attogram:524,attrac:444,attract:0,attribut:[3,6,7,8,9,11,39,40,42,60,65,75,95,124,125,126,128,129,156,172,203,204,206,207,210,211,212,218,219,222,228,229,231,272,274,275,276,277,278,279,280,282,283,292,293,295,297,305,318,320,338,339,340,341,381,388,400,419,427,498,499,500,508,516,525],attribute1:126,attribute2:126,atw:[441,442],atwater:482,atwt:444,atyp:[68,126,172,227,410,432,436,440],atype:172,au1:177,au3:177,augment:[9,12,124,229,307,444],augt1:444,auo:315,auoh:315,author:[3,8,9,13,205,417,418,519],auto:[3,6,8,9,11,12,99,174,210,220,221,324,350,378,388,394,495],autocorrel:[65,99,255],autom:[9,12,206],automag:7,automat:[3,6,9,12,14,15,16,17,18,35,140,199,215,221,247,249,258,318,324,349,378,394,409,417,427,444,447,460,463,464,465,466,490,498,511,519,520,525],auxiliari:[1,6,9,11,12,13,203,300,318,499,503,528],avail:[1,3,5,6,7,8,9,11,12,13,14,15,16,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,43,45,46,47,48,49,51,53,54,56,63,65,95,123,124,152,155,165,176,184,185,187,188,189,190,192,193,195,196,199,203,206,210,211,213,219,222,223,224,229,230,232,240,246,248,250,251,252,255,272,273,274,275,276,277,278,279,280,281,282,288,290,292,293,294,295,297,310,311,312,318,319,320,321,322,346,356,362,364,365,367,368,371,373,376,379,383,394,395,396,398,401,402,403,404,405,406,408,409,410,413,414,417,418,419,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,442,444,445,449,450,453,454,456,457,459,460,461,462,468,469,478,479,481,482,483,484,486,488,489,490,499,501,507,511,525],availabl:15,avalo:[323,415],ave:12,ave_chunk:6,aveforc:[2,3,6,210,213],avendano:448,averag:[3,6,7,12,14,41,65,66,75,88,89,95,99,100,113,115,127,130,154,158,166,174,177,203,204,207,210,212,216,218,219,220,221,222,223,224,225,229,231,247,249,251,255,261,272,273,277,300,305,308,314,315,318,319,320,324,362,396,415,419,421,444,452,480,484,499,503,516,519,525],averi:336,avesq:128,avg:12,avi:206,avoid:[1,3,6,12,35,39,61,129,178,179,199,206,215,220,222,223,236,247,249,256,299,301,309,313,318,320,350,357,392,400,419,440,444,450,460,479,480,484,500,506,507,519],avx2:15,avx512:15,avx:15,awai:[3,6,63,127,203,206,219,228,233,250,253,271,299,324,332,347,353,390,410,432,436,503],awar:[394,418,495],awpmd:[2,7],axel:[7,9,13,17,520],axi:[3,6,41,74,75,100,130,142,156,177,178,180,202,206,219,225,247,250,253,269,304,328,332,348,354,367,373,381,383,498,501,508],axial:277,azimuth:[206,250],azur:207,b_k:468,ba2:177,babadi:461,back:[1,6,7,11,12,13,14,16,129,159,160,161,165,166,167,168,170,178,182,203,204,207,208,211,212,230,236,245,252,253,255,256,272,278,279,280,292,293,295,297,307,316,318,339,340,341,345,346,355,356,358,377,378,379,389,424,496,498,499,500,501,502,505,511,512,525,526],backbon:[228,322,371],backcolor:[207,529],backend:16,background:[9,95,96,123,153,207,225,232,255,336,344,348,351,389,408,441,442,444],backtrack:[385,387],backward:[12,208,389,512,525],baczewski:248,bad:[3,12,61,63,253,389,498,503,515],badli:[3,229,272],bal:343,balanc:[1,2,3,4,6,7,12,14,15,17],balasubramanian:296,ball:[152,441,442],ballenegg:378,bammann:216,band:[4,6,7,9,152,210,271,386,389,400,447,467],bandwidth:[1,10,17,40],bandwith:206,bar:[95,206,524],barashev:417,bare:[236,254,256],barost:[236,519],barostat:[0,1,3],barostt:6,barr:409,barrat:313,barrett:70,barrier:[3,4,6,271,373,389,409,422,512],bartel:300,bartok2010:468,bartok2013:468,bartok:[9,152,458,468],bartok_2010:458,bartok_phd:458,bary:524,barycent:331,basal:2,base:[3,4,6,8,9,11,12,13,14,15,19,65,66,75,82,95,99,113,122,130,158,160,177,178,180,203,205,206,207,210,216,225,226,227,231,232,233,237,247,252,255,259,261,286,294,300,301,304,307,309,311,318,319,320,324,325,336,343,379,394,396,398,400,414,419,423,426,427,428,430,432,441,445,446,454,456,457,467,478,482,483,486,493,495,498,499,500,502,505,508,509,512,513,516,520,524,525,526,530],bash:407,bashford:[6,19,184,405,510],basi:[3,6,12,40,152,158,178,215,255,257,300,336,353,381,430,508,525],basic:[6,7,8,12,16,41,124,153,206,207,216,225,231,272,273,299,357,395,397,447,492,500,519],basin:[94,389,493,512],bask:[417,444,457],batch:517,bath:[9,308,313],batom1:[73,126,128,203,207],batom2:[73,126,128,203,207],bayli:[6,184,510],bb13:185,bcc:[2,3,4,7,66,74,77,210],bcolor:[3,206,207],bdiam:[3,206,207],be2:177,bead:[5,7,10,13,40,45,46,170,214,228,301,476],beam:233,bear:[6,248],becau:13,becaus:[0,1,3,6,8,12,15,16,17,40,41,42,61,66,75,76,81,100,117,127,140,152,158,163,168,178,179,180,203,204,205,206,207,208,213,219,225,226,227,228,229,231,232,238,246,247,248,249,254,255,256,257,267,269,272,273,286,288,295,304,308,309,313,318,332,338,343,344,347,348,351,355,356,357,358,359,365,378,385,387,389,390,393,394,405,407,410,412,414,419,420,423,424,425,426,427,431,440,441,442,444,449,451,452,461,476,477,479,484,485,495,496,498,500,501,502,505,507,508,510,512,513,519,520,524,525,526,528,530],beck:[2,3],becker:[395,417],beckman:252,becom:[1,2,3,6,7,8,15,17,39,41,54,59,61,75,178,180,203,204,206,207,225,226,227,228,232,239,247,249,258,271,272,315,316,339,340,353,354,356,357,358,378,379,385,389,396,408,410,417,419,423,432,449,457,461,478,486,489,498,499,501,508,520,525],been:[1,2,3,6,7,8,9,11,12,13,19,20,22,23,24,25,26,27,28,29,30,31,34,37,39,40,41,42,43,45,46,47,48,49,51,53,54,56,59,61,62,65,68,73,75,95,123,124,125,126,128,129,131,155,156,157,158,159,160,161,165,166,167,168,170,171,179,180,181,182,184,185,187,188,189,190,192,193,195,196,199,202,203,204,206,207,208,213,215,217,218,219,220,222,223,224,225,228,229,230,231,232,233,240,246,247,250,252,253,255,256,258,259,260,261,262,267,269,270,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,303,304,305,308,310,311,312,315,316,318,321,322,331,337,339,340,341,348,349,350,353,354,355,356,358,359,362,364,365,367,368,371,373,377,378,379,387,390,394,395,396,398,401,402,403,404,405,406,408,409,410,413,414,416,417,418,419,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,442,445,446,447,450,453,454,456,459,460,461,462,469,476,478,479,481,482,483,484,485,486,488,489,490,491,493,495,496,498,499,500,501,502,504,508,512,515,516,525,526,528,529],befor:[1,2,3,6,8,12,16,21,28,39,40,41,44,57,61,69,75,78,79,86,87,97,98,103,113,114,115,116,125,158,161,166,167,173,178,179,181,182,186,201,202,207,211,212,213,214,215,217,219,222,223,224,225,229,235,236,246,247,252,254,255,256,258,261,269,272,278,279,280,292,293,297,300,307,308,309,312,313,318,320,321,337,339,340,341,347,353,354,355,359,363,384,385,387,389,394,420,421,424,440,444,447,452,477,480,487,493,495,496,499,500,501,502,503,505,506,508,512,515,516,519,520,525,526,528,529,530],began:[5,12],begin:[3,8,12,37,39,56,75,128,131,179,199,202,203,207,211,212,216,218,219,220,222,223,225,231,232,242,243,267,286,303,316,319,320,333,336,338,341,350,355,358,359,375,377,378,379,380,382,386,388,389,390,393,417,421,447,449,451,452,457,464,466,467,469,476,479,480,490,493,498,505,512,514,516,524,525,528],begun:319,behalf:3,behav:[3,26,187,386,387],behavior:[3,182,199,203,204,206,208,228,229,231,233,247,248,249,252,255,256,257,272,304,308,313,336,339,340,348,386,400,419,444,490,492,500,504,524,525,528],behaviour:[6,255],behind:[8,254,270,308,336,378],beig:207,belak:7,believ:11,bellott:[6,19,184,405,510],bellow:367,belong:[2,3,40,75,129,132,181,217,219,247,261,318,359,388,463,498],below:[1,2,3,4,5,6,8,9,10,11,12,14,15,16,21,37,39,40,41,42,44,54,56,61,62,65,68,71,73,75,81,84,99,102,123,124,127,128,130,152,153,158,164,166,172,176,177,178,181,182,184,186,198,199,202,203,204,206,207,210,211,213,214,216,218,219,220,221,222,223,224,225,227,228,229,231,232,233,238,242,243,245,247,250,251,253,255,256,261,269,270,272,277,278,279,280,292,293,297,299,304,307,308,309,316,317,318,319,321,322,329,332,336,337,338,339,340,341,344,345,346,348,351,353,354,359,361,363,376,378,381,383,384,385,387,388,389,391,394,395,396,397,400,401,402,405,406,407,408,410,413,417,419,420,421,423,424,425,426,427,430,432,433,434,435,436,437,438,439,440,441,442,443,444,448,449,451,452,456,459,460,461,462,468,469,476,477,479,480,485,486,488,489,490,491,492,493,496,498,499,500,501,503,505,506,508,510,511,512,514,515,516,518,519,520,525,526,530],bench:[1,6,9,10,11,12],benchmark:[1,7,10,11,12,13,14,15,16,17,41,225,378,511],beneath:233,benedict:447,benefici:[63,391],benefit:[1,15,248,484,507],bennet:95,beowulf:7,berardi:[423,461],beraun:348,berendsen:[2,3,6,7,159,160,161,165,166,167,168,170,210,217,247,249,272,277],berensen:318,berger:9,berkelei:176,berkowitz:378,berlin:[7,9,324],bern:[3,301,309,310,409,423,467,477,507],bernendsen:6,beryllium:419,besid:[8,321,501],best:[1,6,8,14,15,16,17,18,231,272,295,296,317,318,394,400,410,432,436,449,479,480,499,507,512],beta:[6,308,395,398,417,418,420,444,481,482,483,516,525],beta_:400,beta_k:468,beta_pi:400,beta_sigma:400,beta_t:482,better:[3,6,7,8,12,15,26,152,187,212,225,247,258,272,286,290,309,316,318,336,379,389,394,481,520],betwe:399,between:[1,2,3,4,5],beutler:440,bewteen:[119,220,336,344,351,427,430,495],beyon:507,beyond:[3,5,6,12,16,63,75,95,176,203,207,222,247,272,378,391,422,438,449,512,516,525],bflag1:[42,206],bflag2:[42,206],bgq:[16,447],bi3:177,bi5:177,bia:[3,6,8,123,153,156,157,158,159,160,161,165,166,167,168,170,171,210,219,230,232,247,255,256,272,278,279,280,292,293,294,295,297,313,339,340,341,343,526],bias:[6,9,230,526],biaxial:156,biersack:[444,477,483,490],big:[3,4,12,203,308,313,336,390,408,520],bigbig:[3,12],bigger:3,bigint:[3,245],bilay:[4,10,332],bilayer1:332,bilayer2:332,bill:7,billion:[3,7,10,12,39,247,506],bin2d:75,bin3d:75,bin:[3,6,11,12,39,65,69,75,79,86,98,103,114,116,125,127,158,166,173,175,203,207,219,222,300,308,313,333,336,344,351,390,391,394,416,455,499,529],binari:[3,6,7,9,12,13,15,32,36,50,55,191,198,203,204,205,206,207,208,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,236,237,238,239,240,244,245,246,247,248,249,250,251,252,253,255,256,257,258,259,260,261,262,263,264,265,266,268,269,270,271,272,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,320,321,322,324,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,369,372,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,413,414,416,417,418,419,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,450,451,452,454,456,457,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,485,486,488,489,490,491,499,500,505,528,530],binary2txt:0,binchunk:219,bind:[9,16,17,205,400,467],binsiz:[15,39,207,390,394],binstyl:166,bio:[40,390],biolog:[6,7],biologi:190,biomolecul:[303,318,378,379,405],biomolecular:507,biophi:[288,294,383],biophys:252,bios:15,biosym:13,bird:416,bisect:[41,225,485],bisector:[6,410,432,436],bispectrum:[65,152,468],bisqu:207,bit:[3,11,12,16,39,245,256,449,479,480,484,506,519,520],bitmap:[3,479,480,487],bitrat:[206,207],bitzek:386,bkgd_dyn:444,bks:[308,313],black:207,blais:[9,13],blanchedalmond:207,blank:[2,3,12,37,56,118,199,206,242,243,303,318,319,388,389,400,418,421,444,451,452,453,468,478,479,480,481,482,483,486,495,496,498,525],blas:12,blast:348,blend:444,block:[2,3,6,99,152,178,180,181,304,357,381,383,394,400,419,457,468,501,512,519,520],blocksiz:394,blow:[3,286,353,357,469],blown:3,blue:[2,206,207,228],bluegen:[203,378,447],blueviolet:207,bni:75,board:[379,413],bodi:[0,2,3,4,5],body_nparticl:8,bodyflag:498,bodyforc:258,bodyforcei:258,bodyforcex:258,bodyforcez:258,bodystyl:[261,318],boff:[388,498],bogaert:343,bogu:[3,161,229],bogusz:96,bohr:[417,419,447,483,524],boltzmann:[6,7,9,95,99,123,155,158,159,160,161,164,165,166,167,168,170,219,228,243,255,258,259,260,261,262,277,352,414,513,524],bond:[0,1,2,3,6,7],bond_coeff:[2,3,6,43],bond_graph_cutoff:460,bond_harmon:[8,48,49],bond_harmonic_shift:49,bond_info:460,bond_interact:216,bond_styl:0,bond_typ:182,bond_writ:2,bondangl:[3,20,32,498],bondbond13:[3,185,498],bondbond:[3,20,32,498],bondchk:460,bondcoeff:[3,58],bonds:207,bondtyp:[226,227,388],bonet:[323,415],bonu:[3,528],book:[489,520],bookkeep:449,bookmark:0,boost:[1,3,12,66,390],bop:[2,3,9,315,384],border:[3,7,15,63,348,526],boresch:95,boreschkarplu:95,born:[2,3,6,7,9,95,172,211,212],boron:419,borrow:324,bose:313,botero:[7,9,13,419],both:[1,3,4,6,7,8,9,11,12,14,15,16,26,36,39,40,54,55,59,61,63,64,65,71,73,75,91,95,96,119,124,126,127,140,154,156,157,158,163,166,168,171,176,178,180,181,182,187,198,199,203,206,209,210,211,212,217,219,220,222,223,226,227,228,229,230,232,237,239,247,249,251,253,255,256,258,259,268,269,272,273,278,279,280,286,292,293,297,303,304,307,308,315,318,322,324,332,336,340,344,345,346,348,351,353,354,356,357,358,361,362,372,379,384,387,388,389,390,392,394,396,400,401,402,403,404,405,406,408,413,414,417,418,419,423,424,426,427,428,432,434,436,437,438,440,441,442,447,448,449,450,454,459,461,462,478,481,482,483,486,493,495,496,498,499,500,501,505,510,515,516,519,525,528,529,530],bottleneck:[1,3,496,517],bottom:[8,9,161,176,207,232,246,258,295,344,351,381,510],bottomwal:224,bounc:[3,336],bound:[3,6,16,25,26,41,42,59,61,75,167,180,187,202,203,204,207,222,225,232,233,237,247,256,272,304,336,353,354,355,356,357,358,378,387,419,498,501,512,519,525,526],boundar:3,boundari:[2,3,5,6],boundary_dynam:216,boundary_faceset:216,boundary_integr:216,bounds:[6,41,203,225],bount:11,bourgogn:9,box:[0,1,2,3,4],boxcolor:[206,207],boxxlo:11,bpclermont:[9,13],bptype:476,br1:177,bracket:[2,3,6,41,65,75,128,131,203,210,218,219,220,222,223,225,231,350,516,525],bragg:[130,177],branch:[11,520],branicio2009:486,branicio:[77,486],breakabl:[7,44,55],breakag:[82,226],breakdown:[1,12,14,96,118,396,459,460,493,512],brennan:[9,88,89,241,323,415,451,452,476],brenner:[396,477],brick:[3,41,63,64,166,180,225,498,500,502,525],bridg:383,brief:[1,5,6,7,8,12,254,272,396,400,460,512],briefli:[6,10,301,409,467,520],brilliantov:424,bristol:[5,7],brittl:456,broader:496,broadli:8,broadwel:15,broken:[2,54,68,73,74,82,113,118,126,182,226,272,400,500,510,517,528],brook:6,brought:202,brown:[7,9,13,14,15,130,153,207],brownian:[2,3,6,7,9,115,255,257,288,318,352],brownw:7,brows:0,browser:[4,206],bryantsev:426,bsd:12,bstyle:[40,42],btype:[57,73,126,179,203,410,432,436,440,476],buc:403,buck:[2,3,6,9,15,95,211,212,349,379,401],buckingham:[7,9,211,212,309,379,401,403,404,412,443,477],buckplusattr:467,buffer:[3,8,204,206,207,515],bufi:206,bug:0,bui:206,build:[0,1,2,3,6,7,8,9,10],builder:[7,13],built:[1,2,3,4,6,8,9,11,12,13,14,15,16,19,20,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,40,43,45,46,47,48,49,50,51,53,54,55,56,66,70,82,85,88,89,91,94,95,106,107,108,109,110,111,115,122,123,129,130,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,154,155,156,157,162,164,165,169,170,172,176,177,184,185,187,188,189,190,191,192,193,195,196,197,198,199,203,204,205,208,210,213,214,215,217,221,224,226,227,228,230,232,233,238,239,240,241,242,243,244,246,247,248,249,250,252,254,255,257,258,259,260,261,262,264,265,266,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,287,288,290,291,292,293,294,295,296,297,299,300,301,303,304,307,308,309,310,311,312,313,314,315,318,319,321,322,323,324,325,326,327,328,329,331,336,342,343,344,345,346,348,349,351,354,355,356,360,361,362,364,365,366,367,368,369,371,372,373,379,389,390,391,394,395,396,398,399,400,401,402,403,404,405,406,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,450,451,452,453,454,455,456,457,458,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,488,489,490,493,496,499,501,507,511,512,513],bulatov:[445,446],bulk:[4,6,74,258,299,305,411,444,447,449,456,463,465,467,502],bullet:7,bump:255,bunch:8,bundl:[9,206,208,520],burlywood:207,bussi1:340,bussi2:340,bussi:[249,340],button:520,buyl:[9,205],bybe:9,bypass:6,c11:[220,444],c12:220,c13:220,c1n:220,c21:220,c22:220,c23:220,c2n:220,c31:220,c32:220,c33:220,c34:220,c3n:220,c41:220,c42:220,c43:220,c44:220,c_0:[348,396,474,475],c_1:[68,71,73,84,102,119,128,129,130,177,203,207,248,307,320,359],c_2:[68,73,84,102,119,128,130,174,176,177,203,320,350,359],c_3:[128,320],c_6:176,c_cluster:6,c_cstherm:6,c_dist:128,c_doubl:11,c_e:348,c_flux:99,c_foo:525,c_forc:128,c_gauss:422,c_hb:426,c_i:243,c_id:[6,65,75,95,128,131,203,204,218,219,220,221,222,223,231,320,338,350,516,525],c_ij:6,c_ijkl:6,c_index:128,c_k:248,c_ke:344,c_msdmol:131,c_my_stress:218,c_myang:219,c_mycentro:219,c_mychunk1:125,c_mychunk2:125,c_mychunk:[6,69,79,86,98,103,114,116,158,173,175],c_mycom:222,c_mycomput:219,c_myd:204,c_myf:[203,529],c_mypress:220,c_myrdf:[127,223],c_mytemp:[8,220,221,222,223,350,516,525],c_n_k:248,c_p:153,c_pe:121,c_peratom:[121,153],c_pi:400,c_press:128,c_prop:6,c_radiu:176,c_reax:[459,460],c_saed:320,c_sigma:400,c_size:6,c_stress:203,c_tdrude:[236,256,519],c_thermo_press:[8,220,221,222,223],c_thermo_temp:[223,231],c_xrd:222,ca2:177,cach:[15,16,39,449,511],cacul:322,cadetblu:207,cai:519,calcal:9,calcforc:258,calclat:99,calcluat:[115,121,123,153,410],calcualt:[99,219],calcul:[0,1,3,4],caldwel:[6,184,510],calhoun:301,call:[1,3,6,7,8,11],callabl:[3,11],callback:[3,8,11,154,210,245,496],caller:3,calori:524,caltech:[6,7,9,13,419],calucl:6,calul:[11,12,74,158,379],cambridg:[9,458],campana:300,can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54,55,56,57,58,59,60,61,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,237,238,239,240,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,375,376,377,378,379,381,382,384,385,387,388,389,390,391,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,505,506,507,508,509,510,511,512,513,514,515,516,517,519,520,524,525,526,527,528,529,530],cancel:[210,318,526],candid:[182,217,247],cannot:[1,2,3,6,9,11,12,13,14,15,16,38,39,40,41,54,58,59,60,61,71,75,90,92,96,128,131,154,156,158,179,181,182,200,203,204,205,206,207,218,219,220,222,223,225,228,229,232,233,247,248,249,255,256,257,261,269,272,274,276,278,280,282,283,284,290,292,297,304,305,308,313,315,318,320,321,325,336,344,348,350,351,353,354,357,358,359,361,374,378,381,387,389,392,393,394,403,404,406,417,423,425,432,436,438,440,449,454,459,461,462,463,465,476,477,479,480,493,495,496,498,499,501,502,504,507,508,510,512,515,524,525],canon:[9,210,217,247,249,272,273,292,293,294,295,296,297,301,340,343,346,447,456],cao1:301,cao2:301,cao:301,capabl:[5,7,9,11,15,16,17,355,361,379,394,396,406],capac:[9,40,111,164,241,313,348,471,498,508],capit:[235,498],capolungo:[130,177,320],captur:[6,349,396,404,419,424,436,444,519],carbid:410,carbon:[7,206,371,396,409,429,444],card:[12,15,21,44,81,95,127,186,211,212,318,363,384,407,426,492,500,505,528,530],care:[3,6,61,75,178,181,197,202,219,226,227,233,249,254,258,272,304,318,343,399,496,498,501,502,507,508],carefulli:[11,12,54,315,359,427,429,503],carlo:[4,6,7,9,210,217,228,247,318,343,416,477],caro:[217,417],carpent:[7,13],carri:[15,265,307,348,424,460],carrillo:15,cart:[3,495],carter:[9,16],cartesian:[3,6,64,395,495],carv:181,cascad:[237,348],cash:7,cast:[249,525],cat:[14,15,206],catastroph:309,cate:258,categori:0,cation:[420,467],cauchi:[145,150],caus:[1,2,3,6,8,12,15,16,178,180,181,182,203,207,215,229,237,247,272,286,299,304,316,318,319,322,353,355,356,357,358,361,377,379,387,389,393,426,432,438,441,442,449,492,496,497,498,499,503,505,506,525,530],caution:[1,379],cautiou:[226,227],cautious:396,caveat:[396,507],cbecker:[395,417],cc1:[6,69,79,86,98,103,114,116,125,158,173,175,219],ccc:[418,478,481,483,486],ccflag:15,ccflags:[9,15,16,17,18,203],ccm6:417,ccsi:[418,478,481,483,486],ccu:400,cd2:177,cdeam:417,cdennist:9,cdll:11,cdof:[6,158,219],cdte:400,cdte_bop:400,cdtese:400,cdzn:400,cdznte:400,ce3:177,ce4:177,ceas:386,ceil:525,cell:[3,6,61,96,127,130,176,177,178,203,215,229,230,247,252,270,272,273,277,300,308,311,323,348,378,379,381,416,419,447,516],cella:[6,516],cellalpha:[6,516],cellb:[6,516],cellbeta:[6,516],cellc:[6,516],cellgamma:[6,516],center:[3,6,24,42,65,69,75,78,79,86,94,97,98,108,113,114,115,125,127,129,130,158,159,160,163,166,170,173,175,178,206,207,210,211,212,214,219,222,229,232,233,234,236,247,248,253,255,256,261,268,272,278,279,280,292,293,295,297,304,309,315,316,318,320,324,332,333,334,336,338,339,340,341,343,344,346,353,357,362,381,383,388,399,418,419,423,424,430,441,442,444,445,446,459,460,478,481,482,483,485,486,501,508,519,525],centimet:524,centr:239,central:[3,63,74,80,81,100,117,127,134,152,176,261,299,322,334,366,388,447,453,459,460,486,498],centro:[2,3,5,6,7,8,65,66,70],centroid:[3,301,485,508],centrosymmetri:74,cerda:378,ceriotti2:249,ceriotti:[13,249,254],certain:[1,2,3,6,8,12,16,39,75,124,128,131,182,203,204,206,218,219,220,222,223,228,231,245,246,318,321,337,350,361,369,377,390,427,449,460,484,500,504,519,525],certainli:253,cerutti:379,cfg:[3,6,7,9,13,203,205,206,207,208],cfile:460,cfl:[140,325],cfor:324,cg_type:462,ch2:322,ch2lmp:[0,6],ch3:322,ch5md:205,chain3:390,chain:[0,3,4,6,9,10],challeng:[6,324],chalopin:313,champaign:[252,378,379,441],chan:447,chandler:[395,417],chandrasekhar:[6,432],chang:[1,2,3,6,8,9,11,12,14,15,16,39,40,41,46,55,59,61,64,75,85,95,113,127,138,140,160,161,162,178,179,180,182,199,202,203,204,205,206,207,208,210,211,212,213,214,216,217,224,225,226,227,228,229,230,231,232,233,237,238,244,246,247,249,251,252,253,255,257,258,259,261,268,269,270,272,273,274,275,276,277,278,279,280,286,288,290,292,293,295,296,297,299,300,304,305,307,308,309,312,315,316,317,318,319,321,322,324,336,339,340,341,342,344,345,346,347,348,349,351,354,357,359,379,385,387,389,392,394,414,419,424,427,441,442,444,447,449,459,460,467,476,477,493,494,495,496,498,499,500,501,502,503,504,506,507,508,509,510,513,515,516,520,521,523,524,525,526,528],change_box:[2,3,6,59],changeabl:203,channel:[4,213],chapter:[301,379],charact:[2,3,6,12,37,41,56,65,199,203,204,206,207,208,210,225,242,243,307,315,319,361,388,393,419,421,431,451,452,457,459,460,467,479,480,495,496,500,505,506,525,528,529,530],character:[6,70,74,117,127,152,468,493,512],characterist:[256,336,345],charg:[1,3,4,5,6,7,9,11,14,40,86,95,96,124,130,177,178,203,204,208,210,211,212,217,233,238,247,307,309,310,311,315,338,351,378,379,388,401,403,409,410,412,413,417,419,420,427,432,436,440,454,459,460,467,477,483,484,486,487,489,490,498,499,503,508,510,519,524,525],charl:231,charmm2lammp:13,charmm:[0,2,3,5],chartreus:207,cheap:336,cheaper:[237,423,461],check:[3,6,8,9,11,12,14,16,38,39,41,58,75,99,199,200,217,225,226,227,233,244,247,253,254,304,317,322,336,344,346,351,359,361,374,377,387,388,389,390,391,394,416,428,431,449,460,491,493,495,496,498,506,512,515,516,517,525],checkf:199,checkout:520,checkqeq:460,checku:199,chem:[6,13,19,20,24,39,40,43,45,46,95,96,117,123,153,184,185,195,221,230,236,239,248,249,256,258,271,272,273,290,295,296,301,305,308,310,318,323,324,336,339,340,343,344,345,346,353,362,371,373,378,379,386,389,396,401,405,406,409,410,411,413,414,415,419,422,423,425,426,432,436,437,440,444,448,449,451,452,454,467,476,484,507,510,512,519],chemic:[9,40,88,89,130,172,177,203,204,216,217,247,309,314,315,343,379,421,452,459,460,472,480],chemistri:[308,309,311,396,400,419,459,460],chen:348,cheng:409,chenoweth:[459,460],chenoweth_2008:[459,460],chi:[102,167,202,299,309,311,374,420,423,526],chiefli:458,child:8,chip:[7,9,16,17,394,511],chipot:230,chiral:371,chmod:[11,12],cho:444,chocol:[7,207],choic:[3,6,9,12,14,15,17,40,41,54,74,95,153,156,157,171,182,197,199,219,225,228,232,233,249,255,258,270,272,301,305,309,318,343,354,372,379,385,386,389,391,394,427,440,449,455,460,498,507,508,511,512,518,519,524],choos:[1,3,6,7,8,9,12,16,17,28,39,54,95,128,168,169,206,226,227,228,229,231,233,244,255,258,270,272,274,275,276,277,278,279,280,304,305,323,336,340,354,378,379,386,487,493,495,507,513],chose:[481,483],chosen:[2,3,6,12,16,152,178,181,190,199,206,212,217,229,231,233,244,247,248,256,258,270,272,277,301,304,315,336,340,343,344,349,351,352,358,379,380,386,394,415,419,424,431,434,462,481,493,507,512,513,519],chri:176,christian:[7,9,16],christoph:7,chunk:[0,2,3],chunkid:[69,79,86,98,103,114,116,125,158,173,175,219,333],chute:[4,9,10,250],ciccotti:322,cieplak:[6,184,510],cii:220,cij:220,circl:[42,75,331],circular:[3,6,156,201],circumst:17,circumv:[100,117,313],citat:0,cite:[3,7,8,12,255,467],civ:9,cl1:177,clarendon:[28,413],clarifi:[7,481,483],clariti:361,clark:454,class2:[2,3],classic:[0,3,5,6,7,8,9,15,245,301,308,313,348,373,419],classifi:[477,486],claus:496,clean:[6,12,14,16,506],cleanli:[497,516,529],clear:[2,3,6,8,11],clearli:7,clebsch:152,clermont:[9,13],clever:502,click:[2,11,21,36,44,55,178,186,198,206,252,363,372,389,407,477,520],client:[252,254],climb:[271,389,512],clinic:[7,13],clo:[167,202,526],clock:[12,493,512,517],clockwis:[184,354],clone:520,close:[3,6,11,12,13,39,41,70,75,153,181,203,227,228,229,249,256,258,272,288,295,318,322,354,357,377,379,382,385,386,389,394,396,400,410,411,430,444,449,451,452,459,463,465,479,483,502,508,519,520,522],closer:[3,10,41,127,176,202,203,225,229,234,345,389],closest:[227,299,318,351,423,461,476,487],cloud:[467,519],clovertown:17,clsuter:76,clump1:[303,318],clump2:[303,318],clump3:[303,318],clump:318,cluster:[2,3,6,7,12,15,63,65,75],clutter:3,cmap:498,cmatrix:249,cmax:444,cmd:[11,12,301,509],cmdarg:11,cmin:444,cmm:7,cmoput:145,cn1:220,cn2:220,cna:[2,3,7,65,74],cnn:220,cnr:13,cnrs:9,cnt:[427,502],co2:[40,177,319,322,388,421],coars:[7,9,10,28,35,40,54,190,243,303,318,319,336,421,425,452,462,480,507,510],coarser:[379,525],coarsest:152,code:[0,1,3,5],coeff:[3,7,8,12,20,21,32,44,50,184,185,186,191,197,362,363,369,407,427,431,449,464,466,469,498,527],coeffcient:498,coeffici:[0,2,3,4],coefficienct:414,coefficient0:417,coefficient1:417,coeffieci:[6,398,430],coeffincientn:417,coexist:[247,419],cohes:[6,420,444],coincid:[134,203,207,357,405,441,442,493],colberg:205,cold:[6,163,247,251,390,519],coldest:344,coleman8:9,coleman:[9,130,177,320],colin:9,collabor:[7,8,14],collect:[3,6,7,8,9,13,40,42,69,79,86,91,98,103,108,114,116,125,158,166,173,175,178,203,204,207,219,230,261,268,303,313,316,318,359,378,388,390,408,498,505,511,517,530],collid:[237,336,358],colliex:177,collinear:[3,303],collis:[3,258,336,354,358,416,424,490],colllis:336,colloid:[2,3,4,6,7],colombo:39,colon:[208,359,499,517],color1:207,color2:207,color:[3,9,41,203,206,207,225,248,308,313],column:[3,6,9,12,13,42,65,68,69,70,71,73,74,75,79,81,84,86,87,89,98,100,102,103,114,116,117,119,121,124,125,126,127,128,129,131,152,153,158,166,173,175,176,177,199,203,204,207,210,218,219,220,222,223,261,269,270,308,318,337,338,348,358,396,422,426,459,460,499,513,515,516,525],columnar:176,colvar:[0,2,9,12],colvarmodul:12,com:[2,3,6,7,9,13,14,42,65,75],comamnd:232,comand:228,comannd:394,comb3:[2,3],comb:[2,3,4,7,9,210,309],comb_1:310,comb_2:310,combiant:411,combin:[3,6,7,9,11,13,35,40,65,68,73,84,95,102,113,119,126,156,157,171,197,203,206,216,222,239,247,252,261,264,272,288,294,301,307,323,340,349,357,360,362,378,379,381,386,394,408,410,411,415,419,420,421,427,439,440,468,478,481,483,484,486,489,501,506,511,519,525,527],come:[0,2,3],comfort:[12,13],comid:333,comit:520,comm:[0,3,11,12,63,77,205,252,254,255,379,389,394,414,449,456,479,480,500],comm_modifi:[2,3,6,39],comm_modift:63,comm_styl:[2,3,41,63],comm_world:11,command:[0,1],comment:[2,4,7,11,12,37,56,184,199,203,242,243,256,318,319,348,388,389,395,417,418,420,421,431,444,451,452,453,460,467,468,478,479,480,481,482,483,486,495,496,498,519,520,525],commerci:7,commit:[9,520],commmand:[3,6,12,61,118,296,430,492,493,495,512,529],common:[0,1],commonli:[3,6,9,12,16,24,59,61,115,117,180,203,206,208,373,425,434,468,481,483,498,501,510],commun:[1,3,6,7,8,9,10,11,12,14,15,17,40,41,60,63,64,75,176,181,182,206,207,225,226,227,229,230,232,252,254,258,260,261,262,272,300,307,309,310,311,318,323,336,348,359,376,378,390,391,392,394,415,416,455,491,495,496,507,508,525,528,530],communc:378,comp:[7,205,254,255,288,294,322,379,389,419,449,456,461,475,479,480,482],compact:[65,210,407,477],compani:[5,7],compar:[1,3,4,6,8,12,15,16,39,94,121,130,161,177,186,198,207,236,309,359,361,378,379,387,389,444,467,493,512,513,519,524],comparison:0,compart:383,compass:[7,9,20,21,36,43,44,55,185,186,198,362,363,372,406,477],compat:[3,5,7,8,9,11,12,13,16,17,41,75,128,131,189,203,208,212,218,219,220,222,223,225,231,239,300,312,340,343,350,353,356,378,394,428,447,449,479,495,496,525],compens:[6,226,227,316,390,419],compet:347,competit:379,compil:[3,7,8,9,12,13,14,15,16,17,18,176,203,205,206,207,208,252,347,379,394,447,498,499,503,519,525],compl:16,complain:[11,12,16],complement:444,complementari:[7,410,432],complet:[3,6,9,11,12,14,41,61,75,207,225,230,261,301,304,307,336,347,349,360,361,377,389,394,420,464,466,485,493,498,503,506,510,512,515,519,525],complex:[4,6,8,11,12,13,24,40,42,64,100,117,152,154,166,178,179,258,288,331,357,376,389,419,447,479,480,496,498,501,525],compli:[343,347],complic:[6,7,9,12,13,129,217,247,496],complier:12,compon:[3,6,8,12,63,65,69,70,74,77,86,87,96,97,98,99,100,103,104,107,112,114,115,116,117,118,119,120,121,123,124,128,129,139,142,143,144,145,148,149,150,152,153,155,156,157,158,159,160,161,162,163,164,165,166,167,168,170,171,173,174,175,202,203,204,206,207,213,214,218,219,220,221,222,223,224,228,229,231,232,233,238,239,245,250,254,255,258,261,263,264,268,269,271,272,273,277,278,279,280,292,293,295,297,298,300,301,302,305,316,318,321,322,324,328,329,332,336,339,340,341,343,350,351,356,357,358,378,381,386,387,388,389,394,414,419,424,441,442,464,466,467,468,498,499,508,516,525,526],componenet:6,componennt:129,composit:[6,217,258,417],compound:[409,419,420,486],compres:[75,125,219],compress:[3,6],compris:[40,357,421,461,485],compton:[130,177],comptu:3,compuat:379,comput:[0,1],computation:[3,6,226,227,348,400],computational:519,compute_arrai:8,compute_inn:8,compute_ke_atom:8,compute_loc:8,compute_modifi:[2,3,65],compute_peratom:8,compute_sa:[130,320],compute_scalar:8,compute_temp:8,compute_vector:8,compute_xrd:177,concaten:[2,3,529],concav:357,concentr:[75,243,319,417,421,452,480],concept:[6,158,168,219,507],conceptu:[3,6,75,166,229,232,389,410,427,444,503],concern:[6,77,95,205,248],concetr:75,concis:[11,347],conclud:12,concret:8,concurr:[15,379,525],conden:[348,481,483],condens:[6,160,348,396,412,417,432,486],condit:[2,3,5,6],conducit:6,conduct:[0,2,3,4],cone:501,confer:[15,447],confid:[3,512],config:[12,203,495],configfil:230,configur:[1,2,6,12,14,15,16,37,61,134,180,199,202,203,206,210,229,230,232,233,237,247,254,255,286,301,309,347,376,387,389,396,400,418,444,447,478,481,483,486,493,498,500,501,512,516,520],confin:[498,512],confirm:517,conflict:[3,12,40,204,449,496,520],conform:[3,6,13,61,228,229,271,317,324,347,371,389,419,510],confus:[3,486],conjuct:[9,414],conjug:[7,8,255,386,419,459,460],conjunct:[6,7,75,94,95,125,161,166,172,178,182,207,211,212,255,258,262,286,304,305,309,310,311,313,318,323,336,344,351,356,378,379,389,401,403,407,410,414,419,426,432,449,454,462,484,498,501,505,519,530],connect:[3,6,9,95,163,181,228,252,303,318,322,332,383,389,411,424,459,460,476,483,495,496,498,502,519],conner:396,connor:396,conput:3,consecut:[3,11,12,39,75,178,207,211,212,233,252,253,410,432,436,493,499,501],consequ:[1,6,217,348,431,512],conserv:[3,9,28,210,217,228,236,237,248,251,255,257,258,262,268,270,272,286,288,290,318,319,322,323,339,340,344,351,352,356,389,413,414,415,424,438,467,507,512],consid:[6,74,75,82,95,126,129,160,163,164,181,203,204,207,211,212,218,220,225,227,228,233,259,273,300,318,343,344,347,348,351,379,407,419,427,460,461,467,476,493,494,496,499,500,501,503,506,508,516,519,525],consider:[6,8,255,256,339,340,341,394,460,507],consist:[3,6,8,9,11,12,40,42,68,73,84,102,114,119,122,123,126,129,158,161,163,178,190,202,208,213,214,219,231,232,233,236,238,245,248,255,256,257,269,272,274,275,276,277,278,279,280,281,282,284,285,286,287,290,291,292,293,295,296,297,305,308,313,315,316,317,318,319,339,340,341,342,352,378,379,381,383,388,389,394,396,400,402,408,410,419,423,427,430,441,442,444,447,449,451,452,461,464,466,467,479,480,487,496,498,499,500,501,502,503,510,519,525],consistent_fe_initi:216,consit:318,constant:[0,3,4],constantli:239,constitu:[3,6,261,318,353,357,408,461],constitut:[464,466],constrain:[3,6,8,9,155,156,157,158,159,161,164,165,166,167,168,170,171,210,219,233,239,247,248,253,261,264,266,288,294,303,304,316,318,322,334,344,351,387,388,419,503,510,519],constraint:[3,5],construct:[6,8,12,37,54,56,63,66,70,74,76,77,81,100,117,130,152,177,229,272,300,317,319,357,390,394,413,447,449,476,478,479,480,501,502,517,525],constructor:[8,11],consult:[15,460],consum:[1,313,455,525],consumpt:376,contact:[0,2,3,4,5,8,9,12,13,40,42,65],contact_stiff:[463,465],contain:[0,1,2,3,4,6,8,9,11,12,13,16,17,18,37,40,41,56,65,95,99,127,130,152,154,158,166,176,177,178,180,184,186,198,199,203,204,206,207,208,210,211,212,216,218,219,220,222,223,225,230,231,233,238,242,243,249,253,254,255,258,270,286,299,300,303,304,306,307,308,311,315,318,319,320,325,336,343,347,348,357,358,361,377,379,388,389,392,393,395,396,397,400,409,410,413,417,418,419,421,427,428,444,447,451,452,453,457,458,459,460,468,478,479,480,481,482,483,484,486,493,494,495,496,498,499,500,501,503,505,507,510,512,513,515,516,519,520,525,528,530],content:[4,8,9,12,17,460,514,516],context:[3,6,8,12,15,16,127,128,207,226,227,233,303,315,352,386,489,498,505,514,524,525,526],contibut:74,contigu:495,contin:15,continu:[0,2,3,5,6,9,12,13,41,75,87,113,114,174,207,210,211,212,217,219,220,221,222,223,225,228,229,230,231,232,233,239,247,248,249,251,252,253,255,256,257,263,269,270,272,274,275,276,277,278,279,280,292,293,295,296,297,302,304,307,308,318,320,324,335,336,338,345,346,348,354,357,361,377,393,394,400,414,416,434,437,459,460,461,464,466,482,493,496,498,500,501,506,512,513,515,516,525,528],continuum:[6,7,9,216,348,464,466],contour_integr:216,contract:[61,229,232,272,305,318],contradictori:3,contrain:322,contraint:286,contrari:[249,256],contrast:[1,6,42,55,66,160,163,204,232,359,464,466,489,529],contrib:348,contribut:[3,4,5,6,7,8,9,12,13,16,65,67,69,71,72,74,75,78,79,81,83,85,86,92,95,96,97,98,99,101,103,112,114,116,118,119,120,121,123,125,128,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,212,217,218,219,220,222,223,229,247,255,258,261,262,267,273,295,296,303,304,312,315,318,320,322,350,378,387,389,397,414,416,417,419,427,441,442,447,449,459,460,467,510,516,519,520],contributor:12,control:[2,3,5,6,7,8,9,11,13,15,26,28,41,95,99,134,152,187,203,204,206,210,216,217,225,229,230],control_typ:216,controlfil:460,convect:99,conveni:[6,12,28,203,208,223,320,381,468,484,517,520,525],convent:[3,8,28,189,196,198,204,207,317,332,360,417,419,525],converg:[3,6,41,96,203,204,206,208,213,225,228,229,238,245,277,288,294,308,310,313,317,322,385,386,387,389,409,410,432,467,493,505,512,517],convers:[3,8,152,206,207,217,220,305,378,410,411,412,419,432,436,440,454,496,512,524],convert:[2,3,4,5,6,7,8,12,13,19,20,23,27,31,34,35,61,65,75,99,178,185,203,206,207,220,223,270,304,307,359,362,364,368,371,381,389,395,417,447,481,483,490,496,498,499,500,505,515,519,524,525,528,530],convex:[42,357],convinc:[7,12],cook:9,cooki:7,cool:[7,168,239,251,316],cooordin:[203,204],cooper:[5,7],coord123:125,coord1:[3,125,219],coord2:[3,125,219],coord3:[3,125,219],coord:[2,3,6,7,11,61,65,75,76,80],coordb:467,coordbb:467,coordiat:387,coordin:[1,3,4,6,7,8,11,13,14,16,40,41,42,61,63,64,65,69,71,75,78,79,81,86,87,95,97,98,103,113,114,116,124,125,127,129,146,152,161,167,173,175,176,178,182,202,203,204,205,206,207,208,210,213,218,219,222,225,226,227,228,229,230,232,233,236,238,239,240,245,247,250,251,252,253,254,255,256,269,271,272,274,275,276,278,279,280,295,298,299,300,303,304,305,315,316,318,321,322,324,329,332,333,334,335,336,338,346,347,348,355,356,358,359,381,387,388,389,394,395,396,399,418,467,493,498,499,500,501,503,506,508,512,519,525,526],coordn:[125,219],coords:467,copi:[0,3,4,8,9,11,12,14,16,40,131,206,348,389,407,459,496,520],copper:490,coprocessor:[1,7,9,15,16,394,511],coproprocessor:16,copy_arrai:8,copyright:[7,8,303],coral:207,core:[0,1,3,4],core_shel:160,cores:519,coreshel:[4,6,9],coreshell:[4,6],cornel:[6,184,510],corner123i:124,corner123x:124,corner123z:124,corner1i:124,corner1x:124,corner1z:124,corner2i:124,corner2x:124,corner2z:124,corner3i:124,corner3x:124,corner3z:124,corner:[3,6,40,124,206,357,358,381,485,498,520],cornflowerblu:207,cornsilk:207,corp:9,corpor:15,corr:409,correct:[3,6,9,11,12,16,61,86,95,96,112,113,118,121,127,160,165,172,184,204,206,232,239,247,249,255,272,273,295,303,305,308,347,353,357,378,389,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,411,412,413,414,416,417,418,419,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,485,486,488,489,490,491,498,513,516,519,520],correction_max_iter:216,correctli:[3,8,11,16,75,87,112,113,114,155,156,157,159,161,163,164,165,166,167,170,171,174,203,207,213,233,238,245,256,266,272,273,311,318,322,332,335,354,357,389,390,394,412,442,447,495,496,498,508,520,524,526],correl:[2,3,6,99,100,152,174,210,219],correpond:[242,243],correspond:[1,2,4,6,8,9,10,11,12,19,20,21,22,23,24,25,26,27,28,29,30,31,34,37,40,42,43,44,45,46,47,48,49,51,53,54,56,74,75,95,106,107,123,124,125,126,129,130,131,139,142,143,144,145,146,148,149,150,152,155,156,165,172,176,177,184,185,186,187,188,189,190,192,193,195,196,197,199,202,203,204,206,207,211,212,213,219,221,222,224,227,229,231,232,239,240,243,245,246,250,255,258,259,268,269,270,272,274,275,276,277,278,279,280,281,282,286,290,292,293,295,297,299,300,301,305,310,311,318,319,321,322,343,353,354,356,357,358,360,362,363,364,365,367,368,371,373,379,384,386,388,389,395,396,398,401,402,403,404,405,406,407,408,409,410,413,414,417,418,419,420,421,422,423,424,425,426,427,430,432,433,434,435,436,437,438,439,440,441,444,445,447,449,450,452,453,454,456,457,459,460,461,462,467,468,469,478,479,480,481,482,483,484,486,488,489,490,493,495,496,498,499,501,511,512,513,515,516,519,525],correspondingli:[441,442,507],corrupt:3,cosin:[2,6,7,21],cosineshift:26,cosmo:[249,254],cossq:2,cost:[1,6,10,11,12,16,39,41,75,120,130,153,177,206,207,219,225,226,227,244,272,290,310,319,348,378,379,392,410,432,436,447,449,478,495,507],costheta0:[478,481,483,486],costheta:457,costli:[11,15,96,249,390],couett:4,coul:[2,3,6,9,15,35,45,46,76,95,118,127,172,184,211,212,349,379,387],could:[2,3,6,9,11,12,16,32,41,50,61,69,75,79,86,95,98,99,103,114,116,120,123,125,158,168,173,175,191,203,204,206,207,211,212,219,220,225,231,232,245,254,307,308,309,313,316,318,321,336,337,343,347,348,349,353,357,359,361,369,375,377,385,387,390,394,396,397,422,426,427,430,459,460,494,495,496,498,500,502,505,506,513,514,519,525,526],coulomb:[3,5,6,7,8,9,10,12,14,17,76,96,118,119,127,153,179,183,309,311,349,378,379,387,394,401,403,404,405,406,409,410,411,412,413,419,424,425,427,432,436,440,443,449,454,459,460,462,467,477,483,484,486,489,503,510,516,519,524],coulommb:6,cound:3,count:[1,3,6,8,11,12,41,65,71,81,99,125,127,128,166,176,182,184,213,214,217,219,222,224,225,229,233,238,244,247,253,272,286,304,321,322,339,340,357,379,387,388,389,391,394,422,426,449,516,517,525],counter:[3,354,493,504,506,512],counteract:[231,247],counterbal:[239,251],counterbalanc:28,counterclockwis:184,counterpart:[203,493],counterproduct:17,coupl:[0,3,4],couple:[4,6,11,12],courant:325,cours:[3,8,15,138,140,172,203,211,212,248,317,332,347,353,355,356,358,359,379,441,469,495,498,511,519,525,528],courtesi:381,cov:467,coval:[6,9,28,419,444,467,519],covari:249,cover:[6,12,75,199,207,216,258,419,485],coverag:75,cpc:254,cpp:[1,3,6,8,9,11,12,13,95,203,211,212,245,322],cpu:[1,3,9,10,12,14,15,16,17,65,75,207,221,236,256,349,376,379,394,407,477,493,511,512,515,516,517,525],cpuinfo:15,cpuremain:516,cpus:12,cr2:177,cr3:177,crack:[4,390],crada:[5,7],crai:[5,7,13,17,203],crash:[3,12,390,519],craympi:394,creat:[0,1,2,3,4,6,7,8,9,11,12,13,14,16,37,39,41,42,56,60,61,64,65,75,87,99,113,114,119,120,123,126,128,130,146,155,161,162,174,176,178,179,180,181,199,203,204,205,206,207,210,215,216,218,219,220,222,223,225,226],create_atom:[2,3,6,7,8,40,41,61,99],create_bond:[2,3],create_box:[2,3,6,21,40,41,44,59,60,61,64,75,99,176,178,179],create_elementset:216,create_faceset:216,create_group:205,create_nodeset:216,createatom:0,creation:[3,5],crimson:207,critchlei:303,criteria:[3,127,179,206,207,226,227,228,267,387,456,485,500,503,525],criterion:[12,41,133,178,181,217,225,228,247,286,310,325,354,359,387,389,409,419,424,467,503,512,513],criterioni:512,critic:[6,48,49,270,343,348,387],crmax:75,crmin:75,cross:[3,12,15,21,75,97,129,156,176,186,203,204,206,218,227,232,269,271,295,318,328,332,335,344,351,363,381,389,405,414,416,417,425,426,427,432,434,436,457,462,464,466,481,483,490,498,502,508,528],crossov:1,crossterm:498,crozier:[0,7,13],crucial:308,crystal:[3,4,6,13,15,74,77,117,299,300,346,381,390,498,502,516,519],crystallin:[6,113,300,381,482,519],crystallis:343,crystallogr:[130,177],crystallograph:[381,516],crystallographi:[130,177,381],cs1:177,cs_chunk:6,cs_im:[40,498],cs_re:[40,498],csanyi:[152,458,468],cscl:444,csequ:6,csh:[11,12,15,407],cshrc:[11,12],csic:[418,478,481,483,486],csinfo:6,csisi:[418,478,481,483,486],csld:[2,3,210],cst:417,cstherm:6,cstyle:495,csvr:[2,3,6,210],ctcm:[395,417],ctemp_core:236,cterm:324,ctr:9,ctype:11,cu1:177,cu2:177,cu3au:444,cube:[6,176,181,236,357,381,519],cubes:[41,225],cubic:[2,3,37,56,117,199,242,258,299,336,379,381,417],cuda:[1,3,7,9,12,14,16,394,511,525],cuda_arch:[9,14],cuda_get:14,cuda_home:[9,14],cuda_prec:[9,14],cuh:400,cummul:[3,6,223,226,227,228,230,244,249,255,257,336,339,340,341,342,344,351,426,516],cumul:[6,217,219,222,237,247,255,270,272,277,286,318,320,389],curli:2,currenlti:231,current:[0,1,3,5,6,7,8,9,10,11,12,13,14,15,16,17,40,41,42,57,61,63,65,75,77,87,95,113,119,127,128,142,153,158,166,168,174,176,179,182,202,203,204,205,206,207,208,211,212,216,219,223,225,226,227,228,229,230,231,232,233,237,238,239,245,247,249,252,253,255,261,267,269,272,273,278,279,280,286,288,292,293,294,295,297,303,304,309,310,312,315,316,317,318,319,322,323,324,325,326,327,328,329,331,333,334,335,336,339,340,341,347,348,351,352,353,354,355,356,358,359,361,376,377,378,379,382,383,384,386,387,388,389,394,400,407,409,413,417,419,420,424,427,428,431,441,442,444,445,446,449,457,459,460,463,464,465,466,469,481,483,484,487,493,494,495,496,498,499,500,501,502,504,505,506,508,510,512,513,515,516,520,525,526,527,528,529,530],curv:[6,178,247,288,294,300],curvatur:[423,461,490],custom:[0,2,3,6],cut0:496,cut1:507,cut2:507,cut:[1,2,3,6,9,12,14,15,16,17,18,41],cuthi:[299,311],cutinn:[402,441,442],cutlo:[299,311],cutmax:457,cutoff1:[406,413,432,436,440,443,454,462],cutoff2:[401,403,404,406,412,413,432,436,440,443,454,462,484],cutoff:[3,6,8,10,15,17,39,45,46,54,55,63,74,76,77,81,95,100,117,119,126,127,152,176,179,181,182,227,228,234,242,243,299,308,309,311,313,315,318,323,336,349,353,357,359,376,378,379,387,390,391,392,394,395,396,397,398,399,400,401,402,403,404,405,406,408,410,411,412,413,414,415,416,417,418,419,420,421,422,423,425,426,427,428,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,459,460,461,462,467,468,469,470,471,472,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,496,500,503,507,519,525],cutoffa:418,cutoffc:418,cuu3:417,cval:177,cvar:231,cvd:343,cvel:324,cvff:[2,7,15,363],cwiggl:[3,269,353,356,358,525],cyan:[2,206,207],cycl:[3,247,270,272,273,277],cyclic:[3,184,199],cygwin:12,cylind:[3,4,75,206,219,253,294,304,354,357,383,501],cylinder_d:383,cylindr:[6,253,332,354],cypress:394,cyrot:400,cyrstal:300,d3q15:258,d3q19:258,d_double_double:14,d_e:348,d_flag2:307,d_flag:307,d_name:[124,203,307,338,508],d_single_double:14,d_single_single:14,d_sx:307,d_sy:307,d_sz:307,daan:346,dai:12,daili:12,daivi:295,damag:[2,3,9,65],dammak:313,damp:[3,6,210,215,255,256,257,262,272,273,277,294,305,308,309,313,318,339,340,352,354,355,386,387,389,401,403,405,410,413,419,424,432,440,454,462,477,484,512,519],damp_com:256,damp_drud:256,dampen:[318,519],dampflag:[354,424],dan:16,danger:[3,12,247,359,414,516],dangl:181,daniel:9,darden:[379,413],darkblu:207,darkcyan:207,darken:206,darkgoldenrod:207,darkgrai:207,darkgreen:207,darkkhaki:207,darkmagenta:207,darkolivegreen:207,darkorang:207,darkorchid:207,darkr:207,darksalmon:207,darkseagreen:207,darkslateblu:207,darkslategrai:207,darkturquois:207,darkviolet:207,dasgupta:309,dash:[424,515],dat:[6,99,199,216,494],data2xmovi:0,data:[1,2,3,4],data_atom:8,data_atom_hybrid:8,data_bodi:8,data_vel:8,data_vel_hybrid:8,databas:0,datafil:[12,13,320],dataset:320,datatyp:3,date:[0,4,6,12,13,202,459,460,525],datom1:[84,126],datom2:[84,126],datom3:[84,126],datom4:[84,126],datum:[3,6,42,68,71,73,84,102,119,126,203,220],davenport:443,davi:353,david:[9,18,378,379,481,483],daw:[417,457],dcd:[3,6,7,203,205,206,207,208,301,499,503],dcs:9,ddim:202,deactiv:440,dealt:254,debug:[6,7,11,12,13,16,57,130,134,177,178,301,306,376,378,428,449,487,496,497,505,508,515,525],deby:[2,3,7,211,212,313],decai:[100,410,490],decid:[3,6,12,15,75,269,307,318,349,513,520],decipher:381,deck:307,declar:205,declin:336,decod:206,decompos:[95,468],decomposit:[3,5,7,17,64,216,301,323],decoupl:[6,519],decreas:[3,15,203,204,213,214,221,228,232,238,239,245,247,255,347,378],decrement:324,dedic:[15,394],deepli:375,deeppink:207,deepskyblu:207,def:[12,13,496],defaul:63,defect:[6,74,176,447],defgrad:2,defin:[2,3,5,6,7,8,11,12,16,19,20,21,22,23,24,25,26,27,28,29,30,31,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,51,53,54,55,56,57,58,59,60,61,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,184,185,186,187,188,189,190,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,210,211,212,213,214,215,216,217,218,219,220,222,223,224,225,226,227,228,229,231,232,233,236,237,238,241,243,245,246,247,250,253,254,255,256,257,258,267,269,271,272,273,274,275,276,277,278,279,280,282,283,284,287,290,291,292,293,295,296,297,299,300,301,303,304,305,307,309,311,316,318,319,320,321,322,325,329,333,334,336,338,339,340,341,342,344,345,346,348,350,351,353,354,355,356,357,358,359,361,362,363,364,365,366,367,368,371,372,373,374,376,378,379,381,383,384,386,387,388,389,390,391,392,393,394,396,397,398,399,401,402,403,404,405,406,407,408,410,411,413,414,415,416,418,419,421,422,423,424,425,426,427,428,430,432,433,434,435,436,437,438,439,440,441,442,443,447,448,449,450,451,452,453,454,456,457,459,460,461,462,463,464,465,466,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,495,496,498,499,501,502,503,504,507,508,509,510,512,513,515,516,519,521,522,523,524,525,526,527],definit:[2,3,6,8,12,13,82,85,127,152,207,219,220,221,222,223,231,232,241,253,277,320,338,350,353,356,358,360,372,376,388,397,400,408,415,419,430,457,464,466,468,485,496,498,500,507,509,524,525],defint:516,deform:[2,3,6,7,8,40,42,59,61,63,65,85,122,134,138,139,153],deg2theta:177,deg:519,degener:[3,303],degrad:[8,17,300,379,507],degre:[3,6,8,19,20,23,27,28,31,34,35,37,68,84,100,102,104,106,107,109,111,112,117,123,155,156,157,158,159,160,161,162,163,164,165,166,167,168,170,171,177,178,184,185,188,189,196,197,199,202,206,219,228,236,247,249,250,255,256,261,272,273,277,278,279,280,292,293,295,297,301,303,317,318,322,339,340,341,346,362,364,368,371,373,387,413,417,426,508,516,519,526],degrees:199,degress:[158,219],del:512,delai:[3,6,12,390,416,516],deleg:427,delet:[2,3,7,8,12,54,59,62,65,176,181,182,210,219,220,222,223,226,228,244,247,272,320,339,340,359,361,377,388,390,393,449,476,498,499,500,501,509,510,515,520,521,523,525,526],delete_atom:[2,3,7,178],delete_bond:[2,3,43,45,46,47,48,49,50,51,53,54,55,56,68,73,126,179],delete_el:216,deli:202,delimit:[319,496,525],dellago:[6,239],deloc:[273,419,467],delr:444,delt_lo:512,delta:[2,21],delta_1:400,delta_3:400,delta_7:400,delta_conf:3,delta_ij:[444,457],delta_pi:400,delta_r:457,delta_sigma:400,deltah_f:243,delx:202,delz:202,demand:313,demo:11,demon:298,demonstr:[308,444],den:304,dendrim:426,dendtrit:383,denniston:[9,258,260,261,262,300],denomin:[7,183],denot:[130,236,239,256,300,311,313,410,425,427,460,464,466],dens:[75,228,319,419],densiti:[3,6,7,9,17,40,41,61,110,127,138,152,164,176,178,211,212,216,219,225,232,245,258,261,265,266,300,304,305,307,309,348,353,381,384,388,395,396,400,417,444,445,446,451,452,457,461,467,471,473,474,475,498,507,508,516,524],density_continuity:466,density_summation:466,dent:383,depart:[0,7],departur:[270,308],deped:8,depend:[1,2,3,6,8,9,11,12,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,34,37,39,40,41,43,44,45,46,47,48,49,51,53,54,56,63,65,68,71,73,74,75,84,100,102,113,119,123,124,125,126,129,131,152,154,155,161,165,166,172,178,179,184,185,186,187,188,189,190,192,193,195,196,198,199,202,203,204,206,207,210,211,212,213,214,217,219,221,222,223,224,225,227,229,232,238,240,243,246,249,250,251,253,255,256,258,260,261,269,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,299,310,311,313,315,318,319,321,322,323,329,336,339,340,341,343,345,347,348,350,353,356,357,358,359,361,362,363,364,365,367,368,371,373,379,381,387,388,390,391,392,394,395,396,398,399,400,401,402,403,404,405,406,407,408,409,410,411,413,414,417,418,419,420,421,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,444,445,447,448,450,451,452,453,454,456,457,459,460,461,462,467,468,469,477,478,479,481,482,483,484,486,488,489,490,493,495,498,500,501,504,508,510,512,515,516,518,525,526],dependend:6,depflags:12,dephas:[493,512],depos:233,deposit:[2,3,4,112,180,210,217],deprec:[3,309,459],deprect:219,depth:[51,156,206,348,421,423,461],dequidt:9,der:[95,118,408,409,440,459,460,489],deriv:[6,7,8,9,37,56,65,95,152,172,199,220,229,231,232,239,247,255,269,272,274,275,276,277,278,279,280,299,305,309,313,345,346,348,353,354,357,386,388,396,400,408,413,419,420,425,434,438,439,444,447,459,460,477,479,480,489,519],derjagin:489,derlet:299,descend:207,descent:[7,386],descib:[40,206,309],describ:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,37,39,40,41,42,56,64,65,71,74,75,77,96,121,124,127,130,142,152,153,156,157,158,162,163,166,169,171,172,176,177,178,180,181,190,195,199,203,204,205,210,211,212,219,220,221,222,223,225,228,229,230,231,232,233,235,236,242,243,248,249,252,253,254,255,256,257,258,260,261,262,267,271,272,273,277,285,296,299,301,306,307,308,309,310,311,318,319,324,332,336,337,338,339,340,341,342,343,344,345,346,351,353,354,356,361,378,379,381,385,386,387,388,389,393,396,397,399,401,402,403,405,406,407,408,409,410,413,417,419,420,421,423,424,425,427,430,432,433,434,435,436,437,438,439,440,441,442,443,444,447,448,451,452,456,457,458,459,460,461,462,467,468,469,476,477,478,479,480,481,482,483,484,486,488,489,490,491,493,495,496,498,499,500,501,502,508,511,512,515,520,525,526,528],descript:[2,3,6,8,9,11,12,13,17],descriptor:[152,203,428],deserno:379,design:[0,3,6,7,8,11,13,14,16,130,160,163,177,216,228,235,236,272,273,299,300,320,343,348,397,398,399,402,405,410,412,419,440,441,442,445,446,457,460,479],desir:[2,3,6,7,9,11,12,14,15,32,40,50,61,75,96,99,123,128,153,160,178,191,202,219,223,229,231,232,245,247,248,255,256,257,261,272,295,303,304,305,306,309,313,318,321,322,336,339,340,341,342,347,354,369,375,378,379,381,385,387,388,389,414,417,426,441,442,478,481,483,494,495,496,498,502,507,512,513,515,516,517,525,526,528],desk:7,desktop:[4,6,7,10,12,206],despit:519,destabil:400,destre:371,destroi:[9,11,39,226,227],detail:[1,2,3,4,6,7,8,9,11,12,13,14,15,16,17,18,21,36,40,41,42,55,65,69,70,71,75,79,82,86,98,99,103,114,116,118,120,121,122,123,125,128,129,131,152,153,155,156,157,158,161,171,172,173,175,178,179,182,183,186,198,202,203,204,206,207,210,211,212,216,219,220,221,222,223,225,227,228,229,230,231,232,233,239,245,247,248,249,250,252,253,255,257,258,262,269,270,271,272,273,274,275,276,277,278,279,280,284,286,292,293,295,296,297,300,303,304,305,307,308,310,311,312,318,322,323,336,339,340,341,342,343,344,346,347,348,349,350,351,352,359,361,363,372,378,379,382,383,387,388,390,391,394,395,396,397,399,400,402,404,405,406,407,408,409,410,413,414,419,420,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,442,443,444,448,449,451,452,456,459,460,461,467,468,469,477,485,488,489,491,496,498,499,500,501,503,504,507,508,510,513,516,517,520,525,526,530],detect:[2,3,12,42,63,65,94,100,246,304,347,389,409,426,431,493,495,498,509,512,525],determin:[1,3,6,8,9,12,14,15,39,40,42,51,59,60,61,63,64,71,75,95,112,118,119,123,126,129,130,131,139,153,166,167,176,177,178,202,203,204,206,207,208,209,213,214,215,218,219,220,221,222,223,224,225,229,232,233,236,238,243,247,250,251,253,255,256,261,267,269,270,272,278,279,280,292,293,295,297,299,301,304,305,308,315,316,317,318,319,320,321,325,327,329,336,339,340,341,343,349,350,353,354,355,356,357,358,359,372,378,379,381,388,390,391,394,396,397,404,409,413,416,417,421,422,424,427,428,436,444,447,449,452,460,461,467,476,479,480,484,489,495,498,499,501,503,505,508,512,514,515,517,524,525,526],determinist:323,detil:119,devan:[9,462],devanathan:483,develop:[0,3,5,6,7,8,9,11,12,14,15,16,17,18,42,231,252,277,303,308,309,312,396,400,419,446,447,467,486,500],devemi:9,deviat:[270,277,299,422],deviator:9,devic:[1,3,12,14,16,252,394],device_typ:394,devin:[310,409],devis:446,dfactor:206,dff:519,dfft_fftw2:12,dfft_fftw3:12,dfft_fftw:12,dfft_none:12,dfft_single:[3,12,379],dfft_xxx:12,dfftw:12,dfftw_size:12,dft:[9,312,447],dhi:[61,202,232,304],dhug:[270,308],dhugoniot:[270,308],dia:444,diag:319,diagnost:[2,5],diagon:[3,6,91,129,152,153,154,229,272,305,318,351,464,466],diagonalstyl:468,diagram:[41,84,130,177,198,225,301],diallo:426,diam:[206,207,304,388],diamet:[3,6,40,42,124,178,203,204,206,207,211,212,255,304,307,318,336,338,352,354,388,408,423,424,434,461,485,489,498,499,508],diamond:[381,419,444],diamter:[40,304],dick:6,dicken:231,dicsuss:269,dictat:[217,270],did:[3,12,387,414,416,417,424,449,481,483,506],didn:3,die:17,diel:2,dielectr:2,diff:[3,6,12,15,174,350,378],differ:[1,2,3,4,6,7,8,9,11,12,14,15,16,17,21,36,37,39,41,42,54,55,56,63,66,71,74,75,95,100,104,106,107,132,152,154,155,156,157,158,159,161,164,165,166,167,168,170,171,172,178,179,181,186,198,199,202,203,206,207,210,212,215,217,219,222,225,226,227,228,229,230,231,232,236,239,242,246,247,248,249,250,251,252,255,256,258,269,272,273,274,275,276,278,279,280,282,284,287,290,291,292,293,297,299,301,303,305,308,309,310,313,316,318,322,324,332,334,336,339,340,341,344,345,346,348,351,352,353,354,357,361,362,372,375,377,378,379,381,382,385,386,388,389,391,392,393,394,395,396,400,404,405,407,408,409,414,415,417,419,421,423,424,425,427,430,432,433,435,436,443,444,445,446,448,449,450,451,452,453,457,459,460,461,462,463,464,466,467,468,469,477,478,479,480,481,483,485,486,489,492,493,495,496,498,500,501,502,503,506,507,508,510,512,513,515,516,517,519,524,525,526,528],differenti:[1,3,6,28,199,319,378,410,457,482],difficult:[229,231,301,394,426,507,517],difficulti:[100,117,322,459],diffract:[7,9,130,177,320],diffus:[0,4],diffuse:[4,6],digit:[2,3,207,361,447,525],dih_table1:199,dih_table2:199,dihedr:[0,2,3,7],dihedral_coeff:[2,3,184,185],dihedral_cosine_shift_exp:26,dihedral_styl:0,dihedralcoeff:[3,200],dihedraltyp:227,dihydrid:419,dij:322,dilat:[2,3,61,63,65,82],dim1:3,dim2:3,dim:[3,61,75,155,159,160,161,164,165,166,167,168,170,178,202,232,253,354,381,444,501,524,525,526],dimdim:525,dimems:300,dimens:[1,2,3,6,7,12,41,59,60,61,63,65,75,99,125,129,153,158,165,166,167,178,180],dimensinon:75,dimension:[3,39,100,123,130,152,155,158,159,160,161,164,165,166,167,168,170,177,201,219,271,300,348,381,385,389,457,498,508],dimensionless:[115,133,134,136,139,141,143,148,152,231,348,379,468,489],dimensions:320,diment:3,dimentionless:147,dimer:[6,318,444],dimgrai:207,dimstr:[41,225],dinola:[305,339],dintel_offload_noaffinity:15,dipol:[0,2,3,4],dipolar:[4,28,40,203,204,338,519],dir1:509,dir2:509,dir:[1,3,4,8,10,11,12,270,299,308,335,457,459,460,496,509,525],dirac:152,direc:457,direct:[2,3,6,7,12,13,15,28,59,74,75,117,130,152,176,177,178,184,202,203,206,210,213,214,215,232,233],directli:[3,6,8,9,11,12,95,124,129,152,154,178,203,204,205,206,213,231,238,249,253,258,300,319,320,340,352,354,355,356,357,381,386,394,395,396,401,403,404,410,413,417,419,432,436,449,454,462,476,496,508,509,510,516,525],directori:[0,1,2,3],disabl:[3,12,15,348,394,431,496,511,525],disadvantag:[6,225],disallow:[203,232,272],disappear:500,discard:[2,3,41,75,221,225,349,357,495,500,501],discontinu:[199,387,438],discourag:444,discov:[13,349],discret:[6,8,40,42,206,207,231,255,258,294],discuss:[0,1,2,3],disk:[6,92,93,100,171,201,233,247,304,496],disloc:[74,447],disord:[39,74,447],disp:[0,2,3],dispar:461,disperion:[413,436],dispers:[3,6,7,9,176,300,378,379,404,413,436,441,449,460,479,486],displac:[2,3,6,7,12,42,61,65],displace_atom:[2,3,7,113],displace_box:61,displacemet:501,displai:[11,13,21,36,44,55,186,198,203,206,363,372,407,477],dispters:3,disregard:447,dissip:[6,9,40,88,89,241,248,255,300,323,345,346,402,414,415,424,441,442,477],dissolut:226,dist:[6,73,99,119,128,203,301,317,416,476,493,526],distanc:[2,3,6,7,8,9,12,19,20,39,43,45,46,47,48,49,51,53,54,55,56,57,58,60,61,63,65,66,69,73,75,76,77,78,79,80,81,86,87,94,97,98,100,103,113,114,115,116,117,119,125,126,127,128,129,130,132,146,152,167,173,176,178,179,180,181,185,202,203,204,206,207,215,219,226,227,228,229,232,233,234,237,239,247,253,258,269,270,271,272,277,286,299,300,304,308,309,316,317,318,322,324,328,332,333,334,335,336,343,344,346,347,348,351,353,354,355,356,357,358,362],distinct:[6,236,315,378,461],distinguish:[6,94,152,261,419,497,525],distort:[176,395],distrbut:395,distribut:[0,2,4,5,6],distro:[122,407,456,457],ditto:[8,12,14,16,17,42,126,227,318,490,496],div:[8,15],divd:128,diverg:[3,12,39,318,346,396,500,519,528],divid:[3,6,15,41,99,123,128,138,140,153,175,176,186,198,207,219,220,222,225,232,299,344,351,356,378,387,389,420,460,467,486,507,515,525],divis:[6,197,258,400,430,440,495,516,525],dl_poly:[6,7],dlambda:172,dlammps_async_imd:252,dlammps_bigbig:[12,39,207],dlammps_ffmpeg:[3,12,206],dlammps_gzip:[3,12,203,206,347,498,499,503],dlammps_jpeg:[3,12,206],dlammps_longlong_to_long:12,dlammps_memalign:[9,12,15],dlammps_png:[3,12,206],dlammps_smallbig:12,dlammps_smallsmall:12,dlammps_xdr:[12,203],dlen:508,dlm:[272,290],dlmp_intel_offload:[9,15],dlo:[61,202,232,304],dlopen:6,dlvo:[7,408,489],dm_lb:258,dmax:[336,385],dmpvtk:204,dmpvtp:204,dna:7,doc:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,16,17,21,36,40,42,55,59,61,65,69,71,79,84,86,95,98,102,103,114,115,116,118,120,121,122,123,125,128,129,131,153,156,157,158,171,173,175,178,179,180,186,198,202,203,204,205,206,207,208,210,211,212,217,218,219,220,221,222,223,231,233,247,255,256,267,272,273,278,279,280,284,292,293,295,296,297,304,307,318,332,336,339,340,341,350,354,357,359,361,363,372,377,383,387,388,389,394,395,396,399,407,409,410,417,418,420,426,427,429,430,444,445,446,449,453,456,457,458,468,477,478,481,483,485,486,496,498,499,500,501,503,506,507,508,515,516,520,525,526,528,529],docuement:461,dodd:42,dodgerblu:207,doe:[0,1,2,3,5,6,7,8,9,11,12,14,16,17,32,37,39,41,42,50,54,56,61,64,65,70,74,75,76,95,96,99,114,118,121,127,128,130,154,156,158,160,161,166,168,172,177,178,179,180,182,184,186,191,198,199,202,203,204,205,206,207,210,216,217,219,224,225,227,228,229,231,232,236,238,239,242,243,244,247,248,251,253,255,256,258,261,268,272,273,274,275,276,278,279,280,292,293,294,295,296,297,305,306,307,311,313,316,318,336,339,341,343,344,348,351,352,353,356,357,358,359,364,365,366,368,369,371,377,378,379,380,381,388,389,390,395,396,397,398,399,400,402,404,405,406,408,409,410,411,413,414,416,417,418,419,421,422,423,424,425,427,428,429,430,431,434,435,437,438,439,441,442,444,445,446,447,449,451,452,457,458,459,460,461,463,464,465,466,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,484,485,486,488,489,490,491,493,494,495,496,498,499,500,501,502,505,506,508,509,510,511,512,515,516,519,520,525,530],doegenomestolif:7,doesn:[3,7,8,12,178,203,204,217,332,388,390,394,396,409,418,429,459,460,478,481,482,483,486,498,500],dof:[3,8,123,156,157,158,171,219,318,526],dof_per_atom:[158,219],dof_per_chunk:[158,219],doff:[388,498],doi:[6,230,299],domain:[3,6,7,12,13,17,39,41,42,60,63,64,75,130,167,177,180,202,205,206,207,210,217,225,229,232,233,251,254,258,272,273,301,313,318,323,348,353,354,378,379,389,394,416,449,493,495,498,502,515],domin:[1,419,512],don:[0,8,9,12,13,15,127,181,213,238,256,357,444,467,496,498,520],donadio:340,done:[1,3,6,7,8,12,14,16,17,37,39,41,56,61,64,75,172,175,178,181,197,199,203,206,207,216,217,219,221,222,223,225,226,227,228,229,231,232,233,242,243,245,247,252,253,255,256,263,272,278,279,280,292,293,295,297,298,300,301,302,304,307,315,318,320,322,336,339,340,341,343,345,346,359,361,377,378,379,387,389,390,393,394,396,404,417,427,428,429,436,442,443,444,449,451,452,459,476,479,480,485,493,494,495,496,499,502,503,506,516,517,519,520,525,526],donor:426,dot:[153,174,213,238,250,271],doti:[400,457],doubl:[1,2,3,6,8,9,11,12,14,15,16,39,95,184,229,232,245,306,357,361,377,379,393,394,400,420,425,447,459,460,494,498,502,506,511,525,526],dover:216,down:[3,6,7,8,11,39,75,229,247,255,336,352,419,449,467,497,517],downhil:[385,386],download:[5,7,8,9,11,12,13,16,252,428,458],downsid:6,downward:315,dozen:[8,9,12,118,210,459,460],dpack_array:12,dpack_memcpy:12,dpack_pointer:12,dpd:[2,3,6,7],dpde:265,dpdtheta:[40,88,89,415],dpdtheta_i:[241,242,243],dproduct:397,dr_ewald:[130,320],drag:[2,6,99,210],dragforc:258,drai:[206,270,308],drain:[251,352,387],dramat:[9,61,202,226,227,228,229,232,272,336,339,340,379,449,467,495],drautz:400,draw:206,drawback:307,drawn:[42,203,206,207,248,493],drayleigh:[270,308],dreid:[2,3,4,6,9],dreiding:0,drfourth:115,drho:[124,395,417,451,452],drift:[6,113,115,239,248,249,251,255,256,268,316,336,507,515,519],drive:[11,12,214,229,232,250,272,299,305,318,355,389],driven:[6,190],driver:[6,12,14,210,245,252],drop:[3,207,414],droplet:427,drsquar:115,drude:[0,2],drudes:[256,519],dry:244,dsecriptor:428,dsf:[2,3],dsmc:[2,3,9],dstyle:304,dt_collis:258,dt_lb:258,dt_md:258,dt_srd:336,dtilt:[61,232],dtneb:512,dtqm:308,dtype:[84,126,227],dual:[16,336,394],dudarev:177,due:[1,3,6,9,12,15,16,18,40,54,57,59,60,63,69,74,75,78,79,86,87,94,96,97,98,103,112,113,114,115,116,121,127,130,138,152,153,155,156,157,159,161,164,165,166,167,168,170,171,173,177,178,181,182,203,204,206,210,213,214,222,224,226,227,228,229,230,232,233,238,240,244,245,248,249,252,253,255,256,257,258,261,262,263,268,269,270,271,272,277,286,299,302,304,316,317,318,321,332,333,335,336,337,339,340,341,342,343,345,346,348,352,353,355,356,357,359,378,379,385,387,389,390,391,411,414,415,417,422,423,427,441,442,449,457,459,461,462,476,479,481,483,487,489,490,493,495,498,499,500,507,512,515,516,517,519,525,526],duffi:348,duin:[9,309,314,459,460],duke:379,dullweb:[272,290],dumbbel:383,dummi:[12,28,482],dump0:204,dump10000:204,dump1:503,dump20000:204,dump2:503,dump2vtk_tri:146,dump:[0,1,2,3,4],dump_0:204,dump_1:204,dump_atom:8,dump_custom:8,dump_h5md:205,dump_modifi:[2,3,6,203,204,205,206],dump_p:204,dumpcustom:8,dumptimestep:503,dunbrack:[6,19,184,405,510],dunweg:[255,257],duplic:[2,3,14,16,41,42,179,204,225,249,299,498,524],dupont:[5,7,13],durat:[36,55,155,156,157,159,160,161,163,164,165,166,167,170,171,198,207,219,247,313,348,372,424,477],dure:[2,3,6,8,9,12,15,16,37,39,41,56,75,95,129,138,140,154,160,179,182,184,199,203,204,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,234,237,238,239,240,242,243,244,245,246,247,248,249,250,251,252,253,255,256,257,258,259,260,261,262,263,264,265,266,268,269,271,272,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,320,321,322,324,328,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,379,387,389,393,414,440,447,449,450,451,452,460,479,480,493,494,496,498,501,503,505,506,508,510,512,513,516,517,525,529,530],dvector:8,dvlo:489,dvx:6,dx_lb:258,dy3:177,dyamic:12,dyanam:6,dyanmic:512,dynam:[0,2,3,4,5,6,7,9,11,12,13,14,15,39,40,41,61,63,75,88,89,112,115,127,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,155,156,157,158,159,161,163,164,165,166,167,168,170,171,176,178,182,203,206,207,210,213,216,225,228,230,231,232,233,238,241,244,247,248,249,254,255,256,257,262,270,272,273,277,283,286,288,300,301,304,307,308],dynamo:[5,395,417,444],dyne:524,dyre:437,dysam:501,e28637:28,e_1:400,e_2:400,e_a:319,e_b:420,e_data:204,e_ee:419,e_hbond:426,e_i:[6,400,420],e_j:[6,400],e_k:400,e_ke:419,e_kl:6,e_lj:[396,413],e_n:[231,400],e_ne:419,e_nn:419,e_pr:419,e_rebo:396,e_torsion:396,e_tot:447,e_vol:447,eaa:362,eaat:185,each:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,39,40,41,42,43,45,46,47,48,49,50,51,53,54,55,56,57,59,61,63,64,65,66,67,69,70,71,72,74,75,76,77,78,79,80,81,82,83,85,86,87,89,91,93,95,97,98,100,101,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,120,121,122,123,124,125,126,127,128,129,130,131,132,146,152,153,154,156,157,158,159,160,161,162,165,166,167,168,170,171,172,173,174,175,176,177,178,181,182,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,202,203,204,205,206,207,208,209,210,211,212,213,214,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,240,242,243,244,245,247,248,249,250,251,252,253,254,255,256,257,258,259,261,262,263,264,265,266,268,269,270,271,272,274,275,276,277,278,279,280,281,282,283,284,286,287,288,289,290,291,292,293,295,296,297,299,300,301,302,303,304,305,306,307,309,310,311,313,315,318,319,320,321,322,323,324,328,329,331,332,333,334,335,336,337,338,339,340,341,343,346,347,348,349,350,351,352,353,354,356,357,358,359,361,362,364,365,366,367,368,369,371,372,373,377,378,379,381,386,387,388,389,390,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,419,420,421,422,423,424,425,426,427,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,447,448,449,450,451,452,453,454,456,457,459,460,461,462,463,467,468,469,470,471,472,473,474,475,476,477,478,479,480,483,484,485,486,487,488,489,490,491,492,493,495,496,498,499,500,501,502,503,505,506,507,508,510,512,513,515,516,517,518,519,524,525,526,528,530],eacn:[41,225],eam0d:300,eam3d:300,eam:[0,2,3,5,7,8,9,10,12],eam_databas:13,eam_gener:13,eangl:516,earli:[41,219,222,223,225,312,320],earlier:[7,8,12,61,207,389,424,444,449,512],earliest:512,earth:419,easi:[6,7,8,9,10,11,13,95,153,203,211,212,213,214,224,238,250,251,253,255,256,321,329,339,340,341,353,356,358,388,498,501,506,508,526],easier:[8,9,13,15,203,204,206,300],easili:[8,11,206,207,352,389,495,505,514,525],eastwood:[378,379],eat:185,eatom:359,eaxmpl:6,eba:20,ebb13:185,ebb:20,ebond:[236,256,515,516,525],ebt:185,ec_ii:444,ec_ij:444,ec_jj:444,echo:[2,3,11,12,62,130,177],eco:[459,460],ecoa:[459,460],ecoul:[118,154,236,256,459,460,516],ecp:[419,498],edg:[3,6,41,42,61,75,130,176,177,180,181,203,205,206,215,253,321,353,356,357,358,359,381,498,501,508],edge:[2,3,353,356,358,501],edge_histo:176,edge_threshold:176,edih:516,edim:344,edip:[2,7],edit:[3,8,9,12,13,14,15,16,17,18,519,520],edition:15,editor:13,edu:[7,9,11,13,417,441,456,459,460],edward:[9,16],eebt:185,eff:[0,2,7,8],effect:[1,2,3,6,8,9,11,12,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,34,37,39,40,43,45,46,47,48,49,51,53,54,56,69,75,78,79,86,87,97,98,103,113,114,115,116,123,128,153,155,160,165,166,173,176,182,184,185,187,188,189,190,192,193,195,196,198,199,202,203,204,206,207,211,212,213,216,217,218,219,220,222,223,224,226,227,228,229,232,233,239,240,242,246,247,248,249,250,251,252,253,255,256,271,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,298,299,301,304,305,307,308,309,310,311,313,316,317,318,321,322,335,336,339,340,341,343,344,346,348,351,352,353,354,355,356,357,358,359,362,364,365,367,368,371,373,378,379,381,386,387,388,389,390,395,396,398,400,401,402,403,404,405,406,408,409,410,413,414,417,418,419,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,445,447,449,450,451,452,453,454,456,460,461,462,463,465,467,469,477,478,479,480,481,482,483,484,485,486,488,489,490,493,495,496,500,501,503,507,508,510,516,517,524,525,528],effectiv:[255,381],efffect:502,efficaci:39,effici:[0,1,3,6,7,8,9,10,12,14,15,16,17,39,60,63,70,123,154,197,203,204,205,206,207,220,221,229,232,236,249,272,301,303,304,313,318,322,336,378,379,385,390,394,400,408,410,427,432,436,447,451,452,461,479,505,530],efficienc:15,efficient:[9,303],effort:[5,7,499],efftemp:[106,107,164],efi:[459,460],efield:[2,3,210,217],eflux:251,eforc:204,eggebrecht:[410,467],ehanc:210,ehb:[459,460],ehex:[2,6,210],eigensolv:3,eigenvalu:[300,301,378],eigtol:3,eike:172,eim:[2,3,4,7,9],eimp:516,eindhoven:9,einstein:[6,313,346],either:[1,2,3,6,8,9,10,11,12,14,15,16,21,32,41,44,50,61,65,74,75,113,118,124,127,130,152,153,158,160,161,176,177,178,181,186,191,199,203,204,205,206,207,210,218,220,222,223,225,228,229,230,231,232,233,239,247,253,254,258,262,269,270,272,273,277,295,299,307,315,319,321,322,324,332,336,343,350,354,357,361,363,376,378,379,381,386,387,391,394,400,402,408,417,421,424,427,428,430,441,442,444,447,449,452,455,457,460,476,480,481,483,485,493,496,498,500,501,505,507,510,513,515,525],ejtehadi:[408,423,461],elaplong:[211,212,253,501,516,525],elaps:[3,202,211,212,213,214,224,232,238,250,251,253,255,256,269,304,321,329,339,340,341,353,354,356,358,469,493,501,503,504,508,512,516,517,525],elast:[4,6,7,9,44,45,46,55,122,210,271,300,354,386,389,424,456,482],elastic:[0,4],elastic_t:4,elba:28,electr:[6,210,216,238,256,378,379,420,459,460,490,519,524],electric:15,electrolyt:[9,489],electron:[3,6,7,9,13,40,106,107,124,130,162,164,169,204,210,216,235,236,256,257,273,285,296,311,342,348,386,388,395,397,409,413,417,419,420,444,447,457,458,467,483,486,490,498,518,519,524],electron_integr:216,electron_temperatur:216,electron_unit:419,electroneg:[6,309,310,311,409,420,467],electroneg_compon:467,electronic_dens:3,electronic_specific_heat:3,electronic_thermal_conduct:3,electrostat:[6,9,15,17,217,247,309,311,312,349,378,379,408,413,419,432,440,442,460,467,489],eleftheri:318,elem1:[420,444,468],elem2:[420,444,468],elem:467,element1:[315,395,417,467],element2:[315,395,417,467],element:[3,6,7,8,9,12,13,42,65,87,97,113,115,123,128,131,146,152,153,154,155,156,157,158,159,160,161,165,166,167,168,170,171,174,203,204,205,206,207,208,210,211,216,220,222,223,300,315,343,350,395,396,400,409,417,418,419,420,427,428,429,444,445,446,447,453,457,458,459,460,467,468,478,481,482,483,486,516,519,525,529],elementn:[395,417],elementset:216,elev:512,elif:[152,361],elig:[3,217,226,227,244,247,426],elimin:[3,6,75,176,248,255,256,318,322,345,346,493],elj:413,ellad:9,elliot:9,elliott:9,ellips:[4,6,9,75,90,156,201],ellipsoid:[3,4,6,7,9,13,40,42,75,90,124,142,156,178,201,202,203,204,255,269,274,278,282,283,288,292,318,336,383,384,387,423,442,461,477,498,508,528],ellipsoidflag:498,elong:[236,256,516],elp:[459,460],els:[3,7,8,12,75,118,127,128,131,206,207,218,219,220,222,223,231,247,272,318,336,348,349,350,359,361,378,427,497,509,515,525,529],elsewher:[8,269,336,444,458,459,460,510,516,525],elt:444,emac:0,email:[0,3,5,7,8,9,11,420],emb:[3,9,357],emb_lin_neg:444,embed:[3,4,5,7,9,11,12,13,28,96,154,176,348,395,417,420,440,444,445,446,457,477,487,496],embt:185,emi:[7,9],emile:9,emin:229,emol:[459,460,516],emphas:424,empir:[9,216,340,419],empiric:396,emploi:[239,300,309,313,482],empti:[3,59,75,176,180,318,378,390,431,498,509,510,525],empty:3,enabl:[3,6,8,9,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,34,36,37,39,40,43,45,46,47,48,49,50,51,53,54,55,56,62,63,64,66,70,82,85,88,89,91,95,96,106,107,108,109,110,111,115,118,122,123,129,130,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,154,155,156,157,160,162,164,165,169,170,172,176,177,184,185,187,188,189,190,191,192,193,195,196,198,199,203,204,205,207,208,210,211,212,213,214,215,217,221,224,226,227,228,230,231,232,233,238,239,240,241,242,243,244,245,246,247,248,249,250,252,253,254,255,256,257,258,259,260,261,262,264,265,266,267,268,270,272,273,274,275,276,277,278,279,280,281,282,283,284,285,287,288,290,291,292,293,294,295,296,297,299,300,301,303,304,308,309,310,311,312,313,314,315,317,318,319,321,322,323,324,325,326,327,328,329,331,332,333,335,336,342,343,344,345,346,348,349,351,353,354,355,356,357,360,362,364,365,367,368,369,371,372,373,379,387,389,393,394,395,396,398,399,400,401,402,403,404,405,406,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,444,445,446,447,449,450,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,488,489,490,496,499,500,501,505,507,517,525,530],enclos:[2,6,12,180,203,207,306,361,444,467,494,496,506,515,525],encod:[13,39,42,203,206,207,307,427],encompass:[3,6,40,42,59,61,127,179,331,350,477,501],encount:[3,8,12,61,117,222,393,503,525],encourag:[7,8,312,319,334],end12i:124,end12x:124,end12z:124,end1i:124,end1x:124,end1z:124,end2i:124,end2x:124,end2z:124,end:[1,2,3,5,6,8,11,12,14,15,16,17,18,37,40,41,42,57,59,61,75,124,181,182,185,202,203,204,206,207,208,211,212,220,222,223,228,229,232,239,248,253,255,257,271,272,273,286,294,305,317,318,319,324,336,339,340,341,342,344,347,348,351,355,358,359,377,378,388,389,393,394,414,417,423,430,443,447,461,464,466,468,469,487,493,496,498,499,500,501,503,505,506,510,514,516,519,525,530],end_of_step:8,endbondtors:[3,185,191,498],endif:8,energet:[228,396,460],energi:[0,1,2,3,4,5,6,7,8,9,12,13,19,20,22,23,24,25,26,27,28,29,30,31,33,34,35,37,38,40,43,45,46,47,48,49,51,52,53,54,56,57,58,65,67,68,72,73,83,88,89,90,91,92,93,94,95,96,99,101,104,105,106,107,108,109,111,118,119,120,121,123],energy_compon:467,energy_update_freq:460,enforc:[6,9,59,60,114,202,203,204,205,206,207,208,210,217,228,232,272,298,300,310,318,322,361,378,432,495,525,526],enforce2d:[2,3,6,201,210],eng:[11,68,73,119,203,245,359,361,409,446],eng_previ:361,engiliti:9,engilitycorp:9,engin:232,engineer:[216,303,324,345,417],enginer:445,enhanc:[212,216,239,493],enlarg:[61,206],enough:[3,40,63,94,178,179,181,182,225,256,304,308,313,318,349,353,354,357,390,394,410,455,498,502,503],enpub:417,ensembl:6,ensight:6,ensur:[3,6,152,203,204,217,221,229,247,248,272,325,347,379,400,416,440,478,486],enter:[59,168,420,447,486,512],enthalpi:[135,274,275,276,319,417,515,516,525],entir:[0,2,3,6,11,14,41,42,65,88,89,96,120,121,123,127,129,130,153,158,177,178,207,210,211,212,219,225,228,230,239,244,247,248,251,255,256,268,272,274,275,276,277,278,279,280,299,301,303,316,318,319,334,348,350,361,394,413,436,449,479,480,498,506,507,515],entireti:485,entiti:[6,8,40,42,203,318],entri:[3,8,12,37,42,56,68,73,84,102,119,126,129,130,139,142,143,144,145,146,148,149,150,176,199,204,207,211,222,230,242,243,308,359,388,400,418,444,451,452,453,460,468,478,479,480,481,482,483,486,525],entries:207,entropi:512,entry1:[37,56,207,407,451,452,479,480],entry2:207,entryn:207,enumer:[179,203,491],enumuer:6,env:394,environ:[1,3,6,11,12,15,16,17,206,249,254,299,394,395,400,407,409,418,419,457,481,495,509,525],eos:[9,242,243],epair:[118,207,396,422,426,459,460,516],epen:[459,460],epfl:[249,254],epp:413,epq:413,eps0:489,eps14:440,eps:[456,477],epsilon0:483,epsilon:[3,6,35,45,46,50,53,54,95,184,211,212,247,318,336,353,357,385,387,399,405,406,408,410,411,412,413,421,423,425,426,427,430,431,432,433,434,435,436,437,438,439,440,443,448,454,461,462,472,478,484,485,488,489,507,519,524],epsilon_0:490,epsilon_14:405,epsilon_:461,epsilon_d:411,epsilon_i:[423,449,461],epsilon_i_:461,epsilon_i_a:[423,461],epsilon_i_b:[423,461],epsilon_i_c:[423,461],epsilon_ij:449,epsilon_j:[423,449,461],epsilon_j_:461,epsilon_j_a:[423,461],epsilon_j_b:[423,461],epsilon_j_c:[423,461],epsilon_lj:461,epton:456,eqch:173,eqeq:[459,460],eqp:413,eqq:413,equal:[2,3,6,8,11,12,16,39,41,54,65,68,71,73,75,80,84,94,95,99,102,119,121,126,128,131,153,156,172,174,176,178,202,206,207,210,211,212,213,214,217,220,221,222,223,224,225,229,231,232,233,238,247,248,250,251,253,255,256,258,261,262,269,270,277,288,289,299,301,304,306,308,309,310,313,315,317,318,319,321,324,329,331,339,340,341,344,345,346,348,350,351,353,356,358,359,361,377,381,387,389,390,391,393,394,396,409,414,415,422,423,426,430,441,447,448,457,459,460,461,463,464,465,467,468,469,479,480,485,486,490,494,495,496,498,500,501,505,506,509,512,514,516,525,526],equat:[3,6,7,8,9,99,117,123,130,177,186,198,210,229,231,236,237,239,241,242,243,249,255,256,258,261,270,271,272,273,277,295,299,301,308,309,313,319,322,323,336,344,348,351,353,354,356,358,378,379,383,408,413,414,415,419,420,421,424,429,441,442,444,449,452,461,464,466,471,472,474,475,480,490,519],equation:[249,299,371],equi:273,equidist:271,equil:[3,309,382,505,530],equilater:508,equilibr:[3,4,5,6,7,9,61,99,178,210,217,220,228,229,247,270,272,273,295,296,305,308,309,310,311,344,345,346,351,409,410,459,460,494,508],equilibria:351,equilibribum:[226,227],equilibrium:[1,3,4,6,7,20,23,25,26,27,28,31,34,35,37,38,43,47,48,49,51,53,56,58,61,161,162,185,187,229,232,247,248,249,256,258,272,277,295,308,309,313,317,322,324,332,336,343,344,346,351,362,364,368,371,409,444,453,467,519],equilibrium_angl:8,equilibrium_dist:8,equilibrium_start:216,equival:[6,12,13,28,61,63,128,136,137,145,150,176,180,203,207,218,219,220,222,223,229,232,247,255,272,295,305,317,318,356,396,414,419,467,481,483,484,498,501,506,507,516,519],equlibrium:6,equliibr:[309,311],er3:177,eradiu:[40,124,204,419,498],eras:[321,345],erat:[232,442],erc:410,erfc:[410,432,449],erforc:[124,204],erg:524,erhart:[217,417,481,483],ermscal:397,ernst:9,eror:3,eros:444,erose_form:444,erot:[2,3,6,9,65],errata:[481,483],erratum:353,erron:3,error:[0,1,2],erta:424,ervel:[124,204,498],escap:[233,519],especi:[8,15,166,178,210,217,225,247,308,313,316,317,394,495,517],espresso:[9,312],essenti:[11,12,26,96,140,159,160,161,164,165,166,167,168,170,187,220,300,352,379,396,410,432,483,503,516],essential:[8,277],essex:28,establish:[95,251],estim:[1,3,6,10,12,37,41,56,74,99,153,216,225,237,270,319,336,343,378,379,385,449,460,479,480,512,516],estimat:3,esu:524,esub:444,eta:[6,258,272,308,309,311,352,418,420,423,457,482,486,524],eta_dot:272,eta_ij:457,eta_ji:420,etag:[40,498],etail:516,etap:272,etap_dot:272,etc:[1,2,3,4,6,7,8,9,10,11,12,13,14,15,39,40,42,54,63,71,97,98,99,104,120,121,124,126,129,153,155,158,159,160,161,162,164,165,166,167,168,170,172,178,180,181,182,191,203,204,206,207,210,211,216,217,218,219,222,223,226,227,232,233,245,247,248,255,272,304,315,320,348,349,357,361,377,378,387,388,389,390,392,417,418,427,440,442,447,455,459,460,478,481,483,486,493,496,498,499,500,505,507,508,512,513,514,515,516,517,519,524,525,528,530],ethernet:17,etol:[387,389,493,512],etot0:308,etot:[6,104,106,107,121,153,164,207,236,256,270,308,515,516],eu2:177,eu3:177,euler:[319,387,389],eulerian:216,euqat:470,europhi:258,ev_tal:8,evalu:[2,3,9,11,12,37,56,75,95,96,99,118,128,131,152,154,158,168,176,178,184,202,203,204,206,207,211,212,213,214,216,218,219,220,221,222,223,224,231,232,238,248,250,251,253,254,255,256,300,306,309,319,321,325,329,339,340,341,350,353,356,358,359,361,385,387,447,449,451,452,457,463,465,467,479,480,493,494,496,500,501,503,505,506,507,508,512,514,516,525,526],evaluat:[378,379,525],evalut:[361,496],evan:[166,295],evanseck:[6,19,184,405,510],evapor:[2,3,9,59,112,210,217],evaul:[8,387],evdwl:[118,154,459,460,516],even:[3,6,8,12,14,15,16,17,33,39,41,52,57,59,61,63,65,74,75,96,118,131,176,179,180,194,197,199,203,204,207,210,211,212,217,218,219,222,223,225,226,227,229,232,233,236,239,253,256,270,272,273,300,304,313,315,318,320,331,336,344,348,351,353,357,359,370,378,385,387,389,394,399,419,420,424,427,430,449,461,486,487,491,498,499,501,503,504,505,507,508,510,513,515,516,517,519,530],evenli:[3,41,57,153,199,225,258,430,487],event:[2,3,6,8,65],eventu:[3,6,12,14,180,512],eventual:309,ever:[9,54,56,254,336],everaer:[408,423,461,477],everi:[0,1,2,3,6,8,9,11,12,14,15,39,41,75,76,99,124,131,140,166,181,203,204,205,206,207,208,210,211,212,213,216,217,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,237,239,244,245,247,249,251,252,253,258,259,268,272,273,277,288,294,298,299,300,304,305,306,307,308,309,310,311,313,315,316,318,319,320,322,324,333,336,338,339,340,341,342,343,344,347,348,349,350,351,359,361,377,379,389,390,391,394,414,416,427,440,459,460,467,473,492,493,494,498,500,502,503,505,506,507,512,513,514,516,517,520,525,530],everyth:[8,118,520],everywher:[127,434],eviri:419,evolut:[239,249,258,301,493],evolv:[258,301,349],ewald:[2,3,5,6,7,8,9,12,96,121,130,153,349,378,379,387,401,403,404,410,413,419,432,436,454,462,477,479,484],ewald_disp:413,ewalddisp:3,exact:[21,41,44,75,134,172,181,186,225,228,248,249,255,256,257,304,313,314,336,348,363,378,407,500,505,512,525,528,530],exactli:[3,6,12,16,37,41,42,56,61,75,76,99,127,156,162,169,178,199,211,212,222,225,232,237,242,248,255,256,257,273,285,286,296,300,307,308,336,341,342,355,394,407,414,417,424,427,441,449,451,452,479,480,500,501,508,512,525],exager:519,examin:[6,8,16,228,300,319],examp:496,exampl:[0,1,2,3],exce:[3,6,15,16,17,41,60,75,180,218,219,222,223,225,229,232,237,244,272,300,315,320,326,327,336,387,394,498,525],exceed:[3,41,61,225,232,272,336,460,506],excel:419,except:[1,2,5,6,8,10,11,15,19,20,21,22,23,24,25,26,27,28,29,30,31,34,36,37,40,41,43,44,45,46,47,48,49,51,53,54,55,56,61,62,65,75,97,98,119,123,128,153,155,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,178,182,184,185,186,187,188,189,190,192,193,195,196,198,199,202,203,204,207,210,213,219,220,222,224,225,229,232,240,246,247,250,253,255,257,272,273,274,275,276,277,278,279,280,281,282,285,286,290,292,293,295,296,297,301,310,311,318,321,322,332,336,342,348,356,359,360,361,362,363,364,365,367,368,371,372,373,378,379,381,384,388,389,390,392,393,394,395,396,398,401,402,403,404,405,406,407,408,409,410,412,413,414,417,418,419,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,442,445,450,453,454,456,459,460,461,462,469,477,478,479,481,482,483,484,486,488,489,490,493,495,496,498,500,501,503,506,507,508,509,510,512,516,519,524,525,526,529],exception:496,excess:[221,419],exchang:[2,3,6,8,63,64,210,216,217,239,247,251,255,310,318,344,348,351,378,394,419,513],exchange:378,excit:419,excite:419,exclud:[3,6,9,12,15,16,65,75,112,123,129,152,158,165,166,182,203,219,226,227,259,268,303,316,318,343,354,359,387,388,390,402,424,427,430,441,442,449,476,510],exclude:390,exclus:[1,3,12,15,95,184,409,447,449,507,517],excurs:[272,493],exectubl:12,execut:[1,2,3,4,6,8,9,11,12,16,62,179,206,252,312,361,377,380,393,494,496,506,509,512,525],exempl:467,exemplari:248,exemplifi:419,exert:[6,253,256,288,313,355,356,357,379],exhaust:[216,393,525],exhibit:[100,239,251,272,386,419,507],exist:[3,6,7,8,11,12,13,36,55,57,61,71,74,134,178,179,198,205,206,207,210,215,224,227,229,233,247,303,304,306,307,359,360,362,364,365,366,368,372,382,388,415,427,459,476,487,494,496,498,499,500,509,510,511,520,525,526,528],exit:[2,3,11,12,41,59,203,225,377,393,496,497,506,515,516,517,525],exlanatori:3,exp6:2,exp:2,expand:[2,3,44],expans:[12,152,197,203,509,525],expect:[1,3,8,12,13,14,15,16,17,18,41,42,75,112,159,170,176,199,225,238,247,249,269,299,305,307,308,313,318,359,379,390,407,444,447,449,493,496,498,500,503,507,512,525],expens:[6,75,207,299,303,318,348,359,378,379,390,394,496],experi:[6,13,14,224,233,252,261,271,305,317,318,385,389,414,449,507,512],experienc:[6,12,15,260,261],experiment:[16,247,378,394,512],expert:12,expertis:7,expir:[516,517],explain:[1,3,6,8,9,11,12,17,41,61,65,68,71,73,75,76,77,80,81,84,94,102,129,158,166,199,203,204,206,207,210,219,220,223,225,227,229,232,272,288,299,307,318,332,359,361,377,378,381,388,389,393,399,417,430,467,469,485,496,499,500,503,505,508,519,520,525,530],explan:[3,6,61,124,129,152,203,204,219,271,299,427,492,495,496,498,507],explanatori:[3,8,128,203,204,218,219,222,318,388,495,525],explantori:[3,314],explic:448,explicit:[6,9,11,21,44,81,95,124,127,172,186,211,212,232,319,326,327,363,378,384,396,397,400,405,407,417,419,431,441,484,492,495,499,502,520],explicitli:[3,6,8,12,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,43,45,46,47,48,49,51,53,54,56,75,123,155,165,168,176,178,184,185,187,188,189,190,192,193,195,196,199,203,204,207,213,224,229,232,240,246,248,250,255,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,307,308,310,311,318,321,322,341,342,348,356,362,364,365,367,368,371,373,388,394,395,396,398,401,402,403,404,405,406,407,408,409,410,411,413,414,416,417,418,420,421,422,423,424,425,426,427,431,432,433,434,435,436,437,438,439,440,441,445,447,449,450,451,452,453,454,456,460,461,462,469,470,471,472,473,474,475,477,478,479,480,481,482,483,484,486,488,489,490,498,500,501,507,508,510,511,517,519,520],explictli:[15,511],exploit:[14,16,301],explor:[130,177],expon:[3,309,311,319,417,421,423,426,440,448,462],exponenti:[95,319,421,457,478,486,490,512,525],expos:11,exposit:[216,414,416],express:[6,152,164,178,211,212,229,269,299,309,319,348,354,361,400,417,419,434,444,467,468,477,525],expression:361,expressiont:400,extend:[0,3,6,7],extens:[3,6,9,15,16,44,45,46,53,55,65,67,72,83,90,91,92,95,96,99,101,104,107,108,118,120,128,131,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,204,210,213,214,217,223,224,230,231,234,238,239,245,246,247,249,250,251,253,255,257,270,272,277,286,299,300,316,317,318,321,324,329,332,333,335,339,340,341,342,343,345,346,348,350,353,357,358,423,444,447,460,461,468,515,516,524],extensiv:[65,210,516],extent:[1,3,41,42,45,59,75,176,180,203,215,225,253,355,358,378,381,396,463,465,479,480,495,498,501],exterior:[3,6,176,357],extern:[2,3,9,94,95,176,206,210,224,229,238],extra:[3,6,8,11,12,15,16,40,41,46,63,75,112,120,121,123,130,153,155,156,157,159,161,164,165,166,167,168,170,171,177,178,179,180,207,222,225,227,272,306,307,308,318,336,387,388,391,392,394,413,424,427,430,444,449,495,496,498,501,510,519,525],extract:[3,6,11,13,35,65,67,72,83,95,101,118,126,128,131,211,212,311,389,410,420,444,468,496,503,515],extract_atom:11,extract_comput:[11,496],extract_fix:11,extract_glob:11,extract_vari:11,extramake:[12,14],extrapol:1,extrem:[1,3,6,16,60,206,221,229,232,272,346,419,482,519],extrema:440,extreme:419,extrins:216,f77:[5,7,12],f90:[5,7,12],f_1:[6,229],f_5:[174,350],f_a:[481,482,483],f_ave:128,f_c:482,f_f:483,f_fix_id:308,f_foo:525,f_harm:346,f_i:[28,457],f_id:[6,75,128,131,203,204,210,218,219,220,221,222,223,231,267,338,350,516,525],f_ij:457,f_indent:223,f_int:345,f_j:28,f_jj:99,f_k:457,f_langevin:348,f_max:[308,313],f_msst:270,f_r:[256,481,482,483],f_sigma:400,f_solid:346,f_ss:6,face:[3,6,59,61,75,166,176,180,215,353,355,356,357,358,381,423,444,461,498,501],face_threshold:176,facet:176,facil:[0,12],facilit:[6,13,42],fact:[6,8,15,249,304,336,346,424,459,467,510],factor:[1,3,6,12,17,23,27,31,34,35,39,41,46,47,59,60,61,76,95,99,112,119,126,127,130,152,172,177,180,184,195,202,203,206,207,211,212,220,225,229,232,233,239,247,252,255,257,258,270,272,273,277,301,305,309,317,319,322,325,327,336,340,344,351,352,353,357,368,379,381,388,394,396,397,400,401,403,405,410,411,412,414,415,419,424,427,431,432,444,447,449,451,452,453,454,460,462,469,478,484,495,498,501,502,507,510,512,513,516,519,524,525],factori:[3,496],factoriz:378,fail:[3,9,11,12,61,182,229,233,378,387,389,412,460,496],failur:[133,464,497,525],fairli:[11,449,507,512,520],faken:77,falcon:252,fall:[3,6,207,222,304,496,525],fals:[94,359,467,525],fame:8,famili:[486,495],familiar:[0,11,520],fan:457,far:[3,6,12,16,59,61,63,94,203,204,207,208,225,226,227,229,233,272,299,317,318,336,353,364,368,385,389,390,485,496,498,503,516],farago:255,farrel:[481,483],farther:203,fashion:[6,8,41,75,178,207,210,211,212,217,225,227,231,233,247,249,253,269,270,272,274,275,276,277,278,279,280,289,292,293,295,296,297,307,308,310,318,324,328,335,338,346,348,352,353,354,356,358,389,427,441,501,510,525,529],fasolino:429,fast:[6,7,9,12,13,15,16,39,203,204,231,283,308,319,349,378,379,402,441,442,447,477,479,480,500,505,507,516,526,530],faster:[1,6,9,11,12,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,41,43,45,46,47,48,49,51,53,54,56,63,65,115,123,155,165,184,185,187,188,189,190,192,193,195,196,199,203,204,207,213,224,225,232,240,246,250,254,255,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,305,309,310,311,318,321,322,336,343,345,348,352,356,362,364,365,367,368,371,373,378,379,391,392,394,395,396,398,400,401,402,403,404,405,406,407,408,409,410,413,414,417,418,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,445,450,453,454,456,460,461,462,469,477,478,479,481,482,483,484,486,488,489,490,493,501,507,511,519],fastest:[1,6,16,166,348,349,394,495],fatal:[3,515],fault:[74,460],faulti:12,fava:423,favor:228,favorit:7,fbmc:343,fcc:[2,3,6,7,66,74,77,99,117,210],fcm:[289,525],fcold:239,fdirect:236,fdotr:428,fdt:[2,9,241,242,243,319,323],fdti:95,fe2:177,fe3:177,fe_md_boundari:216,featu:8,featur:[0,3,5,6],fecr:417,feedback:[7,231,252],feel:[7,252,253,261,299,357,359,389,449],fehlberg:319,felling:446,felt:357,femtosecond:524,fene:[2,3,6,7,10,15,44],fennel:[410,432],fep:[0,2],ferguson:[6,184,510],fermi:[1,9,10,12,14,164,394,483],fermion:419,fernando:443,ferrand:[9,13],few:[1,3,4,5,6,7,9,10,11,12,13,17,39,65,208,218,219,220,222,223,239,256,272,304,307,309,322,350,378,387,388,389,396,467,495,498,503,507,509,517,525,528],fewer:[1,3,11,14,15,63,261,507],fewest:3,fextern:245,feynman:301,fff:496,ffield:[409,420,459,460,467],fflag1:206,fflag2:206,ffmpeg:[3,12,206],ffplai:206,fft:[1,3,7,9,11,12,14,96,120,121,153,300,378,379,507],fft_inc:[12,379],fft_lib:12,fft_path:12,fftbench:[378,517],fftw2:12,fftw3:12,fftw:[9,12],fhg:[7,9],fhot:239,ficiti:476,fictiti:[6,213,214,238,245,249,301,317,410,432,436,476],field1:[499,503],field2:499,field:[0,2,3,5],fifth:[6,332,421,453],figshar:299,figur:[1,3,8,12,15,308,495,496,520],fij:413,file0:299,file1:[11,13,243,299,347,361,388,503,505,509],file2:[11,13,243,347,361,388,503,505,509],file:[0,1,2,3,4],file_from:205,filen:388,filenam:[3,12,13,15,37,41,56,199,203,204,206,207,208,216,219,220,221,222,223,225,230,242,243,299,303,306,309,310,311,314,315,318,319,320,347,348,375,376,377,388,389,395,396,400,410,417,418,420,421,429,444,445,446,451,452,453,457,458,459,460,467,468,478,479,480,481,482,483,486,494,495,496,499,500,505,509,516,525,528,529,530],filennam:505,filep:[3,203,204,207,500,505,530],filepo:315,fill:[7,9,178,206,304,348,381,390,400,447,460,501,520],filter:[207,216],final_integr:8,final_integrate_respa:8,finchham:[6,160,412],find:[0,3,4,6,7,8,9,11,12,13,15,37,39,56,63,75,77,95,128,181,199,208,217,228,229,231,242,243,244,247,271,299,304,305,313,317,385,387,389,390,410,427,432,436,444,451,452,467,477,479,480,519,520,525],find_custom:8,fine:[15,16,182,213,238,346,390,394,520,525],finer:[152,178,525],finest:378,finger:[178,202,269,501],finish:[6,11,41,225,361,375,377,378,391,393,394,485,503,525,526],finit:[0,3,4],finni:[7,417,477],finverse:236,fiorin:[9,230],fire:[2,3,210],firebrick:207,first:[0,1,2,3,5,6,8,9,10,11,12,14,15,16,20,37,39,41,42,45,46,54,56,59,61,63,64,74,75,87,96,99,113,114,115,117,123,127,128,139,142,145,146,150,153,163,166,172,174,176,177,179,180,181,185,199,203,204,205,206,207,208,210,211,219,220,222,223,225,228,231,232,242,243,247,248,253,258,269,270,271,272,299,301,306,307,308,310,315,318,322,324,332,333,334,336,337,338,345,346,347,348,350,359,361,362,369,381,387,388,389,390,393,394,395,396,399,400,401,403,405,407,409,410,417,419,420,421,424,425,427,428,429,430,431,432,436,441,442,444,446,447,449,451,452,453,457,459,460,467,468,476,478,479,480,481,482,483,486,490,493,494,495,496,498,499,500,503,505,507,510,511,512,515,516,519,520,525,526,527,528,530],fischer:[6,9,18,19,184,405,510],fit:[3,6,9,12,37,56,199,242,317,336,396,400,429,444,449,451,452,472,479,480,482,506,520,525],five:[77,164,308,388,400,445,498,512],fix:[0,1],fix_deposit:3,fix_flux:216,fix_heat:239,fix_id:[3,229,270,272,274,275,276,277,278,279,280,305,308],fix_manifoldforc:520,fix_modifi:[2,3,6,8,120,121,160,163,210],fix_nh:8,fix_nv:520,fix_poem:3,fix_pour:3,fix_qeq:3,fix_rattl:322,fix_reax_bond:459,fix_saed_vtk:320,fix_setforc:8,fix_shak:322,fix_srd:3,fixedpoint:[229,272],fixextern:245,fixid:[206,216],fji:413,flag1:[235,392],flag2:[235,392],flag:[3,8,9,11,12,14,15,16,38,40,58,69,78,79,86,87,94,97,98,103,113,114,116,129,130,173,177,181,200,203,204,206,207,208,223,228,230,235,252,255,259,261,268,269,300,307,318,332,335,336,343,347,356,359,374,376,379,388,392,393,394,396,426,431,444,447,476,491,493,495,496,498,499,500,502,503,504,508,520,525],flag_buck:404,flag_coul:[404,413,436],flag_lj:[413,436],flagfld:[402,441,442],flaghi:[3,402,441,442],flaglog:[402,441,442],flagn:235,flagvf:[402,441,442],flat:[6,15,348,353,354,358],flavor:[2,7,12],fld:[353,441,442],flen:397,flex_press:397,flexibl:[3,6,8,179,206,219,230,249,273,344,351,419,482,516],flip:[3,6,232,272,355,356],floor:525,flop:12,floralwhit:207,flow:[4,5],fluctuat:[6,66,95,229,247,248,255,258,272,277,299,300,305,323,346,348,371,415],fluid:[2,6,7,9,10,40,69,79,86,96,103,116,127,128,158,173,175,229,232,250],fluid_veloc:262,flush:[3,207,515],flux:[2,3,6,65],flv:206,fly:[7,9,12,41,206,210,216,221,233,236,318,322,349,400,447,516,519],fmackai:9,fmag:234,fmass:301,fmax:[387,516],fmomentum:236,fmsec:[2,207,255,256,269,272,305,318,339,340,507,518,524,526],fname:377,fno:[9,15],fnorm:[387,516],fnpt:236,fnve:239,fnvt:236,foce:427,fock:397,focu:322,fogarti:[9,311,460],foil:[152,299,468],fold:[15,334,507],folk:7,follow:[0,1,2,3,6,7,8,9,10,11,12,13,14,15,16,17,18,19,22,23,24,25,26,27,28,29,30,31,34,35,37,40,41,42,43,45,46,47,48,49,51,53,54,56,61,65,66,74,75,77,88,99,100,106,107,117,124,127,128,131,152,153,156,157,158,164,166,171,174,176,178,179,184,187,188,189,190,192,193,195,196,197,199,203,205,206,207,210,216,217,218,219,220,221,222,223,225,230,231,232,233,236,237,241,242,243,245,247,248,249,252,254,255,256,258,261,270,272,277,278,279,280,292,293,295,297,300,301,303,306,307,308,309,311,313,315,317,318,319,320,322,338,339,340,341,344,345,346,347,348,350,351,359,360,364,365,366,367,368,371,373,376,381,384,387,388,389,394,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,411,412,413,414,415,416,417,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,448,449,450,451,452,453,454,456,457,458,459,460,461,462,464,466,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,484,485,486,488,489,490,491,493,495,496,498,499,501,503,505,506,507,510,512,513,514,519,520,525,526,529],foo:[4,8,11,12,203,206,245,319,496,509,525],foo_species:319,foot:6,footprint:[12,394],fopenmp:[9,17],forc:[0,1,2,3,5],force_uvm:16,forceatom:261,forcefield:[317,426],forcegroup:258,forcezero:385,ford:413,forestgreen:207,forev:75,forget:[256,519],forgiv:272,fork:[12,203,520],form:[2,3,6,8,12,18,21,44,54,57,65,69,78,79,81,86,87,95,97,98,100,103,113,114,116,127,128,152,153,172,173,182,186,203,207,210,211,212,218,219,220,222,223,227,231,248,249,255,257,261,269,295,300,311,313,317,318,319,348,353,357,362,363,366,371,384,386,388,389,396,397,400,407,415,417,419,422,426,427,431,443,444,446,447,451,452,453,454,457,459,460,461,467,468,469,477,479,481,482,483,489,492,495,496,498,503,508,515,516,519,525],formal:[6,82,85,99,248,249,255,272,301,336,344,467],format:[2,3,6,7,8,9,12,13,21,37,41,44,56,57,71,81,186,199,203,204,205,206,207,208,219,222,223,225,227,242,243,300,303,307,309,311,314,318,319,320,331,347,348,359,360,363,384,388,389,395,396,400,407,417,420,421,431,444,446,451,452,458,459,460,462,468,479,480,486,487,495,496,498,499,500,503,514,515,516,525,527,528],formation:243,former:[6,12,39,41,207,225,348,352,400,402,504,510,525],formerli:[7,13],formul:[1,6,9,40,66,153,213,238,255,272,295,309,311,317,322,347,378,396,400,417,419,423,444,456],formula:[2,3,6,7,13,20,21,36,44,54,55,74,77,95,97,98,99,104,106,107,116,123,130,131,153,155,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,177,183,185,186,198,202,203,211,212,213,214,219,220,221,222,223,224,231,232,238,250,251,253,255,256,269,299,300,306,315,321,329,334,336,339,340,341,350,353,354,356,358,359,361,362,363,365,372,381,388,396,397,399,400,405,406,407,408,413,414,417,418,423,424,425,426,428,431,432,434,435,436,438,439,441,442,444,448,449,450,461,462,469,477,478,479,481,482,483,486,488,489,494,498,501,508,515,516,524,525,526],forth:[1,6,11,12,13,14,393,496,501,505],fortran:[3,6,9,11,12,13,245,417,427,444,459,460],fortun:8,forward:[3,8,95,377,389,394],foster:[400,456,457],foul:181,found:[3,6,9,12,77,172,203,228,230,239,247,252,258,264,300,343,349,361,377,390,407,410,413,493,499,500,515],four:[6,11,54,87,113,114,152,174,231,270,348,371,388,389,447,493],fourier:[2,6,12],fourth:[6,15,115,317,332,343,405,421,453,467],fox:[6,130,184,475,510],fphi:[37,56,479,480],fpic:12,fplo:[37,56,479,480],fprime:[479,480],fqdn:254,fqq:413,fraction:[1,3,6,8,12,15,39,41,85,120,153,181,202,206,207,217,226,227,228,229,270,304,308,315,316,319,336,341,342,381,389,394,400,402,421,424,441,442,503,508],fragment:[42,252,315],fraig:42,frame:[91,152,207,216,270,308,355,423],framer:[206,207],framework:[5,249,395,468],franc:9,frattl:239,fraunhof:9,free:[5,6,7,9,13,28,62,65,74,95,172,211,212,299,336,345,346,347,348,386,389,397,419,440,447,450,457,489,495],freedom:[3,6,8,104,106,107,109,111,112,123,155,156,157,158,159,160,161,162,163,164,165,166,167,168,170,171,219,228,236,247,249,255,256,261,272,273,277,278,279,280,292,293,295,297,301,303,318,322,339,340,341,346,387,413,516,519,526],freeli:[0,6,7,12,156,157,171,176,206],freez:[2,3,6,210,215],frenkel:[6,239,247,346],freq:215,frequenc:[3,6,15,39,113,207,221,286,300,301,308,313,319,376,414,419,460,467,493,507,512,525,529],frequent:[3,66,70,74,76,77,81,96,100,117,152,207,226,227,239,244,344,351,449,484,505,517],fri:[270,308],friction:[4,5,6,9,10,42,210,249,255,308,313,318,348,352,354,424,508],friedrich:325,from:[0,1,2,3,5],front:[270,308,355],frontend:[206,312],frozen:[6,123,182,246,248,256,390,422],fs2:[6,99],fscale:252,fstr:525,fstring:496,fstyle:354,ftol:[387,389,493,512],fuchsia:207,fuction:410,fudg:322,fugac:247,fugacity_coeff:247,fulfil:6,full:[1,2,3,6,9,12,15,16,37,39,40,99,206,220,221,230,239,258,299,319,378,379,394,400,417,419,420,423,460,484,498,500,505,506,510,512,517,519,529],full_energi:[3,247],fuller:387,fulli:[3,6,82,249,254,299,387,389,410,457,458,498,520,527,528],fulton:417,fumi:401,func:[496,525],funcfl:417,functionaliri:230,fund:[0,7],fundament:[336,524],funnel_flow:331,funrol:447,further:[3,4,6,8,12,13,63,65,67,72,75,83,94,101,115,118,127,206,207,210,219,222,223,226,233,237,258,262,301,309,320,323,325,336,348,350,359,379,385,387,388,389,390,395,399,409,447,467,493,512,513,525],furthermor:[26,187,239,319,415,419],furthest:63,futher:3,futur:0,g_ewald:3,g_ewald_6:3,g_ewald_disp:3,g_jik:457,g_p:348,ga3:177,gaa:400,gahler:386,gai:[3,423,477],gain:[15,231,343],gainsboro:207,galindo:448,game:252,gamma0:28,gamma:[3,6,28,255,258,262,300,308,309,311,313,352,414,415,418,423,444,448,471,474,475,478,481,483,486,516],gamma_:[3,348,354],gamma_ijk:481,gamma_n:[354,424],gamma_p:[3,348],gamma_t:[354,424],gammaa:448,gammafactor:258,gammar:448,gan:[457,478,481,483,486],gan_sw:457,gan_tersoff:457,ganzenmuel:[7,9],ganzenmul:9,gao:[6,19,184,405,510],gap:[199,441,442,458,468],gap_2014_5_8_60_17_10_38_466:458,gap_exampl:458,gaseou:7,gass:247,gather:[11,506],gather_atom:11,gather_scatter_loop_unrol:9,gathert_atom:11,gauch:190,gaug:12,gauss:[2,3,118,172,211,212,411],gaussian:[6,40,65,99,113,115,233,248,249,255,301,317,336,340,358,378,414,416,419,422,458,477,493,525,526],gave:[3,449],gavhan:15,gaybern:[2,3,6,7,9,15,156,387],gcc:16,gcmc:[2,3,7,9,210,217],gcores:236,gd3:177,gdot:442,gdrudes:236,ge4:177,gec:[481,483],gen:[272,273],gener:0,genom:7,gentler:[353,356,358],gentli:418,geom:[6,378,416,493,526],geometr:[3,6,7,8,42,59,61,75,86,129,168,169,178,180,203,207,213,224,225,233,238,251,272,278,279,280,292,293,295,297,318,321,329,339,340,341,357,359,378,381,389,399,402,406,408,410,413,419,421,423,425,432,433,434,435,436,437,438,439,440,441,442,443,448,449,452,461,469,480,484,485,488,489,491,498,501,508,516,525],geometri:[3,6,7,9,13,24,38,41,58,75,86,166,178,200,225,226,227,229,233,253,323,374,381,449,498,501],georg:[7,9],georgia:13,gerar:525,gerber:440,germani:9,germann:[277,434,493,512],germano:423,gerolf:13,get:[0,1,3,6,8,9,11],get_natom:[11,496],get_rank:11,get_siz:11,getenv:525,gettimeofdai:12,gewald:[6,378],gezelt:[410,432],gflop:12,gflp:12,gfortran:9,ghost:[3,6,7,12,15,60,63,64,77,176,181,182,229,232,256,272,307,318,320,376,378,390,394,414,415,416,419,424,431,491,503,508,519],ghostwhit:207,giacomo:9,gif:[4,206],gifsicl:206,gigabit:17,giko:2,gikot:2,gillan:468,gingold:[471,472,474],gio:2,git:[7,12,520],github:[8,13,16,230,249,254,458],give:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,54,75,100,117,124,158,161,165,178,203,204,207,213,215,219,220,222,223,229,232,249,272,290,295,299,300,305,313,315,318,350,378,379,387,390,391,394,396,400,416,419,426,427,444,447,449,461,481,482,483,493,495,496,498,508,512,519,526],given:[3,4,5,6,7,9,11,12,15,16,21,26,36,44,55,63,65,66,70,75,117,124,135,136,137,139,140,143,144,145,146,147,148,149,150,151,152,153,172,176,180,186,187,198,199,203,204,205,207,210,217,219,221,226,227,229,232,233,237,239,247,248,249,250,252,258,264,266,269,271,272,277,298,299,300,301,308,309,315,317,319,322,331,332,334,336,338,343,348,349,352,353,354,357,363,372,378,379,394,395,396,400,401,403,404,406,407,408,409,410,411,414,415,416,417,419,420,421,423,424,426,432,433,434,436,444,445,446,447,448,449,450,451,452,453,454,457,461,462,464,466,467,468,477,490,493,496,498,500,501,507,508,512,524,529,530],gjf:255,gjwagn:7,gkio:2,gko:2,gkot:2,gld:[2,3,210],gle4md:[249,254],gle:2,glitch:3,glob:509,global:3,glosli:[379,447],glotzer:[318,414],glue:11,gmail:[7,9,13],gmake:[12,16],gmask:[3,525],gnu:[0,7,9,12,16],gnuplot:[11,13],goal:[5,12,39,231],goddard:[6,9,24,309,310,311,373,419,426,459,460,510],goe:[12,54,152,178,202,239,269,328,387,390,413,418,425,434,437,469,490,501,505],gold:[74,207],goldenrod:207,goldman:308,gone:3,good:[1,3,6,10,12,15,16,41,77,130,176,177,225,231,255,270,272,305,309,315,322,343,378,389,390,395,408,416,417,447,449,479,480,486,493,507,512,516,520],googl:252,gordan:152,gordon:6,got:[2,520],gould:[6,184,510],gov:[0,7,9,13,395,417,420,524],govern:258,gpa:396,gpl:[0,7,8,12],gpt:[9,447],gpu:[1,2,3,4,7],gpuid:394,grab:[3,6],gracefulli:3,grad:[6,9,213,238,271],gradient:[6,7,8,12,13,134,139,229,238,239,250,251,271,295,310,344,348,385,386,389,442,451,452,460,479,480],gradient_correction:466,graduat:303,graft:228,grai:207,grain:[5,6,7,9,10,28,35,40,54,70,178,181,190,210,243,299,303,318,319,336,421,425,447,452,462,480,507,510],gram:[219,417,524],grama:[9,311,460],gran:[2,3,6,9,210,353],grana:383,grand:[3,9,210,217,247],granflow:5,granular:[0,3,4,5],graph:11,graphen:502,graphic:11,grasp:5,gravit:250,graviti:[2,3,6,210,217,247],grdient:216,great:[3,13,308,520],greater:[1,3,10,63,75,94,176,207,229,248,272,299,341,355,394,399,401,403,404,430,449,493,495,498,501,507,512,525,526],greathous:13,greatli:[130,239,512],green:[2,6,99,142,143,206,207,300,301,344,400,520],green_kubo:6,greenyellow:207,greffet:313,greg:[7,9],grest:[45,46,228,336,379,404,424,436,510],grew:75,grid:[3,12,41,64,130,166,177,180,204,225,258,313,336,348,349,376,378,379,492,495,498,500,502,507],grigera:6,grime:40,grmask:[3,525],gromac:[2,3,360,387],gromacs:[6,7,203,387,425,477],gronbech:[255,378],groot:414,ground:[6,88,89,241,323,419],group1:[160,181,390],group2:[96,154,160,179,181,390],group2ndx:2,group:[2,3,5,6,7,8,9,11,12,13,15,39,41,61,63,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],group_id:11,groupbig:336,groupid1:[261,318],groupid2:[261,318],groupid:498,groupnam:390,grouptyp:247,grow:[3,6,8,215,232,233,253,255,272,299,319,350,424,498,510],grow_arrai:8,grow_reset:8,growth:[6,343],grueneisen:9,gsmooth_factor:444,gstyle:[3,495],gtl:7,guarante:[68,73,84,102,119,126,178,181,203,237,309,377,381,508],guess:[3,203,305,499,520],gui:[7,11,520],guid:[1,16,40,82,85,109,110,111,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,210,265,266,325,326,327,328,331,349,456,464,466,470,471,472,473,474,475,508],guidelin:[1,8,14,16,17,18,378,479,480],guidlin:16,gullet:444,gulp:6,gumbsch:386,gunnel:447,gunsteren:[305,339,440],gunzenmul:7,gunzip:12,guo:[6,19,184,190,405,510],gwald:3,gyrat:[2,3,6,65],gzip:[3,12,203,204,206,207,347,389,498,499,503],h12:423,h2o:[40,388,421,452,480],h5cc:205,h5md1:205,haak:[305,339],had:[3,6,11,13,61,65,128,129,203,204,207,208,218,219,220,222,223,228,229,248,249,251,255,256,257,270,272,274,275,276,277,278,279,280,292,293,295,297,304,305,336,339,340,341,348,414,416,424,476,500,504,507,513,516],hafskjold:[6,239],half:[1,3,6,8,9,15,16,39,41,60,61,180,206,218,225,232,255,272,348,353,357,390,394,397,400,408,419,447,460,463,465,498,500,501,508,519],halfwai:[41,206,207,430,520],halperin:100,halsei:424,halt:[41,207,225,239,251,361,515],halv:206,ham:[37,56],hamak:[353,357,408,461],hamilton:74,hamiltonian:[210,249,272,273,340,419,507],hammond:[378,379],han:417,hand:[3,6,9,18,54,74,129,154,178,196,202,206,258,269,319,381,410,419,498,501,508,511],handl:[3,15,206,230,288,311,394,397,419,441,460,486,496,512,519],hang:[3,12,495,496],happen:[3,6,8,12,14,17,63,127,182,207,217,220,390,394,496,499,506],happi:8,haptic:252,hara:482,hard:[1,261,311,317,318,416,459,467,501],harden:[9,469],harder:[353,357,519],hardi:[216,256,378,379,519],hardwar:[1,9,10,12,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,43,45,46,47,48,49,51,53,54,56,123,155,165,184,185,187,188,189,190,192,193,195,196,199,213,224,232,240,246,250,255,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,310,311,318,321,322,356,362,364,365,367,368,371,373,378,379,394,395,396,398,401,402,403,404,405,406,408,409,410,413,414,417,418,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,445,450,453,454,456,460,461,462,469,478,479,481,482,483,484,486,488,489,490,501,511],hardwir:[3,16,354],hardy2:379,harm:397,harmon:[2,3,4,6,7,8,15,21],harmonic_1:57,harmonic_fix_wal:442,harpertown:17,harrison:396,hart:336,hartre:[397,417,419,447,524],hasan:9,hash:[39,498],hassl:317,hat:[6,271],have:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,34,37,39,40,41,42,43,45,46,47,48,49,51,53,54,56,59,61,65,66,68,69,70,73,74,75,76,77,79,81,86,87,94,98,99,100,103,113,114,115,116,117,123,124,125,126,127,142,152,153,154,155,156,157,158,159,161,165,167,170,171,173,174,175,176,178,179,180,181,182,184,185,187,188,189,190,192,193,195,196,199,202,203,204,205,206,207,208,213,215,217,218,219,220,223,224,225,226,227,228,229,231,232,233,238,240,244,246,247,248,249,250,251,252,253,255,256,257,258,261,264,267,269,270,272,274,275,276,277,278,279,280,281,282,286,290,292,293,295,296,297,299,301,303,304,305,307,308,309,310,311,313,316,318,321,322,329,331,336,337,339,340,341,342,343,347,348,349,350,352,353,354,355,356,357,358,359,360,361,362,364,365,367,368,369,371,373,378,379,381,385,386,387,388,389,390,391,394,395,396,397,398,400,401,402,403,404,405,406,408,409,410,413,414,415,416,417,418,420,422,423,424,425,426,427,428,432,433,434,435,436,437,438,439,440,441,442,444,445,446,447,449,450,451,452,453,454,456,457,459,460,461,462,466,467,469,478,479,480,481,482,483,484,485,486,488,489,490,492,493,495,496,498,499,500,501,502,503,504,505,506,507,508,510,512,513,515,516,517,519,520,524,525,526,528,529,530],haven:496,hayoun:313,hayr:255,hbcut:459,hbnewflag:459,hbond:[2,3,6,9],hbond_cutoff:460,hcn:319,hcp:[66,70,74,77,381,444],hdf5:[9,205],he1:177,head:[6,20,185,362,396,422,426,459,460,513,520],header:[3,6,7,8,12,179,203,206,207,208,219,220,222,223,270,308,315,320,348,388,395,400,417,476,495,498,508,515],heal:507,heat:[2,3,6,9,40,65],heatconduct:2,heavi:[307,336],heavili:[41,225],heavisid:348,hebenstreit:15,hecht:336,heenen:9,height:[206,233,304,389,422],held:[6,75,319,336,389,424],helic:190,helium:398,helix:[2,7,186],hello:496,help:[3,8,12,14,15,16,17,18,203,229,232,270,299,376,400,450,481,483,520,528],henc:[1,3,13,19,20,25,31,34,35,74,75,119,158,160,168,185,219,272,311,336,352,353,357,359,362,364,368,371,379,410,422,440,457],henderson:53,hendrik:9,henin:[9,230],henkelman1:[271,389],henkelman2:[271,389],henkelman:[271,386,389],here:[1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,21,36,40,41,44,55,65,68,71,73,74,75,84,102,119,129,130,158,176,177,186,189,198,203,206,207,210,219,225,228,231,232,247,248,256,258,299,308,311,313,320,348,353,356,358,359,361,363,372,377,383,387,389,393,394,396,397,400,407,420,423,426,427,431,443,457,461,464,466,467,477,479,480,490,496,500,503,519,520,525],herist:349,herrmann:336,hertizian:354,hertz:[2,9,132,354],hertzian:[6,354,424,477],hertzsch:424,hess:378,hessian:[5,386],heterogen:115,heurist:[349,499],hex:[3,178,239,251,381],hexagon:[70,100,444],hexahedron:204,hexat:100,hexord:[2,3,65],hey:[121,153],hf4:177,hfo:409,hftn:[264,288,294,386,387,389],hg1:177,hg2:177,hgrid:336,hibb:301,hidden:[16,496],hienergi:359,hierarch:[7,507],hierarchi:[379,404,405,432,433,436,443,448,507],higdon:[9,441,442],high:[1,3,6,7,9,12,15,18,41,117,199,203,206,207,225,229,237,256,270,344,348,351,379,386,387,394,396,400,419,423,447,451,452,461,479,480,490,495,507,512,515,519],higher:[1,15,152,181,207,219,223,226,227,233,239,253,304,313,343,356,358,387,396,419,428,467,525],highest:[233,239,361,388,389,525],highli:[3,6,7,15,178,206,232,255,272,286,308,318,385,387,419,493,512],highlight:[4,6,7,13],hight:422,hilger:[378,379],hill:301,hill_height:13,him:9,hing:9,hint:12,histo:[2,3,6,65,124,177,210,218,219,220],histogram:[1,3,6,12,65,127,176,210,220,222,223],histor:420,histori:[0,2,3],hit:[3,336,355],hmaktulga:[7,9],ho3:177,hoc:371,hocknei:[378,379],hofl:205,hoh:[6,410,432,436],hold:[6,32,61,75,191,219,232,263,302,317,318,332,387,389,424,440,489,509],holdem:317,holder2:379,holder:[378,379],hole:332,holian:[277,434],holm:[299,379],holonom:347,home:[11,12,208],homebrew:12,homepag:[204,206,252],homogen:[295,449],hone:301,honeydew:207,honor:208,hood:447,hook:[2,6,9,11,252,354],hookean:424,hoomd:208,hoover:[6,7,8,168,210,236,255,256,272,273,274,275,276,277,278,279,280,292,293,294,295,296,297,301,305,313,318,339,340,341,346,414,519],hop:[228,389,400,467],hope:[5,13,16,41,42,225,506],hopefulli:[8,387],horizon:456,horn:6,host:[3,12,15,16,230,394],hot:[6,251,273],hotpink:207,hottest:344,hour:[12,517],hourglass:[2,9],hove:444,how:[0,1,2,3,4],howev:[1,2,3,6,7,9,11,12,14,15,16,35,39,41,75,96,99,114,130,152,177,199,203,206,207,220,221,223,225,228,229,231,233,236,247,248,249,254,255,256,257,258,261,272,299,301,304,305,307,308,313,318,320,336,337,339,340,343,344,348,349,350,351,352,379,381,384,385,389,394,406,408,417,418,424,427,444,447,451,452,455,457,466,478,479,480,483,493,495,496,499,500,506,512,515,516,519,520,525,526],howto:[6,9,65,75,155,156,157,159,161,164,165,166,167,168,170,171,203,210,255,256,272,305,339,340,341,410,426,432,436,526],hoyt:216,hpc:[1,14],hsw:16,htm:417,html:[0,8,9,11,12,14,67,154,254,422,442,507,508],htmldoc:0,htst:512,http:[0,6,7,9,11,13,14,230,249,252,254,299,395,417,441,458,459,460,520],https:520,htype:[410,432,436,440],hubbard:411,huge:[10,12,180,286,336,498,503,515,520],huggin:[7,401,403,477],hugh:216,hugoniostat:[4,9,210,277],hugoniot:[270,277,308],hull:176,hummer:378,hundr:[7,239],hura:6,hwat:307,hwloc:[12,16],hybrid:[1,2,3,6,7,12,15,17,21],hydrat:422,hydrocarbon:[396,409,419],hydrodyanm:40,hydrodynam:[7,9,40,109,111,258,260,261,262,402,441,442,464,466,477,508],hydrogen:[3,6,7,9,244,307,313,396,400,410,419,426,432,436,440,459,460,477,498,507,519],hydrostat:[3,9,229,272,277,305,318],hynninen:[411,422],hyoungki:446,hyper:[15,301],hyperbol:411,hyperradiu:383,hyperspher:152,hyperthread:[16,394],i_0:348,i_1:457,i_csid:6,i_flag1:307,i_mpi_pin_domain:15,i_mpi_shm_lmt:15,i_myflag1:307,i_myflag2:307,i_n:457,i_nam:[124,203,307,338,508],ialloi:444,iatom1:[102,126],iatom2:[102,126],iatom3:[102,126],iatom4:[102,126],ibar:444,ibead:301,ibm:[203,378,447],icc:[9,12,447],ice:6,icm:[252,520],icms:[9,252,520],ico:66,icosohedr:77,ictp:13,id1:[318,389,431,498,501],id2:[318,324,332,389,431,498,501],id_press:[229,270,272,274,275,276,277,278,279,280,305],id_temp:[228,229,270,272,274,275,276,277,278,279,280,292,293,295,297,305,339,340,341],idea:[1,3,6,11,12,41,153,206,207,225,231,253,299,324,336,344,379,449,506,519,520],ideal:[6,9,40,77,127,247,299,381,441,471,520],idealga:2,idealiz:6,idealli:[12,134,236,519],ident:[1,3,9,12,15,39,40,75,152,203,207,222,229,230,248,249,255,256,269,272,299,301,305,313,315,318,379,388,389,394,401,403,410,412,417,432,434,440,453,459,460,467,468,486,490,493,496,499,512,524,525,526,529],identi:394,identif:70,identifi:[1,3,6,12,37,40,56,74,154,176,178,199,207,242,243,307,315,336,359,426,431,444,451,452,479,480,493,495,498,501,512,513,515,517],idflag:304,idl:[17,512],idn:[318,389],idr:525,ids:[12,499],ielement:444,ieni:13,ifdef:[8,12],iff:256,iffp:496,ifort:9,ignor:[3,6,11,15,38,41,42,58,63,67,72,75,83,91,95,101,108,118,131,182,200,203,204,206,207,211,212,220,221,222,223,225,229,230,231,232,233,247,250,254,255,269,272,277,283,289,304,305,306,307,317,318,320,336,339,340,341,347,348,350,353,357,358,359,369,374,380,384,388,389,394,395,406,407,408,417,418,420,423,430,431,444,451,452,453,457,461,478,479,480,481,482,483,485,486,491,493,495,498,499,503,508,510,512,515,525],ignore:3,ihle:336,iii:[6,9,24,309,311,373,426,510],ijj:486,ijk:[367,371,373,400,457,486,495],ijl:371,ikeshoji:[6,239],ikj:486,iko:2,ill:[158,168,219,309],illeg:3,illegal:3,illinoi:[252,378,379,441],illog:496,illustr:[1,4,6,8,9,11,12,15,16,17,18,299,301,389,427,496,519,525],ilmenau:7,ilya:[7,9],imag:[2,3,4,6,11,12,42,69,75,78,79,86,87,97,98,103,113,114,116,124,129,130,173,178],image2pip:206,image:[3,12,203,206,320],imageint:3,imagemagick:[4,206],imagin:[332,347,400,418,427,428,430,445,446,453,457,478,481,482,483,486,510],imaginari:[6,100,247,301,498],imbal:[1,12,41,225,319,394,517],imbalanc:[41,225],imbu:336,imd:2,img:206,immedi:[0,2,3,8,12,178,226,227,233,319,322,337,338,355,495,496,498,500,512,525,529],immediat:[331,525],immens:3,immers:[258,318],impact:[1,4,6,8,9,237,343,396,517],impart:[3,6,250,336,358],impei:[6,432],implement:[1,3,6,8,9,12,16,17,26,82,88,89,95,117,130,160,166,177,178,186,187,198,219,230,231,235,239,241,249,251,252,255,258,260,261,262,270,272,295,298,300,301,307,308,311,312,313,319,322,323,324,336,343,348,352,371,377,378,379,387,389,394,395,397,400,409,410,412,414,415,417,418,419,427,432,436,440,444,456,459,460,461,481,483,495,496,507,512,519,525,527,528],impli:[3,6,40,61,95,153,202,206,211,212,213,232,238,255,317,339,341,342,378,381,407,496],implicit:[2,3,6,7,248,249,255,283,318,352,353],implicitli:8,implict:411,imporop:388,important:346,impos:[2,6,75,123,167,202,210,213,214,224,238,239,240,245,250,253,262,263,271,286,299,302,321,329,332,333,335,336,343,344,345,346,351,352,353,356,357,358,387,389,391,492,506,517],impose:250,imposs:[1,3,307,498],improp:[0,2,3,7],improper:[3,8,15,363,369,371,372,388,498],improper_coeff:[2,3,362],improper_styl:0,impropercoeff:[3,374],impropertyp:227,imprortant:107,improtant:[211,212],improv:[0,1,9,15,39,41,207,225,239,251,272,300,394,426,432,447,449,460,478,482],imrop:370,in3:177,inaccur:[1,3,6,181,270,378],inaccuraci:357,inact:[426,516,517],inappropri:178,incid:[130,177,233],includ:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,34,35,36,37,39,40,41,43,44,45,46,47,48,49,51,53,54,55,56,57,61,63,65,68,69,71,73,74,76,78,79,81,84,86,87,91,95,96,97,98,99,100,102,103,104,107,108,113,114,115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,152,153,154,155,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,175,176,177,181,182,184,185,186,187,188,189,190,192,193,195,196,198,199,202,203,204,206,207,208,210,211,212,213,214,216,217,218,219,220,221,222,223,224,228,229,232,233,234,236,238,240,245,246,247,248,250,251,252,253,255,256,258,259,261,262,267,268,272,273,274,275,276,277,278,279,280,281,282,290,292,293,295,296,297,299,300,301,303,304,307,308,310,311,313,314,315,317,318,319,320,321,322,324,329,332,333,335,336,337,339,340,341,343,346,347,348,349,350,352,353,354,356,357,358,359,361,362,363,364,365,367,368,371,372,373],include:[12,375],includelink:9,includig:[361,377],inclus:[0,3],inclusion:12,incom:252,incompat:[3,11,264,288,294,428],incomplet:[3,11,498],incompress:[273,419],inconsist:[3,182,228,499],inconveni:381,incorpor:[197,308,400,411,520],incorrect:[3,161,255,444],incorrectli:[3,381,424,525],increas:[1,3,6,15,17,37,56,59,61,120,130,153,199,203,204,206,207,221,226,227,228,231,232,239,242,243,247,255,305,316,317,318,319,344,347,351,378,379,389,394,396,419,423,451,452,460,479,480,482,496,507,512,525],increasingli:419,increment:[3,11,140,213,214,224,225,233,238,244,272,304,324,325,359,377,393,430,467,493,496,510,512,525],incur:[16,219,244,348,495],inde:161,indefatig:7,indefinit:345,indent:[2,3,4,210,223],independ:[4,6,9,11,12,16,41,61,65,86,99,128,131,164,178,202,210,218,219,220,222,223,225,228,229,230,232,233,248,250,255,256,258,261,272,300,305,309,313,318,320,324,335,346,348,381,424,447,493,496,515,526],indetermin:[203,204,207],index:[0,3,6,8,11,12,37,39,40,56,57,68,71,73,84,102,119,128,129,131,176,199,203,207,218,219,220,222,223,242,243,252,254,301,320,348,359,360,361,384,393,449,451,452,459,460,479,480,487,498,513,516,525],indianr:207,indic:[2,3,6,8,11,12,15,20,40,42,54,67,70,72,78,83,87,88,89,96,97,99,101,113,115,123,126,128,153,155,156,157,158,159,160,161,162,163,165,166,167,168,169,170,171,174,185,199,203,206,211,212,218,219,220,222,223,229,231,272,300,318,348,359,362,371,378,388,390,409,416,420,427,444,447,449,453,459,460,467,481,483,495,497,498,500,516,520,525],indigo:207,indirectli:[6,231,307,525],indistinguish:255,indium:468,individu:[0,1],induc:[0,3],industri:7,ineffici:[3,6,40,66,70,74,76,77,81,100,117,152,166,206,232,272,300,378,391],inelig:217,inerti:442,inertia:[2,3,6,40,42,65,90,91,92,93],inertiai:129,inertiax:129,inertiaz:129,inexpens:[249,507],inf:[2,3,12,351,501],infer:[3,104,106,107,172,213,214,225,226,227,238,252,303,336,344,351,381,407,420,498,510,516],infil:[3,13,318,495],infin:[3,387,503,516],infininti:206,infinit:[3,233,246,253,255,258,300,336,348,354,355,379,381,419,498,502,524],infinitesim:6,inflect:[411,434,477],influenc:[3,9,41,85,160,269,304,378,379,449,481,482,483],inform:[0,1,2,3,6,7,8,9,11,12,13,14,15,16,39,41,42,61,63,64,65,71,96,126,128,129,130,177,178,184,203,204,205,206,207,208,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,236,237,238,239,240,244,245,246,247,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,268,271,281,282,283,284,285,286,287,288,289,290,291,294,298,299,300,302,303,304,305,306,307,309,310,311,312,313,314,315,316,317,318,320,321,322,325,332,333,334,336,337,339,340,341,342,343,344,345,347,350,351,352,353,355,356,357,358,360,376,378,379,382,386,387,388,389,390,392,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,413,414,416,417,418,419,420,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,450,451,452,454,456,457,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,485,486,488,489,490,491,495,496,498,499,500,502,503,505,510,512,513,515,517,525,527,528,529,530],informat:[8,12,499],infrequ:[6,272,414,493,512,517],infti:[411,441,442],ingtegr:400,inher:[378,387,449],inherit:[6,484],inhomogen:[17,348,449],inidividu:387,init:[3,8,316,467],init_fil:348,init_list:8,init_on:8,init_styl:8,initi:[2,3,4,6,7,8,11,12,13,37,39,40,41,56,59,61,64,75,85,87,94,95,113,114,142,174,178,179,180,199,202,203,204,206,207,208,211,212,215,216,220,225,227,228,229,231,232,240,242,243,247,248,252,253,254,255,256,258,263,268,269,270,271,272,277,286,288,300,301,302,307,308,313,316,317,318,319,321,323,333,335,336,338,343,345,346,347,348,349,350,353,354,355,356,358,359,361,378,382,386,387,389,396,397,413,414,416,447,451,452,458,459,460,467,479,480,493,495,496,498,500,501,503,505,506,508,512,513,516,519,525,526,528,530],initial:[2,3,6,87,113,180,525],initial_integr:8,initial_integrate_respa:8,initialis:458,initialt:348,inlclud:11,inlin:496,inner2:[405,425],inner:[3,8,15,57,203,253,361,377,385,386,387,389,393,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,411,413,414,416,417,418,419,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,454,456,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,485,486,487,488,489,490,491,507,512,525],inner_distance_cutoff:426,innergroup:261,innermost:[37,56,75,392,479,480,507],innernod:261,innner:438,inordin:349,inorgan:[6,486],inp:[230,361,468,486],input1:[71,124,125,128,129,131,338],input2:[71,124,125,128,129,131,338],input:[0,1],input_doubl:3,inquir:325,insensit:12,insert:[3,5,7,8,9,12,61,178,210,233,247,253,304,378,468,476,496,502,519],insertion:[3,233,247,304],insid:[2,3,6,8,11,75,129,141,147,178,203,204,207,218,233,234,239,244,247,253,258,261,304,318,336,353,355,356,357,358,359,376,381,496,497,498,500,501,508,525],inside:[258,434,496,512],insight:[6,13],instabl:[258,413,466],instal:[1,3,6,8,9,11,12,14,15,16,176,203,205,206,208,379,389,404,405,428,432,436,440,447,493,499,500,505,513,520,530],install:[0,8],instanc:[6,9,11,211,230,249,355,422,427,449,457,496,519],instantan:[6,65,228,229,231,248,249,272,277,300,305,308,313,315,318,343,504,516],instanti:[6,11,12,216,427,495],instead:[1,3,6,8,11,12,13,15,16,17,40,41,61,63,65,74,75,98,113,128,156,160,182,184,199,203,204,212,219,222,223,225,229,230,247,255,258,261,262,300,306,307,316,318,338,356,376,378,379,382,390,394,403,404,417,431,433,440,444,447,450,460,477,484,493,501,505,512,514,519,525],institut:[9,252,303],instruct:[3,4,6,8,9,10,11,12,13,15,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,43,45,46,47,48,49,51,53,54,56,123,155,165,176,184,185,187,188,189,190,192,193,195,196,199,201,206,213,224,232,240,246,250,255,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,310,311,318,321,322,356,362,364,365,367,368,371,373,379,394,395,396,398,401,402,403,404,405,406,408,409,410,413,414,417,418,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,445,450,453,454,456,460,461,462,469,478,479,481,482,483,484,486,488,489,490,501,507,519],instruction:11,insuffici:[3,6,12],insult:272,insur:[3,6,11,12,16,39,40,63,77,112,114,178,179,199,203,204,206,207,213,226,227,233,238,240,244,245,247,250,255,268,306,307,316,318,336,348,353,357,358,359,361,377,388,390,394,408,423,427,455,461,479,491,495,496,498,499,503,506,507,515,516,525,526],insure:16,int_max:3,inteatom:10,integ:[3,6,8,11,12,39,40,42,66,71,74,75,117,124,126,128,131,152,176,178,181,182,184,188,189,193,197,199,202,203,206,207,217,219,226,227,228,231,233,235,245,247,248,249,252,255,256,257,258,300,303,304,307,308,313,318,319,336,338,340,343,347,348,367,378,381,402,414,415,416,430,444,459,460,464,466,468,493,495,496,497,498,506,507,508,512,515,525,526],integer:[3,498],integr:[2,3,5],integral:[301,451,452],integrate_ulsph:326,intel:[1,2,3,7],intel_coprocessor:15,intel_cpu:12,intel_cpu_intelmpi:15,intel_cpu_mpich:15,intel_cpu_openpmi:15,intel_phi:12,intend:[3,6,8,12,13,35,221,248,458,498],intens:[1,3,6,9,65,69,78,79,86,94,97,98,99,103,113,114,115,116,123,125,127,128,130,131,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,173,174,175,177,210,219,220,222,223,225,226,227,228,237,244,251,261,270,272,277,315,318,320,336,344,348,350,351,515,516,524],intensiv:[65,210,516],intepol:525,inter:[17,42,63,64,158,181,182,203,228,255,257,271,310,318,378,389,400,508,519,525,528,530],interact:[1,3,6,7,8,9,10,11,12,14,16,21,28,32,33,36,39,40,42,44,50,52,54,55,57,59,63,65,68,73,76,81,84,95,96,100,102,117,118,119,121,123,126,127,134,135,136,137,139,140,141,142,143,144,145,147,148,149,150,152,153,154,156,157,171,172,176,179,180,181,182,183,184,186,190,191,194,197,198,203,204,210,211,212,226,227,228,246,247,252,253,255,257,261,286,299,301,303,304,309,311,317,318,319,326,327,336,337,343,348,352,353,354,357,358,363,364,365,366,368,370,372,378,379,387,388,389,390,391,392,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,452,454,455,456,457,460,461,462,464,466,467,468,469,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,493,496,498,500,502,503,507,508,510,515,516,519,528],interatom:[3,4,7,9,10,178,203,271,345,346,395,400,417,419,428,444,447,467,482,525],intercept:130,interchang:[6,231],interconnect:17,interconvert:419,intereract:39,interesect:357,interest:[1,5,7,8,9,11,13,75,177,301,343,346,379,418,442,459,460,496,525],interf:[394,520],interfac:[0,3],interfer:[12,272,396],interg:[6,519],intergr:507,interi:442,interior:[3,6,41,357,501],interlac:444,interleav:[6,178,506],intermedi:[6,12,61,206,271,299,371,389,496,497,506,510],intermix:493,intermolecular:[154,396],intern:[0,2,3,5,6,9,11,15,19,20,23,27,31,34,35,39,40,42,65,88,89,95,109,111,129],internal:[3,206,212,304,525],internal_element_set:216,internal_quadratur:216,internat:[15,130,177,216],internet:254,interpenetr:444,interpentr:[471,472,474],interpol:[6,14,37,56,110,199,206,207,216,242,243,258,299,378,379,389,400,449,451,452,460,473,479,480,481],interpret:[2,6,11,197,206,222,424,469,493,496,512,525],interrupt:308,intersect:[3,6,130,207,357,359,501],intersert:357,interspers:387,interstiti:[176,447],intertia:[3,103],interv:[3,6,99,205,220,231,255,272,308,313,314,327,467,473,493,512,525],intestieti:130,intial:[6,394,396],intiial:[41,503],intiti:[3,335],intra:318,intra_energi:247,intramolecular:[28,154,247],introduc:[6,9,100,117,206,239,272,308,313,318,371,378,395,410,419,432,436,440,478,512,525],introduct:0,intuit:381,inv:[130,177,320],invalid:[3,12,75,97,181,286,389,441,442,500],invari:[117,145,150,152,231],invent:322,invers:[3,6,51,130,177,207],inverse:519,invert:[1,6,182,300],invis:357,invoc:[176,228,394,464,466,496],invok:[1,3,6,7,8,9,11,12,13,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,41,43,45,46,47,48,49,51,53,54,56,57,61,65,69,75,78,79,86,87,95,96,97,98,103,113,114,116,121,122,123,128,131,155,165,172,173,176,178,179,181,182,184,185,187,188,189,190,192,193,195,196,199,203,204,206,207,208,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,234,235,237,238,239,240,244,245,246,247,248,250,251,252,253,255,256,257,258,259,260,261,262,263,264,265,266,268,269,271,272,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,309,310,311,312,313,314,315,316,318,320,321,322,324,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,362,364,365,367,368,371,373,377,378,379,380,381,387,389,394,395,396,398,401,402,403,404,405,406,408,409,410,413,414,417,418,420,422,423,424,425,426,427,428,432,433,434,435,436,437,438,439,440,441,442,445,449,450,453,454,456,460,461,462,464,466,468,469,478,479,481,482,483,484,486,487,488,489,490,492,495,496,497,499,501,503,506,507,509,510,512,515,516,519,525,526],invokd:3,invoke:[3,12,16],involv:[3,6,7,8,12,65,119,126,127,128,158,182,210,217,226,247,258,303,306,311,336,378,386,387,389,399,416,423,430,478,481,483,494,495,501,503,507,512,513],ioff:[388,498],ion:[6,7,9,160,298,332,348,379,400,411,420,422,444,447,467,477,483,490,498,519],ionic:[6,9,401,403,411,419,420,454,467,519],ioniz:[409,419],ionocoval:9,iparam:[3,227],ipi:[2,13],ipp:0,ir3:177,ir4:177,irregular:[6,41,60,225,229,232,272,318],irrelev:453,irrespect:[441,442],irrevers:[236,319],is_act:[3,525],is_avail:[3,525],is_defin:[3,525],isbn:489,isele:[378,379],isenthalp:[9,272,273,274,275,276],ismail:[378,379,404,436],isn:[3,8,11,12,239,251],iso:[3,229,236,256,272,273,274,275,276,277,278,279,280,305,313,318,519],isobar:[9,272,273,278,279,280,323,415],isodem:419,isoenerget:[9,323,415],isoenthalp:[323,415],isol:[3,181,359,424],isomorph:301,isotherm:[9,247,272,273,278,279,280,305,323,415],isotop:307,isotrop:[6,100,255,305,378,379,402,423,441,442],isovolum:320,isralewitz:324,issu:[1,3,6,9,11,12,13,14,16,17,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,43,45,46,47,48,49,51,53,54,56,61,75,77,87,113,123,155,165,184,185,187,188,189,190,192,193,195,196,199,206,213,224,228,229,232,233,238,239,240,246,247,250,255,270,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,301,305,307,310,311,318,321,322,335,339,340,341,346,356,358,361,362,364,365,367,368,371,373,379,388,389,392,395,396,398,401,402,403,404,405,406,408,409,410,413,414,417,418,420,422,423,424,425,426,432,433,434,435,436,437,438,439,440,441,445,450,453,454,456,460,461,462,469,476,478,479,481,482,483,484,486,488,489,490,498,500,501,507,510,515,516,517,525,526],issue:216,ital:[459,460],itali:13,item:[6,7,8,41,203,207,225],iter:[3,6,12,39,41,65,205,213,214,224,225,229,236,238,245,253,288,294,300,309,310,318,322,333,343,359,361,377,385,386,387,389,393,467,493,503,507,512,516,517,525],iterat:[12,387],ith:[75,128,131,203,218,219,220,221,222,223,231,338,350,516,525],itself:[2,3,6,7,8,9,11,12,13,17,42,61,99,118,169,203,205,206,207,208,220,221,230,236,256,271,312,318,348,359,361,388,389,410,420,423,427,428,451,452,479,480,496,502,505,506,510,525,530],itset:508,ityp:[3,57,102,126,127,178,215,227,311,487],itype1:127,itype2:127,itypen:127,ivector:8,ivori:207,ixcm:318,ixi:[42,318,388],ixx:[42,103,318,388,525],ixy:[103,388,525],ixz:[42,103,318,388,525],iycm:318,iyi:[42,103,318,388,525],iyz:[42,103,318,388,525],izcm:318,izrailev:324,izumi:482,izz:[42,103,318,388,525],j0jt:99,j20:220,j_m:152,jackson:448,jacobi:3,jacobsen:386,jacs:[6,184,510],jagreat:13,jame:[9,18],janssen:299,januari:444,jaramillo:[7,9,13,419],jarzynski:324,jatempl:9,jcc:9,jcp:353,jec:13,jeff:13,jeffer:15,jello:272,jensen:[255,378],jeremi:[9,446],jerom:9,jewett:13,jiang:[256,519],jiao:[9,13],jiht:[7,9],jik:400,jim:7,jku:[7,9],jmake:12,jmm:152,joannopoulo:270,job:[12,62,322,506,517],jochim:[272,273],john:[7,9,13,205],johnson:[9,13],join:[6,74,424,501],joint:[3,303,426],jon:[9,74],jonathan:9,jone:[1,3,6,7,9,10,12,13,45,46,66,95,118,121,184,210,216,239,305,336,353,357,379,381,387,396,399,403,404,405,406,408,413,423,425,426,427,430,431,432,433,434,436,437,439,440,443,448,449,457,461,462,472,477,485,510,519],jonsson:[77,271,386,389,467],jorgensen:[6,195,410,432,436],joul:524,journal:[172,190,216,311,379,417,447,459,460,471,472,474],jparam:[3,227],jpeg:[3,12,206],jpeglib:12,jpg:[4,8,12,203,206,207,529],jpg_inc:12,jpg_lib:12,jpg_path:12,jpl:[7,9],jth:525,jtype1:127,jtype2:127,jtype:[3,57,127,227,487],jtypen:127,judg:512,judici:6,julien:9,jump:[2,6,35,277,361,375],jun:15,june:208,just:[3,6,8,11,12,13,16,18,21,28,42,44,61,63,99,118,121,127,153,156,157,171,182,186,203,206,219,231,232,236,244,261,269,305,307,318,343,348,359,361,363,388,389,394,396,399,407,427,457,485,496,500,502,503,505,506,517,519,520,525,529,530],justo:418,jusufi:[411,422],jut:357,jzimmer:9,k11:99,k22:99,k33:99,k_2:366,k_4:366,k_d:519,k_sigma:400,k_ub:19,kadiri:70,kalia:486,kamberaj:318,kapfer:117,kappa:[4,6,99,323,344,410,415,432,488,489],kappa_:348,karplu:95,karttunen:258,kate:0,kaufmann:15,kayser:411,kbit:207,kboltz:336,kbp:207,kbt:313,kcal2j:99,kcal:[252,507,519,524],kde:13,ke_eta_dot:272,ke_etap_dot:272,ke_omega_dot:272,keblinski:[410,467],kecom:158,keef:130,keep:[3,7,12,61,75,196,227,231,232,253,264,300,316,319,346,351,378,387,410,440,468,493,498,504,506,512,516,520,525],keflag:3,kei:[6,16,61,336,486,512,517],keir:13,kelchner:74,kelkar:351,kelvin:524,kemper:[310,409],kepler30:16,kepler32:16,kepler35:16,kepler37:16,kepler:[1,9,10,12,14,16,394],kept:[6,210,277,345,346,519],kernel:[7,13,15,16,40,110,141,147,216,248,249,327,447,470,471,472,473,474,475,498,508],keword:206,keyboard:12,keyword:[3,6,8,12,15,16,37,39,41,42,56,57,60,61,63,68,71,73,74,75,81,84,95,96,98,100,102,104,106,107,112,113,115,117,118,119,120,121,123,125,126,128,129,130,131,152,153,156,157,158,166,167,171,172,176,177,178,180,181,182,199,202,203,204,205,206,207,208,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,236,237,238,239,240,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,324,326,327,328,329,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,361,376,378,379,381,382,384,385,387,388,390,394,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,411,413,414,416,417,418,419,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,441,442,443,444,445,446,447,448,449,450,451,452,454,456,458,459,460,461,462,464,466,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,485,486,487,488,489,490,491,493,494,495,496,498,499,501,503,505,506,507,508,510,512,515,516,517,519],keywrod:419,kforc:519,khaki:207,khersonskii:152,khvostov:15,kick:[213,214,215,238,355],kilogram:524,kim:[2,3,4,7],kimvirial:[3,428],kind:[1,2,3,4,6,7,8,9,10,11,12,16,39,40,41,42,57,63,64,65,77,128,158,203,204,206,210,217,219,220,222,225,228,230,235,247,250,269,318,322,336,343,358,389,391,393,400,419,459,460,487,493,497,498,503,504,511,512,519,525],kinemat:[9,441,442],kinet:[3,6,8,65,90,91,92,93,95,99,104,105,106,107,108,123,153,155,156,157,158,159,160,161,163,164,165,166,167,168,170,171,210,217,219,229,236,239,247,251,255,268,270,272,273,274,275,276,277,278,279,280,305,308,319,336,344,351,352,387,419,421,452,480,493,508,512,516,519],kio:2,kiss:[9,12],kjl:371,klahn:347,klapp:378,klein:[6,9,216,230,272,273,296,318,432,462],kloss:7,kmax:[3,130,320,378],kmp_affinity:15,knc:16,knight:15,knl:15,knock:348,know:[3,9,11,12,41,65,67,72,83,101,118,127,210,236,254,256,286,336,387,418,428,484,496,499,502,507,519,520],knowledg:[4,8,9,206,428],known:[3,12,152,206,231,239,251,300,309,318,345,495,512,526],kohlmey:[7,9,13,17,378,379],kokko:[1,3,9,12,16,321,394,460,501,511,525],kokkos:[1,2,3],kokkos_arch:[9,16],kokkos_cuda:[9,12,16],kokkos_cuda_options:16,kokkos_debug:16,kokkos_device:16,kokkos_devices:16,kokkos_omp:[9,12,16],kokkos_pg:16,kokkos_phi:[9,12,16],kokkos_use_tpls:16,kolafa:379,kollman:[6,184,510],kondor:458,kone:[345,346],kong2011:300,kong:[9,13,300],konglt:9,koning00a:345,koning00b:345,koning96:[345,346],koning97:346,koning99:345,kooser:13,koskinen:386,kosztin:324,kraker:15,krau:13,kremer:[45,46,510],kress:[445,446],kspace:[0,1],kspace_modifi:[2,3,6,15,349],kspace_styl:[0,2,3],kspce:12,kspring:271,kstart:317,kstop:317,kth:[248,301],kub:19,kubo:[6,99,344],kumagai:482,kumar:[9,441,442],kuronen:457,kurt:303,kuster:[288,294,383],kutta:319,l12:444,l_box:419,l_skin:348,la3:177,laa:9,laas:9,lab:[5,7,9,12,122,456],label:[2,3,12,76,203,207,211,212,226,227,230,239,300,301,315,361,377],laboratori:[0,88,89,241,270,308,323],lack:[3,15,270,419],lackmann:400,ladd:[295,346],lafitt:448,lag:[231,348],lagrang:[142,143],lagrangian:[6,134,135,136,137,139,140,141,142,143,144,145,147,148,149,150,216,270,308,309,326,327,464,466,519],lagrangian_posit:[270,308],lagrangian_spe:[270,308],lai:492,lambda1:[481,482,483,486],lambda2:[481,482,483],lambda3:[481,483],lambda4:486,lambda:[95,122,130,172,177,258,320,345,346,348,395,418,440,450,478],lambda_fin:345,lambda_initi:345,lamda:[3,53,336,450],laminar:475,lammp:[0,3,4,7,8,9,11,12,13,14,16,204,300,382,389,393,407,444,447,493,496,507,509,512,513,520,525],lammps2pdb:[6,13],lammps_clos:6,lammps_command:6,lammps_extract_atom:6,lammps_extract_comput:6,lammps_extract_fix:6,lammps_extract_glob:6,lammps_extract_vari:6,lammps_fil:6,lammps_gather_atom:3,lammps_get_coord:6,lammps_get_natom:6,lammps_ns:[6,12],lammps_open:6,lammps_potentials:[407,409,509],lammps_put_coord:6,lammps_quest:[6,245],lammps_rk4:319,lammps_scatter_atom:3,lammps_set_vari:6,lammps_sppark:6,lammps_vers:6,lammpsplot:13,lammpstrj:[499,503,519],lammpsvirial:[3,428],lamms:6,lamoureux:[6,236,484,519],land:15,landron:467,lane:1,lang:519,langevin:[2,3,6,39,159,160,161,163,165,166,167,168,170,210,215,217,235,236,247,248,249,251],langston:42,languag:[6,11,12,16,231,496,525],lanl:9,lapack:12,laps:349,laptop:7,larentzo:[9,88,89,241,323],larg:[0,1,3,4,5,6,7,8,9,10,12,13,15,16,17,39,40,41,60,61,74,75,120,127,129,153,158,161,166,178,179,180,190,199,202,203,204,206,207,219,225,228,229,231,232,233,237,239,247,258,272,286,295,300,303,304,305,307,308,313,315,316,317,318,322,332,336,344,348,349,351,353,357,371,378,379,383,385,387,390,394,408,414,419,423,424,431,447,449,451,452,455,461,479,480,493,496,498,500,501,505,507,512,515,517,519,526,530],larger:[1,2,3,6,11,12,13,39,41,56,61,74,75,127,178,180,206,220,222,223,233,239,251,258,267,272,295,296,304,309,313,317,318,320,323,331,336,343,348,352,353,354,357,378,379,385,386,387,389,390,391,394,400,408,410,411,419,424,432,436,442,449,455,476,477,485,498,502,503,506,507,512,525],largest:[3,6,12,39,75,176,178,237,378,387,391,451,452,476,479,480,498,500,506,507,518,525],laroch:313,laser:348,last:[1,2,3,5,6,11,12,14,37,42,56,61,63,75,121,128,153,176,197,199,203,204,206,207,208,209,219,220,222,223,225,237,271,316,319,320,332,336,361,376,387,388,389,390,394,398,399,400,401,408,409,414,415,417,422,423,424,425,426,430,433,435,437,438,439,442,448,450,461,467,469,476,479,480,484,485,488,489,493,494,496,499,503,505,506,510,512,513,516,517,525],lat:444,late:5,latenc:[10,252],later:[6,9,11,12,16,40,61,75,114,180,182,220,233,277,295,303,324,343,359,361,378,387,388,393,394,396,400,496,498,500,502,512,515,517,520,525,528],latest:[7,219,220,221,222,223,320,500],latex:8,latgen:300,latitud:152,lattc:444,latter:[2,6,9,11,14,15,16,41,42,95,156,207,211,212,218,219,220,225,229,253,262,272,274,275,276,278,279,280,303,305,307,311,318,319,336,350,352,357,377,388,400,402,403,404,405,406,413,430,432,436,440,447,454,462,467,484,493,495,496,501,504,515,516,525,529],lattic:[2,3,5,6,7,9,41,61,66,70,74,75,77,99,100,125,130,167,176,177,178,179,202,215,219,225,232,233,237,253,258,259,260,261,262,269,299,300,316,353,355,356,357,358],launch:[1,3,6,11,12,15,16,17,394,495,496,517],laupretr:371,lavend:207,lavenderblush:207,lavgevin:232,law:[6,270,392,464,466],lawngreen:207,lawrenc:9,layer:[6,75,344,348,351],layout:[1,3,16,180,376,495,498,507],lb_fluid:258,lbl:[7,9,176],lbnl:9,lbtype:258,lcbop:[2,3],ld_library_path:[11,12],ldfftw:12,ldrd:7,lead:[2,3,6,12,21,24,39,41,44,61,63,81,95,127,128,172,176,182,186,203,207,211,212,218,219,220,222,223,225,233,249,258,277,308,318,319,322,336,343,344,351,363,371,378,384,389,394,407,410,432,436,438,447,466,492,498,508,516,519,520,525,526],least:[3,6,12,17,75,130,177,205,217,239,249,303,352,390,394,427,479,480,485,496,525],leav:[3,7,11,12,16,20,41,59,153,168,185,225,229,231,233,272,274,275,276,278,279,280,304,305,318,322,362,449,498,502,510],lechman:336,lectur:324,led:[3,5],lee2:444,lee:[216,444],left:[6,11,12,41,118,154,198,206,207,228,253,298,299,319,336,359,361,381,498,500,505,520,525,530],leftmost:[41,225],legaci:[12,15,204],legal:7,lehoucq:456,leimkuhl:[272,290,356],leiu:414,lemonchiffon:207,len:508,lenart:[411,422],length:[3,6,8,11,12,15,17,20,37,39,40,41,42,44,53,54,55,56,57,60,61,63,67,68,71,72,73,74,75,78,83,84,85,88,90,95,96,97,98,99,101,102,113,115,118,119,123,125,126,128,129,130,131,140,142,155,156,157,158,159,160,161,162,163,165,166,167,168,169,170,171,174,176,177,180,185,199,203,204,206,207,210,217,221,222,223,225,226,227,228,229,232,242,243,247,250,258,270,271,272,273,277,286,294,299,305,315,318,320,322,323,332,336,343,347,348,350,353,357,379,381,383,385,387,389,390,392,396,397,400,401,403,410,411,416,419,422,426,430,432,444,449,451,452,459,460,470,479,480,481,484,488,489,491,498,501,506,508,515,516,519,525],lengthi:247,lennard:[1,2,3,6,7,9,10,12,45,46,95,118,121,184,210,239,305,336,353,357,379,381,387,396,399,403,404,405,406,408,413,423,425,426,427,430,431,432,433,434,436,437,439,440],lennardjones612_universal__mo_826355984548_001:211,lenoski:[445,446],less:[1,3,6,13,14,15,16,17,37,41,56,59,60,61,75,80,100,117,119,126,127,129,156,157,171,199,207,219,222,223,225,227,228,229,232,233,239,244,253,270,272,299,311,313,320,336,355,356,358,379,381,387,391,394,400,405,423,424,430,441,442,449,461,478,479,480,483,489,498,517,525,526],let:[1,12,37,56,161,189,199,220,242,243,322,336,354,394,408,451,452,479,480,507,511,519,528],lett:[152,166,249,256,258,270,313,324,345,346,386,400,417,419,423,440,451,452,468,519],letter:[2,12,41,59,61,207,225,235,236,256,301,361,393,458],leuven:9,level:[2,3,8,11,12,16,203,206,211,212,213,214,221,224,234,238,250,252,253,267,269,271,272,299,310,317,321,324,332,333,334,335,352,353,357,361,376,379,393,400,404,405,432,433,436,443,447,448,459,460,495,507,512,517,525],lever:476,levin:424,lewi:325,lexicon:7,lgr_po:[270,308],lgr_vel:[270,308],lgvdw:460,li1:177,liang:409,lib:[1,3,9,11,12,14,15,16,204,312,394,409,428,496,499],libatom:[9,458],libcolvar:12,libdir:11,libfftw3:12,libgpu:[9,14],libjpeg:12,liblammp:[11,12],liblammps_foo:[11,12],liblammps_g:[11,12],liblink:9,libmeam:9,libmpi:11,libmpi_stub:12,libmpich:12,libpackag:12,libpng:12,libpoem:9,librar:9,librari:[0,1,3,4],libreax:9,librt:16,licens:[0,7,8,12,206],license:[7,12],lie:[6,74,320],lieu:378,life:7,lifo:8,ligand:332,liggghts:7,light:307,lightblu:207,lightcor:207,lightcyan:207,lightest:343,lightgoldenrodyellow:207,lightgreen:207,lightgrei:207,lightli:332,lightpink:207,lightsalmon:207,lightseagreen:207,lightskyblu:207,lightslategrai:207,lightsteelblu:207,lightweight:336,lightyellow:207,like:[3,4,6,7,8,9,11,12,15,16,17,39,42,54,61,162,169,203,206,208,213,229,230,233,236,238,252,255,256,257,270,272,273,278,279,280,285,286,288,292,293,295,296,297,299,305,307,308,309,313,318,319,320,323,336,338,339,340,341,342,343,344,351,352,353,356,357,358,361,378,381,383,386,389,394,400,408,413,414,415,419,420,424,426,427,437,438,444,468,479,480,483,484,488,489,495,496,498,499,500,501,503,508,513,516,517,519,520,525,526],likelihood:[130,177,228],likewis:[1,6,12,14,17,39,41,75,96,126,216,225,226,227,247,255,256,272,273,277,296,313,336,339,340,341,379,389,395,399,400,410,417,420,447,477,496,498,500,510,525],likhtman:221,lime:207,limegreen:207,limit:[2,3,6,7,9,12,15,16,17,26,39,60,61,63,75,130,152,154,177,178,179,180,187,205,206,210,227,229,230,232,239,248,255,272],limit_eradiu:419,limit_veloc:[326,327],lindahl:378,line:[0,1,2,3,4,6,7,8,9,10,11],linear:[2,3,6,24,26,37,44,55,56,112,152,187,199,210,211,212,216,228,229,236,242,243,259,263,268,269,272,303,316,317,322,325,328,340,344,348,351,353,355,356,358,364,365,366,368,381,389,424,438],linearli:[6,10,128,207,232,300,353,355,356,358,388,389,391,498,525],lineflag:[6,498],lineforc:[2,210],linen:207,linesearch:[8,12,385],ling:[9,13],lingo:[11,428],link:[5,6,7,8,9,11,12,13,14,16,21,36,44,55,65,186,198,204,206,210,227,252,256,303,312,314,324,332,363,372,397,407,444,458,459,460,477,484,496],linker:12,linkflags:[9,15,17],linux:[9,10,11,12,14,15,206,208,252],linuxamd64:499,liouvil:272,lip:13,lipid:[4,9,10,13,28,318],lipton:303,liquid:[6,7,9,15,28,39,40,41,61,95,100,153,164,176,225,229,232,247,272,305,308,313,343,413,447,449,454,482,507],lisal:[323,415,476],lism:9,list:[0,1],listen:[252,254],listfil:431,liter:[498,509],literatur:[6,8,444,467,478],lithium:419,littl:[1,3,12,15,66,239,272,390,493,501],littmark:[444,477,483,490],liu:[426,460],livermor:9,lj1043:[2,210],lj126:[2,6,210],lj12_4:462,lj12_6:462,lj1d:300,lj6:3,lj93:[2,6,210],lj96:[2,3],lj9_6:462,lj_flag:396,llnl:[5,7,9],lmp1:11,lmp2:11,lmp2arc:[0,6],lmp2cfg:[0,6],lmp2vmd:0,lmp:[11,496,519],lmp_auto:12,lmp_cuda:16,lmp_foo:12,lmp_g:[6,11,12,13,16,377],lmp_gpu:14,lmp_ibm:[12,377],lmp_inc:12,lmp_kokkos_cuda:16,lmp_kokkos_omp:16,lmp_kokkos_phi:16,lmp_linux:[4,6,12],lmp_mac:12,lmp_machin:[1,12,14,15,394],lmp_mpi:[12,16,17,18,301],lmp_mvapich:16,lmp_openmpi:16,lmp_win_mpi:12,lmp_win_no:12,lmpptr:[11,496],lmpqst:245,lmpsdata:13,lmptype:[3,12,245],load:[1,3,4,6,7,9,11,12,15,16,17,41,206,208,210,225,252,308,319,394,409,495,496,517],loadabl:11,loca:207,local:[2,3],localhost:252,localized_lambda:216,localonli:12,localtemp:319,localvector:65,locat:[3,6,8,11,12,26,63,127,130,176,177,187,197,199,203,233,234,239,258,335,346,357,385,407,410,420,421,422,432,434,436,484,495,498,499,501,508,510],lock:[3,393,525],lockstep:[229,272,305,318],log:[1,2,3,4,6,7,8,10,12,13,14,15,62,209,270,300,308,322,336,376,378],logarithm:[148,149,525],logfil:[0,3,6,12,306,382,494],logfreq2:525,logfreq:[207,505,514,525],logic:[7,10,11,12,15,16,41,178,225,359,361,493,495,496,499,507,512,525],lomdahl:[277,434],london:[13,247,460],lone:[459,460],longer:[1,3,4,6,8,12,13,54,127,203,207,218,219,220,221,222,223,226,247,255,272,290,299,303,308,318,319,322,343,353,357,359,385,394,396,424,467,495,503,507,512,522],longest:[41,225,226,390,485],longitudin:332,look:[1,3,6,8,11,12,17,54,63,203,206,209,407,468,479,480,519,520,525],lookup:[3,39,199,449,451,452,479,480],lookup_table:320,loop:[3,4,6,7,11,12,17,39,42,68,71,73,84,96,102,119,126,127,129,153,206,219,226,227,231,237,343,359,361,377,380,387,389,390,392,393,416,447,467,493,494,496,502,503,506,507,512,516,517,518,525,526],loopa:[361,377,393],loopb:[361,377,393],loopmax:467,loopvar:525,lopez:[272,273],lorant:309,lorentz:177,lose:[6,60,61,180,229,232,256,272,424,498],loss:[6,524],lossi:206,lossless:206,lost:[3,12,13,59,112,233,316,325,336,449,498,499,500,507,515],lot:[17,324,378],low:[1,3,6,7,12,41,161,176,203,206,225,236,256,295,313,318,344,351,379,447,451,452,460,479,480,489,512,519],lower:[2,3,6,9,11,12,15,41,59,61,75,96,154,167,202,206,207,220,221,222,225,229,236,252,255,256,258,272,308,313,344,351,353,354,359,360,378,381,393,411,444,512,521,523,526],lowercas:0,lowest:[56,152,361,388,508,512,513,525],lps:[456,477],lrt:[15,394],ls_:146,lsfftw:12,lsurfac:348,ltbbmalloc:15,lu3:177,lubric:[2,3,6,7,9,211,212,283,402],lubricateu:[2,3,9,353,402,441],lubricuteu:283,luci:[2,319],lucki:12,luigi:13,lumped_lambda_solv:216,lussetti:344,lustig:[7,13],lybrand:379,lyulin:371,m4v:206,m_d:519,m_eff:[354,424],m_fill:3,m_i:334,m_lambdai:456,m_taubi:456,m_u:258,m_v:258,m_yield_stress:456,mac:12,mac_mpi:12,mach:[9,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,325,326,327,328,331,508],machin:[1,3,4,6,7,9,10,11,12,14,15,16,17,18,203,204,206,252,272,349,378,385,387,392,447,495,500,505,506,507,520,526,530],machines:12,mackai:[9,258,260,261,262],mackerel:[6,19,184,256,405,510,519],macos:206,macro:16,macroparticl:416,macroscop:[7,250,270,456],made:[3,6,9,11,12,14,32,41,42,50,66,67,72,83,86,101,179,191,203,206,208,210,211,212,217,225,231,233,237,252,261,304,312,316,318,346,359,369,390,394,423,424,427,459,461,469,495,502,508,511,520,521,523,526,528],madura:[6,432],magazin:417,magda:353,magenta:207,magic:[3,11],maginn:[172,351],magnitu:338,magnitud:[6,74,115,119,124,154,178,202,203,204,207,231,233,234,250,251,253,255,324,332,333,335,336,343,354,379,387,413,424,508],mai:[0,1,2,3,6,7,8,11,12,13,14,15,16,17,28,37,39,40,41,56,60,61,63,65,68,71,73,74,75,84,94,95,96,97,98,100,102,112,113,115,117,118,119,120,121,123,124,125,126,128,129,130,152,153,156,157,158,166,167,171,172,176,177,178,179,180,181,182,198,199,202,203,204,205,206,207,208,210,211,212,213,215,217,219,220,221,222,223,224,225,226,227,229,231,232,233,236,237,238,239,242,244,247,248,249,251,252,253,255,256,257,258,259,261,267,268,269,270,272,273,277,286,288,290,294,300,301,304,305,306,307,308,309,310,313,315,316,317,318,319,320,321,322,324,326,327,329,336,338,339,340,343,344,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,376,377,378,379,381,385,386,387,388,389,390,391,392,394,396,397,399,400,408,414,419,424,427,428,430,438,440,442,444,445,446,447,449,451,452,459,460,462,468,476,479,480,486,490,493,494,495,496,498,499,500,501,502,503,504,505,506,507,508,510,512,513,515,516,517,519,520,525,526,528,530],mail:[3,7,9,12,359,520],main:[3,6,8,11,12,204,252,258,318,345,346,417,467,484,496,513],mainboard:1,mainli:454,maintain:[8,9,13,15,39,163,227,232,295,336,349,386,395,417,507,510,520],major:12,make:[0,1,2,3,6,7,8,9,11],makefil:[3,7,9,11,12,13,14,15,16,17,18,203,204,379,394,447,496],makelist:12,maks:424,malloc:[3,12],manag:[5,8,12,203,252,301,338,507],manbi:468,mandadapu:216,mandatori:[8,203,230],manh:400,mani:[1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,37,39,40,41,42,56,63,65,71,75,96,99,112,113,127,154,158,178,179,199,202,203,204,205,206,207,208,210,211,212,213,217,218,219,220,221,222,223,225,226,227,228,229,231,232,233,239,242,243,244,247,248,251,252,258,259,268,270,272,273,277,286,298,299,300,304,305,307,309,310,311,313,315,318,319,320,322,336,347,348,350,359,361,378,387,389,390,392,394,407,409,416,419,422,426,427,451,452,467,468,477,479,480,481,483,496,498,500,502,503,505,506,507,508,510,511,512,513,517,525,526,530],manifold:2,manifoldforc:[2,9],manipul:[12,41,225,252,410,457,509],manner:[2,3,6,9,11,12,16,41,153,174,206,211,212,213,214,222,225,232,237,238,245,251,255,256,272,278,279,280,292,293,295,297,312,339,340,341,344,345,346,351,353,357,361,379,388,389,393,394,417,419,427,430,441,485,493,495,498,499,500,501,503,507,512,513],manolopoulo:254,mantissa:3,manual:[0,1,3,6,7,8,9,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,34,37,39,40,43,45,46,47,48,49,51,53,54,56,60,65,71,75,123,130,155,156,157,159,160,161,164,165,166,167,168,170,171,177,184,185,187,188,189,190,192,193,195,196,199,203,204,206,208,213,224,232,240,246,250,254,255,256,271,272,274,275,276,277,278,279,280,281,282,284,287,290,291,292,293,295,297,305,307,310,311,318,320,321,322,339,340,341,351,356,361,362,364,365,367,368,371,373,379,389,393,394,395,396,398,399,401,402,403,404,405,406,408,409,410,412,413,414,417,418,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,445,450,453,454,456,460,461,462,469,478,479,481,482,483,484,486,488,489,490,493,501,507,511,512,513,516,525],manybodi:[3,7,8,9,12,153,154,387,427,510,525],map:[2,3,11,12,16,17,39,61,66,75,130,134,152,166,177,178,202,206,207,216,239,300,317,378,379,381,389,395,396,400,409,417,418,420,427,428,429,444,445,446,449,453,457,458,459,460,467,468,476,478,479,480,481,482,483,486,495,498,500,512,525],map_fil:300,mapflag:12,mara:[9,467],march:[9,444],margin:512,mari:13,mark:[425,440,464,466,467],marker:306,maroon:207,maroonmpi:11,marrink:425,marsaglia:[3,248,249,255,256,313],marseil:9,martin:[300,444],martinez:217,martyna:[272,273,318,507],mashayak:16,mask:[3,299,525],mask_direct:216,mass:[2,3,6,8,13,40,42,65,69,78,79,86,94,95,97,98,99,103,104,105,106,107,108,110,113,114,115,124,129,138,158,159,160,163,166,170,173,175,178,181,182,203,204,208,210,211,212,214,216,217,219,232,236,239,246,247,248,250,255,256,258,261,268,270,272,278,279,280,292,293,295,297,300,301,304,307,308,313,315,316,318,322,324,332,333,334,336,338,339,340,341,343,344,346,348,351,352,354,355],mass_matrix:216,massdelta:322,massiv:[0,206,258,301,344,351],massless:[6,256,379,410,432,436,440,519],masstot:318,master:[3,389,493,512],mat:[70,216,409,482],match:[3,6,9,11,12,16,37,41,56,61,75,127,161,199,207,208,225,228,232,242,243,252,272,273,295,315,320,336,343,378,379,400,426,438,444,451,452,458,459,460,479,480,492,496,498,499,500,503,507,512,519,525],matchett:42,mater:[77,395,446,457,467],materi:[6,7,9,61,74,136,137,181,215,216,232,247,253,270,299,305,313,344,348,354,410,417,418,419,424,428,444,445,447,456,459,460,463,464,465,466,493,498,512,519,524],material_fil:216,math:[3,8,15,207,256,272,273,505,514],mathemat:[130,152,177,178,202,211,212,213,214,224,229,238,248,250,251,253,255,256,306,321,329,339,340,341,353,356,358,468,494,501,508,526],mathrm:520,matlab:0,matric:[9,152,249,300,423],matrix:[3,6,9,99,176,220,229,249,300,309,319,378,381,447],matter:[6,12,39,59,61,75,160,348,390,396,412,417,419,444,462,467,481,483,486,490],mattox:9,mattson:[88,89,123,153,241,323],max2theta:177,max:[3,6,8,12,14,17,75,128,207,222,225,227,229,233,267,304,319,322,336,361,381,385,387,389,390,394,467,493,498,512,516,525],max_alpha:8,max_cell_s:416,max_group:3,max_nn:327,max_step:319,max_travel:328,max_vel:[326,327],max_veloc:327,maxangl:247,maxbody:3,maxbond:[3,227],maxedg:176,maxev:[387,493,512],maxfoo:8,maxim:[343,389,517],maximum:[3,6,8,12,14,16,24,41,42,45,53,54,59,61,63,100,117,127,128,130,133,176,177,179,180,202,203,215,220,221,222,225,227,232,233,237,239,247,267,286,288,294,299,304,309,319,322,325,326,327,336,349,378,379,385,389,390,394,397,400,416,422,441,442,467,498,501,506,516,525,526],maxit:[288,294,309,387,493,512,516],maxsize_restart:8,maxspeci:3,maxstep:319,maxwel:[16,298],maxwell50:16,maxwell52:16,maxwell53:16,maxx:457,mayb:13,mayer:[7,401,403,467,477],mayo:[6,7,13,24,373,426,510],mbt:185,mbyte:[12,313],mcc:[459,460],mcdlt:[168,251],mcdram:15,mcgraw:301,mclachlan:[272,290],mdatom:247,mdf:2,mdnvt:247,mdregion:216,mdtemp:247,mdump:[41,225],meam:[2,3,4,7],meam_sw_splin:446,meamf:444,mean:[2,3,4,6,7,8,11,12,15,16,21,33,36,37,38,39,41,42,44,52,54,55,56,58,59,61,63,65,71,75,76,80,81,90,92,93,95,99,100,113,114,115,117,123,124,125,126,127,128,129,131,152,153,155,156,157,159,160,161,164,165,166,167,168,170,171,172,178,179,181,182,184,186,194,198,199,200,201,202,203,204,206,207,208,210,211,212,215,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,238,239,242,245,247,248,249,250,251,253,255,256,257,261,269,272,274,275,276,277,278,279,280,286,288,292,293,294,295,297,299,301,303,304,305,307,313,315,316,318,319,321,322,324,329,332,336,338,339,340,341,343,344,347,348,350,351,352,353,354,355,356,357,358,359,363,364,365,366,368,370,372,374,378,379,381,384,385,387,388,389,390,392,394,397,401,403,404,405,407,410,414,416,417,419,423,424,426,427,430,432,433,436,443,444,448,449,451,452,454,455,457,459,460,461,462,476,478,479,480,481,482,483,485,489,492,493,495,496,498,499,500,501,502,503,504,505,506,507,508,509,510,512,513,515,516,519,524,525,526,527,528,530],meaning:[127,136,137,139,142,146,427],meaningless:[70,343],meant:[6,318,484,502],measur:0,meaur:517,mech:456,mechan:[6,8,9,11,12,16,40,88,89,138,154,216,231,239,241,251,301,312,319,400,419,428,434,447,464,466,492,496,498],mechanic:312,mechanim:134,meck:117,media:206,medium:489,mediumaquamarin:207,mediumblu:207,mediumorchid:207,mediumpurpl:207,mediumseagreen:207,mediumslateblu:207,mediumspringgreen:207,mediumturquois:207,mediumvioletr:207,mee:343,meet:[3,12,179,206,207,227,228,349,503],mehl:395,mei:443,meloni:39,melros:[441,442],melt1:208,melt2:208,melt3:208,melt:[4,10,228,231,300,400,447,482],mem:14,member:[181,184,303,400],membran:[28,298,489],memori:[3,5,6,7,8,9,12,14,15,16,17,39,40,62,75,207,219,221,248,249,313,348,376,390,394,400,449,455,460,495,498],memory_usag:8,mendelev:417,mention:[1,6,7,11,40,42,232,251,258,277,353,381,389,396,459,460,500,525],menu:[206,252],mep:[271,389],mer:[4,10,228],mercuri:520,meremianin:152,merg:[5,498,520],merz:[6,184,510],mescscop:456,mesh:[1,2,3,6,7,8,9,10,12,40,41,42,130],meshless:9,meso:[2,3,40],mesocop:40,mesoparticl:[241,242,243,415],mesoscal:7,mesoscop:[7,109,110,111,265],mess:[3,508],messag:[0,2],met:[8,41,127,225,361,377,379,387,389,393,485,506],metadynam:[9,13,230],metal:[3,5,7,9,10,40,61,75,167,178,215,216,232,233,251,253,308,309,313,352,353,355,356,358,379,381,391,395,396,400,409,417,418,419,420,427,429,444,445,446,447,457,458,467,478,481,482,483,486,501,515,516,518,524],meter:[391,524],methan:[308,313],methanol:4,methin:371,method:[1,3,4,5,6,7,8,9,11,12,13,15,16,18,37,39,40,41,56,66,95,99,121,153,199,210,211,212,216,220,221,225,230,242,243,245,255,258,262,267,270,272,300,301,308,309,310,311,313,318,319,322,323,324,343,344,345,346,351,378,379,385,386,387,389,394,395,397,400,409,410,417,419,420,444,445,446,449,451,452,457,467,477,479,480,486,493,495,496,498,499,501,512,519],methodolog:[6,77,153,301,378],metin:[7,9],metric:[3,10,66,501,516],metropoli:[217,247,513],mezei:95,mf1:208,mf2:208,mf3:208,mg2:177,mglob_default_function_attr:9,mgoh:453,mgpt:2,mgptfast:447,miai:313,mic:[9,16],micel:[4,9,13,334],micelle2d:0,michael:[9,13,446],michel:13,mickel:117,micro:[3,518,524],microcanon:[281,282,284,285,287,290,291],microelast:456,micromet:524,micropor:247,microscal:441,microsec:524,microsecond:524,mid:[5,9,61,232,447,476],middl:[3,6,8,15,21,41,44,81,95,127,128,167,172,182,185,186,203,207,211,212,218,219,220,222,223,225,304,316,317,318,344,351,362,363,384,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,413,414,416,417,418,419,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,441,442,443,444,445,446,447,448,450,451,452,454,456,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,485,486,488,489,490,491,492,496,506,507,508,516,525],middlebondtors:[3,185,498],midnightblu:207,midpoint:476,mie:[2,3,9],might:[3,6,7,8,12,15,24,75,160,245,247,249,251,288,318,467,496,506,520,525],migrat:[3,8,16,41,42,61,63,68,73,84,102,119,126,129,203,210,225,299,307,313,336,378,391,394,506,528,530],mikami:[6,272,273],mike:[7,9,13,14,15],mil:[9,417],militz:299,mill:386,miller:318,million:[3,7,39,41,75,225],mimic:[6,42,54,256,270,304,410,422,432],mimim:[229,389],min2theta:177,min:[3,4,6,8,12,128,152,207,222,319,378,381,467,476,493,512,525],min_cap:3,min_cg:8,min_clearstor:8,min_dof:8,min_modifi:[2,229],min_nn:327,min_popstor:8,min_post_forc:8,min_pre_forc:8,min_pushstor:8,min_setup:8,min_setup_pre_forc:8,min_step:[8,319],min_stor:8,min_styl:[2,3,262,264,288,294,352,385],minarea:176,mincap:460,mind:[7,248,300],mine:[12,96,168,169,210,359,522],minim:[0,2,3,4,5,6,7],minima:[190,197,373],minimi:[389,485],minimizaiton:389,minimizi:313,minimum:[3,12,24,25,26,42,45,59,61,75,94,115,128,176,177,179,181,187,202,203,206,215,222,229,230,237,254,271,315,317,319,320,325,327,331,336,353,357,361,373,378,381,385,386,387,389,390,405,419,421,423,425,426,432,434,436,441,442,460,462,476,493,506,512,525,526],minlength:176,minmiz:[8,229],minn:9,minord:[3,378],minstep:319,mintcream:207,mintmir:[4,7,309,410,477],minu:[12,61,158,232,361,389,525],minut:[4,8,517],mirror:[63,355],misc:[6,8],miscellan:[2,216],mise:[145,150],mishin:[395,477],mishra:15,mismatch:3,miss:[3,5,12,181,222,247,286,313,336,431,449,515,516],mistak:[3,525],mistakenli:3,mistyp:3,mistyros:207,mitchel:[6,122,160,378,379,412,456],mitchell2011:456,mitchell2011a:456,mitig:272,mivi2:313,mix:[1,3,6,9,14,15,75,126,160,222,349,378,379,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,413,414,416,417,418,419,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,488,489,490,491,496,498,511,519,528],mixtur:[6,40,272,307,318,336,358,408,421,444,452,480,498],mixture_ref_t:444,mjpeg:206,mkdir:509,mkl:12,mkv:206,mldivide3:3,mlpark:7,mlutipl:223,mn2:177,mn3:177,mn4:177,mo3:177,mo5:[177,447],mo6:177,mobil:[6,115,153,155,156,157,159,164,171,206,318,359,360],moccasin:207,mod:2,mode:[1,3,4,6,9,10,11,12,13,14,15,16,17,63,69,79,86,96,98,103,114,116,125,127,128,154,158,173,175,176,177,203,204,206,207,218,219,220,222,223,230,232,245,249,272,301,313,324,336,376,378,391,394,410,419,447,467,495,500,505,507,516,524,525,530],model:[0,1,3,4],model_ar_p_mors:428,modern:[12,15,255,257],modest:[1,392],modif:[6,13,15,95,444,447,461,483,519,520],modifi:[0,1,2,3,6,7],modify_param:8,modin:216,modul:[3,9,11,12,13,230,313,383,496],modular:8,modulo:[3,525],modulu:[305,424,444,456,463,465],moementum:269,mofil:499,mol1:525,mol:[2,3,9,75,124,129],molchunk:[69,79,86,98,103,114,116,158,173,175,219],mole:[217,417,421,524],moleclu:[226,227,233,244],molecul:[2,3,4,6,7,8,9,12,13,28,40,69,75,79,86,97,98,103,114,116,124,125,129,153,154,158,160,173,175,178,179,180,181,203,204,207,210,217,219,226,227,228,233,234,239,243,244,247,255,256,261,303,304,307,315,316,317,318,319,322,331,332,333,338,344,351,359,379],molecular:[0,2,3,5,6,7,8,9,12,13,15,39,40,53,75,119,124,126,155,156,157,159,161,164,165,166,167,170,171,178,179,180,181,182,190,203,204,205,208,216,227,230,239,247,254,300,301,308,312,313,317,324,347,348,379,388,397,398,400,404,416,419,427,477,498,499,500,502,503,507,508,510,516,518,519,525],molfil:9,molfrac:[233,304],molnar:324,molpe:120,moltempl:0,molybdenum:447,mom:[6,99,317,526],momementum:[156,157,274,275,278,279,282,283,284,292,293],momemtum:69,moment:[3,6,9,40,42,86,90,92,93,116,124,129,156,171,178,201,203,204,255,258,261,272,290,304,318,334,338,388,413,418,467,498,508,519,524],momenta:[239,249,283,351,419],momentum:[2,3,6,28,40,63,65,69,90,94,112,116,124,129,152,156,157,178,203,204,210,216,236,248,251,255,256,258],momon:228,monaghan:[9,471,472,474],monitor:[3,6,9,12,106,107,161,229,231,232,233,244,252,255,270,272,304,306,308,318,322,336,387,389,413,516],mono:[77,441],monodispers:[3,354,402,424,441,442],monom:[13,54,228],monoton:[3,242,243,324,347,389,512],monoval:379,mont:[4,6,7,9,210,217,228,247,318,343,416,477],montalenti:[493,512],month:0,moor:[9,16,88,89,153,241,323,451,452],more:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54,55,56,60,61,63,64,65,66,67,68,70,71,72,73,74,75,76,81,82,83,84,85,88,89,91,94,95,96,98,100,101,102,106,107,108,109,110,111,112,113,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,160,161,162,164,165,166,167,169,170,171,172,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,202,203,204,205,206,207,208,210,211,212,213,214,215,217,218,219,220,221,222,223,224,225,226,227,228,229,230,232,233,234,236,237,238,239,240,241,242,243,244,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,287,288,290,291,292,293,294,295,296,297,299,300,301,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,321,322,323,324,325,326,327,328,329,331,336,338,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,376,378,379,381,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,449,450,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,488,489,490,493,494,495,496,498,499,501,502,503,504,505,506,507,508,509,510,511,512,513,515,517,519,520,525,526,528,529,530],morefoo:8,moreov:[226,227,484],morgan:15,moriarti:[9,447],moriarty1:447,moriarty2:[9,447],moriarty3:447,morri:2,morriss:[166,295],mors:[2,3,6,7,9,44],morse_fe:[479,480],mosel:386,mosi2:444,moskalev:152,most:[0,1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,36,39,41,55,74,75,113,119,166,198,203,204,206,207,219,222,223,225,226,227,229,231,251,272,273,301,305,306,307,308,309,318,320,349,351,359,361,372,379,386,390,392,394,396,419,423,444,458,459,460,483,493,494,495,507,512,513,516,517,520,525,528],mostli:[8,9,11,13,75,180,206,390,498,507,510,525,529],motiion:6,motion:[3,6,7,9,42,94,107,113,155,156,157,159,161,163,164,165,166,167,168,170,171,232,236,239,249,258,261,262,269,272,273,277,288,295,299,301,303,313,317,318,323,344,348,354,357,383,389,413,419,441,442,501,507,519],motiv:299,mous:252,mov:206,move:[1,2,3,6,8,9,11,12,14,59,61,63,75,94,115,146,158,161,176,202,210,211,213,214,217,219,222,223,226,227,229,232,233,237,238,240,245,246,247,251,252,253,254,258,263],movement:[3,6,12,269,343,387,516],movi:[2,3,4,7,9,12],mp2:396,mp4:206,mpeg:206,mpg:206,mpi4pi:11,mpi:[0,1,3,5,6,7,9,10],mpi_allreduc:[318,496],mpi_barrier:1,mpi_cart:495,mpi_cart_creat:495,mpi_cart_get:495,mpi_cart_rank:495,mpi_cart_shift:495,mpi_comm:6,mpi_get_processor_nam:495,mpi_inc:12,mpi_lib:12,mpi_lmp_bigint:3,mpi_lmp_tagint:3,mpi_path:12,mpi_wtime:12,mpicc:11,mpich2:12,mpich:[12,14,15,16,17,394],mpicxx:[12,16],mpiexec:[12,14,16,17,394],mpiio:3,mpirun:[1,6,11,12,14,15,16,17,18,301,377,394],mplayer:206,mri:[459,460],msd:[2,3,6,12,65,75,87],msi2lmp:0,msi:13,msm:[2,3,9,12,76,127,349,378,379],msmse:[130,177,320],msse3:447,msst:[2,3,4,9,210],mtchell2011:456,mtchell2011a:456,mtd:230,mth:[8,131,207,515],mtk:[272,273,277],mtotal:388,mu_j:28,muccioli:423,much:[1,3,6,11,12,39,154,203,204,206,221,229,308,343,390,391,394,396,423,461,493,496,512,517,519,520,525],mui:[124,203,204,238,338,498],mukherje:[7,9,303],mulder:347,muller:[6,99,210,344,351,448],mult:8,multi:[0,1,2,3],multibodi:[3,9,63,303,451,452],multicent:419,multicor:[1,9,495,511],multidimension:13,multielectron:397,multilevel:[9,378,379],multinod:15,multiphys:11,multipl:[0,1,2,3],multipli:[3,95,99,127,186,198,211,212,220,255,258,299,305,381,387,396,498,525],multiscal:11,multisect:[41,225],multistag:95,multithread:[15,394,460],multitud:7,mundi:296,munich:9,murdick:400,murti:482,murtola:378,muser:300,must:[1,2,3,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54,56,57,58,59,61,63,64,75,90,92,94,95,114,118,120,121,123,126,127,128,129,130,131,156,160,167,171,176,177,178,179,180,181,182,184,185,186,187,188,189,190,191,192,193,195,196,197,199,200,201,202,203,204,205,206,207,208,211,212,213,215,216,217,218,219,220,222,223,224,225,226,227,228,229,231,232,233,236,238,239,242,243,245,247,248,249,251,252,253,254,255,256,258,259,260,261,262,267,268,269,270,271,272,273,274,276,277,278,280,282,283,284,286,288,290,292,294,297,299,303,304,305,306,307,308,309,311,313,315,316,317,318,319,320,321,322,323,329,331,332,333,335,336,339,340,341,343,344,346,347,348,350,351,353,354,355,356,357,358,359,361,362,363,364,365,366,367,368,369,371,373,374,378,379,381,384,387,388,389,390,391,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,464,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,493,494,495,496,498,499,500,501,503,505,506,507,508,509,512,513,515,516,519,524,525,526,528,530],mutli:6,mutlipl:498,mutual:[3,381,517],mutut:507,muvt:247,mux:[124,203,204,206,238,338,498],muz:[124,203,204,238,338,498],mv2_comm_world_local_rank:12,mvapich2:[16,394],mvapich:12,mxn:[12,301],my_ga:247,my_one_wat:247,my_post_process:509,my_qeq:309,my_setup:509,my_stress:218,my_swap_region:217,myang:219,myblock:[233,304],mybox:180,mychunk1:125,mychunk2:125,mychunk:[6,69,79,86,98,103,114,116,158,173,175],mycmap:498,mycom:222,mydump:[203,207],myer:[5,7],myfil:[495,525],myfix:[217,513],myflux:99,myforc:[203,204,529],myhug:277,myke:99,mymol:[40,322,388],mympi:11,mymultipli:[496,525],myn:496,mype:99,mypi:525,mypress:[128,203,220,267],myramp:153,myrdf:[127,223],myreg:381,myregion:359,myrigid:[91,108,129,304],mysocket:254,myspher:[207,357],mystr:361,mystress:99,mytemp:[2,112,155,156,157,159,161,162,164,166,171,267,361,377,393,515,516,526],myvec:525,myz:498,n_dephas:493,n_element:205,n_f:[308,313],n_hbond:426,n_ij:424,n_ion:348,n_k:248,n_particl:88,na1:177,nabla:348,nacl:[4,6,444],nacl_cs_x0:6,nakano:[309,311,389,486],namd:[7,203,252],name1:[172,232],name2:[172,232],name:[0,1,2,3,4,5,6,8,9,11,12,13,15,32,42,50,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,191,202,203,204,205,206,207,208,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,268,269,270,271,274,275,276,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,300,301,302,303,304,305,306,307,308,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,349,350,351,352,353,354,355,356,357,358,359,360,361,369,376,377,379,380,382,388,389,393,395,396,400,403,417,418,420,423,424,427,428,429,431,444,445,446,453,457,459,460,467,468,478,481,482,483,484,486,487,491,495,496,498,499,500,501,505,508,511,513,514,516,519,520,525,526,527,528,529,530],namespac:[6,8,12],nan:3,nangl:[3,498],nangletyp:[388,498,508],nano:[318,518,524],nanoindent:74,nanolett:318,nanomet:[203,207,524],nanoparticl:[225,318],nanosec:524,nanosecond:[239,524],nappli:245,narea:3,narrow:[6,199],narulkar:[481,483],nasa:7,nasr:300,natdef:3,nation:[0,7,9,12,122,456],nativ:[1,6,7,9,12,16,203,208,499],natoli:[9,18],natom1:126,natom2:126,natom:[3,6,11,39,388,496,498,515,516,525],nattempt:304,natur:[6,9,152,232,272,299,313,354,417,419,420,444,457,495,525],navajowhit:207,navi:[207,417],navier:258,nb3:177,nb3b:[2,3,4],nb3bharmon:453,nb3d:9,nb5:177,nbin:[127,222,344,351],nbodi:[261,318,447],nbond:[3,124,498],nbondtyp:[207,388,498,508],nbot:400,nbounc:336,nbrhood_cutoff:460,nbtype:126,nbuild:516,ncall:245,ncbin:75,nchar:207,ncheck:517,nchunk:[3,6,69,75,79,86,98,103,114,116,125,158,173,175,219],ncoeff:468,ncorr:221,ncorrel:221,ncount:[219,220,221],nd3:177,ndanger:516,nden:[6,99],ndihedr:[3,498],ndihedraltyp:[388,498],ndirango:318,ndof:[272,277],ndoubl:498,ndp:519,ndx2group:2,ndx:360,neal:318,nearbi:[7,64,179,233,269,310,336,357,390,396,441,442,477,489,519],nearest:[3,74,75,77,100,117,129,176,179,258,271,299,343,357,378,431,444,451,452,467,479,480,525],nearli:[4,6,9,17,54,61,225,255,336,419,447,449,493,496,502,510],neb:[2,3,4,6,9,13,210],neb_combin:389,neb_fin:389,neb_log:512,neb_step:512,neb_styl:512,necessari:[6,11,12,13,14,15,16,32,63,95,186,191,198,208,225,229,230,231,247,248,312,319,323,336,349,359,378,440,447,449,467,498,499,503,506,507,508,512,519,529],necessarili:[12,239,313,343,364,365,366,368,381,449,526],necessit:307,need:[1,2,3,5,6,7,8,9,10,11,12,13,14,16,17,32,36,37,39,40,41,42,50,54,55,56,60,63,65,66,70,74,76,77,81,90,99,100,112,114,117,120,123,140,152,153,155,156,157,158,159,161,164,165,166,167,168,170,171,178,180,182,184,186,191,197,198,199,202,203,205,206,207,211,212,213,214,216,217,219,220,221,222,223,225,226,227,229,230,232,236,238,242,243,245,246,247,251,252,254,255,256,258,265,266,272,286,300,304,305,307,313,317,318,324,331,336,344,347,348,350,351,352,353,359,369,372,378,379,388,389,390,391,394,395,396,397,398,400,401,402,403,404,405,406,408,409,410,412,413,414,416,417,418,419,420,422,423,424,425,426,427,428,429,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,485,486,488,489,491,493,496,498,499,500,501,503,505,506,508,510,511,512,513,519,520,525,527,528,529,530],needless:[6,390],neelov:379,neg:[3,6,12,26,46,68,73,97,112,119,126,152,153,180,182,187,189,199,206,229,232,233,248,277,299,319,324,332,347,351,353,358,378,386,420,435,444,477,498,501,516,517],neglect:[426,442],neglig:[6,11,95,272,478],neigh:[2,3,12,14],neigh_modifi:[2,3,6,12,15,39,63,182,225,247,286,303,318,336,349,387],neighbor:[1,2,3,6,7,8,9,10,12,14,15,16,39,41,42,63,64,65,66,70,74,76,77,80,81,82,85,96,100,117,119,126,127,147,152,153,176,178,179,180,181,182,203,204,205,206,207,208,217,225,226,227,228,230,233,244,247,252,271,286,299,301,304,307,309,311,318,327,336,343,359,378,388,389,390],neighborhood:[25,74,100,134,468],neighbour:256,neighobr:[6,410,432,436],neither:[2,3,12,41,65,204,216,228,232,233,396,402,419,441,442,503],nelem:468,nelement:[395,417],nelson:[100,117],nemd:[0,4],nest:[2,361,375,393,525],net:[3,6,11,39,86,94,96,159,170,251,299,309,318,442,460],netherland:9,netpbm:206,network:[12,203,226,227,252,495],neumann:378,neutral:[3,96,247,378,410,432,467],never:[7,12,65,75,210,220,229,247,272,299,322,338,349,353,356,358,378,390,417,444,468,486,495,498,512,515,525],neveri:[3,8,75,213,218,219,220,221,222,223,226,227,228,231,239,258,259,300,309,310,311,314,315,320,344,350,351,389,467,503,512],newatom:233,newer:[12,219,444,525],newfil:[375,377],newli:[233,304,519,526],newn:318,newt:165,newtemp:[65,112],newtion:[400,447,457],newton:[2,3,5,7,14,15,16,28,63,124,288,294,295,386],newtonian:248,newtyp:[3,227],next:[1,2,3,6,11,12,17,37,56,59,68,73,74,75,84,99,102,119,126,129,142,199,206,207,217,219,233,237,242,243,247,248,286,304,318,319,322,348,361,377,378,387,388,389,390],neyt:343,nfile:[3,37,56,199,203,204,207,242,243,451,452,479,480,500,505,530],nfirst:503,nfirt:503,nfreak:320,nfreq:[39,75,218,219,220,221,222,223,225,315,320,503],nfs:203,ngb:299,nghost:[3,12],ngp:115,ngpu:394,nguyen:[14,400],nharmon:2,nhc:301,nht:318,ni2:177,ni3:177,ni_000:[130,320],nialh_jea:417,nialhjea:[407,427],nice:[6,8,520],nickla:446,nicola:9,nimprop:[3,498],nimpropertyp:[388,498],nine:[139,146,420,467],ninteg:498,nissila:[258,467],nist:[395,417,524],niter:[41,225],nitrid:410,niu3:[407,417,427],nkb:308,nlast:503,nlen:221,nline:388,nlocal:[3,8,11,12,245],nlog:379,nlvalu:117,nmax:42,nmin:42,nmol:498,nmpimd:301,nn2:444,nneighmaxdef:3,nnn:[100,117],no2:[243,319,421,480],no_affin:[15,394],no_gradient_correction:466,no_histori:6,no_velocity_gradient:466,noced:387,nocheck:431,nocit:12,nocoeff:[38,58,200,374,491,498,527,528],nodal:[6,37,56,199,216,242,243,348,451,452,479,480],node:[1,3,10,12,14,15,16,17,41,130,134,177,205,225,252,258,348,394,431,495,511],node_area:258,node_group:216,nodeless:419,nodes:[41,225],nodeset:216,nodeset_to_elementset:216,nof:199,noforc:[2,3,6,210],nois:[6,248,249,255,256,257,258,308,313,318,340,348],nomenclatur:[6,75,381],nomin:[203,272],non:[0,1,2,3,4],nonbond:[4,12,453,477],none:[2,3,6,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],noneq:249,nonequilibrium:[345,346,419],nonetheless:255,nongauss:[2,65,113],nongaussian:115,nonlinear:[2,7,44,45,46],nonloc:[456,508],nonperiod:3,nonzero:3,noordhoek:409,nopreliminari:199,nor:[2,3,41,61,204,216,325,326,327,328,329,331,409,463,464,465,466,498,501],nord:[457,481,483],norder:495,nordlund:[457,481,483],norm:[6,12,65,128,210,219,319,320,326,327,387,389,476,515,516,524],normal:[3,6,9,11,12,15,39,41,60,63,65,70,74,75,77,96,99,112,113,123,127,128,163,166,176,178,179,180,184,199,207,210,219,220,222,225,229,232,233,246,247,251,255,256,264,269,272,286,299,301,302,307,309,313,315,316,324,336,337,339,340,341,348,353,354,357,358,362,364,365,366,368,383,384,386,387,389,394,408,409,423,424,427,447,476,490,492,493,496,498,500,501,503,504,508,512,515,516,517,519,524,525,529],norman:348,nornal:3,nose:[6,7,8,168,210,236,255,256,272,273,274,275,276,277,278,279,280,292,293,294,295,296,297,301,305,313,318,339,340,341,346,414,519],noskov:[484,519],noslip:[336,358],nosync:517,notabl:[5,39],notat:[6,63,65,74,152,172,210,269,272,417,486,525],note:[1,2,3,6,7,8,9,11,12,13,14,15,16,17,18,21,23,24,27,31,32,34,35,36,37,38,39,40,41,42,44,47,54,55,56,58,60,61,62,63,64,65,68,69,71,73,75,77,79,84,86,95,97,98,99,102,103,107,113,114,115,116,119,121,123,124,125,126,127,128,129,130,131,152,153,158,160,161,162,166,168,172,173,175,176,177,178,179,180,181,182,184,186,189,191,195,198,199,200,202,203,204,205,206,207,208,210,211,212,213,216,217,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,236,237,238,241,242,243,244,245,247,249,250,251,253,254,255,256,257,258,268,269,270,272,274,275,276,277,278,279,280,286,288,292,293,295,297,301,303,304,305,307,308,309,311,316,317,318,319,320,323,324,332,333,334,336,339,340,341,344,347,348,350,351,352,353,354,357,358,359,361,362,363,364,365,366,368,372,374,377,378,379,381,384,387,388,389,390,394,395,396,400,401,403,404,405,407,408,410,411,413,414,415,416,417,420,423,424,425,426,427,431,432,434,436,441,442,444,445,446,447,448,449,451,452,453,457,459,460,461,462,464,466,467,468,469,472,476,478,479,480,481,483,485,486,489,490,491,493,495,496,498,499,500,501,502,503,505,506,508,510,512,513,515,516,519,520,524,525,526,529,530],notes:[95,440],noth:[217,254,380,394,496,509,520],notic:[0,6,7,8,12,346,348,519],notifi:231,noutcol:8,noutput:300,noutrow:8,novemb:444,novik:13,novint:252,now:[2,3,6,10,11,12,13,15,46,63,64,75,203,211,212,227,248,252,253,307,318,354,357,379,381,417,419,424,459,460,469,494,499,519,520,526],nowait:252,nozforc:378,np3:177,np4:177,np6:177,npair:[127,220],nparticl:[3,40,42,399],npartit:516,npernod:[14,16,17,394],nph:[2,3,5,6,7,9,42,129,168,210,232,256],nphi:[15,394],nphug:[2,3,9,210,270],npoli:304,nproc:[3,11,203],npt:[2,3,5,6,7,8,10,15,42,59,61,95,129,155,159,160,161,162,164,165,166,167,168,170,210,229,232,236,249,256],npt_aspher:[274,280,292],npt_bodi:[275,293],npt_sphere:[276,297],nrecomput:416,nrepeat:[75,218,219,220,221,222,223,315,320,503],nreset:[229,272,273,277],nreset_ref:229,nrho:[395,417],nrl:417,nsall:9,nsampl:416,nsbin:75,nsbmax_most:3,nsec:518,nskip:[131,503],nsq:[3,391,455],nstart:[131,220,221,222,223,320,498,503],nstat:299,nstep:[3,13,229,272,359,473,496,499],nsteplast:496,nstop:[131,503],nswap:[344,351],nswaptyp:3,ntabl:[37,56,199,242,451,452,479,480],nterm:324,nth:[12,81,127,128,204,207,222,232,503,513],ntheta:400,nthread:[3,394],ntpc:394,ntptask:394,ntype1:126,ntype2:126,ntype:[3,152,178,203,207,309,311,419,426,457,498,508],nuclear:[9,106,107,164,249,273,308,313,388,419,490],nuclei:[106,107,162,164,169,204,257,273,285,296,342,397,419,498],nucleu:[106,107,309,483,519],nudg:[4,6,7,9,210,271,386,389],nulcear:9,num:2,num_of_collis:3,num_step:319,numa:[1,3,12,394,495],numactl:15,number:[1,3,4,6,7,8,9,10,11,12,13,14,15,16,17,21,26,37,38,39,40,41,42,44,56,57,58,65,66,67,68,69,71,72,73,74,75,76,77,79,80,81,82,83,84,85,86,88,95,98,99,100,101,102,103,112,113,114,116,117,119,122,123,124,125,126,127,128,129,130,131,141,147,152,155,156,157,158,159,160,161,163,164,165,166,167,168,170,171,172,173,175,176,177,178,179,180,181,182,186,187,198,199,200,202,203,204,205,206,207,208,210,211,212,215,217,218,219,220,221,222,223,225,226,227,228,230,232,233,242,243,244,245,247,248,249,251,252,253,254,255,256,257,258,261,267,269,272,273,277,286,288,294,299,300,301,303,304,307,308,309,313,315,318,319,322,323,327,333,336,337,338,340,343,344,345,346,348,349,350,351,353,355,356,358,359,361,363,374,376,378,379,381,384,385,387,388,389,390,391,394,395,396,400,402,407,409,414,416,417,418,419,420,426,427,428,429,430,444,445,446,447,449,451,452,453,457,458,459,460,461,464,466,467,468,476,478,479,480,481,482,483,485,486,487,490,491,492,493,495,496,498,499,500,501,502,504,505,506,507,508,510,512,513,515,516,517,519,524,525,526,530],number_of_a:3,number_of_b:3,numbond:3,numer:[1,2,3,6,9,11,12,21,37,41,42,44,56,75,81,95,117,127,128,172,178,182,186,197,199,203,206,207,211,212,213,215,216,218,219,220,222,223,231,238,239,248,251,255,269,272,301,318,322,323,348,353,355,356,358,359,363,384,387,388,407,413,427,444,449,451,452,459,460,466,479,480,490,492,496,497,498,505,508,514,515,516],numpi:11,nvalu:[219,223,496],nvaluelast:496,nvc_get_devic:14,nvcc:[1,9,16],nve:[1,2,3,4,5,6,7,8,9,10,15,39,42,95,99,129,178,210,216,236,239,248,249,251,254,255,256,257,261,264,269,272,277],nve_aspher:[274,278,292],nve_bodi:[275,279,293],nve_spher:[276,280,297],nvida:16,nvidia:[1,3,9,14,16,394],nvt1:519,nvt2:519,nvt:[2,3,5,6,7,8,15,42,95,99,129,159,160,161,162,165,166,167,168,170,210,216,217,220,222,223,232,236,239,247,249,251,255,256,264,269],nvt_aspher:[274,278,297],nvt_bodi:[275,279],nvt_sphere:[276,280],nvtfe:216,nwait:300,nwchem:7,nxnode:348,o_core:160,o_shell:160,oascr:7,obei:[3,232,381,493],ober:7,obj_shared_foo:12,obj_target:12,object:[6,8,11,12,14,40,42,206,229,252,258,261,304,324,331,387,388,496,501],observ:[15,272,308,339,340,343,344,351],obsolet:13,obstacl:[4,253],obtain:[1,3,9,12,15,28,77,95,113,117,176,208,212,246,249,258,277,300,301,343,378,396,413,444,449,458,467,481,483,507],obviou:[12,490,525],obvious:206,obviousli:[304,513,525],occ:422,occasion:[3,272,493],occlus:206,occup:[3,176,394,422],occur:[1,3,6,11,12,16,39,59,61,63,64,75,94,115,176,179,181,197,199,203,204,207,217,225,228,229,231,232,242,243,247,250,253,261,270,286,309,318,336,345,358,359,361,378,390,394,416,419,440,451,452,460,479,493,495,496,501,503,507,512,515,525],occurr:[371,498,512,525],oct:11,octahedr:24,octant:495,odd:[41,117,207,225,272,318,339,340,348,513],ode:[9,319],off:[1,3,6,12,14,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,36,37,39,40,43,44,45,46,47,48,49,50,51,53,54,55,56,61,63,68,73,75,118,119,123,124,126,152,153,155,161,165,176,177,182,184,185,186,187,188,189,190,191,192,193,195,196,198,199,203,204,206,207,210,213,217,223,224,227,228,232,240,246,247,248,250,252,255,256,261,272,274,275,276,277,278,279,280,281,282,286,290,292,293,295,297,303,305,306,310,311,318,321,322,336,351,353,356,357,362,363,364,365,367,368,369,371,372,373,378,379,387,389,390,392,394,395,396,398,401,402,403,404,405,406,408,409,410,412,413,414,417,418,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,442,444,445,449,450,451,452,453,454,456,460,461,462,464,466,467,469,476,477,478,479,481,482,483,484,486,488,489,490,493,494,495,498,500,501,505,507,510,511,512,517,522,524,525,528,530],offend:[3,496],offer:[6,17,181,386,410,467,493,507],offic:7,offload:[1,9,15,16,252,394],offset:[3,6,59,178,206,232,233,304,388,410,432,436,477,498],offsite:8,often:[1,3,6,7,12,13,14,15,16,17,36,55,75,172,198,206,213,222,223,225,229,231,245,252,272,301,320,372,381,386,387,389,390,391,394,409,414,432,479,481,483,493,512,517,519,520,524],ohio:446,old:[3,6,210,229,233,272,444,459,469,499,502,506,509,524,528],older:[3,5,12,13,15,16,207,229,272,469,525],oldlac:207,oleinik:400,olfason:[6,24,373,426,510],oliv:207,olivedrab:207,olivier:9,ollila:[258,260,261,262],olmsted:[216,299],omega0:373,omega:[2,3,6,65,92],omega_dot:272,omega_ij:415,omega_ijk:483,omega_ik:481,omegadd:[451,452],omegai:[124,129,203,204,338],omegax:[124,129,203,204,338],omegaz:[124,129,203,204,338],omgea:6,omiss:[0,7],omit:[199,207,239,355,404,413,436],omp:[1,2,3,7],omp_num_threads:[3,15,17,394],omp_proc_bind:16,ompi_comm_world_local_rank:12,on_the_fli:216,onc:[0,1,3,6,11,12,15,41,61,65,75,114,184,205,206,210,211,212,225,231,245,247,249,256,304,307,318,319,336,344,349,351,359,385,388,389,390,423,425,427,457,461,495,496,505,515,519,525],once:[0,2,6,8,12,40,41,62,99,207,225,226,227,233,300,349,428,512,520],one:[3,6,12,13,16,28,42,76,81,99,127,152,160,206,226,227,232,268,272,277,316,332,336,343,348,350,379,388,400,411,442,460,467,493,496,498,499,507,510,525],onelevel:495,onewai:[2,3,210],ongo:252,oniom:[9,312],onli:[1,2,3,6,7,8,9,11,12,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,45,46,47,48,49,50,51,53,54,55,56,58,61,62,63,65,66,68,69,70,71,73,74,75,77,79,82,84,85,86,88,89,91,94,95,96,98,100,102,103,106,107,108,109,110,111,113,114,115,116,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,161,162,164,165,166,168,169,170,171,172,173,175,176,177,178,181,182,184,185,187,188,189,190,191,192,193,195,196,197,198,199,200,202,203,204,205,206,207,208,210,211,212,213,214,215,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,236,238,239,240,241,242,243,244,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,287,288,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,307,308,309,310,311,312,313,314,315,318,319,320,321,322,323,324,325,326,327,328,329,331,336,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,364,365,366,367,368,369,371,372,373,374,376,378,379,381,384,387,388,389,390,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,495,496,498,499,501,502,503,505,506,507,508,509,510,512,513,514,515,516,517,519,520,525,526],only:[2,3,6,13,15,41,61,74,76,112,131,156,157,158,181,203,204,205,206,207,208,220,223,229,231,239,247,250,264,267,271,288,294,299,303,309,310,318,344,350,351,359,361,378,387,389,395,396,400,402,405,409,417,418,420,426,428,429,441,442,444,445,446,453,457,458,459,460,468,478,481,482,483,486,507,516,519,525,528],only_group:176,onn:507,onset:[308,371],ontario:9,onto:[152,180,228,233,239,258,476],onward:2,open:[0,3,5],opencl:[1,3,7,14,394],opengl:6,openkim:9,openmp:[1,3,4,7,9,10,12,15,16,17,376,394,460,511],openmpi:[12,14,15,16,17,394],opensourc:7,oper:[1,3,6,7,8,11,12,15,16,39,41,42,61,75,99,128,131,166,168,169,178,181,182,207,210,217,219,220,222,223,225,226,227,228,233,239,247,250,257,267,268,269,270,272,273,274,275,276,277,278,279,280,285,292,293,295,296,297,304,306,307,316,318,320,322,324,335,336,337,338,342,346,348,352,354,359,361,376,378,379,386,389,391,394,447,464,466,492,493,494,495,496,498,499,500,501,503,504,506,507,511,512,515,520,525,526,529],operat:3,opl:[2,15,186],opls:[7,186,195,198,427],oppelstrup2:9,oppelstrup:[9,447],oppos:[6,39,201,203,204,317,355,379,388,498],opposit:[6,28,74,184,215,255,262,299,318,351,389,410,440,484,496],opt:[1,2],optic:156,optim:0,optimiz:[15,310,387,409],option:[0,1,2,3,4],optional:[227,247,315,354,394,460,468,506],optionn:16,options:[9,12,15,16,447],orang:[2,206,207],orbit:[309,311,400,410,419,467,477],orchid:207,order:[2,3,6,9,11,12,15,26,28,37,39,41,56,61,65,68,73,75,84,95,97,98,100,102,103,117,119,123,126,129,142,152,153,154,155,156,157,158,159,160,161,164,165,166,167,168,170,171,182,187,198,199,203,204,206,207,210,213,218,220,222,223,224,226,227,228,229,230,236,238,239,243,247,249,251,252,254,258,259,261,270,272,299,307,308,312,315,316,317,318,319,320,321,322,324,329,331,337,343,347,348,349,350,360,361,362,364,365,366,368,371,372,378,383,388,389,395,396,397,400,409,415,416,417,419,420,423,424,427,429,432,440,444,447,451,452,459,460,461,467,477,478,479,480,481,482,483,484,486,487,493,495,496,498,499,503,505,507,508,512,515,519,525,530],orderomg:3,ordinari:[122,319,426,456],org:[6,7,11,12,13,299,458],organ:[0,3,6,7,8,409],organis:[464,466],organometal:24,orien:508,orient:[2,3,6,8,13,28,40,42,65,74,75,90,99,100,117,124,129,178,202,203,204,210,232,238,247,261,269,272,274,275,278,279,282,283,284,287,290,291,292,293],orientord:[2,3,65,100],origid:219,origin:[3,6,7,9,12,75,87,113,114,125,130,174,180,202,206,207,210,211,212,219,226,227,232,236,239,256,269,272,295,301,304,314,318,320,328,335,346,375,377,378,381,386,395,396,398,400,410,413,414,416,417,426,429,444,456,459,460,481,483,484,485,495,498,499,500,501,502,503,520,524,528],orlikowski:447,ornl:[7,9,14],orsi:28,ortho:[3,61,180,498],orthogon:[0,3],orthograph:206,orthong:61,orthongon:[61,318],orthonorm:233,orthorhomb:308,os4:177,oscil:[6,9,163,227,232,235,236,256,269,270,272,308,313,318,353,354,356,358,388,397,484],oscillatori:[269,328],ose:206,oserror:11,other:[0,1,2,3,5],otherwis:[1,3,9,12,16,17,36,39,55,57,75,122,130,156,157,158,171,179,184,198,204,207,208,217,219,226,227,232,245,247,249,256,272,318,319,372,373,383,387,394,402,427,431,441,442,457,487,491,493,496,498,499,519,525],otyp:[410,432,436,440],our:[5,6,7,8,13,258,322,449,481,483,519],out:[1,2,3,4,6,7,8,11,12,13,17,18,20,41,66,69,75,79,86,98,99,103,104,107,113,114,115,116,118,125,126,155,156,157,158,159,161,162,164,165,166,167,168,170,171,173,175,181,185,203,204,206,207,208,210,225,226,227,230,240,246,247,253,255,258,263,286,288,300,302,303,304,307,313,314,315,318,332,348,357,359,360,361,362,364,368,376,377,381,385,389,393,419,427,443,477,492,493,495,496,501,502,503,505,506,507,509,512,514,515,516,517,521,523,525,526,527,528,529,530],outcom:[318,526],outer2:[405,425],outer:[3,8,15,57,75,237,253,361,377,385,387,393,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,411,413,414,416,417,418,419,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,450,451,452,454,456,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,485,486,487,488,489,490,491,493,506,507,512,517,518,525],outer_distance_cutoff:426,outermost:[37,56,75,211,212,213,214,224,234,238,250,253,267,269,272,299,310,317,321,324,332,333,334,335,352,353,357,390,479,480,507],outfil:[13,495],outlin:[6,206],outmost:252,outpur:119,output:[0,1,2,3,5],output_frequ:216,outputss:139,outsid:[3,8,59,61,75,168,178,202,203,204,205,206,207,208,222,233,239,247,253,318,320,336,341,342,355,356,357,358,359,376,389,401,403,410,419,432,434,454,462,496,498,499,501,508,515,526],outut:6,outward:[75,176,353,357,358,498,507],over:[1,3,5,6,7,12,15,17,26,39,41,42,55,62,68,71,73,75,84,85,95,96,97,98,100,102,111,113,115,117,119,126,127,129,137,138,144,149,152,153,158,161,164,172,174,187,199,206,208,210,211,212,218,219,220,221,222,223,224,225,226,227,231,232,233,245,248,249,253,255,256,257,261,269,270,271,272,273,274,275,276,278,279,280,292,293,295,296,297,299,304,305,308,315,316,317,318,319,320,324,332,336,339,340,341,342,344,347,350,351,353,355,356,357,358,359,362,377,380,389,390,391,408,414,417,418,419,420,426,441,444,447,457,468,469,477,478,479,481,482,483,486,494,495,496,501,503,504,506,507,512,513,516,524,525,526],overal:[6,17,24,61,172,229,236,272,273,301,322,336,361,385,419,426,427,468],overalap:318,overcom:[286,336],overflow:[3,388,390],overhead:[6,11,18,41,207,219,221,225,239,244,307,390,391,501,517],overkil:318,overlai:[2,6,15,95,118,172,211,212,348,410,414,416,426],overlaid:7,overlap:[3,13,15,64,80,119,126,178,181,199,207,215,218,219,222,223,233,237,264,286,304,309,315,318,320,336,354,358,378,381,385,387,388,394,414,419,424,427,430,440,463,465,469,485,498,501,507],overli:319,overload:1,overrid:[3,9,12,15,16,21,44,75,164,178,186,206,207,211,212,229,237,267,272,321,363,378,388,390,407,426,427,444,449,459,495,496,500,508,510,515,525],overridden:[6,178,206,277,318,430,441,449,469,477,506,525,528],overshoot:231,overview:[0,1,2,6,7,8,9],overwrit:[11,12,21,44,186,207,219,220,221,222,223,320,363,376,382,407,444,496,499,500],overwritten:[204,306,347,376,426,427,493,494,499],own:[3,4,6,7,8,11,12,13,14,16,39,41,61,63,65,68,69,73,75,77,79,84,86,98,102,103,114,116,124,125,126,128,129,131,158,161,173,175,176,203,204,207,210,216,218,219,220,221,222,223,225,228,229,231,232,245,248,249,255,256,258,267,270,272,274,275,276,277,278,279,280,292,293,295,297,301,305,313,318,320,339,340,341,350,378,389,394,396,400,409,418,429,457,459,460,478,481,482,483,486,495,508,513,515,520,526],oxford:[28,95,413],oxid:[9,409,410,467],oxygen:[6,40,244,307,410,432,436,467,498],oxygen_c:160,p10:424,p_e:348,p_ik:457,p_pi:400,pacakg:[15,394],pack:[5,8,70,354,394,400,444],pack_bord:8,pack_border_bodi:8,pack_border_hybrid:8,pack_border_vel:8,pack_comm:8,pack_comm_bodi:8,pack_comm_hybrid:8,pack_comm_vel:8,pack_exchang:8,pack_restart:8,pack_revers:8,pack_reverse_comm:8,pack_reverse_hybrid:8,packaag:394,packag:0,packakg:14,packet:[7,9,40,206,397,419],pad:[3,203,204,206,207,301,525],padua:[9,13],page:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,21,36,40,42,44,55,59,61,65,69,71,79,84,86,95,98,102,103,114,115,116,118,120,121,123,125,128,129,131,153,156,157,158,171,173,175,178,179,180,186,198,202,203,204,205,206,207,208,210,211,212,217,218,219,220,221,222,223,231,233,247,254,255,256,267,272,273,278,279,280,284,292,293,295,296,297,304,307,318,332,336,339,340,341,350,354,357,359,361,363,372,377,383,387,388,389,390,394,395,396,399,407,409,410,417,418,420,426,427,429,430,444,445,446,449,453,457,458,468,477,478,481,483,485,486,496,498,499,500,501,503,506,507,508,510,515,516,525,526,528,529],pai:[14,17],painless:520,pair:[1,2,3,4],pair_:[95,211,212],pair_airebo:429,pair_charmm:440,pair_class:8,pair_coeff:[2,3,6,95,99,119,126,179,184,211,212,227,315,336,395,396,397,398,399,400,401,402,403,404,405,406],pair_dpd:9,pair_dzugatov:520,pair_eam:395,pair_eff:164,pair_foo:8,pair_gayberne_extra:9,pair_hybrid:[427,484],pair_interact:216,pair_kim:211,pair_list:431,pair_lj:440,pair_lj_cut:8,pair_lj_soft_coul_soft:95,pair_modifi:[2,3,6,95,96,118,121,378,387,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,413,414,416,417,418,419,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448],pair_resquared_extra:9,pair_sph:[470,471,472,473,474,475],pair_styl:[0,1],pair_tally_callback:8,pair_writ:[2,3,407,438,477,479,480],paircoeff:[3,491],pairfoo:8,pairij:[3,498],pairkim:3,pairstyl:8,pairwis:[0,1,3,5,6,7],pakketeretet2:520,palegoldenrod:207,palegreen:207,paleturquois:207,palevioletr:207,pan:206,panagiotopoulo:[411,422],pandit:[9,311,460],papaconstantopoulo:395,papayawhip:207,paper:[3,6,7,8,9,13,39,40,66,152,166,172,190,255,258,262,271,303,309,311,318,336,344,348,351,378,386,389,396,404,410,424,426,429,434,436,456,459,460,481,483,493,512],paquai:[9,288,294,383,520],paradyn:5,paraemt:461,paragraph:[75,166,353,381,451,452,479,499,500],parallel:[0,1,2,3,4,5,6,7,8,9,10],parallel_studio_xe_2016:15,parallelepip:[6,180,381,498,501],parallelipip:[180,300],paralleliz:[9,303],param:[3,309,311,421,430,495,501],param_free_:211,param_free_sigma:211,paramet:[0,2,3],parameter:[130,177,396,400,409,410,417,418,419,420,429,444,445,446,457,459,460,467,478,481,482,483,486],parameter_fil:216,parameterizaion:410,parametr:[6,9,35,418,458,462],paramt:[115,309,355,461],paramter:409,paratem:440,paraview:[204,320],parent:[3,8,359],parenthes:[37,56,199,242,243,319,421,424,451,452,479,480,525],parenthesi:[2,15,219,361,525],parinello:[6,7],pariticl:225,paritlc:3,park:[3,7,9,216,324,446,456],parmin:447,parrinello1981:229,parrinello:[229,249,270,272,273,308,340],pars:0,parser:[12,525],part:[0,1,2,3,6,7,8,9,11,12,16,19,20,22,23,24,25,26,27,28,29,30,31,34,35,36,37,40,41,43,45,46,47,48,49,51,53,54,55,56,66,70,74,75,76,82,85,88,89,91,100,106,107,108,109,110,111,113,115,118,119,122,123,126,129,130,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,160,162,164,165,169,170,172,176,177,181,184,185,187,188,189,190,192,193,195,196,198,199,203,204,205,207,208,210,213,214,215,217,221,224,225,226,227,228,229,230,232,233,235,238,239,240,241,242,243,244,245,246,247,248,249,250,252,253,254,255,256,257,258,259,260,261,262,264,265,266,267,270,272,273,274,275,276,277,278,279,280,281,282,283,284,285,287,288,290,291,292,293,294,295,296,297,299,300,301,303,304,308,309,310,311,312,313,314,315,317,318,319,321,322,323,324,325,326,327,328,329,331,332,333,335,336,339,341,342,343,344,345,346,347,348,349,351,353,354,355,356,357,359,360,361,362,364,365,367,368,371,372,373,378,379,387,388,389,390,394,395,396,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,444,445,446,447,450,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,488,489,490,495,496,498,499,500,501,505,506,507,510,516,520,525,530],partai:[9,458],parti:[4,9],partial:[1,2,3,6,8,65,112,155,158,164],partic:6,particip:[197,227,399,430,485],particl:[0,3,4,5],particleenergi:3,particleviri:3,particular:[1,3,4,6,8,10,12,40,65,68,73,74,75,84,102,119,124,126,127,152,178,202,203,204,206,210,211,215,225,228,247,248,253,254,258,269,272,299,304,317,318,322,343,354,359,362,379,381,385,388,394,399,400,401,403,405,406,408,412,415,418,419,423,425,427,432,436,440,443,450,453,454,461,462,477,478,481,482,483,484,486,493,495,498,499,500,505,506,508,516,520,525,526,529,530],particularli:[6,7,9,12,14,24,39,206,229,318,379,419],particuolog:42,partilc:336,partit:[2,3,6,7,12,41,64,154,166,180,207,225,273,301,375,377,382,389,393,404,405,419,432,433,436,443,448,457],partitoin:64,partner:[3,7,63,226,227,228,256,336,351,484,508,513,519],pascal:[9,13,524],pass:[6,7,8,9,11,69,78,79,86,87,97,98,103,113,114,115,116,129,173,203,204,206,207,208,229,230,245,247,269,270,272,307,336,353,377,383,390,394,427,430,459,476,496,498,499,503,509,525,529],passphras:12,password:520,past:0,patch:[0,12],patchi:318,patel:447,path:[3,6,7,11,12,13,14,208,254,271,301,324,336,343,348,389,395,396,400,407,417,418,420,429,444,445,446,453,457,458,459,467,468,478,481,483,486,499],pathtolammp:467,patient:12,patom1:[119,126],patom2:[119,126],patrick:482,pattern:[3,7,12,64,77,500],pattnaik:318,paul:[0,7,13,255,257],pauli:[419,467],paus:506,paves:301,payn:[152,458,468],pb2:177,pb4:177,pbc:[75,203,207,353,397],pchain:[272,273,277,318],pcie:1,pd2:177,pd4:177,pdamp:[272,273,277,305,318],pdb:[6,13,208],pdebuyl:9,pdf:[0,8,9,13,16,40,109,110,111,122,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,230,254,265,266,325,326,327,328,331,456,470,471,472,473,474,475,508],pdim:351,pdlammps:[82,85,456],pdlammps_eps:[9,122,456],pdlammps_overview:9,pdlammps_ves:[9,456],pe_eta:272,pe_etap:272,pe_omega:272,pe_strain:272,peachei:13,peachpuff:207,peak:422,pearlman:95,peculiar:12,pedersen:379,peform:[39,310],penalti:[459,460],pencil:[6,75,166],pend:3,penetr:[42,132,463,465,508],penetret:40,peng:177,penn:13,peopl:[7,8,9,12],peptid:[4,9,230],per:[0,1,3,5],peratom:[3,121,153,176],perceiv:206,percent:[3,12,15,229,394,478],percentag:[1,12,229,272,304,305,318],percol:227,perfect:[6,41,74,77,100,225,299,389],perfectli:[41,225,499],perfom:[6,389],perform:0,performac:1,pergamon:[444,483,490],perhap:381,peri:[2,3,4,6,7],peridyma:82,peridynam:[3,4,6,7,9,40,65,82,85,122,456,477,498,508],perimitt:411,period:[2,3,6,7,8,9,12,21],perioid:353,perl:[6,13],perm0:524,perman:[3,39,54,75,182,226,227,252,317,359,394,426,502,510],permeabl:298,permiss:[227,496],permit:[6,258,447],permitt:[411,483,489,490],permut:[12,418,478,481,483,486],perpendicular:[6,75,156,206,232,253,263,269,271,299,302,328,353,354,386,498],perram:[379,423],persepct:206,persist:[3,8,75,245,318,394,495,496,500,504,525],person:[9,520],persp:[3,206],perspect:206,pertain:[407,477],perturb:[9,13,74,95,268,316,353,356,358,503],peru:207,peskin:258,pessimist:379,petersen:[336,379],pettifor:[400,477],pettifor_1:400,pettifor_2:400,pettifor_3:400,pfactor:206,pforc:496,phantom:252,pharmaceut:7,phase:[3,12,15,272,343,351,400,432,482,495],phd:458,phenol:519,phenomena:419,phi0:[196,317],phi1:185,phi2:[185,418,478],phi3:[185,418,478],phi:[1,3,4,7,9,10,12,15,16,84,100,117,152,197,198,199,206,250,317,365,394,395,400,417,420,444,445,446,511],phi_ij:[400,420,457],philadelphia:9,phillip:[256,414,519],phillpot:[310,409,410,467],philosoph:417,philosophi:[6,7,254],phonon:[0,2],phophor:468,phosphid:468,phy:[6,7,13,19,20,24,39,43,45,46,66,74,77,95,96,100,117,121,123,152,153,160,166,184,185,195,205,217,221,229,230,236,239,248,249,254,255,256,257,258,270,271,272,273,277,288,290,294,295,296,300,301,305,308,310,313,318,322,323,324,336,339,340,343,344,345,346,348,351,353,362,371,373,378,379,386,389,396,400,401,405,406,408,409,410,411,412,413,414,415,417,418,419,422,423,424,425,426,429,432,434,436,437,440,441,442,443,444,446,448,449,451,452,454,456,457,461,467,468,476,478,479,480,481,482,483,484,486,493,507,510,512,519],physic:[3,6,12,15,16,17,40,42,53,61,132,160,172,197,216,232,239,249,255,257,258,260,261,262,270,300,309,311,347,348,379,381,389,394,396,398,404,408,417,426,427,447,458,459,460,463,471,472,474,475,493,495,507,508,513,524],physica:[441,442],physik:[7,9],pic:9,pick:231,picki:8,picocoulomb:524,picogram:524,picosecond:[207,232,516,524],picosend:419,pictur:7,pid:231,piec:[3,11,152,207,272,505,530],pierr:9,pieter:13,pimd:[2,6,7,13,254],pin:15,pink:207,pipe:[6,203,206],pipelin:[3,6,15],pisarev:348,pishevar:414,piston:[2,3,9,210,215],pitera:6,pixel:206,pizza:[6,7,11,13,41,203,206,225],pjintv:13,pka:348,place:[3,6,7,11,12,32,41,50,75,95,172,178,182,191,199,203,206,207,209,210,211,212,227,228,232,239,247,248,249,251,254,255,256,257,259,261,262,272,278,279,280,292,293,297,304,307,316,318,339,340,341,348,353,356,358,377,407,426,477,485,495,496,499,506,508,513,516,525],placehold:[32,191,395,396,409,417,420,428,429,444,445,446,453,457,459,460,468,476,478,481,482,483,486],placement:[381,432],plai:[6,206,343],plain:[9,440,496],plan:[3,5,6,15,16,180,498],planar:[6,40,42,253,299,354,371,373],planck:[247,301],plane:[3,6,9,41,42,59,61,70,75,100,206,210,216,225,250,253,263,299,302,312,332,335,348,354,362,364,365,366,367,368,373,381,383,442,485,501,508],plane_wiggl:383,planeforc:[2,210,263],plasma:[96,273,348,419],plastic:[2,3,9,65,82,85],plastic_strain:133,plateau:231,platform:[1,3,7,9,12,13,14,15,16,203,206,208,500,505,530],plath:[6,99,210,344,351],player:206,pleas:[0,3,7,11,12,13,15,216,231,249,258,262,300,303,307,314,343,359,418,420,456,464,466,467],plen:397,plimpton:[0,5,7,15,74,123,153,228,299,309,336,424,456],plog:[3,12,507],ploop:[272,273,277],plos:28,plot:[7,11,13,15,57,308,438,440,479,480,487],plu:[3,11,12,39,61,71,106,176,181,207,224,229,232,233,277,318,391,419,430],plug:9,plugin:[9,13,208,499],plum:207,pm3:177,pmb:[2,9],pme:379,pmf:[230,324,332],png:[3,12,203,206],pni:206,poariz:6,poem:[2,3,6,9,12,210],poems:[3,6,7],point1:498,point2:498,point3:498,point:[1,2,3,4,6,7,8,9,11,12,15,17,28,37,40,41,42,56,61,74,75,90,92,93,124,125,130,152,156,157,171,176,177,178,189,199,201,202,203,204,206,207,210,215,219,221,223,225,229,232,233,234,238,242,243,246,247,249,252,253,258,261,269,271,272,274,275,276,278,279,280,282,283,284,287,290,291,292,293,295,297,300,301,307,308],point_data:320,pointer:[3,7,8,9,11,245,496],pois:524,poiseuil:[4,213,250],poisson:[61,232,379,424],poisson_solv:216,polak:386,polar:[6,7,117,152,160,177,216,235,409,410,432,484,519],polar_off:409,polar_on:409,polariz:0,poli:[2,3,176,304,381],politano:[9,467],pollock:[7,379],polya:359,polybond:13,polychain:318,polydispers:[3,388,402,408,424,441,442,477,489],polyethylen:396,polygon:[6,42,176],polyhedron:176,polym:[0,5,6,7,10],polymer:7,polymorph:[2,3,7],polynomi:[9,37,56,199,417,438,449,467,472,479,480],polytechn:303,poor:[16,41,225,295,296,322,394,438],poorli:[386,387],pop:[3,8],popen:12,popul:[12,313,381,416,498],popular:[12,203,418],pore:332,poros:181,porou:[258,261],port:[252,254],portabl:[7,9,12,203,205,230,459,500],portion:[1,3,9,11,12,14,41,54,67,72,75,83,96,99,101,118,119,121,124,153,154,168,203,204,207,218,219,222,223,225,229,239,244,258,272,274,275,276,278,279,280,310,315,316,318,320,361,377,390,394,401,403,404,405,406,410,411,413,414,419,421,422,423,425,426,432,436,440,443,454,461,462,483,487,497,498,503,507,508,517,520,525],poschel:424,posfreq:315,posit:[3,6,26,39,40,41,42,46,59,61,74,75,86,87,97,98,113,114,119,128,130,134,152,153,161,176,177,178,180,181,182,187,189,197,199,202,204,205,206,207,210,211,213,215,217,218,219,222,225,226,227,228,229,230,231,232,233,236,238,239,247,248,249,250,252,253,255,256,257,258,260,261,265,266,269,270,272,273,274,275,276,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,295,296,297,299,300,301,303,304,305,308,309,313,315,316,318,319,322,324,328,331,332,335,336,338,339,340,341,343,345,346,347,348,351,353,354,355,356,357,358,359,362,378,381,389,396,397,399,402,414,415,416,419,422,435,451,452,460,467,476,479,480,485,493,498,501,508,517,519,525,526],posix:252,posix_memalign:12,possibl:[1,3,6,8,9,11,12,14,37,40,41,55,61,65,74,75,95,124,126,129,152,153,156,157,171,202,203,204,205,207,210,212,216,217,225,226,227,228,233,235,241,249,256,267,299,304,312,313,315,318,319,331,336,338,348,349,354,367,377,379,387,390,391,394,416,426,444,460,464,466,467,479,480,486,496,502,511,512,516,519,525,526,529],post:[0,4,6],post_forc:8,post_force_integr:8,post_force_respa:8,post_integrate_respa:8,postit:286,postiv:94,postma:[305,339],postprocess:13,pot:[424,460],potentail:420,potenti:0,potentials:10,potentiel:440,potetni:427,potin:447,potpourri:9,pour:[2,3,4,6,9,112,180,207,210,233],pourtoi:343,pow:232,powderblu:207,power7:16,power8:16,power:[3,9,11,15,115,152,207,313,378,394,400,496],pparam:[95,211,212],ppm:[12,203,206],ppn:[14,15,16,17,394],pppm:[0,1,2,3,5],pppm_disp:3,pppmdisp:3,pproni:[3,248],pr3:177,pr4:177,practic:[3,12,229,272,273,300,307,486,495,520],prb:[481,483],prd:[2,3,4,6,9,94,232,389],pre:[3,6],pre_exchang:8,pre_forc:8,pre_force_respa:8,pre_neighbor:8,prec:[15,467],prece:466,preced:[2,6,61,184,204,207,218,219,220,221,222,223,254,315,319,320,361,381,389,394,400,426,512,515,516,525],preceed:[11,12,75,166,220,353,496,525],precipit:176,precis:[1,3,9,12,13,14,15,16,19,20,22,23,24,25,26,27,28,29,30,31,34,37,39,40,43,45,46,47,48,49,51,53,54,56,113,123,155,165,178,184,185,187,188,189,190,192,193,195,196,199,203,207,213,219,223,224,229,232,239,240,246,250,255,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,309,310,311,318,321,322,356,362,364,365,367,368,371,373,378,379,387,394,395,396,398,401,402,403,404,405,406,408,409,410,413,414,417,418,420,422,423,424,425,426,432,433,434,435,436,437,438,439,440,441,445,447,450,453,454,456,459,460,461,462,467,469,478,479,481,482,483,484,486,488,489,490,500,501,507,508,511,515,516,519,524,525,526],precv:495,predefin:[196,207,359,419],predict:[1,6,10,12,286,318,394,517],preexponenti:512,prefactor:[23,24,27,31,34,35,172,186,198,211,212,220,353,364,368,371,387,408,422,453,461,462,469,489],prefer:[7,8,12,251,317,349,396,520],prefix:[11,12,206,230,231,300,319,492,495],preliminari:[37,56,199,242,243,451,452,479,480],prematur:387,prepar:[8,9,309,312,336,509,519],prepend:459,preprint:[152,288,294,383,468],preprocessor:252,prerecord:230,prescrib:[6,8,156,157,158,171,210,211,216,219,233,269,289,349],presenc:[203,226,227,258,261,441,442,447,489,528],present:[1,3,9,12,15,17,176,199,205,206,231,233,248,249,254,258,259,261,262,313,331,354,357,360,409,419,431,440,447,460,461,467,495,519],preserv:[3,61,229,232,272,322,336,358,499],press:[2,3,6,9,15,28,95,106,107,121,153,164,210,229,236,247,249,256,267,270,272,274,275,276,277,278,279,280],pressdown:224,pressur:[1,2,3,6,7,8,9,59,65],pressure_with_eviri:419,presum:[77,167,210,211,212,232,389,427,501],prevent:[2,3,6,40,132,197,233,246,304,336,347,371,378,385,387,389,394,414,427,455,471,472,474,476,496,500,506,508,519,525],previou:[0,2,3,5,6,8,11],previouli:233,previous:[3,9,11,61,63,75,94,112,128,131,167,178,180,182,202,203,204,205,207,215,217,218,219,220,222,223,231,232,233,247,253,267,269,304,316,318,321,322,348,350,353,354,355,356,358,359,380,424,477,493,496,500,501,511,513,515,516,521,522,523,525,526],prevoiu:354,price:[6,413],primari:[0,6,348],primarili:[5,7,9,16,154],prime:[236,256,425,447,481,483,495],primit:[3,6,356,357,381],princip:[3,129,252,467],principl:[6,9,11,252,273,309,419,428,447,478,495,520],prinicp:[42,318,388],print:[0,1,2,3,6,7,8,11,12,15,16,17,18,41,99,106,107,128,152,203,204,206,207,208,210,219,220,221,222,223,228,229,233,252,255,258,267,270,272,274,275,276,277,278,279,280,288,289,292,293,294,295,297,299,303,304,305],printabl:2,printf:[207,515],printflag:428,printfluid:258,prior:[176,201,323,380,529],priori:507,prism:[3,6,166,180,501],priveleg:3,privileg:[11,12,252],prob:[226,227],probab:469,probabl:[3,8,12,40,75,168,181,182,197,217,225,226,227,228,233,247,256,272,304,353,359,387,449,451,452,479,493,512,519],probe:525,problem:[0,1,2],problemat:247,proc:[1,3,8,11,12,14,15,124,203,204,377,495],proce:[41,54,182,225,237,389,447,505,513,516],procedur:[6,12,39,41,207,217,225,247,255,256,257,272,274,275,276,277,278,279,280,292,293,295,296,297,300,339,340,341,342,345,346,387,389,396,402,499,519],proceed:[12,447],procesor:[41,495],process:[1,3,4],processor:[1,2,3,4,6,7,8,9,11,12,13,14,15,16,17,39,40,41,42,60,61,63,64,65,68,71,73,75,84,102,119,124,126,127,129,166,176,178,180,181,182,202,203,204,206,207,210,216,219,225,226,227,228,229,232,245,248,249,255,256,258,272,301,307,310,313,318,322,323,336,348,359,375,376,377,378,382,389,391,392,393,394,414,416,455,467,492,493],processsor:[41,225,495],procp1:[203,204],procsessor:517,procssor:507,produc:[1,3,4,6,7,12,13,14,15,16,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,41,42,43,45,46,47,48,49,51,53,54,56,65,68,71,73,75,84,102,119,121,123,124,125,126,128,129,131,153,155,165,176,184,185,187,188,189,190,192,193,195,196,199,203,204,206,207,210,213,218,219,220,222,223,224,225,228,231,232,240,245,246,248,249,250,255,256,257,267,269,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,304,308,309,310,311,313,318,319,320,321,322,337,338,348,349,350,353,356,361,362,364,365,367,368,371,373,379,387,389,392,394,395,396,398,401,402,403,404,405,406,408,409,410,413,414,417,418,419,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,445,450,453,454,456,457,460,461,462,469,478,479,480,481,482,483,484,486,488,489,490,493,495,500,501,503,504,507,512,513,516,525,526],product:[6,15,16,17,152,176,232,295,309,319,349,394,397,419,421,452,460,480,495,525],proessor:394,prof:303,profi:167,profil:[2,3,6,65,156,157,158,161],program:[3,4,6,7,9,11,12,13,15,16,154,203,206,207,208,210,230,245,252,258,312,417,496,497,509,525],programm:[13,16],progress:[1,41,225,252,270,308,386,387,389,516,519],prohibit:508,project:[6,7,13,386,477,520],promis:7,promot:400,prompt:[8,11,12,252,509],proni:[3,248,249],pronounc:251,proofread:8,prop:[6,307],propag:[4,9,215,272,308,325,419,427],propens:6,proper:[228,299,444,496,520],properati:307,properli:[213,238,318,323,331,388,389,415,496,526],properti:[0,2,3],propoerti:336,proport:[6,39,41,95,113,114,174,225,231,255,256,257,308,319,344,351,352,424],proportion:255,propos:[6,152,217,229,247,272,295,313,432,446,482,484],prospect:7,protect:336,protein:[7,10,15,178,316,318,334,498,506],protocol:252,proton:[483,490,524],prototyp:[42,456],prouduc:[223,350],prove:[88,89,241,258,323],proven:295,provid:[1,3,4,6,7,8,9,10,11,12,13,14,15,16,17,28,40,42,63,70,74,99,130,151,154,172,176,177,178,205,206,208,211,218,219,223,228,229,230,232,245,247,252,254,258,262,270,272,300,307,308,309,312,313,318,323,324,343,345,346,349,350,361,376,378,379,385,389,394,396,400,402,407,409,410,414,418,419,424,426,429,431,440,441,444,446,447,457,458,459,460,467,468,476,477,478,481,482,483,486,495,500,506,508,511,512,516,517,520,525],proxim:202,psa:356,pscreen:[3,12,507],pscrozi:[0,7,13],psec:[207,232,251,255,256,272,305,318,339,340,518,524],psend:495,pseudo:[419,493,498,503],pseudodynam:343,pseudopotenti:[9,447],psf:6,psi:[420,489],psi_ij:420,pstart:[3,272,273,277,305,318],pstop:[3,272,273,277,305,318],pstyle:[95,118,211,212],psu:[459,460],psuedo:503,psxevar:15,pt2:177,pt4:177,ptarget:229,pthread:[12,15,16],ptr:[6,11,245,496],ptype1:126,ptype2:126,pu3:177,pu4:177,pu6:177,publicli:5,publish:[7,258,262,288,294,309,383,410,444,447,481,483],pull:[324,332,520],puls:348,pump:[441,442],punctuat:[2,493,512],purchas:206,purdu:[9,13],pure:[11,336,427,445,446,481,483,507],purg:[3,499],purpl:[2,207],purport:11,purpos:[3,6,7,9,12,42,63,75,130,140,146,161,162,177,178,180,182,199,203,223,228,229,255,299,301,304,306,317,336,378,404,430,436,447,449,485,491,498,501,505,508,510,511,525,530],push:[3,8,213,224,232,253,271,299,316,324,387,424,469,520],pushd:253,put:[3,6,8,11,12,13,39,61,166,178,203,233,237,355,356,359,381,459,496,498,502],putenv:[509,525],pvar:231,px1:507,px2:507,pxx:[229,272,305,318,378,379,515,516],pxy:[3,6,516],pxz:[3,6,516],py1:507,py2:507,pydir:11,pyi:[229,272,305,318,378,379,516],pymol:[7,11,13],pymol_aspher:0,pympi:11,pypar:11,python:[0,2,3,4,6,7],pythonpath:11,pyz:[3,6,516],pz1:507,pz2:507,pzz:[229,270,272,305,308,318,378,379,516],q_1:467,q_2:467,q_3:467,q_d:519,q_i:[420,440],q_j:440,qbmsst:[2,9],qcore:309,qdamp:309,qdist:[410,432,436,440],qeq1:309,qeq2:309,qeq:[2,3,4,6,7],qeqall:467,qeqallparallel:467,qfile:[309,410],qin:251,qinitmod:467,qmin:386,qmmm:2,qmol:312,qoffload:15,qopenmp:15,qout:251,qoverrid:15,qstep:309,qtb:2,quad:[12,17,394,495],quadrant:15,quadrat:[2,3],quadratur:[95,216],quadrupl:395,quadruplet:[194,198,200,362,364,365,366,368,370,371,372,374],qualifi:[3,254],qualiti:[7,206,207,396],quantic:467,quantit:[78,87,113,114,115,174,424],quantiti:[1,3,4],quantum:[6,9,152,245,249,301,308,312,313,396,400,419,447,467,477],quantum_temperatur:308,quartic:[2,3,7],quartic_spher:216,quartz:[308,313],quasi:301,quat:[3,508],quaternion:[3,6,40,90,124,129,142,156,157,178,274,275,278,279,282,283,284,292,293,423,498,508],quati:[124,129,498],quatj:[124,129,498],quatk:[124,129,498],quatw:[124,129,498],queen:13,quench:[359,493,512],queri:[3,11,54,289,496,525],quest:[6,245],question:[8,9,12,13,288,299,359,456,520,525],queteschin:9,quick:[0,4,12,14,15,16,17,18],quickli:[3,4,8,12,13,39,100,225,232,247,252,336,386,387,389,396],quickmin:[264,288,294,385,386,387,389,512],quicktim:[4,206],quip:2,quit:[2,258,343,361,468],quot:[2,3,12,205,207,306,361,444,493,494,496,506,515,525],quotat:467,r0m:333,r10:400,r12:423,r_1:152,r_2:152,r_c:[411,413,422,483],r_cut:[400,443],r_d:519,r_e:420,r_ewald:320,r_fu:[441,442],r_i:[28,152],r_ii:152,r_ij:[28,400,419,457,490],r_ik:457,r_j:28,r_jik:457,r_m:443,r_me:411,r_mh:422,r_min:412,r_ub:19,r_x86_64_32:12,ra2:177,rad2theta:177,rad:359,radhi:501,radial:[65,75,106,107,124,127,152,162,164,169,219,257,273,285,296,332,342,387,419,426,449,451,452,498,501],radian:[19,20,23,27,31,34,35,37,129,177,185,196,199,317,362,364,368,371,498,501,508],radians:199,radiat:[130,177,348],radic:[180,498],radii:[75,80,119,126,152,228,233,408,417,423,424,441,442,447,463,465,489,501],radit:419,radiu:[2,3,6,40,42,65,75,80,92,93,97,98,119,124,126,130],radlo:501,rafferti:351,rahman:[6,7,229,270,272,273,308,456],rai:[9,16,177],ram:483,raman:15,ramirez:221,ramp:[2,3,6,9,65,161,162,166],ran:[3,6,11],random:[3,6,39,178,181,202,206,215,217,226,227,228,230,233,244,247,248,249,255,256,257,258,268,272,301,304,308,313,316,318,323,336,340,343,348,352,355,402,414,415,416,493,508,513,519,525,526],random_se:493,randomli:[178,181,217,233,247,255,304,336,358,512,513],rang:[1,3,6,7,8,9,10,12,14,15,17,37,39,56,63,75,76,81,96,117,119,120,121,123,127,128,133,152,153,164,172,177,179,182,183,190,199,203,204,206,207,216,217,227,231,232,233,247,249,267,304,320,336,337,343,344,349,351,378,379,387,390,391,394,396,398,400,401,402,403,404,405,406,408,410,411,412,413,414,416,417,419,421,423,425,426,427,429,432,433,434,435,436,437,438,439,440,441,442,443,444,447,448,449,450,454,457,460,461,462,467,476,477,479,480,483,484,488,489,490,492,496,507,508,516,529],rank:[6,11,12,252,349,376,495],rankin:277,raphson:3,rapid:[4,6,11],rapidli:[3,8,12,75,228,255,270,272,318,339,340,352,410,414],rapp:[309,310,311],rappe_and_goddard:310,rare:6,rasmol:[6,7],rasmussen:423,raster3d:[6,7],rate:[2,6,12,15,136],rather:[2,6,9,12,40,41,64,123,161,206,225,232,248,249,318,340,348,352,354,355,356,359,419,451,452,459,479,480,499,503,508,510,515,525],ratio:[6,61,95,111,152,217,225,232,255,257,336,344,351,352,378,392,423,424,461,471,485,495,498,508,512],rational:[349,510],rattl:[2,3,9,210,239,264],rattle:[3,9,210,239,249,288,294,322],rattle_debug:322,ravelo:[277,434],raw:15,rayleigh:[270,308],rb1:177,rbb:467,rbg:207,rcb:[3,41,225],rcm:[97,98],rcmx:[97,98],rcmy:[97,98],rcold:239,rcut:63,rcutfac:[152,468],rd1:389,rdc:16,rdf:[2,3,65],rdn:389,rdt:389,rdx:4,reach:[6,12,41,131,221,225,227,229,231,256,277,319,328,336,343,361,377,393,411,517,519,525],reacquaint:520,react:6,reactant:[319,419],reaction:[9,243,319,324,334,347,358,389,419,421,452,480],reactiv:[9,315,396],read:[2,3,6,7,8,9,11,12,13,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,40,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,61,126,176,178,179,181,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,202,203,204,206,207,208,209,210,216,217,228,229,232,233,242,243,247,249,252,269,270,272,274,275,276,277,278,279,280,292,293,295,296,297,300,301,303,304,306,307,311,318,319,322,324,328,331,335,338,346,347,348,354,360,362,363,364,365,366,367,368,370,371,372,373,374,375,377,384,388,389,393,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,413,414,415,416,417,418,419,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,450,451,452,454,456,457,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,485,486,487,488,489,490,491,493,495,498,499,500,502,503,504,505,506,508,509,510,512,525,526,527,528,530],read_data:[2,3,6,7,8,12,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,58,59,60,61,64,69,75,78,79,86,87,90,97,98,103,113,114,116,126,173,176,178,179,180,181,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,200,201,203,206,227,228,232,269,301,307,317,319,347,362,363,364,365,366,367,368,370,371,372,373,374,384,388,389,392,393,394,397,398,399,401,402,403,404,405,406,407,408,410,411,413,414,415,416,419,422,423,425,426,427,430,432,433,434,435,436,437,438,439,440,441,442,443,448,450,454,456,457,459,460,461,462,467,469,476,477,485,488,489,491,495],read_dump:[2,3,203,389,498],read_restart:[2,3,6,8,9,12,13,19,20,21,22,23,24,25,26,27,28,29,30,31,34,36,39,40,41,43,44,45,46,47,48,49,51,53,54,55,59,60,61,64,178,184,185,186,187,188,189,190,192,193,195,196,198,210,216,217,229,230,232,233,247,258,269,270,272,274,275,276,277,278,279,280,292,293,295,296,297,301,307,318,324,335,338,348,354,362,363,364,365,366,367,368,371,372,373,384,389,397,398,399,401,402,403,404,405,406,407,408,410,411,413,414,415,416,419,422,423,424,425,427,430,432,433,434,435,436,437,438,439,440,441,442,443,448,450,454,456,461,462,469,476,477,485,488,489,491,495,498,499],read_restart_set:8,readabl:[204,206,388,505,530],reader:[3,13,499],readi:[11,12,179,181,182,252,508,519,528,529,530],readme:[1,4,6,8,9,10,11,12,13,15,176,203,204,208,312,383,428,447,459,460,496],real:[3,6,7,11,26,29,30,61,75,99,100,117,152,167,178,187,202,207,215,232,233,236,252,253,256,269,301,308,313,316,352,353,355,356,358,367,378,379,381,385,391,410,447,449,459,460,483,498,501,507,515,518,524,526],realist:[3,233,502],realiz:[75,210,496],realli:[1,3,8,12,123,134,153,207,253,390,427,510,520],realloc:3,realtim:252,reamin:[353,357],rearrang:[204,389],reason:[3,6,7,11,12,18,39,159,170,178,197,219,255,305,318,345,346,349,359,388,389,394,407,411,419,420,422,442,449,485,487,502,507,526],reax:[0,2,3,4],reax_def:3,reaxc:7,reaxff:[3,4,5,7,9,13,210,309,311,314,315,427,459,460,477,510],rebal:[41,225],rebalanc:[41,225],rebo:[2,7,9,315],rebuild:[11,12,14,15,247,390,414,516],rebuilt:[3,12,203,204,205,206,207,208,390,394],recalcul:[75,95,336],receiv:[3,224,252,254,299,495],recent:[2,3,11,12,15,210,219,222,223,225,226,227,231,251,268],reciproc:[6,12,130,176,177,300,378,401,403,404,410,413,419,432,436,454,462,512],recog:12,recoginz:3,recogn:[3,12,77,180,226,227,272,319,388,417,444,459,496,498,505,506,519],recomend:6,recommed:319,recommend:[7,12,15,206,207,239,308,346,378,419,427,441,442,447,460,461,464,466,467,507,517,520],recompil:[1,3,9,12,208,322],recomput:[112,140,182,237,324,416,510],reconstruct:[3,230,467],record:[208,230,324],recov:[229,239,272],recreat:360,rectangl:[41,225,381],rectangular:[7,41,64,180,225,247,381,498,500,502],rectilinear:[130,177,204],rector:53,recurs:[41,225,400,485],recust:41,recv:495,red:[2,206,207,228,301],redefin:[3,500,506,525],redirect:12,redo:12,reduc:[1,2,3,6,12,16,17,18,26,41,65,75,96,120,121,123,124,125,126],reduct:[17,18,128,130,177,270,308,378],redund:420,ree:472,reed:[270,308],rees:[7,9,13],ref:[345,346,386],refactor:6,refer:[2,3,6,7,8,9,11,12,14,15,28,65,71,75,85,91,94,95,112,113,114,124,126,128,131,156,157,158,171,178,202,203,204,205,210,216,218,219,220,222,223,228,229,231,232,233,239,246,270,272,273,277,299,301,303,304,306,307,308,318,322,324,343,350,355,361,362,373,378,379,386,390,395,402,416,423,430,444,446,447,461,474,475,481,483,493,494,496,500,503,506,507,508,511,512,516],referenc:[3,6,12,65,71,75,125,131,203,204,210,220,231,247,307,350,379,410,426,453,461,496,516,525],reflect:[2,3,6,75,130,152,177,198,206,210,226,227,231,233,261,270,298,300,318,353,355],refman:9,reformat:7,refresh:216,reg:501,regard:[6,61,269,322,323,328,456,460],regardless:[14,75,178,181,202,222,232,255,272,274,275,276,278,279,280,305,318,329,336,394,495,501,508],regim:[6,344,351,411,507],region:[0,2,3,6,7],region_spher:8,region_styl:357,regist:[8,127,154,331],regoin:6,regress:525,regspher:178,regstrip:359,regul:6,regular:[1,3,41,64,96,176,180,203,206,217,225,247,307,348,379,411,430,495,498,500,502],reigon:525,reinder:15,reinhardt:[345,346],reject:[178,228,459,513],rel:[1,6,26,35,41,61,75,100,113,134,142,152,156,160,161,163,178,187,207,210,217,225,232,233,236,239,247,253,256,268,269,295,299,304,313,315,316,319,324,332,336,338,343,344,348,355,359,378,379,387,419,423,424,441,442,444,461,489,499,507,512,516,519,526],relat:[1,6,8,9,10,12],relationship:[6,242,309,361,378,467,489,519,525],relax:[2,3,4,6,7,210],releas:[0,5,7,8,13,226],relect:[3,449],reles:42,relev:[2,6,12,41,82,85,122,140,178,182,207,211,212,215,216,217,218,219,220,221,222,223,225,226,227,231,232,233,237,239,240,244,246,247,248,251,252,258,259,260,262,263,264,265,266,268,269,271,281,282,283,284,285,286,287,288,289,290,291,294,298,302,303,304,306,307,312,314,315,316,320,322,329,334,336,337,338,343,344,347,348,349,350,351,352,353,354,355,356,358,359,378,383,387,397,398,402,408,410,411,413,414,416,419,422,423,424,425,426,431,433,434,435,437,438,439,441,442,449,450,451,452,456,461,469,476,479,480,488,489,490,495,511,526],reli:[3,12,310,419,460,490,498,508],reloc:12,reltol:319,remain:[7,12,32,36,41,50,55,61,75,95,114,158,159,160,161,165,166,167,168,170,181,191,197,198,199,203,211,212,217,219,220,229,232,255,256,263,272,273,278,279,280,292,293,295,297,302,303,327,336,339,340,341,347,348,359,361,369,372,388,400,419,427,440,447,449,477,493,498,499,503,508,510,512,516,517,519,520,525,526],remaina:400,remaind:[9,178,203,233,304,336,349,483,498],remap:[3,6,12,61,63,75,161,178,202,207,232,253,269,295,378,498,499,500],remedi:[6,519],rememb:[2,520],remot:520,remov:[2,3,6,8,13,54,75,76,81,100,117,125,127,152,156,157,158,159,160,161,165,166,167,168,170,171,178,181,182,204,210,219,226,244,255,256,261,264,268,270,272,278,279,280,292,293,295,297,303,309,318,319,320,322,336,339,340,341,343,359,378,389,413,442,447,498,501,509,510,520,525,526],remove_bia:8,remove_bias_al:8,remove_molecul:216,remove_sourc:216,remove_speci:216,ren:177,renam:[12,360,509,520],render:[12,13,203,206,207],rendon:[272,273],reneighbor:[3,8,12,39,59,75,225,247,336,349,359,414,515,516],renssela:303,renumb:75,reorder:[3,12,39,495],rep:513,repeat:[2,6,206,207,228,229,247,319,328,381,400,481,483,485,493,512],repeatedli:2,repel:253,repes:203,replac:[2,3,6,11,12,41,65,97,98,128,155,156,157,158,159,160,161,164,165,166,167,168,170,171,203,204,206,207,208,219,220,222,223,225,228,233,255,277,306,307,313,315,354,394,396,410,424,434,451,452,479,499,500,505,506,516,525,526,528,530],replic:[2,3,7,381,495,498],replica:[0,2,3,4],replica_fil:12,repons:231,report:[0,1],repositori:[7,9,12,428,458,459,460,520],reprens:348,repres:[1,3,6,8,9,12,14,40,41,42,61,70,74,75,98,124,127,129,190,199,203,204,206,219,220,221,222,223,229,231,236,243,248,250,255,258,272,301,303,305,313,318,319,320,324,332,333,348,350,357,379,389,395,400,423,430,440,441,442,444,445,446,454,457,459,460,484,485,493,495,498,508,510,513,519,525,528],represent:[3,6,8,9,59,61,146,180,203,248,249,301,348,400,419,423,447,461,498,501,519],reprocess:503,reproduc:[3,15,272,354,410,417,424],repul:444,repuls:[6,7,35,40,45,46,119,253,309,353,354,357,396,400,408,410,414,419,421,424,426,440,444,448,467,476,483,486,489,490,508],reqir:[309,311],request:[3,6,8,12,41,113,181,199,203,252,258,316,323,336,338,376,378,449,459,460,493,503,508,512,517,520,525,526,528],requir:[1,2,3,4,6,7,8,9,11],rerun:[2,3,7,76,81,100,117,127,152,203,206,449,499],rescal:[2,3,6,155,159,160,161,165,166,167,168,170,210,217,220,222,223,239,247,249,251,255,256,268,272,277,295,303,305,313,318,336,339,340],research:[5,7,88,89,241,258,262,323,447,493,512],resembl:[313,520],resepct:6,reserv:[12,252,519],reservoir:[99,239,247,251,255,348],reset:[2,3,6,8,11,12,63,69,75,78,79,86,87,97,98,103,113,114,116,173,178,182,210,211,212,229,232],reset_atomic_reference_posit:216,reset_dt:8,reset_target:8,reset_tim:216,reset_timestep:[2,6,99,499,503],resid:13,residu:252,residue1:390,resist:[6,252],resolut:[221,467,479,480],resolv:[229,301,336,442,520],resort:3,resourc:[7,395,417],respa:[3,15,213,214,224,234,237,238,250,252,253,267,272,299,310,317,321,324,332,333,334,335,352,353,357,392,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,411,413,414,416,417,418,419,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,441,442,443,444,445,446,447,448,450,451,452,454,456,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,485,486,488,489,490,491,506,507,517,518,525],respecifi:447,respect:[1,6,9,13,14,16,19,20,22,23,24,25,26,27,28,29,30,31,34,37,42,43,45,46,47,48,49,51,53,54,56,61,74,75,95,97,106,107,123,130,134,154,155,160,163,165,172,176,177,184,185,187,188,189,190,192,193,195,196,199,204,206,207,213,222,224,227,228,229,232,239,240,246,250,253,255,256,258,272,274,275,276,277,278,279,280,281,282,288,290,292,293,295,297,309,310,311,318,320,322,324,332,335,348,353,356,362,364,365,367,368,371,373,376,378,379,384,387,388,393,394,395,396,398,400,401,402,403,404,405,406,408,409,410,413,414,417,418,420,421,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,444,445,447,449,450,453,454,456,460,461,462,466,467,468,469,478,479,481,482,483,484,486,488,489,490,495,499,508,511,517,519,525,527,528,530],respon:9,respond:[6,7,161,231,232,419,456],respons:[6,7,231,270,344,351],resquar:[2,3,6,7,9,423],rest:[6,8,12,38,58,200,307,311,317,374,400,442,444,491,515,516,519],restart1:301,restart2:301,restart2data:[0,12],restart:[0,1,2,3],restartfil:[12,13],restor:[3,8,62,63,113,207,211,212,267,307,324,332,333,338,360,515,516],restore_bia:8,restore_bias_al:8,restrain:[2,3,28,210,217,247,270],restraint:[9,230,270,317,335,431],restratin:317,restrict:[1,2,3,6,8,9,12],result:[1,2,3,6,7,9,10,11,12,13,14,15,17,19,20,22,23,24,25,26,27,28,29,30,31,34,37,39,40,41,43,45,46,47,48,49,51,53,54,56,65,66,69,70,75,79,86,95,98,99,103,113,114,116,121,123,125,126,127,128,130,131,153,155,158,161,165,172,173,175,177,178,181,184,185,187,188,189,190,192,193,195,196,199,202,203,204,206,207,210,213,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,236,239,240,242,246,247,248,250,255,256,258,262,270,272,274,275,276,277,278,279,280,281,282,290,292,293,295,296,297,300,301,309,310,311,315,316,318,319,321,322,336,344,345,346,348,349,350,353,354,356,358,361,362,364,365,367,368,371,373,378,379,389,392,395,396,398,401,402,403,404,405,406,408,409,410,413,414,417,418,419,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,442,444,445,447,449,450,451,452,453,454,456,460,461,462,469,478,479,480,481,482,483,484,486,488,489,490,493,495,498,500,501,503,507,508,509,510,512,524,525,526],resum:525,retain:[2,226,227,396,400,447,495],retart:[32,50,191,369],retir:[3,459],retreiv:8,retriev:[6,8,245,445,446,525],reus:[3,510],rev:[6,13,66,74,100,117,121,152,153,166,217,249,255,257,270,272,273,277,295,300,310,313,318,324,336,340,343,345,346,351,386,400,408,409,410,413,417,418,419,423,424,429,434,441,442,443,444,446,451,452,457,461,468,478,481,482,483,486,493],revers:[2,6,8,95,189,228,253,272,290,298,299,309,328,344,345,351,389,440,507,519],revert:[207,515],review:[152,309,324,343,447,458,468,493,512,519,520],rewind:377,rewrap:203,rewrit:[5,12],rewritten:18,rezwanur:456,rfac0:[152,468],rfactor:336,rfile:318,rg0:334,rgb:207,rh3:177,rh4:177,rhaphson:3,rheolog:6,rhi:[451,452,479,480],rho0:[444,464,466,474,475],rho0_meam:444,rho:[2,3,40],rho_0:[474,475],rho_alpha_beta:417,rho_bkgd:444,rho_colloid:353,rho_e:348,rho_fin:347,rho_i:[445,446],rho_initi:347,rho_ref_meam:444,rho_wal:353,rhodo:[9,10],rhodopsin:[1,10,15],rhohi:304,rholo:304,rhosum:[2,110,470,471,472],rhot:239,rhs:319,ribier:386,richard:9,richardson:318,richi:[9,18],rick:[309,310,409,467],rick_and_stuart:310,ridg:[9,18],right:[3,6,11,12,41,74,154,178,196,198,202,204,225,228,253,258,269,298,299,319,361,381,410,498,501,508,520,525],rightmost:[41,225],rigid:[2,3,4],rigidid:129,rigidifi:318,rii:[97,98],rij:[100,117,226,227,299,414,415,451,452,476],rin:[426,437,438],ring:[2,3,6,127,184,301,303],rino:[77,486],rinv:378,rirj:[354,424],risi:[152,468],risk:[8,317,507],rix:[97,98],rjk:[226,227],rjone:[7,9,13],rk4:319,rkf45:319,rlo:[451,452,479,480],rmask:[3,525],rmass:[3,307],rmax:[75,179,226],rmdir:509,rmin0:[152,468],rmin:[75,179,227,434],rms:[319,378,379],rmsd:347,rnemd:6,robert:9,robin:207,robust:[385,386,387,460],rock:444,rockett:457,rod:318,rodata:12,rodnei:313,roi:7,role:[6,343],roll:12,ronchetti:117,room:[59,61],root:[11,95,97,98,205,343,347,417,505],rosati:39,rose:444,ross:444,rosski:301,rosybrown:207,rot:[6,99,301,317,343,526],rotat:[2,3,4,6,7,9,40,65,90,91,92,93,104,142,152,156,157,158],rotate:328,rotation:117,rotaton:501,rough:[6,178,206,358],roughli:[7,10,12,41,161,206,221,247,255,256,264,271,272,286,305,318,336,339,340,343,379,389,394,463,465,500,507],round:[1,3,12,19,20,22,23,24,25,26,27,28,29,30,31,34,37,39,40,42,43,45,46,47,48,49,51,53,54,56,75,123,155,165,184,185,187,188,189,190,192,193,195,196,199,207,213,224,232,240,246,250,255,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,310,311,318,321,322,356,362,364,365,367,368,371,373,379,392,395,396,398,401,402,403,404,405,406,408,409,410,413,414,417,418,420,422,423,424,425,426,430,432,433,434,435,436,437,438,439,440,441,445,450,451,452,453,454,456,460,461,462,469,478,479,481,482,483,484,486,488,489,490,500,501,507,524,525],rous:248,rout:[95,426,440],routin:[5,6,8,11,14,15,37,39,56,96,182,258,447,458,479,480,511],roux:[6,236,256,484,519],row:[6,68,69,71,73,79,84,86,98,102,103,114,116,119,125,126,127,129,131,158,166,173,175,176,177,219,220,222,223,261,318,348,350,358,419],royalblu:207,rozero:444,rperp:[269,328],rpi:303,rpm:12,rrespa:[1,3,5,7,8,15,211,212,269,272,390,395,396,397,398,399,401,402,403,404,405,406,408,409,410,411,413,414,416,417,418,419,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,441,442,443,444,445,446,448,450,451,452,454,456,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,485,486,488,489,490,491,507],rspace:3,rsq:[451,452,479,480,487],rsurfac:348,ru3:177,ru4:177,rub:19,rubia:[445,446],rudd:[449,479,480],rudra:[7,9],rudranarayan:[7,303],ruiz:217,rule:0,run1:[6,393,525],run2:[6,375,377,393,525],run3:[6,393,525],run4:[6,393,525],run5:[6,393,525],run6:[6,393,525],run7:[6,393,498,499,503,525],run8:[6,393,525],run:[0,1,2,3,4],run_styl:[2,3,7,8,9,12,15,17,272,273,356,387,390,392,394,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,411,413,414,416,417,418,419,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,441,442,443,444,445,446,447,448,450,451,452,454,456,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,485,486,488,489,490,491,492,493,495,506],rung:319,runloop:377,runtim:[12,16,206,394],russia:9,rutherford:348,rutuparna:[481,483],rxn:[319,480],ryan:9,ryckaert:[322,371],rycroft:176,rydberg:447,s00:456,s0st:6,s2050:1,s2629:417,s319:216,s_fact:325,s_i:[6,419],s_ij:6,sack:7,saddl:[271,389],saddlebrown:207,sadigh:[217,417,445,446],saed:320,saed_vtk:130,safe:[12,206,236,256,394,520],safe_zone:3,safest:[3,336],safeti:325,safezon:460,safran:489,sagui:[379,413],sai:[1,3,12,13,207,459,460,496,520],said:387,sakai:482,sall:[9,467],salmon:207,salt:[411,422,444,498],salter:467,same:[1,2,3,4,6,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,37,39,40,41,43,44,45,46,47,48,49,50,51,53,54,56,59,61,64,65,68,73,75,76,81,84,87,90,92,93,95,96,97,98,99,100,102,104,107,113,114,115,117,119,121,123,124,126,127,128,152,153,154,155,156,157,158,159,160,161,164,165,166,167,168,170,171,172,174,176,178,179,180,181,182,184,185,186,187,188,189,190,191,192,193,195,196,199,201,202,203,204,205,206,207,210,211,212,213,216,217,218,219,220,222,223,224,225,226,227,228,229,231,232,233,237,238,239,240,246,247,248,249,250,251,252,253,254,255,256,257,258,261,269,272,274,275,276,277,278,279,280,281,282,290,292,293,295,296,297,299,300,301,303,304,305,307,308,309,310,311,313,314,315,316,317,318,321,322,324,329,332,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,354,355,356,357,359,360,361,362,363,364,365,367,368,371,373,378,379,381,382,383,384,388,389,390,391,392,393,394,395,396,398,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,416,417,418,419,420,422,423,424,425,426,427,428,431,432,433,434,435,436,437,438,439,440,441,442,444,445,448,449,450,453,454,456,457,460,461,462,467,469,476,477,478,479,481,482,483,484,486,488,489,490,493,495,496,498,499,500,501,503,506,507,508,509,510,511,512,516,519,520,524,525,526,529],sampl:[1,2,4,6,9,11,12,99,113,156,157,171,176,202,206,210,219,220,230,233,245,247,249,251,272,273,294,301,304,313,315,320,332,334,336,340,343,346,358,390,400,416,498,512],sample_frequ:216,san:456,sandia:[0,5,7,9,13,16,74,122,420,444,456],sandybrown:207,saniti:[317,390],satellit:[6,160],satifsi:525,satisfi:[3,12,77,130,152,177,229,239,258,264,277,288,294,322,356,387,390,424,512],satur:411,save:[6,8,12,18,40,61,199,204,206,221,228,248,249,255,256,257,304,313,319,348,360,379,390,392,400,500,503,510],sb3:177,sb5:177,sc3:177,scalabl:[0,1,7,9],scalar:3,scalars:320,scale:[0,1,3,5,6,9,10,13,15,17,40,61,65,75,76,99,112,124,127,128,152,164,172,184,199,202,203,204,206,207,210,211,212,216,217,220,229,232,247,251,252,253,255,257,258,270,272,274,275,276,277,278,279,280,301,305,308,309,318,326,327,336,338,340,343,345,346,348,352,359,378,379,381,388,391,395,396,397,411,416,419,421,424,427,441,442,444,447,456,463,465,484,499,501,503,507,510,512,515,516,525,526],scale_factor:[463,465],scalegamma:258,scalexi:[3,229,272,277],scalexz:[229,272,277],scaleyz:[229,272,277],scan:[207,227,377,499],scatter:[11,130,177],scatter_atom:11,scatter_coord:11,scenario:[6,40,63,228,307,316,336,349,357,390,502,503,507,515],scf:519,schaik:440,schedul:493,schell:482,schemat:228,scheme:[6,9,17,231,248,249,272,290,301,313,322,348,378,460,484],schlitter1:347,schlitter2:347,schlitter:347,schmid:414,schneider:[255,257],schoen:378,schroding:419,schroeder:[117,519],schulten:[256,324,379,519],schunk:336,schwen:9,sci:[77,356,409,446,457,467],scienc:[8,216,228,252,299,324,345,417,445,467,482],scientif:[9,152,417,525],scm:11,scratch:[12,41,225],screen:[0,1,3,6,8,11],screenshot:11,scripe:11,script:[0,1],scripta:70,scsl:12,sdk:[2,3,9,14],sea:11,seagreen:207,seamlessli:307,search:[0,2,3,8,12,100,117,179,181,207,208,336,354,385,386,387,389,391,424,493,499,500,512,525],seashel:207,sec:[12,518,524],secant:243,second:[1,3,6,9,11,12,15,54,59,61,63,74,75,96,99,113,115,117,123,145,146,150,153,154,166,172,176,177,179,180,181,197,202,203,207,210,211,219,220,222,223,228,231,239,243,247,248,253,269,271,301,307,315,317,318,322,324,332,334,336,345,346,348,359,378,381,386,387,389,390,399,400,401,403,404,409,410,417,419,420,421,424,425,427,430,431,434,444,449,453,467,478,482,483,484,486,490,493,494,495,496,498,500,505,507,511,512,516,517,519,524,525,526,528,530],second_mo:467,secondari:[3,190],sectinn:529,section:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54,55,56,57,58,60,61,65,66,67,68,69,70,71,72,73,75,78,79,82,83,84,85,86,87,88,89,91,94,95,96,97,98,99,101,102,103,106,107,108,109,110,111,113,114,115,116,118,119,122,123,124,125,126,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,154,155,156,157,158,159,161,162,163,164,165,166,167,168,169,170,171,172,173,174,176,177,179,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,202,203,204,205,206,208,210,213,214,215,216,217,219,220,221,222,223,224,225,226,227,228,230,232,233,235,236,238,239,240,241,242,243,244,246,247,248,249,250,252,254,255,256,257,258,259,260,261,262,264,265,266,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,287,288,290,291,292,293,294,295,296,297,299,300,301,303,304,305,307,308,309,310,311,312,313,314,315,318,319,321,322,323,324,325,326,327,328,329,331,336,339,340,341,342,343,344,345,346,347,348,349,351,354,355,356,359,360,362,363,364,365,366,367,368,369,371,372,373,374,379,380,381,384,388,389,391,393,394,395,396,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,449,450,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,493,494,495,496,498,499,501,503,506,507,508,509,511,512,513,516,517,519,525,526,527],section_acceler:[9,12,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,43,45,46,47,48,49,51,53,54,56,123,155,165,184,185,187,188,189,190,192,193,195,196,199,213,224,232,240,246,250,255,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,310,311,318,321,322,356,362,364,365,367,368,371,373,379,395,396,398,401,403,404,405,406,408,409,410,413,414,417,418,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,445,450,453,454,456,460,461,462,469,478,479,481,482,483,484,486,488,489,490,501,507],section_accerl:417,section_command:[0,1,9,361],section_error:[7,12],section_exampl:[2,6],section_histori:[7,12],section_howto15:89,section_howto:[6,8,9,11,12,40,42,59,61,66,69,70,71,74,75,76,77,79,80,81,82,85,86,87,90,91,92,93,94,95,97,98,100,103,104,105,106,107,108,109,110,111,114,116,117,120,121,122,125,127,128,132,147,148,149,150,152,153,158,160,172,173,175,176,180,201,219,271,284,287,291,351,399,412,493,498,501,512],section_modifi:[6,7,42,203,204,206,516],section_packag:[12,460],section_perf:7,section_python:[6,12],section_start:[3,6,9,11,382,389,492,493,507,513,516],section_tool:[6,7],see:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,59,60,61,63,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,264,265,266,267,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,290,291,292,293,294,295,296,297,299,300,301,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,321,322,323,324,325,326,327,328,329,331,332,335,336,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,375,378,379,381,382,383,384,386,387,388,389,390,391,393,394,395,396,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,488,489,490,491,492,493,494,495,496,498,499,500,501,503,504,505,506,507,508,510,511,512,513,514,515,516,517,518,519,520,525,526,528,529,530],seed1:513,seed2:513,seed:[3,178,181,202,206,215,217,226,227,228,230,233,244,247,248,249,255,256,257,258,301,304,308,313,318,336,340,343,348,355,402,414,415,416,493,508,513,519,525,526],seed_com:256,seed_drud:256,seek:[41,225],seem:[6,229,349,386,444,507],seen:[12,15,258,357],segement:3,segment:[3,6,7,12,40,42,90,124,206,210,287,304,318,336,414,430,460,476,477,498,506,508],select:[3,6,9,12,14,61,63,75,128,130,167,172,177,178,199,206,208,215,217,232,233,244,247,252,253,267,269,324,335,343,344,349,351,353,355,356,358,376,378,385,389,391,394,426,431,444,467,495,499,501,507,508,512,517,525],self:[2,3,4,6,8,9,12,128,203,204,205,210,213,218,219,222,234,236,238,256,308,309,311,313,314,317,318,319,324,332,333,334],sellerio:13,semi:[3,208,216,217,298,300,499],semiax:156,semimet:419,semin:15,send:[0,3,5,7,8,11,12,207,252,495],sender:[3,495],sens:[1,3,6,7,17,39,41,42,61,75,113,198,203,219,222,223,225,228,232,248,249,254,255,256,257,304,308,313,320,336,343,344,348,351,359,389,410,432,436,481,482,483,493,498,503,507,510,515],sensabl:252,sensibl:114,sensit:[2,6,77,229,313,526],sent:[207,252,376],sep:[6,11,525],separ:[2,3,6,7,9,12,13,15,40,41,80,127,134,152,178,181,197,204,206,207,208,216,220,225,226,227,228,229,233,236,247,255,256,272,286,301,304,305,307,309,313,318,322,336,339,340,341,344,351,359,379,394,401,403,410,411,413,415,432,441,442,444,451,452,453,458,468,477,478,479,480,483,489,496,498,499,500,507,510,515,517,519,526,527,528,529],seper:411,sequec:525,sequenc:[2,3,12,41,61,203,204,206,207,208,225,249,271,359,381,389,427,457,513,525],sequenti:[61,62,207,457,499],sequestr:7,seri:[3,4,6,9,13,15,17,152,203,204,206,207,220,223,248,249,304,393,396,423,444,447,449,451,452,461,469,479,480,496,505,506,513,515,516,525],serial:[1,5,7],serial_icc:12,serious:8,serv:[6,140,180,336,476],server:[1,254],set:[0,1,2,3],set_callback:245,set_energi:245,set_vari:[6,11,496],setarea:258,sete:[219,228],setenv:[11,12,407],setfl:[13,395,417],setforc:[2,3,6,210,213,224,246,289,318],setgamma:258,setmask:8,setpoint:231,settl:229,setup:[3,6,7,8,11,12,13,15,36,40,55,61,75,95,99,166,179,180,181,182,198,207,216,228,232,336,349,372,390,391,394,477,495,498,506,528,530],setup_pre_exchang:8,setup_pre_forc:8,setup_pre_force_respa:8,setvel:2,seven:446,seventh:[145,150],sever:[1,4,5,6,7,8,9,10,11,12,13,14,15,17,39,40,65,75,95,172,179,182,198,203,204,205,208,210,216,226,227,229,249,255,258,262,272,303,305,307,318,324,336,343,352,376,381,387,397,400,404,416,417,427,436,440,444,449,457,459,460,466,467,493,496,500,504,512,516,519,525,526],sexton:447,sfactor:[3,206,207,388],sfftw:12,sgi:12,sgmc:217,sgrid:336,sgroup:176,shade:206,shake:[2,3,5,6,7,8,9,28,37,38,56,58,68,73,123,126,153,155,156,157,158,159,161,164,165,166,167,168,170,171,182,210,219,233,239,247,249,286,304,318],shan:[16,309,310,409],shanghai:[9,13],shape:[2,3,6,8,40,41,60,61,64,75,90,124],shape_upd:8,shapei:[124,498],shapex:[124,498],shapez:[124,498],shapshot:503,shardlow:[2,9,241,242,319],share:[0,1,3,6,7,9],sharon:318,sharp:[357,444,483],shawn:9,shear:[3,4,5,6,7,9,61,63,161,202,229,232,258,272,295,336,351,354,424,441,442,456,464,466],sheet:502,shell:[0,2,3,4],shen:9,shenderova:396,sheppard:386,shflags:12,shield:[2,3,7,210],shift:[1,2,3,6],shiftse:336,shiga:[6,272,273],shini:[206,529],shinoda:[6,9,272,273,462],shiny:206,ship:208,shlib:[11,12],shlibflags:12,shm:15,shock:4,shockvel:[270,308],shortcut:[229,272,305,318],shorter:[3,131,247,299,391,449,506],shortest:[206,391,397,507],shorthand:[207,484],shoul:485,should:[1,2,3,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,34,37,39,40,41,42,43,44,45,46,47,48,49,51,53,54,56,61,63,74,75,77,87,91,95,99,106,107,108,112,113,114,121,123,129,153,155,156,157,160,161,164,165,166,168,171,174,178,180,182,184,185,186,187,188,189,190,192,193,195,196,199,201,202,203,204,206,207,211,212,213,214,217,221,224,225,226,227,228,229,231,232,233,235,236,238,240,242,244,245,246,247,248,249,250,251,253,255,256,257,258,260,261,262,263,269,272,274,275,276,277,278,279,280,281,282,286,290,292,293,295,297,299,300,301,302,303,304,305,306,308,309,310,311,312,313,314,315,316,317,318,319,321,322,329,332,336,337,339,340,341,342,343,344,347,348,349,351,352,353,354,355,356,357,358,359,361,362,363,364,365,367,368,371,373,378,379,381,382,383,385,387,388,389,390,391,392,394,395,396,398,399,401,402,403,404,405,406,407,408,409,410,412,413,414,416,417,418,419,420,422,423,424,425,426,427,428,429,430,432,433,434,435,436,437,438,439,440,441,442,444,445,447,449,450,451,452,453,454,455,456,458,459,460,461,462,463,465,467,469,476,478,479,480,481,482,483,484,486,488,489,490,493,494,495,496,498,499,500,501,502,503,505,506,507,508,510,514,515,516,517,519,520,525,526,528],shouldn:[3,8],show:[6,10,11,12,127,389,426,444,447,479,480],shown:[1,12,15,16,41,106,107,130,152,164,177,198,225,228,229,239,255,272,295,299,301,304,313,343,378,419,420,423,424,440,447,461,467,498],shrank:75,shrink:[3,6,41,59,61,75,180,202,203,206,211,212,215,225,232,233,253,258,299,336,355,359,378,379,387,410,432,436,449,498,499],shrink_spher:288,shrunk:[75,319],shut:[6,11,390,497],si4:177,siam:356,sic:[4,410,427,444,453,478,481,483,486],sic_tersoff:457,sicc:[418,478,481,483,486],sicg:[481,483],sicsi:[418,478,481,483,486],side1:501,side2:501,side3:501,side4:501,side:[3,8,41,59,63,75,168,178,217,218,225,228,233,247,253,258,269,299,304,312,319,332,353,357,358,359,389,410,423,424,461,485,496,498,501,508],sidewai:4,sienna:207,siepmann:351,sige:[481,483],sigma0:400,sigma14:440,sigma1:400,sigma2:400,sigma:[3,6,10,45,46,50,54,95,129,184,203,204,207,211,212,233,247,258,299,323,336,352,353,357,381,391,394,396,399,400,401,405,406,408,413,414,415,416,418,419,423,425,426,430,431,432,433,434,435,436,437,438,439,440,443,448,449,461,462,472,478,484,485,507,524,525,526],sigma_14:405,sigma_:411,sigma_c:408,sigma_cc:[396,408],sigma_h:422,sigma_i:[420,449],sigma_ii:485,sigma_ij:[449,485],sigma_j:449,sigma_max:416,sigma_ss:408,sign:[3,6,12,189,198,207,231,298,332,356,361,447,506,515,520,525],signal:497,signicantli:16,signifi:[3,69,79,86,98,103,114,116,125,158,173,175,421,452,480],signific:[7,12,17,94,248,270,273,313,319,336,349,419,423,444,447,449,528],significantli:[1,6,39,153,176,258,272,317,419,478],sij:220,sikandar:16,silbert:424,silent:[207,496,509],silicon:[418,444,478,498],sill:456,silver:207,sim:[9,462],similar:[5,6,7,8,9,10,11,12,15,16,17,40,41,42,46,61,71,76,95,123,126,127,129,153,154,178,179,203,204,207,210,211,212,219,221,225,245,246,248,255,261,262,273,307,308,313,317,318,340,343,353,354,356,358,379,385,386,388,396,399,400,414,417,419,424,440,441,449,450,456,457,466,479,484,495,500,505,507,512,514,516,519,525,526,528,530],similarli:[3,6,7,8,38,58,61,123,174,180,182,200,202,203,206,207,218,219,222,223,227,231,232,238,253,272,274,275,276,278,279,280,303,305,318,320,322,336,343,344,351,357,362,374,379,381,389,392,396,404,424,436,478,491,495,498,501,502,507,508,512,525,529],simluat:[6,39,207,336,441,499,500],simlul:[318,348],simmul:351,simpl:[1,2,4,6,7,8,10,11,12,13,15],simpler:[8,11,42,207,318],simplest:[3,8,9,40,69,79,86,98,103,114,116,125,127,158,173,175,309,519],simpli:[1,3,6,8,9,11,12,16,40,69,75,79,86,96,98,103,105,114,116,124,125,129,131,158,173,175,181,182,207,210,211,212,219,222,223,227,229,232,236,245,254,256,261,272,301,305,316,318,320,344,350,351,378,379,381,388,389,394,404,413,427,436,444,449,495,496,503,506,513,516,524,525],simplif:419,simplifi:[9,217,317,447],simplist:11,simualt:379,simul:[0,1,2,3,4],simulatan:[15,247,394],simulation_nam:460,simulationub:467,simulatoin:[12,499],simult:394,simultan:[6,7,14,15,232,394],sin:[197,232,269,353,356,358,383,457,498,501,508,525],sinc:[0,1,2,3,6,8,9,10,11,12,13,14,20,21,32,39,41,44,54,61,63,66,70,74,75,77,97,98,121,127,128,129,130,154,156,158,168,176,180,181,183,184,186,191,203,204,206,207,210,211,212,213,214,217,218,219,220,221,222,223,224,225,228,229,230,232,233,237,238,247,249,251,254,255,257,258,269,272,274,275,276,277,278,279,280,283,286,295,299,301,304,306,307,313,316,318,319,324,335,336,344,348,349,350,351,353,354,357,358,359,360,362,363,377,379,387,388,389,390,393,394,395,396,400,403,404,405,406,408,409,413,414,416,417,418,423,424,425,427,428,429,430,431,432,434,435,436,437,438,439,440,441,442,443,444,445,446,447,449,451,452,454,457,458,459,460,461,462,467,468,469,478,479,480,481,482,483,486,490,493,495,496,498,499,501,503,506,507,508,509,510,512,516,519,520,524,525,526,529],sinclair:[7,299,417,477],sine:457,singapor:152,singh:395,singl:[1,2,3,6,7,8,9,10,11,12,14,15,16,17,40,41,42,59,61,63,65,68,69,71,73,79,81,84,86,95,96,98,102,103,113,114,116,119,124,125,126,127,128,129,131,154,158,173,175,176,178,197,203,204,206,207,208,210,215,218,219,220,222,223,225,227,228,229,233,236,244,246,251,258,261,269,272,273,277,286,288,294,301,303,304,306,317,318,320,322,325,331,336,338,348,350,353,354,356,358,359,361,378,379,385,388,389,390,391,393,394,395,396,400,405,407,409,416,417,418,419,420,424,425,426,427,428,429,444,445,446,447,453,454,457,458,459,460,461,467,468,469,478,481,482,483,486,493,494,496,498,505,506,507,508,509,510,511,512,513,515,517,525,529,530],singleel:400,singular:[197,440,441,442,450],sinnott:[310,396,409],sinusoid:[178,232,353,354,356,358,383],sio2:486,sio:409,sirk:[153,476],sisic:[418,478,481,483,486],sisisi:[418,478,481,482,483,486],sister:407,sit:[300,498],site:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,16,70,74,95,239,252,258,259,322,379,395,400,410,417,421,422,432,436,440,450,452,454,480,484],situat:[176,229,231,247,258,272,301,320,386,400],sival:177,six:[6,145,150,152,220,222,453,457],sixth:453,sixthpow:[406,449],size:[0,1,3],size_restart:8,sizei:430,sizej:430,sizescal:3,sizex:280,sjplimp:[0,7,11,12],sjtu:9,skew:[3,6,60,61,180,206,232,272,498,501],skin:[3,12,39,63,77,126,179,181,247,286,318,323,348,390,391,394,430,455,516,524],skip:[12,15,32,129,184,191,303,304,377,388,393,431,498,503,506,515,517,525],skyblu:207,slab:[3,6,75,166,304,332,378,379,390,449],slateblu:207,slategrai:207,slater:[2,3,7,210],sleight:54,slepoi:444,slice:[2,3,6,65,130],slider:11,slight:[3,12,239,348],slightli:[1,6,15,39,40,203,204,205,206,207,208,272,290,313,318,379,396,410,432,436,459,481,483,486,493,506,528],sligthli:413,sliozberg:476,slip:[3,210,336,352,358],sllod:[2,3,6,15,161,162,210,232],slope:[6,113,114,344,346,351,411,525],slot:[1,154,517],slow:[3,6,7,12,39,248,252,255,256,270,272,288,336,343,378,389,449,467,507,517,519,526],slower:[1,16,39,256,379,394,400],slowest:[348,495],slowli:[12,75,225,352,387,447,469,500],slurm:12,slurm_localid:12,sm3:177,small:[2,3,4,6,7,8,9,12,14,16,17,39,40,41,60,74,85,95,121,129,130,153,158,161,176,177,180,203,204,210,219,225,226,227,228,233,234,236,239,247,248,255,256,264,270,272,290,295,299,304,305,307,308,309,313,315,316],smallbig:3,smaller:[1,3,6,12,15,16,39,56,61,63,75,131,180,203,204,206,207,217,233,237,247,258,300,318,319,336,346,361,378,379,385,394,449,477,485,487,498,505,507,517,525,530],smallest:[3,42,74,75,76,176,270,315,525],smallint:3,smallq:379,smallsmall:[3,12],smart:249,smd:[2,3],smd_lammps_userguid:9,smi:3,smirichinski:9,smit:247,smith:454,smmoth:508,smooth:[2,6,9,40,109,111,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,325,326,327,328,331,357,358,378,400,405,410,425,434,437],smoother:178,smoothli:[54,152,344,351,405,425,438,440,443,483,490],smpd:12,smt:[15,394],smtb:[9,467],smtbq:2,smulat:447,sn2:177,sn4:177,sna:[2,3,9,65],snad:[2,3,9,65],snap:[2,3,4,7],snapcoeff:468,snaphot:503,snapparam:468,snapshot:[0,1,3,4],snav:[2,3,9,65],snb:16,snc4:15,snow:207,soc:426,socket:[12,16,17,254,495],sodani:15,soderlind:447,soft:[2,3,7,9,11,12,13,95,211,212,286,356,387,414,421],softer:[353,357],softwar:[1,6,9,11,14,15,16,17,18,176,252,303,320],sole:[226,227,389,457,464,466],solid:[4,6,7,9,10,39,40,41,61,74,77,99,113,153,176,216,225,229,232,237,261,272,274,275,276,278,279,280,299,300,305,318,343,346,379,381,401,434,447,456,464,466,498],solut:[3,6,13,176,229,237,270,316,319,322,336,357,525],solv:[3,9,12,17,239,258,309,319,322,346,348,379,386,442],solvat:[4,10,178],solvent:[4,7,9,13,63,75,179,181,225,244,248,249,255,272,316,318,332,336,344,351,352,405,408,410,411,422,432,441,442,461,477,498,508],solver:[0,1],some:[1,2,3,4,6,7,8,9,11,12,13,15,16,17,39,40,41,55,63,65,75,115,118,124,128,129,131,156,157,158,159,170,171,172,176,178,181,186,189,198,201,203,204,206,207,210,211,212,215,217,218,219,220,222,223,225,227,228,229,230,231,244,247,270,272,273,304,306,307,309,311,318,319,324,337,343,348,349,350,352,353,359,376,377,378,379,385,386,387,388,389,390,391,394,397,399,400,407,410,417,419,427,430,447,449,459,460,477,479,480,491,493,495,496,497,498,500,503,504,505,506,507,508,510,512,515,516,517,520,524,525,526,527,530],somehow:3,someindex:360,someon:[7,387],someth:[2,3,7,8,11,12,61,229,272,353,356,358,390,427,496,505,520],sometim:[2,3,6,8,12,17,229,272,344,351,378,391],somewhat:[7,9,12,74,113,158,168,219,272,378,517],somewher:[16,273,419],soon:[3,42,217,228,244,247,252,459],sophist:[7,154],sorensen:512,sort:[3,13,15,39,75,203,204,207,208,252,389,390,416,499,500,529],sound:[140,258,270,325,474,475],soundspe:[474,475],sourc:[0,3,5],source_integr:216,sourceforg:11,south:152,souza:344,space:[2,3,6,8,11,12,15,17,41,57,61,75,130,152,167,172,177,178,199,202,206,211,212,215,222,225,227,232,233,253,258,266,269,272,300,301,316,320,325,336,353,355,356,358,361,378,379,381,388,389,390,401,403,404,410,413,417,419,430,432,436,444,447,451,452,454,457,462,479,480,487,489,495,498,501,510,516,519,525,526],spahn:424,span:[2,12,37,75,211,212,239,253,318,378,395,396,400,409,417,420,428,429,444,445,446,453,457,468,478,481,482,483,486,492,493,501,502,525],spars:[75,199,319],spatial:[3,5,6,7,17,39,41,69,74,75,79,86,98,103,114,116,125,142,158,166,173,175,203,204,213,216,219,220,223,225,238,251,255,321,329,333,348,463,465,508,526],spawn:252,spc:0,spce:239,spcpu:516,speak:[16,336,343],spearot:[130,177,320],specfi:[12,118,253,267,501],speci:[2,9,152,205,243,254,314],special:[2,3,6],special_bond:[2,3,6,12,15,36,45,46,54,55,76,81,100,117,119,126,127,152,179,181,182,184,198,226,227,228,372,388,390,412,426,427,449,484,498,500],species1:[243,452,480],species2:[243,452,480],species:319,speciesn:243,specif:[1,2,3,4,6,7,8,9,12,13,14,15,16,17,21,28,32,40,41,42,50,65,75,119,124,126,127,158,160,163,176,178,186,191,203,204,206,207,208,210,211,212,215,216,219,220,222,223,225,228,230,244,245,247,248,252,258,267,304,306,307,310,318,343,348,349,353,359,363,379,387,389,394,396,399,400,412,417,423,424,427,428,429,444,447,449,459,460,461,477,478,484,485,495,498,499,503,504,505,507,508,514,516,524,525,526,528],specifi:[2,3,6,7,8,9,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54,55,56,57,58,59,61,63,65,67,68,69,71,72,73,74,75,77,79,80,81,82,83,84,85,86,87,91,93,94,95,96,98,99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,153,155,158,160,165,166,167,172,173,174,175,176,177,178,179,180,181,182,184,185,186,187,188,189,190,191,192,193,195,196,198,199,200,202,203,204,205,206,207,208,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,236,237,238,239,240,242,243,246,247,248,249,250,251,253,254,255,256,258,259,260,261,263,264,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,286,290,292,293,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,313,314,315,316,317,318,319,320,321,322,323,324,328,329,332,333,334,335,336,337,338,339,340,341,343,346,347,348,350,352,353,354,355,356,357,358,359,360,361,362,363,364,365,367,368,369,371,372,373,374,377,378,379,381,382,384,387,388,389,390,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,456,457,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,519,520,524,525,526,527,528,529,530],specifii:[249,258],speciti:507,spectral:[9,468],spectrum:[9,152,308,313],sped:[39,270],speed:[1,3,6,9,12,14,15,16,17,18,39,41,140,203,207,225,255,258,270,308,325,336,343,349,355,378,379,389,394,400,410,447,449,474,475,481,493,507,513],speedup:[1,15,17,379,507],spefici:[178,206,426],spell:501,spellmey:[6,184,510],spend:[12,218],spent:[1,12,13,14,493,512,517],sperhic:498,sph:[2,7],sph_lammps_userguid:9,sphere1:258,sphere:[2,3,6,40,42,65,75,80,90],spheric:[0,2,3,4],spheriod:[3,6],spherioid:336,spheroid:[6,272,290,318,336],spike:127,spin:[40,124,204,354,397,419,498],spine:383,spine_two:383,spirit:[7,221],spit:3,spline:[2,3,37,56,199,242,243,387,396,400,426,444],split:[1,3,6,9,11,12,15,17,41,219,225,239,256,272,323,356,378,394,415,485,492,495,507],splittol:[6,378],spparks:6,spread:[1,6,12,361,506],spring:[2,3,5,6,7,10,13,25,26,40,45,46,48,49,53,187,197,210,213,228,234,238,271,301,316,324],springer:324,springgreen:207,sptial:75,sputter:233,sq2:[3,381],sqrt:[2,3,42,61,87,97,117,247,255,257,299,336,352,354,381,383,408,414,417,422,424,444,449,525],squar:[2,3,6,7,12,21,23],squares:[41,225],squeez:[229,253,441,442],squibb:[5,7],sr2:177,src:[0,1,3,4,6,7,8,9,11,12,14,15,16,17,18,176,203,245,322,383,447,520],srd:[2,3,4,7],srmax:75,srmin:75,srolovitz:417,srp:[2,414],srtio:467,srun:12,ssa:323,ssao:[206,529],stabil:[6,9,255,272,400,459,484],stabl:[6,66,140,197,258,277,317,325,400,519],stabli:248,stack:[3,8,74],stage:[3,8,95,210,245,271,312,359,389,493,512,525],stagger:[1,2,3,207,379,505,514,525],stai:[3,16,211,212,270,289,308,394,498],stall:15,stamp:[210,343,499],stamped:12,stan:[9,16],stand:[0,6,7,9,12,13,314,459,460,496],standard:[0,1,3,6,8],stanford:9,starikov:348,start:[0,3,4,6,8,9],start_6:422,start_7:507,startstep:525,stat:[12,40,54,182,229,299,313,387],statcoul:524,statcoulomb:524,state:[2,3,6,7,9,11,12,13,61,63,65,74,77,85,87,94,95,113,122,142,190,206,210,217,221,228,229,230,233,241,242,243,247,248,249,255,256,257,270,271,272,274,275,276,277,278,279,280,292,293,295,296,297,300,304,308,313,318],statement:[3,496,497,520],stationari:[2,113,258,265],statist:[3,6,12,33,39,41,52,66,194,221,226,227,228,248,249,255,256,257,303,304,308,313,318,319,322,336,347,348,349,370,387,389,396,414,416,424,441,489,493,500,506,508,512,515,516],statu:[3,12,54,62,133,182,230,236,256,409,497,512,517],statvolt:524,std:12,stdin:[3,12,377],steadi:[6,270,277,308],steelblu:207,steep:[479,480],steepest:[7,386],steer:[7,9,230,234,324],stefan:[9,520],stegailov:348,steinhardt:[65,117],steinhaus:519,stencil:[3,258,378],step:[1,2,3,6,8,9,11,12,13,14,15,16,17,18,39,75,99,106,107,121,127,128,140,153,164,174,176,203,205,206,207,208,210,211,212,216,217,219,220,221,222,223,225,226,227,228,229,232,233,236,237,239,244,245,247,249,252,253,256,264,270,286,288,294,299,300,304,306,307,308,309,310,311,319,320,322,323,324,325,336,338,341,342,343,344,345,346,347,348,349,350,351,358,359,361,377,378,385,387,389,390,396,414,422,426,444,447,459,460,467,493,495,496,500,502,503,505,506,507,512,513,515,516,517,519,525,530],stepani:324,stepwis:95,stesman:343,steve:[0,5,7,13],steven:228,stiff:[6,40,51,226,227,300,301,319,387,456,519],stile:411,still:[1,3,6,9,11,12,13,15,16,37,38,41,58,63,75,100,119,127,176,182,199,200,201,203,204,207,211,212,225,251,255,286,309,313,336,348,361,374,378,379,385,406,417,423,424,427,431,441,455,459,461,469,477,498,500,506,520],stilling:[3,5,7,9,14,96,154,418,446,457,477,478,486,510],stipul:252,stl:[9,75,328,331],stl_surf:331,stochast:[4,7,9,210,249,323,336,343,358,415,416],stockmay:40,stoddard:413,stoichiometr:319,stoichiometri:467,stoke:[258,352],stokesian:9,stoll:[255,257],stone:[9,18,379,413],stop:[3,6,11,12,41,54,131],stopstep:525,stopthresh:[41,225],storag:[3,12,14,350,394,510],store:[2,3,6,7,8,11,12,16,32,36,37,39,40,42,50,55,56,61,63,64,65,68,71,73,75,80,84,87,90,92,94,97,99,100,102,113,114,118,119,123,124,125,126,128,129,131,153,155,156,157,158,159,160,161,165,166,167,168,170,171,174,176,178,181,191,198,199,201,203,205,206,207,208,210,211,212,215,216,218,219,220,221,222,223,226,227,231,232,233,237,240,245,248,252,258,259,260,261,262,263,264,265,266,268,269,271,272,274,275,276,277,278,279,280,281,282,283,284,285,287,288,289,290,291,292,293,294,297,298,299,300,301,302,303,304,305,306,307,309,310,311,312,314,315,318,319,320,322,324,331,332,333,334,335,336],store_st:337,storm:12,stouch:7,str:525,straatsma:6,straddl:[3,61,63,168,253,318,332,359,498,508],straight:318,straightforward:[4,13,419,519],strain:[2,3,6,61,85,133],strang:[199,206,525],strategi:0,stratford:258,strcmp:361,stream:[3,6,123,153,158,161,162,206,216,232,248,249,255,256,295,304,313,336,526],streamlin:[12,506],streitz:[2,3,4,7,309],streiz:410,strength:[3,9,152,172,183,206,317,353,357,427,460,461,510],stress:[2,3,5,6,7,9,40,42,65,99,121,123,128,143,144],stretch:[3,54,61,128,226,324],strict:468,strictli:[6,41,199,203,225,270,308,343,498],stride2:525,stride:[207,249,505,514,525],strietz:410,strike:233,string:[2,3,6,11,12,41,203,204,205,207,219,220,221,222,223,225,247,306,319,320,361,380,393,444,457,458,459,468,494,496,498,508,509,515,516,525],strip:525,strong:[10,309,396],stronger:6,strongest:[441,442],strongli:[1,6,13,233,318,322,348,447,519],structrur:3,structur:0,structured_points:320,strucur:77,stuart:[309,310,396,409,467,477],stub:12,stubs:12,stuck:229,student:303,studi:[6,115,288,307,434,467],studio:15,stukowski:[217,417],style1:[32,50,191,369,427,498],style2:[32,50,191,369,427,498],style:0,style_nam:[272,273],stylecomput:467,stylist:8,sub1:509,sub:[1,3,4,6,7,8,9,11,12,13,17,32,36,39,40,41,42,50,55,60,63,65,67,71,72,83,95,99,101,118,152,172,180,191,198,205,206,207,211,212,225,229,232,272,273,277,308,313,322,323,348,349,357,359,369,372,381,384,394,396,399,409,416,423,424,426,427,430,449,459,460,461,467,484,485,490,495,498,501,507,515],sub_styl:[67,72,83,101],subbox:[128,206,207],subcutoff:430,subdivis:258,subdomain:258,subequ:11,subgroup:[203,529],subinterv:205,subject:[6,15,41,181,225,484],submit:0,subramaniyan:13,subscript:[11,231,348,362,420,486,525],subsequ:[3,6,11,12,41,61,113,179,207,221,225,229,247,343,348,349,350,381,393,417,477,496,498,499,505,508,509,517,518,525,530],subset:[6,11,12,15,41,85,152,203,204,207,225,268,272,274,275,276,277,278,279,280,304,305,309,318,389,394,396,400,427,449,492,495,498,500,503,507,525],subspac:9,substanti:[6,231,478,507],substep:272,substitut:[1,2,3,12,203,254,307,389,393,419,449,496,509,525],substract:410,substrat:[180,229,272,274,275,276,278,279,280,305,318,498],substyl:[440,507],subsystem:348,subtl:[104,106,107,249],subtleti:164,subtract:[3,6,54,65,75,86,99,104,107,112,113,115,123,129,153,155,156,157,158,159,160,161,162,164,165,166,167,168,170,171,203,204,210,219,239,247,248,251,255,256,257,259,263,264,268,295,302,318,359,390,439,498,508,516,525,526],succe:12,succeed:[220,221],succes:221,succesfulli:3,success:[2,6,11,12,14,127,203,207,217,220,229,231,233,247,286,304,318,336,343,361,387,389,496,497,505,506,513],successfulli:[3,11,203,233,496,509],successulli:11,successv:503,sucessfulli:3,sudden:35,suddenli:357,sudo:[11,12],sufac:42,suffer:[16,17,294,351,357,394],suffici:[2,3,6,7,16,17,41,63,75,205,225,231,270,272,300,336,343,350,353,361,431,449,498,519],suffix2:12,suffix:[1,2,3,6,9,12,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,43,45,46,47,48,49,51,53,54,56,123,155,165,184,185,187,188,189,190,192,193,195,196,199,203,204,206,213,224,232,240,246,250,255,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,310,311,318,319,321,322,347,356,362,364,365,367,368,371,373,378,379,389,394,395,396,398,400,401,402,403,404,405,406,408,409,410,413,414,417,418,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,444,445,446,450,453,454,456,457,460,461,462,469,478,479,481,482,483,484,486,488,489,490,496,498,499,501,507],suggest:[0,6,7,12,270,308,496,519],suit:[7,13,212,258,419],suitabl:[4,12,13,16,54,95,203,228,307,340,400,407,424,440,444,459,460,493,512],sukumaran:221,sum:[3,6,8,12,40,74,75,80,85,91,96,97,98,100,104,108,113,115,117,119,120,121,123,126,127,128,135,151,152,153,155,158,159,160,161,164,165,166,167,168,170,172,174,175,176,219,220,222,223,233,245,248,255,256,261,299,300,304,308,313,318,320,324,335,346,348,350,353,357,359,378,379,387,399,410,414,419,420,430,432,435,444,459,460,468,485,496,516,519,524,525,526],summar:[6,12,420,467],summari:1,summat:[6,9,42,74,96,117,378,379,404,410,417,418,432,436,447,467,478,481,482,483,486],summer:[3,13,459,460],sumsq:128,sun:[20,43,185,362,406,449,460],sunderland:16,sup:[308,313,409,467],supercomput:[12,17,496],superpos:[427,477],superposit:7,superset:99,superspher:383,supinski:447,supplement:[249,459,460],supplementari:[230,423,461],suppli:[9,12,199,247,270,348],support:[1,3,4,6,7,8,9,11,12,13,14,15,16,17,18,40,41,42,63,95,96,112,118,203,204,205,206,207,208,211,212,213,214,219,224,225,228,229,230,234,238,245,249,250,253,255,256,257,258,267,270,272,274,275,276,277,278,279,280,288,292,293,294,295,296,297,299,300,305,308,310,312,317,318,321,324,325,326,327,328,329,331,332,333,334,335,339,340,341,342,346,351,352,353,357,376,377,378,379,383,386,387,388,394,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,411,413,414,416,417,418,419,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,484,485,486,488,489,490,491,495,499,500,501,505,507,508,509,511,512,513,518,519,524,525,529,530],suppos:[3,8,420,520,525],suppress:[6,12,176],surc:8,sure:[6,8,11,13,199,211,212,229,304,318,322,358,417,479,480,520],surf:[8,146,179],surfac:[2,3,4,6,8,9,40,42,59,74,130,146,152,176,178,181,206,210,233,244,253,258,261,288,294,299,310,317,328,331,332,336,343,348,353,357,358,378,383,389,400,427,441,442,447,465,467,485,489,495,501],surface_exterior:8,surface_interior:8,surface_mov:348,surfact:[411,422],surpris:419,surround:[37,56,74,178,199,207,229,242,243,272,274,275,276,278,279,280,299,305,318,451,452,479,480,519],suspect:3,suspens:[441,442],sustain:[203,204,229,424],suzuki:[272,318],svg:6,svn:[7,11,12],sw_exampl:458,swamp:318,swap:[2,3,6,7,9,210],swegat:347,swiggl:[3,269,353,356,358,501,525],swiler:[152,468],switch7_section_start:422,switchflag:[152,468],swm4:519,swol:53,swope:6,sxx:207,sy0302:9,symbol:[6,12,130,177,315,400,419,468],symmetr:[6,74,95,103,123,143,144,145,148,149,150,153,211,212,229,272,273,344,351,395,407,413,417,481,483,525],symmetri:[3,5,6,7,8,65,66,74,100,117,180,203,204,270,299,362,379,395,498,519],symplect:[272,290],sync:[3,6,517],synchron:[1,249,389,517],synechococcu:7,syntax:[1,2,3,6,7,8,9,11,12,13,14,17],sysdim:300,sysmt:16,sysstem:400,syst:467,system:[0,1,2,3,4,5],system_:301,systemat:[6,9,221,247,255,447],systemx:3,t10:513,t11:513,t12:513,t13:513,t14:513,t15:513,t3e:12,t_chain:3,t_corr:3,t_correl:493,t_dephas:493,t_e:348,t_e_min:348,t_equil:[345,346],t_event:[3,493,512],t_hi:512,t_infil:348,t_init:[308,348],t_iter:3,t_j:28,t_lb:258,t_lo:512,t_order:3,t_oufil:348,t_out:348,t_outfil:348,t_qm:308,t_switch:[345,346],t_target:402,ta06a:468,ta4:447,ta5:177,ta6:447,tab:[2,498],tabbernor:130,tabinn:449,table:[242,243],tabul:[3,7,13,21,36,37,44,55,56,57,68,75,84,102,199,242,243,319,336,378,395,400,401,403,404,405,406,407,410,417,419,421,432,436,443,451,452,454,457,460,462,477,479,480,481,487,500],tabular:457,tabulate_long_rang:460,tad:[2,3,4,6,9,94,493],tadmor:9,tag:[216,243,319,421,452,480,519],tagint:3,tail:[3,95,96,118,121,172,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,411,413,414,416,417,418,419,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,485,486,488,489,490,491,516,525],tailor:[75,349],tait:[9,474,475],taitwat:[2,473],take:[1,2,3,6,11,12,16,19,20,21,22,23,24,25,26,27,28,29,30,31,34,37,39,40,41,42,43,44,45,46,47,48,49,51,53,54,56,61,81,95,97,99,123,124,127,128,153,155,165,172,176,182,184,185,186,187,188,189,190,192,193,195,196,199,203,206,207,211,212,213,218,219,220,222,223,224,225,229,232,239,240,246,250,254,255,256,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,305,307,310,311,318,319,321,322,332,334,335,336,338,339,340,341,349,356,359,362,363,364,365,367,368,371,373,378,379,384,394,395,396,398,400,401,402,403,404,405,406,407,408,409,410,413,414,417,418,420,422,423,424,425,426,432,433,434,435,436,437,438,439,440,441,445,447,450,453,454,456,459,460,461,462,467,469,476,478,479,481,482,483,484,486,488,489,490,492,496,499,501,506,507,508,513,515,516,517,525],taken:[6,61,160,178,202,228,233,247,248,249,255,256,257,258,304,308,311,319,348,367,417,419,423,451,452,478,486,493,507,508],talk:[6,7],talli:[2,3,6,8,9,41,118,124],tally:8,tan:[207,525],tandem:318,tang:447,tangent:[42,271],tangenti:[6,119,336,354,358,424],tanh:348,tantalum:[4,447,468],taper:[3,311,383,443],tar:12,tarbal:[0,8,11,12],target:[3,6,7,8,11,12,16,39,41,207,215,225,229,230,231,233,239,247,248,249,255,256,257,272,273,274,275,276,277,278,279,280,292,293,295,296,297,301,305,308,313,318,324,334,339,340,341,342,347,348,351,352,355,376,379,402,414,493,504,506,526],target_fil:347,task:[1,6,7,10,12,13,14,15,16,17,54,207,252,301,349,394,496,517],taskset:15,tatb:[4,314],tatom:519,tatoms:519,tau:[3,167,221,231,255,256,258,272,305,318,339,340,345,346,348,518,524],tau_1:248,tau_k:248,tau_n_k:248,tb3:177,tbead:170,tbp:400,tchain:[272,273,277,288,294,295,296,318],tcl:313,tcom:256,tcontrol:231,tcsh:[11,12,407],tdamp:[255,272,273,277,294,318,339,340],tdephas:493,tdrude:[163,236,256,519],teal:207,tech:[7,13],technic:[6,7,9,258,311,336,460],techniqu:[6,7,9,95,210,229,270,308,318,352,355,379,449,479,480,519],technolgi:9,technolog:[9,15,18,252],tediou:307,tell:[2,6,11,12,36,55,198,210,300,372,390,459,460,477,496,498,500,519],telsa:16,temeperatur:11,temp:[2,3,6,9,13,42,65,95,99,104,106,107,112,121,123,128,153],temp_drud:519,temp_eff:107,tempcom:[156,157,171],temper:[2,3,6,7,9,389,493,506,512],temperar:301,temperatur:[0,2,3,4,5],temperature_definit:216,tempfix:513,templ:[7,9,17],templat:[3,8,13,16,18,40,178,179,181,233,247,304,318,322,388,498],templeton2010:216,templeton2011:216,templeton:[9,216],tempor:248,temporari:[2,3,505],temporarili:[199,317,511,512],tend:[28,272,299,319],tensil:[7,232],tensor:[3,6,8,65,90,91,97,98,99,103,116,123,129,139,142,143,144,145,148,149,150,152,153,154,155,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,229,258,261,272,273,277,303,305,318,351,378,379,388,419,441,442,447,464,466,516,525],tenth:[139,211,377],term:[0,1,3,5,6,7,8,9,12,19,20,21,26,37,40,45,46,63,95,96,97,99,121,123,153,154,156,157,166,171,172,185,186,187,197,199,207,211,212,218,220,222,223,231,232,238,239,248,249,250,255,256,257,258,271,272,273,274,275,276,277,278,279,280,292,293,295,297,301,305,308,317,318,334,339,340,341,348,350,352,354,362,363,373,378,387,390,395,396,400,401,402,403,404,405,406,408,409,410,411,412,413,414,415,417,418,419,420,421,423,424,425,432,436,439,440,441,442,444,445,446,447,449,450,454,461,467,476,478,481,482,483,486,489,507,508,510,516,519],termin:[130,272,387,389,464,466,497,506,517],termostat:340,terrel:386,terri:7,tersoff:[2,3,5,7,8,9,15,96,121,153,154,226,227,410,418,427,457,477],tersoff_1:[481,482,483],tersoff_2:[481,482,483],tersoff_mod:482,tertiari:190,tessel:[9,176],test:[0,3,4,6,7,9,10],test_descriptor_str:3,testf:199,testu:199,tether:[6,267,316,324,332,333,335,346,422],tetot:[9,467],tex:8,texa:456,texas_holdem:317,text:[2,3,4,6,7,8,12,13,37,41,56,199,203,204,206,207,210,216,219,220,221,222,223,225,230,242,243,252,306,347,348,360,379,381,389,417,420,431,444,451,452,468,479,480,494,498,499,515,520,525,527,528],textur:16,tfac_insert:247,tfactor:[3,207],tfinal:525,tfix:317,tflag:206,tfmc:[2,3,7,210],th4:177,thakkar:15,thakker:15,than:[1,2,3,6,8,9,11,12,13,14,15,16,17,26,37,39,40,41,42,56,59,60,61,63,65,71,75,80,94,96,100,115,117,119,123,126,127,129,131,153,176,179,180,181,187,199,202,203,205,207,210,215,217,219,222,223,225,226,227,228,229,232,233,234,237,242,244,247,248,249,250,253,254,255,258,267,270,299,300,304,305,306,308,309,311,313,316,317,318,319,320,323,324,325,331,332,334,336,340,341,343,344,348,351,352,353,354,355,356,357,358,359,361,378,379,385,386,387,388,389,390,391,394,396,399,400,401,403,404,405,417,419,423,424,430,441,442,444,449,451,452,459,460,461,467,469,476,477,478,479,480,483,485,487,489,490,493,494,495,496,498,499,500,501,503,506,507,510,512,513,515,517,525,526,528],thank:[252,481,483],thb:460,thb_cutoff:460,thb_cutoff_sq:[459,460],thei:[0,1,2,3,4,6,7,8,11,12,13,14,16,19,20,22,23,24,25,26,27,28,29,30,31,34,36,37,39,40,41,42,43,45,46,47,48,49,51,53,54,55,56,59,61,63,65,66,69,71,74,75,78,79,86,87,90,92,95,96,97,98,99,103,113,114,116,118,119,123,125,126,127,128,129,131,152,155,156,158,160,161,164,165,171,173,175,176,178,180,181,182,184,185,187,188,189,190,192,193,195,196,198,199,203,204,206,207,210,211,212,213,215,218,219,220,222,223,224,225,226,227,228,229,231,232,233,238,240,246,247,248,250,251,252,255,256,258,261,269,272,274,275,276,277,278,279,280,281,282,283,284,290,292,293,295,297,303,304,305,306,307,309,310,311,317,318,320,321,322,336,337,340,343,347,348,350,351,354,356,357,359,360,361,362,364,365,366,367,368,371,372,373,376,378,379,381,383,384,386,387,388,389,390,393,394,395,396,398,399,400,401,402,403,404,405,406,407,408,409,410,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,430,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,450,452,453,454,456,457,459,460,461,462,467,468,469,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,494,496,498,499,500,501,502,503,507,508,510,511,516,519,520,525,528,529],them:[1,2,3,6,7,8,9,11,12,13,16,39,40,41,54,61,75,99,113,118,125,128,131,154,180,185,203,206,207,208,218,219,220,222,223,225,228,229,231,232,244,252,255,256,264,268,272,274,275,276,277,278,279,280,292,293,297,299,305,307,315,316,317,318,322,336,339,340,341,343,347,348,350,354,355,356,358,359,362,379,381,383,388,389,390,394,395,400,407,417,420,423,427,430,449,461,469,484,485,493,496,498,505,510,513,519,520,525,526],themselv:[6,9,11,181,211,212,225,256,378,379,389,391,395,400,410,417,440,444,445,446,468,525],theor:343,theorem:[248,255,323,400,415],theoret:[115,252,308,478],theori:[3,6,9,12,40,152,216,230,249,272,300,378,379,400,447,489,512],thereaft:[75,263,302,318,333,344,351,496],therebi:[349,441,442],therefor:[3,6,12,66,95,163,236,239,247,256,258,322,343,379,412,458,460,478,484,507,519],therein:[6,444],thereof:95,thermal:[0,2,3,4],thermo:[0,1,2,3],thermo_modifi:[2,3,6,59,65,106,107,128,155,159,161,162,164,165,166,167,168,169,170,210,229,233,272,476,514],thermo_p:[3,65,120,496,516],thermo_press:[65,123,229,236,272,274,275,276,277,278,279,280,305,515,516,519],thermo_styl:[2,3,6,8,65,88,99,104,106,107,120,121,123,128,153,155,164,174,178,202,203,204,210,211,212,213,214,219,220,223,224,228,229,232,236,237,238,250,251,253,255,256,267,270,272,274,275,276,277,278,279,280,292,293,295,297,305,308,321,329,339,340,341,350,353,356,358,359,387,396,422,426,449,459,460,501,503,508,514,515],thermo_temp:[65,123,155,228,229,247,272,274,275,276,277,278,279,280,292,293,295,297,300,305,339,340,341,515,516,519],thermoberendsen:6,thermochem:524,thermochemistri:419,thermodyam:[516,524],thermodyanm:[65,228,336,359,507],thermodynam:[0,3],thermophys:449,thermost:[6,160,215,230,236,256,355,519],thermostat:[0,3],thermostatequ:6,thesi:[378,379,441,458],thess:401,theta0:[19,20,23,25,26,27,31,32,34,35,152,187,317,371],theta0max:152,theta10:400,theta1:[185,197,362,400],theta2:[185,197,362,400],theta3:[362,400],theta4:400,theta5:400,theta6:400,theta7:400,theta8:400,theta9:400,theta:[3,6,25,26,36,37,38,65,68,85,100,117,152,177,178,187,200,202,206,250,313,317,348,362,371,426,457,482,498,501,508],theta_0:453,theta_:[371,400],theta_c:426,theta_ijk:400,theta_ijl:362,theta_jik:[445,446],theta_pi:400,theta_sigma:400,thex:309,thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,519,520,521,522,523,524,525,526,527,528,529,530],thick:[75,130,206,501],thie:121,thijss:343,thin:[127,206],thing:[3,6,11,12,54,71,75,229,272,305,318,336,495,496,500,520,525],think:[3,6,7,8,11,13,207,231,318,359,364,368,381,387,427,459,460,479,480,496,500,503,525],third:[6,9,12,28,74,99,146,152,153,176,219,220,222,223,231,248,315,332,334,348,409,420,421,444,453,484,486,493,494,496,498,501],thirumalai:190,thistl:207,tho:418,thole:[2,6,9,163,235,236,256],thompson:[0,5,7,9,13,123,152,153,309,381,468],those:[1,2,3,5,6,7,8,9,10,12,13,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,34,37,39,40,42,43,45,46,47,48,49,50,51,53,54,56,63,75,76,81,95,99,100,117,119,120,121,123,127,152,153,155,158,165,168,176,178,182,184,185,187,188,189,190,191,192,193,195,196,199,202,203,204,206,207,213,217,218,219,220,223,224,229,232,233,239,240,244,246,250,252,253,254,255,261,269,271,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,304,307,310,311,318,322,338,345,346,350,354,355,356,359,360,362,364,365,367,368,369,371,373,378,379,387,389,390,394,395,396,398,401,402,403,404,405,406,407,408,409,410,413,414,417,418,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,444,445,449,450,453,454,456,459,460,461,462,468,469,477,478,479,481,482,483,484,486,488,489,490,493,495,496,498,500,501,502,503,505,507,508,510,512,515,516,517,519,520,525,529,530],though:[6,8,12,39,40,65,75,114,178,200,203,217,226,227,229,231,232,237,264,273,316,318,321,331,344,351,361,374,378,381,389,414,416,417,419,420,423,424,440,441,449,486,493,498,500,501,506,510,517,525],thought:[161,255,295,318,352,353,386,424,431,519],thread:[1,3,9,12,15,16,17,252,349,376,394,511,517],threads_per_atom:3,three:[1,3,6,54,65,74,78,95,99,100,115,128,130,142,152,156,177,178,190,210,228,229,231,235,239,259,272,277,300,305,309,318,319,336,343,345,348,366,367,371,378,379,388,394,395,396,400,417,418,420,423,424,428,431,444,445,446,447,453,457,460,461,467,468,478,481,482,483,486,496,498,501,517,525],threebodi:478,thresh:[41,203,204,206,207,225,496],threshhold:[3,41,206,225,359,496],threshold:[3,41,94,176,207,225,299,390,460,493,512],thrid:496,through:[3,6,7,9,11,12,65,178,182,203,204,208,229,243,245,247,252,253,258,260,261,262,272,273,301,309,319,328,343,348,353,357,377,383,385,396,415,418,419,421,424,430,432,447,452,462,467,469,476,480,484,493,496,499,507,509,515,519],throughout:[6,15,127,130,349,394,447,498],thru:[3,6,7,11,12,69,78,79,86,87,97,98,103,113,114,115,116,129,173,202,203,207,222,269,336,356,361,377,387,393,501],thrust:1,thu:[1,2,3,6,8,11,12,17,32,37,39,41,42,50,61,63,65,66,69,70,74,75,76,77,79,81,86,87,96,98,99,100,103,113,114,116,117,119,120,124,125,126,127,128,152,153,154,158,161,166,168,173,174,175,178,180,181,182,184,186,191,198,199,202,203,204,206,207,208,210,211,212,213,214,218,219,220,222,223,224,225,226,227,228,229,232,233,236,238,239,244,248,249,250,251,252,253,255,256,261,267,272,277,289,299,305,307,309,313,316,318,320,321,322,324,328,329,332,333,334,335,336,337,339,340,341,343,344,347,348,350,351,352,353,356,357,358,359,361,362,369,378,379,381,385,387,388,389,393,394,395,396,399,400,401,402,403,404,405,406,407,408,409,410,414,415,416,417,418,419,420,421,422,423,424,427,428,429,430,432,436,440,441,442,444,445,446,447,449,450,451,452,454,456,457,458,459,460,461,467,468,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,490,493,495,496,498,499,500,501,503,505,506,507,508,510,512,513,514,515,516,517,519,524,525,526,528,529],thumb:[8,16,178,202,269,318,394,408,501,507],thylakoid:383,thz:313,ti2:177,ti3:177,ti4:177,tidi:520,tight:[9,400,467],tightli:307,tij:413,tildeslei:[28,95,413],tile:[3,6,41,64,178,225,430,485,495,525],tilt:[3,6,59,60,61,75,166,180,203,204,207,229,232,233,250,270,272,273,299,308,379,381,486,498,501,516],time:[0,1,2,3,4],time_integr:216,timedelta:220,timelin:5,timeout:[516,517],timer:[1,2,12,16,516],timeremain:[516,517],timescal:[3,218,219,220,222,223,270,308,313,419,493,507],timespan:[255,256,272,305,318,339,340],timestamp:[3,503],timestep:[1,2,3,6,7,8,9,10,11,12,14,16,39,41,59,63,64,65,68,73,75,84,99,102,114,119,120,121,126,128,129,131,153,158,166,202,203,204,205,206,207,208,210,211,212,213,214,215,217,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,237,238,239,244,245,247,248,250,251,253,255,256,258,259,265,266,268,269,270,272,273,274,275,276,277,278,279,280,281,282,283,284,286,287,288,289,290,291,292,293,295,296,297,298,299,300,303,304,305,306,307,309,310,314,315,316,317,318,319,320,321,322,327,328,329,331,332,333,335,336,337,338,339,340,341,343,345,346,347,348,350,353,354,355,356,358,359,361,377,378,379,385,386,387,389,390,391,392,394,400,414,416,419,426,441,442,460,469,473,493,496,499,500,501,503,504,505,506,507,508,512,513,514,515,516,517],timesteppnig:322,timothi:9,tin:[409,410],tinfoil:379,tini:[76,127,178,387,400,526],tinker:7,tio2:467,tio:467,tip3p:0,tip4:6,tip4p:[0,2,3],tip:0,tirrel:353,titan:14,titer:318,titl:[219,220,221,222,223,306,460,520],title1:[219,220,221,222,223],title2:[219,220,221,222,223],title3:[219,220,222,223],tji:413,tkin:508,tl1:177,tl3:177,tlbr_msw:457,tlo:512,tloop:[272,273,277],tlsph:[2,134,136,137],tlsph_defgrad:134,tlsph_dt:325,tlsph_stress:133,tm3:177,tmax:[3,237,512],tmd:[2,3,210],tmd_dump_fil:347,tmdatom:347,tmin:237,tmm:9,tmp1:[222,223,509],tmp2:[222,223,509],tmp3:509,tmp:[6,12,41,68,69,71,73,79,84,86,98,102,103,114,116,119,125,127,129,158,173,175,203,204,206,207,219,225,307,318,344,351,393,505,509,525],tobia:[272,273,318],todd:295,toe:172,toff:[388,498],togeth:[2,3,6,9,11,12,15,16,39,41,75,126,153,158,172,178,179,203,204,211,212,219,222,225,229,236,249,256,272,305,318,324,329,332,336,354,358,359,422,427,496,501,506,519,529],toggl:[61,182,505],togther:3,tol:[288,294,322,336,378,478],toler:[3,229,288,294,309,310,311,319,322,336,387,389,478,493,512],tolernac:319,toma:9,tomato:207,tong:[9,13],too:[1,3,6,7,39,41,66,70,74,76,77,81,96,100,117,152,166,179,181,206,221,225,226,227,229,233,239,244,247,251,272,300,305,309,313,315,322,336,343,344,348,351,379,389,390,394,414,430,493,501,512,515,517,519,525],took:[75,469],tool:[0,1,4,6,7,8,9,11],toolkit:[6,7,13,14,204],top:[0,3,8,9,11,12,13,15,61,161,176,202,210,224,232,251,258,271,295,320,355,356,358,389,394,459,460,468,498,502,508,520],top_group:329,top_veloc:329,topic:[525,529],toplog:[3,495],topolgi:40,topolog:[2,3,6,7,8,12,13,36,39,40,55,95,119,126,181,182,198,207,226,227,252,303,372,388,427,449,495,498,499,500,502,503,510],topwal:224,torder:318,torqu:[2,3,6,28,40,65,124,129,156,157,171],torsion:[6,185,186,198,396,459,460],torsion_flag:396,toru:383,tosi:401,tot:[313,467],total:[3,6,11,12,14,15,16,17,39,41,42,65,67,72,75,83,86,87,88,89,96,97,98,99,101,108,112,113,114,115,118,120,121,128,129,134,135,136,137,139,140,141,142,143,144,145,152,153,155,158,159,160,161,164,165,166,167,168,170,172,174,175,176,203,210,213,214,217,219,221,222,224,225,227,234,236,238,245,246,247,248,253,255,256,257,258,259,261,270,272,273,277,288,289,300,301,303,304,307,308,313,315,317,318,319,320,321,324,326,329,332,333,335,344,345,346,348,351,353,357,378,387,388,389,390,391,394,395,396,397,399,400,409,417,419,424,444,445,446,447,457,459,460,464,467,468,485,493,495,496,498,500,506,507,512,513,516,517,525],touch:[12,253,354,500],toukmaji:[379,413],toward:[9,28,176,206,210,233,234,253,258,271,277,299,316,332,347,349,371,389],toxvaerd:437,tpa:394,tparam:318,tpartial:158,tpc:394,tpcpu:516,tperiod:318,tptask:[15,394],tqx:[124,129,203,204,338],tqy:[124,129,203,204,338],tqz:[124,129,203,204,338],trace:419,track:[3,7,12,227,232,258,348,358,383,493,498,504,512,516,525],track_displac:216,tracker:252,tractabl:319,trade:[6,12,310,378,379,410,432,436,507,512],tradeoff:449,tradit:[6,9,197,379],traffic:12,trail:[2,21,44,81,95,127,128,172,182,186,203,207,211,212,218,219,220,222,223,318,363,384,388,389,407,420,444,460,468,492,498,506,508,516],train:460,traingul:331,traj:230,traj_titl:460,trajectori:[3,6,12,39,95,203,252,272,274,275,276,278,279,280,281,282,284,285,287,290,291,292,293,295,296,297,301,318,322,324,328,349,358,414,449,460,500,508,513,519,524],tran:[189,190],transfer:[1,6,15,216,236,252,254,344,348,351,378,394,400,447,519],transform:[2,6,9,12,59,61,75,95,163,172,180,203,232,235],transit:[6,9,15,94,271,324,347,389,411,440,446,447,483,493,512],translat:[3,6,63,65,104,105,106,107,108,156,157,158,162,171,219,239,247,251,255,256,261,272,278,279,280,292,293,297,301,318,339,340,341,343,381,419,498,516],transmiss:252,transmit:[6,252],transpar:16,transport:[216,348,470],transpos:12,trap:[3,6,99,174,220,253,350,525],trapezoid:[220,525],trate:[3,232,252],travel:336,treat:[2,3,6,8,9,16,40,42,75,90,92,93,131,153,156,160,171,182,201,219,220,222,223,233,246,273,300,303,304,318,336,348,350,357,361,377,378,387,388,390,399,412,419,420,423,426,430,445,446,447,461,485,498,501,503,506,508,519,525],treatment:[9,313,412],tree:[3,303,440],tref:416,tri:[2,3,6,11,40,90,146,202,206,210,217,229,244,247,269,272,273,277],tri_surfac:[132,331],trial:[233,247,397,507],triangl:[2,3,4,6,7,9,40,42,90,124],triangle_mesh_vertic:[328,331],triangleflag:498,triangul:[2,6,13,331,465],triangular:[6,42,90,124,229,291,331,465,498],tricki:[495,519],triclin:[0,1,3],triflag:6,trigger:[3,11,12,64,94,225,228,247,387,455,491,516],trigon:24,trilinear:258,trilino:16,trim:[3,499],tringl:206,tripflag:459,tripl:[2,152,232,400,459,494,496],triplet:[3,33,36,38,418,453,457,478,481,482,483,486],trivial:[8,11,309],trj:460,trott:[7,9,16,152,468],troubl:[11,12],truli:8,truncat:[3,5,6,12,75,239,307,313,319,353,357,386,398,410,419,424,432,434,437,449,456,467,508],trung:14,tscale:[3,270,308],tschopp:70,tsige:404,tsrd:[336,358],tstart:[248,249,255,257,272,273,294,318,339,340,341,342,414,504],tstat:[2,3,6,230,248,249,255,336],tstop:[248,249,255,257,272,273,294,318,339,340,341,342,414,504,512],tsuzuki:[77,486],tthi:139,ttm:[2,3,210],ttm_mod:348,tucker:[152,468],tuckerman:[272,273,296,301,318,507],tue:9,tune:[2,3,6,14,15,210],tunnel:301,turkand:117,turn:[3,4,6,12,21,32,36,39,44,50,54,55,61,68,73,75,119,126,152,176,177,182,186,191,198,206,207,210,217,226,227,228,229,247,252,272,286,303,306,307,318,336,363,369,372,378,387,389,390,392,394,396,412,426,427,444,449,460,476,477,494,498,500,505,510,511,516,517,522,528],turquois:207,tutein:396,tutori:[6,8,9,299],tweak:[12,178,252,394],twice:[3,6,15,16,65,96,184,207,210,211,212,229,269,272,311,323,394,427,496,498,505],twin:70,twist:[441,442],two:[1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,21,37,39,41,42,44,54,56,59,61,63,65,68,71,73,74,75,80,81,84,95,96,100,102,113,118,119,124,125,126,127,128,129,130,152,154,156,160,161,163,164,166,172,176,177,178,179,181,186,197,202,203,204,205,206,207,210,211,212,217,218,219,220,222,223,225,226,227,228,229,233,236,244,247,248,249,251,253,254,255,256,258,261,271,272,273,277,299,300,301,304,305,307,308,309,313,315,318,324,332,336,343,344,346,348,351,354,357,359,361,363,373,378,379,381,383,384,385,387,388,389,392,394,395,396,397,399,400,401,402,403,404,407,408,409,410,412,413,414,416,417,418,419,420,421,423,424,427,430,431,432,436,440,441,442,444,447,449,452,454,457,458,459,460,461,463,467,468,469,476,477,478,480,481,482,483,484,485,486,489,490,492,493,495,496,498,499,500,501,502,505,508,510,511,512,513,515,516,517,519,524,525,526,527,528,529,530],two_temperatur:216,twobodi:[481,483,486],twogrid:3,twojmax:[152,468],twolevel:[3,495],txt2html:8,txt:[8,13,57,203,208,306,307,348,376,388,431,467,487,503,520,525],typcial:[41,225],type1:[81,130,177],type2:[81,130,177],type:[3,6],typei:430,typej:430,typen:[81,130,177],typic:[1,2,3,6,7,8,9,10,11,12,13,14,15,16,17,28,39,40,41,45,46,55,59,61,63,65,74,75,94,95,112,118,129,131,140,172,178,179,181,197,203,204,205,206,207,210,211,212,213,215,216,219,221,225,226,227,228,229,231,232,233,238,244,245,247,250,256,272,286,300,303,304,307,309,311,317,318,322,325,327,336,343,351,352,358,378,381,386,387,388,389,390,391,394,405,407,408,410,422,423,426,427,431,432,436,441,442,444,449,461,464,466,477,479,480,483,493,494,496,498,499,500,501,507,510,512,513,515,520,524,525,528,530],typicali:12,tzou:348,u_chem:[88,89],u_cond:[88,89,241],u_f:258,u_i:[241,242,243],u_ij:457,u_j:243,u_mech:[88,89,241],u_prom:400,uberuaga:[271,389],ubiquit:[11,400],uchem:[40,421,452,480],ucond:40,uhf:397,uiuc:[9,16],uloop:[3,301,389,393,525],ulsph:[2,141],ultim:512,ultra:176,umbrella:[2,6,7,9,230,332,363,372],umech:40,umin:[25,26,48,49,187],unabl:[3,11,41,225],unaffect:[203,229,272,318,499,510,515],unalt:[211,212,231,286],unambigu:[75,486],unari:[361,525],unbalanc:3,unbias:[166,419],unbond:[227,498],unbroken:85,uncertainti:40,unchang:[61,229,233,271,272,274,275,276,278,279,280,289,305,318,498,499,502,508],uncharg:[40,379],uncom:[1,4],uncompress:[12,75,206],uncomput:[2,3,65],uncorrel:[248,343,493],uncoupl:301,undefin:[3,12],under:[0,5,6,7,8,9,12,15,17,20,21,44,152,185,186,206,229,231,252,270,272,304,308,309,323,362,363,384,415,419,440,460,468,496,512,517,519],underestim:176,underflow:206,undergo:[6,94,95,113,166,248,255,256,272,324,336],undergon:[228,336],underli:[6,12,16,74,206,272,348,381],undermin:39,underpredict:6,underscor:[2,3,65,204,210,228,229,270,272,274,275,276,277,278,279,280,292,293,295,297,305,307,339,340,341,361,388,525],understand:[1,4,6,8,247,273,447],understood:[203,400],undesir:[61,229,232,272,318],undetermin:336,undisturb:[441,442],undo:[182,252],undump:[2,3,61,203,204,205,206,207,208,377],unexpect:[3,504],unfix:[2,3,6,61,99,210,216,219,220,222,223,309,317,320,345],unfix_flux:216,unfold:334,unfortun:[349,506,507],uniaxi:[3,156,277],uniform:[7,15,41,96,127,216,225,226,227,233,255,258,261,273,343,416,423,461,493,495,525,526],uniformli:[61,127,202,258,304,348,451,452,457,479,480,526],uninstal:12,uninterrupt:[217,233,247,269,270,272,274,275,276,277,278,279,280,292,293,295,296,297,307,308,318,324,335,338,346,348,354],union:[3,6,40,207,307,357,359,498,501],uniqu:[3,6,7,8,12,39,75,134,221,248,249,255,256,277,307,313,315,389,417,419,498,525,526],unit:[2,3,5,6,7,8,19,20,31,34,35,37,39,56,57,61,63,67,68,69,70,71,72,73,74,75,76,77,78,79,81,83,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,103,104,105,106,107,108,109,110,111,113,114,115,116,118,119,120,121,123,124,125,127,128,129,130,131,132,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,165,166,167,168,169,170,171,172,173,174,175,176,177,178,181,185,199,202,203,204,206,207,213,214,215,217,219,220,224,226,227,228,229,231,232,233,234,237,238,239,241,242,243,245,247,248,249,250,251,252,253,255,256,257,258,269,270,271,272,273,277,286,294,299,300,301,304,305,308,309,311,313,316,317,318,319,320,324,328,332,333,334,335,336,339,340,341,342,343,344,346,347,348,351,352,353,354,355,356,357,358,362,364,368,371,376,378,379,381,384,385,387,388,389,390,391,394,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,454,456,457,458,459,460,461,462,463,465,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,484,485,486,487,488,489,490,491,496,498,500,501,507,508,512,515,516,518,519],unit_styl:3,uniti:[418,449,472],unitless:[66,70,74,75,125,129,183,219,231,232,247,270,272,308,319,354,387,397,424,450,454,456,478,481,482,483,486,524],unitlesss:[82,85,122],univ:[9,13],univers:[3,6,9,12,13,17,95,252,378,379,389,393,441,446,456,458,483,492,495,525],universit:[9,13],unix:[12,16,254,509],unknown:[3,12,66,77,498],unless:[2,3,9,11,12,14,15,55,59,70,113,130,163,177,178,203,204,207,208,215,229,233,247,255,272,274,275,276,278,279,280,304,305,318,336,347,380,387,408,449,479,480,496,501,505,510,525],unlik:[12,97,178,221,255,311,378,395,400,417,420,427,444,445,446,468,477],unlike:[32,50,61,168,191,203,255,272,277,305,313,339,340,341,369,377,417,426,431,445,446,460,495,500,505,510,525,530],unlimit:[457,517],unlucki:3,unmark:7,unmodifi:337,unnecessari:15,unoccupi:348,unoptim:206,unpack:[0,8,11,394],unpack_bord:8,unpack_border_bodi:8,unpack_border_hybrid:8,unpack_border_vel:8,unpack_comm:8,unpack_comm_bodi:8,unpack_comm_hybrid:8,unpack_comm_vel:8,unpack_exchang:8,unpack_restart:8,unpack_revers:8,unpack_reverse_comm:8,unpack_reverse_hybrid:8,unpad:207,unperturb:95,unphys:[3,6,256,272,318,498],unpredict:[316,508],unpublish:447,unrecogn:3,unrel:[8,9,13,184,520],unreli:449,unrestrain:317,unrestrict:397,unscal:[3,124,129,172,203,204,338,499],unset:[3,378,419],unshift:413,unsmooth:438,unsolv:[391,405],unsort:207,unspecifi:[232,498],unsplit:519,unstabl:[3,258],unstag:520,unstrain:232,unsuccess:[3,304],unsupport:[3,513],untar:12,until:[2,3,6,12,37,39,41,56,75,131,199,206,225,229,231,233,242,243,247,252,288,304,328,336,338,345,361,377,378,390,393,394,400,424,451,452,479,480,493,498,499,503,504,506,512,524,525],untilt:501,unus:400,unusu:[3,8,390],unwant:[3,178,378],unwrap:[3,69,78,79,86,87,97,98,103,113,114,116,124,129,153,173,203,204,207,208,218,228,230,252,269,318,332,338,498,499,502,508],unwrapexpand:203,unzip:12,up_intern:206,updat:[0,3,6,8,12,13,15,129,135,136,137,147,148,149,150,202,203,204,210,217,226,227,231,236,245,248,255,256,258,261,265,266,269,270,272,273,274,275,276,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,295,296,297,303,305,307,308,313,318,327,328,338,339,340,341,343,348,359,360,394,400,413,447,449,459,460,466,493,498,500,508,509,512,519],update:260,upenn:[11,13],upgrad:12,upon:[6,217,252,319,400,484,512],upper:[2,3,41,59,61,75,96,113,115,154,167,174,202,207,220,221,225,229,236,256,258,272,308,313,353,354,359,360,387,424,467,501,526],uppercas:0,upsid:6,upsilon:423,upstream:520,upto:[3,500,506],upward:233,urbana:[252,378,379,441],urey_bradlei:19,url:520,usa:9,usabl:[12,247,417],usag:[3,6,8,299,313,336,427,440,498],usage:256,use:[3,6,12,14,16,17,18,129,203,204,205,206,218,219,220,222,223,247,256,270,318,321,344,348,350,351,423,444,459,460,461,467,479,480,496,498,510,520],use_ldg:16,usec:518,used:[207,255,257],useful:447,user:[0,1,2,3,4,5,6,7,8],user_manifold:520,user_misc:[29,30,34,188,193,196,197,367],userguid:9,usernam:520,using:[0,1,3],usr:[11,12,499],usual:[2,3,6,12,14,16,17,23,27,31,34,35,47,63,75,95,128,156,157,158,163,171,176,195,197,203,204,206,211,212,217,219,228,229,230,232,247,250,255,257,270,277,300,308,309,315,317,318,336,344,348,351,353,357,361,368,376,389,390,394,405,408,411,413,423,427,428,431,440,441,442,449,453,464,466,468,476,478,484,493,497,499,503,507,509,512,515,516,517,525,530],usualli:[3,463,465],util:[8,12,16,17,394,423,517],utilizi:12,utilz:[12,517],utsa:456,uttormark:13,uwo:9,v11:6,v22:6,v33:6,v_0:[3,348],v_2:447,v_3:447,v_4:447,v_a:[8,232],v_abc:[496,516,525],v_area:[2,525],v_atomfil:508,v_avp:231,v_c:172,v_cluster:307,v_dc:172,v_delta:95,v_dhug:[270,308],v_diff:[174,350],v_displac:232,v_dk:172,v_dlj:172,v_drai:[270,308],v_dx:[269,501],v_dy:[269,501],v_dz:269,v_e_hbond:426,v_ea:[459,460],v_eb:[459,460],v_eqeq:[459,460],v_espac:213,v_f:496,v_fac:496,v_flux:251,v_foo:[496,525],v_ij:457,v_increas:250,v_integr:350,v_jx:99,v_jy:99,v_jz:99,v_k11:99,v_k22:99,v_k33:99,v_k:172,v_ke:[203,204,529],v_left:501,v_lgr_po:[270,308],v_lgr_vel:[270,308],v_linear:[353,356,358],v_lj:[172,396],v_mol:207,v_mu:441,v_myi:269,v_myindex:525,v_myke:128,v_mystep:505,v_myvar:[8,207],v_myvec:[131,525],v_myx:269,v_n:[258,447],v_name1:[172,232],v_name2:[172,232],v_name:[3,6,75,95,128,131,202,203,204,206,207,211,212,213,214,218,219,220,221,222,223,224,231,238,250,251,253,255,256,269,321,329,338,339,340,341,350,353,356,358,496,501,505,508,514,516,525,526],v_nstep:359,v_occ:422,v_omega:269,v_oscil:[213,214,224,238,321],v_phi:250,v_prefactor:[211,212,469],v_press:153,v_pressdown:[356,358],v_push:213,v_pxxwall:231,v_pxy:6,v_pxz:6,v_pyz:6,v_r0:253,v_r1:176,v_r2:176,v_r:[176,253,288],v_rad:359,v_radiu:253,v_ramp:[353,356,358],v_rate:[232,253],v_rebo:396,v_scale1:[211,212],v_scale2:[211,212],v_size:[211,212],v_t_qm:308,v_temp:344,v_theta:[250,501],v_torsion:396,v_tp:232,v_up:501,v_v0:525,v_v11:6,v_v22:6,v_v33:6,v_v:[269,525],v_valu:[206,496],v_vx:269,v_vy:269,v_vz:[269,526],v_wiggl:[353,356,358],v_x:[2,178,253,269,353,356,358,496,501,525],v_xave:6,v_xmax:6,v_xx:178,v_y:[178,253,501],v_yi:178,v_z:501,vacanc:[4,176,345,447],vacf:[2,3,6,65],vacuum:[348,379,411,483,490],valanc:400,vale:3,valenc:[311,400,419,459,460],valent:400,valeriu:9,valid:[2,3,6,9,11,12,75,130,164,177,207,229,247,255,299,318,336,359,361,376,381,417,419,423,447,457,498,499,506,508,525],valon:444,valu:[2,3],value0:525,value1:[12,68,73,84,102,119,158,218,219,220,221,222,223,277,350,359,509],value2:[12,68,73,84,102,119,158,218,219,220,221,222,223,277,350,359,509],valuei:220,valuej:220,valuev:[7,9],valus:307,van:[9,53,95,118,305,309,314,339,408,409,440,444,459,460,489,526],vanadium:447,vanderwa:[449,516],vanilla:[6,8,12],vanillia:42,vanish:[236,313,322],vapor:[41,225,247,515],vapour:343,var1:509,var2:509,varaibl:[3,501],varavg:12,vare:348,vari:[1,10,17,41,63,64,75,95,130,166,168,177,211,212,216,219,220,225,229,232,270,272,305,317,318,339,340,348,353,378,405,414,415,425,438,441,456,469,479,480,495,513,517],variabl:[0,2,3],variable_hill_factor:13,variable_nam:460,varianc:[128,414,525],variant:[1,3,6,9,12,91,108,129,207,229,272,277,318,323,354,378,386,394,424,445,446,450,481,483,507,511,526],variat:[12,41,225,525],varieti:[1,2,4,6,7,9,13,14,75,206,252,376,381,427,444,459,460,477,486,525],variou:0,varreturn:496,varshalovich:152,varshnei:13,vartiabl:3,vashishta1990:486,vashishta2007:486,vashishta:[2,3,4,9,477],vbia:6,vcm:[2,3,6,65,108],vdim:[167,344,351,526],vdisplac:[3,253,269,353,356,358,525],vdw:[3,409,460],vec1:[128,307],vec2:[128,307],vec:299,vector:[1,2,3],vector_styl:525,vel:[3,6,63,219,232,256,304,324,355,414,415,419,424,493,500,501,503,519,525],veld:[13,336,379,404,436],veloc:[2,3,6,7,8,39,40,63,65,69,90,91,92,93,99,104,105,106,107,108,112,116,123,124,128,129,153,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,174,175,178,203,204,205,206,207,210,211,217,218,219,222,229,232,233,236,237,239,240,247,251,253,255,256,257,258,259,260,261,262,263,265,266,268,269,270,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,295,296,297,298,299,301,302,303,304,305,308,313,316,317,318,321,322,324,326,327,328,329,336,337,338,339,340,341,342,343,344,346,348,350,351,352,353,354,355,356,358,359,381,384,386,387,389,414,416,419,424,441,442,460,493,498,499,500,501,502,503,507,508,515,516,519,524,525],velocit:[251,414,415,419,424],velocity_bottom:258,velocity_gradient:466,velocity_temp:526,velocity_top:258,vendor:[9,12],verbatim:496,verbos:[12,467],veri:[1,3,6,7,8,9,10,12,13,16,41,75,76,95,127,128,129,131,203,204,206,207,218,219,220,221,222,223,225,226,227,229,231,247,261,264,272,273,286,288,294,301,305,316,322,339,340,350,389,390,391,394,419,424,441,442,451,452,456,459,468,469,479,480,506,516,517,519,520,524,528],verifi:[8,394,449,507,513,520],verlag:324,verlet:[1,3,7,8,9,12,15,17,216,239,255,272,286,295,301,322,337,348,356,359,394,492,495,507],versa:[3,6,13,61,172,180,228,242,253,255,256,318,498,499,519],versu:[6,14,17,39,41,85,113,114,127,174,207,225,231,318,322,379,404,413,424,436,449,516,525],vertex:[42,146,331],vertic:[2,15,41,42],ves:[456,477],vfinal:525,vfrac:124,vhi:[167,526],vhs:416,via:[0,1,2,3,4,6,7,8,9,11],vibrat:[6,9,233,249,299,308,313,371,419,493,507],vice:[3,6,13,61,172,180,228,242,253,255,256,318,498,499,519],video:206,view:[4,6,7,13,203,206,336,400,419,420,467],viewer:[203,206],viewpoint:206,vij:414,vika:13,vim:0,vincent:[9,18],violat:343,violet:207,virial:[3,65,99,123,152,153,172,211,212,229,236,272,273,274,275,276,277,278,279,280,303,305,318,322,378,394,397,414,415,416,419,428],virialmod:428,virtual:[6,7,8,12,478],virut:9,visa:7,viscoelast:[122,424,456],viscoelsat:456,viscos:[0,2,3,4],viscosity:[4,6],viscou:[2,6,210,248,249,251,255,258],viscous:318,vision:467,visit:320,vista:203,visual:[0,3,4],viz:[11,13],viz_tool:11,vizplotgui_tool:11,vizualiziton:320,vlo:[167,526],vmax:[229,336],vmd:[6,7,9,11,13,203,208,252,499],vmdarch:208,vmdhome:208,vname:525,voigt:[6,152],vol:[2,6,8,99,138],volfactor:378,volpress:447,volt:[458,524],volum:[2,3,6,40,41,60,61,65,85,95,99,110,123,127,130,138,142,151,153,176,177,178,181,217,219,225,229,232,233,241,247,258,270,272,273,277,281,282,284,285,287,288,290,291,292,293,295,296,297,304,305,308,318,324,348,353,357,359,378,381,388,402,441,442,447,456,474,475,490,494,495,498,501,508,516,519,524,525],volumetr:85,von:[145,150],voro:[3,9,176],vorobyov:519,voronoi:[2,3],vorselaar:221,voter2:[493,512],voter:[445,446,493,512],voth:[40,301],vpz:355,vratio:525,vri:425,vrpn:252,vshear:354,vstream:6,vtarget:[3,351],vtk:[2,6],vtp:204,vtr:204,vtu:204,vv0210:13,vx0:174,vxcm:318,vxhi:[233,304],vxlo:[233,304],vy0:174,vycm:318,vyhi:[233,304],vylo:[233,304],vz0:174,vzcm:318,vzhi:233,vzi:355,vzlo:233,w_1:152,w_2:152,w_i:152,w_ik:457,waal:[95,118,408,409,440,459,460,489],wadlei:[13,400],wag:[7,9,13],wagner:[7,9,216,258,444],wai:[1,2,3,6,7,8,9,10,11,12,14,17,21,33,44,52,61,65,68,69,73,74,75,76,79,81,84,86,95,98,99,100,102,103,114,116,117,119,125,126,127,152,153,155,156,157,158,159,160,161,164,165,166,167,168,170,171,172,173,175,178,181,186,194,199,202,203,204,206,207,210,211,212,219,222,223,224,227,228,229,231,232,245,248,253,255,256,258,270,272,277,286,288,301,304,305,307,316,318,320,324,332,333,336,338,339,340,341,344,347,348,350,353,356,358,359,363,364,365,366,368,370,371,379,381,384,387,389,390,394,395,396,407,410,411,414,416,417,418,420,423,426,427,429,432,444,445,446,449,453,455,457,458,461,467,468,469,476,478,481,483,486,492,493,496,498,499,500,501,502,503,506,507,508,520,525,526,527],wait:[1,12,15,252,300,493,495],walk:[3,248,255,256,272],wall:[0,2,3,5],wall_surac:146,wall_surfac:[146,328],wallhi:353,wallstyl:354,walltim:517,wander:332,wang:[379,444,457],want:[0,1,2,3,5,6,7,8,9,11,12,16,37,40,56,65,67,69,71,72,75,79,83,86,87,88,89,98,101,103,113,114,116,118,120,121,123,125,127,129,153,158,173,174,175,176,178,181,199,203,204,206,207,210,211,212,213,218,219,225,228,232,233,236,238,242,245,247,253,256,267,289,299,304,307,317,318,321,332,333,335,337,344,346,351,353,357,359,361,379,381,389,395,396,400,408,409,414,417,420,427,428,429,430,444,451,452,453,457,459,460,467,469,478,479,480,481,483,485,486,494,496,498,499,500,501,503,505,506,513,516,517,519,520,525,528,530],ward:400,warm:[15,419],warmup:15,warn:0,warner:395,warning:[2,3,12,444,459],warp:[5,444],warranti:7,warren:[414,451,452],wasn:3,wast:3,watanab:[345,346],watch:389,water:[0,3],watkin:195,wave:[7,9,40,215,270,312,355,397,419],wavefunct:[397,419],wavelength:[130,177],wavepacket:[40,397,419,498],wavevector:300,wbodi:91,weak:[10,100,309],web:[1,4,8,10,14,16,407],webb:216,weber:[3,5,7,9,14,96,154,418,446,457,477,478,486,510],websit:[8,459,460],weckner:456,weight:[2,3,6,36,55,95,119,126,127,152,177,179,182,184,198],welcom:496,well:[1,3,6,7,8,9,11,12,13,14,16,17,26,40,51,70,75,100,117,123,153,156,164,178,187,206,207,213,217,219,223,225,226,227,229,233,238,247,251,255,258,262,264,269,272,277,288,294,304,305,318,319,321,329,343,346,354,387,389,394,399,422,423,426,427,428,441,442,444,447,461,469,481,482,483,496,498,500,502,507,512,517,519,520,524,529],wennberg:378,went:[3,11],were:[3,5,6,7,9,11,12,13,14,15,18,33,41,42,52,56,62,74,75,113,117,120,121,123,127,155,158,178,181,182,194,203,206,207,210,213,219,222,223,225,232,238,244,251,252,286,295,320,354,355,359,370,378,391,393,396,419,424,427,431,456,460,479,493,495,496,498,499,500,501,503,505,513,516,520,525,526,529,530],weren:503,western:9,westview:489,what:[0,1,2,3,6],whatev:[8,12,14,119,124,127,128,129,131,206,207,211,212,229,231,272,305,307,354,381,386,387,389,394,406,408,447,459,460,512,519,525],wheat:207,whelan:177,when:[0,1,2,3,4,6,8,9,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,28,29,30,31,32,34,36,37,39,40,41,42,43,45,46,47,48,49,50,51,53,54,55,56,61,63,64,65,67,72,75,76,83,87,94,96,100,101,113,114,115,117,118,119,120,123,124,126,127,128,131,154,155,156,161,165,166,168,174,176,178,179,180,181,182,184,185,186,187,188,189,190,191,192,193,195,196,198,199,203,204,205,206,207,208,210,211,212,213,214,215,217,218,219,220,222,223,224,225,226,227,228,229,230,231,232,233,237,238,240,242,244,245,246,247,249,250,252,255,258,259,261,262,267,272,273,274,275,276,277,278,279,280,281,282,286,289,290,292,293,295,297,299,303,304,305,306,307,308,310,311,312,313,317,318,319,320,321,322,324,332,334,336,337,338,343,344,348,349,350,351,353,354,355,356,357,358,359,360,361,362,364,365,367,368,369,371,372,373,375,376,377,378,379,381,385,386,387,388,389,390,391,393,394,395,396,398,401,402,403,404,405,406,407,408,409,410,412,413,414,416,417,418,419,420,422,423,424,425,426,427,428,429,430,432,433,434,435,436,437,438,439,440,441,442,444,445,446,447,449,450,451,452,453,454,456,457,459,460,461,462,468,469,476,478,479,480,481,482,483,484,485,486,488,489,490,491,493,495,496,498,499,500,501,502,503,504,505,506,507,508,509,510,512,513,515,516,517,518,520,524,525,526,528,530],whenev:[0,8,12,75,197,207,218,318,381,426,496,507,511,525,530],whenth:3,where:[1,3,6,8,9,10,11,12,14,15,17,20,22,23,24,25,26,27,28,31,34,35,36,39,40,41,43,47,48,49,51,55,63,65,67,68,69,71,72,73,74,75,77,79,83,84,85,86,88,90,91,92,93,95,96,97,98,100,101,102,103,104,105,106,107,108,114,116,119,123,124,125,126,127,128,129,130,131,153,155,156,157,158,159,160,161,164,165,166,167,168,170,171,172,173,175,177,179,181,182,185,187,198,202,203,206,207,210,211,212,213,214,219,220,224,225,228,229,231,232,233,237,238,239,241,243,244,245,247,248,249,250,251,253,255,256,257,258,261,262,265,267,269,270,272,273,277,286,290,298,299,300,301,304,306,307,308,311,313,318,319,320,321,322,324,328,329,332,333,335,338,339,340,341,344,345,346,348,351,352,353,354,356,357,358,359,362,364,365,366,367,368,371,372,373,376,379,381,386,387,388,389,390,391,394,395,396,399,400,401,403,407,408,409,410,411,412,413,414,415,417,418,419,420,421,422,423,424,425,426,427,428,429,432,436,441,442,443,444,445,446,447,449,452,453,454,456,457,458,459,460,461,467,468,471,474,475,476,477,478,479,480,481,482,483,486,489,490,492,493,495,496,497,498,500,501,502,503,505,507,508,510,512,513,514,515,516,519,524,525,526,528,530],wherea:[6,11,100,217,248,272,309,343,348,519],wherebi:310,wherev:251,whether:[6,8,11,12,16,39,40,54,61,63,65,74,75,112,118,154,165,166,199,206,207,209,210,211,212,219,223,226,227,228,229,230,232,236,244,247,256,269,272,277,307,322,336,344,350,351,359,361,376,378,379,388,392,394,403,405,409,425,427,431,441,442,444,449,460,467,477,493,496,498,499,501,503,510,511,512,515,525,526],which:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,27,28,31,32,36,37,38,39,40,41,42,44,45,46,47,50,51,53,54,55,56,58,60,61,63,65,66,67,69,70,72,74,75,76,77,78,79,80,81,82,83,85,86,87,88,89,90,91,93,95,96,97,98,99,101,103,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,184,185,186,189,190,191,192,195,198,199,202,203,204,206,207,208,210,211,212,213,214,215,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,236,237,238,239,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,261,262,266,267,269,270,271,272,273,274,275,276,277,278,279,280,282,284,286,287,288,290,291,292,293,294,295,296,297,299,300,301,303,304,305,306,307,308,309,310,311,313,314,315,316,317,318,320,321,322,324,325,326,327,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,361,362,363,365,368,369,372,373,376,377,378,379,381,383,384,385,386,387,388,389,390,391,393,394,395,396,397,399,400,401,403,404,405,407,408,409,410,411,412,413,414,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,434,435,436,438,440,441,442,444,445,446,447,449,450,451,452,453,454,455,457,458,459,460,461,462,463,464,465,466,467,468,469,472,476,477,478,479,480,481,482,483,484,485,486,489,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,519,520,525,526,528,529,530],whichev:[12,393,493,512],white:[207,248,255,256,257,318,340,348,498,525,529],whitesmok:207,whitespac:[2,3,207,388,498],who:[0,3,6,7,8,9,13,395,417],whole:[236,252,300,313,319,324,519],wholli:233,whose:[3,6,7,8,9,17,18,37,39,42,56,61,80,95,99,163,181,199,206,207,217,231,232,242,243,253,254,269,272,274,275,276,278,279,280,299,300,316,317,319,322,336,350,357,359,381,389,390,419,421,434,451,452,463,465,478,479,480,481,483,519,525,526],why:[3,6,256,344,351,520],wicaksono1:299,wicaksono2:299,wicaksono:299,wide:[1,6,7,63,65,210,344,351,381,391,405,408,419,459,460],width:[206,207,233,383,397,422],wiggl:[3,232,269,328,353,354,356,358,501],wiggle:328,wigner:152,wih:6,wikipedia:6,wild:[3,12,21,44,81,95,127,186,211,212,318,363,384,407,426,492,500,505,528,530],wildcard:[3,12,128,172,182,203,204,206,207,218,219,220,222,223,315,407,476,505,508,516,529,530],wildli:[272,305],win:394,window:[3,4,12,13,75,203,206,208,219,220,221,222,223,252,320,341,342,407,499,520],wipe:[210,427,477,521,523],wire:317,wirnsberg:[6,239],wirt:207,wisconsin:13,wisdom:520,wise:[3,12,414,478,507],wish:[2,3,5,6,7,8,11,12,16,40,42,59,60,61,75,128,153,158,179,180,182,184,203,204,207,211,218,219,220,223,227,232,233,244,247,253,258,262,304,307,318,322,336,337,353,354,378,381,389,394,403,426,427,444,449,451,452,459,479,480,496,498,499,500,506,510,516,525,526,530],within:[1,2,3,6,8,9,11,12,13,14,15,16,28,39,40,41,42,55,61,63,65,68,73,74,75,76,77,81,84,100,102,117,119,123,126,127,128,129,131,134,152,169,178,181,205,206,207,211,212,217,218,219,222,223,225,226,227,228,233,235,242,243,244,247,253,255,299,303,304,305,307,309,318,319,320,322,325,327,331,332,337,348,351,353,357,359,361,377,381,387,388,389,390,391,394,399,401,403,410,415,416,417,418,419,421,422,427,428,431,432,444,447,452,454,455,456,461,462,477,478,480,481,482,483,484,486,491,493,495,496,498,506,507,510,512,519,524,525],without:[1,2,3,4,6,7,8,9,11,12,15,16,19,20,22,23,24,25,26,27,28,29,30,31,34,37,40,43,45,46,47,48,49,51,53,54,56,61,95,123,155,160,165,179,184,185,187,188,189,190,192,193,195,196,199,203,206,207,208,210,213,219,221,222,223,224,229,231,232,240,242,243,246,248,250,252,255,269,272,274,275,276,277,278,279,280,281,282,290,292,293,295,296,297,304,307,309,310,311,312,316,318,319,320,321,322,328,336,352,356,360,362,364,365,367,368,371,373,377,378,379,389,390,394,395,396,398,401,402,403,404,405,406,407,408,409,410,413,414,417,418,419,420,421,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,445,447,449,450,451,452,453,454,456,460,461,462,469,477,478,479,480,481,482,483,484,486,488,489,490,496,498,501,506,507,513,516,519,520,524,525],wolf:[2,3,7,76,127],wolff:[449,479,480],won:[3,316,442],wong:[216,400],word:[2,3,6,8,12,28,65,207,210,217,218,219,220,223,230,253,283,289,306,311,317,350,361,377,408,449,494,496,498,517,525,526],work:[1,3,6,7,8,9,11,12,15,17,39,54,61,62,96,128,129,130,156,157,159,160,161,165,166,167,168,170,171,176,177,203,206,208,211,212,219,228,231,245,247,254,255,256,258,262,269,272,278,279,280,288,292,293,295,296,297,305,307,315,317,320,322,339,340,341,346,377,378,390,394,407,409,412,414,427,441,442,444,447,449,467,493,495,496,499,500,502,506,507,509,512,525],workaround:[76,127,318,449,526],worker:[12,459,460,486],workflow:520,workhors:8,workstat:496,world:[3,12,152,377,389,393,492,495,496,513,525],worlei:414,worri:16,worsen:17,worst:357,worth:[219,220,222,223,308,320],would:[1,3,4,5,6,7,8,11,12,15,21,28,36,41,42,44,55,74,75,76,97,99,127,129,153,158,166,178,179,180,181,182,184,186,198,203,204,206,207,208,210,211,212,214,217,219,225,228,229,230,232,236,237,239,244,247,250,251,252,256,269,272,273,286,299,301,305,307,309,313,316,319,336,343,347,355,356,359,361,362,363,364,365,366,368,369,372,378,381,384,386,387,388,389,390,393,394,395,396,400,407,408,409,410,414,415,416,417,418,420,427,428,429,430,444,445,446,447,453,457,459,460,464,466,468,476,478,481,482,483,486,493,496,498,501,502,503,505,506,507,508,509,513,515,516,519,520,525,526,529,530],wrap:[1,3,6,9,11,12,59,61,129,178,180,202,203,204,205,207,208,218,230,232,233,252,258,269,318,332,336,353,355,357,378,379,389,496,498,499,501,506],wrapper:[0,6,7],wrigger:324,wright:387,writabl:3,write:3,write_atom_weight:216,write_coeff:2,write_data:[2,3,8,12,13,307,498,527],write_dump:[2,3,205],write_freq:460,write_head:8,write_restart:[2,3,8,9,13,210,216,258,500,505,527,528],writen:320,written:[3,5,6,7,8,9,12,13,16,57,68,73,126,152,176,203,204,205,206,207,208,210,211,212,213,214,215,216,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,234,236,237,238,239,240,244,245,246,248,249,250,251,252,253,255,256,257,258,259,260,261,262,263,264,265,266,268,271,281,282,283,284,285,286,287,288,289,290,291,294,298,299,300,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,320,321,322,332,333,334,336,337,339,340,341,342,343,344,345,347,348,350,351,352,353,355,356,357,358,360,376,381,390,417,427,443,447,487,489,493,494,496,499,500,504,505,512,513,514,515,520,525,528,529,530],wrong:[3,11,229,272,298,353,357,358,390,460,500,505],wrote:[3,9,500],wt1:449,wt2:449,wt3:449,wurtzit:381,www:[0,2,3,5,6,7,8,10,11,12,13,14,395,417,441,458,459,460,524],x200:15,x86:[12,447],x_ij:457,x_ijkl:362,x_kjli:362,x_ljik:362,xave:6,xavx:15,xcm:[8,318,525],xcore:15,xdr:[12,203],xeon:[1,7,9,10,12,15,16,17,394,511],xflag:[165,166,259,261,268,318,343],xhi:[2,6,59,61,180,203,232,347,353,356,358,498,501,516,525],xhi_bound:[6,203],xhi_new:498,xhost:[9,15],xi_ij:457,xiaowang:[13,420,481,483],xiij:299,xk7:9,xlat:[178,232,253,516],xlo:[2,6,11,59,61,180,203,232,253,347,353,356,358,498,501,516,525],xlo_bound:[6,203],xlo_new:498,xmax:[6,215,237,286,525],xmgrace:0,xmic:15,xmid:233,xmin:525,xml:[204,208,458],xml_label:458,xmovi:[0,4,6,7],xmu:[354,424],xorig:75,xplane:354,xplor:203,xpo:178,xrd:[2,9,130],xsph:9,xsu:[3,203,204,338,499],xt3:203,xt4:[17,203],xt5:[17,203],xtc:[3,6,7,12,203,205,206,207,208],xtcdump:207,xvf:12,xwall:[231,355,356,358],xxx:12,xyz:[3,6,7,9,13,42,69,75,116,119,166,173,178,203,205,206,207,208,229,261,272,273,277,305,315,316,318,332,335,354,356,358,380,388,495,499,526,529],xzhou:[13,420],xzy:495,yamada:15,yang:[447,457],yate:447,yb2:177,yb3:177,ybox:232,ycm:318,year:[5,7],yeh:378,yellow:[206,207],yellowgreen:207,yet:[3,7,15,16,39,42,206,211,231,315,353,379,386,387,394,406,408,409,419,489,496,498,499,520,525,527,528,529],yflag:[165,166,259,261,268,318,343],yhi:[6,61,180,203,232,347,353,356,358,498,501,516],yhi_bound:[6,203],yield:[6,99,121,128,153,161,166,207,220,229,236,272,295,309,319,344,350,351,354,359,378,399,414,424,449,456,516,525],yip:345,ylat:[178,232,253,516],ylo:[6,61,180,203,232,347,353,356,358,498,501,516],ylo_bound:[6,203],ymax:[215,525],ymid:233,ymin:525,yorig:75,york:[301,379],yoshida:[272,318],you:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,34,37,39,40,41,42,43,45,46,47,48,49,50,51,53,54,56,59,60,61,63,65,67,69,71,72,75,76,77,78,79,81,83,86,87,88,89,95,96,97,98,99,100,101,103,112,113,114,116,117,118,120,121,123,125,127,128,129,152,153,155,156,157,158,161,165,166,171,172,173,174,175,176,178,179,180,181,182,184,185,186,187,188,189,190,191,192,193,195,196,198,199,203,204,206,207,208,210,211,212,213,214,217,218,219,220,222,223,224,225,226,227,228,229,231,232,233,236,238,239,240,242,244,245,246,247,248,249,250,251,252,253,255,256,257,267,269,272,274,275,276,277,278,279,280,281,282,286,289,290,292,293,295,296,297,300,301,303,304,305,307,309,310,311,313,316,317,318,321,322,324,332,333,335,336,337,339,340,341,342,344,345,346,347,348,350,351,352,353,354,356,357,358,359,361,362,364,365,367,368,369,371,373,377,378,379,381,384,386,387,388,389,390,393,394,395,396,398,400,401,402,403,404,405,406,407,408,409,410,413,414,416,417,418,419,420,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,444,445,446,447,449,450,451,452,453,454,455,456,457,458,459,460,461,462,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,483,484,486,488,489,490,492,493,494,495,496,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,515,516,517,519,520,524,525,526,527,528,530],young:[424,463,465],your:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,34,37,39,40,43,45,46,47,48,49,51,53,54,56,61,63,118,123,127,155,156,157,161,165,171,176,178,179,180,181,182,184,185,187,188,189,190,192,193,195,196,199,202,203,204,205,206,213,216,220,222,223,224,226,227,228,229,232,233,240,246,247,250,252,255,269,272,274,275,276,277,278,279,280,281,282,290,292,293,295,297,304,307,310,311,316,318,321,322,324,338,344,348,350,351,353,356,357,358,359,362,364,365,367,368,371,373,379,381,388,389,390,393,394,395,396,398,400,401,402,403,404,405,406,407,408,409,410,413,414,416,417,418,420,422,423,424,425,426,427,428,429,432,433,434,435,436,437,438,439,440,441,444,445,446,447,449,450,453,454,456,457,459,460,461,462,469,476,478,479,480,481,482,483,484,486,488,489,490,492,495,496,498,500,501,502,505,506,507,508,509,510,511,515,516,520,524,525,527,528,530],yourself:[6,8,12,13,229,388,520],yplane:354,ypo:178,ysu:[3,203,204,338,499],yuan:9,yukawa:[2,3,7,9,408,477],yukawa_1_1:487,yxz:495,yzx:495,z_i:[419,483,490],z_j:[483,490],z_meam:444,zachari:13,zannoni:423,zbl:[2,3,444,468,477],zblcut:483,zblcutinn:468,zblcutout:468,zblexpscal:483,zblz:468,zcm:318,zcylind:354,zepeda:217,zero:[2,3,4,6,9,11,12,25,26,33,36],zeta:[3,258,309,420],zfactor:206,zflag:[165,166,259,261,268,318,343],zhang:[318,344,424],zhi:[3,6,180,203,215,347,353,356,358,498,501,516],zhi_bound:[6,203],zhou:[13,400,420,457,481,483],zhu:475,ziegenhain:13,ziegler:[303,444,477,483,490],zimmerman2004:216,zimmerman2010:216,zimmerman:[9,74,216,400],zlat:[232,253,516],zlib:[9,203],zlim:467,zlo:[3,6,180,203,215,347,353,355,356,358,498,501,516],zlo_bound:[6,203],zmax:[215,258,525],zmid:233,zmin:[258,525],zn2:177,zone:[130,320],zoom:[3,203,206,207],zorig:75,zplane:354,zr4:177,zrest:335,zsu:[3,203,204,338,499],zwall:353,zwall_veloc:258,zxy:495,zybin:460,zyx:495},titles:["LAMMPS Documentation","5. Accelerating LAMMPS performance","3. Commands","12. Errors","7. Example problems","13. Future and history","6. How-to discussions","1. Introduction","10. Modifying &amp; extending LAMMPS","4. Packages","8. Performance &amp; scalability","11. Python interface to LAMMPS","2. Getting Started","9. Additional tools","5.GPU package","5.USER-INTEL package","5.KOKKOS package","5.USER-OMP package","5.OPT package","angle_style charmm command","angle_style class2 command","angle_coeff command","angle_style cosine command","angle_style cosine/delta command","angle_style cosine/periodic command","angle_style cosine/shift command","angle_style cosine/shift/exp command","angle_style cosine/squared command","angle_style dipole command","angle_style fourier command","angle_style fourier/simple command","angle_style harmonic command","angle_style hybrid command","angle_style none command","angle_style quartic command","angle_style sdk command","angle_style command","angle_style table command","angle_style zero command","atom_modify command","atom_style command","balance command","Body particles","bond_style class2 command","bond_coeff command","bond_style fene command","bond_style fene/expand command","bond_style harmonic command","bond_style harmonic/shift command","bond_style harmonic/shift/cut command","bond_style hybrid command","bond_style morse command","bond_style none command","bond_style nonlinear command","bond_style quartic command","bond_style command","bond_style table command","bond_write command","bond_style zero command","boundary command","box command","change_box command","clear command","comm_modify command","comm_style command","compute command","compute ackland/atom command","compute angle command","compute angle/local command","compute angmom/chunk command","compute basal/atom command","compute body/local command","compute bond command","compute bond/local command","compute centro/atom command","compute chunk/atom command","compute cluster/atom command","compute cna/atom command","compute com command","compute com/chunk command","compute contact/atom command","compute coord/atom command","compute damage/atom command","compute dihedral command","compute dihedral/local command","compute dilatation/atom command","compute dipole/chunk command","compute displace/atom command","compute dpd command","compute dpd/atom command","compute erotate/asphere command","compute erotate/rigid command","compute erotate/sphere command","compute erotate/sphere/atom command","compute event/displace command","compute fep command","compute group/group command","compute gyration command","compute gyration/chunk command","compute heat/flux command","compute hexorder/atom command","compute improper command","compute improper/local command","compute inertia/chunk command","compute ke command","compute ke/atom command","compute ke/atom/eff command","compute ke/eff command","compute ke/rigid command","compute meso/e/atom command","compute meso/rho/atom command","compute meso/t/atom command","compute_modify command","compute msd command","compute msd/chunk command","compute msd/nongauss command","compute omega/chunk command","compute orientorder/atom command","compute pair command","compute pair/local command","compute pe command","compute pe/atom command","compute plasticity/atom command","compute pressure command","compute property/atom command","compute property/chunk command","compute property/local command","compute rdf command","compute reduce command","compute rigid/local command","compute saed command","compute slice command","compute smd/contact/radius command","compute smd/damage command","compute smd/hourglass/error command","compute smd/internal/energy command","compute smd/plastic/strain command","compute smd/plastic/strain/rate command","compute smd/rho command","compute smd/tlsph/defgrad command","compute smd/tlsph/dt command","compute smd/tlsph/num/neighs command","compute smd/tlsph/shape command","compute smd/tlsph/strain command","compute smd/tlsph/strain/rate command","compute smd/tlsph/stress command","compute smd/triangle/mesh/vertices","compute smd/ulsph/num/neighs command","compute smd/ulsph/strain command","compute smd/ulsph/strain/rate command","compute smd/ulsph/stress command","compute smd/vol command","compute sna/atom command","compute stress/atom command","compute force/tally command","compute temp command","compute temp/asphere command","compute temp/body command","compute temp/chunk command","compute temp/com command","compute temp/cs command","compute temp/deform command","compute temp/deform/eff command","compute temp/drude command","compute temp/eff command","compute temp/partial command","compute temp/profile command","compute temp/ramp command","compute temp/region command","compute temp/region/eff command","compute temp/rotate command","compute temp/sphere command","compute ti command","compute torque/chunk command","compute vacf command","compute vcm/chunk command","compute voronoi/atom command","compute xrd command","create_atoms command","create_bonds command","create_box command","delete_atoms command","delete_bonds command","dielectric command","dihedral_style charmm command","dihedral_style class2 command","dihedral_coeff command","dihedral_style cosine/shift/exp command","dihedral_style fourier command","dihedral_style harmonic command","dihedral_style helix command","dihedral_style hybrid command","dihedral_style multi/harmonic command","dihedral_style nharmonic command","dihedral_style none command","dihedral_style opls command","dihedral_style quadratic command","dihedral_style spherical command","dihedral_style command","dihedral_style table command","dihedral_style zero command","dimension command","displace_atoms command","dump command","dump custom/vtk command","dump h5md command","dump image command","dump_modify command","dump molfile command","echo command","fix command","fix adapt command","fix adapt/fep command","fix addforce command","fix addtorque command","fix append/atoms command","fix atc command","fix atom/swap command","fix ave/atom command","fix ave/chunk command","fix ave/correlate command","fix ave/correlate/long command","fix ave/histo command","fix ave/time command","fix aveforce command","fix balance command","fix bond/break command","fix bond/create command","fix bond/swap command","fix box/relax command","fix colvars command","fix controller command","fix deform command","fix deposit command","fix drag command","fix drude command","fix drude/transform/direct command","fix dt/reset command","fix efield command","fix ehex command","fix enforce2d command","fix eos/cv command","fix eos/table command","fix eos/table/rx command","fix evaporate command","fix external command","fix freeze command","fix gcmc command","fix gld command","fix gle command","fix gravity command","fix heat command","fix imd command","fix indent command","fix ipi command","fix langevin command","fix langevin/drude command","fix langevin/eff command","fix lb/fluid command","fix lb/momentum command","fix lb/pc command","fix lb/rigid/pc/sphere command","fix lb/viscous command","fix lineforce command","fix manifoldforce command","fix meso command","fix meso/stationary command","fix_modify command","fix momentum command","fix move command","fix msst command","fix neb command","fix nvt command","fix nvt/eff command","fix nph/asphere command","fix nph/body command","fix nph/sphere command","fix nphug command","fix npt/asphere command","fix npt/body command","fix npt/sphere command","fix nve command","fix nve/asphere command","fix nve/asphere/noforce command","fix nve/body command","fix nve/eff command","fix nve/limit command","fix nve/line command","fix nve/manifold/rattle command","fix nve/noforce command","fix nve/sphere command","fix nve/tri command","fix nvt/asphere command","fix nvt/body command","fix nvt/manifold/rattle command","fix nvt/sllod command","fix nvt/sllod/eff command","fix nvt/sphere command","fix oneway command","fix orient/fcc command","fix phonon command","fix pimd command","fix planeforce command","fix poems","fix pour command","fix press/berendsen command","fix print command","fix property/atom command","fix qbmsst command","fix qeq/point command","fix qeq/comb command","fix qeq/reax command","fix qmmm command","fix qtb command","fix reax/bonds command","fix reax/c/species command","fix recenter command","fix restrain command","fix rigid command","fix rx command","fix saed/vtk command","fix setforce command","fix shake command","fix shardlow command","fix smd command","fix smd/adjust_dt command","fix smd/integrate_tlsph command","fix smd/integrate_ulsph command","fix smd/move_tri_surf command","fix smd/setvel command","&lt;no title&gt;","fix smd/wall_surface command","fix spring command","fix spring/chunk command","fix spring/rg command","fix spring/self command","fix srd command","fix store/force command","fix store/state command","fix temp/berendsen command","fix temp/csvr command","fix temp/rescale command","fix temp/rescale/eff command","fix tfmc command","fix thermal/conductivity command","fix ti/rs command","fix ti/spring command","fix tmd command","fix ttm command","fix tune/kspace command","fix vector command","fix viscosity command","fix viscous command","fix wall/lj93 command","fix wall/gran command","fix wall/piston command","fix wall/reflect command","fix wall/region command","fix wall/srd command","group command","group2ndx command","if command","improper_style class2 command","improper_coeff command","improper_style cossq command","improper_style cvff command","improper_style distance command","improper_style fourier command","improper_style harmonic command","improper_style hybrid command","improper_style none command","improper_style ring command","improper_style command","improper_style umbrella command","improper_style zero command","include command","info command","jump command","kspace_modify command","kspace_style command","label command","lattice command","log command","Manifolds (surfacse)","mass command","min_modify command","min_style command","minimize command","molecule command","neb command","neigh_modify command","neighbor command","newton command","next command","package command","pair_style adp command","pair_style airebo command","pair_style awpmd/cut command","pair_style beck command","pair_style body command","pair_style bop command","pair_style born command","pair_style brownian command","pair_style buck command","pair_style buck/long/coul/long command","pair_style lj/charmm/coul/charmm command","pair_style lj/class2 command","pair_coeff command","pair_style colloid command","pair_style comb command","pair_style coul/cut command","pair_style coul/diel command","pair_style born/coul/long/cs command","pair_style lj/cut/dipole/cut command","pair_style dpd command","pair_style dpd/fdt command","pair_style dsmc command","pair_style eam command","pair_style edip command","pair_style eff/cut command","pair_style eim command","pair_style exp6/rx command","pair_style gauss command","pair_style gayberne command","pair_style gran/hooke command","pair_style lj/gromacs command","pair_style hbond/dreiding/lj command","pair_style hybrid command","pair_style kim command","pair_style lcbop command","pair_style line/lj command","pair_style list command","pair_style lj/cut command","pair_style lj96/cut command","pair_style lj/cubic command","pair_style lj/expand command","pair_style lj/long/coul/long command","pair_style lj/sf command","pair_style lj/smooth command","pair_style lj/smooth/linear command","pair_style lj/cut/soft command","pair_style lubricate command","pair_style lubricateU command","pair_style lj/mdf command","pair_style meam command","pair_style meam/spline","pair_style meam/sw/spline","pair_style mgpt command","pair_style mie/cut command","pair_modify command","pair_style morse command","pair_style multi/lucy command","pair_style multi/lucy/rx command","pair_style nb3b/harmonic command","pair_style nm/cut command","pair_style none command","pair_style peri/pmb command","pair_style polymorphic command","pair_style quip command","pair_style reax command","pair_style reax/c command","pair_style resquared command","pair_style lj/sdk command","pair_style smd/hertz command","pair_style smd/tlsph command","pair_style smd/tri_surface command","pair_style smd/ulsph command","pair_style smtbq command","pair_style snap command","pair_style soft command","pair_style sph/heatconduction command","pair_style sph/idealgas command","pair_style sph/lj command","pair_style sph/rhosum command","pair_style sph/taitwater command","pair_style sph/taitwater/morris command","pair_style srp command","pair_style command","pair_style sw command","pair_style table command","pair_style table/rx command","pair_style tersoff command","pair_style tersoff/mod command","pair_style tersoff/zbl command","pair_style thole command","pair_style tri/lj command","pair_style vashishta command","pair_write command","pair_style yukawa command","pair_style yukawa/colloid command","pair_style zbl command","pair_style zero command","partition command","prd command","print command","processors command","python command","quit command","read_data command","read_dump command","read_restart command","region command","replicate command","rerun command","reset_timestep command","restart command","run command","run_style command","set command","shell command","special_bonds command","suffix command","tad command","temper command","thermo command","thermo_modify command","thermo_style command","timer command","timestep command","Tutorial for Thermalized Drude oscillators in LAMMPS","LAMMPS GitHub tutorial","uncompute command","undump command","unfix command","units command","variable command","velocity command","write_coeff command","write_data command","write_dump command","write_restart command"],titleterms:{"break":226,"default":[36,39,40,55,59,60,61,63,64,74,75,95,96,100,112,113,115,117,118,119,126,130,134,135,152,158,166,167,171,177,178,181,183,198,201,202,203,204,206,207,208,209,211,212,213,215,216,217,219,223,226,227,229,230,232,233,237,244,247,248,253,255,256,257,258,259,261,267,270,272,273,277,295,296,300,301,304,305,306,307,308,310,313,315,316,318,320,336,338,343,344,345,346,349,351,353,355,359,372,376,378,379,381,382,385,386,388,390,391,392,394,397,400,402,419,441,442,447,449,459,460,476,477,493,494,495,498,499,501,503,505,506,507,510,512,514,515,516,517,518,524,526,528,529],"function":525,"long":[221,401,403,404,405,406,410,412,413,432,436,440,454,462,484],"new":8,"static":12,acceler:1,ackland:66,acknowledg:7,adapt:[211,212],addforc:213,addition:[12,13],addtorqu:214,adiabat:6,adjust_dt:325,adp:395,airebo:396,alloi:417,amber2lmp:13,amber:6,angl:[8,67,68],angle_coeff:21,angle_styl:[2,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],angmom:69,append:215,arrai:6,aspher:[6,90,156,274,278,282,283,292],asphere:9,atc:[9,216],atom:[6,7,8,66,70,74,75,76,77,80,81,82,85,87,89,93,100,105,106,109,110,111,117,121,122,124,152,153,176,215,217,218,307,525],atom_modifi:39,atom_styl:40,attract:5,aug:0,aveforc:224,awpmd:[9,397],balanc:[41,225],barostat:6,basal:70,bcc:299,beck:398,berendsen:[305,339],between:6,binary2txt:13,bodi:[6,8,42,71,157,275,279,284,293,399],body:9,bond:[8,13,72,73,226,227,228,314],bond_coeff:44,bond_styl:[2,43,45,46,47,48,49,50,51,52,53,54,55,56,58],bond_writ:57,bop:400,born:[401,412],boundari:[7,59],box:[6,60,229],brownian:402,buck:[403,404,412,443],bug:3,build:[11,12],calcul:6,call:12,categori:2,centro:74,ch2lmp:13,chain:13,change_box:61,charmm:[6,19,184,405,440],chunk:[6,69,75,79,86,98,103,114,116,125,158,173,175,219,333],citat:7,class2:[9,20,43,185,362,406],clear:62,cluster:76,cmm:9,cna:77,code:6,coeffici:6,colloid:[9,353,408,489],colvar:[13,230],colvars:9,com:[78,79,159],comb3:409,comb:[310,409],come:5,comm_modifi:63,comm_styl:64,command:[2,6,8,12,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,521,522,523,524,525,526,527,528,529,530],common:3,comparison:1,compos:6,compress:9,comput:[2,6,8,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,525],compute_modifi:112,condit:7,conduct:[6,344],constant:[6,525],constraint:7,contact:[80,132],control:231,coord:81,core:6,coreshell:9,correl:[220,221],cosin:[22,23,24,25,26,27,187],cossq:364,coul:[401,403,404,405,406,410,411,412,425,432,436,440,454,462],coupl:6,creat:227,create_atom:178,create_bond:179,create_box:180,createatom:13,creation:7,csld:340,csvr:340,cubic:434,custom:[8,203,204],cut:[49,397,403,406,410,413,419,422,432,433,440,448,454,484],cvff:365,damag:[82,133],data2xmovi:13,data:6,databas:13,deby:[410,432],defgrad:139,deform:[161,162,232],delete_atom:181,delete_bond:182,delta:23,deposit:233,descript:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,521,522,523,524,525,526,527,528,529,530],diagnost:7,diel:411,dielectr:183,diffraction:9,diffus:6,dihedr:[8,83,84],dihedral_coeff:186,dihedral_styl:[2,184,185,187,188,189,190,191,192,193,194,195,196,197,198,199,200],dilat:85,dimens:201,dipol:[6,28,86,413],dipole:9,direct:236,directori:4,discuss:6,disp:6,displac:[87,94],displace_atom:202,distanc:366,distribut:[7,12],document:0,dpd:[9,88,89,414,415],drag:234,dreid:426,dreiding:6,drude:[6,9,163,235,236,256,519],dsf:[410,432],dsmc:416,dump:[6,8,203,204,205,206,208],dump_modifi:207,dynam:309,eam:[13,417],echo:209,edip:418,eff:[9,13,106,107,162,164,169,257,273,285,296,342,419],efield:238,ehex:239,eim:420,elastic:6,emac:13,energi:[135,415],enforce2d:240,ensembl:7,erot:[90,91,92,93],error:[3,134],evapor:244,event:94,exampl:[4,6,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,511,512,513,514,515,516,517,518,521,522,523,524,525,526,527,528,529,530],exp6:421,exp:[26,187],expand:[46,435],extend:[8,11],extern:245,fcc:299,fdt:415,featur:[7,8,525],fene:[45,46],fep:[9,13,95,212],field:[6,7],file:6,finit:6,fire:309,fix:[2,6,8,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,525],fix_modifi:[211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,236,237,238,239,240,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,312,314,315,316,317,318,320,321,322,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358],flow:6,fluid:258,flux:[99,154],forc:[6,7,154,337],fourier:[29,30,188,367],freez:246,from:[6,11],futur:5,gauss:422,gaybern:423,gcmc:247,gener:[1,6,7,13],get:12,github:520,gld:248,gle:249,global:6,gpu:[9,14,398,401,403,405,406,408,410,413,414,417,422,423,425,432,433,434,435,448,450,461,462,469,478,479,481,482,483,488,489,490],gran:[354,424],granular:[6,9],graviti:250,gromac:425,group2ndx:360,group:[96,359,525],gyrat:[97,98],h5md:[9,203,205],harmon:[31,47,48,49,189,192,353,368,453],hbond:426,heat:[99,154,251],heatconduct:470,helix:190,hertz:[424,463],hexord:100,histo:222,histori:[5,424],hook:424,hourglass:134,how:6,hybrid:[32,50,191,369,427],idealga:471,imag:[203,206],imd:252,implicit:405,improp:[8,101,102],improper_coeff:363,improper_styl:[2,362,364,365,366,367,368,369,370,371,372,373,374],includ:375,inclus:8,indent:253,indice:0,individu:2,induc:6,inertia:103,info:[0,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,236,237,238,239,240,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,312,314,315,316,317,318,320,321,322,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,376],input:[2,6,8],install:11,integr:6,integrat:7,integrate_tlsph:326,integrate_ulsph:327,intel:[9,15,19,31,45,47,184,189,195,272,281,282,295,365,368,403,405,423,432,478,481],interfac:[6,11],intern:135,introduct:7,invers:236,ipi:254,ipp:13,jump:377,kate:13,keyword:525,kim:[9,428],kokkos:[9,16],kspace:[2,8,9,349],kspace_modifi:378,kspace_styl:[6,379],label:380,lammps:[0,1,2,6,7,8,11,12,519,520],langevin:[255,256,257],lattic:381,lcbop:429,lennard:443,librari:[6,11,12],limit:286,line:[12,287,430],linear:[439,450],lineforc:263,list:[2,431],lj1043:353,lj126:353,lj93:353,lj96:433,lmp2arc:13,lmp2cfg:13,lmp2vmd:13,local:[6,68,71,73,84,102,119,126,129],log:382,lowercas:4,lubric:441,lubricateu:442,luci:[451,452],make:12,manifold:[9,288,294,383],manifoldforc:264,manybody:9,mass:384,math:525,matlab:13,mdf:443,meam:[9,444,445,446],measur:1,mesh:146,meso:[109,110,111,265,266],messag:3,mgpt:[9,447],micelle2d:13,mie:448,min_modifi:385,min_styl:386,minim:[8,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,236,237,238,239,240,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,312,314,315,316,317,318,320,321,322,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,387],misc:9,mod:[348,482],model:[6,7],modifi:8,mol:154,molecul:388,molecule:9,molfil:[203,208],molfile:9,moltempl:13,momentum:[259,268],morri:475,mors:[51,396,426,450],move:269,move_tri_surf:328,movi:[203,206],mpi:11,mpiio:9,msd:[113,114,115],msi2lmp:13,msm:[401,403,405,410,432],msst:270,multi:[6,7,192,451,452],multipl:6,nb3b:453,ndx2group:360,neb:[271,389],neigh:[141,147],neigh_modifi:390,neighbor:391,nemd:6,newton:392,next:393,nharmon:193,noforc:[283,289],non:[6,7],none:[33,52,194,370,455],nongauss:115,nonlinear:53,nph:[272,273,274,275,276,318],nphug:277,npt:[272,273,278,279,280,318],num:[141,147],numer:525,nve:[281,282,283,284,285,286,287,288,289,290,291,318],nvt:[272,273,292,293,294,295,296,297,318],omega:116,omp:[9,17,19,20,22,23,24,25,26,27,28,29,30,31,34,37,43,45,46,47,48,49,51,53,54,56,184,185,187,188,189,190,192,193,195,196,199,250,272,274,276,277,278,280,281,290,292,295,297,310,362,364,365,367,368,371,373,395,396,398,401,402,403,404,405,406,408,409,410,411,413,414,417,420,422,423,424,425,426,427,432,433,434,435,436,437,438,439,440,441,445,446,450,453,454,456,461,462,469,478,479,481,482,483,484,486,488,489,490],onewai:298,open:7,operat:525,opl:195,opt:[9,18,405,417,432,436,450],optim:1,option:[6,8,12],orient:299,orientord:117,orthogon:6,oscil:519,other:6,output:[6,7,8,12,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,236,237,238,239,240,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,312,314,315,316,317,318,320,321,322,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358],overlai:427,overview:11,packag:[1,9,12,14,15,16,17,18,394],pair:[6,118,119],pair_coeff:407,pair_modifi:449,pair_styl:[2,395,396,397,398,399,400,401,402,403,404,405,406,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,488,489,490,491],pair_writ:487,pairwis:8,parallel:11,paramet:6,pars:2,partial:165,particl:[6,7,42],partit:492,past:5,per:6,perform:[1,10],peri:[9,456],period:24,phonon:[9,13,300],pimd:301,piston:355,planeforc:302,plastic:[122,136,137],pmb:456,poem:303,poems:9,point:309,polariz:6,poli:[402,441,442],polym:13,polymorph:457,post:7,potenti:[2,6,8],pour:304,pppm:6,prd:493,pre:7,press:305,pressur:123,previou:12,print:[306,494],problem:[3,4],process:[6,7],processor:495,profil:166,properti:[6,124,125,126,307],pymol_aspher:13,python:[9,11,13,496],qbmsst:308,qeq:[9,309,310,311],qmmm:[9,312],qtb:[9,313],quadrat:196,quantiti:6,quartic:[34,54],quip:[9,458],quit:497,radiu:132,ramp:167,rate:[137,144,149],rattl:[288,294,322],rdf:127,read_data:498,read_dump:499,read_restart:500,reax:[9,13,311,314,315,459,460],reaxc:9,rebo:396,recent:316,reduc:128,refer:525,reflect:356,region:[8,128,168,169,357,501,525],relat:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,43,44,45,46,47,48,49,50,51,53,54,55,56,57,58,59,61,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,92,93,94,95,97,99,100,101,102,103,104,105,106,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,201,202,203,204,205,206,207,208,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,241,242,243,244,246,247,248,249,250,251,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,313,314,315,316,318,319,320,321,323,324,325,326,327,328,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,375,376,377,378,379,381,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,503,504,505,506,507,508,510,511,512,513,514,515,516,517,518,521,522,523,525,526,527,528,529,530],relax:229,replic:502,replica:[6,7,9],report:3,requir:12,rerun:503,rescal:[341,342],reset:237,reset_timestep:504,resquar:461,restart2data:13,restart:[6,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,236,237,238,239,240,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,312,314,315,316,317,318,320,321,322,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,505],restrain:317,restrict:[14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,521,522,523,524,525,526,527,528,529,530],rho:[110,138],rhosum:473,rigid:[6,9,91,108,129,261,318],ring:371,rotat:170,rule:2,run:[6,11,12,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,236,237,238,239,240,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,312,314,315,316,317,318,320,321,322,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,506],run_styl:507,scalabl:10,scalar:6,screen:12,script:[2,6,8,11],sdk:[35,462],self:335,serial:11,set:[6,508],setforc:321,setvel:329,shake:322,shape:142,shardlow:323,share:[11,12],shell:[6,509],shield:309,shift:[25,26,48,49,187],shock:9,simpl:30,simul:6,size:6,slater:309,slice:131,sllod:[295,296],small:318,smd:[9,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,324,325,326,327,328,329,331,463,464,465,466],smooth:[438,439,450],smtbq:[9,467],sna:152,snad:152,snap:[9,468],snapshot:6,snav:152,soft:[440,450,469],solver:2,sourc:7,spc:6,speci:315,special:[7,525],special_bond:510,sph:[9,470,471,472,473,474,475],sphere:[92,93,171,261,276,280,290,297],spheric:[6,197],spline:[445,446],spring:[332,333,334,335,346],squar:27,srd:[9,336,358],srp:476,standard:9,start:[12,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,236,237,238,239,240,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,312,314,315,316,317,318,320,321,322,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358],state:338,stationari:266,stop:[211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,236,237,238,239,240,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,312,314,315,316,317,318,320,321,322,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358],store:[337,338],strain:[136,137,143,144,148,149],strategi:1,streitz:410,stress:[145,150,153,154],structur:2,style:[1,2,6,8],submit:8,suffix:511,summari:6,surfacs:383,swap:[217,228],syntax:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,300,301,302,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,521,522,523,524,525,526,527,528,529,530],system:6,tabl:[0,6,37,56,199,242,243,479,480,481],tad:512,taitwat:[474,475],talli:154,tally:9,temp:[155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,339,340,341,342],temper:513,temperatur:6,tersoff:[481,482,483],test:11,tfmc:343,thermal:[6,344,519],thermo:[6,514,525],thermo_modifi:515,thermo_styl:516,thermodynam:[6,8],thermostat:6,thole:484,time:[6,223],timer:517,timestep:518,tip3p:6,tip4p:[6,410,432,436,440],tip:12,tlsph:[139,140,141,142,143,144,145,464],tmd:347,tool:[12,13],torqu:173,transform:236,tri:[291,485],tri_surfac:465,triangl:146,triclin:6,tstat:414,ttm:348,tune:349,tutori:[519,520],type:7,ulsph:[147,148,149,150,466],umbrella:373,uncomput:521,undump:522,unfix:523,unit:524,uppercas:4,user:[9,12,15,17],using:[6,11],vacf:174,valu:[6,525],variabl:[6,8,525],variou:1,vashishta:486,vcm:175,vector:[6,350,525],veloc:526,version:[0,5,12],vertic:146,via:12,vim:13,viscos:[6,351],viscou:[262,352],visual:6,vol:151,voronoi:[9,176],vtk:[9,203,204,320],wall:[6,353,354,355,356,357,358],wall_surfac:331,warn:3,water:6,weight:222,what:[7,12],wolf:[401,410],wrapper:11,write:6,write_coeff:527,write_data:528,write_dump:529,write_restart:530,xmgrace:13,xmovi:13,xrd:177,yukawa:[488,489],zbl:[483,490],zero:[38,58,200,374,491]}})
\ No newline at end of file
+Search.setIndex({envversion:50,filenames:["Manual","Section_accelerate","Section_howto","Section_python","accelerate_intel","angle_charmm","angle_class2","angle_cosine","angle_cosine_delta","angle_cosine_periodic","angle_cosine_shift","angle_cosine_shift_exp","angle_cosine_squared","angle_dipole","angle_fourier","angle_fourier_simple","angle_harmonic","angle_quartic","angle_sdk","balance","bond_class2","bond_fene","bond_fene_expand","bond_harmonic","bond_harmonic_shift","bond_harmonic_shift_cut","bond_morse","bond_nonlinear","bond_quartic","compute_centro_atom","compute_cna_atom","compute_dpd","compute_fep","compute_gyration","compute_gyration_chunk","compute_heat_flux","compute_hexorder_atom","compute_msd_nongauss","compute_orientorder_atom","compute_pressure","compute_saed","compute_sna_atom","compute_stress_atom","compute_xrd","create_atoms","dihedral_charmm","dihedral_class2","dihedral_cosine_shift_exp","dihedral_fourier","dihedral_harmonic","dihedral_helix","dihedral_multi_harmonic","dihedral_nharmonic","dihedral_opls","dihedral_quadratic","dihedral_spherical","dihedral_style","dump_image","fix_atc","fix_balance","fix_bond_swap","fix_box_relax","fix_controller","fix_ehex","fix_eos_cv","fix_eos_table_rx","fix_gld","fix_lb_fluid","fix_nh","fix_nphug","fix_nve_manifold_rattle","fix_nvt_manifold_rattle","fix_orient","fix_pimd","fix_qbmsst","fix_restrain","fix_rx","fix_shake","fix_spring_rg","fix_ti_rs","fix_ti_spring","fix_ttm","fix_wall","fix_wall_region","improper_class2","improper_cossq","improper_cvff","improper_distance","improper_fourier","improper_harmonic","improper_ring","improper_umbrella","minimize","neb","pair_adp","pair_airebo","pair_beck","pair_body","pair_bop","pair_born","pair_buck","pair_buck_long","pair_charmm","pair_class2","pair_colloid","pair_comb","pair_coul","pair_coul_diel","pair_cs","pair_dipole","pair_dpd","pair_dpd_fdt","pair_eam","pair_edip","pair_eff","pair_eim","pair_exp6_rx","pair_gauss","pair_gayberne","pair_gran","pair_gromacs","pair_hbond_dreiding","pair_list","pair_lj","pair_lj96","pair_lj_cubic","pair_lj_expand","pair_lj_long","pair_lj_sf","pair_lj_smooth","pair_lj_smooth_linear","pair_lj_soft","pair_lubricate","pair_lubricateU","pair_mdf","pair_meam","pair_meam_spline","pair_meam_sw_spline","pair_mgpt","pair_mie","pair_morse","pair_multi_lucy","pair_multi_lucy_rx","pair_nb3b_harmonic","pair_nm","pair_polymorphic","pair_resquared","pair_sdk","pair_smtbq","pair_snap","pair_soft","pair_sph_idealgas","pair_sph_taitwater","pair_sph_taitwater_morris","pair_srp","pair_sw","pair_tersoff","pair_tersoff_mod","pair_tersoff_zbl","pair_vashishta","pair_yukawa","pair_yukawa_colloid","pair_zbl","tutorial_github"],objects:{},objnames:{},objtypes:{},terms:{"00a":79,"00b":79,"02214e23":35,"0b1":3,"0e4":119,"0x98b5e0":57,"100k":1,"1024x1024":57,"10e":108,"10x":[92,93,98],"12th":76,"16e":76,"16x":1,"18986e":92,"1_prop":2,"1fluid":[116,142],"1st":[2,5,32,45,65,68,76,94,95,98,105,112,114,115,116,129,130,135,136,137,141,142,143,145,149,155,156,157,158,159],"2000k":57,"20x":98,"23899e":92,"2400k":57,"2697v2":4,"2697v4":4,"298k":107,"2k_ss":114,"2nd":[2,3,21,22,61,65,68,84,92,93,95,105,114,121,135,141,142,149,155,156,157,158,159],"2theta":43,"2x5":114,"36x":4,"3806504e":[2,35],"3n_k":66,"3nk":74,"3rd":[5,37,65,105,114,116,121,141,142,149,155,156,157,158,159],"3x3":35,"4857990943e":114,"49e":76,"4_94":3,"4th":[2,45,76,94,95,98,112,115,116,119,135,141,142,143,145,149,155,156,158,159],"50k":1,"512k":4,"524k":4,"5_1":98,"5th":[92,116],"66e":76,"6x6":2,"7120p":4,"8706e":148,"8706q":148,"8730m":148,"8730n":148,"8x1":2,"8x2":2,"948q":148,"9jan09":119,"9th":93,"break":[28,114],"case":[1,2,3,4,19,21,22,29,30,44,45,57,59,61,62,67,68,69,70,72,74,75,76,81,82,83,92,93,95,102,104,106,108,112,114,118,119,121,131,132,133,135,138,141,142,143,145,150,154,156,158,162,163],"catch":1,"char":[2,148],"class":[1,2,3,56,103,159],"default":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28],"export":[4,57],"final":[2,3,19,32,42,59,61,68,69,74,76,79,81,92,93,94,95,98,112,115,116,131,135,143,145,155,156,158,159,163],"float":[2,4,114],"function":[1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,32,35,39,41,45,46,47,48,49,50,51,52,53,54,55,58,61,65,66,67,68,69,73,75,76,77,79,80,81,82,84,85,86,88,89,90,91,92,94,95,96,98,99,100,101,102,103,104,105,106,107,109,110,111,112,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,155,156,157,158,159,160,161,162],"import":[1,2,3,37,44,49,61,68,81,131,138],"int":[2,3,81],"long":[1,2,4,18,32,39,42,45,50,57,58,63,68,70,77,81,92,93,96],"new":[0,2,3,19,32,44,57,59,60,61,63,68,69,73,77,92,93,112,135,138,141,142,163],"null":[2,35,36,38,39,42,44,76,78,94,95,105,112,115,119,135,136,137,143,145,149,155,156,157,158,159],"public":[0,115,141,142,148],"return":[2,3,4,19,44,68,119],"short":[1,2,4,68,95,98,99,100,101,102,105,106,108,114,123,127,131,134,135,140,144,147,148,163],"static":[2,19,57,59,68,119],"switch":[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,35,39,41,43,45,46,47,48,49,50,51,52,53,54,57,67,68,69,77,79,80,84,85,86,88,89,90,91,93,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,115,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,138,140,143,144,146,147,150,155,156,157,158,159,160,161,162,163],"true":[2,59,68,72,73,114,119,148,155],"try":[1,67,79,80,163],"var":[3,44],"void":[2,19,59],"while":[1,3,29,37,41,49,61,62,66,67,68,74,76,92,98,107,112,156,158,159],_j1m1m1:41,_j2m2m2:41,_manifold_rattl:163,_wirnsberg:63,a12:146,a2m:[2,35],a_0:[67,81,98],a_0_real:67,a_1:81,a_2:81,a_3:81,a_4:81,a_c:104,a_cc:104,a_f:158,a_ij:98,a_pi:98,a_sigma:98,a_ss:104,aat:46,aberdeen:[31,64],abil:[61,68,114],abl:[3,60,70],ablat:81,about:[0,1,2,3,4,19,40,44,57,58,59,60,61,62,63,67,69,70,71,72,75,77,78,79,80,81,82,83,92,93,97,102,106,161,163],abov:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,57,59,60,61,62,68,69,73,75,76,84,85,86,87,88,89,90,91,93,96,97,98,99,100,101,102,103,104,105,106,107,109,110,111,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],abscissa:[141,142],absolut:[76,92,119,123],absorb:81,abstol:76,ac3:43,acceler:0,accelri:2,accept:[32,44,60,76,101,127,163],acceptor:121,access:[0,2,3,4,29,30,31,33,34,35,36,37,38,39,40,41,42,43,58,59,60,61,62,63,66,67,68,69,70,71,72,74,75,77,78,79,80,81,82,83,95,117,119,121,135,150],accident:163,accidenti:90,accomod:68,accomplish:4,accord:[2,31,57,65,67,68,70,74,79,80,81,82,83,114,119,126,129,145,148,150,151,152,153,154],accordingli:[3,132,133,154],account:[2,32,40,43,56,63,68,72,77,78,81,88,106,111,119,123,127,132,133,135,138,148,163],accumul:[2,31],accur:[1,2,19,59,76,77,83,98,114,118,119,146,156,158],accuraci:[1,2,19,59,63,68,77,95,114,141,142],achiev:[1,2,4,13,19,59,63,68,70,73,74],ackland1:112,ackland2:112,ackland:112,acknowledg:0,acolor:57,acquir:[2,61,68],across:[1,2,19,59,76,81,83,93],act:[2,67,79,80,81,83,92,109,118,119,121,146,154],acta:[40,43,94],actinid:138,action:[2,3,66,80],activ:[3,4,32,66,76,131],actual:[1,2,62,72,118,120,126,132,133,154],adapt:[2,32,62,76,131,132,150],adapti:72,adaptiv:95,add:[0,1,2,3,4,32,35,44,57,58,62,63,67,68,69,72,75,77,80,81,82,83,95,99,100,103,106,114,123,135,140,144,147,163],add_molecul:58,add_speci:58,add_to_nodeset:58,added:163,addforc:92,adding:[75,163],addit:[1,2,4,5,13,19,44,55,56,57,59,61,63,65,67,68,69,72,77,82,83,93,94,95,98,99,100,102,105,106,109,111,112,113,114,115,119,120,122,123,131,133,134,135,136,137,138,141,142,143,144,145,147,148,149,155,156,157,158,159,162,163],addition:[0,2,3,4,57,81,93,118,146,163],address:[3,57,163],addtorqu:92,adequ:93,adher:13,adhikari:67,adiabat:0,adiam:57,adjac:[44,63,93,156],adjiman:139,adjust:[2,4,19,40,43,57,59,61,62,68,69,72,74,76,82,92,93,95,132,133,148,158],admiss:69,adopt:75,advanc:[4,98],advantag:[1,2,3,19,59,62,113],advect:2,advis:[76,93],affect:[1,2,42,57,60,61,63,78,81,90,92,93,114,132,133],affin:[4,105],afshar:110,after:[2,3,6,19,46,55,57,58,59,60,61,62,67,68,74,76,77,79,80,82,84,92,94,95,98,105,112,113,114,115,116,131,132,133,135,136,137,138,141,142,143,145,148,149,155,156,157,158,159,163],afterword:19,ag1:43,ag2:43,again:[2,3,41,63,84,93,132,133],against:[3,93],aggreg:[2,78],aggress:63,agre:[92,95],ahd:121,aidan:0,aim:2,aka:57,al2o3:148,al2o3_001:40,al3:43,ala:[67,148],alat:[72,135],albe:[145,156,158],albeit:75,alchem:32,alcu:[94,98],alcu_eam:145,alderton:109,alejandr:68,algebra:138,algorithm:[0,1,2,19,58,59,60,63,67,73,77,81,92,111,114,133,138],alia:4,alias:1,align:[2,13,19,59],alkali:114,all:[0,1,2,3,4,19,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,79,80,81,82,83,84,88,92,93,94,95,97,98,99,100,101,102,103,105,106,109,110,112,113,114,115,116,117,118,119,120,121,122,123,124,125,127,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,161,162,163],allen:[13,32,109,118],allentildeslei:32,alloc:[2,3],alloi:[94,98,106],allow:[1,2,3,4,19,36,38,43,44,56,57,58,59,60,61,62,66,67,68,72,74,75,76,77,78,79,80,81,82,83,92,93,95,98,99,100,101,102,106,112,114,119,120,121,123,127,132,133,138,145,146,148,154,161,163],almost:[4,74,81,154],alo:106,alon:[2,60],along:[2,13,29,32,40,43,44,57,60,63,67,74,77,78,81,83,92,93,106,109,119,123,127,135],alonso:[136,137],alpha:[2,26,62,67,74,92,94,96,99,106,110,111,112,113,115,116,121,122,123,135,140,157],alpha_c:131,alpha_i:149,alpha_lj:131,alphabet:56,alreadi:[44,59,74,93,110,120,125,133,154,162],also:[0,1,2,3,4,13,18,19,28,29,30,31,32,33,34,36,37,38,39,41,42,44,45,56,57,59,60,61,62,64,65,66,67,68,69,72,73,74,75,76,77,78,81,83,92,93,98,101,102,107,108,109,110,112,113,114,118,119,121,127,131,132,135,138,143,145,146,147,151,152,153,155,156,157,158,159,163],alter:[2,3,19,44,57,60,61,62,68,93],altern:[1,2,3,4,35,44,64,68,76,85,89,92,94,95,106,111,112,113,115,123,131,135,136,137,143,145,149,155,156,158,159],alternat:92,although:[4,13,68],aluminum:162,alwai:[0,2,3,4,28,82,83,84,92,100,103,112,126,138,141,142,148,150,156,158,162],amaz:3,amber2lmp:0,amber:0,ambient:57,amd:138,among:[4,42,67],amorph:[44,157],amount:[1,2,57,61,68,72,76,110],amplitud:90,amzallag:148,analag:2,analalog:2,analog:[2,38,41,62,119],analysi:[30,138,149],analyt:[1,40,43,77,98,125,138,145],analyz:[2,93,138],andersen:[70,71,77],anderson:110,andzelm:154,ang:[4,72],angl:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,28,32,36,38,39,40,41,42,43,44,46,47,48,50,52,54,55,56,57,60,68,75,77,84,85,86,88,89,90,91,92,95,98,106,113,121,123,127,131,136,137,143,159],angle1:75,angle2:75,angle:[4,13],angle_coeff:[5,6,7,8,9,10,11,12,13,14,15,16,17,18],angle_cosine_shift:11,angle_cosine_shift_exp:[10,47],angle_cutof:121,angle_cutoff:121,angle_hybrid:13,angle_styl:[0,2],angleangl:84,angleangletors:46,angletors:46,angmom:2,angstrom:[2,40,43,44,57,82,94,95,102,112,131,135,143,158,162],angular:[2,13,41,44,77,94,98,105,119,132,133,135,138,145,156,157],anharmon:[11,27,47],ani:[1,2,3,4,13,19,29,30,32,33,34,35,36,37,38,39,40,41,42,43,44,45,55,57,59,60,61,62,63,65,67,68,69,72,73,76,77,81,82,83,92,93,95,98,101,102,105,106,109,110,112,113,115,118,127,138,141,142,145,146,149,155,156,157,158,159,163],anihil:[131,140],anim:[3,57,93],animat:57,anion:[115,148],aniso:[61,68,69],anisotrop:[118,146],ann:139,annoi:163,annot:[155,156,157,158,159],anoth:[2,3,4,13,57,60,63,66,68,69,81,92,93,106,110,114,115,118,121,122,123,131,146,150,154,156,157,158,163],another:[1,2,32],ansi:4,anthoni:80,antisymmetri:114,antonelli:[79,80],any:[1,2,57,154],anymor:80,anyth:[3,44,155,156,158,163],anywher:[44,135,149],aparam:32,apart:[97,150],api:3,appear:[2,3,19,32,36,38,41,44,57,59,61,84,92,93,104,112,135,141,142,148,159],append:[1,3,4,19,29,32,34,35,36,37,38,39,40,41,42,43,44,57,59,60,61,62,63,66,67,68,69,70,71,73,74,75,77,80,82,98,114,154],appendix:[13,109,148],appl:[61,68,159],appli:[2,13,19,32,37,41,42,43,44,45,56,57,58,59,61,63,64,65,66,67,68,69,72,73,74,75,77,80,81,92,93,97,99,100,102,106,109,114,116,119,120,121,123,129,133,138,142,144,147,154,161],applic:[1,2,4,60,62,72,75,158],applicat:58,appling:61,apply:[32,61,77,78],approach:[2,4,55,58,66,73,80,81,98,106,108,111,118,138,146,154],appropri:[1,2,3,30,35,56,60,61,67,68,69,73,74,82,83,93,95,98,101,104,105,106,113,119,127,131,138,155,156,157,158,159],approxim:[2,40,43,67,73,77,92,108,114,116,118,132,133,138,142,146,148,161],april:3,apu:[132,133],aqua:57,ar_thermal:58,ar_ttm:58,arbitrari:[2,57,68,73,76,155],arbitrarili:[3,41,61,68,106],arch:1,architectur:138,archiv:2,archive:3,area:[2,19,35,39,59,67,119],arg:[3,19,32,44,59,63,70,71,75,80,82,93,99,100,102,103,108,109,111,114,120,123,127,131,132,133,134,140,144,147],argument:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,32,35,38,39,41,42,44,45,46,47,48,49,50,51,52,53,54,59,61,65,68,69,76,77,81,84,85,86,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,108,109,110,111,112,113,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,134,135,136,137,140,141,142,143,144,145,146,147,148,149,150,155,156,157,158,159,160,161,162],aris:161,arithmet:[2,102,104,126],arl:[31,64],army:[31,64],around:[1,2,29,30,41,44,45,55,57,61,68,82,83,148],arrang:41,arrheniu:76,arriv:4,articl:[2,148],artifici:[74,151,152],arxiv:[41,70,71,149],ascend:19,ascii:[93,112,115,135],ash:[132,133],aside:[44,135],ask:[3,163],asoci:57,aspect:[2,118,146],aspher:0,asphere:[118,146],asq:[132,133],assign:[1,2,3,19,34,40,41,42,43,44,57,59,60,61,62,67,68,69,73,93,98,112,115,118,121,141,142,146,162],assignemnt:2,associ:[2,32,33,34,56,57,61,66,67,68,75,76,78,92,93,106,110,111,112,114,121,123,127,141,142,154],assum:[2,3,44,61,67,72,81,82,87,93,98,101,104,114,121,122,127,132,133,163],assume:93,assumpt:94,astar:135,astart:150,asterisk:[32,121,154],astop:[92,150],asu:112,asub:135,asymmetr:[63,98,112],asynchron:4,atc_fe_output:58,athomp:0,atm2pa:2,atom1:75,atom2:75,atom3:75,atom4:75,atom:[0,1],atom_element_map:58,atom_modifi:[3,93],atom_styl:[2,31,44,57,64,65,68,76,93,97,104,109,111,114,115,118,119,133,146,161],atom_weight:58,atomey:[2,3,57],atomfil:2,atomic:[0,148],atomic_charg:58,atomic_numb:145,atomist:[2,58,138],attach:[2,73],attatch:80,attempt:[2,19,59,60,93],attend:58,attrac:135,attract:[0,21,22,95,101,104,127,135,139,148,161],attribut:[2,3,32,57,60,61,62,68,69,98,114],atw:[132,133],atwater:157,atwt:135,atyp:[106,123,127,131],au1:43,au3:43,augment:[61,135],augt1:135,author:[112,113],auto:[2,3,35],autocorrel:35,autom:57,automat:[2,4,18,67,105,112,135,138,162,163],auxiliari:[1,2,3],avail:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,32,39,41,45,46,47,48,49,50,51,52,53,54,57,61,66,68,69,70,71,76,77,80,84,85,86,88,89,90,91,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,135,136,140,143,144,145,146,147,149,150,155,156,157,158,159,160,161,162],availabl:4,avalo:111,ave_chunk:2,aveforc:2,avendano:139,averag:[2,19,31,32,35,36,37,40,43,58,59,61,62,68,69,74,76,84,95,111,114,116,135,142],avi:57,avoid:[1,2,18,44,57,72,73,83,98,114,131,135,140],avx2:4,avx512:4,avx:4,awai:[2,57,60,72,82,106,123,127],awar:113,axel:163,axi:[2,19,29,36,40,43,44,57,59,81,88,91],axial:69,azimuth:57,b_k:149,ba2:43,babadi:146,back:[1,2,3,44,68,79,80,93,119],backbon:[60,77,90],background:[32,39,42,59,81,93,104,132,133,135],backtrack:92,backward:93,baczewski:66,bad:93,badli:[61,68],balanc:[1,2,4],ball:[41,132,133],bammann:58,band:[2,41,93,98,138,148],bandwidth:1,bandwith:57,bar:[32,57],barashev:112,barostat:[0,1],barostt:2,barr:105,barrier:[2,91,93,105,117],bartok2010:149,bartok2013:149,bartok:[41,149],base:[2,3,4,5,32,35,40,43,44,57,58,59,62,71,73,76,95,96,98,110,114,118,121,123,132,136,137,144,145,148,155,157,158,159,163],bashford:[2,5,45,102],basi:[2,41,44,82],basic:[2,19,42,57,58,59,62,68,72,83,94,138],basin:93,bask:[112,135,145],bath:74,bayli:[2,45],bb13:46,bcc:[29,30],bcolor:57,bdiam:57,be2:43,bead:[21,22,60,73,154],bear:[2,66],becaus:[0,1,2,4,19,36,38,41,44,57,59,60,61,62,66,68,70,74,81,83,86,92,93,102,106,108,110,114,115,118,119,120,121,122,131,132,133,135,141,142,146,154,163],becker:[94,112],becom:[1,2,4,19,28,44,57,59,60,63,67,68,82,83,93,95,104,106,112,114,118,123,145,146,155,159,161,163],been:[1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,32,39,45,46,47,48,49,50,51,52,53,54,57,59,60,61,62,67,68,69,74,77,81,82,84,85,86,88,89,90,91,92,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,136,137,138,140,143,144,146,147,150,154,155,156,157,158,159,160,161,162],befor:[1,2,13,19,33,34,37,44,59,61,67,68,74,82,92,93,115,116,119,131,135,138,142,163],begin:[58,59,62,65,76,93,112,116,138,141,142,145,148,150,154,162],begun:76,behav:[11,47,92],behavior:[57,60,61,62,66,68,74,81,98,114,135,162],behaviour:2,behind:74,believ:3,bellott:[2,5,45,102],bellow:88,below:[1,2,3,4,19,28,35,39,40,41,42,43,44,45,56,57,58,59,60,61,62,65,68,69,72,74,75,76,77,79,80,81,82,92,93,94,95,98,99,102,103,104,106,109,112,114,115,116,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,139,141,142,146,147,149,150,154,159,160,161,162,163],bench:[1,2,3],benchmark:[1,3,4,19,59],benedict:138,benefit:[1,4,66],bennet:32,berardi:[118,146],beraun:81,berendsen:[2,68,69,77],bern:[73,105,118,148],bernendsen:2,beryllium:114,best:[1,2,4,62,68,75,98,106,123,127],beta:[2,74,94,96,112,113,115,135,156,157,158],beta_:98,beta_k:149,beta_pi:98,beta_sigma:98,beta_t:157,better:[2,4,11,41,47,59,67,68,93,156,163],betwe:97,between:1,beutler:131,beyond:[2,32,68,117,129],bflag1:57,bflag2:57,bgq:138,bi3:43,bi5:43,bia:[2,39,42,68,71],bias:2,biersack:[135,158,162],big:[74,104,163],bin:[2,3,34,74],binari:[2,4,56,57,58,59,60,61,62,63,66,67,68,69,70,71,72,74,75,77,78,79,80,81,82,83,94,95,96,97,98,99,100,101,102,103,104,105,106,109,110,112,113,114,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],binary2txt:0,bind:[98,148],binsiz:4,biolog:2,biologi:50,biomolecul:102,biophi:[70,71],bios:4,bisect:[19,59],bisector:[2,106,123,127],bispectrum:[41,149],bit:[3,163],bitrat:57,bkgd_dyn:135,bks:74,blank:[57,65,76,93,98,113,116,135,141,142,143,149,155,156,157,158,159],blast:81,blend:135,block:[2,35,41,44,83,98,114,145,149,163],blow:[82,83,150],blue:[57,60],bluegen:138,board:109,bodi:0,body:97,bodyforc:67,bodyforcei:67,bodyforcex:67,bodyforcez:67,bogu:61,bohr:[112,114,138,158],boltzmann:[2,32,35,39,60,65,67,69,110],bond:[0,1,2,4,6,13,18,20,21,22,23,24,25,26,27,28,32,35,36,38,39,41,42,44,45,46,55,56,57],bond_coeff:[2,20,21,22,23,24,25,26,27,28],bond_harmon:[24,25],bond_harmonic_shift:25,bond_interact:58,bond_styl:[0,2],bondangl:6,bondbond13:46,bondbond:6,bonet:111,book:[161,163],bookmark:0,boost:1,border:[4,81],boresch:32,boreschkarplu:32,born:[2,32],boron:114,botero:114,both:[1,2,3,4,11,28,32,44,47,56,57,60,61,63,67,68,74,77,79,80,81,82,83,84,92,93,95,98,99,100,101,102,103,104,109,110,112,113,114,118,119,121,123,125,127,128,129,131,132,133,138,139,140,144,146,147,155,156,157,158,159],bottleneck:1,bottom:67,bound:[2,10,11,19,47,59,68,82,83,92,114],boundari:[2,33,34,35,37,39,40,42,43,44,57,58,61,67,68,72,74,78,81,82,83,120,132,133,138],boundary_dynam:58,boundary_faceset:58,boundary_integr:58,bounds:[2,19,59],bount:3,box:[0,1],boxcolor:57,boxxlo:3,bptype:154,br1:43,bracket:[2,19,59,62],bragg:[40,43],branch:[3,163],branicio2009:159,branicio:[30,159],breakdown:[1,95],brennan:[31,64,111,141,142,154],brenner:95,brick:[19,59],brief:[1,2,68,95,98],briefli:[2,73,105,148,163],brilliantov:119,broadwel:4,broken:[28,29,68,98],brook:2,brown:[4,40,42],brownian:[2,37,70,132,133],brows:0,browser:57,bryantsev:121,btype:[106,123,127,131,154],buc:100,buck:[2,4,32,99],buckingham:[99,100,101,108,134],buckplusattr:148,buffer:57,bufi:57,bug:0,bui:57,build:[0,1,2],built:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,31,32,37,39,40,41,43,45,46,47,48,49,50,51,52,53,54,55,56,60,63,64,65,66,67,68,69,70,71,72,73,74,76,77,79,80,81,84,85,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],bulatov:[136,137],bulk:[2,29,67,72,107,135,138,148],bundl:[57,163],button:163,bypass:2,c11:135,c_0:[81,95,152,153],c_1:[40,43,66],c_2:[40,43],c_cluster:2,c_cstherm:2,c_doubl:3,c_e:81,c_flux:35,c_gauss:117,c_hb:121,c_i:65,c_id:[2,32,62],c_ij:2,c_ijkl:2,c_k:66,c_mychunk:[2,34],c_n_k:66,c_p:42,c_peratom:42,c_pi:98,c_prop:2,c_sigma:98,c_size:2,c_thermo_temp:62,ca2:43,cach:4,cacul:77,calcforc:67,calclat:35,calcluat:[37,39,42,106],calcualt:35,calcul:[0,1],caldwel:[2,45],calhoun:73,call:[1,2,3,4,73,95,104,161,163],callabl:3,callback:3,caltech:[2,114],calucl:2,calul:[3,29],can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],cannot:[1,2,3,4,19,28,57,59,60,61,66,68,74,81,82,83,92,93,100,101,103,112,118,120,123,127,129,131,144,146,147,154],canon:[68,71,73,80,138],cao1:73,cao2:73,cao:73,capabl:[3,4,95,103],capac:[64,81,151],capolungo:[40,43],captur:[2,95,101,114,119,127,135],carbid:106,carbon:[57,90,95,105,135],card:[4,32,121],care:[2,44,55,67,68,97],carefulli:[3,28],carlo:[2,60],caro:112,carri:[4,81,119],carrillo:4,cartesian:[2,94],cascad:81,cat:[4,57],cate:67,categori:[0,95],cation:[115,148],caus:[1,2,4,44,61,68,72,76,77,82,83,92,93,121,123,129,132,133],caution:1,cautious:95,caveat:95,cbecker:[94,112],cc1:[2,34],ccc:[113,155,156,158,159],ccflag:4,ccflags:4,ccm6:112,ccsi:[113,155,156,158,159],ccu:98,cd2:43,cdeam:112,cdll:3,cdof:2,cdte:98,cdte_bop:98,cdtese:98,cdzn:98,cdznte:98,ce3:43,ce4:43,cell:[2,40,43,44,61,68,69,74,81,114,138],cella:2,cellalpha:2,cellb:2,cellbeta:2,cellc:2,cellgamma:2,center:[2,9,33,34,37,40,44,57,61,66,68,78,80,82,83,84,97,113,114,118,119,132,133,135,136,137,155,156,157,158,159],centr:63,central:[29,36,38,41,72,77,78,87,138,143,159],centro:2,centroid:73,centrosymmetri:29,certain:[1,2,57,60,62],cfg:[2,57],cg_type:147,ch2:77,ch2lmp:[0,2],ch3:77,chain:[0,2,13,28,60,68,69,71,73,77,80,90,109,110,154],challeng:2,champaign:132,chan:138,chandler:[94,112],chandrasekhar:[2,123],chang:[1,2,3,4,19,22,32,44,57,58,59,60,61,62,67,68,69,70,72,74,75,76,77,79,80,81,83,92,93,110,114,119,132,133,135,138,148,154,163],change_box:2,chapter:73,charact:[2,19,57,59,65,76,114,116,122,141,142,145,148],character:[2,29,38,41,149],characterist:79,charg:[1,2,3,32,40,43,44,99,100,105,106,108,109,112,114,115,123,127,131,144,148,158,159,161,162],charl:62,charmm:0,cheaper:[118,146],check:[2,3,19,35,59,75,77,80,92,93,122],checkout:163,chem:[2,5,6,9,20,21,22,32,38,39,42,45,46,53,63,66,67,68,73,74,79,80,82,84,90,91,93,95,99,102,103,105,106,107,109,110,111,114,117,118,120,121,123,127,128,131,135,139,141,142,144,148,154],chemic:[31,40,43,58,116,142],chemistri:[74,95,98,114],chen:81,cheng:105,chi:[72,115,118],chiral:90,chmod:3,cho:135,choic:[2,4,19,28,29,32,42,55,59,60,67,68,73,93,131],choos:[1,2,13,28,32,57,60,61,62,67,68,69],chose:[156,158],chosen:[2,41,44,50,57,61,62,66,67,68,69,73,111,114,119,122,125,147,156],chunk:0,chunkid:34,ciccotti:77,cieplak:[2,45],circular:2,circumv:[36,38],citat:[0,67],cite:148,cl1:43,clarendon:[13,109],clarifi:[156,158],clark:144,classic:[0,2,4,73,74,81,91,114],classifi:159,clean:2,clear:[2,3,62],clebsch:41,click:[3,44,56,57,93,163],climb:93,clockwis:45,clone:163,close:[2,3,19,42,60,61,67,68,70,77,83,93,95,98,106,107,135,141,142,158,163],closer:[19,59,61,79,93],closest:[72,118,146,154],cloud:148,cluster:[2,4,42,63,77],cmax:135,cmd:[3,73],cmdarg:3,cmin:135,cmm:[18,147],cna:29,co2:[43,76,77,116],coars:[13,18,28,50,65,76,116,120,142,147],coarsest:41,code:[0,1],coeff:[6,45,46,55,84,122,150],coeffici:0,coefficienct:110,coefficient0:112,coefficient1:112,coeffieci:[2,96],coeffincientn:112,coexist:114,cohes:[2,115,135],coincid:[83,102,132,133],cold:2,coleman:[40,43],collect:[2,34,44,104],colliex:43,collis:[67,119,162],colloid:2,color:[19,57,59,66,74],column:[2,29,34,36,38,41,42,43,74,81,95,117,121],colvar:0,com:[2,37,63,97,163],comand:60,combiant:107,combin:[2,3,18,32,55,57,58,63,68,70,71,73,83,84,104,106,107,111,114,115,116,130,131,149,155,156,158,159,161],come:[0,2,13,61,62,68,79,80,155,156,158,159,163],comit:163,comm:[0,3,30,93,110],comm_modifi:[2,98,104,110,114,119],comm_styl:[19,59],comm_world:3,command:[0,1],comment:[3,45,65,76,81,93,94,112,113,115,116,122,135,141,142,143,148,149,155,156,157,158,159,163],commit:163,commmand:2,common:[0,1,2,3,4,30,61,73,83,84,119,121,155,156,158],commonli:[2,9,37,38,57,91,120,125,149,156,158],commun:[1,2,3,4,19,57,59,61,67,68,81,111],comp:[70,71,77,93,114,146,153,157],compar:[1,2,4,40,43,56,92,93,135,148],comparison:0,compass:[6,20,46,56,84,103],compat:[3,19,49,59,62,63,82,138],compens:[2,114],compil:[4,57,138],complain:3,complement:135,complementari:[106,123],complet:[2,3,19,59,73,93,115],complex:[2,3,9,36,38,41,44,67,70,83,93,114,138],complic:2,compon:[2,29,30,33,34,35,36,37,38,39,41,42,57,60,61,62,63,67,68,69,73,77,83,92,93,110,114,119,132,133,148,149],componenet:2,composit:[2,67,112],compound:[105,114,115,159],compress:[2,57,69,74],compris:[83,116,146],compton:[40,43],comput:[0,1],computation:[2,81,98],compute_modifi:[60,61,68,69],compute_sa:40,compute_xrd:43,concav:83,concentr:[65,76,112,116,142],concept:2,conceptu:[2,61,93,106,135],concern:[2,30,32,66],concis:3,concurr:4,conden:[81,156,158],condens:[2,81,95,108,112,123,159],condit:[2,39,40,42,43,57,58,67,69,72,74,77,78,81,111,114,120],conducit:2,conduct:0,confer:[4,138],configur:[1,2,4,57,61,73,92,93,95,98,113,135,138,155,156,158,159,163],conflict:163,conform:[2,60,61,75,90,93,114],confus:159,conjuct:110,conjug:114,conjunct:[2,32,44,67,93,99,100,106,110,114,121,123,144,147],connect:[2,32,60,77,93,107,119,154,158],conner:95,connor:95,consecut:[3,44,106,123,127],consequ:[1,2,81,122],conserv:[13,60,66,67,68,70,76,77,93,109,110,111,119,129,148],consid:[2,29,32,59,60,81,114,146,148,154],consider:2,consist:[2,3,39,44,50,62,66,68,69,74,75,76,93,95,98,104,106,114,118,132,133,135,138,141,142,146,148],consistent_fe_initi:58,constant:0,constantli:63,constitu:[2,82,83,104,146],constrain:[2,63,66,70,71,77,78,92,114],constraint:[19,39,42,59,63,70,77,78,82,92,133],construct:[2,28,29,30,36,38,40,41,43,61,68,75,76,83,109,138,154,155],constructor:3,consult:4,consum:1,contact:[0,107,113,115,118,119,146],contain:[0,1,2,3,19,32,35,40,41,43,44,45,56,57,58,59,62,65,67,72,74,76,81,83,93,94,95,98,105,106,109,112,113,114,116,135,138,141,142,143,145,149,155,156,157,158,159,163],context:[2,4,161],contibut:29,contin:4,continu:[0,2,19,59,60,61,62,63,66,68,69,74,79,80,81,83,98,110,125,128,146,157],continuum:[2,58,81],contour_integr:58,contract:[61,68],contrain:77,contrast:[1,2,161],contrib:81,contribut:[2,29,32,33,34,35,39,41,42,61,67,77,92,93,110,112,114,132,133,138,148,163],control:[2,3,4,11,13,19,32,35,41,47,57,58,59,61],control_typ:58,convect:35,conveni:[2,13,149,163],convent:[13,49,54,56,75,112,114],converg:[2,19,57,59,60,61,69,70,71,74,75,77,92,93,105,106,123,148],convers:[41,57,106,107,108,114,123,127,131,144],convert:[2,5,6,8,12,16,17,18,35,44,46,57,84,85,89,90,93,94,112,138,156,158,162],convex:83,cool:63,coord:[2,3,36,38,72,82,93],coordb:148,coordbb:148,coordiat:92,coordin:[1,2,3,19,32,33,34,41,44,57,59,60,61,63,68,72,77,78,80,81,92,93,94,95,97,113,148],coords:148,copi:[0,3,57,81,93,163],copper:162,coprocessor:[1,4],core:[0,1],coreshel:2,coreshell:[2,100,106,108],cornel:[2,45],corner:[2,57,83,163],corpor:4,corr:105,correct:[2,3,32,45,57,63,68,74,82,83,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],correction_max_iter:58,correctli:[3,68,77,83,93,108,133,138,163],correl:[2,35,36,41,66,73],correpond:65,correspond:[1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,32,39,40,41,43,45,46,47,48,49,50,51,52,53,54,55,57,61,62,63,65,67,68,69,72,73,76,77,82,83,84,85,86,88,89,90,91,93,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,135,136,138,140,142,143,144,145,146,147,148,149,150,155,156,157,158,159,160,161,162],correspondingli:[132,133],cosin:2,cosineshift:11,cost:[1,2,3,19,40,42,43,57,59,68,76,81,106,123,127,138,155],costheta0:[155,156,158,159],costheta:145,costli:[3,4],coul:[2,4,18,21,22,32,45,92],could:[2,3,19,32,34,35,39,57,59,62,74,81,82,83,92,95,117,121],coulomb:[2,42,92,99,100,101,102,103,105,106,107,108,109,114,119,120,123,127,131,134,144,147,148,158,159,161],coulommb:2,count:[1,2,3,19,35,45,59,61,68,77,83,92,93,117,121],counteract:62,counterbal:63,counterbalanc:13,counterclockwis:45,coupl:0,couple:[2,3],cours:[4,66,75,82,132,150],cov:148,coval:[2,13,114,135,148],cover:[2,58,67,114],cpp:[1,2,3,32,77],cpu:[1,4],cpuinfo:4,cr2:43,cr3:43,creat:[0,1,2,3,19,35,39,40,44,57,58,59,60,61,65,68,69,72,73,75,81,93,95,98,105,112,113,131,140,141,142,145,148,155,156,157,158,159,163],create_atom:[2,19,35],create_box:[2,19,35,44,61,68,154],create_elementset:58,create_faceset:58,create_nodeset:58,createatom:0,creation:44,criteria:[57,60,92],criterion:[19,44,59,60,92,93,105,114,119,148],critic:[2,24,25,81,92],cross:[4,33,57,93,102,110,112,120,121,123,125,127,145,147,156,158,162],crossov:1,crozier:0,crucial:74,crystal:[2,4,29,30,38,72,80],crystallin:[2,157],crystallogr:[40,43],crystallographi:[40,43],cs1:43,cs_chunk:2,csanyi:[41,149],cscl:135,csequ:2,csh:[3,4],cshrc:3,csic:[113,155,156,158,159],csinfo:2,csisi:[113,155,156,158,159],cst:112,cstherm:2,csvr:2,ctcm:[94,112],ctype:3,cu1:43,cu2:43,cu3au:135,cube:[2,83],cubes:[19,59],cubic:[38,67,72,112],cuda:1,cuh:98,cummul:[2,60,121],cumul:[2,68,69,93],currenlti:62,current:[0,1,2,3,4,19,30,32,42,57,58,59,60,61,62,63,68,70,71,75,76,77,78,81,82,92,93,98,105,109,112,114,115,119,122,132,133,135,136,137,145,150,156,158,163],curv:[2,44,70,71],curvatur:[118,146,162],custom:[0,2,3,33,34,35,42,57,60,61,68,69,74,92,95,117,121],cut:[1,2,4,19],cuthi:72,cutinn:[132,133],cutlo:72,cutmax:145,cutoff1:[103,109,123,127,131,134,144,147],cutoff2:[99,100,101,103,108,109,123,127,131,134,144,147],cutoff:[2,4,21,22,28,29,30,32,36,38,41,60,65,72,74,82,83,92,94,95,96,97,98,99,100,101,102,103,104,106,107,108,109,110,111,112,113,114,115,116,117,118,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],cutoffa:113,cutoffc:113,cuu3:112,cval:43,cvar:62,cvff:4,cwiggl:82,cyan:57,cycl:[68,69],cyclic:45,cylind:[57,71,83],cylindr:2,cyrot:98,d3q15:67,d3q19:67,d_e:81,daan:80,damp:[2,68,69,71,74,92,93,99,100,102,106,109,114,119,123,131,144,147],dampflag:119,danger:110,darden:109,darken:57,dash:119,dat:[2,35,58],data2xmovi:0,data:1,databas:0,date:[0,2],datum:2,davenport:134,davi:82,david:[156,158],daw:[112,145],dcd:[2,57,73],deactiv:131,debug:[2,3,40,43,44,73],decai:[36,106,162],decid:[2,4,163],decod:57,decompos:[32,149],decomposit:[58,73],decoupl:2,decreas:[4,60,63],dedic:4,defect:[2,29,138],defin:[2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,69,72,73,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,95,96,97,99,100,101,102,103,104,106,107,109,110,111,113,114,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,138,139,140,141,142,143,144,145,146,147,149,150,151,152,153,154,155,156,157,158,159,160,161,162],definit:[2,41,62,64,69,82,98,104,111,114,145,149],deform:[2,42,61,68,132,133],deg2theta:43,degre:[2,5,6,8,12,13,16,17,18,36,38,39,43,44,45,46,48,49,54,55,57,60,68,69,73,75,77,80,84,85,89,90,91,92,109,112,121],delai:2,delet:[28,60,68,154,163],delete_atom:44,delete_bond:[20,21,22,23,24,25,26,27,28],delete_el:58,delimit:76,dellago:[2,63],deloc:[114,148],delr:135,delta_1:98,delta_3:98,delta_7:98,delta_ij:[135,145],delta_pi:98,delta_r:145,delta_sigma:98,deltah_f:65,demo:3,demonstr:[74,135],dendrim:121,denniston:67,denot:[40,63,106,120],dens:[60,76,114],densiti:[2,19,41,44,58,59,67,81,82,94,95,98,112,135,136,137,141,142,145,146,148,151,152,153],depart:0,departur:74,depend:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,36,39,41,44,45,46,47,48,49,50,51,52,53,54,56,57,59,61,65,67,68,69,72,76,77,79,81,82,83,84,85,86,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,155,156,157,158,159,160,161,162],dependend:2,deposit:[68,77],depth:[26,57,81,116,118,146],der:[32,104,105,131,161],deriv:[2,32,41,61,62,63,68,69,72,79,80,81,82,83,95,98,104,109,114,115,120,125,129,130,135,138,161],derjagin:161,derlet:72,descib:57,describ:[0,1,2,3,4,19,29,30,40,41,42,43,44,50,53,59,60,61,62,65,66,67,68,69,72,73,74,76,79,80,82,92,93,95,97,99,100,102,103,104,105,106,109,112,114,115,116,118,119,120,123,124,125,126,127,128,129,130,131,132,133,134,135,138,139,141,142,145,146,147,148,149,150,154,155,156,157,158,159,160,161,162,163],descript:[2,3],descriptor:41,design:[0,2,3,40,43,58,60,68,72,81,96,97,102,106,108,114,131,132,133,136,137,145],desir:[2,3,4,35,39,42,44,61,62,66,68,77,92,93,110,112,121,132,133,155,156,158],desktop:[2,57],destabil:98,destre:90,destroi:3,detail:[1,2,3,4,19,34,35,39,41,42,44,56,57,58,59,60,61,62,63,66,67,68,69,74,77,80,81,92,94,95,97,98,101,102,103,104,105,106,109,110,114,115,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,139,141,142,146,148,149,150,160,161,163],detect:[36,93,105,121,122],determin:[1,2,4,26,32,39,40,42,43,44,57,59,61,65,68,72,73,74,75,76,82,83,95,101,105,109,112,116,117,119,127,135,138,142,146,148,154,161],devan:147,devanathan:158,develop:[0,2,3,4,62,69,74,95,98,114,137,138,148,159],deviat:[69,72,117],devic:1,devin:105,devis:137,dfactor:57,dft:138,dhug:74,dhugoniot:74,dia:135,diag:76,diagnost:[4,60,76],diagon:[2,41,42,61,68],diagonalstyl:149,diagram:[19,40,43,56,59,73],diallo:121,diam:57,diamet:[2,44,57,104,118,119,125,146,161],diamond:[114,135],dick:2,dicken:62,did:[92,110,112,119,156,158],dielectr:[102,106,107,108,123,127,131,144],diff:[2,4],differ:[1,2,3,4,19,28,29,32,36,41,44,56,57,59,60,61,62,63,66,67,68,72,73,74,77,78,79,80,81,82,83,84,93,94,95,98,101,102,104,105,110,111,112,114,116,118,119,120,123,124,126,127,134,135,136,137,139,140,141,142,143,145,146,147,148,149,150,155,156,158,159,161],differenti:[1,2,13,76,106,145,157],difficult:[61,62,73,121],difficulti:[36,38,77],diffract:[40,43],diffraction:[40,43],diffus:0,diffuse:2,digit:138,dihedr:[0,4,28,36,38,39,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,60,75,85,86,87,89,92,95,98,102],dihedral_coeff:[45,46,47,48,49,50,51,52,53,54,55,56],dihedral_cosine_shift_exp:11,dihedral_styl:[0,2,42],dihydrid:114,dij:77,dilat:[61,68,69],dim:[44,135],dimens:[1,2,19,35,42,44,57,59,61,67,68,69,74,82,93],dimension:[36,39,40,41,43,81,93,145],dimensionless:[37,41,62,81,149,161],dimer:[2,135],dimstr:[19,59],dintel_offload_noaffinity:4,dipol:0,dipolar:13,dipole:109,dir:[1,3,72,74,145],dirac:41,direc:145,direct:[2,4,13,29,38,40,41,43,44,45,57,67,69,72,74,79,80,81,82,83,92,93,110,111,119,133],directli:[2,3,32,41,44,57,62,67,76,83,94,95,99,100,101,106,109,112,114,123,127,144,147,154],directori:[0,1,2,3,4,62,79,80,93,94,95,98,105,106,112,113,115,131,135,136,137,138,143,145,148,149,155,156,157,158,159],disabl:[4,81,122],disadvantag:[2,59],disallow:68,discard:[19,59,83],discontinu:[92,129],discourag:135,discret:[2,57,62,67,71],discuss:[0,1],disk:[2,36],disloc:[29,138],disord:[29,138],disp:0,dispar:146,disperion:[109,127],dispers:[2,101,109,127,132,159],displac:[2,37,61,68,72,119],displai:[3,56,57],disregard:138,dissip:[2,31,64,66,79,80,110,111,119,132,133],dist:[2,35,73,75,154],distanc:[2,5,6,20,21,22,23,24,25,26,27,28,30,33,34,36,37,38,40,41,44,46,57,60,61,63,67,68,69,72,74,75,77,78,80,81,82,83,84],distinct:[2,146],distinguish:[2,41,114],distort:94,distrbut:94,distribut:[0,2,3,19,32,41,56,59,66,67,68,94,98,106,112,113,115,135,136,137,143,145,146,155,156,157,158,159],distro:145,ditto:162,div:4,diverg:[80,95],divid:[2,4,19,35,39,42,56,59,72,92,93,115,148,159],divis:[2,55,67,98,131],dl_poly:2,dlammps_ffmpeg:57,dlammps_gzip:57,dlammps_jpeg:57,dlammps_memalign:4,dlammps_png:57,dlm:68,dlmp_intel_offload:4,dlopen:2,dlvo:[104,161],dm_lb:67,doc:[0,1,2,3,32,34,37,39,42,44,56,57,62,68,83,92,93,94,95,97,105,106,112,113,115,121,135,136,137,143,145,149,155,156,158,159,163],docuement:146,doe:[0,1,2,3,19,28,29,32,35,40,43,44,45,56,57,58,59,60,61,62,63,65,66,67,68,71,81,82,83,85,86,87,89,90,93,94,95,96,97,98,101,102,103,104,105,106,107,109,110,112,113,114,116,117,118,119,120,122,125,126,128,129,130,132,133,135,136,137,138,141,142,145,146,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],doesn:[44,95,105,113,155,156,157,158,159],dof:39,doi:[2,72],domain:[2,19,40,43,57,59,61,67,68,73,81,82,93],domin:[1,114],don:[0,4,83,135,148,163],done:[1,2,19,44,55,57,58,59,60,61,62,65,68,73,77,79,80,92,93,95,101,112,127,133,134,135,141,142,154,163],donor:121,dot:42,doti:[98,145],doubl:[1,2,3,4,32,45,61,83,98,115,120,138],dover:58,down:[2,3,61,114,148],download:3,downsid:2,dpd:2,dpdtheta:[31,111],dpdtheta_i:[64,65],dr_ewald:40,drag:[2,35,68,69,78],dragforc:67,drai:[57,74],drain:92,dramat:[60,61,68,148],drautz:98,draw:57,drawn:[57,66],drayleigh:74,dreid:2,dreiding:0,drfourth:37,drho:[94,112,141,142],drift:[2,37,63,66],drive:[3,61,68,72,93],driven:[2,50],driver:2,drop:110,drsquar:37,drude:0,dt_collis:67,dt_lb:67,dt_md:67,dtqm:74,dudarev:43,due:[1,2,4,28,29,33,34,37,40,41,42,43,44,57,60,61,66,67,68,69,72,75,79,80,81,82,83,92,93,107,110,111,112,117,118,132,133,145,146,147,154,156,158,161,162],duffi:81,dullweb:68,dummi:[13,157],dump:[0,1],dump_modifi:[2,57],dunbrack:[2,5,45,102],duplic:[19,59,72],durat:[56,81,119],dure:[2,4,19,32,45,58,59,60,61,62,63,65,66,67,68,69,70,71,72,73,74,75,77,78,79,80,81,82,83,92,93,110,131,138,140,141,142],dvlo:161,dvx:2,dx_lb:67,dy3:43,dyanam:2,dynam:[0,2,3,4,19,31,37,44,57,58,59,60,62,64,66,68,69,70,73,74,75,79,80,81,92,93,110,111,114,132,133,153],dynamo:[94,112,135],dyre:128,e28637:13,e_1:98,e_2:98,e_a:76,e_b:115,e_ee:114,e_hbond:121,e_i:[2,98,115],e_j:[2,98],e_k:98,e_ke:114,e_kl:2,e_lj:[95,109],e_n:[62,98],e_ne:114,e_nn:114,e_pr:114,e_rebo:95,e_torsion:95,e_tot:138,e_vol:138,eaa:84,eaat:46,each:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,65,66,67,68,69,70,72,73,76,77,78,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,158,159,160,161,162],eacn:[19,59],eam:[0,94,106],earli:[19,59],earlier:[93,119,135],earth:114,easi:[2,3,32,42,82],easier:[4,57],easili:[3,57,93],eat:46,eaxmpl:2,eba:6,ebb13:46,ebb:6,ebt:46,ec_ii:135,ec_ij:135,ec_jj:135,echo:[3,40,43],ecp:114,edg:[2,19,40,43,57,82,83],edge:82,edit:[4,163],edition:4,edu:[3,112,132],eebt:46,eff:0,effect:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,33,34,37,39,42,45,46,47,48,49,50,51,52,53,54,56,57,58,60,61,63,66,68,69,72,73,74,75,77,80,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,98,99,100,101,102,103,104,105,106,109,110,112,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,138,140,141,142,143,144,146,147,148,150,155,156,157,158,159,160,161,162],effici:[0,1,2,4,39,55,57,61,68,73,77,98,104,106,123,127,138,141,142,146],efficienc:4,efield:[77,92],eggebrecht:[106,148],ehex:2,eigenvalu:73,einstein:[2,80],either:[1,2,3,4,19,29,40,41,42,43,44,57,59,60,61,62,63,67,68,69,72,76,77,83,92,98,104,112,116,119,132,133,135,138,142,145,154,156,158],ejtehadi:[104,118,146],elaps:[82,150],elast:[2,21,22,93,119,157],elastic:0,elba:13,electr:[2,58,115,162],electric:4,electrolyt:161,electron:[2,40,58,81,94,105,109,112,114,115,135,138,145,148,158,159,162],electron_integr:58,electron_temperatur:58,electron_unit:114,electroneg:[2,105,115,148],electroneg_compon:148,electrostat:[2,4,104,109,114,123,131,133,148,161],elem1:[115,135,149],elem2:[115,135,149],elem:148,element1:[94,112,148],element2:[94,112,148],element:[2,33,37,39,41,42,57,58,94,95,98,105,112,113,114,115,135,136,137,138,143,145,148,149,155,156,157,158,159],elementn:[94,112],elementset:58,elif:41,elig:121,elimin:[2,66,77,79,80],elj:109,ellips:2,ellipsoid:[2,44,70,92,118,133,146],els:[57,62,68,81],elsewher:135,elt:135,emac:0,email:[0,3,115],emb:83,emb_lin_neg:135,embed:[3,13,81,94,112,115,131,135,136,137,145],embt:46,emin:61,emphas:119,empir:[58,114],empiric:95,emploi:[63,157],empti:122,enabl:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,31,32,37,39,40,41,43,45,46,47,48,49,50,51,52,53,54,56,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,79,80,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],enclos:[2,135,148],encod:57,encompass:2,encount:38,encourag:[76,78],end:[1,2,3,4,19,46,57,60,61,63,66,68,71,75,76,81,93,110,112,118,134,138,146,149,150],endbondtors:46,energet:[60,95],energi:[0,1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,31,32,35,39,42,44,45,46,47,48,49,50,51,52,53,54,55,56,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110],energy_compon:148,enforc:[2,57,60,68,77,123],enforce2d:[2,92],eng:[3,105,137],engineer:[58,79,112],enginer:136,enhanc:[58,63],enlarg:57,enough:[44,59,74,82,83,106],enpub:112,ensembl:[2,32,35,68,71,73,74,110,148],ensight:2,ensur:[2,41,61,66,68,98,131,155,159],enter:[115,138,159],enthalpi:[76,112],entir:[0,2,3,19,31,39,40,42,43,44,59,60,63,66,68,69,72,73,76,78,81,109,127],entiti:2,entri:[40,65,74,98,113,135,141,142,143,149,155,156,157,158,159],entry1:[141,142],enumuer:2,environ:[1,2,3,4,57,72,94,98,105,113,114,145,156],eos:65,epair:[95,117,121],epp:109,epq:109,eps0:161,eps14:131,epsilon0:158,epsilon:[2,18,21,22,27,28,32,45,82,83,92,97,102,103,104,106,107,108,109,116,118,120,121,122,123,124,125,126,127,128,129,130,131,134,139,144,146,147,155,160,161],epsilon_0:162,epsilon_14:102,epsilon_:146,epsilon_d:107,epsilon_i:[118,146],epsilon_i_:146,epsilon_i_a:[118,146],epsilon_i_b:[118,146],epsilon_i_c:[118,146],epsilon_j:[118,146],epsilon_j_:146,epsilon_j_a:[118,146],epsilon_j_b:[118,146],epsilon_j_c:[118,146],epsilon_lj:146,eqp:109,eqq:109,equal:[2,3,19,28,32,35,42,44,57,59,61,62,66,67,69,70,72,73,74,75,76,79,80,81,82,92,93,95,105,110,111,117,118,121,132,138,139,145,146,148,149,150,159,162],equat:[2,35,38,39,40,43,56,61,62,63,64,65,67,68,69,72,73,74,76,77,81,82,104,109,110,111,114,115,116,119,132,133,135,142,146,151,152,153,162],equation:[72,90],equilibr:[2,35,44,60,61,68,74,79,80,105,106],equilibrium:[1,2,6,8,10,11,12,13,16,17,18,20,23,24,25,26,27,46,47,61,66,67,68,69,74,75,77,80,84,85,89,90,105,135,143,148],equilibrium_start:58,equival:[2,13,61,68,75,95,110,114,148,156,158],equlibrium:2,er3:43,eradiu:114,eras:79,erat:133,erc:106,erfc:[106,123],erhart:[112,156,158],eros:135,erose_form:135,erot:2,errata:[156,158],erratum:82,error:[0,1,2,3,11,47,57,61,62,63,65,68,70,76,81,82,83,92,106,123,146,154,156,158],erta:119,especi:[4,44,59,74,75],essenti:[3,11,47,95,106,123,158],essential:69,essex:13,establish:32,estim:[1,2,19,29,35,42,58,59,76],esub:135,eta:[2,67,68,74,113,115,118,145,157,159],eta_dot:68,eta_ij:145,eta_ji:115,etap:68,etap_dot:68,etc:[1,2,3,4,28,33,34,35,42,44,57,58,66,68,81,83,92,93,112,113,131,133,138,155,156,158,159],etol:[92,93],etot0:74,etot:[2,42,74],eu2:43,eu3:43,euler:[76,92,93],eulerian:58,europhi:67,evalu:[3,32,35,41,44,45,57,58,62,66,76,82,92,138,141,142,145,148],evanseck:[2,5,45,102],evaul:92,even:[2,4,19,29,55,59,61,63,68,81,82,83,92,93,97,114,115,119,146,159],evenli:[19,42,59,67],event:[2,68,81],eventu:2,ever:28,everaer:[104,118,146],everi:[0,1,2,3,4,19,35,57,58,59,60,61,62,63,67,68,69,70,71,72,74,76,77,81,93,110,131,148,163],everyth:163,everywher:125,eviri:114,evolut:[63,67,73],evolv:[67,73],ewald:[2,40,42,92,99,100,101,106,109,114,123,127,144,147],ewald_disp:109,exact:[19,59,60,66,81],exactli:[2,19,35,44,59,66,74,110,112,119,132,141,142],examin:[2,60,76],exampl:[0,1],exce:[2,4,19,59,61,68,92],exceed:[19,59,68],excel:114,except:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,33,34,39,42,44,45,46,47,48,49,50,51,52,53,54,56,59,61,68,69,73,77,81,84,85,86,88,89,90,91,93,94,95,96,99,100,101,102,103,104,105,106,108,109,110,112,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,136,140,143,144,146,147,150,155,156,157,158,159,160,161,162],excess:114,exchang:[2,58,63,81,114],excit:114,excite:114,exclud:[2,4,39,41,92,119,132,133,154],exclus:[1,4,32,45,105,138],excurs:68,execut:[1,2,3,57],exempl:148,exemplari:66,exemplifi:114,exert:[2,70,83],exhaust:58,exhibit:[36,63,68,114],exist:[2,3,29,44,56,57,61,84,85,86,87,89,111,154,163],exit:[3,19,59],expans:[41,55],expect:[1,4,19,59,72,74,135,138],expens:[2,72,81],experi:[2,75,93,110],experienc:[2,4],explain:[1,2,3,19,30,57,59,61,68,70,72,93,97,112,148,150,163],explan:[2,41,72],explic:139,explicit:[2,3,32,76,95,98,102,112,114,122,132,163],explicitli:[2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,44,45,46,47,48,49,50,51,52,53,54,61,66,68,69,74,77,81,84,85,86,88,89,90,91,94,95,96,99,100,101,102,103,104,105,106,107,109,110,112,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,136,138,140,141,142,143,144,146,147,150,151,152,153,155,156,157,158,159,160,161,162,163],explictli:4,exploit:73,explor:[40,43],expon:[76,112,116,118,121,131,139,147],exponenti:[32,76,116,145,155,159,162],expos:3,exposit:[58,110],express:[2,41,44,61,72,76,81,98,112,114,125,135,148,149],expressiont:98,extend:[0,2],extens:[2,4,21,22,27,32,35,62,63,68,69,72,75,79,80,81,82,83,118,135,138,146,149],extent:[1,19,21,59,95],exterior:[2,83],extern:[32,57,61,66,67,68,69,71,81,92,136,137],extra:[2,3,4,19,22,39,40,42,43,44,59,68,74,92,109,119,135],extract:[2,3,18,32,93,106,115,135,149],extract_atom:3,extract_comput:3,extract_fix:3,extract_glob:3,extract_vari:3,extrapol:1,extrem:[1,2,57,61,68,80,114,157],extrema:131,extreme:114,extrins:58,f_1:[2,61],f_a:[156,157,158],f_c:157,f_f:158,f_fix_id:74,f_harm:80,f_i:[13,145],f_id:[2,62],f_ij:145,f_int:79,f_j:13,f_jj:35,f_k:145,f_langevin:81,f_max:74,f_r:[156,157,158],f_sigma:98,f_solid:80,f_ss:2,face:[2,82,83,118,135,146],facil:0,facilit:2,fact:[2,4,80,119,148],factor:[1,2,8,12,16,17,18,19,22,23,32,35,40,41,43,45,53,57,59,61,63,67,68,69,73,75,76,77,82,83,89,95,98,99,100,102,106,107,108,110,111,114,119,122,123,135,138,141,142,143,144,147,150,155],fail:[3,61,92,93,108],fairli:[3,163],faken:30,fall:2,fals:148,famili:159,familiar:[0,3,163],fan:145,far:[2,59,61,68,72,75,82,85,89,93],farrel:[156,158],fashion:[2,19,44,59,62,68,69,74,80,81,82,93,132],fast:[2,4,62,74,76,132,133,138],faster:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,37,39,45,46,47,48,49,50,51,52,53,54,59,68,69,77,79,81,84,85,86,88,89,90,91,94,95,96,98,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,140,143,144,146,147,150,155,156,157,158,159,160,161,162],fastest:[1,2,81],fault:29,fava:118,favor:60,fcc:[2,29,30,35,38],fcold:63,fdt:[64,65,76],fdti:32,fe2:43,fe3:43,fe_md_boundari:58,featur:[0,2,3,41,57,60,66,73,83,92,163],fecr:112,feedback:62,feel:[72,83,93],fehlberg:76,felling:137,felt:83,fene:[2,4],fennel:[106,123],fep:0,ferguson:[2,45],fermi:[1,158],fermion:114,fernando:134,few:[1,2,3,63,68,77,92,93,95,148],fewer:[1,3,4],feynman:73,ffield:[105,115,148],fflag1:57,fflag2:57,ffmpeg:57,ffplai:57,fft:[1,3,42],fhot:63,ficiti:154,fictiti:[2,73,75,106,123,127,154],field:0,fifth:[2,116,143],figshar:72,figur:[1,4,74,163],fij:109,file0:72,file1:[3,65,72],file2:[3,65],file:[0,1],filenam:[4,19,57,58,59,65,72,76,81,93,94,95,98,106,112,113,115,116,135,136,137,141,142,143,145,148,149,155,156,157,158,159],fill:[44,57,81,98,138,163],filter:58,finchham:[2,108],find:[0,2,3,4,30,32,60,61,62,65,72,75,92,93,106,123,127,135,141,142,148,163],fine:[4,80,163],finer:[41,44],finger:44,finish:[2,3,19,59],finit:0,finni:112,fire:[92,93],first:[0,1,2,3,4,6,19,21,22,28,29,35,37,38,39,42,43,46,57,59,60,62,65,66,67,68,72,73,74,77,78,79,80,81,84,92,93,94,95,97,98,99,100,102,105,106,112,114,115,116,119,120,122,123,127,132,133,135,137,138,141,142,143,145,148,149,154,155,156,157,158,159,162,163],fischer:[2,5,45,102],fit:[2,75,95,98,135,141,142,157,163],five:[30,74,98,136],fix:[0,1],fix_flux:58,fix_heat:63,fix_id:[61,68,69,74],fix_manifoldforc:163,fix_modifi:2,fix_nv:163,fix_rattl:77,fix_shak:77,fixedpoint:[61,68],fixid:[57,58],fji:109,flag:[3,4,33,34,40,43,57,60,95,121,122,135,138,154,163],flag_buck:101,flag_coul:[101,109,127],flag_lj:[109,127],flagfld:[132,133],flaghi:[132,133],flaglog:[132,133],flagvf:[132,133],flat:[2,4,81,82],fld:[82,132,133],flexibl:[2,57,114,157],flip:[2,68],fluctuat:[2,32,61,66,67,68,69,72,80,81,90,111],fluid:[2,61],flux:2,flv:57,fly:[19,57,58,77,98,138],fmass:73,fmax:92,fmsec:68,fno:4,fnorm:92,fnve:63,focu:77,foil:[41,72,149],fold:[4,78],follow:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,35,36,38,41,42,44,45,47,48,49,50,51,52,53,54,55,57,58,59,62,64,65,66,67,68,69,73,74,75,76,77,79,80,81,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],foo:[3,57,76],foo_species:76,foot:2,forc:[0,1],forcefield:[75,121],forcegroup:67,ford:109,forgiv:68,fork:163,form:[2,28,32,33,34,36,41,42,62,66,75,76,81,82,83,84,87,90,93,95,98,111,112,114,117,121,122,134,135,137,138,141,142,143,144,145,146,148,149,150,156,157,158,161],formal:[2,35,66,68,73,148],format:[2,19,57,59,65,76,81,93,94,95,98,112,115,116,122,135,137,141,142,147,149,159],formation:65,former:[2,19,59,81,98],formul:[1,2,42,68,75,77,95,98,112,114,118,135],formula:[2,6,28,29,30,32,33,34,35,39,40,42,43,46,56,62,72,78,82,84,86,95,97,98,102,103,104,109,110,112,113,118,119,120,121,122,123,125,126,127,129,130,132,133,135,139,140,146,147,150,155,156,157,158,159,160,161],forth:[1,2,3],fortran:[2,3,112,135],forward:[32,93],foster:[98,145],found:[2,30,60,63,67,106,109],four:[2,3,28,41,62,81,90,93,138],fourier:2,fourth:[2,4,37,75,102,116,143,148],fox:[2,40,45,153],fqq:109,fraction:[1,2,4,19,42,57,60,61,74,76,93,98,116,119,132,133],frame:[41,58,74,118],framer:57,framework:[94,149],frattl:63,free:[2,13,29,32,72,79,80,81,93,114,131,138,140,145,161],freedom:[2,39,60,68,69,73,77,80,92,109],freeli:[0,2,57],freez:2,frenkel:[2,63,80],frequenc:[2,4,73,74,76,110,114,148],frequent:[29,30,36,38,41,63],fri:74,friction:[2,74,81,119],from:[0,1],front:74,frontend:57,frozen:[2,39,66,117],fs2:[2,35],ftol:[92,93],fuction:106,fudg:77,fulfil:2,full:[1,2,4,35,57,63,67,72,76,98,112,114,115,118],fuller:92,fulli:[2,72,92,93,106,145,163],fulton:112,fumi:99,funcfl:112,fund:0,funrol:138,further:[2,37,57,67,73,81,92,93,94,97,105,138,148],furthermor:[11,47,63,76,111,114],futur:[0,2,59,66,93,136,137],g_jik:145,g_p:81,ga3:43,gaa:98,gai:118,gain:[4,62],galindo:139,gamma0:13,gamma:[2,13,67,74,110,111,113,118,135,139,151,152,153,155,156,158,159],gamma_:81,gamma_ijk:156,gamma_n:119,gamma_p:81,gamma_t:119,gammaa:139,gammafactor:67,gammar:139,gan:[145,155,156,158,159],gan_sw:145,gan_tersoff:145,gao:[2,5,45,102],gap:[132,133,149],gather:3,gather_atom:3,gathert_atom:3,gauch:50,gauss:107,gaussian:[2,35,37,66,73,75,110,114,117],gavhan:4,gaybern:[2,4,92],gd3:43,gdot:133,ge4:43,gec:[156,158],gen:68,gener:0,gentler:82,gentli:113,geom:2,geometr:[2,44,59,68,83,93,97,103,104,106,109,114,116,118,120,123,124,125,126,127,128,129,130,131,132,133,134,139,142,146,150,160,161],geometri:[2,9,19,44,59,61],gerber:131,germann:[69,125],germano:118,get:[0,1,2,3,4,19,35,41,44,57,59,61,83,93,106,159,163],get_natom:3,get_rank:3,get_siz:3,gewald:2,gezelt:[106,123],ghost:[2,4,30,61,68,110,111,114,119,122],gif:57,gifsicl:57,gillan:149,gingold:[151,152],git:163,give:[0,1,2,3,4,28,36,38,44,61,68,72,92,95,98,114,121,135,138,146,156,157,158],given:[2,3,4,11,38,41,42,47,56,61,63,66,67,68,69,72,73,74,75,76,77,78,81,82,83,94,95,98,99,100,101,103,104,105,106,107,110,111,112,114,115,116,118,119,121,123,124,125,127,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,162],glosli:138,glotzer:110,glue:3,gnu:0,gnuplot:3,goal:62,goddard:[2,9,91,114,121],goe:[28,41,44,63,92,109,113,120,125,128,150,162],gold:29,goldman:74,good:[1,2,4,19,30,40,43,59,62,68,77,93,94,104,112,138,159,163],gordan:41,gordon:2,got:163,gould:[2,45],gov:[0,94,112,115],govern:67,gpa:95,gpl:0,gpt:138,gpu:[1,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,45,46,47,48,49,50,51,52,53,54,68,69,77,84,85,86,88,89,90,91,94,95],grab:2,grad:2,gradient:[2,61,63,81,93,133,141,142],graft:60,grain:[2,13,18,28,44,50,65,72,76,116,120,138,142,147],gram:112,gran:[2,82,83],granular:0,graph:3,graphic:3,graviti:2,grdient:58,great:[74,163],greater:[1,61,66,68,72,97,99,100,101],greatli:[40,63],green:[2,35,57,73,98,163],green_kubo:2,grest:[21,22,60,101,119,127],grid:[19,40,43,59,67,81],grigera:2,gromac:92,gromacs:[2,92,120],groot:110,ground:[2,31,64,114],group:[2,3,4,19,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,93,148,159],group_id:3,grow:[2,68,72,76,119],growth:2,gsmooth_factor:135,guarante:44,guess:163,gui:[3,163],guid:[1,151,152,153],guidelin:1,gullet:135,gulp:2,gunnel:138,gunsteren:131,guo:[2,5,45,50,102],gyrat:2,gzip:[57,93],h12:118,h2o:[116,142],had:[2,3,60,61,66,68,69,81,110,119,154],hafskjold:[2,63],half:[1,2,4,19,57,59,68,81,82,83,98,104,114,138],halfwai:[19,57,163],halperin:36,halsei:119,halt:[19,59,63],halv:57,hamak:[82,83,104,146],hamilton:29,hamiltonian:[68,114],han:112,hand:[2,28,29,44,54,57,67,76,106,114],handl:[4,57,70,114,132,159],happen:2,hara:157,hard:[1,75,148],harden:150,harder:[82,83],hardi:58,hardwar:[1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,45,46,47,48,49,50,51,52,53,54,68,69,77,84,85,86,88,89,90,91,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,140,143,144,146,147,150,155,156,157,158,159,160,161,162],harmon:[2,4],harmonic_fix_wal:133,harrison:95,hartre:[112,114,138],hassl:75,hat:2,have:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,34,35,36,37,38,39,41,42,44,45,46,47,48,49,50,51,52,53,54,57,59,60,61,62,66,67,68,69,72,73,74,77,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,98,99,100,101,102,103,104,105,106,109,110,111,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,140,141,142,143,144,145,146,147,148,150,155,156,157,158,159,160,161,162,163],hbond:2,hcn:76,hcp:[29,30,135],he1:43,head:[2,6,46,84,95,117,121,163],header:[2,57,74,81,94,98,112,154],heat:2,heavili:[19,59],heavisid:81,hebenstreit:4,height:[57,93,117],held:[2,76,93,119],helic:50,helium:96,help:[4,61,72,98,140,156,158,163],henc:[1,5,6,10,16,17,18,29,46,68,82,83,84,85,89,90,106,117,131,145],henderson:27,henkelman1:93,henkelman2:93,henkelman:93,here:[1,2,3,4,19,29,40,43,49,56,57,59,60,62,66,67,72,74,81,82,92,93,95,98,115,118,121,122,134,145,146,148,162,163],hertzian:[2,119],hertzsch:119,heterogen:37,hex:[44,63],hexagon:[36,135],hexat:36,hey:42,hf4:43,hfo:105,hftn:[92,93],hg1:43,hg2:43,hibb:73,hierarchi:[101,102,123,124,127,134,139],higdon:[132,133],high:[1,2,4,19,38,57,59,61,81,92,95,98,114,118,138,141,142,146,162],higher:[1,4,41,63,92,95,114,148],highest:[63,93],highli:[2,4,44,57,68,74,92,114],highlight:2,hight:117,hill:73,histo:[2,43],histogram:[1,2],histor:115,histori:[0,2],ho3:43,hoc:90,hoh:[2,106,123,127],hold:[2,75,92,93,119,131,161],holdem:75,holian:[69,125],holm:72,home:3,homepag:57,hone:73,hood:138,hook:[2,3],hookean:119,hoover:[2,68,69,71,73,80,110],hop:[60,93,98,148],hope:[19,59],hopefulli:92,horn:2,host:4,hot:2,hove:135,how:[0,1],howev:[1,2,3,4,18,19,35,40,41,43,57,59,60,61,62,66,67,68,72,73,74,81,93,103,104,112,113,119,135,138,141,142,145,155,158,163],howto:[2,68,106,121,123,127],hoyt:58,hpc:1,htm:112,html:[0,3,117,133],htmldoc:0,http:[0,2,3,72,94,112,132,163],https:163,htype:[106,123,127,131],hubbard:107,huge:163,huggin:[99,100],hugh:58,hugoniostat:69,hugoniot:[69,74],hundr:63,hura:2,hybrid:[1,2,4,32,56,68,94,95,105,106,110,112,115,118,119,121,122,131,135,136,137,138,143,145,146,148,149,154,155,156,157,158,159,162],hydrat:117,hydrocarbon:[95,105,114],hydrodynam:[67,132,133],hydrogen:[2,95,98,106,114,121,123,127,131],hydrostat:[61,68,69],hynninen:[107,117],hyoungki:137,hyper:[4,73],hyperbol:107,hyperspher:41,i_0:81,i_1:145,i_csid:2,i_mpi_pin_domain:4,i_mpi_shm_lmt:4,i_n:145,ialloi:135,ibar:135,ibead:73,ibm:138,icc:138,ice:2,icm:163,icms:163,icosohedr:30,id1:[93,122],id2:[93,122],id_press:[61,68,69],id_temp:[60,61,68,69],idea:[1,2,3,19,42,57,59,62,72,163],ideal:[2,30,72,132,151,163],idealiz:2,ident:[1,4,41,61,66,68,72,73,93,99,100,106,108,112,123,125,131,143,148,149,159,162],identifi:[1,2,29,44,65,121,122,135,141,142],idn:93,ielement:135,ignor:[2,3,4,19,32,57,59,61,62,68,69,75,81,82,83,93,94,103,104,112,113,115,118,122,135,141,142,143,145,146,155,156,157,158,159],iii:[2,9,91,121],ijj:159,ijk:[88,90,91,98,145,159],ijl:90,ikeshoji:[2,63],ikj:159,illinoi:132,illustr:[1,2,3,4,72,73,93],imag:[2,3,33,34,40,44],image2pip:57,image:57,imagemagick:57,imagin:[98,113,136,137,143,145,155,156,157,158,159],imaginari:[2,36,73],imbal:[1,19,59,76],imbalanc:[19,59],img:57,immedi:[0,44,76,77],immers:67,impact:[1,2,95],impart:2,impei:[2,123],implement:[1,2,11,31,32,38,40,43,44,47,56,62,63,64,67,68,73,74,76,77,81,90,92,93,94,98,105,106,108,110,111,112,113,114,123,127,131,135,146,156,158],impli:[2,32,42,57,75],implicit:[2,66,82],implict:107,important:80,impos:[2,39,63,72,79,80,82,83,92,93],imposs:1,improp:[0,4,39,42,44,60,84,85,86,87,88,89,90,91,92],improper:[4,90],improper_coeff:[84,85,86,87,88,89,90,91],improper_styl:[0,2],improv:[0,1,4,19,59,63,68,121,123,138,155,157],in3:43,inaccur:[1,2],inaccuraci:83,inact:121,inappropri:44,incid:[40,43],includ:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,34,35,36,37,38,39,40,41,42,43,45,46,47,48,49,50,51,52,53,54,56,57,58,60,61,66,67,68,69,72,73,74,75,76,77,80,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,140,143,144,145,146,147,149,150,155,156,157,158,159,160,161,162,163],inclus:[0,32],incompat:3,incomplet:3,incompress:114,inconsist:60,incorpor:[55,74,98,107,163],incorrect:135,incorrectli:119,increas:[1,2,4,40,42,57,60,62,63,65,75,76,93,95,114,118,141,142,157],increasingli:114,increment:[3,59,68,148],incur:81,indefinit:79,indent:92,independ:[2,3,19,35,44,59,60,61,66,67,68,80,81,119,138],index:[0,2,3,65,73,81,141,142],indic:[2,3,4,6,28,31,33,35,37,39,42,46,57,61,62,68,81,84,90,105,115,135,138,143,148,156,158,163],indirectli:[2,62],indium:149,individu:[0,1,2,3,4,32,39,42,44,56,57,61,62,63,67,68,77,92,99,100,102,103,106,112,114,120,122,123,127,144,147],induc:0,ineffici:[2,29,30,36,38,41,57,68],inerti:133,inertia:[2,133],infer:[59,115],infin:92,infininti:57,infinit:[67,81,114],infinitesim:2,inflect:[107,125],influenc:[19,156,157,158],inform:[0,1,2,3,4,19,40,43,44,45,57,58,59,60,61,62,63,67,70,71,72,75,77,78,79,82,83,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,109,110,112,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],infrequ:[2,68,110],infti:[107,132,133],ingtegr:98,inher:92,inherit:2,inhomogen:81,inidividu:92,init:148,init_fil:81,initi:[2,3,19,32,44,57,58,59,60,61,62,65,66,67,68,69,70,73,74,75,76,79,80,81,82,92,93,95,109,110,138,141,142,148],initial:2,initialt:81,inlclud:3,inner2:[102,120],inner:[4,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],inner_distance_cutoff:121,innner:129,inorgan:[2,159],inp:[149,159],input:[0,1],insert:[44,149,154],insid:[2,3,44,63,67,82,83],inside:[67,125],insight:2,instabl:[67,109],instal:[1,2,3,4,57,93,101,102,123,127,131,138,163],install:0,instanc:[2,3,117,145],instantan:[2,60,61,62,66,68,69,74],instanti:[2,3,58],instead:[1,2,3,4,19,29,34,45,59,61,67,100,101,112,122,124,131,135,138,140],instruct:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,45,46,47,48,49,50,51,52,53,54,57,68,69,77,84,85,86,88,89,90,91,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,140,143,144,146,147,150,155,156,157,158,159,160,161,162],instruction:3,insuffici:2,insult:68,insur:[2,3,30,44,57,81,82,83,104,118,146],integ:[2,3,29,38,41,44,45,48,49,52,55,57,60,62,66,67,74,76,81,88,110,111,135,149],integral:[73,141,142],intel:1,intel_coprocessor:4,intel_cpu_intelmpi:4,intel_cpu_mpich:4,intel_cpu_openpmi:4,intend:[2,18,66],intens:[1,2,33,34,35,37,39,40,43,59,60,68,69,81],inter:[60,93,98],interact:[1,2,3,13,28,32,36,38,39,41,42,45,50,55,56,60,72,73,75,76,81,82,83,85,86,87,89,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,142,144,145,146,147,148,149,150,154,155,156,157,158,159,160,161,162],interatom:[44,79,80,94,98,112,114,135,138,148,157],intercept:40,interchang:[2,62],interconvert:114,interesect:83,interest:[1,3,43,73,80,113,133],interf:163,interfac:0,interfer:[68,95],interg:2,interi:133,interior:[2,19,83],interlac:135,interleav:[2,44],intermedi:[2,57,72,90,93],intermolecular:95,intern:[0,2,3,4,5,6,8,12,16,17,18,31,32,42,44,46,57,58,62,64,65,68,69,76,84,85,89,90,92,111,116,141,142,151],internal:57,internal_element_set:58,internal_quadratur:58,internat:[4,40,43,58],interpenetr:135,interpentr:[151,152],interpol:[2,57,58,65,67,72,93,98,141,142,156],interpret:[2,3,55,57,119,150],interrupt:74,intersect:[2,40,83],intersert:83,interspers:92,interstiti:138,interv:[2,35,62,68,74,148],intestieti:40,intial:[2,95],intiial:19,intramolecular:13,introduc:[2,36,38,57,63,68,74,90,94,106,114,123,127,131,155],introduct:0,inv:[40,43],invalid:[33,93,132,133],invari:[38,41,62],invent:77,invers:[2,26,40,43,74,90,91,99,106,123,160,161],invert:[1,2],invis:83,invoc:60,invok:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,32,33,34,39,44,45,46,47,48,49,50,51,52,53,54,57,58,59,60,61,62,63,66,67,68,69,70,71,72,77,78,79,80,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,136,140,143,144,146,147,149,150,155,156,157,158,159,160,161,162],involv:[2,67,92,93,97,118,155,156,158],ion:[2,81,98,107,115,117,135,138,148,158,162],ionic:[2,99,100,107,114,115,144,148],ioniz:[105,114],ipp:0,ir3:43,ir4:43,irregular:[2,19,59,61,68],irrelev:143,irrespect:[132,133],irrevers:76,isbn:161,isenthalp:68,ismail:[101,127],isn:[3,63],iso:[61,68,69],isobar:[68,111],isodem:114,isoenerget:111,isoenthalp:111,isol:119,isomorph:73,isotherm:[68,111],isotrop:[2,36,118,132,133],issu:[1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,30,39,45,46,47,48,49,50,51,52,53,54,57,60,61,63,68,69,73,77,80,84,85,86,88,89,90,91,93,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,140,143,144,146,147,150,154,155,156,157,158,159,160,161,162],issue:58,item:[2,19,59],iter:[2,19,59,61,70,71,77,92,93,148],iterat:92,ith:62,itself:[2,3,35,57,81,93,106,115,118,141,142],ityp:44,izumi:157,j0jt:35,j_m:41,jackson:139,jacs:[2,45],janssen:72,januari:135,jaramillo:114,jcp:82,jeffer:4,jello:68,jeremi:137,jik:98,jmm:41,job:77,jochim:68,join:[2,29,119],joint:121,jon:29,jone:[1,2,21,22,32,45,58,63,82,83,92,95,97,100,101,102,103,104,109,118,120,121,122,123,124,125,127,128,130,131,134,139,145,146,147],jonsson:[30,93,148],jorgensen:[2,53,106,123,127],journal:[50,58,112,138,151,152],jpeg:57,jpg:57,judici:2,jump:[2,18,69],jun:4,just:[2,3,13,35,42,57,62,81,93,95,97,145,163],justo:113,jusufi:[107,117],jut:83,k11:35,k22:35,k33:35,k_2:87,k_4:87,k_sigma:98,k_ub:5,kalia:159,kapfer:38,kappa:[2,35,106,111,123,160,161],kappa_:81,karplu:32,karttunen:67,kate:0,kaufmann:4,kayser:107,kcal2j:35,ke_eta_dot:68,ke_etap_dot:68,ke_omega_dot:68,keblinski:[106,148],keef:40,keep:[54,62,76,80,92,106,131,149,163],kei:[2,159],kelchner:29,kemper:105,kepler:1,kept:[2,69,79,80],kernel:[4,58,66,138,151,152,153],keword:57,keyword:[2,4,19,29,32,34,36,37,38,39,40,41,42,43,44,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,141,142,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],keywrod:114,khersonskii:41,khvostov:4,kim:[135,136,137],kind:[1,2,3,19,30,57,59,60,77,93,98,114],kinemat:[132,133],kinet:[2,32,35,39,42,61,63,68,69,74,76,92,114,116,142],kjl:90,klein:[2,58,68,123,147],kmax:40,kmp_affinity:4,knight:4,knl:4,knock:81,know:[3,19,92,113,163],knowledg:57,known:[41,57,62,63,79],kokko:1,kokkos:[1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,45,46,47,48,49,50,51,52,53,54,68,69,77,84,85,86,88,89,90,91,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,140,143,144,146,147,150,155,156,157,158,159,160,161,162],kollman:[2,45],kone:[79,80],koning00a:79,koning00b:79,koning96:[79,80],koning97:80,koning99:79,kraker:4,kremer:[21,22],kress:[136,137],kspace:[0,1,2,32,39,42,92,99,100,101,102,106,109,123,127,131,133,147],kspace_modifi:[2,4],kspace_styl:0,kstart:75,kstop:75,kth:[66,73],kub:5,kubo:[2,35],kumagai:157,kumar:[132,133],kuronen:145,kuster:[70,71],kutta:76,l12:135,l_box:114,l_skin:81,la3:43,label:[63,73,93],laboratori:[0,31,64,74],lack:[4,114],lackmann:98,ladd:80,lafitt:139,lag:[62,81],lagrangian:[2,58,74],lagrangian_posit:74,lagrangian_spe:74,lambda1:[156,157,158,159],lambda2:[156,157,158],lambda3:[156,158],lambda4:159,lambda:[32,40,43,67,79,80,81,94,113,131,140,155],lambda_fin:79,lambda_initi:79,lamda:[27,140],laminar:153,lammp:[0,3,93,135,138,163],lammps2pdb:2,lammps_clos:2,lammps_command:2,lammps_extract_atom:2,lammps_extract_comput:2,lammps_extract_fix:2,lammps_extract_glob:2,lammps_extract_vari:2,lammps_fil:2,lammps_get_coord:2,lammps_get_natom:2,lammps_ns:2,lammps_open:2,lammps_potentials:105,lammps_put_coord:2,lammps_quest:2,lammps_rk4:76,lammps_set_vari:2,lammps_sppark:2,lammps_vers:2,lamms:2,lamoureux:2,land:4,landron:148,lane:1,langevin:[2,66,68,69,70,74,75,80,81,93,109,110],languag:[2,3,62],larentzo:[31,64],larg:[0,1,2,4,19,29,42,44,50,57,59,60,61,62,63,67,68,74,75,77,81,82,83,90,92,104,110,114,118,119,122,138,141,142,146],larger:[1,2,3,19,29,44,57,63,67,68,75,81,82,83,92,93,98,104,106,107,114,119,123,127,133,154],largest:[2,44,92,141,142,154],laser:81,last:[1,2,3,42,55,57,59,76,92,93,96,97,98,99,104,105,110,111,112,117,118,119,120,121,124,126,128,129,130,133,139,140,146,148,150,154,160,161],lat:135,later:[2,3,69,92,95,98,163],latitud:41,lattc:135,latter:[2,3,4,19,32,59,61,68,76,83,98,100,101,102,103,109,123,127,131,138,144,147,148],lattic:[2,19,29,30,35,36,40,43,44,59,67,72,82,83,94,112,135],launch:[1,2,3,4],laupretr:90,law:2,layer:[2,81],layout:1,lb_fluid:67,lbtype:67,ld_library_path:3,lead:[2,9,19,32,59,67,69,74,76,77,90,93,106,123,127,129,138,163],least:[2,40,43,63],leav:[3,6,19,42,46,59,61,62,68,77,84],lee2:135,lee:[58,135],left:[2,3,19,56,57,60,72,76,163],leftmost:[19,59],legaci:4,leimkuhl:68,leiu:110,lenart:[107,117],length:[2,3,4,6,19,27,28,29,31,32,33,34,35,37,39,40,43,46,57,59,60,61,65,67,68,69,71,72,77,81,82,83,92,93,95,98,99,100,106,107,114,117,121,123,135,141,142,156,160,161],lennard:[1,2,21,22,32,45,63,82,83,92,95,97,100,101,102,103,104,109,118,120,121,122,123,124,125,127,128,130,131],lenoski:[136,137],less:[1,2,4,19,36,38,59,60,61,63,68,72,92,98,102,118,119,132,133,146,155,158,161],let:[1,49,65,77,104,141,142],lett:[41,67,79,80,98,112,114,118,131,141,142,149],letter:[19,59,73],level:[3,57,68,72,75,78,82,83,98,101,102,123,124,127,134,138,139],lever:154,levin:119,lgr_po:74,lgr_vel:74,li1:43,liang:105,lib:[1,3,4,105],libdir:3,liblammp:3,liblammps_foo:3,liblammps_g:3,libmpi:3,librari:[0,1],licens:[0,57],lie:[2,29],like:[2,3,4,28,57,61,68,70,72,74,76,82,83,93,98,104,109,110,111,114,115,119,121,128,129,135,149,158,160,161,163],likelihood:[40,43,60],likewis:[1,2,19,58,59,68,69,93,94,97,98,106,112,115,138],limit:[2,4,11,40,41,43,44,47,57,61,63,66,68,74,92,107,114,119,133,147,150],limit_eradiu:114,line:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,39,41,42,45,46,47,48,49,50,51,52,53,54,57,59,61,65,68,69,72,74,76,77,81,84,85,86,88,89,90,91,92,93,94,95,96,98,99,100,101,102,103,104,105,106,109,110,112,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,135,136,138,140,141,142,143,144,145,146,147,148,149,150,155,156,157,158,159,160,161,162,163],linear:[2,9,11,41,47,58,60,61,65,68,75,77,81,82,85,86,87,89,93,119,129],linearli:[2,82,93],lineflag:2,lineforc:92,lingo:3,link:[2,3,56,57,135],linkflags:4,linux:[3,4,57],liouvil:68,lipid:13,liquid:[2,4,13,19,32,36,42,59,61,68,74,109,138,144,157],lisal:[111,154],list:[0,1,2,3,4,6,19,29,30,32,36,38,39,41,42,46,56,57,58,59,60,65,68,70,71,72,76,77,84,85,86,87,89,90,92,93,94,95,98,99,100,102,103,105,106,108,110,111,112,113,114,115,116,118,120,121],listfil:122,literatur:[2,135,148,155],lithium:114,littl:[1,4,63,68],littmark:[135,158,162],liu:121,lj126:2,lj12_4:147,lj12_6:147,lj93:2,lj9_6:147,lj_flag:95,lmp1:3,lmp2:3,lmp2arc:[0,2],lmp2cfg:[0,2],lmp2vmd:0,lmp:3,lmp_g:[2,3],lmp_linux:2,lmp_machin:[1,4],lmp_mpi:73,lmpptr:3,load:[1,2,3,4,19,57,59,74,76,105],loadabl:3,localized_lambda:58,localtemp:76,locat:[2,3,11,40,43,47,55,63,67,80,83,106,115,116,117,123,125,127],lockstep:[61,68],log:[1,2,4,74,77,93,95,117,121,132,133],logfil:[0,2],logic:[3,4,19,44,59],lomdahl:[69,125],longer:[1,2,28,68,72,74,76,77,82,83,95,119,148],longest:[19,59],look:[1,2,3,28,57,149,163],lookup:[141,142],loop:[2,3,42,57,62,92,93,138,148],loopmax:148,lopez:68,lorentz:43,lose:[2,61,68,119],loss:2,lossi:57,lossless:57,low:[1,2,19,57,59,138,141,142,161],lower:[2,3,4,19,57,59,61,67,68,74,82,107,135],lowercas:[0,57],lowest:41,lrt:4,lsurfac:81,ltbbmalloc:4,lu3:43,lubric:2,lubricateu:[82,132],luci:76,lumped_lambda_solv:58,lyulin:90,m4v:57,m_eff:119,m_i:78,m_u:67,m_v:67,machin:[1,2,3,4,57,68,92,138,163],mackai:67,mackerel:[2,5,45,102],macos:57,made:[2,3,19,57,59,62,80,118,119,146,150,163],madura:[2,123],magazin:112,magda:82,magic:3,magnitud:[2,29,37,44,62,92,109,119],mai:[0,1,2,3,4,13,19,29,32,33,34,36,37,38,39,40,41,42,43,44,56,57,59,61,62,63,66,67,68,69,70,71,73,74,75,76,77,80,81,82,83,92,93,95,97,98,104,110,114,119,129,131,133,135,136,137,138,141,142,147,149,154,159,162,163],mail:163,main:[2,3,67,79,80,112,148],mainboard:1,mainli:144,maintain:[4,94,112,163],make:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,31,32,37,39,40,41,43,45,46,47,48,49,50,51,52,53,54,55,56,57,59,60,61,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,79,80,81,83,84,85,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],makefil:[3,4,138],maks:119,manag:73,manbi:149,mandadapu:58,manh:98,mani:[1,2,4,19,35,44,57,59,60,61,62,63,65,66,67,68,69,72,76,77,81,92,93,105,114,117,121,141,142,148,149,156,158],manifoldforc:[70,71],manipul:[19,59,106,145],manner:[2,3,19,42,57,59,68,79,80,82,83,93,112,114,132],manual:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,40,43,45,46,47,48,49,50,51,52,53,54,57,68,69,77,84,85,86,88,89,90,91,93,94,95,96,97,99,100,101,102,103,104,105,106,108,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,140,143,144,146,147,150,155,156,157,158,159,160,161,162],manybodi:[42,92],manybody:[94,95,98,105,112,115,143,145,155,156,157,158,159],map:[3,40,41,43,44,57,58,63,75,93,94,95,98,105,112,113,115,135,136,137,143,145,148,149,154,155,156,157,158,159],mara:148,march:135,mark:[120,131,148],maroonmpi:3,marrink:120,marsaglia:66,martin:135,martyna:68,mask:72,mask_direct:58,mass:[2,32,33,34,35,37,44,58,63,66,67,68,73,74,77,78,80,81,94,97,98,112,114,115,119,132,133,136,137,138,145,148,151,152,153],mass_matrix:58,massdelta:77,massiv:[0,57,67,73],massless:[2,106,123,127,131],master:93,mat:[58,105,157],match:[2,3,19,59,60,65,68,98,121,129,135,141,142],mater:[30,94,137,145,148],materi:[2,29,58,72,81,106,112,113,114,119,135,136,138],material_fil:58,math:[4,68],mathemat:[40,41,43,44,61,66,82,149],mathrm:163,matlab:0,matric:[41,118],matrix:[2,35,61,76,138],matter:[2,81,95,108,112,114,135,147,148,156,158,159,162],mattson:[31,39,42,64],max2theta:43,max:[2,59,61,76,77,92,93,148],max_step:76,maxev:92,maxim:93,maximum:[2,9,19,21,27,28,36,38,40,43,59,63,70,71,72,76,77,93,98,117,132,133,148],maxit:[70,71,92],maxstep:76,maxx:145,mayer:[99,100,148],mayo:[2,9,91,121],mbt:46,mcdram:4,mcgraw:73,mclachlan:68,mdregion:58,mdump:[19,59],meam:106,meam_sw_splin:137,meamf:135,mean:[2,3,4,19,28,32,35,36,37,38,39,41,42,44,45,56,57,59,60,61,62,63,66,68,69,70,71,72,73,76,77,81,82,83,85,86,87,89,92,93,99,100,101,102,106,110,112,114,118,119,121,123,124,127,134,135,139,141,142,144,145,146,147,154,155,156,157,158,161],meant:2,measur:0,mechan:[2,3,31,58,62,63,64,73,76,98,114,125,138],meck:38,media:57,medium:161,meet:[57,60],mehl:94,mei:134,melros:[132,133],melt:[60,62,98,138,157],member:[45,98],membran:[13,161],memori:[2,4,66,81,98],mendelev:112,mention:[1,2,3,67,69,82,93,95],menu:57,mep:93,mer:60,mercuri:163,meremianin:41,merg:163,merz:[2,45],mesh:[1,2,19,40,43,58,59,67,138],mesoparticl:[64,65,111],messag:[0,2,3,57,63,132,133,163],met:[19,59,92,93],metal:[44,58,74,82,94,95,98,105,112,113,114,115,135,136,137,138,145,148,155,156,157,158,159],methan:74,methin:90,method:[1,2,3,4,19,32,35,42,58,59,65,67,68,73,74,76,77,79,80,92,93,94,98,105,106,112,114,115,135,136,137,141,142,145,148,159],methodolog:[2,30,42,73],mezei:32,mg2:43,mgoh:143,mgptfast:138,micel:78,micelle2d:0,michael:137,mickel:38,microscal:132,mid:[138,154],middl:[2,4,19,32,46,59,75,84,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,141,142,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],middlebondtors:46,midpoint:154,might:[2,4,9,70,148,163],migrat:[19,59,72],mikami:[2,68],mike:4,mil:112,militz:72,million:[19,59],mimic:[2,28,106,117,123],mimim:[61,93],min2theta:43,min:[2,41,76,148,154],min_modifi:[61,92],min_step:76,min_styl:[92,93],mind:66,minim:[0,2,19,44,57],minima:[50,55,91],minimi:93,minimizaiton:93,minimum:[9,10,11,21,37,43,47,57,61,75,76,82,83,91,92,93,102,114,116,118,120,121,123,125,127,132,133,147,154],minmiz:61,minstep:76,mintmir:106,minu:93,misc:[2,10,11,13,24,25,37,47,66,72,73,79,80,81,85,87,90,107,109,112,113,117,122,128,134,136,137,140,144,154],miscellan:58,mishin:94,mishra:4,miss:122,mitchel:[2,108],mitig:68,mix:[1,2,4,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],mixtur:[2,68,104,116,135,142],mixture_ref_t:135,mjpeg:57,mkv:57,mn2:43,mn3:43,mn4:43,mo3:43,mo5:[43,138],mo6:43,mobil:[2,37,42,57],mode:[1,2,3,4,34,43,57,68,73,106,114,138,148],model:[0,1],modern:4,modest:1,modif:[2,4,32,135,138,146,158,163],modifi:[0,1,2,3,32,57,63,75,77,80,95,109,112,114,131,135,136,137,140,148,157,163],modin:58,modul:3,modulu:[119,135],mol:[44,77,109,118,147],molchunk:34,mole:[112,116],molecul:[2,13,33,34,42,44,60,63,65,75,76,77,102,106,118,123,127,146],molecular:[0,2,4,27,44,50,58,63,73,74,75,81,96,98,101,114],molecule:[5,7,8,9,12,16,21,22,23,26,27,28,45,49,50,51,53,56,86,89,91,102,123],moltempl:0,molybdenum:138,mom:[2,35,75],moment:[2,44,67,68,78,109,113,148],momenta:[63,114],momentum:[2,13,41,44,58,66,67,68,133],momon:60,monaghan:[151,152],monitor:[2,61,62,68,74,77,92,93,109],mono:[30,132],monodispers:[119,132,133],monom:[28,60],monoton:[65,93],mont:[2,60],month:0,moor:[31,42,64,141,142],more:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,34,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,59,60,61,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],morgan:4,moriarti:138,moriarty1:138,moriarty2:138,moriarty3:138,mors:2,mosi2:135,moskalev:41,most:[0,1,2,3,4,19,29,56,57,59,61,62,68,73,74,95,114,118,135,158,163],mostli:[3,57],motiion:2,motion:[2,63,67,68,69,70,72,73,75,81,83,93,109,114,132,133],motiv:72,mov:57,move:[1,2,3,37,61,67,68,72,74,75,81,82,83,92,93,106,110,132,133,138],movement:[2,92],mp2:95,mp4:57,mpeg:57,mpg:57,mpi4pi:3,mpi:[0,1,2],mpi_barrier:1,mpi_comm:2,mpicc:3,mpich:4,mpirun:[1,2,3,4,73],mplayer:57,msd:2,msi2lmp:0,msmse:[40,43],msse3:138,msst:[69,74],mtk:[68,69],mu_j:13,muccioli:118,much:[1,2,3,57,61,74,95,118,146,163],muller:[2,35,139],multi:[0,1],multibodi:[141,142],multicent:114,multicor:1,multinod:4,multiphys:3,multipl:[0,1],multipli:[32,35,56,67,72,92,95],multiscal:3,multisect:[19,59],multistag:32,multithread:4,murdick:98,murti:157,must:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,32,39,40,43,44,45,46,47,48,49,50,51,52,53,54,55,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,111,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],mutli:2,mux:57,mxn:73,mychunk:[2,34],myflux:35,myhug:69,myke:35,mymol:77,mympi:3,mype:35,myramp:42,myspher:83,mystress:35,n_f:74,n_hbond:121,n_ij:119,n_ion:81,n_k:66,n_particl:31,na1:43,nabla:81,nacl:[2,135],nacl_cs_x0:2,nakano:[93,159],name:[0,1,2,3,4,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,57,58,59,60,61,62,63,64,65,66,67,70,71,73,74,75,76,77,78,79,80,82,83,93,94,95,98,100,112,113,115,118,119,122,135,136,137,143,145,148,149,155,156,157,158,159,163],namespac:2,nanoindent:29,nanoparticl:59,nanosecond:63,narrow:2,narulkar:[156,158],nation:0,nativ:[1,2],natom:[2,3],natur:[2,41,68,72,112,114,115,135,145],navi:112,navier:67,nb3:43,nb3bharmon:143,nb5:43,nbodi:138,nbot:98,nchunk:[2,34],ncoeff:149,nd3:43,nden:[2,35],ndof:[68,69],nearbi:[83,95,132,133,161],nearest:[29,30,36,38,67,72,83,122,135,141,142,148],nearli:[2,28,59,114,138],neb:2,neb_combin:93,neb_fin:93,necessari:[2,3,4,32,56,59,61,62,66,76,131,138,148],necessarili:[63,85,86,87,89],need:[1,2,3,19,28,29,30,35,36,38,39,41,42,44,45,55,56,57,58,59,61,65,67,68,75,81,82,93,94,95,96,98,99,100,101,102,103,104,105,106,108,109,110,112,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,163],needless:2,neg:[2,11,22,33,41,42,47,49,57,61,66,69,72,76,82,115,126,135],neglect:[121,133],neglig:[2,3,32,68,155],neigh_modifi:[2,4,59,92,110],neighbor:[1,2,4,19,29,30,36,38,41,42,44,57,59,60,72,73,93,104,106,110,112,113,115,116,122,123,127,135,142,145,148,149,154,155,156,157,158,159],neighborhood:[10,29,36,149],neighobr:[2,106,123,127],neither:[19,58,60,95,114,132,133],nelem:149,nelement:[94,112],nelson:[36,38],nemd:0,net:[2,3,72,133],netpbm:57,neutral:[106,123,148],never:[61,68,72,77,82,112,135,149,159],neveri:[60,62,63,67,93,148],newer:135,newtion:[98,138,145],newton:[4,13,70,71,95,105,113,136,137,148,154,155,156,157,158,159],newtonian:66,next:[1,2,3,29,35,57,65,66,76,77,81,92,93,98,116,119,132,133,141,142,145,163],nfile:[65,141,142],nfreq:59,ngb:72,ngp:37,nguyen:98,nhc:73,ni2:43,ni3:43,ni_000:40,nialh_jea:112,nice:[2,163],nickla:137,nine:[115,148],nissila:[67,148],nist:[94,112],niter:[19,59],nitrid:106,niu3:112,nkb:74,nlocal:3,nlvalu:38,nmpimd:73,nn2:135,nnn:[36,38],no2:[65,76,116],no_affin:4,no_histori:2,noced:92,nocheck:122,nodal:[2,58,65,81,141,142],node:[1,4,19,40,43,59,67,81,122],node_area:67,node_group:58,nodeless:114,nodes:[19,59],nodeset:58,nodeset_to_elementset:58,noforc:[2,133],nois:[2,66,67,74,81],nomenclatur:2,nomin:68,non:[0,1],nonbond:143,none:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,33,34,35,36,38,39,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,75,76,77,78,81,82,83,84,85,86,87,88,89,91,92,93,94,95,96,97,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,139,140,141,142,143,144,146,147,149,150,151,152,153,154,155,156,157,158,159,160,161,162],nonequilibrium:[79,80,114],nongaussian:37,nonlinear:[21,22],noordhoek:105,nor:[19,58,105],nord:[145,156,158],nordlund:[145,156,158],norm:[2,76,92,93,154],normal:[2,3,4,19,29,30,35,39,44,45,59,61,68,72,73,81,82,83,84,85,86,87,89,92,93,104,105,118,119,138,154,162],norman:81,nose:[2,68,69,71,73,80,110],notat:[2,29,41,68,112,159],note:[1,2,3,4,8,9,12,16,17,18,19,23,28,30,32,33,34,35,37,39,40,41,42,43,44,45,49,53,56,57,58,59,60,61,62,64,65,67,68,69,70,73,74,75,76,78,81,82,83,84,85,86,87,89,92,93,94,95,98,99,100,101,102,104,106,107,109,110,111,112,115,118,119,120,121,122,123,125,127,132,133,135,136,137,138,139,141,142,143,145,146,147,148,149,150,154,155,156,158,159,161,162,163],notes:[32,131],noth:163,notic:[0,2,80,81],notifi:62,novemb:135,now:[2,3,4,22,66,83,112,114,119,150,163],np3:43,np4:43,np6:43,nparticl:97,nph:2,nphi:4,nproc:3,npt:[2,4,32,61],nreset:[61,68,69],nreset_ref:61,nrho:[94,112],nrl:112,nstat:72,nstep:[61,68],ntabl:[141,142],ntheta:98,ntype:[41,44,114,121,145],nuclear:[74,114,162],nuclei:114,nucleu:158,nudg:[2,93],num_step:76,numa:1,numactl:4,number:[1,2,3,4,11,19,29,30,31,32,34,35,36,38,39,40,41,43,44,47,56,57,59,60,65,66,67,68,69,70,71,72,73,74,76,77,79,80,81,82,92,93,94,95,98,105,110,112,113,114,115,121,135,136,137,138,141,142,143,145,146,148,149,154,155,156,157,158,159,162],numer:[1,2,3,19,32,38,44,55,57,58,62,63,66,68,73,77,81,82,92,109,135,141,142,162],numpi:3,nvcc:1,nve:[1,2,4,32,35,44,58,63,66,68,69],nvidia:1,nvt:[2,4,32,35,58,63],nvtfe:58,nxnode:81,object:[2,3,57,61,67,92],observ:[4,68,74],obtain:[1,4,13,30,32,38,67,69,73,95,109,135,148,156,158],obviou:162,obvious:57,occ:117,occasion:68,occlus:57,occup:117,occur:[1,2,3,37,55,59,60,61,62,65,79,114,131,141,142],occurr:90,oct:3,octahedr:9,odd:[19,38,59,68,81],ode:76,off:[1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,41,42,43,45,46,47,48,49,50,51,52,53,54,56,57,60,66,68,69,77,82,83,84,85,86,88,89,90,91,92,93,94,95,96,99,100,101,102,103,104,105,106,108,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,135,136,140,141,142,143,144,146,147,148,150,154,155,156,157,158,159,160,161,162],offer:[2,106,148],offload:[1,4],offset:[2,44,57,106,123,127],often:[1,2,4,56,57,59,61,62,68,73,92,93,105,110,123,156,158,163],ohio:137,old:[2,61,68,135,150],older:[4,61,68,150],oleinik:98,olfason:[2,9,91,121],ollila:67,olmsted:[58,72],omega0:91,omega:[2,68,82,88,91,109,119,138],omega_dot:68,omega_ij:111,omega_ijk:158,omega_ik:156,omegadd:[141,142],omgea:2,omiss:0,omit:[63,101,109,127],omp:[1,4],omp_num_threads:4,on_the_fli:58,onc:[0,1,2,3,4,19,45,57,59,62,76,93,118,120,145,146],once:[0,2,19,35,59,163],one:[2,13,35,41,57,68,69,81,98,107,133,148],onli:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,76,77,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],only:[2,4,19,29,57,61,62,63,72,92,93,94,95,98,102,105,112,113,115,121,132,133,135,136,137,143,145,149,155,156,157,158,159],onset:[74,90],onto:[41,60,63,67,154],open:[0,3,57,163],opencl:1,opengl:2,openmp:[1,4],openmpi:4,oper:[1,2,3,4,19,35,44,59,60,63,68,69,77,80,81,93,138,163],opl:4,opls:[53,56],oppelstrup:138,oppos:[2,75],opposit:[2,13,29,45,72,93,106,131],opt:[1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,45,46,47,48,49,50,51,52,53,54,68,69,77,84,85,86,88,89,90,91,94,95,96,99,100,101],optim:0,optimiz:[4,92,105],option:[0,1],optional:149,options:[4,138],orang:57,orbit:[98,106,114,148],order:[2,3,4,11,13,19,32,33,34,36,38,39,41,42,47,56,57,60,61,63,65,67,68,72,74,75,76,77,81,84,85,86,87,89,90,93,94,95,98,105,111,112,114,115,118,119,123,131,135,138,141,142,146,148,155,156,157,158,159],ordinari:[76,121],org:[2,3,72],organ:[0,2,105],organometal:9,orient:[2,13,29,35,36,38,44,68],orientord:36,origin:[2,40,57,63,68,73,80,94,95,96,98,106,109,110,112,121,135,156,158,163],orlikowski:138,orsi:13,orthogon:0,orthograph:57,orthorhomb:74,os4:43,oscil:[2,68,74,82],ose:57,oserror:3,other:[0,1],otherwis:[1,40,45,56,68,76,91,92,122,132,133,145],otyp:[106,123,127,131],our:[2,67,77,156,158],out:[1,2,3,6,19,34,35,37,46,57,59,67,70,81,83,84,85,89,93,114,134],outer2:[102,120],outer:[4,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],outer_distance_cutoff:121,outermost:[68,72,75,78,82,83],outlin:[2,57],output:[0,1],output_frequ:58,outsid:[44,57,63,83,93,99,100,106,114,123,125,144,147],outut:2,outward:[82,83],over:[1,2,4,11,19,32,33,34,36,37,38,41,42,47,57,59,62,66,68,72,74,75,76,82,83,84,93,104,110,112,113,114,115,121,132,135,138,145,149,150,155,156,157,158,159],overal:[2,9,61,68,73,77,114,121,149],overhead:[2,3,19,59,63],overlai:[2,4,32,81,106,110,121,122,131,149,162],overlap:[4,44,92,110,114,119,131,150],overli:76,overload:1,overrid:[4,44,57,61,68,121,135],overridden:[2,44,57,69,132,150],overshoot:62,overview:[0,1,2],overwrit:[3,135],overwritten:121,own:[2,3,19,30,34,58,59,60,61,62,66,67,68,69,73,93,95,98,105,113,145,155,156,157,158,159,163],oxford:[13,32,109],oxid:[105,106,148],oxygen:[2,106,123,127,148],p10:119,p_e:81,p_ik:145,p_pi:98,pacakg:4,pack:[98,135],packag:0,packet:[57,114],pad:[57,73],page:[0,1,2,3,32,34,37,39,42,44,56,57,62,68,83,92,93,94,95,97,105,106,112,113,115,121,135,136,137,143,145,149,155,156,158,159],painless:163,pair:1,pair_:32,pair_charmm:131,pair_coeff:[2,32,35,45,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],pair_dzugatov:163,pair_eam:94,pair_interact:58,pair_list:122,pair_lj:131,pair_lj_soft_coul_soft:32,pair_modifi:[2,32,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],pair_sph:[151,152,153],pair_styl:[0,1,2,4,18,28,32,35,41,45,66,82,83,92],pair_writ:129,pairwis:[0,1,2,28,29,36,38,39,41,42,45,56,60,66,82,92,94,97,99,100,101,102,104,106,110,111,112,114,115,119,121,122,123,124,127,132,133,134,135,136,137,139,140,144,147,150,154,158,160,161],pakketeretet2:163,pan:57,panagiotopoulo:[107,117],papaconstantopoulo:94,paper:[2,41,50,67,81,93,95,101,106,119,121,125,127,156,158],paquai:[70,71,163],paraemt:146,paragraph:[82,141,142],parallel:[0,1,2],parallel_studio_xe_2016:4,parallelepip:2,param:116,paramet:0,parameter:[40,43,95,98,105,106,112,113,114,115,135,136,137,145,148,155,156,157,158,159],parameter_fil:58,parameterizaion:106,parametr:[2,18,113,147],paramt:[37,146],paramter:105,paratem:131,parenthes:[65,76,116,119,141,142],parenthesi:4,parinello:2,pariticl:59,park:[58,137],parmin:138,parrinello1981:61,parrinello:[61,68,74],pars:0,part:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,36,37,39,40,41,42,43,45,46,47,48,49,50,51,52,53,54,56,59,60,61,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,79,80,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],partial:[1,2,61,67,69,73,135],partic:2,particip:[55,97],particl:0,particular:[1,2,29,41,44,57,59,60,66,67,68,72,75,77,84,97,98,99,100,102,103,104,108,111,113,114,118,120,123,127,131,134,140,143,144,146,147,155,156,157,158,159,163],particularli:[2,9,57,61,114],partit:[2,19,59,73,93,101,102,114,123,124,127,134,139,145],partner:60,pass:[2,3,33,34,37,57,61,68,82,154],password:163,past:[0,62,74,110],patch:0,patel:138,path:[2,3,73,81,93,94,95,98,112,113,115,135,136,137,143,145,148,149,155,156,158,159],pathtolammp:148,patrick:157,pattern:30,paul:0,pauli:[114,148],paves:73,payn:[41,149],pb2:43,pb4:43,pbc:82,pchain:[68,69],pcie:1,pd2:43,pd4:43,pdamp:[68,69],pdb:2,pdf:[0,151,152,153],pe_eta:68,pe_etap:68,pe_omega:68,pe_strain:68,peak:117,pearlman:32,pencil:2,peng:43,per:[0,1],peratom:42,perceiv:57,percent:[4,61,155],percentag:[1,61,68],perfect:[2,19,29,30,36,59,72,93],perfectli:[19,59],perfom:[2,93],perform:0,performac:1,pergamon:[135,158,162],peri:[2,44],peridynam:2,perimitt:107,period:2,perioid:82,perl:2,perman:[28,75,121],permit:[2,67,138],permitt:[107,158,161,162],permut:[113,155,156,158,159],perpendicular:[2,57,72,82],perram:118,persepct:57,person:163,persp:57,perspect:57,perturb:[29,32,82],peskin:67,pettifor:98,pettifor_1:98,pettifor_2:98,pettifor_3:98,pfactor:57,phase:[4,68,98,123,157],phenomena:114,phi0:[54,75],phi1:46,phi2:[46,113,155],phi3:[46,113,155],phi:[1,4,36,38,41,55,56,57,75,86,94,98,112,115,135,136,137],phi_ij:[98,115,145],phillip:110,phillpot:[105,106,148],philosoph:112,philosophi:2,phonon:[0,58,81],phophor:149,phosphid:149,phy:[2,5,6,9,20,21,22,29,30,32,36,38,39,41,42,45,46,53,61,63,66,67,68,69,70,71,73,74,77,79,80,81,82,84,90,91,93,95,98,99,102,103,104,105,106,107,108,109,110,111,112,113,114,117,118,119,120,121,123,125,127,128,131,132,133,134,135,137,139,141,142,144,145,146,148,149,154,155,156,157,158,159],physic:[2,4,27,55,58,63,67,81,93,95,96,101,104,112,121,138,151,152,153],physica:[132,133],pick:62,picosend:114,pid:62,piec:[3,41,68],pimd:2,pin:4,pipe:[2,57],pipelin:[2,4],pisarev:81,pishevar:110,pitera:2,pixel:57,pizza:[2,3,19,57,59],pka:81,place:[2,3,19,32,44,57,60,63,66,68,81,82,121],placehold:[94,95,105,112,115,135,136,137,143,145,149,154,155,156,157,158,159],placement:123,plai:[2,57],plain:131,plan:[2,4],planar:[2,72,90,91],planck:73,plane:[2,19,36,57,58,59,72,81,84,85,86,87,88,89,91,133],planeforc:92,plasma:[81,114],plateau:62,platform:[1,4,57],plath:[2,35],player:57,pleas:[0,3,4,58,62,67,113,115,148],plimpton:[0,4,29,39,42,60,72,119],ploop:[68,69],plos:13,plot:[3,4,74,129,131],plu:[3,61,69,114],pm3:43,png:57,pni:57,poariz:2,poem:2,poems:2,point:[1,2,3,4,13,19,29,40,41,43,44,49,57,59,61,65,67,68,73,74,81,83,92,93,97,105,107,109,111,114,118,125,138,141,142,145,146,148,154,157,161],pointer:3,poisson:119,poisson_solv:58,polar:[2,38,41,43,58,105,106,123],polar_off:105,polar_on:105,polariz:0,politano:148,polydispers:[104,119,132,133,161],polyethylen:95,polygon:2,polym:[0,2,21,22,28,60,73,77,78,110,154],polynomi:[112,129,148],poor:[19,59,77,129],poorli:92,popular:113,porou:67,portion:[1,3,19,28,35,42,59,61,63,67,68,99,100,101,102,103,106,107,109,110,114,116,117,118,120,121,123,127,131,134,144,146,147,158,163],poschel:119,posit:[2,11,19,22,29,33,34,40,41,42,43,44,47,49,55,57,59,60,61,62,63,66,67,68,70,72,73,74,76,77,79,80,81,82,83,84,93,95,97,110,111,114,117,126,141,142,148,154],possibl:[1,2,3,19,29,32,41,42,58,59,60,64,72,76,81,88,92,121,135,148,159],post:[0,2,35,58,74],pot:119,potentail:115,potenti:0,potentiel:131,potin:138,pour:[2,77],power:[3,4,37,41,98],pparam:32,ppm:57,ppn:4,pppm:[0,1],pproni:66,pr3:43,pr4:43,practic:[61,68,159,163],prb:[156,158],prd:[2,93],pre:[2,75,82,98,119,141,142,148,150],prec:[4,148],preced:[2,45,76,93,98,121],preceed:[3,82],precis:[1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,44,45,46,47,48,49,50,51,52,53,54,61,63,68,69,77,84,85,86,88,89,90,91,92,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,138,140,143,144,146,147,148,150,155,156,157,158,159,160,161,162],predefin:[54,114],predict:[1,2],prefactor:[8,9,12,16,17,18,56,82,85,89,90,92,104,117,143,146,147,150,161],prefer:[75,95,163],prefix:[3,57,62,76],preliminari:[65,141,142],prematur:92,preprint:[41,70,71,149],prescrib:[2,58],presenc:[67,132,133,138,161],present:[1,4,57,62,66,67,83,105,114,122,131,138,146,148],preserv:[61,68,77],press:[2,4,13,32,42,61,68,69,109,135,158,161],pressur:[1,2],pressure_with_eviri:114,presum:[30,93],prevent:[2,55,90,92,93,110,151,152,154],previou:[0,2,3,59,92,98,119,121,135,141,142],previous:[3,44,62,77,81,82,119],price:[2,109],primari:[0,2,81],prime:[120,138,156,158],primit:[2,83],princip:148,principl:[2,3,114,138,155,163],print:[0,1,2,3,4,19,35,41,57,60,61,67,68,69,70,71,72,74,76,77,92,93,95,110,117,121,148],printfluid:67,prism:2,privileg:3,probab:150,probabl:[55,59,60,68,82,92,141,142],problem:[0,1,2,3,19,35,58,59,61,70,75,80,83,92,93,106,109,121,163],proc:[1,3,4],proce:[19,28,59,93,138],procedur:[2,19,59,68,69,79,80,92,93,95],proceed:138,procesor:19,process:1,processor:[1,2,3,4,19,44,57,58,59,60,61,66,67,68,73,77,81,93,110,148],processsor:[19,59],produc:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,39,42,45,46,47,48,49,50,51,52,53,54,57,59,60,62,66,68,69,74,76,77,81,82,84,85,86,88,89,90,91,92,93,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,140,143,144,145,146,147,150,155,156,157,158,159,160,161,162],product:[2,4,41,76,114,116,142],profil:[2,63,93],program:[2,3,4,57,67,112],progress:[1,19,59,74,92,93],project:[2,163],promot:98,prompt:3,proni:66,prop:2,propag:[68,74,114],propens:2,proper:[60,72,135,163],properli:[93,111],properti:0,proport:[2,19,32,59,62,74,76,119],propos:[2,41,61,68,123,137,157],protein:[4,44,78],proton:[158,162],prove:[31,64,67],provid:[1,2,3,4,13,29,35,40,43,44,57,60,61,67,68,74,79,80,93,95,98,105,106,110,113,114,119,121,122,131,132,135,137,138,145,148,149,154,155,156,157,158,159,163],pscrozi:0,psec:68,pseudo:114,pseudopotenti:138,psf:2,psi:[115,161],psi_ij:115,pstart:[68,69],pstop:[68,69],pstyle:32,psxevar:4,pt2:43,pt4:43,ptarget:61,pthread:4,ptr:[2,3],pu3:43,pu4:43,pu6:43,publish:[67,106,135,138,156,158],pull:163,puls:81,pump:[132,133],purchas:57,pure:[3,136,137,156,158],purport:3,purpos:[2,40,43,44,60,61,72,73,75,101,127,138],push:[72,92,119,150,163],put:[2,3,44],pvar:62,pxx:[61,68],pxy:2,pxz:2,pydir:3,pyi:[61,68],pymol:3,pymol_aspher:0,pympi:3,pypar:3,python:[0,2],pythonpath:3,pyz:2,pzz:[61,68,74],q_1:148,q_2:148,q_3:148,q_i:[115,131],q_j:131,qdist:[106,123,127,131],qeq:[2,105,106,148],qeqall:148,qeqallparallel:148,qfile:106,qinitmod:148,qoffload:4,qopenmp:4,qoverrid:4,qtb:74,quadrant:4,quadratur:[32,58],quadrupl:94,quadruplet:[56,84,85,86,87,89,90],qualiti:[57,95],quantic:148,quantit:[37,119],quantiti:1,quantum:[2,41,73,74,95,98,114,138,148],quantum_temperatur:74,quartic_spher:58,quartz:74,quasi:73,quaternion:[2,44,118],queri:[3,28],quest:2,question:[70,72,163],quick:[0,4],quickli:[36,59,92,93,95],quickmin:[92,93],quicktim:57,quit:[67,149],quot:135,quotat:148,r10:98,r12:118,r_1:41,r_2:41,r_c:[107,109,117,158],r_cut:[98,134],r_e:115,r_fu:[132,133],r_i:[13,41],r_ii:41,r_ij:[13,98,114,145,162],r_ik:145,r_j:13,r_jik:145,r_m:134,r_me:107,r_mh:117,r_min:108,r_ub:5,ra2:43,rad2theta:43,radial:[41,92,114,121,141,142],radian:[5,6,8,12,16,17,18,43,46,54,75,84,85,89,90],radiat:[40,43,81],radii:[41,60,104,112,118,119,132,133,138,161],radit:114,radiu:[2,33,34,40,41,57,67,78,82,83,98,104,114,115,119,123,131,132,133,134,135,148,149,158,161],rahman:[2,61,68,74],rai:43,ram:158,raman:4,ramp:[2,66,68,70,74,82,102,110,120,131,132,134,150,162],ran:[2,3],random:[2,44,57,60,66,67,68,73,74,81,110,111],randomli:44,rang:[1,2,4,38,39,41,42,43,50,57,58,62,92,95,96,98,99,100,101,102,103,104,106,107,108,109,110,112,114,116,118,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,138,139,140,144,145,146,147,148,154,158,160,161,162],rank:[2,3],rankin:69,rapid:[2,3],rapidli:[60,68,106,110],rare:2,rasmol:2,rasmussen:118,raster3d:2,rate:[2,4,58,74,76,79,80,116,132,133,142],rather:[2,19,39,57,59,66,81,114,141,142],ratio:[2,32,41,59,118,119,146,151],rattl:63,rattle:[63,70,71,77],rattle_debug:77,ravelo:[69,125],raw:4,rayleigh:74,rb1:43,rbb:148,rcb:[19,59],rcm:[33,34],rcmx:[33,34],rcmy:[33,34],rcold:63,rcutfac:[41,149],rd1:93,rdn:93,rdt:93,reach:[2,19,59,61,62,69,76,107],reacquaint:163,react:2,reactant:[76,114],reaction:[65,76,78,93,114,116,142],reactiv:95,read:[2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,60,61,65,68,69,73,76,77,80,81,84,85,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,111,112,113,114,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],read_data:[2,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,33,34,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,73,75,76,84,85,86,87,88,89,90,91,93,96,97,99,100,101,102,103,104,106,107,109,110,111,114,117,118,120,121,123,124,125,126,127,128,129,130,131,132,133,134,139,140,144,145,146,147,148,150,154,160,161],read_dump:93,read_restart:[2,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,44,45,46,47,48,49,50,51,52,53,54,56,58,61,67,68,69,73,81,84,85,86,87,88,89,90,91,93,96,97,99,100,101,102,103,104,106,107,109,110,111,114,117,118,119,120,123,124,125,126,127,128,129,130,131,132,133,134,139,140,144,146,147,150,154,160,161],readabl:57,readi:3,readme:[1,2,3,4,138],real:[2,3,11,14,15,35,36,38,41,44,47,73,74,82,88,106,138,158],realli:[1,39,42,163],reamin:[82,83],rearrang:93,reason:[2,3,44,55,79,80,93,107,114,115,117,133],reax:[0,74],rebal:[19,59],rebalanc:[19,59],rebuild:[3,4,110],rebuilt:57,recalcul:32,receiv:72,recent:[3,4,59,62,135],reciproc:[2,40,43,99,100,101,106,109,114,123,127,144,147],recogn:[30,68,76,112,135],recomend:2,recommed:76,recommend:[4,57,63,74,80,114,132,133,138,146,148,163],recompil:[1,77],reconstruct:148,recov:[61,63,68],rectangl:[19,59],rectangular:[19,59],rectilinear:[40,43],rector:27,recurs:[19,59,98],recust:19,red:[57,60,73],reduc:[1,2,11,19,39,40,42,43,57,59,60,72,75,76,92,114,118,145,146,155,156,158],reduct:[40,43,74],redund:115,reed:74,ref:[79,80],refactor:2,refer:[2,3,4,13,32,44,58,60,61,62,63,68,69,72,73,74,77,84,91,94,118,135,137,138,146,152,153,156,158],referenc:[2,62,106,121,143,146],reflect:[2,40,41,43,56,57,62,82,98],refresh:58,regard:[2,77],regardless:[44,68],regim:[2,107],region:[0,2,19,35,43,44,50,57,58,59,63,68,70,81,82],region_styl:83,regoin:2,regspher:44,regul:2,regular:[1,19,57,59,81,107],reinder:4,reinhardt:[79,80],reject:[44,60],rel:[1,2,11,18,19,36,41,44,47,59,63,72,76,81,92,114,118,119,132,133,135,146,161],relat:[1,2],relationship:[2,148,161],relax:2,releas:0,relev:[2,19,44,58,59,62,63,66,67,70,71,77,78,81,82,92,96,104,106,107,109,110,114,117,118,119,120,121,122,124,125,126,128,129,130,132,133,140,141,142,146,150,154,160,161,162],reli:[114,162],reltol:76,remain:[19,32,55,56,61,68,81,98,114,131,138,163],remaina:98,remaind:[44,158],remap:[2,44],remedi:2,rememb:163,remot:163,remov:[2,28,36,38,41,44,68,76,77,93,109,133,138,163],remove_molecul:58,remove_sourc:58,remove_speci:58,ren:43,renam:163,render:57,rendon:68,reneighbor:[59,110],repeat:[2,57,60,61,76,98,156,158],replac:[2,3,19,33,34,57,59,60,69,95,106,119,125,141,142],replica:0,repons:62,report:[0,1,4,40,43,61,74,75,76,81,93,109,114,135],repositori:163,reprens:81,repres:[1,2,19,29,34,50,57,61,62,65,66,67,68,73,76,81,83,93,94,98,118,131,132,133,135,136,137,144,145],represent:[2,66,73,81,98,114,118,138,146],reproduc:[4,68,106,112,119],repul:135,repuls:[2,18,21,22,82,83,95,98,104,106,110,114,116,119,121,131,135,139,148,154,158,159,161,162],request:[2,19,67,163],requir:[1,2,3,4,18,19,28,31,32,40,42,43,44,45,55,57,58,59,60,64,65,66,67,68,76,77,81,82,84,92,93,94,95,97,98,102,104,105,106,110,111,112,113,114,115,118,119,121,129,131,132,133,135,136,137,138,140,141,142,143,145,146,147,148,149,154,155,156,157,158,159,161,162],rerun:[36,38,41,57],rescal:[2,63,68,69,79,80],research:[31,64,67,138],resembl:163,resepct:2,reservoir:[35,63,81],reset:[2,3,33,34,44,61,68,69,77,81,92,133],reset_atomic_reference_posit:58,reset_tim:58,reset_timestep:[2,35],resist:2,resolut:148,resolv:[61,73,133,163],resourc:[94,112],respa:[4,68,72,75,78,82,83,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,141,142,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],respecifi:138,respect:[1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,32,33,39,40,43,45,46,47,48,49,50,51,52,53,54,57,60,61,63,67,68,69,70,77,81,82,84,85,86,88,89,90,91,92,94,95,96,98,99,100,101,102,103,104,105,106,109,110,112,113,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,135,136,138,140,143,144,146,147,148,149,150,155,156,157,158,159,160,161,162],respond:[2,62,114],respons:[2,62],resquar:[2,118],rest:[2,75,98,133,135],restart1:73,restart2:73,restart2data:0,restart:[0,1],restrain:13,restraint:[75,122],restratin:75,restrict:[1,2],result:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,32,34,35,39,40,42,43,44,45,46,47,48,49,50,51,52,53,54,57,59,60,61,62,63,66,67,68,69,73,76,77,79,80,81,82,84,85,86,88,89,90,91,93,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,135,136,138,140,141,142,143,144,146,147,150,155,156,157,158,159,160,161,162],retain:[95,98,138],retriev:[2,136,137],rev:[2,29,36,38,41,42,68,69,79,80,98,104,105,106,109,112,113,114,118,119,125,132,133,134,135,137,141,142,145,146,149,155,156,157,158,159],revers:[2,32,49,60,68,72,79,93,131],review:[41,138,149,163],rfac0:[41,149],rg0:78,rh3:43,rh4:43,rheolog:2,rhi:[141,142],rho0:[135,152,153],rho0_meam:135,rho:[67,94,99,100,101,112,134,135,136,137,141,142,146,151],rho_0:[152,153],rho_alpha_beta:112,rho_bkgd:135,rho_colloid:82,rho_e:81,rho_i:[136,137],rho_ref_meam:135,rho_wal:82,rhodopsin:[1,4],rhosum:[151,152,153],rhot:63,rhs:76,rick:[105,148],right:[2,3,19,29,44,54,56,59,60,67,72,76,106,163],rightmost:[19,59],rii:[33,34],rij:[36,38,72,110,111,141,142,154],rin:[121,128,129],ring:[2,45,73],rino:[30,159],rirj:119,risi:[41,149],risk:75,rix:[33,34],rk4:76,rkf45:76,rlo:[141,142],rmin0:[41,149],rmin:125,rms:76,rnemd:2,robust:92,rock:135,rockett:145,role:2,ronchetti:38,root:[3,32,33,34,112],rose:135,ross:135,rosski:73,rot:[2,35,73,75],rotat:[2,41,44,83,92,109,118,146],rotation:38,rough:[2,44,57],roughli:[19,57,68,93],round:[1,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,45,46,47,48,49,50,51,52,53,54,68,69,77,84,85,86,88,89,90,91,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,140,141,142,143,144,146,147,150,155,156,157,158,159,160,161,162],rous:66,rout:[32,121,131],routin:[2,3,4,67,138],roux:2,row:[2,34,43,81,114],rozero:135,rrespa:[1,4,68,94,95,96,97,99,100,101,102,103,104,105,106,107,109,110,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,139,140,141,142,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],rsq:[141,142],rsurfac:81,ru3:43,ru4:43,rub:5,rubia:[136,137],rule:[0,2,13,29,44,60,68,83,94,96,97,103,104,109,121,126,135,139,150,154,155,156,158,162],run1:2,run2:2,run3:2,run4:2,run5:2,run6:2,run7:2,run8:2,run:[0,1],run_styl:[4,68,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,141,142,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],rung:76,runtim:57,rutherford:81,rutuparna:[156,158],rxn:76,ryckaert:[77,90],rydberg:138,s0st:2,s2050:1,s2629:112,s319:58,s_i:[2,114],s_ij:2,saddl:93,sadigh:[112,136,137],saed_vtk:40,safe:[57,163],safran:161,sagui:109,sai:[1,163],said:92,sakai:157,sall:148,salt:[107,117,135],salter:148,same:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,32,33,34,35,36,37,38,39,41,42,44,45,46,47,48,49,50,51,52,53,54,57,58,59,60,61,62,63,66,67,68,69,72,73,74,75,77,79,80,81,83,84,85,86,88,89,90,91,93,94,95,96,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,139,140,143,144,145,146,147,148,150,154,155,156,157,158,159,160,161,162,163],sampl:[1,2,3,35,57,68,71,73,78,80,98],sample_frequ:58,sandia:[0,29,115,135],saniti:75,satellit:2,satisfi:[30,40,41,43,61,63,67,69,70,77,92,119],satur:107,save:[2,57,60,66,76,81,98],sb3:43,sb5:43,sc3:43,scalabl:[0,1,4],scale:[0,1,2,4,35,41,45,57,58,61,67,68,69,73,74,79,80,81,94,95,107,114,116,119,132,133,135,138],scalegamma:67,scalexi:[61,68,69],scalexz:[61,68,69],scaleyz:[61,68,69],scatter:[3,40,43],scatter_atom:3,scatter_coord:3,scenario:[2,60,83],schaik:131,schell:157,schemat:60,scheme:[2,62,66,68,73,77,81],schmid:110,schroding:114,schroeder:38,sci:[30,105,137,145,148],scienc:[58,60,72,79,112,136,148,157],scientif:[41,112],scm:3,scratch:[19,59],screen:[0,1,2,3,4,40,43,57,67,77,93,102,106,123,135,155,158,159,160,161,162],screenshot:3,scripe:3,script:[0,1],sea:3,search:[0,36,38,92,93,119],secant:65,second:[1,2,3,4,28,29,35,37,38,39,42,43,55,60,62,63,65,66,73,75,77,78,79,80,81,92,93,97,98,99,100,101,105,106,112,114,115,116,119,120,122,125,135,143,148,155,157,158,159,162],second_mo:148,secondari:50,section:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,31,32,33,34,35,37,39,40,41,43,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,76,77,79,80,81,84,85,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],section_acceler:[5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,45,46,47,48,49,50,51,52,53,54,68,69,77,84,85,86,88,89,90,91,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,136,140,143,144,146,147,150,155,156,157,158,159,160,161,162],section_accerl:112,section_command:[0,1],section_exampl:2,section_howto:[2,3,29,30,32,33,34,36,38,41,42,97,108],section_modifi:[2,57],section_python:2,section_start:[2,3,93],section_tool:2,see:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],seed:[44,57,60,66,67,73,74,81,110,111],seek:[19,59],seem:[2,61,135],seen:[4,67,83],segment:[2,57,110,154],select:[2,40,43,44,57,82,93,121,122,135,148],self:[2,74,75,76,78,80,92,105,106,138,145,148],semi:58,semimet:114,semin:4,send:[0,3],sens:[1,2,19,56,59,60,66,74,81,93,106,123,127,156,157,158],sensit:[2,30,61],sep:[2,3],separ:[2,4,19,41,44,55,57,58,59,60,61,68,73,77,99,100,106,107,109,111,123,132,133,135,141,142,143,149,155,158,161],seper:107,sequenc:[19,57,59,93,145],sequenti:145,seri:[2,4,41,57,66,95,118,135,138,141,142,146,150],serial:1,serv:[2,154],server:1,set:[0,1],set_vari:[2,3],setarea:67,sete:60,setenv:3,setfl:[94,112],setforc:[2,92,93],setgamma:67,setpoint:62,settl:61,setup:[2,3,4,32,35,56,58,60],seven:137,sever:[1,2,3,4,32,56,58,61,67,68,92,98,101,112,127,131,135,145,148],sexton:138,sfactor:57,shade:57,shake:[2,13,39,42,63],shan:105,shape:[2,19,44,57,59,61,68,74,83,97,118,146],shardlow:[64,76,111],share:[0,1,2],sharp:[83,135,158],shear:[2,61,67,68,119,132,133],shell:0,shenderova:95,shift:[1,2],shiga:[2,68],shini:57,shinoda:[2,68,147],shiny:57,shlib:3,shm:4,shock:[69,74,125],shockvel:74,shortcut:[61,68],shorter:72,shortest:57,should:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,32,35,39,42,44,45,46,47,48,49,50,51,52,53,54,57,59,60,61,62,66,67,68,69,72,73,74,75,76,77,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,104,105,106,108,109,110,112,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,135,136,138,140,141,142,143,144,146,147,148,150,154,155,156,157,158,159,160,161,162,163],show:[2,3,93,121,135,138],shown:[1,4,19,40,41,43,56,59,60,61,63,68,72,73,114,115,118,119,131,138,146,148],shrink:[2,19,57,59,67,72,92,106,123,127],shrink_spher:70,shrunk:76,shut:[2,3],si4:43,sic:[106,135,143,155,156,158,159],sic_tersoff:145,sicc:[113,155,156,158,159],sicg:[156,158],sicsi:[113,155,156,158,159],side:[19,44,59,60,67,72,76,82,83,93,106,118,119,146],sige:[156,158],sigma0:98,sigma14:131,sigma1:98,sigma2:98,sigma:[2,21,22,28,32,45,67,72,82,83,95,97,98,99,102,103,104,109,110,111,113,114,118,120,121,122,123,124,125,126,127,128,129,130,131,134,139,146,147,155],sigma_14:102,sigma_:107,sigma_c:104,sigma_cc:[95,104],sigma_h:117,sigma_i:115,sigma_ss:104,sign:[2,49,56,62,138,163],signifi:[34,116,142],signific:[66,76,114,118,135,138],significantli:[1,2,42,67,68,75,114,155],silbert:119,silicon:[113,135,155],sim:147,similar:[2,3,4,19,22,32,39,42,44,59,66,74,75,82,95,97,98,110,112,114,119,131,132,140,145],similarli:[2,39,57,62,68,77,83,84,93,95,101,119,127,155],simluat:[2,132],simlul:81,simpl:[1,2,3,4],simpler:3,simplest:34,simpli:[1,2,3,34,61,68,73,93,101,109,127,135],simplif:114,simplifi:[75,138],simplist:3,simul:[0,1],simulatan:4,simulationub:148,simultan:[2,4],sin:[55,82,145],sinc:[0,1,2,3,6,19,28,29,30,33,34,40,45,57,59,60,61,67,68,69,72,73,76,81,82,83,84,92,93,94,95,98,100,101,102,103,104,105,109,110,112,113,118,119,120,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,138,141,142,144,145,146,147,148,149,150,155,156,157,158,159,162,163],sinclair:[72,112],sine:145,singapor:41,singh:94,singl:[1,2,3,4,19,32,34,44,55,57,59,60,61,67,68,69,70,71,73,75,77,81,82,93,94,95,98,102,105,112,113,114,115,119,120,121,135,136,137,138,143,144,145,146,148,149,150,155,156,157,158,159],singleel:98,singular:[55,131,132,133,140],sinnott:[95,105],sinusoid:[44,82],sio2:159,sio:105,sirk:[42,154],sisic:[113,155,156,158,159],sisisi:[113,155,156,157,158,159],site:[0,1,2,3,29,32,63,67,77,94,98,106,112,116,117,123,127,131,140,142,144],situat:[61,62,67,68,73,98],sival:43,six:[2,41,143,145],sixth:143,sixthpow:103,size:[0,1],sjplimp:[0,3],skew:[2,57,68],skin:[30,81],skip:[4,45,122],slab:2,slater:[106,148],sleight:28,slepoi:135,slice:[2,40,73],slider:3,slight:[63,81],slightli:[1,2,4,57,68,95,106,123,127,156,158,159],sligthli:109,sliozberg:154,sllod:[2,4],slope:[2,80,107],slot:1,slow:[2,66,68,70,93,148],slower:[1,98],slowest:81,slowli:[59,92,138,150],sm3:43,small:[2,19,29,32,40,42,43,59,60,63,66,68,72,74,76,77,90,92,93,95,104,106,107,108,123,132,133,135,146,149,155,158,163],smaller:[1,2,4,57,67,76,80],smallest:29,smd:78,smith:144,smooth:[2,83,98,102,106,120,125,128],smoother:44,smoothli:[28,41,102,120,129,131,134,158,162],smt:4,smtb:148,smulat:138,sn2:43,sn4:43,snap:[41,57],snapcoeff:149,snapparam:149,snapshot:[0,1],snc4:4,soc:121,sodani:4,soderlind:138,soft:[3,32,92,110,116],softer:[82,83],softwar:[1,2,3,4],sole:[93,145],solid:[2,19,29,30,35,42,58,59,61,68,72,80,99,125,138],solut:[2,61,76,77,83],solv:[63,67,76,77,80,81,133],solvat:44,solvent:[59,66,68,102,104,106,107,117,123,132,133,146],solver:[0,1,2,19,42,58,59,65,76,106,108,116,123,131,142],some:[1,2,3,4,19,37,44,49,56,57,59,60,61,62,68,76,81,82,92,93,97,98,106,112,114,138,163],someon:92,someth:[3,61,68,82,163],sometim:[2,61,68],somewhat:[29,68],somewher:114,soon:60,sort:[4,93],sound:[67,152,153],soundspe:[152,153],sourc:[0,3,4,58,61,81,131],source_integr:58,sourceforg:3,south:41,space:[2,3,4,19,40,41,43,44,57,59,67,68,73,82,93,99,100,101,106,109,112,114,123,127,135,138,141,142,144,145,147,161],spahn:119,span:[63,94,95,98,105,112,115,135,136,137,143,145,149,155,156,157,158,159],spars:76,spatial:[2,19,29,34,58,59,81],spc:0,spce:63,spearot:[40,43],speci:[41,65,76,112,115,116,142,145,156,158],special:[2,44,45,58,70,77,94,105,108],special_bond:[2,4,21,22,28,36,38,41,45,56,60,108,121],species1:[65,142],species2:[65,142],species:76,speciesn:65,specif:[1,2,4,13,19,44,57,58,59,60,66,67,81,82,92,93,95,97,98,108,112,118,119,135,138,146,155],specifi:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,34,35,36,38,39,40,42,43,44,45,46,47,48,49,50,51,52,53,54,56,57,58,59,60,61,62,63,65,66,67,68,69,72,74,75,76,77,78,80,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],specifii:67,spectral:149,spectrum:[41,74],speed:[1,2,4,19,59,67,74,93,98,106,138,152,153,156],speedup:[1,4],spefici:[44,57,121],spellmey:[2,45],spent:1,sphere1:67,sphere:[2,40,41,44,57,67,68,70,83,104,109,114,118,119,123,132,133,146,161],spheric:0,spheriod:2,spheroid:[2,68],spin:114,spline:[65,92,95,98,121,135],split:[1,2,3,4,19,59,63,68,111],splittol:2,spparks:2,spread:[1,2],spring:[2,10,11,21,22,24,25,27,47,55,60,73],sqrt:[33,38,72,104,110,112,117,119,135],squar:[2,8],squares:[19,59],squeez:[61,132,133],sr2:43,src:[0,1,2,3,4,77,138,163],srolovitz:112,srp:110,srtio:148,ssao:57,stabil:[2,68,98],stabl:[2,55,67,69,75,98],stabli:66,stack:29,stage:[32,93],stagger:1,stai:74,stall:4,stand:[0,2],standard:[0,1,2,3,4,38,44,50,58,67,73,77,82,94,95,97,106,109,114,117,118,123,124,125,126,127,130,134,135,138,139,146,155],starikov:81,start:[0,2,4,19,39,44],start_6:117,stat:[28,61,72,92],state:[2,3,29,30,32,50,57,60,61,64,65,66,68,69,74,79,80,81,93,98,109,111,114,118,119,135,137,138,146,148,151,152,153],statement:163,stationari:[67,132,133],statist:[2,19,60,66,74,76,77,81,92,93,95,110,119,132,161],statu:[28,105],steadi:[2,69,74],stefan:163,stegailov:81,steinhardt:38,stencil:67,step:[1,2,3,4,35,42,57,58,59,60,61,63,70,71,72,74,76,77,79,80,81,92,93,95,110,117,121,135,138,148],stepwis:32,steve:0,steven:60,stiff:[2,26,73,76,92],stile:107,still:[1,2,3,4,19,36,59,81,103,112,118,119,122,132,146,150,163],stilling:[113,137,145,155,159],stochast:111,stoddard:109,stoichiometr:76,stoichiometri:148,stoke:67,stone:109,stop:[2,3,19,28],stopthresh:[19,59],store:[2,3,33,35,36,39,42,44,56,57,58,62,66,67,68,69,70,71,72,73,76,77,78,80,81,94,95,98,105,110,111,112,113,114,115,116,118,119,135,136,137,138,141,142,145,148,149,155,156,157,158,159],straatsma:2,straightforward:114,strain:[2,61,68,69,132,133],strang:57,strategi:0,stratford:67,stream:[2,39,42,57,58,66],streiz:106,strength:[41,57,75,82,83,146],stress:[2,35,39],stretch:28,strict:149,strictli:[2,19,59,74],strietz:106,string:[2,3,19,59,76,135,145,149],strong:95,stronger:2,strongest:[132,133],strongli:[1,2,77,81,138],structur:[0,2,3,29,30,38,40,43,50,75,91,98,105,114,135,138,145,148],strucur:30,stuart:[95,105,148],stuck:61,studi:[2,37,70,125,148],studio:4,stukowski:112,style:0,style_nam:68,stylecomput:148,sub:[1,2,3,19,32,35,41,56,57,59,61,68,69,74,77,81,83,95,97,105,118,119,121,146,148,162],subbox:57,subdivis:67,subdomain:67,subequ:3,subject:[2,4,19,59],submit:[0,56,115],subscript:[3,62,81,84,115,159],subsequ:[2,3,19,59,61,81,112],subset:[2,3,4,19,41,59,68,69,93,95,98],substanti:[2,62,155],substep:68,substitut:[1,93,114],substract:106,substrat:[61,68],substyl:131,subsystem:81,subtract:[2,28,35,37,39,42,63,66,130],success:[2,3,61,62,92,93],successfulli:3,successulli:3,sudden:18,suddenli:83,sudo:3,suffer:[71,83],suffici:[2,19,59,62,68,82,122],suffix:[1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,45,46,47,48,49,50,51,52,53,54,57,68,69,76,77,84,85,86,88,89,90,91,93,94,95,96,98,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,135,136,137,140,143,144,145,146,147,150,155,156,157,158,159,160,161,162],suggest:[0,2,74],suit:[67,114],suitabl:[28,32,60,98,119,131,135],sum:[2,29,33,34,36,37,38,39,41,42,66,72,74,80,81,82,83,92,97,106,110,114,115,123,126,135,149],summar:[2,115,148],summari:1,summat:[2,29,38,101,106,112,113,123,127,138,148,155,156,157,158,159],sun:[6,20,46,84,103],sup:[74,105,148],superset:35,supinski:138,supplementari:[118,146],suppli:81,support:[1,2,3,4,19,32,57,59,60,61,67,68,69,70,71,72,74,75,78,80,82,83,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],suppos:[115,163],suppress:2,sure:[2,3,61,77,112,163],surfac:[2,29,40,41,44,57,67,70,71,72,75,81,82,83,93,98,132,133,138,148,161],surface_mov:81,surfact:[107,117],surpris:114,surround:[29,44,61,65,68,72,141,142],suspens:[132,133],sustain:[61,119],suzuki:68,svg:2,svn:3,swap:2,swiggl:82,swiler:[41,149],switch7_section_start:117,switchflag:[41,149],swol:27,swope:2,symbol:[2,40,43,98,114,149],symmetr:[2,29,32,39,42,61,68,94,109,112,156,158],symmetri:[2,29,36,38,72,84,94],symplect:68,sync:2,synchron:[1,93],syntax:[1,2,3],sysstem:98,syst:148,system:[0,1],system_:73,systemat:[2,138],t_e:81,t_e_min:81,t_equil:[79,80],t_infil:81,t_init:[74,81],t_j:13,t_lb:67,t_oufil:81,t_out:81,t_outfil:81,t_qm:74,t_switch:[79,80],ta06a:149,ta4:138,ta5:43,ta6:138,tabbernor:40,table:65,tabul:[65,76,94,98,99,100,101,102,103,106,112,114,116,123,127,134,141,142,144,145,147,156],tabular:145,tad:2,tag:[58,65,76,116,142],tail:[32,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],tait:[152,153],take:[1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,32,33,35,39,42,45,46,47,48,49,50,51,52,53,54,57,59,61,63,68,69,76,77,78,84,85,86,88,89,90,91,94,95,96,98,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,138,140,143,144,146,147,148,150,154,155,156,157,158,159,160,161,162],taken:[2,44,60,66,67,74,76,81,88,112,114,118,141,142,155,159],talk:2,talli:[2,19,59,95,114,117,121],tang:138,tangenti:[2,119],tanh:81,tantalum:[138,149],taper:134,tarbal:[0,3],target:[2,3,19,59,61,62,63,66,68,69,73,74,78,81,110],task:[1,2,4,28,73],taskset:4,tau:[62,67,68,79,80,81],tau_1:66,tau_k:66,tau_n_k:66,tb3:43,tbp:98,tchain:[68,69,70,71],tcontrol:62,tcsh:3,tdamp:[68,69,71],technic:[2,67],techniqu:[2,32,61,74],technolog:4,tell:[2,3,56],temeperatur:3,temp:[2,32,35,39,42,60,61,63,68,69,71,73,74,81,95,109,117,118,121,146],temper:[2,93],temperar:73,temperatur:0,temperature_definit:58,templat:[44,77],templeton2010:58,templeton2011:58,templeton:58,tempor:66,temporarili:75,tend:[13,68,72,76],tensor:[2,33,34,35,39,41,42,61,67,68,69,114,132,133,138],term:[0,1,2,5,6,11,21,22,32,33,35,39,42,46,47,55,62,63,66,67,68,69,73,74,75,78,81,84,91,92,94,95,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,123,127,130,131,132,133,135,136,137,138,140,144,146,148,154,155,156,157,158,159,161],termin:[40,68,92,93],tersoff:[4,42,106,113,145],tersoff_1:[156,157,158],tersoff_2:[156,157,158],tersoff_mod:157,tertiari:50,test:[0,2],tether:[2,80,117],tetot:148,texas_holdem:75,text:[2,19,57,58,59,65,81,93,112,115,122,135,141,142,149,163],tfix:75,tflag:57,th4:43,thakkar:4,thakker:4,than:[1,2,3,4,11,19,36,37,38,39,42,47,59,60,61,66,67,72,74,75,76,78,81,82,83,92,93,95,97,98,99,100,101,102,112,114,118,119,132,133,135,141,142,146,148,150,154,155,158,161,162],thank:[156,158],thei:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,32,33,34,35,39,41,44,45,46,47,48,49,50,51,52,53,54,56,57,59,60,61,62,66,67,68,69,75,77,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,108,109,110,111,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,140,142,143,144,145,146,147,148,149,150,154,155,156,157,158,159,160,161,162,163],them:[1,2,3,19,28,35,46,57,59,60,61,62,68,69,72,75,77,81,84,93,94,98,112,115,118,146,150,163],themselv:[2,3,59,93,94,98,106,112,131,135,136,137,149],theorem:[66,98,111],theoret:[37,74,155],theori:[2,41,58,68,98,138,161],therebi:[132,133],therefor:[2,32,63,67,77,108,155],therein:[2,135],thereof:32,thermal:0,thermo:[0,1],thermo_modifi:[2,61,68,154],thermo_press:[39,61,68,69],thermo_styl:[2,31,35,39,42,44,60,61,68,69,74,82,92,95,117,121],thermo_temp:[39,60,61,68,69],thermoberendsen:2,thermochemistri:114,thermodyanm:60,thermodynam:0,thermost:2,thermostat:0,thermostatequ:2,thesi:132,thess:99,theta0:[5,6,8,10,11,12,16,17,18,41,47,75,90],theta0max:41,theta10:98,theta1:[46,55,84,98],theta2:[46,55,84,98],theta3:[84,98],theta4:98,theta5:98,theta6:98,theta7:98,theta8:98,theta9:98,theta:[2,10,11,36,38,41,43,44,47,57,75,81,84,90,121,145,157],theta_0:143,theta_:[90,98],theta_c:121,theta_ijk:98,theta_ijl:84,theta_jik:[136,137],theta_pi:98,theta_sigma:98,thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],thick:[40,57],thin:57,thing:[2,3,28,61,68,163],think:[2,3,62,85,89,92],third:[2,13,29,35,41,42,62,66,78,81,105,115,116,135,143,159],thirumalai:50,tho:113,thole:2,thompson:[0,39,41,42,149],those:[1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,32,35,36,38,39,41,42,44,45,46,47,48,49,50,51,52,53,54,57,61,63,68,69,77,79,80,84,85,86,88,89,90,91,92,93,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,135,136,140,143,144,146,147,149,150,155,156,157,158,159,160,161,162,163],though:[2,44,61,62,93,110,112,114,115,118,119,131,132,159],thought:[82,119,122],thread:[1,4],three:[1,2,28,29,32,35,36,37,40,41,43,44,50,60,61,62,63,68,69,76,79,81,87,88,90,94,95,98,112,113,115,118,119,122,135,136,137,138,143,145,146,148,149,155,156,157,158,159],threebodi:155,thresh:[19,57,59],threshhold:[19,57,59],threshold:[19,59,72],through:[2,3,44,61,65,67,68,73,76,81,82,83,95,111,113,114,116,119,123,138,142,147,148,150,154],throughout:[2,4,40,138],thru:[2,3,33,34,37,92],thrust:1,thu:[1,2,3,19,29,30,34,35,36,38,41,42,44,45,56,57,59,60,61,63,66,68,69,72,77,78,81,82,83,84,92,93,94,95,97,98,99,100,101,102,103,104,105,106,110,111,112,113,114,115,116,117,118,119,123,127,131,132,133,135,136,137,138,140,141,142,144,145,146,148,149,151,152,153,154,155,156,157,158,159,162],thumb:[44,104],ti2:43,ti3:43,ti4:43,tidi:163,tight:[98,148],tij:109,tildeslei:[13,32,109],tile:[2,19,44,59],tilt:[2,61,68,72,74,159],time:[0,1],time_integr:58,timer:1,timescal:[74,114],timespan:68,timestep:[1,2,3,19,35,42,57,59,60,61,62,63,66,67,68,69,70,72,75,76,77,79,80,81,82,92,93,98,110,114,121,132,133,150],timesteppnig:77,tin:[105,106],tini:[44,92,98],tio2:148,tio:148,tip3p:0,tip4:2,tip4p:0,tip:0,tirrel:82,titl:163,tji:109,tl1:43,tl3:43,tlbr_msw:145,tloop:[68,69],tm3:43,tmp:[2,19,34,57,59],tobia:68,togeth:[2,3,4,19,42,44,59,61,68,117],tol:[70,71,77,155],toler:[61,70,71,76,77,92,93,155],tolernac:76,too:[1,2,19,29,30,36,38,41,57,59,61,63,68,77,81,93,110],took:150,tool:[0,1,2,3,19,57,59,93],toolkit:2,top:[0,3,4,67,93,149,163],topolog:[2,32,56],torqu:[2,13,67,92,97,109,118,119,133],torsion:[2,46,56,95],torsion_flag:95,tosi:99,tot:148,total:[2,3,4,19,31,33,34,35,37,41,42,59,66,67,68,69,70,73,74,75,76,79,80,81,82,83,92,93,94,95,97,98,105,112,114,119,135,136,137,138,145,148,149],toukmaji:109,toward:[13,57,67,69,72,90,93],toxvaerd:128,tptask:4,trace:114,track:[67,81],track_displac:58,tractabl:76,trade:[2,106,123,127],tradit:[2,55],trail:[32,93,115,135,149],trajectori:[2,32,68,73,77,110],tran:[49,50],transfer:[1,2,4,58,81,98,138],transform:[2,32,118,140],transit:[2,4,93,107,131,137,138,158],translat:[2,63,68,73,114],transmit:2,transport:[58,81],trap:[2,35],treat:[2,42,81,83,92,97,108,114,115,118,121,136,137,138,146],treatment:108,tree:131,tri:[2,3,57,61,68,69,92],triangl:[2,57],triangul:2,triangular:[2,61],triclin:[0,1],triflag:2,trigger:[3,59,60,92],trigon:9,trilinear:67,tringl:57,tripl:[41,98],triplet:[113,143,145,155,156,157,158,159],trivial:3,trott:[41,149],troubl:3,truncat:[2,63,76,82,83,96,106,114,119,123,125,128,148],tscale:74,tsige:101,tstart:[66,68,71,110],tstat:[2,66],tstop:[66,68,71,110],tsuzuki:[30,159],ttm_mod:81,tucker:[41,149],tuckerman:[68,73],tune:[2,4],tunnel:73,turkand:38,turn:[2,28,41,43,56,57,60,61,68,92,93,95,108,121,135,154],tutein:95,tutori:[2,72],tweak:44,twice:[2,4,45,61,68],twist:[132,133],two:[1,2,3,4,19,28,29,32,36,40,41,43,44,55,57,59,60,61,66,67,68,69,72,73,74,80,81,83,91,92,93,94,95,97,98,99,100,101,104,105,106,108,109,110,112,113,114,115,116,118,119,122,123,127,131,132,133,135,138,142,144,145,146,148,149,150,154,155,156,157,158,159,161,162],two_temperatur:58,twobodi:[156,158,159],twojmax:[41,149],txt:[81,122,148,163],typcial:[19,59],type1:[40,43],type2:[40,43],type:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,32,35,40,41,43,44,45,46,47,48,49,50,51,52,53,54,55,57,58,67,77,83,84,85,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,111,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],typen:[40,43],typic:[1,2,3,4,13,19,21,22,29,32,44,55,57,58,59,60,61,62,68,75,77,92,93,102,104,106,117,118,121,122,123,127,132,133,135,146,158,163],tzou:81,u_chem:31,u_cond:[31,64],u_f:67,u_i:[64,65],u_ij:145,u_j:65,u_mech:[31,64],u_prom:98,uberuaga:93,ubiquit:[3,98],uchem:[116,142],uloop:[73,93],umbrella:2,umin:[10,11,24,25,47],unabl:[3,19,59],unaffect:[61,68],unalt:62,unambigu:159,unbias:114,unchang:[61,68],uncom:1,uncompress:57,uncorrel:66,uncoupl:73,under:[0,2,4,6,41,46,57,61,62,68,74,84,111,114,131,149],underflow:57,undergo:[2,32,66,68],undergon:60,underli:[2,29,57,68,81],underpredict:2,underscor:[60,61,68,69],understand:[1,2,138],understood:98,undesir:[61,68],undisturb:[132,133],undump:57,unfix:[2,35,58,75,79],unfix_flux:58,unfold:78,uniaxi:69,uniform:[4,19,58,59,67,118,146],uniformli:[67,81,141,142,145],uninterrupt:[68,69,74,80,81],union:[2,83],uniqu:[2,66,69,93,112,114],unit:[2,5,6,16,17,18,29,30,31,32,33,34,35,36,37,39,40,41,42,43,44,46,57,60,61,62,63,64,65,66,67,68,69,71,72,73,74,75,76,78,80,81,82,83,84,85,89,90,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],uniti:113,unitless:[29,62,68,74,76,92,119,140,144,155,156,157,158,159],univers:[2,32,93,132,137,158],unknown:30,unless:[3,4,40,43,44,61,68,92,104],unlik:[33,44,94,98,112,115,135,136,137,149],unlike:[68,69,112,121,122,136,137],unlimit:145,unnecessari:4,unoccupi:81,unoptim:57,unpack:[0,3],unperturb:32,unphys:[2,68],unpublish:138,unrel:[45,163],unrestrain:75,unset:114,unshift:109,unsmooth:129,unsolv:102,unstabl:67,unstag:163,until:[2,19,57,59,61,62,65,70,79,98,119,141,142],unus:98,unwant:44,unwrap:[33,34,42,60],up_intern:57,updat:[0,2,4,62,66,67,68,70,74,81,98,109,138],upenn:3,upon:[2,76,98],upper:[19,37,59,61,67,68,74,82,92,119,148],uppercas:0,upsid:2,upsilon:118,upstream:163,urbana:132,urey_bradlei:5,url:163,usabl:112,usag:[2,72,131],use:[2,57,81,118,135,146,148,163],useful:138,user:[0,1,2,3],user_manifold:163,user_misc:[14,15,17,48,52,54,55,88],usernam:163,using:[0,1],usr:3,usual:[2,8,12,16,17,18,23,32,53,55,57,60,61,69,74,75,81,82,83,89,93,102,104,107,109,118,122,131,132,133,143,149,154,155],util:118,v11:2,v22:2,v33:2,v_0:81,v_2:138,v_3:138,v_4:138,v_avp:62,v_delta:32,v_dhug:74,v_drai:74,v_e_hbond:121,v_ij:145,v_jx:35,v_jy:35,v_jz:35,v_k11:35,v_k22:35,v_k33:35,v_lgr_po:74,v_lgr_vel:74,v_linear:82,v_lj:95,v_mu:132,v_n:[67,138],v_name:[2,32,57,62,82],v_occ:117,v_prefactor:150,v_press:42,v_pxxwall:62,v_pxy:2,v_pxz:2,v_pyz:2,v_r:70,v_ramp:82,v_rebo:95,v_t_qm:74,v_torsion:95,v_v11:2,v_v22:2,v_v33:2,v_valu:57,v_wiggl:82,v_x:[44,82],v_xave:2,v_xmax:2,v_xx:44,v_y:44,v_yi:44,vacanc:[79,138],vacf:2,vacuum:[81,107,158,162],valanc:98,valenc:[98,114],valent:98,valid:[2,3,40,43,61,72,112,114,118,138,145],valon:135,value1:69,value2:69,van:[27,32,104,105,131,135,161],vanadium:138,vanilla:2,vanish:77,vapor:[19,59],vare:81,vari:[1,19,32,40,43,58,59,61,68,75,81,82,102,110,111,120,129,132,150],variabl:0,varianc:110,variant:[1,2,61,68,69,119,136,137,140,156,158],variat:[19,59],varieti:[1,2,57,135,159],variou:0,varshalovich:41,vashishta1990:159,vashishta2007:159,vbia:2,vcm:2,vdisplac:82,vdw:105,vec:72,vector:1,vel:[2,110,111,114,119],veld:[101,127],veloc:[2,35,39,42,44,57,61,63,67,68,69,70,72,73,74,75,77,80,81,82,92,93,110,114,119,132,133],velocit:[110,111,114,119],velocity_bottom:67,velocity_top:67,verbos:148,veri:[1,2,19,32,57,59,61,62,68,73,77,93,114,119,132,133,141,142,149,150,163],verifi:163,verlet:[1,4,58,63,68,73,77,81],versa:[2,60],versu:[2,19,59,62,77,101,109,119,127],vertic:[4,19,57,59],via:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,32,35,39,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,59,60,61,62,67,68,69,73,75,77,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],vibrat:[2,72,74,90,114],vice:[2,60],video:57,view:[2,57,98,114,115,148],viewer:57,viewpoint:57,vij:110,vim:0,virial:[35,39,41,42,61,68,69,77,110,111,114],virtual:[2,155],viscoelast:119,viscos:0,viscosity:2,viscou:[2,66,67,92,93],vision:148,visual:0,viz:3,viz_tool:3,vizplotgui_tool:3,vmax:61,vmd:[2,3],voigt:[2,41],vol:[2,35,42,135,158],volpress:138,volum:[2,19,32,35,39,40,42,43,44,59,61,64,67,68,69,70,74,81,82,83,132,133,138,152,153,162],voronoi:42,voter:[136,137],voth:73,vri:120,vstream:2,vtk:[2,40],w_1:41,w_2:41,w_i:41,w_ik:145,waal:[32,104,105,131,161],wadlei:98,wagner:[58,67,135],wai:[1,2,3,29,32,34,35,36,38,41,42,44,57,60,61,62,66,67,68,69,70,73,81,82,85,86,87,89,90,92,93,94,95,106,107,110,112,113,115,118,121,123,135,136,137,143,145,146,148,149,150,154,155,156,158,159,163],wait:[1,4],walk:[66,68],wall:0,wallhi:82,wang:[135,145],want:[0,1,2,3,31,34,39,42,44,57,59,60,72,75,80,82,83,93,94,95,98,104,105,110,112,115,135,141,142,143,145,148,150,155,156,158,159,163],ward:98,warm:[4,114],warmup:4,warn:[0,21,22,30,57,68,69,76,132,133,135,141,142,163],warner:94,warning:135,warp:135,warren:[110,141,142],watanab:[79,80],watch:93,water:0,watkin:53,wave:114,wavefunct:114,wavelength:[40,43],wavepacket:114,weak:36,web:1,webb:58,weber:[113,137,145,155,159],weight:[2,32,41,43,45,56,66,67,76,108,110,111,116,135,141,142,149],well:[1,2,3,11,26,36,38,39,42,44,47,57,59,61,67,68,69,76,80,92,93,97,117,118,121,132,133,135,138,146,150,156,157,158,163],went:3,were:[2,3,4,19,29,38,39,44,57,59,95,114,119,122,163],westview:161,what:[0,1,2,3,44,57,59,60,61,65,68,73,75,77,82,92,93,135,141,142,150,154,163],whatev:[57,61,62,68,92,93,103,104,138],whelan:43,when:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,36,37,38,39,44,45,46,47,48,49,50,51,52,53,54,56,57,59,60,61,62,67,68,69,72,74,75,76,77,78,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,99,100,101,102,103,104,105,106,108,109,110,112,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,140,141,142,143,144,145,146,147,149,150,154,155,156,157,158,159,160,161,162,163],whenev:[0,55,121],where:[1,2,3,4,6,7,8,9,10,11,12,13,16,17,18,19,20,23,24,25,26,29,30,31,32,33,34,36,39,40,42,43,46,47,56,57,59,60,61,62,63,64,65,66,67,68,69,72,73,74,76,77,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,123,127,132,133,134,135,136,137,138,142,143,144,145,146,148,149,151,152,153,154,155,156,157,158,159,161,162],wherea:[2,3,36,66,68,81],whether:[2,3,28,29,57,60,61,68,69,77,100,102,105,120,122,132,133,135,148],which:[0,1,2,3,4,5,6,7,8,9,12,13,16,19,21,22,23,26,27,28,29,30,31,32,33,34,35,37,38,39,41,42,43,44,45,46,49,50,51,53,56,57,59,60,61,62,63,65,66,67,68,69,70,71,72,73,74,75,77,78,79,80,81,82,83,84,86,89,91,92,93,94,95,97,98,99,100,101,102,104,105,106,107,108,109,110,112,113,114,115,116,117,118,119,120,121,122,123,125,126,127,129,131,132,133,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,154,155,156,157,158,159,161,163],white:[66,81],who:[0,2,94,112],whole:76,whose:[2,32,35,57,62,65,68,72,75,76,77,83,93,114,116,125,141,142,155,156,158],why:[2,163],wicaksono1:72,wicaksono2:72,wicaksono:72,wide:[1,2,102,104,114],width:[57,117],wiggl:82,wigner:41,wih:2,wikipedia:2,wild:[32,121],wildcard:[57,154],wildli:68,window:[57,163],wire:75,wirnsberg:[2,63],wisdom:163,wise:[110,155],wish:[2,3,42,45,67,77,82,93,100,121,135,141,142],within:[1,2,3,4,13,19,29,30,36,38,39,41,44,57,59,60,65,72,76,77,81,82,83,92,93,97,99,100,106,111,112,113,114,116,117,122,123,135,138,142,144,146,147,155,156,157,158,159],without:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,32,39,45,46,47,48,49,50,51,52,53,54,57,61,62,65,66,68,69,76,77,84,85,86,88,89,90,91,93,94,95,96,99,100,101,102,103,104,105,106,109,110,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,138,140,141,142,143,144,146,147,150,155,156,157,158,159,160,161,162,163],won:133,wong:[58,98],word:[2,13,75,104],work:[1,2,3,4,28,40,43,57,60,62,67,68,70,75,77,80,105,108,110,132,133,135,138,148],worker:159,workflow:163,world:[41,93],worlei:110,worst:83,worth:74,would:[1,2,3,4,13,19,29,33,35,42,44,45,56,57,59,60,61,63,68,72,73,76,84,85,86,87,89,92,93,94,95,98,104,105,106,110,111,112,113,115,135,136,137,138,143,145,149,154,155,156,157,158,159,163],wrap:[1,2,3,44,67,82,83,93],wrapper:[0,2],wright:92,write_atom_weight:58,write_restart:[58,67],written:[2,41,57,58,59,60,61,62,63,66,67,70,71,72,74,75,77,78,79,81,82,83,112,134,138,161,163],wrong:[3,61,68,82,83],www:[0,2,3,94,112,132],x200:4,x86:138,x_ij:145,x_ijkl:84,x_kjli:84,x_ljik:84,xave:2,xavx:4,xcore:4,xeon:[1,4],xhi:[2,82],xhi_bound:2,xhost:4,xi_ij:145,xiaowang:[115,156,158],xiij:72,xlat:44,xlo:[2,3,82],xlo_bound:2,xmax:2,xmgrace:0,xmic:4,xmovi:[0,2],xmu:119,xpo:44,xrd:40,xtc:[2,57],xwall:62,xyz:[2,44,57,61,68,69],xzhou:115,yamada:4,yang:[138,145],yate:138,yb2:43,yb3:43,yellow:57,yet:[4,57,62,82,92,103,104,105,114,161,163],yhi:[2,82],yhi_bound:2,yield:[2,35,42,61,68,76,97,110,119],yip:79,ylat:44,ylo:[2,82],ylo_bound:2,york:73,yoshida:68,you:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,36,38,39,41,42,44,45,46,47,48,49,50,51,52,53,54,56,57,59,60,61,62,63,66,68,69,73,75,77,79,80,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,98,99,100,101,102,103,104,105,106,109,110,112,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],young:119,your:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,39,44,45,46,47,48,49,50,51,52,53,54,57,58,60,61,68,69,77,81,82,83,84,85,86,88,89,90,91,93,94,95,96,98,99,100,101,102,103,104,105,106,109,110,112,113,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,135,136,137,138,140,143,144,145,146,147,150,154,155,156,157,158,159,160,161,162,163],yourself:[2,61,163],ypo:44,yukawa:104,z_i:[114,158,162],z_j:[158,162],z_meam:135,zannoni:118,zbl:[135,149],zblcut:158,zblcutinn:149,zblcutout:149,zblexpscal:158,zblz:149,zero:[2,3,10,11,19,24,25,29,32,34,36,37,38,39,40,41,42,43,44,45,47,54,56,57,59,61,62,63,66,67,68,69,73,74,76,77,80,81,82,88,92,93,98,99,100,101,102,104,106,109,110,111,114,118,120,121,123,125,127,128,131,133,134,135,138,140,146,147,148,154,159,162],zeta:[67,115],zfactor:57,zhang:119,zhi:[2,82],zhi_bound:2,zhou:[98,115,145,156,158],zhu:153,ziegler:[135,158,162],zimmerman2004:58,zimmerman2010:58,zimmerman:[29,58,98],zlim:148,zlo:[2,82],zlo_bound:2,zmax:67,zmin:67,zn2:43,zone:40,zoom:57,zr4:43,zwall:82,zwall_veloc:67},titles:["LAMMPS Documentation","5. Accelerating LAMMPS performance","6. How-to discussions","11. Python interface to LAMMPS","5.USER-INTEL package","angle_style charmm command","angle_style class2 command","angle_style cosine command","angle_style cosine/delta command","angle_style cosine/periodic command","angle_style cosine/shift command","angle_style cosine/shift/exp command","angle_style cosine/squared command","angle_style dipole command","angle_style fourier command","angle_style fourier/simple command","angle_style harmonic command","angle_style quartic command","angle_style sdk command","balance command","bond_style class2 command","bond_style fene command","bond_style fene/expand command","bond_style harmonic command","bond_style harmonic/shift command","bond_style harmonic/shift/cut command","bond_style morse command","bond_style nonlinear command","bond_style quartic command","compute centro/atom command","compute cna/atom command","compute dpd command","compute fep command","compute gyration command","compute gyration/chunk command","compute heat/flux command","compute hexorder/atom command","compute msd/nongauss command","compute orientorder/atom command","compute pressure command","compute saed command","compute sna/atom command","compute stress/atom command","compute xrd command","create_atoms command","dihedral_style charmm command","dihedral_style class2 command","dihedral_style cosine/shift/exp command","dihedral_style fourier command","dihedral_style harmonic command","dihedral_style helix command","dihedral_style multi/harmonic command","dihedral_style nharmonic command","dihedral_style opls command","dihedral_style quadratic command","dihedral_style spherical command","dihedral_style command","dump image command","fix atc command","fix balance command","fix bond/swap command","fix box/relax command","fix controller command","fix ehex command","fix eos/cv command","fix eos/table/rx command","fix gld command","fix lb/fluid command","fix nvt command","fix nphug command","fix nve/manifold/rattle command","fix nvt/manifold/rattle command","fix orient/fcc command","fix pimd command","fix qbmsst command","fix restrain command","fix rx command","fix shake command","fix spring/rg command","fix ti/rs command","fix ti/spring command","fix ttm command","fix wall/lj93 command","fix wall/region command","improper_style class2 command","improper_style cossq command","improper_style cvff command","improper_style distance command","improper_style fourier command","improper_style harmonic command","improper_style ring command","improper_style umbrella command","minimize command","neb command","pair_style adp command","pair_style airebo command","pair_style beck command","pair_style body command","pair_style bop command","pair_style born command","pair_style buck command","pair_style buck/long/coul/long command","pair_style lj/charmm/coul/charmm command","pair_style lj/class2 command","pair_style colloid command","pair_style comb command","pair_style coul/cut command","pair_style coul/diel command","pair_style born/coul/long/cs command","pair_style lj/cut/dipole/cut command","pair_style dpd command","pair_style dpd/fdt command","pair_style eam command","pair_style edip command","pair_style eff/cut command","pair_style eim command","pair_style exp6/rx command","pair_style gauss command","pair_style gayberne command","pair_style gran/hooke command","pair_style lj/gromacs command","pair_style hbond/dreiding/lj command","pair_style list command","pair_style lj/cut command","pair_style lj96/cut command","pair_style lj/cubic command","pair_style lj/expand command","pair_style lj/long/coul/long command","pair_style lj/sf command","pair_style lj/smooth command","pair_style lj/smooth/linear command","pair_style lj/cut/soft command","pair_style lubricate command","pair_style lubricateU command","pair_style lj/mdf command","pair_style meam command","pair_style meam/spline","pair_style meam/sw/spline","pair_style mgpt command","pair_style mie/cut command","pair_style morse command","pair_style multi/lucy command","pair_style multi/lucy/rx command","pair_style nb3b/harmonic command","pair_style nm/cut command","pair_style polymorphic command","pair_style resquared command","pair_style lj/sdk command","pair_style smtbq command","pair_style snap command","pair_style soft command","pair_style sph/idealgas command","pair_style sph/taitwater command","pair_style sph/taitwater/morris command","pair_style srp command","pair_style sw command","pair_style tersoff command","pair_style tersoff/mod command","pair_style tersoff/zbl command","pair_style vashishta command","pair_style yukawa command","pair_style yukawa/colloid command","pair_style zbl command","LAMMPS GitHub tutorial"],titleterms:{"default":[29,32,36,37,38,40,41,43,44,56,57,58,61,66,67,68,69,73,74,79,80,82,98,114,132,133,138,154],"long":[99,100,101,102,103,106,108,109,123,127,131,144,147],acceler:1,adiabat:2,adp:94,airebo:95,alloi:112,amber:2,angle_styl:[5,6,7,8,9,10,11,12,13,14,15,16,17,18],arrai:2,aspher:2,atc:58,atom:[2,29,30,36,38,41,42],aug:0,balanc:[19,59],barostat:2,bcc:72,beck:96,between:2,bodi:[2,97],bond:60,bond_styl:[20,21,22,23,24,25,26,27,28],bop:98,born:[99,108],box:[2,61],buck:[100,101,108,134],build:3,calcul:2,centro:29,charmm:[2,5,45,102,131],chunk:[2,34],class2:[6,20,46,84,103],cna:30,code:2,coeffici:2,colloid:[82,104,161],comb3:105,comb:105,command:[2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],comparison:1,compos:2,comput:[2,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],conduct:2,constant:2,control:62,core:2,cosin:[7,8,9,10,11,12,47],cossq:85,coul:[99,100,101,102,103,106,107,108,120,123,127,131,144,147],coupl:2,create_atom:44,cubic:125,cut:[25,100,103,106,109,114,117,123,124,131,139,144],cvff:86,data:2,deby:[106,123],delta:8,descript:[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],diel:107,diffus:2,dihedral_styl:[45,46,47,48,49,50,51,52,53,54,55,56],dipol:[2,13,109],discuss:2,disp:2,distanc:87,document:0,dpd:[31,110,111],dreid:121,dreiding:2,drude:2,dsf:[106,123],dump:[2,57],eam:112,edip:113,eff:114,ehex:63,eim:115,elastic:2,energi:111,exampl:[2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],exp6:116,exp:[11,47],expand:[22,126],extend:3,fcc:72,fdt:111,fene:[21,22],fep:32,field:2,file:2,finit:2,fix:[2,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83],fix_modifi:[58,59,61,62,63,67,68,69,70,71,72,74,75,77,78,79,80,81,82,83],flow:2,fluid:67,flux:35,forc:2,fourier:[14,15,48,88],from:[2,3],gauss:117,gaybern:118,gener:[1,2],github:163,gld:66,global:2,gpu:[96,99,100,102,103,104,106,109,110,112,117,118,120,123,124,125,126,139,140,146,147,150,155,156,157,158,160,161,162],gran:119,granular:2,gromac:120,gyrat:[33,34],harmon:[16,23,24,25,49,51,82,89,143],hbond:121,heat:35,helix:50,hertz:119,hexord:36,histori:119,hook:119,how:2,idealga:151,imag:57,implicit:102,improper_styl:[84,85,86,87,88,89,90,91],indice:0,induc:2,info:[0,58,59,61,62,63,67,68,69,70,71,72,74,75,77,78,79,80,81,82,83],input:2,install:3,integr:2,intel:[4,5,16,21,23,45,49,53,68,86,89,100,102,118,123,155,156],interfac:[2,3],kspace_styl:2,lammps:[0,1,2,3,163],lennard:134,librari:[2,3],linear:[130,140],list:122,lj1043:82,lj126:82,lj93:82,lj96:124,local:2,lubric:132,lubricateu:133,luci:[141,142],manifold:[70,71],mdf:134,meam:[135,136,137],measur:1,mgpt:138,mie:139,minim:[58,59,61,62,63,67,68,69,70,71,72,74,75,77,78,79,80,81,82,83,92],mod:[81,157],model:2,morri:153,mors:[26,95,121,140],movi:57,mpi:3,msd:37,msm:[99,100,102,106,123],multi:[2,51,141,142],multipl:2,nb3b:143,neb:93,nemd:2,nharmon:52,non:2,nongauss:37,nonlinear:27,nph:68,nphug:69,npt:68,nve:70,nvt:[68,71],omp:[5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,45,46,47,48,49,50,51,52,53,54,68,69,84,85,86,88,89,90,91,94,95,96,99,100,101,102,103,104,105,106,107,109,110,112,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,136,137,140,143,144,146,147,150,155,156,157,158,159,160,161,162],opl:53,opt:[102,112,123,127,140],optim:1,option:2,orient:72,orientord:38,orthogon:2,other:2,output:[2,58,59,61,62,63,67,68,69,70,71,72,74,75,77,78,79,80,81,82,83],overview:3,packag:[1,4],pair:2,pair_styl:[94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],parallel:3,paramet:2,particl:2,per:2,perform:1,period:9,pimd:73,polariz:2,poli:[132,133],polymorph:145,potenti:2,pppm:2,pressur:39,process:2,properti:2,python:3,qbmsst:74,quadrat:54,quantiti:2,quartic:[17,28],rattl:[70,71,77],rebo:95,region:83,relat:[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,74,76,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,149,150,151,152,153,154,155,156,157,158,159,160,161,162],relax:61,replica:2,resquar:146,restart:[2,58,59,61,62,63,67,68,69,70,71,72,74,75,77,78,79,80,81,82,83],restrain:75,restrict:[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,149,150,151,152,153,154,155,156,157,158,159,160,161,162],rigid:2,ring:90,run:[2,3,58,59,61,62,63,67,68,69,70,71,72,74,75,77,78,79,80,81,82,83],scalar:2,script:[2,3],sdk:[18,147],serial:3,set:2,shake:77,share:3,shell:2,shift:[10,11,24,25,47],simpl:15,simul:2,size:2,smooth:[129,130,140],smtbq:148,sna:41,snad:41,snap:149,snapshot:2,snav:41,soft:[131,140,150],spc:2,sph:[151,152,153],spheric:[2,55],spline:[136,137],spring:[78,80],squar:12,srp:154,start:[58,59,61,62,63,67,68,69,70,71,72,74,75,77,78,79,80,81,82,83],stop:[58,59,61,62,63,67,68,69,70,71,72,74,75,77,78,79,80,81,82,83],strategi:1,streitz:106,stress:42,style:[1,2],summari:2,swap:60,syntax:[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],system:2,tabl:[0,2,65,156],taitwat:[152,153],temperatur:2,tersoff:[156,157,158],test:3,thermal:2,thermo:2,thermodynam:2,thermostat:2,time:2,tip3p:2,tip4p:[2,106,123,127,131],triclin:2,tstat:110,ttm:81,tutori:163,umbrella:91,user:4,using:[2,3],valu:2,variabl:2,variou:1,vashishta:159,vector:2,version:0,viscos:2,visual:2,wall:[2,82,83],water:2,wolf:[99,106],wrapper:3,write:2,xrd:43,yukawa:[160,161],zbl:[158,162]}})
\ No newline at end of file
diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt
index 3e028883a..adf6b5c47 100644
--- a/doc/src/Manual.txt
+++ b/doc/src/Manual.txt
@@ -1,303 +1,303 @@
<!-- HTML_ONLY -->
<HEAD>
<TITLE>LAMMPS Users Manual</TITLE>
-<META NAME="docnumber" CONTENT="20 Aug 2016 version">
+<META NAME="docnumber" CONTENT="27 Aug 2016 version">
<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.">
</HEAD>
<BODY>
<!-- END_HTML_ONLY -->
"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
<H1></H1>
LAMMPS Documentation :c,h3
-20 Aug 2016 version :c,h4
+27 Aug 2016 version :c,h4
Version info: :h4
The LAMMPS "version" is the date when it was released, such as 1 May
2010. LAMMPS is updated continuously. Whenever we fix a bug or add a
feature, we release it immediately, and post a notice on "this page of
the WWW site"_bug. Each dated copy of LAMMPS contains all the
features and bug-fixes up to and including that version date. The
version date is printed to the screen and logfile every time you run
LAMMPS. It is also in the file src/version.h and in the LAMMPS
directory name created when you unpack a tarball, and at the top of
the first page of the manual (this page).
If you browse the HTML doc pages on the LAMMPS WWW site, they always
describe the most current version of LAMMPS. :ulb,l
If you browse the HTML doc pages included in your tarball, they
describe the version you have. :l
The "PDF file"_Manual.pdf on the WWW site or in the tarball is updated
about once per month. This is because it is large, and we don't want
it to be part of every patch. :l
There is also a "Developer.pdf"_Developer.pdf file in the doc
directory, which describes the internal structure and algorithms of
LAMMPS. :ule,l
LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel
Simulator.
LAMMPS is a classical molecular dynamics simulation code designed to
run efficiently on parallel computers. It was developed at Sandia
National Laboratories, a US Department of Energy facility, with
funding from the DOE. It is an open-source code, distributed freely
under the terms of the GNU Public License (GPL).
The primary developers of LAMMPS are "Steve Plimpton"_sjp, Aidan
Thompson, and Paul Crozier who can be contacted at
sjplimp,athomps,pscrozi at sandia.gov. The "LAMMPS WWW Site"_lws at
http://lammps.sandia.gov has more information about the code and its
uses.
:link(bug,http://lammps.sandia.gov/bug.html)
:link(sjp,http://www.sandia.gov/~sjplimp)
:line
The LAMMPS documentation is organized into the following sections. If
you find errors or omissions in this manual or have suggestions for
useful information to add, please send an email to the developers so
we can improve the LAMMPS documentation.
Once you are familiar with LAMMPS, you may want to bookmark "this
page"_Section_commands.html#comm at Section_commands.html#comm since
it gives quick access to documentation for all LAMMPS commands.
"PDF file"_Manual.pdf of the entire manual, generated by
"htmldoc"_http://freecode.com/projects/htmldoc
<!-- RST
.. toctree::
:maxdepth: 2
:numbered:
Section_intro
Section_start
Section_commands
Section_packages
Section_accelerate
Section_howto
Section_example
Section_perf
Section_tools
Section_modify
Section_python
Section_errors
Section_history
Indices and tables
==================
* :ref:`genindex`
* :ref:`search`
END_RST -->
<!-- HTML_ONLY -->
"Introduction"_Section_intro.html :olb,l
1.1 "What is LAMMPS"_intro_1 :ulb,b
1.2 "LAMMPS features"_intro_2 :b
1.3 "LAMMPS non-features"_intro_3 :b
1.4 "Open source distribution"_intro_4 :b
1.5 "Acknowledgments and citations"_intro_5 :ule,b
"Getting started"_Section_start.html :l
2.1 "What's in the LAMMPS distribution"_start_1 :ulb,b
2.2 "Making LAMMPS"_start_2 :b
2.3 "Making LAMMPS with optional packages"_start_3 :b
2.4 "Building LAMMPS via the Make.py script"_start_4 :b
2.5 "Building LAMMPS as a library"_start_5 :b
2.6 "Running LAMMPS"_start_6 :b
2.7 "Command-line options"_start_7 :b
2.8 "Screen output"_start_8 :b
2.9 "Tips for users of previous versions"_start_9 :ule,b
"Commands"_Section_commands.html :l
3.1 "LAMMPS input script"_cmd_1 :ulb,b
3.2 "Parsing rules"_cmd_2 :b
3.3 "Input script structure"_cmd_3 :b
3.4 "Commands listed by category"_cmd_4 :b
3.5 "Commands listed alphabetically"_cmd_5 :ule,b
"Packages"_Section_packages.html :l
4.1 "Standard packages"_pkg_1 :ulb,b
4.2 "User packages"_pkg_2 :ule,b
"Accelerating LAMMPS performance"_Section_accelerate.html :l
5.1 "Measuring performance"_acc_1 :ulb,b
5.2 "Algorithms and code options to boost performace"_acc_2 :b
5.3 "Accelerator packages with optimized styles"_acc_3 :b
5.3.1 "GPU package"_accelerate_gpu.html :ulb,b
5.3.2 "USER-INTEL package"_accelerate_intel.html :b
5.3.3 "KOKKOS package"_accelerate_kokkos.html :b
5.3.4 "USER-OMP package"_accelerate_omp.html :b
5.3.5 "OPT package"_accelerate_opt.html :ule,b
5.4 "Comparison of various accelerator packages"_acc_4 :ule,b
"How-to discussions"_Section_howto.html :l
6.1 "Restarting a simulation"_howto_1 :ulb,b
6.2 "2d simulations"_howto_2 :b
6.3 "CHARMM and AMBER force fields"_howto_3 :b
6.4 "Running multiple simulations from one input script"_howto_4 :b
6.5 "Multi-replica simulations"_howto_5 :b
6.6 "Granular models"_howto_6 :b
6.7 "TIP3P water model"_howto_7 :b
6.8 "TIP4P water model"_howto_8 :b
6.9 "SPC water model"_howto_9 :b
6.10 "Coupling LAMMPS to other codes"_howto_10 :b
6.11 "Visualizing LAMMPS snapshots"_howto_11 :b
6.12 "Triclinic (non-orthogonal) simulation boxes"_howto_12 :b
6.13 "NEMD simulations"_howto_13 :b
6.14 "Finite-size spherical and aspherical particles"_howto_14 :b
6.15 "Output from LAMMPS (thermo, dumps, computes, fixes, variables)"_howto_15 :b
6.16 "Thermostatting, barostatting, and compute temperature"_howto_16 :b
6.17 "Walls"_howto_17 :b
6.18 "Elastic constants"_howto_18 :b
6.19 "Library interface to LAMMPS"_howto_19 :b
6.20 "Calculating thermal conductivity"_howto_20 :b
6.21 "Calculating viscosity"_howto_21 :b
6.22 "Calculating a diffusion coefficient"_howto_22 :b
6.23 "Using chunks to calculate system properties"_howto_23 :b
6.24 "Setting parameters for pppm/disp"_howto_24 :b
6.25 "Polarizable models"_howto_25 :b
6.26 "Adiabatic core/shell model"_howto_26 :b
6.27 "Drude induced dipoles"_howto_27 :ule,b
"Example problems"_Section_example.html :l
"Performance & scalability"_Section_perf.html :l
"Additional tools"_Section_tools.html :l
"Modifying & extending LAMMPS"_Section_modify.html :l
10.1 "Atom styles"_mod_1 :ulb,b
10.2 "Bond, angle, dihedral, improper potentials"_mod_2 :b
10.3 "Compute styles"_mod_3 :b
10.4 "Dump styles"_mod_4 :b
10.5 "Dump custom output options"_mod_5 :b
10.6 "Fix styles"_mod_6 :b
10.7 "Input script commands"_mod_7 :b
10.8 "Kspace computations"_mod_8 :b
10.9 "Minimization styles"_mod_9 :b
10.10 "Pairwise potentials"_mod_10 :b
10.11 "Region styles"_mod_11 :b
10.12 "Body styles"_mod_12 :b
10.13 "Thermodynamic output options"_mod_13 :b
10.14 "Variable options"_mod_14 :b
10.15 "Submitting new features for inclusion in LAMMPS"_mod_15 :ule,b
"Python interface"_Section_python.html :l
11.1 "Overview of running LAMMPS from Python"_py_1 :ulb,b
11.2 "Overview of using Python from a LAMMPS script"_py_2 :b
11.3 "Building LAMMPS as a shared library"_py_3 :b
11.4 "Installing the Python wrapper into Python"_py_4 :b
11.5 "Extending Python with MPI to run in parallel"_py_5 :b
11.6 "Testing the Python-LAMMPS interface"_py_6 :b
11.7 "Using LAMMPS from Python"_py_7 :b
11.8 "Example Python scripts that use LAMMPS"_py_8 :ule,b
"Errors"_Section_errors.html :l
12.1 "Common problems"_err_1 :ulb,b
12.2 "Reporting bugs"_err_2 :b
12.3 "Error & warning messages"_err_3 :ule,b
"Future and history"_Section_history.html :l
13.1 "Coming attractions"_hist_1 :ulb,b
13.2 "Past versions"_hist_2 :ule,b
:ole
:link(intro_1,Section_intro.html#intro_1)
:link(intro_2,Section_intro.html#intro_2)
:link(intro_3,Section_intro.html#intro_3)
:link(intro_4,Section_intro.html#intro_4)
:link(intro_5,Section_intro.html#intro_5)
:link(start_1,Section_start.html#start_1)
:link(start_2,Section_start.html#start_2)
:link(start_3,Section_start.html#start_3)
:link(start_4,Section_start.html#start_4)
:link(start_5,Section_start.html#start_5)
:link(start_6,Section_start.html#start_6)
:link(start_7,Section_start.html#start_7)
:link(start_8,Section_start.html#start_8)
:link(start_9,Section_start.html#start_9)
:link(cmd_1,Section_commands.html#cmd_1)
:link(cmd_2,Section_commands.html#cmd_2)
:link(cmd_3,Section_commands.html#cmd_3)
:link(cmd_4,Section_commands.html#cmd_4)
:link(cmd_5,Section_commands.html#cmd_5)
:link(pkg_1,Section_packages.html#pkg_1)
:link(pkg_2,Section_packages.html#pkg_2)
:link(acc_1,Section_accelerate.html#acc_1)
:link(acc_2,Section_accelerate.html#acc_2)
:link(acc_3,Section_accelerate.html#acc_3)
:link(acc_4,Section_accelerate.html#acc_4)
:link(howto_1,Section_howto.html#howto_1)
:link(howto_2,Section_howto.html#howto_2)
:link(howto_3,Section_howto.html#howto_3)
:link(howto_4,Section_howto.html#howto_4)
:link(howto_5,Section_howto.html#howto_5)
:link(howto_6,Section_howto.html#howto_6)
:link(howto_7,Section_howto.html#howto_7)
:link(howto_8,Section_howto.html#howto_8)
:link(howto_9,Section_howto.html#howto_9)
:link(howto_10,Section_howto.html#howto_10)
:link(howto_11,Section_howto.html#howto_11)
:link(howto_12,Section_howto.html#howto_12)
:link(howto_13,Section_howto.html#howto_13)
:link(howto_14,Section_howto.html#howto_14)
:link(howto_15,Section_howto.html#howto_15)
:link(howto_16,Section_howto.html#howto_16)
:link(howto_17,Section_howto.html#howto_17)
:link(howto_18,Section_howto.html#howto_18)
:link(howto_19,Section_howto.html#howto_19)
:link(howto_20,Section_howto.html#howto_20)
:link(howto_21,Section_howto.html#howto_21)
:link(howto_22,Section_howto.html#howto_22)
:link(howto_23,Section_howto.html#howto_23)
:link(howto_24,Section_howto.html#howto_24)
:link(howto_25,Section_howto.html#howto_25)
:link(howto_26,Section_howto.html#howto_26)
:link(howto_27,Section_howto.html#howto_27)
:link(mod_1,Section_modify.html#mod_1)
:link(mod_2,Section_modify.html#mod_2)
:link(mod_3,Section_modify.html#mod_3)
:link(mod_4,Section_modify.html#mod_4)
:link(mod_5,Section_modify.html#mod_5)
:link(mod_6,Section_modify.html#mod_6)
:link(mod_7,Section_modify.html#mod_7)
:link(mod_8,Section_modify.html#mod_8)
:link(mod_9,Section_modify.html#mod_9)
:link(mod_10,Section_modify.html#mod_10)
:link(mod_11,Section_modify.html#mod_11)
:link(mod_12,Section_modify.html#mod_12)
:link(mod_13,Section_modify.html#mod_13)
:link(mod_14,Section_modify.html#mod_14)
:link(mod_15,Section_modify.html#mod_15)
:link(py_1,Section_python.html#py_1)
:link(py_2,Section_python.html#py_2)
:link(py_3,Section_python.html#py_3)
:link(py_4,Section_python.html#py_4)
:link(py_5,Section_python.html#py_5)
:link(py_6,Section_python.html#py_6)
:link(err_1,Section_errors.html#err_1)
:link(err_2,Section_errors.html#err_2)
:link(err_3,Section_errors.html#err_3)
:link(hist_1,Section_history.html#hist_1)
:link(hist_2,Section_history.html#hist_2)
<!-- END_HTML_ONLY -->
</BODY>
diff --git a/doc/src/Section_commands.txt b/doc/src/Section_commands.txt
index 9f8ab7d5f..2b9df3f9a 100644
--- a/doc/src/Section_commands.txt
+++ b/doc/src/Section_commands.txt
@@ -1,1135 +1,1136 @@
"Previous Section"_Section_start.html - "LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc - "Next Section"_Section_packages.html :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
3. Commands :h3
This section describes how a LAMMPS input script is formatted and the
input script commands used to define a LAMMPS simulation.
3.1 "LAMMPS input script"_#cmd_1
3.2 "Parsing rules"_#cmd_2
3.3 "Input script structure"_#cmd_3
3.4 "Commands listed by category"_#cmd_4
3.5 "Commands listed alphabetically"_#cmd_5 :all(b)
:line
:line
3.1 LAMMPS input script :link(cmd_1),h4
LAMMPS executes by reading commands from a input script (text file),
one line at a time. When the input script ends, LAMMPS exits. Each
command causes LAMMPS to take some action. It may set an internal
variable, read in a file, or run a simulation. Most commands have
default settings, which means you only need to use the command if you
wish to change the default.
In many cases, the ordering of commands in an input script is not
important. However the following rules apply:
(1) LAMMPS does not read your entire input script and then perform a
simulation with all the settings. Rather, the input script is read
one line at a time and each command takes effect when it is read.
Thus this sequence of commands:
timestep 0.5
run 100
run 100 :pre
does something different than this sequence:
run 100
timestep 0.5
run 100 :pre
In the first case, the specified timestep (0.5 fmsec) is used for two
simulations of 100 timesteps each. In the 2nd case, the default
timestep (1.0 fmsec) is used for the 1st 100 step simulation and a 0.5
fmsec timestep is used for the 2nd one.
(2) Some commands are only valid when they follow other commands. For
example you cannot set the temperature of a group of atoms until atoms
have been defined and a group command is used to define which atoms
belong to the group.
(3) Sometimes command B will use values that can be set by command A.
This means command A must precede command B in the input script if it
is to have the desired effect. For example, the
"read_data"_read_data.html command initializes the system by setting
up the simulation box and assigning atoms to processors. If default
values are not desired, the "processors"_processors.html and
"boundary"_boundary.html commands need to be used before read_data to
tell LAMMPS how to map processors to the simulation box.
Many input script errors are detected by LAMMPS and an ERROR or
WARNING message is printed. "This section"_Section_errors.html gives
more information on what errors mean. The documentation for each
command lists restrictions on how the command can be used.
:line
3.2 Parsing rules :link(cmd_2),h4
Each non-blank line in the input script is treated as a command.
LAMMPS commands are case sensitive. Command names are lower-case, as
are specified command arguments. Upper case letters may be used in
file names or user-chosen ID strings.
Here is how each line in the input script is parsed by LAMMPS:
(1) If the last printable character on the line is a "&" character,
the command is assumed to continue on the next line. The next line is
concatenated to the previous line by removing the "&" character and
line break. This allows long commands to be continued across two or
more lines. See the discussion of triple quotes in (6) for how to
continue a command across multiple line without using "&" characters.
(2) All characters from the first "#" character onward are treated as
comment and discarded. See an exception in (6). Note that a
comment after a trailing "&" character will prevent the command from
continuing on the next line. Also note that for multi-line commands a
single leading "#" will comment out the entire command.
(3) The line is searched repeatedly for $ characters, which indicate
variables that are replaced with a text string. See an exception in
(6).
If the $ is followed by curly brackets, then the variable name is the
text inside the curly brackets. If no curly brackets follow the $,
then the variable name is the single character immediately following
the $. Thus $\{myTemp\} and $x refer to variable names "myTemp" and
"x".
How the variable is converted to a text string depends on what style
of variable it is; see the "variable"_variable doc page for details.
It can be a variable that stores multiple text strings, and return one
of them. The returned text string can be multiple "words" (space
separated) which will then be interpreted as multiple arguments in the
input command. The variable can also store a numeric formula which
will be evaluated and its numeric result returned as a string.
As a special case, if the $ is followed by parenthesis, then the text
inside the parenthesis is treated as an "immediate" variable and
evaluated as an "equal-style variable"_variable.html. This is a way
to use numeric formulas in an input script without having to assign
them to variable names. For example, these 3 input script lines:
variable X equal (xlo+xhi)/2+sqrt(v_area)
region 1 block $X 2 INF INF EDGE EDGE
variable X delete :pre
can be replaced by
region 1 block $((xlo+xhi)/2+sqrt(v_area)) 2 INF INF EDGE EDGE :pre
so that you do not have to define (or discard) a temporary variable X.
Note that neither the curly-bracket or immediate form of variables can
contain nested $ characters for other variables to substitute for.
Thus you cannot do this:
variable a equal 2
variable b2 equal 4
print "B2 = $\{b$a\}" :pre
Nor can you specify this $($x-1.0) for an immediate variable, but
you could use $(v_x-1.0), since the latter is valid syntax for an
"equal-style variable"_variable.html.
See the "variable"_variable.html command for more details of how
strings are assigned to variables and evaluated, and how they can be
used in input script commands.
(4) The line is broken into "words" separated by whitespace (tabs,
spaces). Note that words can thus contain letters, digits,
underscores, or punctuation characters.
(5) The first word is the command name. All successive words in the
line are arguments.
(6) If you want text with spaces to be treated as a single argument,
it can be enclosed in either single or double or triple quotes. A
long single argument enclosed in single or double quotes can span
multiple lines if the "&" character is used, as described above. When
the lines are concatenated together (and the "&" characters and line
breaks removed), the text will become a single line. If you want
multiple lines of an argument to retain their line breaks, the text
can be enclosed in triple quotes, in which case "&" characters are not
needed. For example:
print "Volume = $v"
print 'Volume = $v'
if "$\{steps\} > 1000" then quit
variable a string "red green blue &
purple orange cyan"
print """
System volume = $v
System temperature = $t
""" :pre
In each case, the single, double, or triple quotes are removed when
the single argument they enclose is stored internally.
See the "dump modify format"_dump_modify.html, "print"_print.html,
"if"_if.html, and "python"_python.html commands for examples.
A "#" or "$" character that is between quotes will not be treated as a
comment indicator in (2) or substituted for as a variable in (3).
NOTE: If the argument is itself a command that requires a quoted
argument (e.g. using a "print"_print.html command as part of an
"if"_if.html or "run every"_run.html command), then single, double, or
triple quotes can be nested in the usual manner. See the doc pages
for those commands for examples. Only one of level of nesting is
allowed, but that should be sufficient for most use cases.
:line
3.3 Input script structure :h4,link(cmd_3)
This section describes the structure of a typical LAMMPS input script.
The "examples" directory in the LAMMPS distribution contains many
sample input scripts; the corresponding problems are discussed in
"Section_example"_Section_example.html, and animated on the "LAMMPS
WWW Site"_lws.
A LAMMPS input script typically has 4 parts:
Initialization
Atom definition
Settings
Run a simulation :ol
The last 2 parts can be repeated as many times as desired. I.e. run a
simulation, change some settings, run some more, etc. Each of the 4
parts is now described in more detail. Remember that almost all the
commands need only be used if a non-default value is desired.
(1) Initialization
Set parameters that need to be defined before atoms are created or
read-in from a file.
The relevant commands are "units"_units.html,
"dimension"_dimension.html, "newton"_newton.html,
"processors"_processors.html, "boundary"_boundary.html,
"atom_style"_atom_style.html, "atom_modify"_atom_modify.html.
If force-field parameters appear in the files that will be read, these
commands tell LAMMPS what kinds of force fields are being used:
"pair_style"_pair_style.html, "bond_style"_bond_style.html,
"angle_style"_angle_style.html, "dihedral_style"_dihedral_style.html,
"improper_style"_improper_style.html.
(2) Atom definition
There are 3 ways to define atoms in LAMMPS. Read them in from a data
or restart file via the "read_data"_read_data.html or
"read_restart"_read_restart.html commands. These files can contain
molecular topology information. Or create atoms on a lattice (with no
molecular topology), using these commands: "lattice"_lattice.html,
"region"_region.html, "create_box"_create_box.html,
"create_atoms"_create_atoms.html. The entire set of atoms can be
duplicated to make a larger simulation using the
"replicate"_replicate.html command.
(3) Settings
Once atoms and molecular topology are defined, a variety of settings
can be specified: force field coefficients, simulation parameters,
output options, etc.
Force field coefficients are set by these commands (they can also be
set in the read-in files): "pair_coeff"_pair_coeff.html,
"bond_coeff"_bond_coeff.html, "angle_coeff"_angle_coeff.html,
"dihedral_coeff"_dihedral_coeff.html,
"improper_coeff"_improper_coeff.html,
"kspace_style"_kspace_style.html, "dielectric"_dielectric.html,
"special_bonds"_special_bonds.html.
Various simulation parameters are set by these commands:
"neighbor"_neighbor.html, "neigh_modify"_neigh_modify.html,
"group"_group.html, "timestep"_timestep.html,
"reset_timestep"_reset_timestep.html, "run_style"_run_style.html,
"min_style"_min_style.html, "min_modify"_min_modify.html.
Fixes impose a variety of boundary conditions, time integration, and
diagnostic options. The "fix"_fix.html command comes in many flavors.
Various computations can be specified for execution during a
simulation using the "compute"_compute.html,
"compute_modify"_compute_modify.html, and "variable"_variable.html
commands.
Output options are set by the "thermo"_thermo.html, "dump"_dump.html,
and "restart"_restart.html commands.
(4) Run a simulation
A molecular dynamics simulation is run using the "run"_run.html
command. Energy minimization (molecular statics) is performed using
the "minimize"_minimize.html command. A parallel tempering
(replica-exchange) simulation can be run using the
"temper"_temper.html command.
:line
3.4 Commands listed by category :link(cmd_4),h4
This section lists all LAMMPS commands, grouped by category. The
"next section"_#cmd_5 lists the same commands alphabetically. Note
that some style options for some commands are part of specific LAMMPS
packages, which means they cannot be used unless the package was
included when LAMMPS was built. Not all packages are included in a
default LAMMPS build. These dependencies are listed as Restrictions
in the command's documentation.
Initialization:
"atom_modify"_atom_modify.html, "atom_style"_atom_style.html,
"boundary"_boundary.html, "dimension"_dimension.html,
"newton"_newton.html, "processors"_processors.html, "units"_units.html
Atom definition:
"create_atoms"_create_atoms.html, "create_box"_create_box.html,
"lattice"_lattice.html, "read_data"_read_data.html,
"read_dump"_read_dump.html, "read_restart"_read_restart.html,
"region"_region.html, "replicate"_replicate.html
Force fields:
"angle_coeff"_angle_coeff.html, "angle_style"_angle_style.html,
"bond_coeff"_bond_coeff.html, "bond_style"_bond_style.html,
"dielectric"_dielectric.html, "dihedral_coeff"_dihedral_coeff.html,
"dihedral_style"_dihedral_style.html,
"improper_coeff"_improper_coeff.html,
"improper_style"_improper_style.html,
"kspace_modify"_kspace_modify.html, "kspace_style"_kspace_style.html,
"pair_coeff"_pair_coeff.html, "pair_modify"_pair_modify.html,
"pair_style"_pair_style.html, "pair_write"_pair_write.html,
"special_bonds"_special_bonds.html
Settings:
"comm_style"_comm_style.html, "group"_group.html, "mass"_mass.html,
"min_modify"_min_modify.html, "min_style"_min_style.html,
"neigh_modify"_neigh_modify.html, "neighbor"_neighbor.html,
"reset_timestep"_reset_timestep.html, "run_style"_run_style.html,
"set"_set.html, "timestep"_timestep.html, "velocity"_velocity.html
Fixes:
"fix"_fix.html, "fix_modify"_fix_modify.html, "unfix"_unfix.html
Computes:
"compute"_compute.html, "compute_modify"_compute_modify.html,
"uncompute"_uncompute.html
Output:
"dump"_dump.html, "dump image"_dump_image.html,
"dump_modify"_dump_modify.html, "dump movie"_dump_image.html,
"restart"_restart.html, "thermo"_thermo.html,
"thermo_modify"_thermo_modify.html, "thermo_style"_thermo_style.html,
"undump"_undump.html, "write_data"_write_data.html,
"write_dump"_write_dump.html, "write_restart"_write_restart.html
Actions:
"delete_atoms"_delete_atoms.html, "delete_bonds"_delete_bonds.html,
"displace_atoms"_displace_atoms.html, "change_box"_change_box.html,
"minimize"_minimize.html, "neb"_neb.html "prd"_prd.html,
"rerun"_rerun.html, "run"_run.html, "temper"_temper.html
Miscellaneous:
"clear"_clear.html, "echo"_echo.html, "if"_if.html,
"include"_include.html, "jump"_jump.html, "label"_label.html,
"log"_log.html, "next"_next.html, "print"_print.html,
"shell"_shell.html, "variable"_variable.html
:line
3.5 Individual commands :h4,link(cmd_5),link(comm)
This section lists all LAMMPS commands alphabetically, with a separate
listing below of styles within certain commands. The "previous
section"_#cmd_4 lists the same commands, grouped by category. Note
that some style options for some commands are part of specific LAMMPS
packages, which means they cannot be used unless the package was
included when LAMMPS was built. Not all packages are included in a
default LAMMPS build. These dependencies are listed as Restrictions
in the command's documentation.
"angle_coeff"_angle_coeff.html,
"angle_style"_angle_style.html,
"atom_modify"_atom_modify.html,
"atom_style"_atom_style.html,
"balance"_balance.html,
"bond_coeff"_bond_coeff.html,
"bond_style"_bond_style.html,
"bond_write"_bond_write.html,
"boundary"_boundary.html,
"box"_box.html,
"change_box"_change_box.html,
"clear"_clear.html,
"comm_modify"_comm_modify.html,
"comm_style"_comm_style.html,
"compute"_compute.html,
"compute_modify"_compute_modify.html,
"create_atoms"_create_atoms.html,
"create_bonds"_create_bonds.html,
"create_box"_create_box.html,
"delete_atoms"_delete_atoms.html,
"delete_bonds"_delete_bonds.html,
"dielectric"_dielectric.html,
"dihedral_coeff"_dihedral_coeff.html,
"dihedral_style"_dihedral_style.html,
"dimension"_dimension.html,
"displace_atoms"_displace_atoms.html,
"dump"_dump.html,
"dump image"_dump_image.html,
"dump_modify"_dump_modify.html,
"dump movie"_dump_image.html,
"echo"_echo.html,
"fix"_fix.html,
"fix_modify"_fix_modify.html,
"group"_group.html,
"if"_if.html,
"info"_info.html,
"improper_coeff"_improper_coeff.html,
"improper_style"_improper_style.html,
"include"_include.html,
"jump"_jump.html,
"kspace_modify"_kspace_modify.html,
"kspace_style"_kspace_style.html,
"label"_label.html,
"lattice"_lattice.html,
"log"_log.html,
"mass"_mass.html,
"minimize"_minimize.html,
"min_modify"_min_modify.html,
"min_style"_min_style.html,
"molecule"_molecule.html,
"neb"_neb.html,
"neigh_modify"_neigh_modify.html,
"neighbor"_neighbor.html,
"newton"_newton.html,
"next"_next.html,
"package"_package.html,
"pair_coeff"_pair_coeff.html,
"pair_modify"_pair_modify.html,
"pair_style"_pair_style.html,
"pair_write"_pair_write.html,
"partition"_partition.html,
"prd"_prd.html,
"print"_print.html,
"processors"_processors.html,
"python"_python.html,
"quit"_quit.html,
"read_data"_read_data.html,
"read_dump"_read_dump.html,
"read_restart"_read_restart.html,
"region"_region.html,
"replicate"_replicate.html,
"rerun"_rerun.html,
"reset_timestep"_reset_timestep.html,
"restart"_restart.html,
"run"_run.html,
"run_style"_run_style.html,
"set"_set.html,
"shell"_shell.html,
"special_bonds"_special_bonds.html,
"suffix"_suffix.html,
"tad"_tad.html,
"temper"_temper.html,
"thermo"_thermo.html,
"thermo_modify"_thermo_modify.html,
"thermo_style"_thermo_style.html,
"timer"_timer.html,
"timestep"_timestep.html,
"uncompute"_uncompute.html,
"undump"_undump.html,
"unfix"_unfix.html,
"units"_units.html,
"variable"_variable.html,
"velocity"_velocity.html,
"write_coeff"_write_coeff.html,
"write_data"_write_data.html,
"write_dump"_write_dump.html,
"write_restart"_write_restart.html :tb(c=6,ea=c)
These are additional commands in USER packages, which can be used if
"LAMMPS is built with the appropriate
package"_Section_start.html#start_3.
"dump custom/vtk"_dump_custom_vtk.html,
"group2ndx"_group2ndx.html,
"ndx2group"_group2ndx.html :tb(c=3,ea=c)
:line
Fix styles :h4
See the "fix"_fix.html command for one-line descriptions of each style
or click on the style itself for a full description. Some of the
styles have accelerated versions, which can be used if LAMMPS is built
with the "appropriate accelerated package"_Section_accelerate.html.
This is indicated by additional letters in parenthesis: g = GPU, i =
USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.
"adapt"_fix_adapt.html,
"addforce"_fix_addforce.html,
"append/atoms"_fix_append_atoms.html,
"atom/swap"_fix_atom_swap.html,
"aveforce"_fix_aveforce.html,
"ave/atom"_fix_ave_atom.html,
"ave/chunk"_fix_ave_chunk.html,
"ave/correlate"_fix_ave_correlate.html,
"ave/histo"_fix_ave_histo.html,
"ave/histo/weight"_fix_ave_histo.html,
"ave/time"_fix_ave_time.html,
"balance"_fix_balance.html,
"bond/break"_fix_bond_break.html,
"bond/create"_fix_bond_create.html,
"bond/swap"_fix_bond_swap.html,
"box/relax"_fix_box_relax.html,
"controller"_fix_controller.html,
"deform (k)"_fix_deform.html,
"deposit"_fix_deposit.html,
"drag"_fix_drag.html,
"dt/reset"_fix_dt_reset.html,
"efield"_fix_efield.html,
"ehex"_fix_ehex.html,
"enforce2d"_fix_enforce2d.html,
"evaporate"_fix_evaporate.html,
"external"_fix_external.html,
"freeze"_fix_freeze.html,
"gcmc"_fix_gcmc.html,
"gld"_fix_gld.html,
"gravity (o)"_fix_gravity.html,
"heat"_fix_heat.html,
"indent"_fix_indent.html,
"langevin (k)"_fix_langevin.html,
"lineforce"_fix_lineforce.html,
"momentum"_fix_momentum.html,
"move"_fix_move.html,
"msst"_fix_msst.html,
"neb"_fix_neb.html,
"nph (ko)"_fix_nh.html,
"nphug (o)"_fix_nphug.html,
"nph/asphere (o)"_fix_nph_asphere.html,
"nph/body"_fix_nph_body.html,
"nph/sphere (o)"_fix_nph_sphere.html,
"npt (kio)"_fix_nh.html,
"npt/asphere (o)"_fix_npt_asphere.html,
"npt/body"_fix_npt_body.html,
"npt/sphere (o)"_fix_npt_sphere.html,
"nve (kio)"_fix_nve.html,
"nve/asphere (i)"_fix_nve_asphere.html,
"nve/asphere/noforce"_fix_nve_asphere_noforce.html,
"nve/body"_fix_nve_body.html,
"nve/limit"_fix_nve_limit.html,
"nve/line"_fix_nve_line.html,
"nve/noforce"_fix_nve_noforce.html,
"nve/sphere (o)"_fix_nve_sphere.html,
"nve/tri"_fix_nve_tri.html,
"nvt (iko)"_fix_nh.html,
"nvt/asphere (o)"_fix_nvt_asphere.html,
"nvt/body"_fix_nvt_body.html,
"nvt/sllod (io)"_fix_nvt_sllod.html,
"nvt/sphere (o)"_fix_nvt_sphere.html,
"oneway"_fix_oneway.html,
"orient/bcc"_fix_orient.html,
"orient/fcc"_fix_orient.html,
"planeforce"_fix_planeforce.html,
"poems"_fix_poems.html,
"pour"_fix_pour.html,
"press/berendsen"_fix_press_berendsen.html,
"print"_fix_print.html,
"property/atom"_fix_property_atom.html,
"qeq/comb (o)"_fix_qeq_comb.html,
"qeq/dynamic"_fix_qeq.html,
"qeq/fire"_fix_qeq.html,
"qeq/point"_fix_qeq.html,
"qeq/shielded"_fix_qeq.html,
"qeq/slater"_fix_qeq.html,
"rattle"_fix_shake.html,
"reax/bonds"_fix_reax_bonds.html,
"recenter"_fix_recenter.html,
"restrain"_fix_restrain.html,
"rigid (o)"_fix_rigid.html,
"rigid/nph (o)"_fix_rigid.html,
"rigid/npt (o)"_fix_rigid.html,
"rigid/nve (o)"_fix_rigid.html,
"rigid/nvt (o)"_fix_rigid.html,
"rigid/small (o)"_fix_rigid.html,
"rigid/small/nph"_fix_rigid.html,
"rigid/small/npt"_fix_rigid.html,
"rigid/small/nve"_fix_rigid.html,
"rigid/small/nvt"_fix_rigid.html,
"setforce (k)"_fix_setforce.html,
"shake"_fix_shake.html,
"spring"_fix_spring.html,
"spring/chunk"_fix_spring_chunk.html,
"spring/rg"_fix_spring_rg.html,
"spring/self"_fix_spring_self.html,
"srd"_fix_srd.html,
"store/force"_fix_store_force.html,
"store/state"_fix_store_state.html,
"temp/berendsen"_fix_temp_berendsen.html,
"temp/csld"_fix_temp_csvr.html,
"temp/csvr"_fix_temp_csvr.html,
"temp/rescale"_fix_temp_rescale.html,
"tfmc"_fix_tfmc.html,
"thermal/conductivity"_fix_thermal_conductivity.html,
"tmd"_fix_tmd.html,
"ttm"_fix_ttm.html,
"tune/kspace"_fix_tune_kspace.html,
"vector"_fix_vector.html,
"viscosity"_fix_viscosity.html,
"viscous"_fix_viscous.html,
"wall/colloid"_fix_wall.html,
"wall/gran"_fix_wall_gran.html,
"wall/harmonic"_fix_wall.html,
"wall/lj1043"_fix_wall.html,
"wall/lj126"_fix_wall.html,
"wall/lj93"_fix_wall.html,
"wall/piston"_fix_wall_piston.html,
"wall/reflect (k)"_fix_wall_reflect.html,
"wall/region"_fix_wall_region.html,
"wall/srd"_fix_wall_srd.html :tb(c=8,ea=c)
These are additional fix styles in USER packages, which can be used if
"LAMMPS is built with the appropriate
package"_Section_start.html#start_3.
"adapt/fep"_fix_adapt_fep.html,
"addtorque"_fix_addtorque.html,
"atc"_fix_atc.html,
"ave/correlate/long"_fix_ave_correlate_long.html,
"colvars"_fix_colvars.html,
"drude"_fix_drude.html,
"drude/transform/direct"_fix_drude_transform.html,
"drude/transform/reverse"_fix_drude_transform.html,
"eos/cv"_fix_eos_cv.html,
"eos/table"_fix_eos_table.html,
"eos/table/rx"_fix_eos_table_rx.html,
+"flow/gauss"_fix_flow_gauss.html,
"gle"_fix_gle.html,
"imd"_fix_imd.html,
"ipi"_fix_ipi.html,
"langevin/drude"_fix_langevin_drude.html,
"langevin/eff"_fix_langevin_eff.html,
"lb/fluid"_fix_lb_fluid.html,
"lb/momentum"_fix_lb_momentum.html,
"lb/pc"_fix_lb_pc.html,
"lb/rigid/pc/sphere"_fix_lb_rigid_pc_sphere.html,
"lb/viscous"_fix_lb_viscous.html,
"meso"_fix_meso.html,
"manifoldforce"_fix_manifoldforce.html,
"meso/stationary"_fix_meso_stationary.html,
"nve/manifold/rattle"_fix_nve_manifold_rattle.html,
"nvt/manifold/rattle"_fix_nvt_manifold_rattle.html,
"nph/eff"_fix_nh_eff.html,
"npt/eff"_fix_nh_eff.html,
"nve/eff"_fix_nve_eff.html,
"nvt/eff"_fix_nh_eff.html,
"nvt/sllod/eff"_fix_nvt_sllod_eff.html,
"phonon"_fix_phonon.html,
"pimd"_fix_pimd.html,
"qbmsst"_fix_qbmsst.html,
"qeq/reax"_fix_qeq_reax.html,
"qmmm"_fix_qmmm.html,
"qtb"_fix_qtb.html,
"reax/c/bonds"_fix_reax_bonds.html,
"reax/c/species"_fix_reaxc_species.html,
"rx"_fix_rx.html,
"saed/vtk"_fix_saed_vtk.html,
"shardlow"_fix_shardlow.html,
"smd"_fix_smd.html,
"smd/adjust/dt"_fix_smd_adjust_dt.html,
"smd/integrate/tlsph"_fix_smd_integrate_tlsph.html,
"smd/integrate/ulsph"_fix_smd_integrate_ulsph.html,
"smd/move/triangulated/surface"_fix_smd_move_triangulated_surface.html,
"smd/setvel"_fix_smd_setvel.html,
"smd/tlsph/reference/configuration"_fix_smd_tlsph_reference_configuration.html,
"smd/wall/surface"_fix_smd_wall_surface.html,
"temp/rescale/eff"_fix_temp_rescale_eff.html,
"ti/rs"_fix_ti_rs.html,
"ti/spring"_fix_ti_spring.html,
"ttm/mod"_fix_ttm.html :tb(c=6,ea=c)
:line
Compute styles :h4
See the "compute"_compute.html command for one-line descriptions of
each style or click on the style itself for a full description. Some
of the styles have accelerated versions, which can be used if LAMMPS
is built with the "appropriate accelerated
package"_Section_accelerate.html. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k =
KOKKOS, o = USER-OMP, t = OPT.
"angle"_compute_angle.html,
"angle/local"_compute_angle_local.html,
"angmom/chunk"_compute_angmom_chunk.html,
"body/local"_compute_body_local.html,
"bond"_compute_bond.html,
"bond/local"_compute_bond_local.html,
"centro/atom"_compute_centro_atom.html,
"chunk/atom"_compute_chunk_atom.html,
"cluster/atom"_compute_cluster_atom.html,
"cna/atom"_compute_cna_atom.html,
"com"_compute_com.html,
"com/chunk"_compute_com_chunk.html,
"contact/atom"_compute_contact_atom.html,
"coord/atom"_compute_coord_atom.html,
"damage/atom"_compute_damage_atom.html,
"dihedral"_compute_dihedral.html,
"dihedral/local"_compute_dihedral_local.html,
"dilatation/atom"_compute_dilatation_atom.html,
"dipole/chunk"_compute_dipole_chunk.html,
"displace/atom"_compute_displace_atom.html,
"erotate/asphere"_compute_erotate_asphere.html,
"erotate/rigid"_compute_erotate_rigid.html,
"erotate/sphere"_compute_erotate_sphere.html,
"erotate/sphere/atom"_compute_erotate_sphere_atom.html,
"event/displace"_compute_event_displace.html,
"group/group"_compute_group_group.html,
"gyration"_compute_gyration.html,
"gyration/chunk"_compute_gyration_chunk.html,
"heat/flux"_compute_heat_flux.html,
"hexorder/atom"_compute_hexorder_atom.html,
"improper"_compute_improper.html,
"improper/local"_compute_improper_local.html,
"inertia/chunk"_compute_inertia_chunk.html,
"ke"_compute_ke.html,
"ke/atom"_compute_ke_atom.html,
"ke/rigid"_compute_ke_rigid.html,
"msd"_compute_msd.html,
"msd/chunk"_compute_msd_chunk.html,
"msd/nongauss"_compute_msd_nongauss.html,
"omega/chunk"_compute_omega_chunk.html,
"orientorder/atom"_compute_orientorder_atom.html,
"pair"_compute_pair.html,
"pair/local"_compute_pair_local.html,
"pe"_compute_pe.html,
"pe/atom"_compute_pe_atom.html,
"plasticity/atom"_compute_plasticity_atom.html,
"pressure"_compute_pressure.html,
"property/atom"_compute_property_atom.html,
"property/local"_compute_property_local.html,
"property/chunk"_compute_property_chunk.html,
"rdf"_compute_rdf.html,
"reduce"_compute_reduce.html,
"reduce/region"_compute_reduce.html,
"rigid/local"_compute_rigid_local.html,
"slice"_compute_slice.html,
"sna/atom"_compute_sna_atom.html,
"snad/atom"_compute_sna_atom.html,
"snav/atom"_compute_sna_atom.html,
"stress/atom"_compute_stress_atom.html,
"temp (k)"_compute_temp.html,
"temp/asphere"_compute_temp_asphere.html,
"temp/body"_compute_temp_body.html,
"temp/chunk"_compute_temp_chunk.html,
"temp/com"_compute_temp_com.html,
"temp/deform"_compute_temp_deform.html,
"temp/partial"_compute_temp_partial.html,
"temp/profile"_compute_temp_profile.html,
"temp/ramp"_compute_temp_ramp.html,
"temp/region"_compute_temp_region.html,
"temp/sphere"_compute_temp_sphere.html,
"ti"_compute_ti.html,
"torque/chunk"_compute_torque_chunk.html,
"vacf"_compute_vacf.html,
"vcm/chunk"_compute_vcm_chunk.html,
"voronoi/atom"_compute_voronoi_atom.html :tb(c=6,ea=c)
These are additional compute styles in USER packages, which can be
used if "LAMMPS is built with the appropriate
package"_Section_start.html#start_3.
"ackland/atom"_compute_ackland_atom.html,
"basal/atom"_compute_basal_atom.html,
"dpd"_compute_dpd.html,
"dpd/atom"_compute_dpd_atom.html,
"fep"_compute_fep.html,
"force/tally"_compute_tally.html,
"heat/flux/tally"_compute_tally.html,
"ke/eff"_compute_ke_eff.html,
"ke/atom/eff"_compute_ke_atom_eff.html,
"meso/e/atom"_compute_meso_e_atom.html,
"meso/rho/atom"_compute_meso_rho_atom.html,
"meso/t/atom"_compute_meso_t_atom.html,
"pe/tally"_compute_tally.html,
"pe/mol/tally"_compute_tally.html,
"saed"_compute_saed.html,
"smd/contact/radius"_compute_smd_contact_radius.html,
"smd/damage"_compute_smd_damage.html,
"smd/hourglass/error"_compute_smd_hourglass_error.html,
"smd/internal/energy"_compute_smd_internal_energy.html,
"smd/plastic/strain"_compute_smd_plastic_strain.html,
"smd/plastic/strain/rate"_compute_smd_plastic_strain_rate.html,
"smd/rho"_compute_smd_rho.html,
"smd/tlsph/defgrad"_compute_smd_tlsph_defgrad.html,
"smd/tlsph/dt"_compute_smd_tlsph_dt.html,
"smd/tlsph/num/neighs"_compute_smd_tlsph_num_neighs.html,
"smd/tlsph/shape"_compute_smd_tlsph_shape.html,
"smd/tlsph/strain"_compute_smd_tlsph_strain.html,
"smd/tlsph/strain/rate"_compute_smd_tlsph_strain_rate.html,
"smd/tlsph/stress"_compute_smd_tlsph_stress.html,
"smd/triangle/mesh/vertices"_compute_smd_triangle_mesh_vertices.html,
"smd/ulsph/num/neighs"_compute_smd_ulsph_num_neighs.html,
"smd/ulsph/strain"_compute_smd_ulsph_strain.html,
"smd/ulsph/strain/rate"_compute_smd_ulsph_strain_rate.html,
"smd/ulsph/stress"_compute_smd_ulsph_stress.html,
"smd/vol"_compute_smd_vol.html,
"stress/tally"_compute_tally.html,
"temp/drude"_compute_temp_drude.html,
"temp/eff"_compute_temp_eff.html,
"temp/deform/eff"_compute_temp_deform_eff.html,
"temp/region/eff"_compute_temp_region_eff.html,
"temp/rotate"_compute_temp_rotate.html,
"xrd"_compute_xrd.html :tb(c=6,ea=c)
:line
Pair_style potentials :h4
See the "pair_style"_pair_style.html command for an overview of pair
potentials. Click on the style itself for a full description. Many
of the styles have accelerated versions, which can be used if LAMMPS
is built with the "appropriate accelerated
package"_Section_accelerate.html. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k =
KOKKOS, o = USER-OMP, t = OPT.
"none"_pair_none.html,
"zero"_pair_zero.html,
"hybrid"_pair_hybrid.html,
"hybrid/overlay"_pair_hybrid.html,
"adp (o)"_pair_adp.html,
"airebo (o)"_pair_airebo.html,
"airebo/morse (o)"_pair_airebo.html,
"beck (go)"_pair_beck.html,
"body"_pair_body.html,
"bop"_pair_bop.html,
"born (go)"_pair_born.html,
"born/coul/long (go)"_pair_born.html,
"born/coul/long/cs"_pair_born.html,
"born/coul/msm (o)"_pair_born.html,
"born/coul/wolf (go)"_pair_born.html,
"brownian (o)"_pair_brownian.html,
"brownian/poly (o)"_pair_brownian.html,
"buck (gkio)"_pair_buck.html,
"buck/coul/cut (gkio)"_pair_buck.html,
"buck/coul/long (gkio)"_pair_buck.html,
"buck/coul/long/cs"_pair_buck.html,
"buck/coul/msm (o)"_pair_buck.html,
"buck/long/coul/long (o)"_pair_buck_long.html,
"colloid (go)"_pair_colloid.html,
"comb (o)"_pair_comb.html,
"comb3"_pair_comb.html,
"coul/cut (gko)"_pair_coul.html,
"coul/debye (gko)"_pair_coul.html,
"coul/dsf (gko)"_pair_coul.html,
"coul/long (gko)"_pair_coul.html,
"coul/long/cs"_pair_coul.html,
"coul/msm"_pair_coul.html,
"coul/streitz"_pair_coul.html,
"coul/wolf (ko)"_pair_coul.html,
"dpd (o)"_pair_dpd.html,
"dpd/tstat (o)"_pair_dpd.html,
"dsmc"_pair_dsmc.html,
"eam (gkot)"_pair_eam.html,
"eam/alloy (gkot)"_pair_eam.html,
"eam/fs (gkot)"_pair_eam.html,
"eim (o)"_pair_eim.html,
"gauss (go)"_pair_gauss.html,
"gayberne (gio)"_pair_gayberne.html,
"gran/hertz/history (o)"_pair_gran.html,
"gran/hooke (o)"_pair_gran.html,
"gran/hooke/history (o)"_pair_gran.html,
"hbond/dreiding/lj (o)"_pair_hbond_dreiding.html,
"hbond/dreiding/morse (o)"_pair_hbond_dreiding.html,
"kim"_pair_kim.html,
"lcbop"_pair_lcbop.html,
"line/lj"_pair_line_lj.html,
"lj/charmm/coul/charmm (ko)"_pair_charmm.html,
"lj/charmm/coul/charmm/implicit (ko)"_pair_charmm.html,
"lj/charmm/coul/long (giko)"_pair_charmm.html,
"lj/charmm/coul/msm"_pair_charmm.html,
"lj/class2 (gko)"_pair_class2.html,
"lj/class2/coul/cut (ko)"_pair_class2.html,
"lj/class2/coul/long (gko)"_pair_class2.html,
"lj/cubic (go)"_pair_lj_cubic.html,
"lj/cut (gikot)"_pair_lj.html,
"lj/cut/coul/cut (gko)"_pair_lj.html,
"lj/cut/coul/debye (gko)"_pair_lj.html,
"lj/cut/coul/dsf (gko)"_pair_lj.html,
"lj/cut/coul/long (gikot)"_pair_lj.html,
"lj/cut/coul/long/cs"_pair_lj.html,
"lj/cut/coul/msm (go)"_pair_lj.html,
"lj/cut/dipole/cut (go)"_pair_dipole.html,
"lj/cut/dipole/long"_pair_dipole.html,
"lj/cut/tip4p/cut (o)"_pair_lj.html,
"lj/cut/tip4p/long (ot)"_pair_lj.html,
"lj/expand (gko)"_pair_lj_expand.html,
"lj/gromacs (gko)"_pair_gromacs.html,
"lj/gromacs/coul/gromacs (ko)"_pair_gromacs.html,
"lj/long/coul/long (o)"_pair_lj_long.html,
"lj/long/dipole/long"_pair_dipole.html,
"lj/long/tip4p/long"_pair_lj_long.html,
"lj/smooth (o)"_pair_lj_smooth.html,
"lj/smooth/linear (o)"_pair_lj_smooth_linear.html,
"lj96/cut (go)"_pair_lj96.html,
"lubricate (o)"_pair_lubricate.html,
"lubricate/poly (o)"_pair_lubricate.html,
"lubricateU"_pair_lubricateU.html,
"lubricateU/poly"_pair_lubricateU.html,
"meam (o)"_pair_meam.html,
"mie/cut (o)"_pair_mie.html,
"morse (got)"_pair_morse.html,
"nb3b/harmonic (o)"_pair_nb3b_harmonic.html,
"nm/cut (o)"_pair_nm.html,
"nm/cut/coul/cut (o)"_pair_nm.html,
"nm/cut/coul/long (o)"_pair_nm.html,
"peri/eps"_pair_peri.html,
"peri/lps (o)"_pair_peri.html,
"peri/pmb (o)"_pair_peri.html,
"peri/ves"_pair_peri.html,
"polymorphic"_pair_polymorphic.html,
"reax"_pair_reax.html,
"rebo (o)"_pair_airebo.html,
"resquared (go)"_pair_resquared.html,
"snap"_pair_snap.html,
"soft (go)"_pair_soft.html,
"sw (gkio)"_pair_sw.html,
"table (gko)"_pair_table.html,
"tersoff (gkio)"_pair_tersoff.html,
"tersoff/mod (gko)"_pair_tersoff_mod.html,
"tersoff/zbl (gko)"_pair_tersoff_zbl.html,
"tip4p/cut (o)"_pair_coul.html,
"tip4p/long (o)"_pair_coul.html,
"tri/lj"_pair_tri_lj.html,
"vashishta (o)"_pair_vashishta.html,
"yukawa (go)"_pair_yukawa.html,
"yukawa/colloid (go)"_pair_yukawa_colloid.html,
"zbl (go)"_pair_zbl.html :tb(c=4,ea=c)
These are additional pair styles in USER packages, which can be used
if "LAMMPS is built with the appropriate
package"_Section_start.html#start_3.
"awpmd/cut"_pair_awpmd.html,
"buck/mdf"_pair_mdf.html,
"coul/cut/soft (o)"_pair_lj_soft.html,
"coul/diel (o)"_pair_coul_diel.html,
"coul/long/soft (o)"_pair_lj_soft.html,
"dpd/fdt"_pair_dpd_fdt.html,
"dpd/fdt/energy"_pair_dpd_fdt.html,
"eam/cd (o)"_pair_eam.html,
"edip (o)"_pair_edip.html,
"eff/cut"_pair_eff.html,
"exp6/rx"_pair_exp6_rx.html,
"gauss/cut"_pair_gauss.html,
"lennard/mdf"_pair_mdf.html,
"list"_pair_list.html,
"lj/charmm/coul/long/soft (o)"_pair_charmm.html,
"lj/cut/coul/cut/soft (o)"_pair_lj_soft.html,
"lj/cut/coul/long/soft (o)"_pair_lj_soft.html,
"lj/cut/dipole/sf (go)"_pair_dipole.html,
"lj/cut/soft (o)"_pair_lj_soft.html,
"lj/cut/thole/long (o)"_pair_thole.html,
"lj/cut/tip4p/long/soft (o)"_pair_lj_soft.html,
"lj/mdf"_pair_mdf.html,
"lj/sdk (gko)"_pair_sdk.html,
"lj/sdk/coul/long (go)"_pair_sdk.html,
"lj/sdk/coul/msm (o)"_pair_sdk.html,
"lj/sf (o)"_pair_lj_sf.html,
"meam/spline"_pair_meam_spline.html,
"meam/sw/spline"_pair_meam_sw_spline.html,
"mgpt"_pair_mgpt.html,
"morse/smooth/linear"_pair_morse.html,
"morse/soft"_pair_morse.html,
"multi/lucy"_pair_multi_lucy.html,
"multi/lucy/rx"_pair_multi_lucy_rx.html,
"quip"_pair_quip.html,
"reax/c (k)"_pair_reax_c.html,
"smd/hertz"_pair_smd_hertz.html,
"smd/tlsph"_pair_smd_tlsph.html,
"smd/triangulated/surface"_pair_smd_triangulated_surface.html,
"smd/ulsph"_pair_smd_ulsph.html,
"smtbq"_pair_smtbq.html,
"sph/heatconduction"_pair_sph_heatconduction.html,
"sph/idealgas"_pair_sph_idealgas.html,
"sph/lj"_pair_sph_lj.html,
"sph/rhosum"_pair_sph_rhosum.html,
"sph/taitwater"_pair_sph_taitwater.html,
"sph/taitwater/morris"_pair_sph_taitwater_morris.html,
"srp"_pair_srp.html,
"table/rx"_pair_table_rx.html,
"tersoff/table (o)"_pair_tersoff.html,
"thole"_pair_thole.html,
"tip4p/long/soft (o)"_pair_lj_soft.html :tb(c=4,ea=c)
:line
Bond_style potentials :h4
See the "bond_style"_bond_style.html command for an overview of bond
potentials. Click on the style itself for a full description. Some
of the styles have accelerated versions, which can be used if LAMMPS
is built with the "appropriate accelerated
package"_Section_accelerate.html. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k =
KOKKOS, o = USER-OMP, t = OPT.
"none"_bond_none.html,
"zero"_bond_zero.html,
"hybrid"_bond_hybrid.html,
"class2 (o)"_bond_class2.html,
"fene (iko)"_bond_fene.html,
"fene/expand (o)"_bond_fene_expand.html,
"harmonic (ko)"_bond_harmonic.html,
"morse (o)"_bond_morse.html,
"nonlinear (o)"_bond_nonlinear.html,
"quartic (o)"_bond_quartic.html,
"table (o)"_bond_table.html :tb(c=4,ea=c)
These are additional bond styles in USER packages, which can be used
if "LAMMPS is built with the appropriate
package"_Section_start.html#start_3.
"harmonic/shift (o)"_bond_harmonic_shift.html,
"harmonic/shift/cut (o)"_bond_harmonic_shift_cut.html :tb(c=4,ea=c)
:line
Angle_style potentials :h4
See the "angle_style"_angle_style.html command for an overview of
angle potentials. Click on the style itself for a full description.
Some of the styles have accelerated versions, which can be used if
LAMMPS is built with the "appropriate accelerated
package"_Section_accelerate.html. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
USER-OMP, t = OPT.
"none"_angle_none.html,
"zero"_angle_zero.html,
"hybrid"_angle_hybrid.html,
"charmm (ko)"_angle_charmm.html,
"class2 (o)"_angle_class2.html,
"cosine (o)"_angle_cosine.html,
"cosine/delta (o)"_angle_cosine_delta.html,
"cosine/periodic (o)"_angle_cosine_periodic.html,
"cosine/squared (o)"_angle_cosine_squared.html,
"harmonic (iko)"_angle_harmonic.html,
"table (o)"_angle_table.html :tb(c=4,ea=c)
These are additional angle styles in USER packages, which can be used
if "LAMMPS is built with the appropriate
package"_Section_start.html#start_3.
"cosine/shift (o)"_angle_cosine_shift.html,
"cosine/shift/exp (o)"_angle_cosine_shift_exp.html,
"dipole (o)"_angle_dipole.html,
"fourier (o)"_angle_fourier.html,
"fourier/simple (o)"_angle_fourier_simple.html,
"quartic (o)"_angle_quartic.html,
"sdk"_angle_sdk.html :tb(c=4,ea=c)
:line
Dihedral_style potentials :h4
See the "dihedral_style"_dihedral_style.html command for an overview
of dihedral potentials. Click on the style itself for a full
description. Some of the styles have accelerated versions, which can
be used if LAMMPS is built with the "appropriate accelerated
package"_Section_accelerate.html. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
USER-OMP, t = OPT.
"none"_dihedral_none.html,
"zero"_dihedral_zero.html,
"hybrid"_dihedral_hybrid.html,
"charmm (ko)"_dihedral_charmm.html,
"class2 (o)"_dihedral_class2.html,
"harmonic (io)"_dihedral_harmonic.html,
"helix (o)"_dihedral_helix.html,
"multi/harmonic (o)"_dihedral_multi_harmonic.html,
"opls (iko)"_dihedral_opls.html :tb(c=4,ea=c)
These are additional dihedral styles in USER packages, which can be
used if "LAMMPS is built with the appropriate
package"_Section_start.html#start_3.
"cosine/shift/exp (o)"_dihedral_cosine_shift_exp.html,
"fourier (o)"_dihedral_fourier.html,
"nharmonic (o)"_dihedral_nharmonic.html,
"quadratic (o)"_dihedral_quadratic.html,
"spherical (o)"_dihedral_spherical.html,
"table (o)"_dihedral_table.html :tb(c=4,ea=c)
:line
Improper_style potentials :h4
See the "improper_style"_improper_style.html command for an overview
of improper potentials. Click on the style itself for a full
description. Some of the styles have accelerated versions, which can
be used if LAMMPS is built with the "appropriate accelerated
package"_Section_accelerate.html. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
USER-OMP, t = OPT.
"none"_improper_none.html,
"zero"_improper_zero.html,
"hybrid"_improper_hybrid.html,
"class2 (o)"_improper_class2.html,
"cvff (io)"_improper_cvff.html,
"harmonic (ko)"_improper_harmonic.html,
"umbrella (o)"_improper_umbrella.html :tb(c=4,ea=c)
These are additional improper styles in USER packages, which can be
used if "LAMMPS is built with the appropriate
package"_Section_start.html#start_3.
"cossq (o)"_improper_cossq.html,
"distance"_improper_distance.html,
"fourier (o)"_improper_fourier.html,
"ring (o)"_improper_ring.html :tb(c=4,ea=c)
:line
Kspace solvers :h4
See the "kspace_style"_kspace_style.html command for an overview of
Kspace solvers. Click on the style itself for a full description.
Some of the styles have accelerated versions, which can be used if
LAMMPS is built with the "appropriate accelerated
package"_Section_accelerate.html. This is indicated by additional
letters in parenthesis: g = GPU, i = USER-INTEL, k = KOKKOS, o =
USER-OMP, t = OPT.
"ewald (o)"_kspace_style.html,
"ewald/disp"_kspace_style.html,
"msm (o)"_kspace_style.html,
"msm/cg (o)"_kspace_style.html,
"pppm (go)"_kspace_style.html,
"pppm/cg (o)"_kspace_style.html,
"pppm/disp"_kspace_style.html,
"pppm/disp/tip4p"_kspace_style.html,
"pppm/stagger"_kspace_style.html,
"pppm/tip4p (o)"_kspace_style.html :tb(c=4,ea=c)
diff --git a/doc/src/Section_start.txt b/doc/src/Section_start.txt
index 6149c38ad..94850da0d 100644
--- a/doc/src/Section_start.txt
+++ b/doc/src/Section_start.txt
@@ -1,1886 +1,1886 @@
"Previous Section"_Section_intro.html - "LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc - "Next Section"_Section_commands.html :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
2. Getting Started :h3
This section describes how to build and run LAMMPS, for both new and
experienced users.
2.1 "What's in the LAMMPS distribution"_#start_1
2.2 "Making LAMMPS"_#start_2
2.3 "Making LAMMPS with optional packages"_#start_3
2.4 "Building LAMMPS via the Make.py script"_#start_4
2.5 "Building LAMMPS as a library"_#start_5
2.6 "Running LAMMPS"_#start_6
2.7 "Command-line options"_#start_7
2.8 "Screen output"_#start_8
2.9 "Tips for users of previous versions"_#start_9 :all(b)
:line
:line
2.1 What's in the LAMMPS distribution :h4,link(start_1)
When you download a LAMMPS tarball you will need to unzip and untar
the downloaded file with the following commands, after placing the
tarball in an appropriate directory.
gunzip lammps*.tar.gz
tar xvf lammps*.tar :pre
This will create a LAMMPS directory containing two files and several
sub-directories:
README: text file
LICENSE: the GNU General Public License (GPL)
bench: benchmark problems
doc: documentation
examples: simple test problems
potentials: embedded atom method (EAM) potential files
src: source files
tools: pre- and post-processing tools :tb(s=:)
Note that the "download page"_download also has links to download
Windows exectubles and installers, as well as pre-built executables
for a few specific Linux distributions. It also has instructions for
how to download/install LAMMPS for Macs (via Homebrew), and to
download and update LAMMPS from SVN and Git repositories, which gives
you the same files that are in the download tarball.
:link(download,http://lammps.sandia.gov/download.html)
The Windows and Linux executables for serial or parallel only include
certain packages and bug-fixes/upgrades listed on "this
page"_http://lammps.sandia.gov/bug.html up to a certain date, as
stated on the download page. If you want an executable with
non-included packages or that is more current, then you'll need to
build LAMMPS yourself, as discussed in the next section.
Skip to the "Running LAMMPS"_#start_6 sections for info on how to
launch a LAMMPS Windows executable on a Windows box.
:line
2.2 Making LAMMPS :h4,link(start_2)
This section has the following sub-sections:
"Read this first"_#start_2_1
"Steps to build a LAMMPS executable"_#start_2_2
"Common errors that can occur when making LAMMPS"_#start_2_3
"Additional build tips"_#start_2_4
"Building for a Mac"_#start_2_5
"Building for Windows"_#start_2_6 :ul
:line
[{Read this first:}] :link(start_2_1)
If you want to avoid building LAMMPS yourself, read the preceeding
section about options available for downloading and installing
executables. Details are discussed on the "download"_download page.
Building LAMMPS can be simple or not-so-simple. If all you need are
the default packages installed in LAMMPS, and MPI is already installed
on your machine, or you just want to run LAMMPS in serial, then you
can typically use the Makefile.mpi or Makefile.serial files in
src/MAKE by typing one of these lines (from the src dir):
make mpi
make serial :pre
Note that on a facility supercomputer, there are often "modules"
loaded in your environment that provide the compilers and MPI you
should use. In this case, the "mpicxx" compile/link command in
Makefile.mpi should just work by accessing those modules.
It may be the case that one of the other Makefile.machine files in the
src/MAKE sub-directories is a better match to your system (type "make"
to see a list), you can use it as-is by typing (for example):
make stampede :pre
If any of these builds (with an existing Makefile.machine) works on
your system, then you're done!
If you want to do one of the following:
use optional LAMMPS features that require additional libraries
use optional packages that require additional libraries
use optional accelerator packages that require special compiler/linker settings
run on a specialized platform that has its own compilers, settings, or other libs to use :ul
then building LAMMPS is more complicated. You may need to find where
auxiliary libraries exist on your machine or install them if they
don't. You may need to build additional libraries that are part of
the LAMMPS package, before building LAMMPS. You may need to edit a
Makefile.machine file to make it compatible with your system.
Note that there is a Make.py tool in the src directory that automates
several of these steps, but you still have to know what you are doing.
"Section 2.4"_#start_4 below describes the tool. It is a convenient
way to work with installing/un-installing various packages, the
Makefile.machine changes required by some packages, and the auxiliary
libraries some of them use.
Please read the following sections carefully. If you are not
comfortable with makefiles, or building codes on a Unix platform, or
running an MPI job on your machine, please find a local expert to help
you. Many compilation, linking, and run problems that users have are
often not really LAMMPS issues - they are peculiar to the user's
system, compilers, libraries, etc. Such questions are better answered
by a local expert.
If you have a build problem that you are convinced is a LAMMPS issue
(e.g. the compiler complains about a line of LAMMPS source code), then
please post the issue to the "LAMMPS mail
list"_http://lammps.sandia.gov/mail.html.
If you succeed in building LAMMPS on a new kind of machine, for which
there isn't a similar machine Makefile included in the
src/MAKE/MACHINES directory, then send it to the developers and we can
include it in the LAMMPS distribution.
:line
[{Steps to build a LAMMPS executable:}] :link(start_2_2)
[Step 0]
The src directory contains the C++ source and header files for LAMMPS.
It also contains a top-level Makefile and a MAKE sub-directory with
low-level Makefile.* files for many systems and machines. See the
src/MAKE/README file for a quick overview of what files are available
and what sub-directories they are in.
The src/MAKE dir has a few files that should work as-is on many
platforms. The src/MAKE/OPTIONS dir has more that invoke additional
compiler, MPI, and other setting options commonly used by LAMMPS, to
illustrate their syntax. The src/MAKE/MACHINES dir has many more that
have been tweaked or optimized for specific machines. These files are
all good starting points if you find you need to change them for your
machine. Put any file you edit into the src/MAKE/MINE directory and
it will be never be touched by any LAMMPS updates.
>From within the src directory, type "make" or "gmake". You should see
a list of available choices from src/MAKE and all of its
sub-directories. If one of those has the options you want or is the
machine you want, you can type a command like:
make mpi
or
make serial_icc
or
gmake mac :pre
Note that the corresponding Makefile.machine can exist in src/MAKE or
any of its sub-directories. If a file with the same name appears in
multiple places (not a good idea), the order they are used is as
follows: src/MAKE/MINE, src/MAKE, src/MAKE/OPTIONS, src/MAKE/MACHINES.
This gives preference to a file you have created/edited and put in
src/MAKE/MINE.
Note that on a multi-processor or multi-core platform you can launch a
parallel make, by using the "-j" switch with the make command, which
will build LAMMPS more quickly.
If you get no errors and an executable like lmp_mpi or lmp_g++_serial
or lmp_mac is produced, then you're done; it's your lucky day.
Note that by default only a few of LAMMPS optional packages are
installed. To build LAMMPS with optional packages, see "this
section"_#start_3 below.
[Step 1]
If Step 0 did not work, you will need to create a low-level Makefile
for your machine, like Makefile.foo. You should make a copy of an
existing Makefile.* in src/MAKE or one of its sub-directories as a
starting point. The only portions of the file you need to edit are
the first line, the "compiler/linker settings" section, and the
"LAMMPS-specific settings" section. When it works, put the edited
file in src/MAKE/MINE and it will not be altered by any future LAMMPS
updates.
[Step 2]
Change the first line of Makefile.foo to list the word "foo" after the
"#", and whatever other options it will set. This is the line you
will see if you just type "make".
[Step 3]
The "compiler/linker settings" section lists compiler and linker
settings for your C++ compiler, including optimization flags. You can
use g++, the open-source GNU compiler, which is available on all Unix
systems. You can also use mpicxx which will typically be available if
MPI is installed on your system, though you should check which actual
compiler it wraps. Vendor compilers often produce faster code. On
boxes with Intel CPUs, we suggest using the Intel icc compiler, which
can be downloaded from "Intel's compiler site"_intel.
:link(intel,http://www.intel.com/software/products/noncom)
If building a C++ code on your machine requires additional libraries,
then you should list them as part of the LIB variable. You should
not need to do this if you use mpicxx.
The DEPFLAGS setting is what triggers the C++ compiler to create a
dependency list for a source file. This speeds re-compilation when
source (*.cpp) or header (*.h) files are edited. Some compilers do
not support dependency file creation, or may use a different switch
than -D. GNU g++ and Intel icc works with -D. If your compiler can't
create dependency files, then you'll need to create a Makefile.foo
patterned after Makefile.storm, which uses different rules that do not
involve dependency files. Note that when you build LAMMPS for the
first time on a new platform, a long list of *.d files will be printed
out rapidly. This is not an error; it is the Makefile doing its
normal creation of dependencies.
[Step 4]
The "system-specific settings" section has several parts. Note that
if you change any -D setting in this section, you should do a full
re-compile, after typing "make clean" (which will describe different
clean options).
The LMP_INC variable is used to include options that turn on ifdefs
within the LAMMPS code. The options that are currently recogized are:
-DLAMMPS_GZIP
-DLAMMPS_JPEG
-DLAMMPS_PNG
-DLAMMPS_FFMPEG
-DLAMMPS_MEMALIGN
-DLAMMPS_XDR
-DLAMMPS_SMALLBIG
-DLAMMPS_BIGBIG
-DLAMMPS_SMALLSMALL
-DLAMMPS_LONGLONG_TO_LONG
-DPACK_ARRAY
-DPACK_POINTER
-DPACK_MEMCPY :ul
The read_data and dump commands will read/write gzipped files if you
compile with -DLAMMPS_GZIP. It requires that your machine supports
the "popen()" function in the standard runtime library and that a gzip
executable can be found by LAMMPS during a run.
NOTE: on some clusters with high-speed networks, using the fork()
library calls (required by popen()) can interfere with the fast
communication library and lead to simulations using compressed output
or input to hang or crash. For selected operations, compressed file
I/O is also available using a compression library instead, which are
provided in the COMPRESS package. From more details about compiling
LAMMPS with packages, please see below.
If you use -DLAMMPS_JPEG, the "dump image"_dump_image.html command
will be able to write out JPEG image files. For JPEG files, you must
also link LAMMPS with a JPEG library, as described below. If you use
-DLAMMPS_PNG, the "dump image"_dump.html command will be able to write
out PNG image files. For PNG files, you must also link LAMMPS with a
PNG library, as described below. If neither of those two defines are
used, LAMMPS will only be able to write out uncompressed PPM image
files.
If you use -DLAMMPS_FFMPEG, the "dump movie"_dump_image.html command
will be available to support on-the-fly generation of rendered movies
the need to store intermediate image files. It requires that your
machines supports the "popen" function in the standard runtime library
and that an FFmpeg executable can be found by LAMMPS during the run.
NOTE: Similar to the note above, this option can conflict with
high-speed networks, because it uses popen().
Using -DLAMMPS_MEMALIGN=<bytes> enables the use of the
posix_memalign() call instead of malloc() when large chunks or memory
are allocated by LAMMPS. This can help to make more efficient use of
vector instructions of modern CPUS, since dynamically allocated memory
has to be aligned on larger than default byte boundaries (e.g. 16
bytes instead of 8 bytes on x86 type platforms) for optimal
performance.
If you use -DLAMMPS_XDR, the build will include XDR compatibility
files for doing particle dumps in XTC format. This is only necessary
if your platform does have its own XDR files available. See the
Restrictions section of the "dump"_dump.html command for details.
Use at most one of the -DLAMMPS_SMALLBIG, -DLAMMPS_BIGBIG,
-DLAMMPS_SMALLSMALL settings. The default is -DLAMMPS_SMALLBIG. These
settings refer to use of 4-byte (small) vs 8-byte (big) integers
within LAMMPS, as specified in src/lmptype.h. The only reason to use
the BIGBIG setting is to enable simulation of huge molecular systems
(which store bond topology info) with more than 2 billion atoms, or to
track the image flags of moving atoms that wrap around a periodic box
more than 512 times. Normally, the only reason to use SMALLSMALL is
if your machine does not support 64-bit integers, though you can use
SMALLSMALL setting if you are running in serial or on a desktop
machine or small cluster where you will never run large systems or for
long time (more than 2 billion atoms, more than 2 billion timesteps).
See the "Additional build tips"_#start_2_4 section below for more
details on these settings.
Note that the USER-ATC package is not currently compatible with
-DLAMMPS_BIGBIG. Also the GPU package requires the lib/gpu library to
be compiled with the same setting, or the link will fail.
The -DLAMMPS_LONGLONG_TO_LONG setting may be needed if your system or
MPI version does not recognize "long long" data types. In this case a
"long" data type is likely already 64-bits, in which case this setting
will convert to that data type.
Using one of the -DPACK_ARRAY, -DPACK_POINTER, and -DPACK_MEMCPY
options can make for faster parallel FFTs (in the PPPM solver) on some
platforms. The -DPACK_ARRAY setting is the default. See the
"kspace_style"_kspace_style.html command for info about PPPM. See
Step 6 below for info about building LAMMPS with an FFT library.
[Step 5]
The 3 MPI variables are used to specify an MPI library to build LAMMPS
with. Note that you do not need to set these if you use the MPI
compiler mpicxx for your CC and LINK setting in the section above.
The MPI wrapper knows where to find the needed files.
If you want LAMMPS to run in parallel, you must have an MPI library
installed on your platform. If MPI is installed on your system in the
usual place (under /usr/local), you also may not need to specify these
3 variables, assuming /usr/local is in your path. On some large
parallel machines which use "modules" for their compile/link
environements, you may simply need to include the correct module in
your build environment, before building LAMMPS. Or the parallel
machine may have a vendor-provided MPI which the compiler has no
trouble finding.
Failing this, these 3 variables can be used to specify where the mpi.h
file (MPI_INC) and the MPI library file (MPI_PATH) are found and the
name of the library file (MPI_LIB).
If you are installing MPI yourself, we recommend Argonne's MPICH2
or OpenMPI. MPICH can be downloaded from the "Argonne MPI
site"_http://www.mcs.anl.gov/research/projects/mpich2/. OpenMPI can
be downloaded from the "OpenMPI site"_http://www.open-mpi.org.
Other MPI packages should also work. If you are running on a big
parallel platform, your system people or the vendor should have
already installed a version of MPI, which is likely to be faster
than a self-installed MPICH or OpenMPI, so find out how to build
and link with it. If you use MPICH or OpenMPI, you will have to
configure and build it for your platform. The MPI configure script
should have compiler options to enable you to use the same compiler
you are using for the LAMMPS build, which can avoid problems that can
arise when linking LAMMPS to the MPI library.
If you just want to run LAMMPS on a single processor, you can use the
dummy MPI library provided in src/STUBS, since you don't need a true
MPI library installed on your system. See src/MAKE/Makefile.serial
for how to specify the 3 MPI variables in this case. You will also
need to build the STUBS library for your platform before making LAMMPS
itself. Note that if you are building with src/MAKE/Makefile.serial,
e.g. by typing "make serial", then the STUBS library is built for you.
To build the STUBS library from the src directory, type "make
mpi-stubs", or from the src/STUBS dir, type "make". This should
create a libmpi_stubs.a file suitable for linking to LAMMPS. If the
build fails, you will need to edit the STUBS/Makefile for your
platform.
The file STUBS/mpi.c provides a CPU timer function called MPI_Wtime()
that calls gettimeofday() . If your system doesn't support
gettimeofday() , you'll need to insert code to call another timer.
Note that the ANSI-standard function clock() rolls over after an hour
or so, and is therefore insufficient for timing long LAMMPS
simulations.
[Step 6]
The 3 FFT variables allow you to specify an FFT library which LAMMPS
uses (for performing 1d FFTs) when running the particle-particle
particle-mesh (PPPM) option for long-range Coulombics via the
"kspace_style"_kspace_style.html command.
LAMMPS supports various open-source or vendor-supplied FFT libraries
for this purpose. If you leave these 3 variables blank, LAMMPS will
use the open-source "KISS FFT library"_http://kissfft.sf.net, which is
included in the LAMMPS distribution. This library is portable to all
platforms and for typical LAMMPS simulations is almost as fast as FFTW
or vendor optimized libraries. If you are not including the KSPACE
package in your build, you can also leave the 3 variables blank.
Otherwise, select which kinds of FFTs to use as part of the FFT_INC
setting by a switch of the form -DFFT_XXX. Recommended values for XXX
are: MKL, SCSL, FFTW2, and FFTW3. Legacy options are: INTEL, SGI,
ACML, and T3E. For backward compatability, using -DFFT_FFTW will use
the FFTW2 library. Using -DFFT_NONE will use the KISS library
described above.
You may also need to set the FFT_INC, FFT_PATH, and FFT_LIB variables,
so the compiler and linker can find the needed FFT header and library
files. Note that on some large parallel machines which use "modules"
for their compile/link environements, you may simply need to include
the correct module in your build environment. Or the parallel machine
may have a vendor-provided FFT library which the compiler has no
trouble finding.
FFTW is a fast, portable library that should also work on any
platform. You can download it from
"www.fftw.org"_http://www.fftw.org. Both the legacy version 2.1.X and
the newer 3.X versions are supported as -DFFT_FFTW2 or -DFFT_FFTW3.
Building FFTW for your box should be as simple as ./configure; make.
Note that on some platforms FFTW2 has been pre-installed, and uses
renamed files indicating the precision it was compiled with,
e.g. sfftw.h, or dfftw.h instead of fftw.h. In this case, you can
specify an additional define variable for FFT_INC called -DFFTW_SIZE,
which will select the correct include file. In this case, for FFT_LIB
you must also manually specify the correct library, namely -lsfftw or
-ldfftw.
The FFT_INC variable also allows for a -DFFT_SINGLE setting that will
use single-precision FFTs with PPPM, which can speed-up long-range
calulations, particularly in parallel or on GPUs. Fourier transform
and related PPPM operations are somewhat insensitive to floating point
truncation errors and thus do not always need to be performed in
double precision. Using the -DFFT_SINGLE setting trades off a little
accuracy for reduced memory use and parallel communication costs for
transposing 3d FFT data. Note that single precision FFTs have only
been tested with the FFTW3, FFTW2, MKL, and KISS FFT options.
[Step 7]
The 3 JPG variables allow you to specify a JPEG and/or PNG library
which LAMMPS uses when writing out JPEG or PNG files via the "dump
image"_dump_image.html command. These can be left blank if you do not
use the -DLAMMPS_JPEG or -DLAMMPS_PNG switches discussed above in Step
4, since in that case JPEG/PNG output will be disabled.
A standard JPEG library usually goes by the name libjpeg.a or
libjpeg.so and has an associated header file jpeglib.h. Whichever
JPEG library you have on your platform, you'll need to set the
appropriate JPG_INC, JPG_PATH, and JPG_LIB variables, so that the
compiler and linker can find it.
A standard PNG library usually goes by the name libpng.a or libpng.so
and has an associated header file png.h. Whichever PNG library you
have on your platform, you'll need to set the appropriate JPG_INC,
JPG_PATH, and JPG_LIB variables, so that the compiler and linker can
find it.
As before, if these header and library files are in the usual place on
your machine, you may not need to set these variables.
[Step 8]
Note that by default only a few of LAMMPS optional packages are
installed. To build LAMMPS with optional packages, see "this
section"_#start_3 below, before proceeding to Step 9.
[Step 9]
That's it. Once you have a correct Makefile.foo, and you have
pre-built any other needed libraries (e.g. MPI, FFT, etc) all you need
to do from the src directory is type something like this:
make foo
make -j N foo
gmake foo
gmake -j N foo :pre
The -j or -j N switches perform a parallel build which can be much
faster, depending on how many cores your compilation machine has. N
is the number of cores the build runs on.
You should get the executable lmp_foo when the build is complete.
:line
[{Errors that can occur when making LAMMPS:}] :link(start_2_3)
NOTE: If an error occurs when building LAMMPS, the compiler or linker
will state very explicitly what the problem is. The error message
should give you a hint as to which of the steps above has failed, and
what you need to do in order to fix it. Building a code with a
Makefile is a very logical process. The compiler and linker need to
find the appropriate files and those files need to be compatible with
LAMMPS source files. When a make fails, there is usually a very
simple reason, which you or a local expert will need to fix.
Here are two non-obvious errors that can occur:
(1) If the make command breaks immediately with errors that indicate
it can't find files with a "*" in their names, this can be because
your machine's native make doesn't support wildcard expansion in a
makefile. Try gmake instead of make. If that doesn't work, try using
a -f switch with your make command to use a pre-generated
Makefile.list which explicitly lists all the needed files, e.g.
make makelist
make -f Makefile.list linux
gmake -f Makefile.list mac :pre
The first "make" command will create a current Makefile.list with all
the file names in your src dir. The 2nd "make" command (make or
gmake) will use it to build LAMMPS. Note that you should
include/exclude any desired optional packages before using the "make
makelist" command.
(2) If you get an error that says something like 'identifier "atoll"
is undefined', then your machine does not support "long long"
integers. Try using the -DLAMMPS_LONGLONG_TO_LONG setting described
above in Step 4.
:line
[{Additional build tips:}] :link(start_2_4)
(1) Building LAMMPS for multiple platforms.
You can make LAMMPS for multiple platforms from the same src
directory. Each target creates its own object sub-directory called
Obj_target where it stores the system-specific *.o files.
(2) Cleaning up.
Typing "make clean-all" or "make clean-machine" will delete *.o object
files created when LAMMPS is built, for either all builds or for a
particular machine.
(3) Changing the LAMMPS size limits via -DLAMMPS_SMALLBIG or
-DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL
As explained above, any of these 3 settings can be specified on the
LMP_INC line in your low-level src/MAKE/Makefile.foo.
The default is -DLAMMPS_SMALLBIG which allows for systems with up to
2^63 atoms and 2^63 timesteps (about 9e18). The atom limit is for
atomic systems which do not store bond topology info and thus do not
require atom IDs. If you use atom IDs for atomic systems (which is
the default) or if you use a molecular model, which stores bond
topology info and thus requires atom IDs, the limit is 2^31 atoms
(about 2 billion). This is because the IDs are stored in 32-bit
integers.
Likewise, with this setting, the 3 image flags for each atom (see the
"dump"_dump.html doc page for a discussion) are stored in a 32-bit
integer, which means the atoms can only wrap around a periodic box (in
each dimension) at most 512 times. If atoms move through the periodic
box more than this many times, the image flags will "roll over",
e.g. from 511 to -512, which can cause diagnostics like the
mean-squared displacement, as calculated by the "compute
msd"_compute_msd.html command, to be faulty.
To allow for larger atomic systems with atom IDs or larger molecular
systems or larger image flags, compile with -DLAMMPS_BIGBIG. This
stores atom IDs and image flags in 64-bit integers. This enables
atomic or molecular systems with atom IDS of up to 2^63 atoms (about
9e18). And image flags will not "roll over" until they reach 2^20 =
1048576.
If your system does not support 8-byte integers, you will need to
compile with the -DLAMMPS_SMALLSMALL setting. This will restrict the
total number of atoms (for atomic or molecular systems) and timesteps
to 2^31 (about 2 billion). Image flags will roll over at 2^9 = 512.
Note that in src/lmptype.h there are definitions of all these data
types as well as the MPI data types associated with them. The MPI
types need to be consistent with the associated C data types, or else
LAMMPS will generate a run-time error. As far as we know, the
settings defined in src/lmptype.h are portable and work on every
current system.
In all cases, the size of problem that can be run on a per-processor
basis is limited by 4-byte integer storage to 2^31 atoms per processor
(about 2 billion). This should not normally be a limitation since such
a problem would have a huge per-processor memory footprint due to
neighbor lists and would run very slowly in terms of CPU secs/timestep.
:line
[{Building for a Mac:}] :link(start_2_5)
OS X is BSD Unix, so it should just work. See the
src/MAKE/MACHINES/Makefile.mac and Makefile.mac_mpi files.
:line
[{Building for Windows:}] :link(start_2_6)
The LAMMPS download page has an option to download both a serial and
parallel pre-built Windows executable. See the "Running
LAMMPS"_#start_6 section for instructions on running these executables
on a Windows box.
The pre-built executables hosted on the "LAMMPS download
page"_http://lammps.sandia.gov/download.html are built with a subset
of the available packages; see the download page for the list. These
are single executable files. No examples or documentation in
included. You will need to download the full source code package to
obtain those.
As an alternative, you can download "daily builds" (and some older
versions) of the installer packages from
"rpm.lammps.org/windows.html"_http://rpm.lammps.org/windows.html.
These executables are built with most optional packages and the
download includes documentation, some tools and most examples.
If you want a Windows version with specific packages included and
excluded, you can build it yourself.
One way to do this is install and use cygwin to build LAMMPS with a
standard unix style make program, just as you would on a Linux box;
see src/MAKE/MACHINES/Makefile.cygwin.
:line
2.3 Making LAMMPS with optional packages :h4,link(start_3)
This section has the following sub-sections:
"Package basics"_#start_3_1
"Including/excluding packages"_#start_3_2
"Packages that require extra libraries"_#start_3_3
"Packages that require Makefile.machine settings"_#start_3_4 :ul
Note that the following "Section 2.4"_#start_4 describes the Make.py
tool which can be used to install/un-install packages and build the
auxiliary libraries which some of them use. It can also auto-edit a
Makefile.machine to add settings needed by some packages.
:line
[{Package basics:}] :link(start_3_1)
The source code for LAMMPS is structured as a set of core files which
are always included, plus optional packages. Packages are groups of
files that enable a specific set of features. For example, force
fields for molecular systems or granular systems are in packages.
"Section packages"_Section_packages.html in the manual has details
about all the packages, including specific instructions for building
LAMMPS with each package, which are covered in a more general manner
below.
You can see the list of all packages by typing "make package" from
within the src directory of the LAMMPS distribution. This also lists
various make commands that can be used to manipulate packages.
If you use a command in a LAMMPS input script that is part of a
package, you must have built LAMMPS with that package, else you will
get an error that the style is invalid or the command is unknown.
Every command's doc page specfies if it is part of a package. You can
also type
lmp_machine -h :pre
to run your executable with the optional "-h command-line
switch"_#start_7 for "help", which will simply list the styles and
commands known to your executable, and immediately exit.
There are two kinds of packages in LAMMPS, standard and user packages.
More information about the contents of standard and user packages is
given in "Section_packages"_Section_packages.html of the manual. The
difference between standard and user packages is as follows:
Standard packages, such as molecule or kspace, are supported by the
LAMMPS developers and are written in a syntax and style consistent
with the rest of LAMMPS. This means we will answer questions about
them, debug and fix them if necessary, and keep them compatible with
future changes to LAMMPS.
User packages, such as user-atc or user-omp, have been contributed by
users, and always begin with the user prefix. If they are a single
command (single file), they are typically in the user-misc package.
Otherwise, they are a a set of files grouped together which add a
specific functionality to the code.
User packages don't necessarily meet the requirements of the standard
packages. If you have problems using a feature provided in a user
package, you may need to contact the contributor directly to get help.
Information on how to submit additions you make to LAMMPS as single
files or either a standard or user-contributed package are given in
"this section"_Section_modify.html#mod_15 of the documentation.
:line
[{Including/excluding packages:}] :link(start_3_2)
To use (or not use) a package you must include it (or exclude it)
before building LAMMPS. From the src directory, this is typically as
simple as:
make yes-colloid
make g++ :pre
or
make no-manybody
make g++ :pre
NOTE: You should NOT include/exclude packages and build LAMMPS in a
single make command using multiple targets, e.g. make yes-colloid g++.
This is because the make procedure creates a list of source files that
will be out-of-date for the build if the package configuration changes
within the same command.
Some packages have individual files that depend on other packages
being included. LAMMPS checks for this and does the right thing.
I.e. individual files are only included if their dependencies are
already included. Likewise, if a package is excluded, other files
dependent on that package are also excluded.
If you will never run simulations that use the features in a
particular packages, there is no reason to include it in your build.
For some packages, this will keep you from having to build auxiliary
libraries (see below), and will also produce a smaller executable
which may run a bit faster.
When you download a LAMMPS tarball, these packages are pre-installed
in the src directory: KSPACE, MANYBODY,MOLECULE, because they are so
commonly used. When you download LAMMPS source files from the SVN or
Git repositories, no packages are pre-installed.
Packages are included or excluded by typing "make yes-name" or "make
no-name", where "name" is the name of the package in lower-case, e.g.
name = kspace for the KSPACE package or name = user-atc for the
USER-ATC package. You can also type "make yes-standard", "make
no-standard", "make yes-std", "make no-std", "make yes-user", "make
no-user", "make yes-lib", "make no-lib", "make yes-all", or "make
no-all" to include/exclude various sets of packages. Type "make
package" to see all of the package-related make options.
NOTE: Inclusion/exclusion of a package works by simply moving files
back and forth between the main src directory and sub-directories with
the package name (e.g. src/KSPACE, src/USER-ATC), so that the files
are seen or not seen when LAMMPS is built. After you have included or
excluded a package, you must re-build LAMMPS.
Additional package-related make options exist to help manage LAMMPS
files that exist in both the src directory and in package
sub-directories. You do not normally need to use these commands
unless you are editing LAMMPS files or have downloaded a patch from
the LAMMPS WWW site.
Typing "make package-update" or "make pu" will overwrite src files
with files from the package sub-directories if the package has been
included. It should be used after a patch is installed, since patches
only update the files in the package sub-directory, but not the src
files. Typing "make package-overwrite" will overwrite files in the
package sub-directories with src files.
Typing "make package-status" or "make ps" will show which packages are
currently included. For those that are included, it will list any
files that are different in the src directory and package
sub-directory. Typing "make package-diff" lists all differences
between these files. Again, type "make package" to see all of the
package-related make options.
:line
[{Packages that require extra libraries:}] :link(start_3_3)
A few of the standard and user packages require additional auxiliary
libraries. Many of them are provided with LAMMPS, in which case they
must be compiled first, before LAMMPS is built, if you wish to include
that package. If you get a LAMMPS build error about a missing
library, this is likely the reason. See the
"Section_packages"_Section_packages.html doc page for a list of
packages that have these kinds of auxiliary libraries.
The lib directory in the distribution has sub-directories with package
names that correspond to the needed auxiliary libs, e.g. lib/gpu.
Each sub-directory has a README file that gives more details. Code
for most of the auxiliary libraries is included in that directory.
Examples are the USER-ATC and MEAM packages.
A few of the lib sub-directories do not include code, but do include
instructions (and sometimes scripts) that automate the process of
downloading the auxiliary library and installing it so LAMMPS can link
to it. Examples are the KIM, VORONOI, USER-MOLFILE, and USER-SMD
packages.
The lib/python directory (for the PYTHON package) contains only a
choice of Makefile.lammps.* files. This is because no auxiliary code
or libraries are needed, only the Python library and other system libs
that should already available on your system. However, the
Makefile.lammps file is needed to tell LAMMPS which libs to use and
where to find them.
For libraries with provided code, the sub-directory README file
(e.g. lib/atc/README) has instructions on how to build that library.
This information is also summarized in "Section
packages"_Section_packages.html. Typically this is done by typing
something like:
make -f Makefile.g++ :pre
If one of the provided Makefiles is not appropriate for your system
you will need to edit or add one. Note that all the Makefiles have a
setting for EXTRAMAKE at the top that specifies a Makefile.lammps.*
file.
If the library build is successful, it will produce 2 files in the lib
directory:
libpackage.a
Makefile.lammps :pre
The Makefile.lammps file will typically be a copy of one of the
Makefile.lammps.* files in the library directory.
Note that you must insure that the settings in Makefile.lammps are
appropriate for your system. If they are not, the LAMMPS build may
fail. To fix this, you can edit or create a new Makefile.lammps.*
file for your system, and copy it to Makefile.lammps.
As explained in the lib/package/README files, the settings in
Makefile.lammps are used to specify additional system libraries and
their locations so that LAMMPS can build with the auxiliary library.
For example, if the MEAM package is used, the auxiliary library
consists of F90 code, built with a Fortran complier. To link that
library with LAMMPS (a C++ code) via whatever C++ compiler LAMMPS is
built with, typically requires additional Fortran-to-C libraries be
included in the link. Another example are the BLAS and LAPACK
libraries needed to use the USER-ATC or USER-AWPMD packages.
For libraries without provided code, the sub-directory README file has
information on where to download the library and how to build it,
e.g. lib/voronoi/README and lib/smd/README. The README files also
describe how you must either (a) create soft links, via the "ln"
command, in those directories to point to where you built or installed
the packages, or (b) check or edit the Makefile.lammps file in the
same directory to provide that information.
Some of the sub-directories, e.g. lib/voronoi, also have an install.py
script which can be used to automate the process of
downloading/building/installing the auxiliary library, and setting the
needed soft links. Type "python install.py" for further instructions.
As with the sub-directories containing library code, if the soft links
or settings in the lib/package/Makefile.lammps files are not correct,
the LAMMPS build will typically fail.
:line
[{Packages that require Makefile.machine settings}] :link(start_3_4)
A few packages require specific settings in Makefile.machine, to
either build or use the package effectively. These are the
USER-INTEL, KOKKOS, USER-OMP, and OPT packages, used for accelerating
code performance on CPUs or other hardware, as discussed in "Section
acclerate"_Section_accelerate.html.
A summary of what Makefile.machine changes are needed for each of
these packages is given in "Section packages"_Section_packages.html.
The details are given on the doc pages that describe each of these
accelerator packages in detail:
"USER-INTEL package"_accelerate_intel.html
"KOKKOS package"_accelerate_kokkos.html
"USER-OMP package"_accelerate_omp.html
"OPT package"_accelerate_opt.html :ul
You can also look at the following machine Makefiles in
src/MAKE/OPTIONS, which include the changes. Note that the USER-INTEL
and KOKKOS packages allow for settings that build LAMMPS for different
hardware. The USER-INTEL package builds for CPU and the Xeon Phi, the
KOKKOS package builds for OpenMP, GPUs (Cuda), and the Xeon Phi.
Makefile.intel_cpu
Makefile.intel_phi
Makefile.kokkos_omp
Makefile.kokkos_cuda
Makefile.kokkos_phi
Makefile.omp
Makefile.opt :ul
Also note that the Make.py tool, described in the next "Section
2.4"_#start_4 can automatically add the needed info to an existing
machine Makefile, using simple command-line arguments.
:line
2.4 Building LAMMPS via the Make.py tool :h4,link(start_4)
The src directory includes a Make.py script, written in Python, which
can be used to automate various steps of the build process. It is
particularly useful for working with the accelerator packages, as well
as other packages which require auxiliary libraries to be built.
The goal of the Make.py tool is to allow any complex multi-step LAMMPS
build to be performed as a single Make.py command. And you can
archive the commands, so they can be re-invoked later via the -r
(redo) switch. If you find some LAMMPS build procedure that can't be
done in a single Make.py command, let the developers know, and we'll
see if we can augment the tool.
You can run Make.py from the src directory by typing either:
Make.py -h
python Make.py -h :pre
which will give you help info about the tool. For the former to work,
you may need to edit the first line of Make.py to point to your local
Python. And you may need to insure the script is executable:
chmod +x Make.py :pre
Here are examples of build tasks you can perform with Make.py:
Install/uninstall packages: Make.py -p no-lib kokkos omp intel
Build specific auxiliary libs: Make.py -a lib-atc lib-meam
Build libs for all installed packages: Make.py -p cuda gpu -gpu mode=double arch=31 -a lib-all
Create a Makefile from scratch with compiler and MPI settings: Make.py -m none -cc g++ -mpi mpich -a file
Augment Makefile.serial with settings for installed packages: Make.py -p intel -intel cpu -m serial -a file
Add JPG and FFTW support to Makefile.mpi: Make.py -m mpi -jpg -fft fftw -a file
Build LAMMPS with a parallel make using Makefile.mpi: Make.py -j 16 -m mpi -a exe
Build LAMMPS and libs it needs using Makefile.serial with accelerator settings: Make.py -p gpu intel -intel cpu -a lib-all file serial :tb(s=:)
The bench and examples directories give Make.py commands that can be
used to build LAMMPS with the various packages and options needed to
run all the benchmark and example input scripts. See these files for
more details:
bench/README
bench/FERMI/README
bench/KEPLER/README
bench/PHI/README
examples/README
examples/accelerate/README
examples/accelerate/make.list :ul
All of the Make.py options and syntax help can be accessed by using
the "-h" switch.
E.g. typing "Make.py -h" gives
Syntax: Make.py switch args ...
switches can be listed in any order
help switch:
-h prints help and syntax for all other specified switches
switch for actions:
-a lib-all, lib-dir, clean, file, exe or machine
list one or more actions, in any order
machine is a Makefile.machine suffix, must be last if used
one-letter switches:
-d (dir), -j (jmake), -m (makefile), -o (output),
-p (packages), -r (redo), -s (settings), -v (verbose)
switches for libs:
-atc, -awpmd, -colvars, -cuda
-gpu, -meam, -poems, -qmmm, -reax
switches for build and makefile options:
-intel, -kokkos, -cc, -mpi, -fft, -jpg, -png :pre
Using the "-h" switch with other switches and actions gives additional
info on all the other specified switches or actions. The "-h" can be
anywhere in the command-line and the other switches do not need their
arguments. E.g. type "Make.py -h -d -atc -intel" will print:
-d dir
dir = LAMMPS home dir
if -d not specified, working dir must be lammps/src :pre
-atc make=suffix lammps=suffix2
all args are optional and can be in any order
make = use Makefile.suffix (def = g++)
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile) :pre
-intel mode
mode = cpu or phi (def = cpu)
build Intel package for CPU or Xeon Phi :pre
Note that Make.py never overwrites an existing Makefile.machine.
Instead, it creates src/MAKE/MINE/Makefile.auto, which you can save or
rename if desired. Likewise it creates an executable named
src/lmp_auto, which you can rename using the -o switch if desired.
The most recently executed Make.py commmand is saved in
src/Make.py.last. You can use the "-r" switch (for redo) to re-invoke
the last command, or you can save a sequence of one or more Make.py
commands to a file and invoke the file of commands using "-r". You
can also label the commands in the file and invoke one or more of them
by name.
A typical use of Make.py is to start with a valid Makefile.machine for
your system, that works for a vanilla LAMMPS build, i.e. when optional
packages are not installed. You can then use Make.py to add various
settings (FFT, JPG, PNG) to the Makefile.machine as well as change its
compiler and MPI options. You can also add additional packages to the
build, as well as build the needed supporting libraries.
You can also use Make.py to create a new Makefile.machine from
scratch, using the "-m none" switch, if you also specify what compiler
and MPI options to use, via the "-cc" and "-mpi" switches.
:line
2.5 Building LAMMPS as a library :h4,link(start_5)
LAMMPS can be built as either a static or shared library, which can
then be called from another application or a scripting language. See
"this section"_Section_howto.html#howto_10 for more info on coupling
LAMMPS to other codes. See "this section"_Section_python.html for
more info on wrapping and running LAMMPS from Python.
[Static library:] :h5
To build LAMMPS as a static library (*.a file on Linux), type
make foo mode=lib :pre
where foo is the machine name. This kind of library is typically used
to statically link a driver application to LAMMPS, so that you can
insure all dependencies are satisfied at compile time. This will use
the ARCHIVE and ARFLAGS settings in src/MAKE/Makefile.foo. The build
will create the file liblammps_foo.a which another application can
link to. It will also create a soft link liblammps.a, which will
point to the most recently built static library.
[Shared library:] :h5
To build LAMMPS as a shared library (*.so file on Linux), which can be
dynamically loaded, e.g. from Python, type
make foo mode=shlib :pre
where foo is the machine name. This kind of library is required when
wrapping LAMMPS with Python; see "Section_python"_Section_python.html
for details. This will use the SHFLAGS and SHLIBFLAGS settings in
src/MAKE/Makefile.foo and perform the build in the directory
Obj_shared_foo. This is so that each file can be compiled with the
-fPIC flag which is required for inclusion in a shared library. The
build will create the file liblammps_foo.so which another application
can link to dyamically. It will also create a soft link liblammps.so,
which will point to the most recently built shared library. This is
the file the Python wrapper loads by default.
Note that for a shared library to be usable by a calling program, all
the auxiliary libraries it depends on must also exist as shared
libraries. This will be the case for libraries included with LAMMPS,
such as the dummy MPI library in src/STUBS or any package libraries in
lib/packages, since they are always built as shared libraries using
the -fPIC switch. However, if a library like MPI or FFTW does not
exist as a shared library, the shared library build will generate an
error. This means you will need to install a shared library version
of the auxiliary library. The build instructions for the library
should tell you how to do this.
Here is an example of such errors when the system FFTW or provided
lib/colvars library have not been built as shared libraries:
/usr/bin/ld: /usr/local/lib/libfftw3.a(mapflags.o): relocation
R_X86_64_32 against `.rodata' can not be used when making a shared
object; recompile with -fPIC
/usr/local/lib/libfftw3.a: could not read symbols: Bad value :pre
/usr/bin/ld: ../../lib/colvars/libcolvars.a(colvarmodule.o):
relocation R_X86_64_32 against `__pthread_key_create' can not be used
when making a shared object; recompile with -fPIC
../../lib/colvars/libcolvars.a: error adding symbols: Bad value :pre
As an example, here is how to build and install the "MPICH
library"_mpich, a popular open-source version of MPI, distributed by
Argonne National Labs, as a shared library in the default
/usr/local/lib location:
:link(mpich,http://www-unix.mcs.anl.gov/mpi)
./configure --enable-shared
make
make install :pre
You may need to use "sudo make install" in place of the last line if
you do not have write privileges for /usr/local/lib. The end result
should be the file /usr/local/lib/libmpich.so.
[Additional requirement for using a shared library:] :h5
The operating system finds shared libraries to load at run-time using
the environment variable LD_LIBRARY_PATH. So you may wish to copy the
file src/liblammps.so or src/liblammps_g++.so (for example) to a place
the system can find it by default, such as /usr/local/lib, or you may
wish to add the LAMMPS src directory to LD_LIBRARY_PATH, so that the
current version of the shared library is always available to programs
that use it.
For the csh or tcsh shells, you would add something like this to your
~/.cshrc file:
setenv LD_LIBRARY_PATH $\{LD_LIBRARY_PATH\}:/home/sjplimp/lammps/src :pre
[Calling the LAMMPS library:] :h5
Either flavor of library (static or shared) allows one or more LAMMPS
objects to be instantiated from the calling program.
When used from a C++ program, all of LAMMPS is wrapped in a LAMMPS_NS
namespace; you can safely use any of its classes and methods from
within the calling code, as needed.
When used from a C or Fortran program or a scripting language like
Python, the library has a simple function-style interface, provided in
src/library.cpp and src/library.h.
See the sample codes in examples/COUPLE/simple for examples of C++ and
C and Fortran codes that invoke LAMMPS thru its library interface.
There are other examples as well in the COUPLE directory which are
discussed in "Section_howto 10"_Section_howto.html#howto_10 of the
manual. See "Section_python"_Section_python.html of the manual for a
description of the Python wrapper provided with LAMMPS that operates
through the LAMMPS library interface.
The files src/library.cpp and library.h define the C-style API for
using LAMMPS as a library. See "Section_howto
19"_Section_howto.html#howto_19 of the manual for a description of the
interface and how to extend it for your needs.
:line
2.6 Running LAMMPS :h4,link(start_6)
By default, LAMMPS runs by reading commands from standard input. Thus
if you run the LAMMPS executable by itself, e.g.
lmp_linux :pre
it will simply wait, expecting commands from the keyboard. Typically
you should put commands in an input script and use I/O redirection,
e.g.
lmp_linux < in.file :pre
For parallel environments this should also work. If it does not, use
the '-in' command-line switch, e.g.
lmp_linux -in in.file :pre
"This section"_Section_commands.html describes how input scripts are
structured and what commands they contain.
You can test LAMMPS on any of the sample inputs provided in the
examples or bench directory. Input scripts are named in.* and sample
outputs are named log.*.name.P where name is a machine and P is the
number of processors it was run on.
Here is how you might run a standard Lennard-Jones benchmark on a
Linux box, using mpirun to launch a parallel job:
cd src
make linux
cp lmp_linux ../bench
cd ../bench
mpirun -np 4 lmp_linux -in in.lj :pre
See "this page"_bench for timings for this and the other benchmarks on
various platforms. Note that some of the example scripts require
LAMMPS to be built with one or more of its optional packages.
:link(bench,http://lammps.sandia.gov/bench.html)
:line
On a Windows box, you can skip making LAMMPS and simply download an
executable, as described above, though the pre-packaged executables
include only certain packages.
To run a LAMMPS executable on a Windows machine, first decide whether
you want to download the non-MPI (serial) or the MPI (parallel)
version of the executable. Download and save the version you have
chosen.
For the non-MPI version, follow these steps:
Get a command prompt by going to Start->Run... ,
then typing "cmd". :ulb,l
Move to the directory where you have saved lmp_win_no-mpi.exe
(e.g. by typing: cd "Documents"). :l
At the command prompt, type "lmp_win_no-mpi -in in.lj", replacing in.lj
with the name of your LAMMPS input script. :l,ule
For the MPI version, which allows you to run LAMMPS under Windows on
multiple processors, follow these steps:
Download and install
"MPICH2"_http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads
for Windows. :ulb,l
You'll need to use the mpiexec.exe and smpd.exe files from the MPICH2
package. Put them in same directory (or path) as the LAMMPS Windows
executable. :l
Get a command prompt by going to Start->Run... ,
then typing "cmd". :l
Move to the directory where you have saved lmp_win_mpi.exe
(e.g. by typing: cd "Documents"). :l
Then type something like this: "mpiexec -localonly 4 lmp_win_mpi -in
in.lj", replacing in.lj with the name of your LAMMPS input script. :l
Note that you may need to provide smpd with a passphrase (it doesn't
matter what you type). :l
In this mode, output may not immediately show up on the screen, so if
your input script takes a long time to execute, you may need to be
patient before the output shows up. :l Alternatively, you can still
use this executable to run on a single processor by typing something
like: "lmp_win_mpi -in in.lj". :l,ule
:line
The screen output from LAMMPS is described in a section below. As it
runs, LAMMPS also writes a log.lammps file with the same information.
Note that this sequence of commands copies the LAMMPS executable
(lmp_linux) to the directory with the input files. This may not be
necessary, but some versions of MPI reset the working directory to
where the executable is, rather than leave it as the directory where
you launch mpirun from (if you launch lmp_linux on its own and not
under mpirun). If that happens, LAMMPS will look for additional input
files and write its output files to the executable directory, rather
than your working directory, which is probably not what you want.
If LAMMPS encounters errors in the input script or while running a
simulation it will print an ERROR message and stop or a WARNING
message and continue. See "Section_errors"_Section_errors.html for a
discussion of the various kinds of errors LAMMPS can or can't detect,
a list of all ERROR and WARNING messages, and what to do about them.
LAMMPS can run a problem on any number of processors, including a
single processor. In theory you should get identical answers on any
number of processors and on any machine. In practice, numerical
round-off can cause slight differences and eventual divergence of
molecular dynamics phase space trajectories.
LAMMPS can run as large a problem as will fit in the physical memory
of one or more processors. If you run out of memory, you must run on
more processors or setup a smaller problem.
:line
2.7 Command-line options :h4,link(start_7)
At run time, LAMMPS recognizes several optional command-line switches
which may be used in any order. Either the full word or a one-or-two
letter abbreviation can be used:
-e or -echo
-h or -help
-i or -in
-k or -kokkos
-l or -log
-nc or -nocite
-pk or -package
-p or -partition
-pl or -plog
-ps or -pscreen
-r or -restart
-ro or -reorder
-sc or -screen
-sf or -suffix
-v or -var :ul
For example, lmp_ibm might be launched as follows:
mpirun -np 16 lmp_ibm -v f tmp.out -l my.log -sc none -in in.alloy
mpirun -np 16 lmp_ibm -var f tmp.out -log my.log -screen none -in in.alloy :pre
Here are the details on the options:
-echo style :pre
Set the style of command echoing. The style can be {none} or {screen}
or {log} or {both}. Depending on the style, each command read from
the input script will be echoed to the screen and/or logfile. This
can be useful to figure out which line of your script is causing an
input error. The default value is {log}. The echo style can also be
set by using the "echo"_echo.html command in the input script itself.
-help :pre
Print a brief help summary and a list of options compiled into this
executable for each LAMMPS style (atom_style, fix, compute,
pair_style, bond_style, etc). This can tell you if the command you
want to use was included via the appropriate package at compile time.
LAMMPS will print the info and immediately exit if this switch is
used.
-in file :pre
Specify a file to use as an input script. This is an optional switch
when running LAMMPS in one-partition mode. If it is not specified,
LAMMPS reads its script from standard input, typically from a script
via I/O redirection; e.g. lmp_linux < in.run. I/O redirection should
also work in parallel, but if it does not (in the unlikely case that
an MPI implementation does not support it), then use the -in flag.
Note that this is a required switch when running LAMMPS in
multi-partition mode, since multiple processors cannot all read from
stdin.
-kokkos on/off keyword/value ... :pre
Explicitly enable or disable KOKKOS support, as provided by the KOKKOS
package. Even if LAMMPS is built with this package, as described
above in "Section 2.3"_#start_3, this switch must be set to enable
running with the KOKKOS-enabled styles the package provides. If the
switch is not set (the default), LAMMPS will operate as if the KOKKOS
package were not installed; i.e. you can run standard LAMMPS or with
the GPU or USER-OMP packages, for testing or benchmarking purposes.
Additional optional keyword/value pairs can be specified which
determine how Kokkos will use the underlying hardware on your
platform. These settings apply to each MPI task you launch via the
"mpirun" or "mpiexec" command. You may choose to run one or more MPI
tasks per physical node. Note that if you are running on a desktop
machine, you typically have one physical node. On a cluster or
supercomputer there may be dozens or 1000s of physical nodes.
Either the full word or an abbreviation can be used for the keywords.
Note that the keywords do not use a leading minus sign. I.e. the
keyword is "t", not "-t". Also note that each of the keywords has a
default setting. Example of when to use these options and what
settings to use on different platforms is given in "Section
5.8"_Section_accelerate.html#acc_8.
d or device
g or gpus
t or threads
n or numa :ul
device Nd :pre
This option is only relevant if you built LAMMPS with CUDA=yes, you
have more than one GPU per node, and if you are running with only one
MPI task per node. The Nd setting is the ID of the GPU on the node to
run on. By default Nd = 0. If you have multiple GPUs per node, they
have consecutive IDs numbered as 0,1,2,etc. This setting allows you
to launch multiple independent jobs on the node, each with a single
MPI task per node, and assign each job to run on a different GPU.
gpus Ng Ns :pre
This option is only relevant if you built LAMMPS with CUDA=yes, you
have more than one GPU per node, and you are running with multiple MPI
tasks per node (up to one per GPU). The Ng setting is how many GPUs
you will use. The Ns setting is optional. If set, it is the ID of a
GPU to skip when assigning MPI tasks to GPUs. This may be useful if
your desktop system reserves one GPU to drive the screen and the rest
are intended for computational work like running LAMMPS. By default
Ng = 1 and Ns is not set.
Depending on which flavor of MPI you are running, LAMMPS will look for
one of these 3 environment variables
SLURM_LOCALID (various MPI variants compiled with SLURM support)
MV2_COMM_WORLD_LOCAL_RANK (Mvapich)
OMPI_COMM_WORLD_LOCAL_RANK (OpenMPI) :pre
which are initialized by the "srun", "mpirun" or "mpiexec" commands.
The environment variable setting for each MPI rank is used to assign a
unique GPU ID to the MPI task.
threads Nt :pre
This option assigns Nt number of threads to each MPI task for
performing work when Kokkos is executing in OpenMP or pthreads mode.
The default is Nt = 1, which essentially runs in MPI-only mode. If
there are Np MPI tasks per physical node, you generally want Np*Nt =
the number of physical cores per node, to use your available hardware
optimally. This also sets the number of threads used by the host when
LAMMPS is compiled with CUDA=yes.
numa Nm :pre
This option is only relevant when using pthreads with hwloc support.
In this case Nm defines the number of NUMA regions (typicaly sockets)
on a node which will be utilizied by a single MPI rank. By default Nm
= 1. If this option is used the total number of worker-threads per
MPI rank is threads*numa. Currently it is always almost better to
assign at least one MPI rank per NUMA region, and leave numa set to
its default value of 1. This is because letting a single process span
multiple NUMA regions induces a significant amount of cross NUMA data
traffic which is slow.
-log file :pre
Specify a log file for LAMMPS to write status information to. In
one-partition mode, if the switch is not used, LAMMPS writes to the
file log.lammps. If this switch is used, LAMMPS writes to the
specified file. In multi-partition mode, if the switch is not used, a
log.lammps file is created with hi-level status information. Each
partition also writes to a log.lammps.N file where N is the partition
ID. If the switch is specified in multi-partition mode, the hi-level
logfile is named "file" and each partition also logs information to a
file.N. For both one-partition and multi-partition mode, if the
specified file is "none", then no log files are created. Using a
"log"_log.html command in the input script will override this setting.
Option -plog will override the name of the partition log files file.N.
-nocite :pre
Disable writing the log.cite file which is normally written to list
references for specific cite-able features used during a LAMMPS run.
See the "citation page"_http://lammps.sandia.gov/cite.html for more
details.
-package style args .... :pre
Invoke the "package"_package.html command with style and args. The
syntax is the same as if the command appeared at the top of the input
script. For example "-package gpu 2" or "-pk gpu 2" is the same as
"package gpu 2"_package.html in the input script. The possible styles
and args are documented on the "package"_package.html doc page. This
switch can be used multiple times, e.g. to set options for the
USER-INTEL and USER-OMP packages which can be used together.
Along with the "-suffix" command-line switch, this is a convenient
mechanism for invoking accelerator packages and their options without
having to edit an input script.
-partition 8x2 4 5 ... :pre
Invoke LAMMPS in multi-partition mode. When LAMMPS is run on P
processors and this switch is not used, LAMMPS runs in one partition,
i.e. all P processors run a single simulation. If this switch is
used, the P processors are split into separate partitions and each
partition runs its own simulation. The arguments to the switch
specify the number of processors in each partition. Arguments of the
form MxN mean M partitions, each with N processors. Arguments of the
form N mean a single partition with N processors. The sum of
processors in all partitions must equal P. Thus the command
"-partition 8x2 4 5" has 10 partitions and runs on a total of 25
processors.
Running with multiple partitions can e useful for running
"multi-replica simulations"_Section_howto.html#howto_5, where each
replica runs on on one or a few processors. Note that with MPI
installed on a machine (e.g. your desktop), you can run on more
(virtual) processors than you have physical processors.
To run multiple independent simulatoins from one input script, using
multiple partitions, see "Section_howto 4"_Section_howto.html#howto_4
of the manual. World- and universe-style "variables"_variable.html
are useful in this context.
-plog file :pre
Specify the base name for the partition log files, so partition N
writes log information to file.N. If file is none, then no partition
log files are created. This overrides the filename specified in the
-log command-line option. This option is useful when working with
large numbers of partitions, allowing the partition log files to be
suppressed (-plog none) or placed in a sub-directory (-plog
replica_files/log.lammps) If this option is not used the log file for
partition N is log.lammps.N or whatever is specified by the -log
command-line option.
-pscreen file :pre
Specify the base name for the partition screen file, so partition N
writes screen information to file.N. If file is none, then no
partition screen files are created. This overrides the filename
specified in the -screen command-line option. This option is useful
when working with large numbers of partitions, allowing the partition
screen files to be suppressed (-pscreen none) or placed in a
sub-directory (-pscreen replica_files/screen). If this option is not
used the screen file for partition N is screen.N or whatever is
specified by the -screen command-line option.
-restart restartfile {remap} datafile keyword value ... :pre
Convert the restart file into a data file and immediately exit. This
is the same operation as if the following 2-line input script were
run:
read_restart restartfile {remap}
write_data datafile keyword value ... :pre
Note that the specified restartfile and datafile can have wild-card
characters ("*",%") as described by the
"read_restart"_read_restart.html and "write_data"_write_data.html
commands. But a filename such as file.* will need to be enclosed in
quotes to avoid shell expansion of the "*" character.
Note that following restartfile, the optional flag {remap} can be
used. This has the same effect as adding it to the
"read_restart"_read_restart.html command, as explained on its doc
page. This is only useful if the reading of the restart file triggers
an error that atoms have been lost. In that case, use of the remap
flag should allow the data file to still be produced.
Also note that following datafile, the same optional keyword/value
pairs can be listed as used by the "write_data"_write_data.html
command.
-reorder nth N
-reorder custom filename :pre
Reorder the processors in the MPI communicator used to instantiate
LAMMPS, in one of several ways. The original MPI communicator ranks
all P processors from 0 to P-1. The mapping of these ranks to
physical processors is done by MPI before LAMMPS begins. It may be
useful in some cases to alter the rank order. E.g. to insure that
cores within each node are ranked in a desired order. Or when using
the "run_style verlet/split"_run_style.html command with 2 partitions
to insure that a specific Kspace processor (in the 2nd partition) is
matched up with a specific set of processors in the 1st partition.
See the "Section_accelerate"_Section_accelerate.html doc pages for
more details.
If the keyword {nth} is used with a setting {N}, then it means every
Nth processor will be moved to the end of the ranking. This is useful
when using the "run_style verlet/split"_run_style.html command with 2
partitions via the -partition command-line switch. The first set of
processors will be in the first partition, the 2nd set in the 2nd
partition. The -reorder command-line switch can alter this so that
the 1st N procs in the 1st partition and one proc in the 2nd partition
will be ordered consecutively, e.g. as the cores on one physical node.
This can boost performance. For example, if you use "-reorder nth 4"
and "-partition 9 3" and you are running on 12 processors, the
processors will be reordered from
0 1 2 3 4 5 6 7 8 9 10 11 :pre
to
0 1 2 4 5 6 8 9 10 3 7 11 :pre
so that the processors in each partition will be
0 1 2 4 5 6 8 9 10
3 7 11 :pre
See the "processors" command for how to insure processors from each
partition could then be grouped optimally for quad-core nodes.
If the keyword is {custom}, then a file that specifies a permutation
of the processor ranks is also specified. The format of the reorder
file is as follows. Any number of initial blank or comment lines
(starting with a "#" character) can be present. These should be
followed by P lines of the form:
I J :pre
where P is the number of processors LAMMPS was launched with. Note
that if running in multi-partition mode (see the -partition switch
above) P is the total number of processors in all partitions. The I
and J values describe a permutation of the P processors. Every I and
J should be values from 0 to P-1 inclusive. In the set of P I values,
every proc ID should appear exactly once. Ditto for the set of P J
values. A single I,J pairing means that the physical processor with
rank I in the original MPI communicator will have rank J in the
reordered communicator.
Note that rank ordering can also be specified by many MPI
implementations, either by environment variables that specify how to
order physical processors, or by config files that specify what
physical processors to assign to each MPI rank. The -reorder switch
simply gives you a portable way to do this without relying on MPI
itself. See the "processors out"_processors command for how to output
info on the final assignment of physical processors to the LAMMPS
simulation domain.
-screen file :pre
Specify a file for LAMMPS to write its screen information to. In
one-partition mode, if the switch is not used, LAMMPS writes to the
screen. If this switch is used, LAMMPS writes to the specified file
instead and you will see no screen output. In multi-partition mode,
if the switch is not used, hi-level status information is written to
the screen. Each partition also writes to a screen.N file where N is
the partition ID. If the switch is specified in multi-partition mode,
the hi-level screen dump is named "file" and each partition also
writes screen information to a file.N. For both one-partition and
multi-partition mode, if the specified file is "none", then no screen
output is performed. Option -pscreen will override the name of the
partition screen files file.N.
-suffix style args :pre
Use variants of various styles if they exist. The specified style can
be {cuda}, {gpu}, {intel}, {kk}, {omp}, {opt}, or {hybrid}. These
refer to optional packages that LAMMPS can be built with, as described
above in "Section 2.3"_#start_3. The "gpu" style corresponds to the
GPU package, the "intel" style to the USER-INTEL package, the "kk"
style to the KOKKOS package, the "opt" style to the OPT package, and
the "omp" style to the USER-OMP package. The hybrid style is the only
style that accepts arguments. It allows for two packages to be
specified. The first package specified is the default and will be used
if it is available. If no style is available for the first package,
the style for the second package will be used if available. For
example, "-suffix hybrid intel omp" will use styles from the
USER-INTEL package if they are installed and available, but styles for
the USER-OMP package otherwise.
Along with the "-package" command-line switch, this is a convenient
mechanism for invoking accelerator packages and their options without
having to edit an input script.
As an example, all of the packages provide a "pair_style
lj/cut"_pair_lj.html variant, with style names lj/cut/gpu,
lj/cut/intel, lj/cut/kk, lj/cut/omp, and lj/cut/opt. A variant style
can be specified explicitly in your input script, e.g. pair_style
lj/cut/gpu. If the -suffix switch is used the specified suffix
(gpu,intel,kk,omp,opt) is automatically appended whenever your input
script command creates a new "atom"_atom_style.html,
"pair"_pair_style.html, "fix"_fix.html, "compute"_compute.html, or
"run"_run_style.html style. If the variant version does not exist,
the standard version is created.
For the GPU package, using this command-line switch also invokes the
default GPU settings, as if the command "package gpu 1" were used at
the top of your input script. These settings can be changed by using
the "-package gpu" command-line switch or the "package
gpu"_package.html command in your script.
For the USER-INTEL package, using this command-line switch also
invokes the default USER-INTEL settings, as if the command "package
intel 1" were used at the top of your input script. These settings
can be changed by using the "-package intel" command-line switch or
the "package intel"_package.html command in your script. If the
USER-OMP package is also installed, the hybrid style with "intel omp"
arguments can be used to make the omp suffix a second choice, if a
requested style is not available in the USER-INTEL package. It will
also invoke the default USER-OMP settings, as if the command "package
omp 0" were used at the top of your input script. These settings can
be changed by using the "-package omp" command-line switch or the
"package omp"_package.html command in your script.
For the KOKKOS package, using this command-line switch also invokes
the default KOKKOS settings, as if the command "package kokkos" were
used at the top of your input script. These settings can be changed
by using the "-package kokkos" command-line switch or the "package
kokkos"_package.html command in your script.
For the OMP package, using this command-line switch also invokes the
default OMP settings, as if the command "package omp 0" were used at
the top of your input script. These settings can be changed by using
the "-package omp" command-line switch or the "package
omp"_package.html command in your script.
The "suffix"_suffix.html command can also be used within an input
script to set a suffix, or to turn off or back on any suffix setting
made via the command line.
-var name value1 value2 ... :pre
Specify a variable that will be defined for substitution purposes when
the input script is read. This switch can be used multiple times to
define multiple variables. "Name" is the variable name which can be a
single character (referenced as $x in the input script) or a full
string (referenced as $\{abc\}). An "index-style
variable"_variable.html will be created and populated with the
subsequent values, e.g. a set of filenames. Using this command-line
option is equivalent to putting the line "variable name index value1
value2 ..." at the beginning of the input script. Defining an index
variable as a command-line argument overrides any setting for the same
index variable in the input script, since index variables cannot be
re-defined. See the "variable"_variable.html command for more info on
defining index and other kinds of variables and "this
section"_Section_commands.html#cmd_2 for more info on using variables
in input scripts.
NOTE: Currently, the command-line parser looks for arguments that
start with "-" to indicate new switches. Thus you cannot specify
multiple variable values if any of they start with a "-", e.g. a
negative numeric value. It is OK if the first value1 starts with a
"-", since it is automatically skipped.
:line
2.8 LAMMPS screen output :h4,link(start_8)
As LAMMPS reads an input script, it prints information to both the
screen and a log file about significant actions it takes to setup a
simulation. When the simulation is ready to begin, LAMMPS performs
various initializations and prints the amount of memory (in MBytes per
processor) that the simulation requires. It also prints details of
the initial thermodynamic state of the system. During the run itself,
thermodynamic information is printed periodically, every few
timesteps. When the run concludes, LAMMPS prints the final
thermodynamic state and a total run time for the simulation. It then
appends statistics about the CPU time and storage requirements for the
simulation. An example set of statistics is shown here:
Loop time of 2.81192 on 4 procs for 300 steps with 2004 atoms
Performance: 18.436 ns/day 1.302 hours/ns 106.689 timesteps/s
97.0% CPU use with 4 MPI tasks x no OpenMP threads :pre
MPI task timings breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.9808 | 2.0134 | 2.0318 | 1.4 | 71.60
Bond | 0.0021894 | 0.0060319 | 0.010058 | 4.7 | 0.21
Kspace | 0.3207 | 0.3366 | 0.36616 | 3.1 | 11.97
Neigh | 0.28411 | 0.28464 | 0.28516 | 0.1 | 10.12
Comm | 0.075732 | 0.077018 | 0.07883 | 0.4 | 2.74
Output | 0.00030518 | 0.00042665 | 0.00078821 | 1.0 | 0.02
Modify | 0.086606 | 0.086631 | 0.086668 | 0.0 | 3.08
Other | | 0.007178 | | | 0.26 :pre
Nlocal: 501 ave 508 max 490 min
Histogram: 1 0 0 0 0 0 1 1 0 1
Nghost: 6586.25 ave 6628 max 6548 min
Histogram: 1 0 1 0 0 0 1 0 0 1
Neighs: 177007 ave 180562 max 170212 min
Histogram: 1 0 0 0 0 0 0 1 1 1 :pre
Total # of neighbors = 708028
Ave neighs/atom = 353.307
Ave special neighs/atom = 2.34032
Neighbor list builds = 26
Dangerous builds = 0 :pre
The first section provides a global loop timing summary. The loop time
is the total wall time for the section. The {Performance} line is
provided for convenience to help predicting the number of loop
continuations required and for comparing performance with other
similar MD codes. The CPU use line provides the CPU utilzation per
MPI task; it should be close to 100% times the number of OpenMP
threads (or 1). Lower numbers correspond to delays due to file I/O or
insufficient thread utilization.
The MPI task section gives the breakdown of the CPU run time (in
seconds) into major categories:
{Pair} stands for all non-bonded force computation
{Bond} stands for bonded interactions: bonds, angles, dihedrals, impropers
{Kspace} stands for reciprocal space interactions: Ewald, PPPM, MSM
{Neigh} stands for neighbor list construction
{Comm} stands for communicating atoms and their properties
{Output} stands for writing dumps and thermo output
{Modify} stands for fixes and computes called by them
{Other} is the remaining time :ul
For each category, there is a breakdown of the least, average and most
amount of wall time a processor spent on this section. Also you have the
variation from the average time. Together these numbers allow to gauge
the amount of load imbalance in this segment of the calculation. Ideally
the difference between minimum, maximum and average is small and thus
the variation from the average close to zero. The final column shows
the percentage of the total loop time is spent in this section.
When using the "timer full"_timer.html setting, an additional column
is present that also prints the CPU utilization in percent. In
addition, when using {timer full} and the "package omp"_package.html
command are active, a similar timing summary of time spent in threaded
regions to monitor thread utilization and load balance is provided. A
new entry is the {Reduce} section, which lists the time spend in
reducing the per-thread data elements to the storage for non-threaded
computation. These thread timings are taking from the first MPI rank
only and and thus, as the breakdown for MPI tasks can change from MPI
rank to MPI rank, this breakdown can be very different for individual
ranks. Here is an example output for this section:
Thread timings breakdown (MPI rank 0):
Total threaded time 0.6846 / 90.6%
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.5127 | 0.5147 | 0.5167 | 0.3 | 75.18
Bond | 0.0043139 | 0.0046779 | 0.0050418 | 0.5 | 0.68
Kspace | 0.070572 | 0.074541 | 0.07851 | 1.5 | 10.89
Neigh | 0.084778 | 0.086969 | 0.089161 | 0.7 | 12.70
-Reduce | 0.0036485 | 0.003737 | 0.0038254 | 0.1 | 0.55
+Reduce | 0.0036485 | 0.003737 | 0.0038254 | 0.1 | 0.55 :pre
The third section lists the number of owned atoms (Nlocal), ghost atoms
(Nghost), and pair-wise neighbors stored per processor. The max and min
values give the spread of these values across processors with a 10-bin
histogram showing the distribution. The total number of histogram counts
is equal to the number of processors.
The last section gives aggregate statistics for pair-wise neighbors
and special neighbors that LAMMPS keeps track of (see the
"special_bonds"_special_bonds.html command). The number of times
neighbor lists were rebuilt during the run is given as well as the
number of potentially "dangerous" rebuilds. If atom movement
triggered neighbor list rebuilding (see the
"neigh_modify"_neigh_modify.html command), then dangerous
reneighborings are those that were triggered on the first timestep
atom movement was checked for. If this count is non-zero you may wish
to reduce the delay factor to insure no force interactions are missed
by atoms moving beyond the neighbor skin distance before a rebuild
takes place.
If an energy minimization was performed via the
"minimize"_minimize.html command, additional information is printed,
e.g.
Minimization stats:
Stopping criterion = linesearch alpha is zero
Energy initial, next-to-last, final =
-6372.3765206 -8328.46998942 -8328.46998942
Force two-norm initial, final = 1059.36 5.36874
Force max component initial, final = 58.6026 1.46872
Final line search alpha, max atom move = 2.7842e-10 4.0892e-10
Iterations, force evaluations = 701 1516 :pre
The first line prints the criterion that determined the minimization
to be completed. The third line lists the initial and final energy,
as well as the energy on the next-to-last iteration. The next 2 lines
give a measure of the gradient of the energy (force on all atoms).
The 2-norm is the "length" of this force vector; the inf-norm is the
largest component. Then some information about the line search and
statistics on how many iterations and force-evaluations the minimizer
required. Multiple force evaluations are typically done at each
iteration to perform a 1d line minimization in the search direction.
If a "kspace_style"_kspace_style.html long-range Coulombics solve was
performed during the run (PPPM, Ewald), then additional information is
printed, e.g.
FFT time (% of Kspce) = 0.200313 (8.34477)
FFT Gflps 3d 1d-only = 2.31074 9.19989 :pre
The first line gives the time spent doing 3d FFTs (4 per timestep) and
the fraction it represents of the total KSpace time (listed above).
Each 3d FFT requires computation (3 sets of 1d FFTs) and communication
(transposes). The total flops performed is 5Nlog_2(N), where N is the
number of points in the 3d grid. The FFTs are timed with and without
the communication and a Gflop rate is computed. The 3d rate is with
communication; the 1d rate is without (just the 1d FFTs). Thus you
can estimate what fraction of your FFT time was spent in
communication, roughly 75% in the example above.
:line
2.9 Tips for users of previous LAMMPS versions :h4,link(start_9)
The current C++ began with a complete rewrite of LAMMPS 2001, which
was written in F90. Features of earlier versions of LAMMPS are listed
in "Section_history"_Section_history.html. The F90 and F77 versions
(2001 and 99) are also freely distributed as open-source codes; check
the "LAMMPS WWW Site"_lws for distribution information if you prefer
those versions. The 99 and 2001 versions are no longer under active
development; they do not have all the features of C++ LAMMPS.
If you are a previous user of LAMMPS 2001, these are the most
significant changes you will notice in C++ LAMMPS:
(1) The names and arguments of many input script commands have
changed. All commands are now a single word (e.g. read_data instead
of read data).
(2) All the functionality of LAMMPS 2001 is included in C++ LAMMPS,
but you may need to specify the relevant commands in different ways.
(3) The format of the data file can be streamlined for some problems.
See the "read_data"_read_data.html command for details. The data file
section "Nonbond Coeff" has been renamed to "Pair Coeff" in C++ LAMMPS.
(4) Binary restart files written by LAMMPS 2001 cannot be read by C++
LAMMPS with a "read_restart"_read_restart.html command. This is
because they were output by F90 which writes in a different binary
format than C or C++ writes or reads. Use the {restart2data} tool
provided with LAMMPS 2001 to convert the 2001 restart file to a text
data file. Then edit the data file as necessary before using the C++
LAMMPS "read_data"_read_data.html command to read it in.
(5) There are numerous small numerical changes in C++ LAMMPS that mean
you will not get identical answers when comparing to a 2001 run.
However, your initial thermodynamic energy and MD trajectory should be
close if you have setup the problem for both codes the same.
diff --git a/doc/src/compute_sna_atom.txt b/doc/src/compute_sna_atom.txt
index d614d870c..b8e3f9b73 100644
--- a/doc/src/compute_sna_atom.txt
+++ b/doc/src/compute_sna_atom.txt
@@ -1,241 +1,241 @@
"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 sna/atom command :h3
compute snad/atom command :h3
compute snav/atom command :h3
[Syntax:]
compute ID group-ID sna/atom rcutfac rfac0 twojmax R_1 R_2 ... w_1 w_2 ... keyword values ...
compute ID group-ID snad/atom rcutfac rfac0 twojmax R_1 R_2 ... w_1 w_2 ... keyword values ...
compute ID group-ID snav/atom rcutfac rfac0 twojmax R_1 R_2 ... w_1 w_2 ... keyword values ... :pre
ID, group-ID are documented in "compute"_compute.html command :ulb,l
sna/atom = style name of this compute command :l
rcutfac = scale factor applied to all cutoff radii (positive real) :l
rfac0 = parameter in distance to angle conversion (0 < rcutfac < 1) :l
twojmax = band limit for bispectrum components (non-negative integer) :l
R_1, R_2,... = list of cutoff radii, one for each type (distance units) :l
w_1, w_2,... = list of neighbor weights, one for each type :l
zero or more keyword/value pairs may be appended :l
keyword = {diagonal} or {rmin0} or {switchflag} :l
{diagonal} value = {0} or {1} or {2} or {3}
{0} = all j1, j2, j <= twojmax, j2 <= j1
{1} = subset satisfying j1 == j2
{2} = subset satisfying j1 == j2 == j3
{3} = subset satisfying j2 <= j1 <= j
{rmin0} value = parameter in distance to angle conversion (distance units)
{switchflag} value = {0} or {1}
{0} = do not use switching function
{1} = use switching function :pre
:ule
[Examples:]
compute b all sna/atom 1.4 0.99363 6 2.0 2.4 0.75 1.0 diagonal 3 rmin0 0.0
compute db all sna/atom 1.4 0.95 6 2.0 1.0
compute vb all sna/atom 1.4 0.95 6 2.0 1.0 :pre
[Description:]
Define a computation that calculates a set of bispectrum components
for each atom in a group.
Bispectrum components of an atom are order parameters characterizing
the radial and angular distribution of neighbor atoms. The detailed
mathematical definition is given in the paper by Thompson et
al. "(Thompson)"_#Thompson2014
The position of a neighbor atom {i'} relative to a central atom {i} is
a point within the 3D ball of radius {R_ii' = rcutfac*(R_i + R_i')}
Bartok et al. "(Bartok)"_#Bartok2010, proposed mapping this 3D ball
onto the 3-sphere, the surface of the unit ball in a four-dimensional
space. The radial distance {r} within {R_ii'} is mapped on to a third
polar angle {theta0} defined by,
:c,image(Eqs/compute_sna_atom1.jpg)
In this way, all possible neighbor positions are mapped on to a subset
of the 3-sphere. Points south of the latitude {theta0max=rfac0*Pi}
are excluded.
The natural basis for functions on the 3-sphere is formed by the 4D
hyperspherical harmonics {U^j_m,m'(theta, phi, theta0).} These
functions are better known as {D^j_m,m',} the elements of the Wigner
{D}-matrices "(Meremianin"_#Meremianin2006,
"Varshalovich)"_#Varshalovich1987.
The density of neighbors on the 3-sphere can be written as a sum of
Dirac-delta functions, one for each neighbor, weighted by species and
radial distance. Expanding this density function as a generalized
Fourier series in the basis functions, we can write each Fourier
coefficient as
:c,image(Eqs/compute_sna_atom2.jpg)
The {w_i'} neighbor weights are dimensionless numbers that are chosen
to distinguish atoms of different types, while the central atom is
arbitrarily assigned a unit weight. The function {fc(r)} ensures that
the contribution of each neighbor atom goes smoothly to zero at
{R_ii'}:
:c,image(Eqs/compute_sna_atom4.jpg)
The expansion coefficients {u^j_m,m'} are complex-valued and they are
not directly useful as descriptors, because they are not invariant
under rotation of the polar coordinate frame. However, the following
scalar triple products of expansion coefficients can be shown to be
real-valued and invariant under rotation "(Bartok)"_#Bartok2010.
:c,image(Eqs/compute_sna_atom3.jpg)
The constants {H^jmm'_j1m1m1'_j2m2m2'} are coupling coefficients,
analogous to Clebsch-Gordan coefficients for rotations on the
2-sphere. These invariants are the components of the bispectrum and
these are the quantities calculated by the compute {sna/atom}. They
characterize the strength of density correlations at three points on
the 3-sphere. The j2=0 subset form the power spectrum, which
characterizes the correlations of two points. The lowest-order
components describe the coarsest features of the density function,
while higher-order components reflect finer detail. Note that the
central atom is included in the expansion, so three point-correlations
can be either due to three neighbors, or two neighbors and the central
atom.
Compute {snad/atom} calculates the derivative of the bispectrum components
summed separately for each atom type:
:c,image(Eqs/compute_sna_atom5.jpg)
The sum is over all atoms {i'} of atom type {I}. For each atom {i},
this compute evaluates the above expression for each direction, each
atom type, and each bispectrum component. See section below on output
for a detailed explanation.
Compute {snav/atom} calculates the virial contribution due to the
derivatives:
:c,image(Eqs/compute_sna_atom6.jpg)
Again, the sum is over all atoms {i'} of atom type {I}. For each atom
{i}, this compute evaluates the above expression for each of the six
virial components, each atom type, and each bispectrum component. See
section below on output for a detailed explanation.
The value of all bispectrum components will be zero for atoms not in
the group. Neighbor atoms not in the group do not contribute to the
bispectrum of atoms in the group.
The neighbor list needed to compute this quantity is constructed each
time the calculation is performed (i.e. each time a snapshot of atoms
is dumped). Thus it can be inefficient to compute/dump this quantity
too frequently.
The argument {rcutfac} is a scale factor that controls the ratio of
atomic radius to radial cutoff distance.
The argument {rfac0} and the optional keyword {rmin0} define the
linear mapping from radial distance to polar angle {theta0} on the
3-sphere.
The argument {twojmax} and the keyword {diagonal} define which
bispectrum components are generated. See section below on output for a
detailed explanation of the number of bispectrum components and the
ordered in which they are listed
The keyword {switchflag} can be used to turn off the switching
function.
NOTE: If you have a bonded system, then the settings of
"special_bonds"_special_bonds.html command can remove pairwise
interactions between atoms in the same bond, angle, or dihedral. This
is the default setting for the "special_bonds"_special_bonds.html
command, and means those pairwise interactions do not appear in the
neighbor list. Because this fix uses the neighbor list, it also means
those pairs will not be included in the calculation. One way to get
around this, is to write a dump file, and use the "rerun"_rerun.html
command to compute the bispectrum components for snapshots in the dump
file. The rerun script can use a "special_bonds"_special_bonds.html
command that includes all pairs in the neighbor list.
;line
[Output info:]
Compute {sna/atom} calculates a per-atom array, each column
corresponding to a particular bispectrum component. The total number
of columns and the identities of the bispectrum component contained in
each column depend on the values of {twojmax} and {diagonal}, as
described by the following piece of python code:
for j1 in range(0,twojmax+1):
if(diagonal==2):
- print j1/2,j1/2,j1/2
+ print j1/2.,j1/2.,j1/2.
elif(diagonal==1):
for j in range(0,min(twojmax,2*j1)+1,2):
- print j1/2,j1/2,j/2
+ print j1/2.,j1/2.,j/2.
elif(diagonal==0):
for j2 in range(0,j1+1):
for j in range(j1-j2,min(twojmax,j1+j2)+1,2):
- print j1/2,j2/2,j/2
+ print j1/2.,j2/2.,j/2.
elif(diagonal==3):
for j2 in range(0,j1+1):
for j in range(j1-j2,min(twojmax,j1+j2)+1,2):
- if (j>=j1): print j1/2,j2/2,j/2 :pre
+ if (j>=j1): print j1/2.,j2/2.,j/2. :pre
Compute {snad/atom} evaluates a per-atom array. The columns are
arranged into {ntypes} blocks, listed in order of atom type {I}. Each
block contains three sub-blocks corresponding to the {x}, {y}, and {z}
components of the atom position. Each of these sub-blocks contains
one column for each bispectrum component, the same as for compute
{sna/atom}
Compute {snav/atom} evaluates a per-atom array. The columns are
arranged into {ntypes} blocks, listed in order of atom type {I}. Each
block contains six sub-blocks corresponding to the {xx}, {yy}, {zz},
{yz}, {xz}, and {xy} components of the virial tensor in Voigt
notation. Each of these sub-blocks contains one column for each
bispectrum component, the same as for compute {sna/atom}
These values can be accessed by any command that uses per-atom values
from a compute as input. See "Section_howto
15"_Section_howto.html#howto_15 for an overview of LAMMPS output
options.
[Restrictions:]
These computes are part of the SNAP package. They are 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_style snap"_pair_snap.html
[Default:]
The optional keyword defaults are {diagonal} = 0, {rmin0} = 0,
{switchflag} = 1.
:line
:link(Thompson2014)
[(Thompson)] Thompson, Swiler, Trott, Foiles, Tucker, under review, preprint
available at "arXiv:1409.3880"_http://arxiv.org/abs/1409.3880
:link(Bartok2010)
[(Bartok)] Bartok, Payne, Risi, Csanyi, Phys Rev Lett, 104, 136403 (2010).
:link(Meremianin2006)
[(Meremianin)] Meremianin, J. Phys. A, 39, 3099 (2006).
:link(Varshalovich1987)
[(Varshalovich)] Varshalovich, Moskalev, Khersonskii, Quantum Theory
of Angular Momentum, World Scientific, Singapore (1987).
diff --git a/doc/src/fix_flow_gauss.txt b/doc/src/fix_flow_gauss.txt
new file mode 100644
index 000000000..2a0ec4f54
--- /dev/null
+++ b/doc/src/fix_flow_gauss.txt
@@ -0,0 +1,142 @@
+"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
+
+fix flow/gauss command :h3
+
+[Syntax:]
+
+fix ID group-ID flow/gauss xflag yflag zflag keyword :pre
+
+ID, group-ID are documented in "fix"_fix.html command :ulb,l
+flow/gauss = style name of this fix command :l
+xflag,yflag,zflag = 0 or 1 :l
+ 0 = do not conserve current in this dimension
+ 1 = conserve current in this dimension :pre
+zero or more keyword/value pairs may be appended :l
+keyword = {energy} :l
+ {energy} value = no or yes
+ no = do not compute work done by this fix
+ yes = compute work done by this fix :pre
+:ule
+
+[Examples:]
+
+fix GD fluid flow/gauss 1 0 0
+fix GD fluid flow/gauss 1 1 1 energy yes :pre
+
+[Description:]
+
+This fix implements the Gaussian dynamics (GD) method to simulate a
+system at constant mass flux "(Strong)"_#Strong. GD is a
+nonequilibrium molecular dynamics simulation method that can be used
+to study fluid flows through pores, pipes, and channels. In its
+original implementation GD was used to compute the pressure required
+to achieve a fixed mass flux through an opening. The flux can be
+conserved in any combination of the directions, x, y, or z, using
+xflag,yflag,zflag. This fix does not initialize a net flux through a
+system, it only conserves the center-of-mass momentum that is present
+when the fix is declared in the input script. Use the
+"velocity"_velocity.html command to generate an initial center-of-mass
+momentum.
+
+GD applies an external fluctuating gravitational field that acts as a
+driving force to keep the system away from equilibrium. To maintain
+steady state, a profile-unbiased thermostat must be implemented to
+dissipate the heat that is added by the driving force. "Compute
+temp/profile"_compute_temp_profile.html can be used to implement a
+profile-unbiased thermostat.
+
+A common use of this fix is to compute a pressure drop across a pipe,
+pore, or membrane. The pressure profile can be computed in LAMMPS with
+"compute stress/atom"_compute_stress_atom.html and "fix
+ave/chunk"_fix_ave_chunk.html, or with the hardy method in "fix
+atc"_fix_atc.html. Note that the simple "compute
+stress/atom"_compute_stress_atom.html method is only accurate away
+from inhomogeneities in the fluid, such as fixed wall atoms. Further,
+the computed pressure profile must be corrected for the acceleration
+applied by GD before computing a pressure drop or comparing it to
+other methods, such as the pump method "(Zhu)"_#Zhu. The pressure
+correction is discussed and described in "(Strong)"_#Strong.
+
+NOTE: For a complete example including the considerations discussed
+above, see the examples/USER/flow_gauss directory.
+
+NOTE: Only the flux of the atoms in group-ID will be conserved. If the
+velocities of the group-ID atoms are coupled to the velocities of
+other atoms in the simulation, the flux will not be conserved. For
+example, in a simulation with fluid atoms and harmonically constrained
+wall atoms, if a single thermostat is applied to group {all}, the
+fluid atom velocities will be coupled to the wall atom velocities, and
+the flux will not be conserved. This issue can be avoided by
+thermostatting the fluid and wall groups separately.
+
+Adding an acceleration to atoms does work on the system. This added
+energy can be optionally subtracted from the potential energy for the
+thermodynamic output (see below) to check that the timestep is small
+enough to conserve energy. Since the applied acceleration is
+fluctuating in time, the work cannot be computed from a potential. As
+a result, computing the work is slightly more computationally
+expensive than usual, so it is not performed by default. To invoke the
+work calculation, use the {energy} keyword. The
+"fix_modify"_fix_modify.html {energy} option also invokes the work
+calculation, and overrides an {energy no} setting here. If neither
+{energy yes} or {fix_modify energy yes} are set, the global scalar
+computed by the fix will return zero.
+
+NOTE: In order to check energy conservation, any other fixes that do
+work on the system must have {fix_modify energy yes} set as well. This
+includes thermostat fixes and any constraints that hold the positions
+of wall atoms fixed, such as "fix spring/self"_fix_spring_self.html.
+
+:line
+
+[Restart, fix_modify, output, run start/stop, minimize info:]
+
+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.
+
+No information about this fix is written to "binary restart
+files"_restart.html.
+
+The "fix_modify"_fix_modify.html {energy} option is supported by this
+fix to subtract the work done from the
+system's potential energy as part of "thermodynamic
+output"_thermo_style.html.
+
+This fix computes a global scalar and a global 3-vector of forces,
+which can be accessed by various "output
+commands"_Section_howto.html#howto_15. The scalar is the negative of the
+work done on the system, see above discussion. The vector is the total force
+that this fix applied to the group of atoms on the current timestep.
+The scalar and vector values calculated by this fix are "extensive".
+
+No parameter of this fix can be used with the {start/stop} keywords of
+the "run"_run.html command.
+
+[Restrictions:] none
+
+[Related commands:]
+
+"fix addforce"_fix_addforce.html, "compute
+temp/profile"_compute_temp_profile.html, "velocity"_velocity.html
+
+[Default:]
+
+The option default for the {energy} keyword is energy = no.
+
+:line
+
+:link(Strong)
+[(Strong)] Strong and Eaves, J. Phys. Chem. Lett. 7, 1907 (2016).
+
+:link(Evans)
+[(Evans)] Evans and Morriss, Phys. Rev. Lett. 56, 2172 (1986).
+
+:link(Zhu)
+[(Zhu)] Zhu, Tajkhorshid, and Schulten, Biophys. J. 83, 154 (2002).
diff --git a/doc/utils/sha1sum.py b/doc/utils/sha1sum.py
new file mode 100755
index 000000000..d4842ecf1
--- /dev/null
+++ b/doc/utils/sha1sum.py
@@ -0,0 +1,7 @@
+#!/bin/env python
+# simple utility which reimplements sha1sum using Python
+import hashlib
+import sys
+s = hashlib.sha1()
+s.update(sys.stdin.read().encode())
+print(s.hexdigest())
diff --git a/examples/USER/flow_gauss/README b/examples/USER/flow_gauss/README
new file mode 100644
index 000000000..4966cd2dc
--- /dev/null
+++ b/examples/USER/flow_gauss/README
@@ -0,0 +1,45 @@
+The input script in.GD is an example simulation using Gaussian dynamics (GD).
+The simulation is of a simple 2d Lennard-Jones fluid flowing through a pipe.
+For details see online LAMMPS documentation and
+Strong and Eaves, J. Phys. Chem. Lett. 7(10) 2016, p. 1907.
+
+Note that the run times and box size are chosen to allow a fast example run.
+They are not adequate for a real simulation.
+
+The script has the following parts:
+1) initialize variables
+ These can be modified to customize the simulation. Note that if the
+ pipe dimensions L or d are changed, the geometry should be checked
+ by visualizing the coordinates in all.init.lammpstrj.
+
+2) create box
+
+3) set up potential
+
+4) create atoms
+
+5) set up profile-unbiased thermostat (PUT)
+ see Evans and Morriss, Phys. Rev. Lett. 56(20) 1986, p. 2172
+ By default, this uses boxes which contain on average 8 molecules.
+
+6) equilibrate without GD
+
+7) initialize the center-of-mass velocity and run to achieve steady-state
+ The system is initialized with a uniform velocity profile, which
+ relaxes over the course of the simulation.
+
+8) collect data
+ The data is output in several files:
+ GD.out contains the force that GD applies, and the flux in the x- and
+ y- directions. The output Jx should be equal to the value of
+ J set in section 1, which is 0.1 by default.
+ x_profiles contains the velocity, density, and pressure profiles in
+ the x-direction. The pressure profile is given by
+ (-1/2V)*(c_spa[1] + c_spa[2]), where V is the volume of a
+ slice. The pressure profile is computed with IK1, see
+ Todd, Evans, and Davis, Phys. Rev. E 52(2) 1995, p. 1627.
+ Note that to compare with the pump method, or to
+ compute a pressure drop, you must correct this pressure
+ profile as described in Strong 2016 above.
+ Vy_profile is the velocity profile inside the pipe along the
+ y-direction, u_x(y).
diff --git a/examples/USER/flow_gauss/in.GD b/examples/USER/flow_gauss/in.GD
new file mode 100755
index 000000000..8117715c1
--- /dev/null
+++ b/examples/USER/flow_gauss/in.GD
@@ -0,0 +1,258 @@
+#LAMMPS input script
+#in.GD
+#see README for details
+
+###############################################################################
+#initialize variables
+clear
+
+#frequency for outputting info (timesteps)
+variable dump_rate equal 50
+variable thermo_rate equal 10
+
+#equilibration time (timesteps)
+variable equil equal 1000
+
+#stabilization time (timesteps to reach steady-state)
+variable stabil equal 1000
+
+#data collection time (timesteps)
+variable run equal 2000
+
+#length of pipe
+variable L equal 30
+
+#width of pipe
+variable d equal 20
+
+#flux (mass/sigma*tau)
+variable J equal 0.1
+
+#simulation box dimensions
+variable Lx equal 100
+variable Ly equal 40
+
+#bulk fluid density
+variable dens equal 0.8
+
+#lattice spacing for wall atoms
+variable aWall equal 1.0 #1.7472
+
+#timestep
+variable ts equal 0.001
+
+#temperature
+variable T equal 2.0
+
+#thermostat damping constant
+variable tdamp equal ${ts}*100
+
+units lj
+dimension 2
+atom_style atomic
+
+
+###############################################################################
+#create box
+
+#create lattice with the spacing aWall
+variable rhoWall equal ${aWall}^(-2)
+lattice sq ${rhoWall}
+
+#modify input dimensions to be multiples of aWall
+variable L1 equal round($L/${aWall})*${aWall}
+variable d1 equal round($d/${aWall})*${aWall}
+variable Ly1 equal round(${Ly}/${aWall})*${aWall}
+variable Lx1 equal round(${Lx}/${aWall})*${aWall}
+
+#create simulation box
+variable lx2 equal ${Lx1}/2
+variable ly2 equal ${Ly1}/2
+region simbox block -${lx2} ${lx2} -${ly2} ${ly2} 0 0.1 units box
+create_box 2 simbox
+
+#####################################################################
+#set up potential
+
+mass 1 1.0 #fluid atoms
+mass 2 1.0 #wall atoms
+
+pair_style lj/cut 2.5
+pair_modify shift yes
+pair_coeff 1 1 1.0 1.0 2.5
+pair_coeff 1 2 1.0 1.0 1.12246
+pair_coeff 2 2 0.0 0.0 0.0
+
+timestep ${ts}
+
+#####################################################################
+#create atoms
+
+#create wall atoms everywhere
+create_atoms 2 box
+
+#define region which is "walled off"
+variable dhalf equal ${d1}/2
+variable Lhalf equal ${L1}/2
+region walltop block -${Lhalf} ${Lhalf} ${dhalf} EDGE -0.1 0.1 &
+ units box
+region wallbot block -${Lhalf} ${Lhalf} EDGE -${dhalf} -0.1 0.1 &
+ units box
+region outsidewall union 2 walltop wallbot side out
+
+#remove wall atoms outside wall region
+group outside region outsidewall
+delete_atoms group outside
+
+#remove wall atoms that aren't on edge of wall region
+variable x1 equal ${Lhalf}-${aWall}
+variable y1 equal ${dhalf}+${aWall}
+region insideTop block -${x1} ${x1} ${y1} EDGE -0.1 0.1 units box
+region insideBot block -${x1} ${x1} EDGE -${y1} -0.1 0.1 units box
+region insideWall union 2 insideTop insideBot
+group insideWall region insideWall
+delete_atoms group insideWall
+
+#define new lattice, to give correct fluid density
+#y lattice const must be a multiple of aWall
+variable atrue equal ${dens}^(-1/2)
+variable ay equal round(${atrue}/${aWall})*${aWall}
+
+#choose x lattice const to give correct density
+variable ax equal (${ay}*${dens})^(-1)
+
+#change Lx to be multiple of ax
+variable Lx1 equal round(${Lx}/${ax})*${ax}
+variable lx2 equal ${Lx1}/2
+change_box all x final -${lx2} ${lx2} units box
+
+#define new lattice
+lattice custom ${dens} &
+ a1 ${ax} 0.0 0.0 a2 0.0 ${ay} 0.0 a3 0.0 0.0 1.0 &
+ basis 0.0 0.0 0.0
+
+#fill in rest of box with bulk particles
+variable delta equal 0.001
+variable Ldelt equal ${Lhalf}+${delta}
+variable dDelt equal ${dhalf}-${delta}
+region left block EDGE -${Ldelt} EDGE EDGE -0.1 0.1 units box
+region right block ${Ldelt} EDGE EDGE EDGE -0.1 0.1 units box
+region pipe block -${Ldelt} ${Ldelt} -${dDelt} ${dDelt} -0.1 0.1 &
+ units box
+
+region bulk union 3 left pipe right
+create_atoms 1 region bulk
+
+group bulk type 1
+group wall type 2
+
+#remove atoms that are too close to wall
+delete_atoms overlap 0.9 bulk wall
+
+neighbor 0.3 bin
+neigh_modify delay 0 every 1 check yes
+neigh_modify exclude group wall wall
+
+velocity bulk create $T 78915 dist gaussian rot yes mom yes loop geom
+
+#####################################################################
+#set up PUT
+#see Evans and Morriss, Phys. Rev. Lett. 56(20) 1986, p. 2172
+
+#average number of particles per box, Evans and Morriss used 2.0
+variable NperBox equal 8.0
+
+#calculate box sizes
+variable boxSide equal sqrt(${NperBox}/${dens})
+variable nX equal round(lx/${boxSide})
+variable nY equal round(ly/${boxSide})
+variable dX equal lx/${nX}
+variable dY equal ly/${nY}
+
+#temperature of fluid (excluding wall)
+compute myT bulk temp
+
+#profile-unbiased temperature of fluid
+compute myTp bulk temp/profile 1 1 0 xy ${nX} ${nY}
+
+#thermo setup
+thermo ${thermo_rate}
+thermo_style custom step c_myT c_myTp etotal press
+
+#dump initial configuration
+dump 55 all custom 1 all.init.lammpstrj id type x y z vx vy vz
+dump 56 wall custom 1 wall.init.lammpstrj id type x y z
+dump_modify 55 sort id
+dump_modify 56 sort id
+run 0
+undump 55
+undump 56
+
+#####################################################################
+#equilibrate without GD
+
+fix nvt bulk nvt temp $T $T ${tdamp}
+fix_modify nvt temp myTp
+fix 2 bulk enforce2d
+
+run ${equil}
+
+#####################################################################
+#initialize the COM velocity and run to achieve steady-state
+
+#calculate velocity to add: V=J/rho_total
+variable Vadd equal $J*lx*ly/count(bulk)
+
+#first remove any COM velocity, then add back the streaming velocity
+velocity bulk zero linear
+velocity bulk set ${Vadd} 0.0 0.0 units box sum yes mom no
+
+fix GD bulk flow/gauss 1 0 0 #energy yes
+#fix_modify GD energy yes
+
+run ${stabil}
+
+#####################################################################
+#collect data
+
+#print the applied force and total flux to ensure conservation of Jx
+variable Fapp equal f_GD[1]
+compute vxBulk bulk reduce sum vx
+compute vyBulk bulk reduce sum vy
+variable invVol equal 1.0/(lx*ly)
+variable jx equal c_vxBulk*${invVol}
+variable jy equal c_vyBulk*${invVol}
+variable curr_step equal step
+fix print_vCOM all print ${dump_rate} &
+ "${curr_step} ${Fapp} ${jx} ${jy}" file GD.out screen no &
+ title "timestep Fapp Jx Jy"
+
+#compute IK1 pressure profile
+#see Todd, Evans, and Davis, Phys. Rev. E 52(2) 1995, p. 1627
+#use profile-unbiased temperature to remove the streaming velocity
+#from the kinetic part of the pressure
+compute spa bulk stress/atom myTp
+
+#for the pressure profile, use the same grid as the PUT
+compute chunkX bulk chunk/atom bin/1d x lower ${dX} units box
+
+#output pressure profile and other profiles
+#the pressure profile is (-1/2V)*(c_spa[1] + c_spa[2]), where
+#V is the volume of a slice
+fix profiles bulk ave/chunk 1 1 ${dump_rate} chunkX &
+ vx density/mass c_spa[1] c_spa[2] &
+ file x_profiles ave running overwrite
+
+#compute velocity profile across the pipe with a finer grid
+variable dYnew equal ${dY}/10
+compute chunkY bulk chunk/atom bin/1d y center ${dYnew} units box &
+ region pipe
+fix velYprof bulk ave/chunk 1 1 ${dump_rate} chunkY &
+ vx file Vy_profile ave running overwrite
+
+#full trajectory
+dump 7 bulk custom ${dump_rate} bulk.lammpstrj &
+ id type x y z
+dump_modify 7 sort id
+
+run ${run}
diff --git a/examples/USER/tally/in.force b/examples/USER/tally/in.force
index 29e0c6d4b..bbe76a543 100644
--- a/examples/USER/tally/in.force
+++ b/examples/USER/tally/in.force
@@ -1,57 +1,60 @@
units real
atom_style full
read_data data.spce
pair_style lj/cut/coul/long 12.0 12.0
kspace_style pppm 1.0e-4
pair_coeff 1 1 0.15535 3.166
pair_coeff * 2 0.0000 0.0000
bond_style harmonic
angle_style harmonic
dihedral_style none
improper_style none
bond_coeff 1 1000.00 1.000
angle_coeff 1 100.0 109.47
special_bonds lj/coul 0.0 0.0 1.0
neighbor 2.0 bin
fix 1 all shake 0.0001 20 0 b 1 a 1
fix 2 all nvt temp 300.0 300.0 100.0
+# make certain that shake constraints are satisfied
+run 0 post no
+
group one molecule 1 2
# the following section shows equivalences between using the force/tally compute and other computes and thermo keywords
# compute pairwise force between two molecules and everybody
compute fpa one group/group all pair yes kspace no boundary no
# tally pairwise force between two molecules and the all molecules
compute c1 one force/tally all
# tally the force of all with all (should be zero)
compute c2 all force/tally all
# collect per atom data. only reduce over the first group.
compute one one reduce sum c_c1[1] c_c1[2] c_c1[3]
compute red all reduce sum c_c2[1] c_c2[2] c_c2[3]
# determine magnitude of force
variable fpa equal sqrt(c_fpa[1]*c_fpa[1]+c_fpa[2]*c_fpa[2]+c_fpa[3]*c_fpa[3])
variable for equal sqrt(c_one[1]*c_one[1]+c_one[2]*c_one[2]+c_one[3]*c_one[3])
# round to 10**-10 absolute precision.
variable ref equal round(1e10*sqrt(c_red[1]*c_red[1]+c_red[2]*c_red[2]+c_red[3]*c_red[3]))*1e-10
variable all equal round(1e10*c_c2)*1e-10
velocity all create 300 432567 dist uniform
timestep 2.0
# v_fpa and v_for and c_c1, c_fpa[] and c_one[] should all each have the same value. v_ref and c_c2 should be zero
thermo_style custom step v_fpa v_for c_c1 c_fpa[1] c_one[1] c_fpa[2] c_one[2] c_fpa[3] c_one[3] v_ref v_all
thermo 10
run 50
diff --git a/examples/USER/tally/in.pe b/examples/USER/tally/in.pe
index 37bd18dc5..c6228cebd 100644
--- a/examples/USER/tally/in.pe
+++ b/examples/USER/tally/in.pe
@@ -1,63 +1,66 @@
units real
atom_style full
read_data data.spce
pair_style lj/cut/coul/long 12.0 12.0
kspace_style pppm 1.0e-4
pair_coeff 1 1 0.15535 3.166
pair_coeff * 2 0.0000 0.0000
bond_style harmonic
angle_style harmonic
dihedral_style none
improper_style none
bond_coeff 1 1000.00 1.000
angle_coeff 1 100.0 109.47
special_bonds lj/coul 0.0 0.0 1.0
neighbor 2.0 bin
fix 1 all shake 0.0001 20 0 b 1 a 1
fix 2 all nvt temp 300.0 300.0 100.0
+# make certain that shake constraints are satisfied
+run 0 post no
+
group oxy type 1
group hyd type 2
# the following section shows equivalences between using the pe/tally compute and other computes and thermo keywords
# compute pairwise energy between all oxygen and all hydrogen
compute epa oxy group/group hyd pair yes kspace no boundary no
# tally pairwise energy between all oygen and all hydrogen
compute c1 oxy pe/tally hyd
# tally pairwise energy beween all atoms to compare with globals
compute c2 all pe/tally all
# collect per atom energies
compute c3 all pe/atom pair
# reduce over the first group only the per-atom data is storing VDW and Coulomb separately...
compute oxy oxy reduce sum c_c1[1] c_c1[2]
compute red all reduce sum c_c2[1] c_c2[2] c_c3
# ... thus to get the same as compute group/group, we need to add the two
# ... and multiply by 2.0 since compute group/group sums the pair energy, while we collect only for the first group.
variable epa equal 2.0*(c_oxy[1]+c_oxy[2])
# compute equivalent values to globals
variable vdwl equal c_red[1]
variable coul equal c_red[2]
variable pe equal c_red[3]
variable pair equal v_vdwl+v_coul
variable eref equal epair-elong
velocity all create 300 432567 dist uniform
timestep 2.0
# c_epa and v_epa, evdwl and v_vdwl, ecoul and v_coul, and the last 4 columns each should have identical value
thermo_style custom step c_epa v_epa evdwl v_vdwl ecoul v_coul v_eref v_pe c_c2 v_pair
thermo 10
run 50
diff --git a/examples/USER/tally/in.stress b/examples/USER/tally/in.stress
index cf848a373..03fd7142a 100644
--- a/examples/USER/tally/in.stress
+++ b/examples/USER/tally/in.stress
@@ -1,55 +1,58 @@
units real
atom_style full
read_data data.spce
pair_style lj/cut/coul/long 12.0 12.0
kspace_style pppm 1.0e-4
pair_coeff 1 1 0.15535 3.166
pair_coeff * 2 0.0000 0.0000
bond_style harmonic
angle_style harmonic
dihedral_style none
improper_style none
bond_coeff 1 1000.00 1.000
angle_coeff 1 100.0 109.47
special_bonds lj/coul 0.0 0.0 1.0
neighbor 2.0 bin
fix 1 all shake 0.0001 20 0 b 1 a 1
fix 2 all nvt temp 300.0 300.0 100.0
+# make certain that shake constraints are satisfied
+run 0 post no
+
group one molecule 1 2
# the following section shows equivalences between using the stress/tally compute and other computes and thermo keywords
# compute per atom stress contributions
compute spa all stress/atom NULL pair
compute press all pressure NULL pair
# compute stress contributions from one group with all
compute c1 one stress/tally all
# collect stress contributions from all with all
compute c2 all stress/tally all
compute one one reduce sum c_c1[1] c_c1[2] c_c1[3] c_spa[1] c_spa[2] c_spa[3]
compute red all reduce sum c_spa[1] c_spa[2] c_spa[3] c_c2[1] c_c2[2] c_c2[3]
#
variable spa equal -(c_red[1]+c_red[2]+c_red[3])/(3.0*vol)
variable press equal -(c_red[4]+c_red[5]+c_red[6])/(3.0*vol)
variable one equal (c_one[1]+c_one[2]+c_one[3])/3.0
variable ref equal (c_one[4]+c_one[5]+c_one[6])/3.0
#velocity all create 300 432567 dist uniform
timestep 2.0
thermo_style custom step c_press v_spa v_press v_one v_ref
thermo 10
run 50
diff --git a/lib/gpu/cudpp_mini/cudpp.h b/lib/gpu/cudpp_mini/cudpp.h
index f04c0272b..088b560ab 100644
--- a/lib/gpu/cudpp_mini/cudpp.h
+++ b/lib/gpu/cudpp_mini/cudpp.h
@@ -1,525 +1,525 @@
// -------------------------------------------------------------
// CUDPP -- CUDA Data Parallel Primitives library
// -------------------------------------------------------------
-// $Revision$
-// $Date$
+// $Revision: 5289 $
+// $Date: 2010-11-23 13:04:43 -0700 (Tue, 23 Nov 2010) $
// -------------------------------------------------------------
// This source code is distributed under the terms of license.txt in
// the root directory of this source distribution.
// -------------------------------------------------------------
/**
* @file
* cudpp.h
*
* @brief Main library header file. Defines public interface.
*
* The CUDPP public interface is a C-only interface to enable
* linking with code written in other languages (e.g. C, C++,
* and Fortran). While the internals of CUDPP are not limited
* to C (C++ features are used), the public interface is
* entirely C (thus it is declared "extern C").
*/
/**
* \mainpage
*
* \section introduction Introduction
*
* CUDPP is the CUDA Data Parallel Primitives Library. CUDPP is a
* library of data-parallel algorithm primitives such as
* parallel-prefix-sum ("scan"), parallel sort and parallel reduction.
* Primitives such as these are important building blocks for a wide
* variety of data-parallel algorithms, including sorting, stream
* compaction, and building data structures such as trees and
* summed-area tables.
*
* \section overview Overview Presentation
*
* A brief set of slides that describe the features, design principles,
* applications and impact of CUDPP is available here:
* <a href="http://cudpp.googlecode.com/svn/trunk/cudpp/doc/CUDPP_slides.pdf">CUDPP Presentation</a>.
*
* \section homepage Homepage
* Homepage for CUDPP: http://code.google.com/p/cudpp
*
* Announcements and discussion of CUDPP are hosted on the
* <a href="http://groups.google.com/group/cudpp?hl=en">CUDPP Google Group</a>.
*
* \section getting-started Getting Started with CUDPP
*
* You may want to start by browsing the \link publicInterface CUDPP Public
* Interface\endlink. For information on building CUDPP, see
* \ref building-cudpp "Building CUDPP".
*
* The "apps" subdirectory included with CUDPP has a few source code samples
* that use CUDPP:
* - \ref example_simpleCUDPP "simpleCUDPP", a simple example of using
* cudppScan()
* - satGL, an example of using cudppMultiScan() to generate a summed-area
* table (SAT) of a scene rendered in real time. The SAT is then used to simulate
* depth of field blur.
* - cudpp_testrig, a comprehensive test application for all the functionality
* of CUDPP
*
* We have also provided a code walkthrough of the
* \ref example_simpleCUDPP "simpleCUDPP" example.
*
* \section getting-help Getting Help and Reporting Problems
*
* To get help using CUDPP, please use the
* <a href="http://groups.google.com/group/cudpp?hl=en">CUDPP Google Group</a>.
*
* To report CUDPP bugs or request features, you may use either the above
* CUDPP Google Group, or you can file an issue directly using
* <a href="http://code.google.com/p/cudpp/issues/list">Google Code</a>.
*
* \section release-notes Release Notes
*
* For specific release details see the \ref changelog "Change Log".
*
* This release (1.1.1) is a bugfix release to CUDPP 1.1 that includes
* fixes to support CUDA 3.0 and the new NVIDIA Fermi architecture,
* including GeForce 400 series and Tesla 20 series GPUs. It also has
* bug fixes for 64-bit OSes.
*
* \section opSys Operating System Support
*
* This release (1.1.1) has been thoroughly tested on the following OSes.
* - Windows XP (32-bit) (CUDA 2.2, 3.0)
* - Windows 7 (64-bit) (CUDA 3.0)
* - Redhat Enterprise Linux 5 (64-bit) (CUDA 3.0)
* - and Mac OS X 10.6 (Snow Leopard, 64-bit) (CUDA 3.0)
*
* We expect CUDPP to build and run correctly on other flavors of Linux
* and Windows, but these are not actively tested by the developers at
* this time.
*
* Notes: CUDPP is not compatible with CUDA 2.1. A compiler bug in 2.1
* causes the compiler to crash. Also, starting with CUDPP 1.1.1, we are
* no longer testing CUDA device emulation, because it is deprecated in
* CUDA 3.0 and will be removed from future CUDA versions.
*
* \section cuda CUDA
* CUDPP is implemented in
* <a href="http://developer.nvidia.com/cuda">CUDA C/C++</a>. It requires the
* CUDA Toolkit version 2.2 or later. Please see the NVIDIA
* <a href="http://developer.nvidia.com/cuda">CUDA</a> homepage to download
* CUDA as well as the CUDA Programming Guide and CUDA SDK, which includes many
* CUDA code examples. Some of the samples in the CUDA SDK (including
* "marchingCubes", "lineOfSight", and radixSort) also use CUDPP.
*
* \section design-goals Design Goals
* Design goals for CUDPP include:
*
* - Performance. We aim to provide best-of-class performance for our
* primitives. We welcome suggestions and contributions that will improve
* CUDPP performance. We also want to provide primitives that can be easily
* benchmarked, and compared against other implementations on GPUs and other
* processors.
* - Modularity. We want our primitives to be easily included in other
* applications. To that end we have made the following design decisions:
* - CUDPP is provided as a library that can link against other applications.
* - CUDPP calls run on the GPU on GPU data. Thus they can be used
* as standalone calls on the GPU (on GPU data initialized by the
* calling application) and, more importantly, as GPU components in larger
* CPU/GPU applications.
* - CUDPP is implemented as 4 layers:
* -# The \link publicInterface Public Interface\endlink is the external
* library interface, which is the intended entry point for most
* applications. The public interface calls into the
* \link cudpp_app Application-Level API\endlink.
* -# The \link cudpp_app Application-Level API\endlink comprises functions
* callable from CPU code. These functions execute code jointly on the
* CPU (host) and the GPU by calling into the
* \link cudpp_kernel Kernel-Level API\endlink below them.
* -# The \link cudpp_kernel Kernel-Level API\endlink comprises functions
* that run entirely on the GPU across an entire grid of thread blocks.
* These functions may call into the \link cudpp_cta CTA-Level API\endlink
* below them.
* -# The \link cudpp_cta CTA-Level API\endlink comprises functions that run
* entirely on the GPU within a single Cooperative Thread Array (CTA,
* aka thread block). These are low-level functions that implement core
* data-parallel algorithms, typically by processing data within shared
* (CUDA \c __shared__) memory.
*
* Programmers may use any of the lower three CUDPP layers in their own
* programs by building the source directly into their application. However,
* the typical usage of CUDPP is to link to the library and invoke functions in
* the CUDPP \link publicInterface Public Interface\endlink, as in the
* \ref example_simpleCUDPP "simpleCUDPP", satGL, and cudpp_testrig application
* examples included in the CUDPP distribution.
*
* In the future, if and when CUDA supports building device-level libraries, we
* hope to enhance CUDPP to ease the use of CUDPP internal algorithms at all
* levels.
*
* \subsection uses Use Cases
* We expect the normal use of CUDPP will be in one of two ways:
* -# Linking the CUDPP library against another application.
* -# Running our "test" application, cudpp_testrig, that exercises
* CUDPP functionality.
*
* \section references References
* The following publications describe work incorporated in CUDPP.
*
* - Mark Harris, Shubhabrata Sengupta, and John D. Owens. "Parallel Prefix Sum (Scan) with CUDA". In Hubert Nguyen, editor, <i>GPU Gems 3</i>, chapter 39, pages 851&ndash;876. Addison Wesley, August 2007. http://graphics.idav.ucdavis.edu/publications/print_pub?pub_id=916
* - Shubhabrata Sengupta, Mark Harris, Yao Zhang, and John D. Owens. "Scan Primitives for GPU Computing". In <i>Graphics Hardware 2007</i>, pages 97&ndash;106, August 2007. http://graphics.idav.ucdavis.edu/publications/print_pub?pub_id=915
* - Shubhabrata Sengupta, Mark Harris, and Michael Garland. "Efficient parallel scan algorithms for GPUs". NVIDIA Technical Report NVR-2008-003, December 2008. http://mgarland.org/papers.html#segscan-tr
* - Nadathur Satish, Mark Harris, and Michael Garland. "Designing Efficient Sorting Algorithms for Manycore GPUs". In <i>Proceedings of the 23rd IEEE International Parallel & Distributed Processing Symposium</i>, May 2009. http://mgarland.org/papers.html#gpusort
* - Stanley Tzeng, Li-Yi Wei. "Parallel White Noise Generation on a GPU via Cryptographic Hash". In <i>Proceedings of the 2008 Symposium on Interactive 3D Graphics and Games</i>, pages 79&ndash;87, February 2008. http://research.microsoft.com/apps/pubs/default.aspx?id=70502
*
* Many researchers are using CUDPP in their work, and there are many publications
* that have used it \ref cudpp_refs "(references)". If your work uses CUDPP, please
* let us know by sending us a reference (preferably in BibTeX format) to your work.
*
* \section citing Citing CUDPP
*
* If you make use of CUDPP primitives in your work and want to cite
* CUDPP (thanks!), we would prefer for you to cite the appropriate
* papers above, since they form the core of CUDPP. To be more specific,
* the GPU Gems paper describes (unsegmented) scan, multi-scan for
* summed-area tables, and stream compaction. The NVIDIA technical report
* describes the current scan and segmented scan algorithms used in the
* library, and the Graphics Hardware paper describes an earlier
* implementation of segmented scan, quicksort, and sparse matrix-vector
* multiply. The IPDPS paper describes the radix sort used in CUDPP, and
* the I3D paper describes the random number generation algorithm.
*
* \section credits Credits
* \subsection developers CUDPP Developers
* - <a href="http://www.markmark.net">Mark Harris</a>, NVIDIA Corporation
* - <a href="http://www.ece.ucdavis.edu/~jowens/">John D. Owens</a>, University of California, Davis
* - <a href="http://graphics.cs.ucdavis.edu/~shubho/">Shubho Sengupta</a>, University of California, Davis
* - Stanley Tzeng, University of California, Davis
* - <a href="http://www.ece.ucdavis.edu/~yaozhang/">Yao Zhang</a>, University of California, Davis
* - <a href="http://www.ece.ucdavis.edu/~aaldavid/">Andrew Davidson</a>, University of California, Davis (formerly Louisiana State University)
*
* \subsection contributors Other CUDPP Contributors
* - <a href="http://www.eecs.berkeley.edu/~nrsatish/">Nadatur Satish</a>, University of California, Berkeley
*
* \subsection acknowledgments Acknowledgments
*
* Thanks to Jim Ahrens, Timo Aila, Nathan Bell, Ian Buck, Guy Blelloch,
* Jeff Bolz, Michael Garland, Jeff Inman, Eric Lengyel, Samuli Laine,
* David Luebke, Pat McCormick, and Richard Vuduc for their contributions
* during the development of this library.
*
* CUDPP Developers from UC Davis thank their funding agencies:
* - Department of Energy Early Career Principal Investigator Award
* DE-FG02-04ER25609
* - SciDAC Institute for Ultrascale Visualization (http://www.iusv.org/)
* - Los Alamos National Laboratory
* - National Science Foundation (grant 0541448)
* - Generous hardware donations from NVIDIA
*
* \section license-overview CUDPP Copyright and Software License
* CUDPP is copyright The Regents of the University of California, Davis campus
* and NVIDIA Corporation. The library, examples, and all source code are
* released under the BSD license, designed to encourage reuse of this software
* in other projects, both commercial and non-commercial. For details, please
* see the \ref license page.
*
* Note that prior to release 1.1 of CUDPP, the license used was a modified
* BSD license. With release 1.1, this license was replaced with the pure BSD
* license to facilitate the use of open source hosting of the code.
*/
/**
* @page license CUDPP License
*
* \section licenseBSD CUDPP License
*
* CUDPP is released under the
* <a href="http://www.opensource.org/licenses/bsd-license.php">BSD license</a>.
*
* @include license.txt
*
*/
/**
* @page changelog CUDPP Change Log
*
* @include changelog.txt
*/
/**
* @page cudpp_refs Publications that use CUDPP
*
* @htmlinclude doc/bib/cudpp_refs.html
*/
/**
* @page cudpp_refs_bib Bibliography for publications that use CUDPP
*
* @htmlinclude doc/bib/cudpp_refs_bib.html
*/
/**
* @page building-cudpp Building CUDPP
*
* CUDPP has currently been tested in Windows XP, Windows Vista, Mac OS X
* and Linux. See \ref release-notes for release specific platform support.
*
* \section build-win32 Building CUDPP on Windows XP
*
* CUDPP can be built using either or MSVC 8 (2005) or MSVC 9 (2008). To
* build, open cudpp/cudpp.sln. Then you can build the library
* using the "build" command as you would with any other workspace. There are
* four configurations: debug, release, emudebug, and emurelease. The first
* two are self-explanatory. The second two are built to use CUDA device
* emulation, meaning they will be run (slowly) on the CPU.
*
* \section build-linux Building CUDPP on Linux and Mac OS X
*
* CUDPP can be built using standard g++ and Make tools on Linux, by typing
* "make" in the "cudpp/" subdirectory. Before building CUDPP, you should
* first build the CUDA Utility Library (libcutil) by typing "make; make dbg=1"
* in the "common/" subdirectory. This will generate libcutil.a and
* libcutilD.a.
*
* The makefile for CUDPP and all sample applications take the optional
* arguments "emu=1" and "dbg=1". The former builds CUDPP for device emulation,
* and the latter for debugging. The two flags can be combined. "verbose=1"
* can be used to see all compiler output.
*
* \section build-apps Building CUDPP Sample Applications
*
* The sample applications in the "apps/" subdirectory can be built exactly
* like CUDPP is--either by opening the appropriate .sln/.vcproj file in MSVC
* in Windows, or using "make" in Linux.
*
* On some Linux installations you will get linker errors relating to "-lXi"
* and "-lXmu". To fix this, you will need to install libXi and libXmu. On
* Debian and Ubuntu, for example, you can simply run
* "sudo apt-get install libxi-dev", and
* "sudo apt-get install libxmu-dev"
*
*/
#ifndef __CUDPP_H__
#define __CUDPP_H__
#include <stdlib.h> // for size_t
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief CUDPP Result codes returned by CUDPP API functions.
*/
enum CUDPPResult
{
CUDPP_SUCCESS = 0, /**< No error. */
CUDPP_ERROR_INVALID_HANDLE, /**< Specified handle (for example,
to a plan) is invalid. **/
CUDPP_ERROR_ILLEGAL_CONFIGURATION, /**< Specified configuration is
illegal. For example, an
invalid or illogical
combination of options. */
CUDPP_ERROR_UNKNOWN = 9999 /**< Unknown or untraceable error. */
};
/**
* @brief Options for configuring CUDPP algorithms.
*
* @see CUDPPConfiguration, cudppPlan, CUDPPAlgorithm
*/
enum CUDPPOption
{
CUDPP_OPTION_FORWARD = 0x1, /**< Algorithms operate forward:
* from start to end of input
* array */
CUDPP_OPTION_BACKWARD = 0x2, /**< Algorithms operate backward:
* from end to start of array */
CUDPP_OPTION_EXCLUSIVE = 0x4, /**< Exclusive (for scans) - scan
* includes all elements up to (but
* not including) the current
* element */
CUDPP_OPTION_INCLUSIVE = 0x8, /**< Inclusive (for scans) - scan
* includes all elements up to and
* including the current element */
CUDPP_OPTION_CTA_LOCAL = 0x10, /**< Algorithm performed only on
* the CTAs (blocks) with no
* communication between blocks.
* @todo Currently ignored. */
CUDPP_OPTION_KEYS_ONLY = 0x20, /**< No associated value to a key
* (for global radix sort) */
CUDPP_OPTION_KEY_VALUE_PAIRS = 0x40, /**< Each key has an associated value */
};
/**
* @brief Datatypes supported by CUDPP algorithms.
*
* @see CUDPPConfiguration, cudppPlan
*/
enum CUDPPDatatype
{
CUDPP_CHAR, //!< Character type (C char)
CUDPP_UCHAR, //!< Unsigned character (byte) type (C unsigned char)
CUDPP_INT, //!< Integer type (C int)
CUDPP_UINT, //!< Unsigned integer type (C unsigned int)
CUDPP_FLOAT //!< Float type (C float)
};
/**
* @brief Operators supported by CUDPP algorithms (currently scan and
* segmented scan).
*
* These are all binary associative operators.
*
* @see CUDPPConfiguration, cudppPlan
*/
enum CUDPPOperator
{
CUDPP_ADD, //!< Addition of two operands
CUDPP_MULTIPLY, //!< Multiplication of two operands
CUDPP_MIN, //!< Minimum of two operands
CUDPP_MAX //!< Maximum of two operands
};
/**
* @brief Algorithms supported by CUDPP. Used to create appropriate plans using
* cudppPlan.
*
* @see CUDPPConfiguration, cudppPlan
*/
enum CUDPPAlgorithm
{
CUDPP_SCAN, //!< Scan or prefix-sum
CUDPP_SEGMENTED_SCAN, //!< Segmented scan
CUDPP_COMPACT, //!< Stream compact
CUDPP_REDUCE, //!< Parallel reduction (NOTE: currently unimplemented)
CUDPP_SORT_RADIX, //!< Radix sort
CUDPP_SPMVMULT, //!< Sparse matrix-dense vector multiplication
CUDPP_RAND_MD5, //!< PseudoRandom Number Generator using MD5 hash algorithm
CUDPP_ALGORITHM_INVALID, //!< Placeholder at end of enum
};
/**
* @brief Configuration struct used to specify algorithm, datatype,
* operator, and options when creating a plan for CUDPP algorithms.
*
* @see cudppPlan
*/
struct CUDPPConfiguration
{
CUDPPAlgorithm algorithm; //!< The algorithm to be used
CUDPPOperator op; //!< The numerical operator to be applied
CUDPPDatatype datatype; //!< The datatype of the input arrays
unsigned int options; //!< Options to configure the algorithm
};
#define CUDPP_INVALID_HANDLE 0xC0DABAD1
typedef size_t CUDPPHandle;
/* To use CUDPP as a static library, #define CUDPP_STATIC_LIB before
* including cudpp.h
*/
#define CUDPP_STATIC_LIB
#ifndef CUDPP_DLL
#ifdef _WIN32
#ifdef CUDPP_STATIC_LIB
#define CUDPP_DLL
#else
#ifdef BUILD_DLL
#define CUDPP_DLL __declspec(dllexport)
#else
#define CUDPP_DLL __declspec(dllimport)
#endif
#endif
#else
#define CUDPP_DLL
#endif
#endif
// Plan allocation (for scan, sort, and compact)
CUDPP_DLL
CUDPPResult cudppPlan(CUDPPHandle *planHandle,
CUDPPConfiguration config,
size_t n,
size_t rows,
size_t rowPitch);
CUDPP_DLL
CUDPPResult cudppDestroyPlan(CUDPPHandle plan);
// Scan and sort algorithms
CUDPP_DLL
CUDPPResult cudppScan(CUDPPHandle planHandle,
void *d_out,
const void *d_in,
size_t numElements);
CUDPP_DLL
CUDPPResult cudppMultiScan(CUDPPHandle planHandle,
void *d_out,
const void *d_in,
size_t numElements,
size_t numRows);
CUDPP_DLL
CUDPPResult cudppSegmentedScan(CUDPPHandle planHandle,
void *d_out,
const void *d_idata,
const unsigned int *d_iflags,
size_t numElements);
CUDPP_DLL
CUDPPResult cudppCompact(CUDPPHandle planHandle,
void *d_out,
size_t *d_numValidElements,
const void *d_in,
const unsigned int *d_isValid,
size_t numElements);
CUDPP_DLL
CUDPPResult cudppSort(CUDPPHandle planHandle,
void *d_keys,
void *d_values,
int keybits,
size_t numElements);
// Sparse matrix allocation
CUDPP_DLL
CUDPPResult cudppSparseMatrix(CUDPPHandle *sparseMatrixHandle,
CUDPPConfiguration config,
size_t n,
size_t rows,
const void *A,
const unsigned int *h_rowIndices,
const unsigned int *h_indices);
CUDPP_DLL
CUDPPResult cudppDestroySparseMatrix(CUDPPHandle sparseMatrixHandle);
// Sparse matrix-vector algorithms
CUDPP_DLL
CUDPPResult cudppSparseMatrixVectorMultiply(CUDPPHandle sparseMatrixHandle,
void *d_y,
const void *d_x);
// random number generation algorithms
CUDPP_DLL
CUDPPResult cudppRand(CUDPPHandle planHandle,void * d_out, size_t numElements);
CUDPP_DLL
CUDPPResult cudppRandSeed(const CUDPPHandle planHandle, unsigned int seed);
#ifdef __cplusplus
}
#endif
#endif
// Leave this at the end of the file
// Local Variables:
// mode:c++
// c-file-style: "NVIDIA"
// End:
diff --git a/lib/gpu/cudpp_mini/cudpp_globals.h b/lib/gpu/cudpp_mini/cudpp_globals.h
index 2c89665e9..b0db9cf92 100644
--- a/lib/gpu/cudpp_mini/cudpp_globals.h
+++ b/lib/gpu/cudpp_mini/cudpp_globals.h
@@ -1,66 +1,66 @@
// -------------------------------------------------------------
// cuDPP -- CUDA Data Parallel Primitives library
// -------------------------------------------------------------
-// $Revision$
-// $Date$
+// $Revision: 5289 $
+// $Date: 2010-11-23 13:04:43 -0700 (Tue, 23 Nov 2010) $
// -------------------------------------------------------------
// This source code is distributed under the terms of license.txt in
// the root directory of this source distribution.
// -------------------------------------------------------------
/**
* @file
* cudpp_globals.h
*
* @brief Global declarations defining machine characteristics of GPU target
* These are currently set for best performance on G8X GPUs. The optimal
* parameters may change on future GPUs. In the future, we hope to make
* CUDPP a self-tuning library.
*/
#ifndef __CUDPP_GLOBALS_H__
#define __CUDPP_GLOBALS_H__
const int NUM_BANKS = 16; /**< Number of shared memory banks */
const int LOG_NUM_BANKS = 4; /**< log_2(NUM_BANKS) */
const int CTA_SIZE = 128; /**< Number of threads in a CTA */
const int WARP_SIZE = 32; /**< Number of threads in a warp */
const int LOG_CTA_SIZE = 7; /**< log_2(CTA_SIZE) */
const int LOG_WARP_SIZE = 5; /**< log_2(WARP_SIZE) */
const int LOG_SIZEOF_FLOAT = 2; /**< log_2(sizeof(float)) */
const int SCAN_ELTS_PER_THREAD = 8; /**< Number of elements per scan thread */
const int SEGSCAN_ELTS_PER_THREAD = 8; /**< Number of elements per segmented scan thread */
const int maxSharedMemoryPerBlock = 16384; /**< Number of bytes of shared
memory in each block */
const int maxThreadsPerBlock = CTA_SIZE; /**< Maximum number of
* threads in a CTA */
/**
* @brief Macro to insert necessary __syncthreads() in device emulation mode
*/
#ifdef __DEVICE_EMULATION__
#define __EMUSYNC __syncthreads()
#else
#define __EMUSYNC
#endif
#define AVOID_BANK_CONFLICTS /**< Set if by default, we want our
* shared memory allocation to perform
* additional computation to avoid bank
* conflicts */
#ifdef AVOID_BANK_CONFLICTS
#define CONFLICT_FREE_OFFSET(index) ((index) >> LOG_NUM_BANKS)
#else
#define CONFLICT_FREE_OFFSET(index) (0)
#endif
#endif // __CUDPP_GLOBALS_H__
// Leave this at the end of the file
// Local Variables:
// mode:c++
// c-file-style: "NVIDIA"
// End:
diff --git a/lib/gpu/cudpp_mini/cudpp_maximal_launch.h b/lib/gpu/cudpp_mini/cudpp_maximal_launch.h
index e601c3118..a8ffc3f97 100644
--- a/lib/gpu/cudpp_mini/cudpp_maximal_launch.h
+++ b/lib/gpu/cudpp_mini/cudpp_maximal_launch.h
@@ -1,37 +1,37 @@
// -------------------------------------------------------------
// cuDPP -- CUDA Data Parallel Primitives library
// -------------------------------------------------------------
-// $Revision$
-// $Date$
+// $Revision: 5289 $
+// $Date: 2010-11-23 13:04:43 -0700 (Tue, 23 Nov 2010) $
// -------------------------------------------------------------
// This source code is distributed under the terms of license.txt
// in the root directory of this source distribution.
// -------------------------------------------------------------
#ifndef _MAXIMAL_LAUNCH_H_
#define _MAXIMAL_LAUNCH_H_
#include "cuda_runtime.h"
extern "C"
size_t maxBlocks(cudaFuncAttributes &attribs,
cudaDeviceProp &devprop,
size_t bytesDynamicSharedMem,
size_t threadsPerBlock);
extern "C"
size_t maxBlocksFromPointer(void* kernel,
size_t bytesDynamicSharedMem,
size_t threadsPerBlock);
#ifdef __cplusplus
template <typename T>
size_t maxBlocks(T kernel,
size_t bytesDynamicSharedMem,
size_t threadsPerBlock)
{
return maxBlocksFromPointer((void*)kernel, bytesDynamicSharedMem, threadsPerBlock);
}
#endif
#endif // _MAXIMAL_LAUNCH_H_
diff --git a/lib/gpu/cudpp_mini/cudpp_plan.h b/lib/gpu/cudpp_mini/cudpp_plan.h
index 3ec866d8d..bf1263db1 100644
--- a/lib/gpu/cudpp_mini/cudpp_plan.h
+++ b/lib/gpu/cudpp_mini/cudpp_plan.h
@@ -1,158 +1,158 @@
// -------------------------------------------------------------
// CUDPP -- CUDA Data Parallel Primitives library
// -------------------------------------------------------------
// $Revision: 3572$
-// $Date$
+// $Date: 2010-11-23 13:04:43 -0700 (Tue, 23 Nov 2010) $
// -------------------------------------------------------------
// This source code is distributed under the terms of license.txt
// in the root directory of this source distribution.
// -------------------------------------------------------------
#ifndef __CUDPP_PLAN_H__
#define __CUDPP_PLAN_H__
typedef void* KernelPointer;
extern "C" size_t getNumCTAs(KernelPointer kernel);
extern "C" void compNumCTAs(KernelPointer kernel, size_t bytesDynamicSharedMem, size_t threadsPerBlock);
template <typename T>
size_t numCTAs(T kernel)
{
return getNumCTAs((KernelPointer)kernel);
}
template <typename T>
void computeNumCTAs(T kernel, unsigned int bytesDynamicSharedMem, size_t threadsPerBlock)
{
compNumCTAs((KernelPointer)kernel, bytesDynamicSharedMem, threadsPerBlock);
}
/** @brief Base class for CUDPP Plan data structures
*
* CUDPPPlan and its subclasses provide the internal (i.e. not visible to the
* library user) infrastructure for planning algorithm execution. They
* own intermediate storage for CUDPP algorithms as well as, in some cases,
* information about optimal execution configuration for the present hardware.
*
*/
class CUDPPPlan
{
public:
CUDPPPlan(CUDPPConfiguration config, size_t numElements, size_t numRows, size_t rowPitch);
virtual ~CUDPPPlan() {}
// Note anything passed to functions compiled by NVCC must be public
CUDPPConfiguration m_config; //!< @internal Options structure
size_t m_numElements; //!< @internal Maximum number of input elements
size_t m_numRows; //!< @internal Maximum number of input rows
size_t m_rowPitch; //!< @internal Pitch of input rows in elements
};
/** @brief Plan class for scan algorithm
*
*/
class CUDPPScanPlan : public CUDPPPlan
{
public:
CUDPPScanPlan(CUDPPConfiguration config, size_t numElements, size_t numRows, size_t rowPitch);
virtual ~CUDPPScanPlan();
void **m_blockSums; //!< @internal Intermediate block sums array
size_t *m_rowPitches; //!< @internal Pitch of each row in elements (for cudppMultiScan())
size_t m_numEltsAllocated; //!< @internal Number of elements allocated (maximum scan size)
size_t m_numRowsAllocated; //!< @internal Number of rows allocated (for cudppMultiScan())
size_t m_numLevelsAllocated; //!< @internal Number of levels allocaed (in _scanBlockSums)
};
/** @brief Plan class for segmented scan algorithm
*
*/
class CUDPPSegmentedScanPlan : public CUDPPPlan
{
public:
CUDPPSegmentedScanPlan(CUDPPConfiguration config, size_t numElements);
virtual ~CUDPPSegmentedScanPlan();
void **m_blockSums; //!< @internal Intermediate block sums array
unsigned int **m_blockFlags; //!< @internal Intermediate block flags array
unsigned int **m_blockIndices; //!< @internal Intermediate block indices array
size_t m_numEltsAllocated; //!< @internal Number of elements allocated (maximum scan size)
size_t m_numLevelsAllocated; //!< @internal Number of levels allocaed (in _scanBlockSums)
};
/** @brief Plan class for compact algorithm
*
*/
class CUDPPCompactPlan : public CUDPPPlan
{
public:
CUDPPCompactPlan(CUDPPConfiguration config, size_t numElements, size_t numRows, size_t rowPitch);
virtual ~CUDPPCompactPlan();
CUDPPScanPlan *m_scanPlan; //!< @internal Compact performs a scan of type unsigned int using this plan
unsigned int* m_d_outputIndices; //!< @internal Output address of compacted elements; this is the result of scan
};
class CUDPPRadixSortPlan : public CUDPPPlan
{
public:
CUDPPRadixSortPlan(CUDPPConfiguration config, size_t numElements);
virtual ~CUDPPRadixSortPlan();
bool m_bKeysOnly;
bool m_bManualCoalesce;
bool m_bUsePersistentCTAs;
unsigned int m_persistentCTAThreshold[2];
unsigned int m_persistentCTAThresholdFullBlocks[2];
CUDPPScanPlan *m_scanPlan; //!< @internal Sort performs a scan of type unsigned int using this plan
unsigned int m_keyBits;
mutable void *m_tempKeys; //!< @internal Intermediate storage for keys
mutable void *m_tempValues; //!< @internal Intermediate storage for values
unsigned int *m_counters; //!< @internal Counter for each radix
unsigned int *m_countersSum; //!< @internal Prefix sum of radix counters
unsigned int *m_blockOffsets; //!< @internal Global offsets of each radix in each block
};
/** @brief Plan class for sparse-matrix dense-vector multiply
*
*/
class CUDPPSparseMatrixVectorMultiplyPlan : public CUDPPPlan
{
public:
CUDPPSparseMatrixVectorMultiplyPlan(CUDPPConfiguration config, size_t numNZElts,
const void *A,
const unsigned int *rowindx,
const unsigned int *indx, size_t numRows);
virtual ~CUDPPSparseMatrixVectorMultiplyPlan();
CUDPPSegmentedScanPlan *m_segmentedScanPlan; //!< @internal Performs a segmented scan of type T using this plan
void *m_d_prod; //!< @internal Vector of products (of an element in A and its corresponding (thats is
//! belongs to the same row) element in x; this is the input and output of
//! segmented scan
unsigned int *m_d_flags; //!< @internal Vector of flags where a flag is set if an element of A is the first element
//! of its row; this is the flags vector for segmented scan
unsigned int *m_d_rowFinalIndex; //!< @internal Vector of row end indices, which for each row specifies an index in A
//! which is the last element of that row. Resides in GPU memory.
unsigned int *m_d_rowIndex; //!< @internal Vector of row end indices, which for each row specifies an index in A
//! which is the first element of that row. Resides in GPU memory.
unsigned int *m_d_index; //!<@internal Vector of column numbers one for each element in A
void *m_d_A; //!<@internal The A matrix
unsigned int *m_rowFinalIndex; //!< @internal Vector of row end indices, which for each row specifies an index in A
//! which is the last element of that row. Resides in CPU memory.
size_t m_numRows; //!< Number of rows
size_t m_numNonZeroElements; //!<Number of non-zero elements
};
/** @brief Plan class for random number generator
*
*/
class CUDPPRandPlan : public CUDPPPlan
{
public:
CUDPPRandPlan(CUDPPConfiguration config, size_t num_elements);
unsigned int m_seed; //!< @internal the seed for the random number generator
};
#endif // __CUDPP_PLAN_H__
diff --git a/lib/gpu/cudpp_mini/cudpp_plan_manager.h b/lib/gpu/cudpp_mini/cudpp_plan_manager.h
index a55a1f0d2..1ccdca516 100644
--- a/lib/gpu/cudpp_mini/cudpp_plan_manager.h
+++ b/lib/gpu/cudpp_mini/cudpp_plan_manager.h
@@ -1,56 +1,56 @@
// -------------------------------------------------------------
// cuDPP -- CUDA Data Parallel Primitives library
// -------------------------------------------------------------
// $Revision: 3572$
-// $Date$
+// $Date: 2010-11-23 13:04:43 -0700 (Tue, 23 Nov 2010) $
// -------------------------------------------------------------
// This source code is distributed under the terms of license.txt
// in the root directory of this source distribution.
// -------------------------------------------------------------
#ifndef __CUDPP_PLAN_MANAGER_H__
#define __CUDPP_PLAN_MANAGER_H__
#include <map>
class CUDPPPlan;
typedef void* KernelPointer;
/** @brief Singleton manager class for CUDPPPlan objects
*
* This class manages all active plans in CUDPP. It is a singleton class,
* meaning that only one instance can exist. It is created automatically the
* first time AddPlan() is called, and destroyed when the last plan is removed
* using RemovePlan().
*/
class CUDPPPlanManager
{
public:
static CUDPPHandle AddPlan(CUDPPPlan* plan);
static bool RemovePlan(CUDPPHandle handle);
static CUDPPPlan* GetPlan(CUDPPHandle handle);
static size_t numCTAs(KernelPointer kernel);
static void computeNumCTAs(KernelPointer kernel,
size_t bytesDynamicSharedMem,
size_t threadsPerBlock);
protected:
static CUDPPPlanManager* m_instance;
std::map<CUDPPHandle, CUDPPPlan*> plans;
std::map<void*, size_t> numCTAsTable;
private:
//! @internal Instantiate the plan manager singleton object
static void Instantiate();
//! @internal Destroy the plan manager singleton object
static void Destroy();
private:
CUDPPPlanManager() {}
CUDPPPlanManager(const CUDPPPlanManager&) {}
~CUDPPPlanManager();
};
#endif // __CUDPP_PLAN_MANAGER_H__
diff --git a/lib/gpu/cudpp_mini/cudpp_radixsort.h b/lib/gpu/cudpp_mini/cudpp_radixsort.h
index 643da8651..b977017d3 100644
--- a/lib/gpu/cudpp_mini/cudpp_radixsort.h
+++ b/lib/gpu/cudpp_mini/cudpp_radixsort.h
@@ -1,34 +1,34 @@
// -------------------------------------------------------------
// cuDPP -- CUDA Data Parallel Primitives library
// -------------------------------------------------------------
-// $Revision$
-// $Date$
+// $Revision: 5289 $
+// $Date: 2010-11-23 13:04:43 -0700 (Tue, 23 Nov 2010) $
// -------------------------------------------------------------
// This source code is distributed under the terms of license.txt
// in the root directory of this source distribution.
// -------------------------------------------------------------
#ifndef __RADIXSORT_H__
#define __RADIXSORT_H__
#define SORT_CTA_SIZE 256 //This CTA_SIZE must equal 16 * number of radices
#include "cudpp_globals.h"
#include "cudpp.h"
#include "cudpp_plan.h"
extern "C"
void allocRadixSortStorage(CUDPPRadixSortPlan* plan);
extern "C"
void freeRadixSortStorage(CUDPPRadixSortPlan* plan);
extern "C"
void cudppRadixSortDispatch(void *keys,
void *values,
size_t numElements,
int keyBits,
const CUDPPRadixSortPlan *plan);
#endif // __RADIXSORT_H__
diff --git a/lib/gpu/cudpp_mini/cudpp_scan.h b/lib/gpu/cudpp_mini/cudpp_scan.h
index 4a5ef348f..af4729b29 100644
--- a/lib/gpu/cudpp_mini/cudpp_scan.h
+++ b/lib/gpu/cudpp_mini/cudpp_scan.h
@@ -1,36 +1,36 @@
// -------------------------------------------------------------
// cuDPP -- CUDA Data Parallel Primitives library
// -------------------------------------------------------------
-// $Revision$
-// $Date$
+// $Revision: 5289 $
+// $Date: 2010-11-23 13:04:43 -0700 (Tue, 23 Nov 2010) $
// -------------------------------------------------------------
// This source code is distributed under the terms of license.txt
// in the root directory of this source distribution.
// -------------------------------------------------------------
/**
* @file
* cudpp_scan.h
*
* @brief Scan functionality header file - contains CUDPP interface (not public)
*/
#ifndef _CUDPP_SCAN_H_
#define _CUDPP_SCAN_H_
class CUDPPScanPlan;
extern "C"
void allocScanStorage(CUDPPScanPlan *plan);
extern "C"
void freeScanStorage(CUDPPScanPlan *plan);
extern "C"
void cudppScanDispatch(void *d_out,
const void *d_in,
size_t numElements,
size_t numRows,
const CUDPPScanPlan *plan);
#endif // _CUDPP_SCAN_H_
diff --git a/lib/gpu/cudpp_mini/cudpp_util.h b/lib/gpu/cudpp_mini/cudpp_util.h
index c25a384f2..5cff05e81 100644
--- a/lib/gpu/cudpp_mini/cudpp_util.h
+++ b/lib/gpu/cudpp_mini/cudpp_util.h
@@ -1,363 +1,363 @@
// -------------------------------------------------------------
// cuDPP -- CUDA Data Parallel Primitives library
// -------------------------------------------------------------
-// $Revision$
-// $Date$
+// $Revision: 5289 $
+// $Date: 2010-11-23 13:04:43 -0700 (Tue, 23 Nov 2010) $
// -------------------------------------------------------------
// This source code is distributed under the terms of license.txt in
// the root directory of this source distribution.
// -------------------------------------------------------------
/**
* @file
* cudpp_util.h
*
* @brief C++ utility functions and classes used internally to cuDPP
*/
#ifndef __CUDPP_UTIL_H__
#define __CUDPP_UTIL_H__
#ifdef WIN32
#include <windows.h>
#endif
#include <cuda.h>
#include <cudpp.h>
#include <limits.h>
#include <float.h>
#if (CUDA_VERSION >= 3000)
#define LAUNCH_BOUNDS(x) __launch_bounds__((x))
#define LAUNCH_BOUNDS_MINBLOCKs(x, y) __launch_bounds__((x),(y))
#else
#define LAUNCH_BOUNDS(x)
#define LAUNCH_BOUNDS_MINBLOCKS(x, y)
#endif
/** @brief Determine if \a n is a power of two.
* @param n Value to be checked to see if it is a power of two
* @returns True if \a n is a power of two, false otherwise
*/
inline bool
isPowerOfTwo(int n)
{
return ((n&(n-1))==0) ;
}
/** @brief Determine if an integer \a n is a multiple of an integer \a f.
* @param n Multiple
* @param f Factor
* @returns True if \a n is a multiple of \a f, false otherwise
*/
inline bool
isMultiple(int n, int f)
{
if (isPowerOfTwo(f))
return ((n&(f-1))==0);
else
return (n%f==0);
}
/** @brief Compute the smallest power of two larger than \a n.
* @param n Input value
* @returns The smallest power f two larger than \a n
*/
inline int
ceilPow2(int n)
{
double log2n = log2((double)n);
if (isPowerOfTwo(n))
return n;
else
return 1 << (int)ceil(log2n);
}
/** @brief Compute the largest power of two smaller than \a n.
* @param n Input value
* @returns The largest power of two smaller than \a n.
*/
inline int
floorPow2(int n)
{
#ifdef WIN32
// method 2
return 1 << (int)_logb((float)n);
#else
// method 3
int exp;
frexp((float)n, &exp);
return 1 << (exp - 1);
#endif
}
/** @brief Returns the maximum value for type \a T.
*
* Implemented using template specialization on \a T.
*/
template <class T>
__host__ __device__ inline T getMax() { return 0; }
/** @brief Returns the minimum value for type \a T.
*
* Implemented using template specialization on \a T.
*/
template <class T>
__host__ __device__ inline T getMin() { return 0; }
// type specializations for the above
// getMax
template <> __host__ __device__ inline int getMax() { return INT_MAX; }
template <> __host__ __device__ inline unsigned int getMax() { return INT_MAX; }
template <> __host__ __device__ inline float getMax() { return FLT_MAX; }
template <> __host__ __device__ inline char getMax() { return (char)INT_MAX; }
template <> __host__ __device__ inline unsigned char getMax() { return (unsigned char)INT_MAX; }
// getMin
template <> __host__ __device__ inline int getMin() { return INT_MIN; }
template <> __host__ __device__ inline unsigned int getMin() { return 0; }
template <> __host__ __device__ inline float getMin() { return -FLT_MAX; }
template <> __host__ __device__ inline char getMin() { return (char)INT_MIN; }
template <> __host__ __device__ inline unsigned char getMin() { return (unsigned char)0; }
/** @brief Returns the maximum of three values.
* @param a First value.
* @param b Second value.
* @param c Third value.
* @returns The maximum of \a a, \a b and \a c.
*/
template<class T>
inline int max3(T a, T b, T c)
{
return (a > b) ? ((a > c)? a : c) : ((b > c) ? b : c);
}
/** @brief Utility template struct for generating small vector types from scalar types
*
* Given a base scalar type (\c int, \c float, etc.) and a vector length (1 through 4) as
* template parameters, this struct defines a vector type (\c float3, \c int4, etc.) of the
* specified length and base type. For example:
* \code
* template <class T>
* __device__ void myKernel(T *data)
* {
* typeToVector<T,4>::Result myVec4; // create a vec4 of type T
* myVec4 = (typeToVector<T,4>::Result*)data[0]; // load first element of data as a vec4
* }
* \endcode
*
* This functionality is implemented using template specialization. Currently specializations
* for int, float, and unsigned int vectors of lengths 2-4 are defined. Note that this results
* in types being generated at compile time -- there is no runtime cost. typeToVector is used by
* the optimized scan \c __device__ functions in scan_cta.cu.
*/
template <typename T, int N>
struct typeToVector
{
typedef T Result;
};
template<>
struct typeToVector<int, 4>
{
typedef int4 Result;
};
template<>
struct typeToVector<unsigned int, 4>
{
typedef uint4 Result;
};
template<>
struct typeToVector<float, 4>
{
typedef float4 Result;
};
template<>
struct typeToVector<int, 3>
{
typedef int3 Result;
};
template<>
struct typeToVector<unsigned int, 3>
{
typedef uint3 Result;
};
template<>
struct typeToVector<float, 3>
{
typedef float3 Result;
};
template<>
struct typeToVector<int, 2>
{
typedef int2 Result;
};
template<>
struct typeToVector<unsigned int, 2>
{
typedef uint2 Result;
};
template<>
struct typeToVector<float, 2>
{
typedef float2 Result;
};
/** @brief Templatized operator class used by scan and segmented scan
*
* This Operator class is used to allow generic support of binary
* associative operators in scan. It defines two member functions,
* op() and identity(), that are used in place of + and 0 (for
* example) in the scan and segmented scan code. Because this is
* template code, all decisions in the code are made at compile
* time, resulting in optimal operator code. Currently the operators
* CUDPP_ADD, CUDPP_MULTIPLY, CUDPP_MIN, and CUDPP_MAX are supported.
* Operator is implemented using template specialization for the
* types \c int, \c unsigned int, and \c float.
*/
template <typename T, CUDPPOperator oper>
class Operator
{
public:
/** Applies the operator to operands \a a and \a b.
* @param a First operand
* @param b Second operand
* @returns a OP b, where OP is defined by ::CUDPPOperator \a oper.
*/
static __device__ T op(const T a, const T b)
{
switch (oper)
{
case CUDPP_ADD:
return a + b;
case CUDPP_MULTIPLY:
return a * b;
case CUDPP_MIN:
return min(a, b);
case CUDPP_MAX:
return max(a, b);
}
}
/** Returns the identity element defined for type \a T */
static __device__ T identity() { return 0; }
};
// specializations for different types
template <CUDPPOperator oper>
class Operator <int, oper>
{
public:
static __device__ int op(const int a, const int b)
{
switch (oper)
{
default:
case CUDPP_ADD:
return a + b;
case CUDPP_MULTIPLY:
return a * b;
case CUDPP_MIN:
return min(a, b);
case CUDPP_MAX:
return max(a, b);
}
}
static __device__ int identity()
{
switch (oper)
{
default:
case CUDPP_ADD:
return 0;
case CUDPP_MULTIPLY:
return 1;
case CUDPP_MIN:
return INT_MAX;
case CUDPP_MAX:
return INT_MIN;
}
}
};
template <CUDPPOperator oper>
class Operator <unsigned int, oper>
{
public:
static __device__ unsigned int op(const unsigned int a, const unsigned int b)
{
switch (oper)
{
default:
case CUDPP_ADD:
return a + b;
case CUDPP_MULTIPLY:
return a * b;
case CUDPP_MIN:
return min(a, b);
case CUDPP_MAX:
return max(a, b);
}
}
static __device__ unsigned int identity()
{
switch (oper)
{
default:
case CUDPP_ADD:
return 0;
case CUDPP_MULTIPLY:
return 1;
case CUDPP_MIN:
return UINT_MAX;
case CUDPP_MAX:
return 0;
}
}
};
template <CUDPPOperator oper>
class Operator <float, oper>
{
public:
static __device__ float op(const float a, const float b)
{
switch (oper)
{
default:
case CUDPP_ADD:
return a + b;
case CUDPP_MULTIPLY:
return a * b;
case CUDPP_MIN:
return min(a, b);
case CUDPP_MAX:
return max(a, b);
}
}
static __device__ float identity()
{
switch (oper)
{
default:
case CUDPP_ADD:
return 0.0f;
case CUDPP_MULTIPLY:
return 1.0f;
case CUDPP_MIN:
return FLT_MAX;
case CUDPP_MAX:
return -FLT_MAX;
}
}
};
#endif // __CUDPP_UTIL_H__
// Leave this at the end of the file
// Local Variables:
// mode:c++
// c-file-style: "NVIDIA"
// End:
diff --git a/lib/gpu/cudpp_mini/sharedmem.h b/lib/gpu/cudpp_mini/sharedmem.h
index 87d4669d9..14721cfd3 100644
--- a/lib/gpu/cudpp_mini/sharedmem.h
+++ b/lib/gpu/cudpp_mini/sharedmem.h
@@ -1,166 +1,166 @@
// -------------------------------------------------------------
// cuDPP -- CUDA Data Parallel Primitives library
// -------------------------------------------------------------
-// $Revision$
-// $Date$
+// $Revision: 5289 $
+// $Date: 2010-11-23 13:04:43 -0700 (Tue, 23 Nov 2010) $
// -------------------------------------------------------------
// This source code is distributed under the terms of license.txt
// in the root directory of this source distribution.
// -------------------------------------------------------------
/**
* @file
* sharedmem.h
*
* @brief Shared memory declaration struct for templatized types.
*
* Because dynamically sized shared memory arrays are declared "extern" in CUDA,
* we can't templatize their types directly. To get around this, we declare a
* simple wrapper struct that will declare the extern array with a different
* name depending on the type. This avoids linker errors about multiple
* definitions.
*
* To use dynamically allocated shared memory in a templatized __global__ or
* __device__ function, just replace code like this:
*
* <pre>
* template<class T>
* __global__ void
* foo( T* d_out, T* d_in)
* {
* // Shared mem size is determined by the host app at run time
* extern __shared__ T sdata[];
* ...
* doStuff(sdata);
* ...
* }
* </pre>
*
* With this
* <pre>
* template<class T>
* __global__ void
* foo( T* d_out, T* d_in)
* {
* // Shared mem size is determined by the host app at run time
* SharedMemory<T> smem;
* T* sdata = smem.getPointer();
* ...
* doStuff(sdata);
* ...
* }
* </pre>
*/
#ifndef _SHAREDMEM_H_
#define _SHAREDMEM_H_
/** @brief Wrapper class for templatized dynamic shared memory arrays.
*
* This struct uses template specialization on the type \a T to declare
* a differently named dynamic shared memory array for each type
* (\code extern __shared__ T s_type[] \endcode).
*
* Currently there are specializations for the following types:
* \c int, \c uint, \c char, \c uchar, \c short, \c ushort, \c long,
* \c unsigned long, \c bool, \c float, and \c double. One can also specialize it
* for user defined types.
*/
template <typename T>
struct SharedMemory
{
/** Return a pointer to the runtime-sized shared memory array. **/
__device__ T* getPointer()
{
extern __device__ void Error_UnsupportedType(); // Ensure that we won't compile any un-specialized types
Error_UnsupportedType();
return (T*)0;
}
// TODO: Use operator overloading to make this class look like a regular array
};
// Following are the specializations for the following types.
// int, uint, char, uchar, short, ushort, long, ulong, bool, float, and double
// One could also specialize it for user-defined types.
template <>
struct SharedMemory <int>
{
__device__ int* getPointer() { extern __shared__ int s_int[]; return s_int; }
};
template <>
struct SharedMemory <unsigned int>
{
__device__ unsigned int* getPointer() { extern __shared__ unsigned int s_uint[]; return s_uint; }
};
template <>
struct SharedMemory <char>
{
__device__ char* getPointer() { extern __shared__ char s_char[]; return s_char; }
};
template <>
struct SharedMemory <unsigned char>
{
__device__ unsigned char* getPointer() { extern __shared__ unsigned char s_uchar[]; return s_uchar; }
};
template <>
struct SharedMemory <short>
{
__device__ short* getPointer() { extern __shared__ short s_short[]; return s_short; }
};
template <>
struct SharedMemory <unsigned short>
{
__device__ unsigned short* getPointer() { extern __shared__ unsigned short s_ushort[]; return s_ushort; }
};
template <>
struct SharedMemory <long>
{
__device__ long* getPointer() { extern __shared__ long s_long[]; return s_long; }
};
template <>
struct SharedMemory <unsigned long>
{
__device__ unsigned long* getPointer() { extern __shared__ unsigned long s_ulong[]; return s_ulong; }
};
template <>
struct SharedMemory <bool>
{
__device__ bool* getPointer() { extern __shared__ bool s_bool[]; return s_bool; }
};
template <>
struct SharedMemory <float>
{
__device__ float* getPointer() { extern __shared__ float s_float[]; return s_float; }
};
template <>
struct SharedMemory <double>
{
__device__ double* getPointer() { extern __shared__ double s_double[]; return s_double; }
};
template <>
struct SharedMemory <uchar4>
{
__device__ uchar4* getPointer() { extern __shared__ uchar4 s_uchar4[]; return s_uchar4; }
};
#endif //_SHAREDMEM_H_
// Leave this at the end of the file
// Local Variables:
// mode:c++
// c-file-style: "NVIDIA"
// End:
diff --git a/lib/kokkos/Makefile.kokkos b/lib/kokkos/Makefile.kokkos
index 61d678630..af2a61775 100644
--- a/lib/kokkos/Makefile.kokkos
+++ b/lib/kokkos/Makefile.kokkos
@@ -1,471 +1,471 @@
# Default settings common options
#LAMMPS specific settings:
KOKKOS_PATH=../../lib/kokkos
CXXFLAGS=$(CCFLAGS)
#Options: OpenMP,Serial,Pthreads,Cuda
-#KOKKOS_DEVICES ?= "OpenMP"
-KOKKOS_DEVICES ?= "Pthreads"
+KOKKOS_DEVICES ?= "OpenMP"
+#KOKKOS_DEVICES ?= "Pthreads"
#Options: KNC,SNB,HSW,Kepler,Kepler30,Kepler32,Kepler35,Kepler37,Maxwell,Maxwell50,Maxwell52,Maxwell53,ARMv8,BGQ,Power7,Power8,KNL
KOKKOS_ARCH ?= ""
#Options: yes,no
KOKKOS_DEBUG ?= "no"
#Options: hwloc,librt,experimental_memkind
KOKKOS_USE_TPLS ?= ""
#Options: c++11
KOKKOS_CXX_STANDARD ?= "c++11"
#Options: aggressive_vectorization,disable_profiling
KOKKOS_OPTIONS ?= "aggressive_vectorization"
#Default settings specific options
#Options: force_uvm,use_ldg,rdc,enable_lambda
KOKKOS_CUDA_OPTIONS ?= ""
# Check for general settings
KOKKOS_INTERNAL_ENABLE_DEBUG := $(strip $(shell echo $(KOKKOS_DEBUG) | grep "yes" | wc -l))
KOKKOS_INTERNAL_ENABLE_CXX11 := $(strip $(shell echo $(KOKKOS_CXX_STANDARD) | grep "c++11" | wc -l))
# Check for external libraries
KOKKOS_INTERNAL_USE_HWLOC := $(strip $(shell echo $(KOKKOS_USE_TPLS) | grep "hwloc" | wc -l))
KOKKOS_INTERNAL_USE_LIBRT := $(strip $(shell echo $(KOKKOS_USE_TPLS) | grep "librt" | wc -l))
KOKKOS_INTERNAL_USE_MEMKIND := $(strip $(shell echo $(KOKKOS_USE_TPLS) | grep "experimental_memkind" | wc -l))
# Check for advanced settings
KOKKOS_INTERNAL_OPT_RANGE_AGGRESSIVE_VECTORIZATION := $(strip $(shell echo $(KOKKOS_OPTIONS) | grep "aggressive_vectorization" | wc -l))
KOKKOS_INTERNAL_DISABLE_PROFILING := $(strip $(shell echo $(KOKKOS_OPTIONS) | grep "disable_profiling" | wc -l))
KOKKOS_INTERNAL_CUDA_USE_LDG := $(strip $(shell echo $(KOKKOS_CUDA_OPTIONS) | grep "use_ldg" | wc -l))
KOKKOS_INTERNAL_CUDA_USE_UVM := $(strip $(shell echo $(KOKKOS_CUDA_OPTIONS) | grep "force_uvm" | wc -l))
KOKKOS_INTERNAL_CUDA_USE_RELOC := $(strip $(shell echo $(KOKKOS_CUDA_OPTIONS) | grep "rdc" | wc -l))
KOKKOS_INTERNAL_CUDA_USE_LAMBDA := $(strip $(shell echo $(KOKKOS_CUDA_OPTIONS) | grep "enable_lambda" | wc -l))
# Check for Kokkos Host Execution Spaces one of which must be on
KOKKOS_INTERNAL_USE_OPENMP := $(strip $(shell echo $(KOKKOS_DEVICES) | grep OpenMP | wc -l))
KOKKOS_INTERNAL_USE_PTHREADS := $(strip $(shell echo $(KOKKOS_DEVICES) | grep Pthread | wc -l))
KOKKOS_INTERNAL_USE_SERIAL := $(strip $(shell echo $(KOKKOS_DEVICES) | grep Serial | wc -l))
KOKKOS_INTERNAL_USE_QTHREAD := $(strip $(shell echo $(KOKKOS_DEVICES) | grep Qthread | wc -l))
ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 0)
ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 0)
KOKKOS_INTERNAL_USE_SERIAL := 1
endif
endif
KOKKOS_INTERNAL_COMPILER_INTEL := $(shell $(CXX) --version 2>&1 | grep "Intel Corporation" | wc -l)
KOKKOS_INTERNAL_COMPILER_PGI := $(shell $(CXX) --version 2>&1 | grep PGI | wc -l)
KOKKOS_INTERNAL_COMPILER_XL := $(shell $(CXX) -qversion 2>&1 | grep XL | wc -l)
KOKKOS_INTERNAL_COMPILER_CRAY := $(shell $(CXX) -craype-verbose 2>&1 | grep "CC-" | wc -l)
KOKKOS_INTERNAL_OS_CYGWIN := $(shell uname | grep CYGWIN | wc -l)
ifeq ($(KOKKOS_INTERNAL_COMPILER_PGI), 1)
KOKKOS_INTERNAL_OPENMP_FLAG := -mp
else
ifeq ($(KOKKOS_INTERNAL_COMPILER_XL), 1)
KOKKOS_INTERNAL_OPENMP_FLAG := -qsmp=omp
else
ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY), 1)
# OpenMP is turned on by default in Cray compiler environment
KOKKOS_INTERNAL_OPENMP_FLAG :=
else
KOKKOS_INTERNAL_OPENMP_FLAG := -fopenmp
endif
endif
endif
ifeq ($(KOKKOS_INTERNAL_COMPILER_PGI), 1)
KOKKOS_INTERNAL_CXX11_FLAG := --c++11
else
ifeq ($(KOKKOS_INTERNAL_COMPILER_XL), 1)
KOKKOS_INTERNAL_CXX11_FLAG := -std=c++11
else
ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY), 1)
KOKKOS_INTERNAL_CXX11_FLAG := -hstd=c++11
else
KOKKOS_INTERNAL_CXX11_FLAG := --std=c++11
endif
endif
endif
# Check for other Execution Spaces
KOKKOS_INTERNAL_USE_CUDA := $(strip $(shell echo $(KOKKOS_DEVICES) | grep Cuda | wc -l))
# Check for Kokkos Architecture settings
#Intel based
KOKKOS_INTERNAL_USE_ARCH_KNC := $(strip $(shell echo $(KOKKOS_ARCH) | grep KNC | wc -l))
KOKKOS_INTERNAL_USE_ARCH_SNB := $(strip $(shell echo $(KOKKOS_ARCH) | grep SNB | wc -l))
KOKKOS_INTERNAL_USE_ARCH_HSW := $(strip $(shell echo $(KOKKOS_ARCH) | grep HSW | wc -l))
KOKKOS_INTERNAL_USE_ARCH_KNL := $(strip $(shell echo $(KOKKOS_ARCH) | grep KNL | wc -l))
#NVIDIA based
NVCC_WRAPPER := $(KOKKOS_PATH)/config/nvcc_wrapper
KOKKOS_INTERNAL_USE_ARCH_KEPLER30 := $(strip $(shell echo $(KOKKOS_ARCH) | grep Kepler30 | wc -l))
KOKKOS_INTERNAL_USE_ARCH_KEPLER32 := $(strip $(shell echo $(KOKKOS_ARCH) | grep Kepler32 | wc -l))
KOKKOS_INTERNAL_USE_ARCH_KEPLER35 := $(strip $(shell echo $(KOKKOS_ARCH) | grep Kepler35 | wc -l))
KOKKOS_INTERNAL_USE_ARCH_KEPLER37 := $(strip $(shell echo $(KOKKOS_ARCH) | grep Kepler37 | wc -l))
KOKKOS_INTERNAL_USE_ARCH_MAXWELL50 := $(strip $(shell echo $(KOKKOS_ARCH) | grep Maxwell50 | wc -l))
KOKKOS_INTERNAL_USE_ARCH_MAXWELL52 := $(strip $(shell echo $(KOKKOS_ARCH) | grep Maxwell52 | wc -l))
KOKKOS_INTERNAL_USE_ARCH_MAXWELL53 := $(strip $(shell echo $(KOKKOS_ARCH) | grep Maxwell53 | wc -l))
KOKKOS_INTERNAL_USE_ARCH_NVIDIA := $(strip $(shell echo $(KOKKOS_INTERNAL_USE_ARCH_KEPLER30) \
+ $(KOKKOS_INTERNAL_USE_ARCH_KEPLER32) \
+ $(KOKKOS_INTERNAL_USE_ARCH_KEPLER35) \
+ $(KOKKOS_INTERNAL_USE_ARCH_KEPLER37) \
+ $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL50) \
+ $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL52) \
+ $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL53) | bc))
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_NVIDIA), 0)
KOKKOS_INTERNAL_USE_ARCH_MAXWELL50 := $(strip $(shell echo $(KOKKOS_ARCH) | grep Maxwell | wc -l))
KOKKOS_INTERNAL_USE_ARCH_KEPLER35 := $(strip $(shell echo $(KOKKOS_ARCH) | grep Kepler | wc -l))
KOKKOS_INTERNAL_USE_ARCH_NVIDIA := $(strip $(shell echo $(KOKKOS_INTERNAL_USE_ARCH_KEPLER30) \
+ $(KOKKOS_INTERNAL_USE_ARCH_KEPLER32) \
+ $(KOKKOS_INTERNAL_USE_ARCH_KEPLER35) \
+ $(KOKKOS_INTERNAL_USE_ARCH_KEPLER37) \
+ $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL50) \
+ $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL52) \
+ $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL53) | bc))
endif
#ARM based
KOKKOS_INTERNAL_USE_ARCH_ARMV80 := $(strip $(shell echo $(KOKKOS_ARCH) | grep ARMv8 | wc -l))
#IBM based
KOKKOS_INTERNAL_USE_ARCH_BGQ := $(strip $(shell echo $(KOKKOS_ARCH) | grep BGQ | wc -l))
KOKKOS_INTERNAL_USE_ARCH_POWER7 := $(strip $(shell echo $(KOKKOS_ARCH) | grep Power7 | wc -l))
KOKKOS_INTERNAL_USE_ARCH_POWER8 := $(strip $(shell echo $(KOKKOS_ARCH) | grep Power8 | wc -l))
KOKKOS_INTERNAL_USE_ARCH_IBM := $(strip $(shell echo $(KOKKOS_INTERNAL_USE_ARCH_BGQ)+$(KOKKOS_INTERNAL_USE_ARCH_POWER7)+$(KOKKOS_INTERNAL_USE_ARCH_POWER8) | bc))
#AMD based
KOKKOS_INTERNAL_USE_ARCH_AMDAVX := $(strip $(shell echo $(KOKKOS_ARCH) | grep AMDAVX | wc -l))
#Any AVX?
KOKKOS_INTERNAL_USE_ARCH_AVX := $(strip $(shell echo $(KOKKOS_INTERNAL_USE_ARCH_SNB)+$(KOKKOS_INTERNAL_USE_ARCH_AMDAVX) | bc ))
KOKKOS_INTERNAL_USE_ARCH_AVX2 := $(strip $(shell echo $(KOKKOS_INTERNAL_USE_ARCH_HSW) | bc ))
KOKKOS_INTERNAL_USE_ARCH_AVX512MIC := $(strip $(shell echo $(KOKKOS_INTERNAL_USE_ARCH_KNL) | bc ))
# Decide what ISA level we are able to support
KOKKOS_INTERNAL_USE_ISA_X86_64 := $(strip $(shell echo $(KOKKOS_INTERNAL_USE_ARCH_SNB)+$(KOKKOS_INTERNAL_USE_ARCH_HSW)+$(KOKKOS_INTERNAL_USE_ARCH_KNL) | bc ))
KOKKOS_INTERNAL_USE_ISA_KNC := $(strip $(shell echo $(KOKKOS_INTERNAL_USE_ARCH_KNC) | bc ))
KOKKOS_INTERNAL_USE_ISA_POWERPCLE := $(strip $(shell echo $(KOKKOS_INTERNAL_USE_ARCH_POWER8) | bc ))
#Incompatible flags?
KOKKOS_INTERNAL_USE_ARCH_MULTIHOST := $(strip $(shell echo "$(KOKKOS_INTERNAL_USE_ARCH_AVX)+$(KOKKOS_INTERNAL_USE_ARCH_AVX2)+$(KOKKOS_INTERNAL_USE_ARCH_KNC)+$(KOKKOS_INTERNAL_USE_ARCH_IBM)+$(KOKKOS_INTERNAL_USE_ARCH_AMDAVX)+$(KOKKOS_INTERNAL_USE_ARCH_ARMV80)>1" | bc ))
KOKKOS_INTERNAL_USE_ARCH_MULTIGPU := $(strip $(shell echo "$(KOKKOS_INTERNAL_USE_ARCH_NVIDIA)>1" | bc))
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MULTIHOST), 1)
$(error Defined Multiple Host architectures: KOKKOS_ARCH=$(KOKKOS_ARCH) )
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MULTIGPU), 1)
$(error Defined Multiple GPU architectures: KOKKOS_ARCH=$(KOKKOS_ARCH) )
endif
#Generating the list of Flags
KOKKOS_CPPFLAGS = -I./ -I$(KOKKOS_PATH)/core/src -I$(KOKKOS_PATH)/containers/src -I$(KOKKOS_PATH)/algorithms/src
# No warnings:
KOKKOS_CXXFLAGS =
# INTEL and CLANG warnings:
#KOKKOS_CXXFLAGS = -Wall -Wshadow -pedantic -Wsign-compare -Wtype-limits -Wuninitialized
# GCC warnings:
#KOKKOS_CXXFLAGS = -Wall -Wshadow -pedantic -Wsign-compare -Wtype-limits -Wuninitialized -Wignored-qualifiers -Wempty-body -Wclobbered
KOKKOS_LIBS = -lkokkos -ldl
KOKKOS_LDFLAGS = -L$(shell pwd)
KOKKOS_SRC =
KOKKOS_HEADERS =
#Generating the KokkosCore_config.h file
tmp := $(shell echo "/* ---------------------------------------------" > KokkosCore_config.tmp)
tmp := $(shell echo "Makefile constructed configuration:" >> KokkosCore_config.tmp)
tmp := $(shell date >> KokkosCore_config.tmp)
tmp := $(shell echo "----------------------------------------------*/" >> KokkosCore_config.tmp)
tmp := $(shell echo "/* Execution Spaces */" >> KokkosCore_config.tmp)
ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1)
tmp := $(shell echo '\#define KOKKOS_HAVE_OPENMP 1' >> KokkosCore_config.tmp)
endif
ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1)
tmp := $(shell echo "\#define KOKKOS_HAVE_PTHREAD 1" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1)
tmp := $(shell echo "\#define KOKKOS_HAVE_SERIAL 1" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1)
tmp := $(shell echo "\#define KOKKOS_HAVE_CUDA 1" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_USE_ISA_X86_64), 1)
tmp := $(shell echo "\#define KOKKOS_USE_ISA_X86_64" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_USE_ISA_KNC), 1)
tmp := $(shell echo "\#define KOKKOS_USE_ISA_KNC" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_USE_ISA_POWERPCLE), 1)
tmp := $(shell echo "\#define KOKKOS_USE_ISA_POWERPCLE" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_USE_QTHREAD), 1)
KOKKOS_CPPFLAGS += -I$(QTHREAD_PATH)/include
KOKKOS_LDFLAGS += -L$(QTHREAD_PATH)/lib
tmp := $(shell echo "\#define KOKKOS_HAVE_QTHREAD 1" >> KokkosCore_config.tmp )
endif
tmp := $(shell echo "/* General Settings */" >> KokkosCore_config.tmp)
ifeq ($(KOKKOS_INTERNAL_ENABLE_CXX11), 1)
KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_CXX11_FLAG)
tmp := $(shell echo "\#define KOKKOS_HAVE_CXX11 1" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_ENABLE_DEBUG), 1)
ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1)
KOKKOS_CXXFLAGS += -G
endif
KOKKOS_CXXFLAGS += -g
KOKKOS_LDFLAGS += -g -ldl
tmp := $(shell echo "\#define KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK 1" >> KokkosCore_config.tmp )
tmp := $(shell echo "\#define KOKKOS_HAVE_DEBUG 1" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_USE_HWLOC), 1)
KOKKOS_CPPFLAGS += -I$(HWLOC_PATH)/include
KOKKOS_LDFLAGS += -L$(HWLOC_PATH)/lib
KOKKOS_LIBS += -lhwloc
tmp := $(shell echo "\#define KOKKOS_HAVE_HWLOC 1" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_USE_LIBRT), 1)
tmp := $(shell echo "\#define KOKKOS_USE_LIBRT 1" >> KokkosCore_config.tmp )
tmp := $(shell echo "\#define PREC_TIMER 1" >> KokkosCore_config.tmp )
tmp := $(shell echo "\#define KOKKOSP_ENABLE_RTLIB 1" >> KokkosCore_config.tmp )
KOKKOS_LIBS += -lrt
endif
ifeq ($(KOKKOS_INTERNAL_USE_MEMKIND), 1)
KOKKOS_CPPFLAGS += -I$(MEMKIND_PATH)/include
KOKKOS_LDFLAGS += -L$(MEMKIND_PATH)/lib
KOKKOS_LIBS += -lmemkind
tmp := $(shell echo "\#define KOKKOS_HAVE_HBWSPACE 1" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_DISABLE_PROFILING), 1)
tmp := $(shell echo "\#define KOKKOS_ENABLE_PROFILING 0" >> KokkosCore_config.tmp )
endif
tmp := $(shell echo "/* Optimization Settings */" >> KokkosCore_config.tmp)
ifeq ($(KOKKOS_INTERNAL_OPT_RANGE_AGGRESSIVE_VECTORIZATION), 1)
tmp := $(shell echo "\#define KOKKOS_OPT_RANGE_AGGRESSIVE_VECTORIZATION 1" >> KokkosCore_config.tmp )
endif
tmp := $(shell echo "/* Cuda Settings */" >> KokkosCore_config.tmp)
ifeq ($(KOKKOS_INTERNAL_CUDA_USE_LDG), 1)
tmp := $(shell echo "\#define KOKKOS_CUDA_USE_LDG_INTRINSIC 1" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_CUDA_USE_UVM), 1)
tmp := $(shell echo "\#define KOKKOS_CUDA_USE_UVM 1" >> KokkosCore_config.tmp )
tmp := $(shell echo "\#define KOKKOS_USE_CUDA_UVM 1" >> KokkosCore_config.tmp )
endif
ifeq ($(KOKKOS_INTERNAL_CUDA_USE_RELOC), 1)
tmp := $(shell echo "\#define KOKKOS_CUDA_USE_RELOCATABLE_DEVICE_CODE 1" >> KokkosCore_config.tmp )
KOKKOS_CXXFLAGS += --relocatable-device-code=true
KOKKOS_LDFLAGS += --relocatable-device-code=true
endif
ifeq ($(KOKKOS_INTERNAL_CUDA_USE_LAMBDA), 1)
tmp := $(shell echo "\#define KOKKOS_CUDA_USE_LAMBDA 1" >> KokkosCore_config.tmp )
KOKKOS_CXXFLAGS += -expt-extended-lambda
endif
#Add Architecture flags
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AVX), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_AVX 1" >> KokkosCore_config.tmp )
ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY), 1)
KOKKOS_CXXFLAGS +=
KOKKOS_LDFLAGS +=
else
KOKKOS_CXXFLAGS += -mavx
KOKKOS_LDFLAGS += -mavx
endif
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_POWER8), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_POWER8 1" >> KokkosCore_config.tmp )
KOKKOS_CXXFLAGS += -mcpu=power8
KOKKOS_LDFLAGS += -mcpu=power8
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AVX2), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_AVX2 1" >> KokkosCore_config.tmp )
ifeq ($(KOKKOS_INTERNAL_COMPILER_INTEL), 1)
KOKKOS_CXXFLAGS += -xCORE-AVX2
KOKKOS_LDFLAGS += -xCORE-AVX2
else
ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY), 1)
else
ifeq ($(KOKKOS_INTERNAL_COMPILER_PGI), 1)
else
# Assume that this is a really a GNU compiler
KOKKOS_CXXFLAGS += -march=core-avx2
KOKKOS_LDFLAGS += -march=core-avx2
endif
endif
endif
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AVX512MIC), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_AVX512MIC 1" >> KokkosCore_config.tmp )
ifeq ($(KOKKOS_INTERNAL_COMPILER_INTEL), 1)
KOKKOS_CXXFLAGS += -xMIC-AVX512
KOKKOS_LDFLAGS += -xMIC-AVX512
else
ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY), 1)
else
ifeq ($(KOKKOS_INTERNAL_COMPILER_PGI), 1)
else
# Asssume that this is really a GNU compiler
KOKKOS_CXXFLAGS += -march=knl
KOKKOS_LDFLAGS += -march=knl
endif
endif
endif
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KNC), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_KNC 1" >> KokkosCore_config.tmp )
KOKKOS_CXXFLAGS += -mmic
KOKKOS_LDFLAGS += -mmic
endif
ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1)
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER30), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_KEPLER 1" >> KokkosCore_config.tmp )
tmp := $(shell echo "\#define KOKKOS_ARCH_KEPLER30 1" >> KokkosCore_config.tmp )
KOKKOS_CXXFLAGS += -arch=sm_30
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER32), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_KEPLER 1" >> KokkosCore_config.tmp )
tmp := $(shell echo "\#define KOKKOS_ARCH_KEPLER32 1" >> KokkosCore_config.tmp )
KOKKOS_CXXFLAGS += -arch=sm_32
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER35), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_KEPLER 1" >> KokkosCore_config.tmp )
tmp := $(shell echo "\#define KOKKOS_ARCH_KEPLER35 1" >> KokkosCore_config.tmp )
KOKKOS_CXXFLAGS += -arch=sm_35
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER37), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_KEPLER 1" >> KokkosCore_config.tmp )
tmp := $(shell echo "\#define KOKKOS_ARCH_KEPLER37 1" >> KokkosCore_config.tmp )
KOKKOS_CXXFLAGS += -arch=sm_37
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MAXWELL50), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_MAXWELL 1" >> KokkosCore_config.tmp )
tmp := $(shell echo "\#define KOKKOS_ARCH_MAXWELL50 1" >> KokkosCore_config.tmp )
KOKKOS_CXXFLAGS += -arch=sm_50
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MAXWELL52), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_MAXWELL 1" >> KokkosCore_config.tmp )
tmp := $(shell echo "\#define KOKKOS_ARCH_MAXWELL52 1" >> KokkosCore_config.tmp )
KOKKOS_CXXFLAGS += -arch=sm_52
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_MAXWELL53), 1)
tmp := $(shell echo "\#define KOKKOS_ARCH_MAXWELL 1" >> KokkosCore_config.tmp )
tmp := $(shell echo "\#define KOKKOS_ARCH_MAXWELL53 1" >> KokkosCore_config.tmp )
KOKKOS_CXXFLAGS += -arch=sm_53
endif
endif
KOKKOS_INTERNAL_LS_CONFIG := $(shell ls KokkosCore_config.h)
ifeq ($(KOKKOS_INTERNAL_LS_CONFIG), KokkosCore_config.h)
KOKKOS_INTERNAL_NEW_CONFIG := $(strip $(shell diff KokkosCore_config.h KokkosCore_config.tmp | grep define | wc -l))
else
KOKKOS_INTERNAL_NEW_CONFIG := 1
endif
ifneq ($(KOKKOS_INTERNAL_NEW_CONFIG), 0)
tmp := $(shell cp KokkosCore_config.tmp KokkosCore_config.h)
endif
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/*.hpp)
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/impl/*.hpp)
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/containers/src/*.hpp)
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/containers/src/impl/*.hpp)
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/algorithms/src/*.hpp)
KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/impl/*.cpp)
KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/containers/src/impl/*.cpp)
ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1)
KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/Cuda/*.cpp)
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/Cuda/*.hpp)
KOKKOS_LDFLAGS += -L$(CUDA_PATH)/lib64
KOKKOS_LIBS += -lcudart -lcuda
endif
ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1)
KOKKOS_LIBS += -lpthread
KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/Threads/*.cpp)
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/Threads/*.hpp)
endif
ifeq ($(KOKKOS_INTERNAL_USE_QTHREAD), 1)
KOKKOS_LIBS += -lqthread
KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/Qthread/*.cpp)
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/Qthread/*.hpp)
endif
ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1)
KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/OpenMP/*.cpp)
KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/OpenMP/*.hpp)
ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1)
KOKKOS_CXXFLAGS += -Xcompiler $(KOKKOS_INTERNAL_OPENMP_FLAG)
else
KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_OPENMP_FLAG)
endif
KOKKOS_LDFLAGS += $(KOKKOS_INTERNAL_OPENMP_FLAG)
endif
#With Cygwin functions such as fdopen and fileno are not defined
#when strict ansi is enabled. strict ansi gets enabled with --std=c++11
#though. So we hard undefine it here. Not sure if that has any bad side effects
#This is needed for gtest actually, not for Kokkos itself!
ifeq ($(KOKKOS_INTERNAL_OS_CYGWIN), 1)
KOKKOS_CXXFLAGS += -U__STRICT_ANSI__
endif
# Setting up dependencies
KokkosCore_config.h:
KOKKOS_CPP_DEPENDS := KokkosCore_config.h $(KOKKOS_HEADERS)
KOKKOS_OBJ = $(KOKKOS_SRC:.cpp=.o)
KOKKOS_OBJ_LINK = $(notdir $(KOKKOS_OBJ))
include $(KOKKOS_PATH)/Makefile.targets
kokkos-clean:
rm -f $(KOKKOS_OBJ_LINK) KokkosCore_config.h KokkosCore_config.tmp libkokkos.a
libkokkos.a: $(KOKKOS_OBJ_LINK) $(KOKKOS_SRC) $(KOKKOS_HEADERS)
ar cr libkokkos.a $(KOKKOS_OBJ_LINK)
ranlib libkokkos.a
KOKKOS_LINK_DEPENDS=libkokkos.a
diff --git a/src/.gitignore b/src/.gitignore
index 29d2a547c..6e8f637d9 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -1,14 +1,1015 @@
-*~
-lammps.pdf
-*.o
-*.so
-*.cu_o
-*.ptx
-*_ptx.h
-*.a
-Obj_*
-log.*
-*.x
-*.exe
-.*.swp
-*.orig
+/Makefile.package
+/Makefile.package.settings
+/MAKE/MINE
+/Make.py.last
+/lmp_*
+
+/style_*.h
+
+/*_gpu.h
+/*_gpu.cpp
+/*_intel.h
+/*_intel.cpp
+/*_kokkos.h
+/*_kokkos.cpp
+/*_omp.h
+/*_omp.cpp
+/*_tally.h
+/*_tally.cpp
+/*_rx.h
+/*_rx.cpp
+
+/kokkos.cpp
+/kokkos.h
+/kokkos_type.h
+
+/manifold*.cpp
+/manifold*.h
+/fix_*manifold*.cpp
+/fix_*manifold*.h
+
+/fix_qeq*.cpp
+/fix_qeq*.h
+
+/compute_test_nbl.cpp
+/compute_test_nbl.h
+/pair_multi_lucy.cpp
+/pair_multi_lucy.h
+
+/colvarproxy_lammps.cpp
+/colvarproxy_lammps.h
+/fix_colvars.cpp
+/fix_colvars.h
+/dump_molfile.cpp
+/dump_molfile.h
+/molfile_interface.cpp
+/molfile_interface.h
+/molfile_plugin.h
+/vmdplugin.h
+/type_detector.h
+
+/intel_buffers.cpp
+/intel_buffers.h
+/intel_intrinsics.h
+/intel_preprocess.h
+/intel_simd.h
+
+/compute_sna_atom.cpp
+/compute_sna_atom.h
+/compute_snad_atom.cpp
+/compute_snad_atom.h
+/compute_snav_atom.cpp
+/compute_snav_atom.h
+/openmp_snap.h
+/pair_snap.cpp
+/pair_snap.h
+/sna.cpp
+/sna.h
+
+/atom_vec_wavepacket.cpp
+/atom_vec_wavepacket.h
+/fix_nve_awpmd.cpp
+/fix_nve_awpmd.h
+/pair_awpmd_cut.cpp
+/pair_awpmd_cut.h
+
+/angle_cg_cmm.cpp
+/angle_cg_cmm.h
+/angle_charmm.cpp
+/angle_charmm.h
+/angle_class2.cpp
+/angle_class2.h
+/angle_cosine.cpp
+/angle_cosine.h
+/angle_cosine_delta.cpp
+/angle_cosine_delta.h
+/angle_cosine_periodic.cpp
+/angle_cosine_periodic.h
+/angle_cosine_shift.cpp
+/angle_cosine_shift.h
+/angle_cosine_shift_exp.cpp
+/angle_cosine_shift_exp.h
+/angle_cosine_squared.cpp
+/angle_cosine_squared.h
+/angle_dipole.cpp
+/angle_dipole.h
+/angle_fourier.cpp
+/angle_fourier.h
+/angle_fourier_simple.cpp
+/angle_fourier_simple.h
+/angle_harmonic.cpp
+/angle_harmonic.h
+/angle_quartic.cpp
+/angle_quartic.h
+/angle_sdk.cpp
+/angle_sdk.h
+/angle_table.cpp
+/angle_table.h
+/atom_vec_angle.cpp
+/atom_vec_angle.h
+/atom_vec_bond.cpp
+/atom_vec_bond.h
+/atom_vec_colloid.cpp
+/atom_vec_colloid.h
+/atom_vec_dipole.cpp
+/atom_vec_dipole.h
+/atom_vec_dpd.cpp
+/atom_vec_dpd.h
+/atom_vec_electron.cpp
+/atom_vec_electron.h
+/atom_vec_ellipsoid.cpp
+/atom_vec_ellipsoid.h
+/atom_vec_full.cpp
+/atom_vec_full.h
+/atom_vec_full_hars.cpp
+/atom_vec_full_hars.h
+/atom_vec_granular.cpp
+/atom_vec_granular.h
+/atom_vec_meso.cpp
+/atom_vec_meso.h
+/atom_vec_molecular.cpp
+/atom_vec_molecular.h
+/atom_vec_peri.cpp
+/atom_vec_peri.h
+/atom_vec_template.cpp
+/atom_vec_template.h
+/body_nparticle.cpp
+/body_nparticle.h
+/bond_class2.cpp
+/bond_class2.h
+/bond_fene.cpp
+/bond_fene.h
+/bond_fene_expand.cpp
+/bond_fene_expand.h
+/bond_harmonic.cpp
+/bond_harmonic.h
+/bond_harmonic_shift.cpp
+/bond_harmonic_shift.h
+/bond_harmonic_shift_cut.cpp
+/bond_harmonic_shift_cut.h
+/bond_morse.cpp
+/bond_morse.h
+/bond_nonlinear.cpp
+/bond_nonlinear.h
+/bond_quartic.cpp
+/bond_quartic.h
+/bond_table.cpp
+/bond_table.h
+/cg_cmm_parms.cpp
+/cg_cmm_parms.h
+/commgrid.cpp
+/commgrid.h
+/compute_ackland_atom.cpp
+/compute_ackland_atom.h
+/compute_basal_atom.cpp
+/compute_basal_atom.h
+/compute_body_local.cpp
+/compute_body_local.h
+/compute_cna_atom2.cpp
+/compute_cna_atom2.h
+/compute_damage_atom.cpp
+/compute_damage_atom.h
+/compute_dilatation_atom.cpp
+/compute_dilatation_atom.h
+/compute_dpd.cpp
+/compute_dpd.h
+/compute_dpd_atom.cpp
+/compute_dpd_atom.h
+/compute_erotate_asphere.cpp
+/compute_erotate_asphere.h
+/compute_erotate_rigid.cpp
+/compute_erotate_rigid.h
+/compute_event_displace.cpp
+/compute_event_displace.h
+/compute_fep.cpp
+/compute_fep.h
+/compute_force_tally.cpp
+/compute_force_tally.h
+/compute_heat_flux_tally.cpp
+/compute_heat_flux_tally.h
+/compute_ke_atom_eff.cpp
+/compute_ke_atom_eff.h
+/compute_ke_eff.cpp
+/compute_ke_eff.h
+/compute_ke_rigid.cpp
+/compute_ke_rigid.h
+/compute_meso_e_atom.cpp
+/compute_meso_e_atom.h
+/compute_meso_rho_atom.cpp
+/compute_meso_rho_atom.h
+/compute_meso_t_atom.cpp
+/compute_meso_t_atom.h
+/compute_msd_nongauss.cpp
+/compute_msd_nongauss.h
+/compute_pe_tally.cpp
+/compute_pe_tally.h
+/compute_plasticity_atom.cpp
+/compute_plasticity_atom.h
+/compute_rigid_local.cpp
+/compute_rigid_local.h
+/compute_spec_atom.cpp
+/compute_spec_atom.h
+/compute_stress_tally.cpp
+/compute_stress_tally.h
+/compute_temp_asphere.cpp
+/compute_temp_asphere.h
+/compute_temp_body.cpp
+/compute_temp_body.h
+/compute_temp_deform_eff.cpp
+/compute_temp_deform_eff.h
+/compute_temp_eff.cpp
+/compute_temp_eff.h
+/compute_temp_region_eff.cpp
+/compute_temp_region_eff.h
+/compute_temp_rotate.cpp
+/compute_temp_rotate.h
+/compute_ti.cpp
+/compute_ti.h
+/compute_voronoi_atom.cpp
+/compute_voronoi_atom.h
+/dihedral_charmm.cpp
+/dihedral_charmm.h
+/dihedral_class2.cpp
+/dihedral_class2.h
+/dihedral_cosine_shift_exp.cpp
+/dihedral_cosine_shift_exp.h
+/dihedral_fourier.cpp
+/dihedral_fourier.h
+/dihedral_harmonic.cpp
+/dihedral_harmonic.h
+/dihedral_helix.cpp
+/dihedral_helix.h
+/dihedral_hybrid.cpp
+/dihedral_hybrid.h
+/dihedral_multi_harmonic.cpp
+/dihedral_multi_harmonic.h
+/dihedral_nharmonic.cpp
+/dihedral_nharmonic.h
+/dihedral_opls.cpp
+/dihedral_opls.h
+/dihedral_quadratic.cpp
+/dihedral_quadratic.h
+/dihedral_spherical.cpp
+/dihedral_spherical.h
+/dihedral_table.cpp
+/dihedral_table.h
+/dump_atom_gz.cpp
+/dump_atom_gz.h
+/dump_xyz_gz.cpp
+/dump_xyz_gz.h
+/dump_atom_mpiio.cpp
+/dump_atom_mpiio.h
+/dump_cfg_gz.cpp
+/dump_cfg_gz.h
+/dump_cfg_mpiio.cpp
+/dump_cfg_mpiio.h
+/dump_custom_gz.cpp
+/dump_custom_gz.h
+/dump_custom_mpiio.cpp
+/dump_custom_mpiio.h
+/dump_custom_vtk.cpp
+/dump_custom_vtk.h
+/dump_h5md.cpp
+/dump_h5md.h
+/dump_xtc.cpp
+/dump_xtc.h
+/dump_xyz_mpiio.cpp
+/dump_xyz_mpiio.h
+/ewald.cpp
+/ewald.h
+/ewald_cg.cpp
+/ewald_cg.h
+/ewald_disp.cpp
+/ewald_disp.h
+/ewald_n.cpp
+/ewald_n.h
+/fft3d.cpp
+/fft3d.h
+/fft3d_wrap.cpp
+/fft3d_wrap.h
+/fix_adapt_fep.cpp
+/fix_adapt_fep.h
+/fix_addtorque.cpp
+/fix_addtorque.h
+/fix_append_atoms.cpp
+/fix_append_atoms.h
+/fix_atc.cpp
+/fix_atc.h
+/fix_ave_correlate_long.cpp
+/fix_ave_correlate_long.h
+/fix_bond_break.cpp
+/fix_bond_break.h
+/fix_bond_create.cpp
+/fix_bond_create.h
+/fix_bond_swap.cpp
+/fix_bond_swap.h
+/fix_deposit.cpp
+/fix_deposit.h
+/fix_efield.cpp
+/fix_efield.h
+/fix_eos_cv.cpp
+/fix_eos_cv.h
+/fix_eos_table.cpp
+/fix_eos_table.h
+/fix_evaporate.cpp
+/fix_evaporate.h
+/fix_viscosity.cpp
+/fix_viscosity.h
+/fix_ehex.cpp
+/fix_ehex.h
+/fix_event.cpp
+/fix_event.h
+/fix_event_prd.cpp
+/fix_event_prd.h
+/fix_event_tad.cpp
+/fix_event_tad.h
+/fix_flow_gauss.cpp
+/fix_flow_gauss.h
+/fix_freeze.cpp
+/fix_freeze.h
+/fix_gcmc.cpp
+/fix_gcmc.h
+/fix_gld.cpp
+/fix_gld.h
+/fix_gle.cpp
+/fix_gle.h
+/fix_gpu.cpp
+/fix_gpu.h
+/fix_imd.cpp
+/fix_imd.h
+/fix_ipi.cpp
+/fix_ipi.h
+/fix_lambdah_calc.cpp
+/fix_lambdah_calc.h
+/fix_langevin_eff.cpp
+/fix_langevin_eff.h
+/fix_lb_fluid.cpp
+/fix_lb_fluid.h
+/fix_lb_momentum.cpp
+/fix_lb_momentum.h
+/fix_lb_pc.cpp
+/fix_lb_pc.h
+/fix_lb_rigid_pc_sphere.cpp
+/fix_lb_rigid_pc_sphere.h
+/fix_lb_viscous.cpp
+/fix_lb_viscous.h
+/fix_load_report.cpp
+/fix_load_report.h
+/fix_meso.cpp
+/fix_meso.h
+/fix_meso_stationary.cpp
+/fix_meso_stationary.h
+/fix_msst.cpp
+/fix_msst.h
+/fix_neb.cpp
+/fix_neb.h
+/fix_nh_asphere.cpp
+/fix_nh_asphere.h
+/fix_nph_asphere.cpp
+/fix_nph_asphere.h
+/fix_npt_asphere.cpp
+/fix_npt_asphere.h
+/fix_nve_asphere.cpp
+/fix_nve_asphere.h
+/fix_nve_asphere_noforce.cpp
+/fix_nve_asphere_noforce.h
+/fix_nh_body.cpp
+/fix_nh_body.h
+/fix_nph_body.cpp
+/fix_nph_body.h
+/fix_npt_body.cpp
+/fix_npt_body.h
+/fix_nvt_body.cpp
+/fix_nvt_body.h
+/fix_nve_body.cpp
+/fix_nve_body.h
+/fix_nvt_asphere.cpp
+/fix_nvt_asphere.h
+/fix_nh_eff.cpp
+/fix_nh_eff.h
+/fix_nph_eff.cpp
+/fix_nph_eff.h
+/fix_nphug.cpp
+/fix_nphug.h
+/fix_npt_eff.cpp
+/fix_npt_eff.h
+/fix_nve_eff.cpp
+/fix_nve_eff.h
+/fix_nve_line.cpp
+/fix_nve_line.h
+/fix_nvt_eff.cpp
+/fix_nvt_eff.h
+/fix_nvt_sllod_eff.cpp
+/fix_nvt_sllod_eff.h
+/fix_nve_tri.cpp
+/fix_nve_tri.h
+/fix_oneway.cpp
+/fix_oneway.h
+/fix_orient_bcc.cpp
+/fix_orient_bcc.h
+/fix_orient_fcc.cpp
+/fix_orient_fcc.h
+/fix_peri_neigh.cpp
+/fix_peri_neigh.h
+/fix_phonon.cpp
+/fix_phonon.h
+/fix_poems.cpp
+/fix_poems.h
+/fix_pour.cpp
+/fix_pour.h
+/fix_qeq_comb.cpp
+/fix_qeq_comb.h
+/fix_qeq_reax.cpp
+/fix_qeq_fire.cpp
+/fix_qeq_fire.h
+/fix_qeq_reax.h
+/fix_qmmm.cpp
+/fix_qmmm.h
+/fix_reax_bonds.cpp
+/fix_reax_bonds.h
+/fix_reax_c.cpp
+/fix_reax_c.h
+/fix_reaxc_bonds.cpp
+/fix_reaxc_bonds.h
+/fix_reaxc_species.cpp
+/fix_reaxc_species.h
+/fix_rigid.cpp
+/fix_rigid.h
+/fix_rigid_nh.cpp
+/fix_rigid_nh.h
+/fix_rigid_nph.cpp
+/fix_rigid_nph.h
+/fix_rigid_npt.cpp
+/fix_rigid_npt.h
+/fix_rigid_nve.cpp
+/fix_rigid_nve.h
+/fix_rigid_nvt.cpp
+/fix_rigid_nvt.h
+/fix_rigid_nh_small.cpp
+/fix_rigid_nh_small.h
+/fix_rigid_nph_small.cpp
+/fix_rigid_nph_small.h
+/fix_rigid_npt_small.cpp
+/fix_rigid_npt_small.h
+/fix_rigid_nve_small.cpp
+/fix_rigid_nve_small.h
+/fix_rigid_nvt_small.cpp
+/fix_rigid_nvt_small.h
+/fix_rigid_small.cpp
+/fix_rigid_small.h
+/fix_shake.cpp
+/fix_shake.h
+/fix_shardlow.cpp
+/fix_shardlow.h
+/fix_smd.cpp
+/fix_smd.h
+/fix_species.cpp
+/fix_species.h
+/fix_spring_pull.cpp
+/fix_spring_pull.h
+/fix_srd.cpp
+/fix_srd.h
+/fix_temp_rescale_eff.cpp
+/fix_temp_rescale_eff.h
+/fix_thermal_conductivity.cpp
+/fix_thermal_conductivity.h
+/fix_ti_rs.cpp
+/fix_ti_rs.h
+/fix_ti_spring.cpp
+/fix_ti_spring.h
+/fix_ttm.cpp
+/fix_ttm.h
+/fix_tune_kspace.cpp
+/fix_tune_kspace.h
+/fix_wall_colloid.cpp
+/fix_wall_colloid.h
+/fix_wall_gran.cpp
+/fix_wall_gran.h
+/fix_wall_piston.cpp
+/fix_wall_piston.h
+/fix_wall_srd.cpp
+/fix_wall_srd.h
+/gpu_extra.h
+/gridcomm.cpp
+/gridcomm.h
+/group_ndx.cpp
+/group_ndx.h
+/ndx_group.cpp
+/ndx_group.h
+/improper_class2.cpp
+/improper_class2.h
+/improper_cossq.cpp
+/improper_cossq.h
+/improper_cvff.cpp
+/improper_cvff.h
+/improper_distance.cpp
+/improper_distance.h
+/improper_fourier.cpp
+/improper_fourier.h
+/improper_harmonic.cpp
+/improper_harmonic.h
+/improper_hybrid.cpp
+/improper_hybrid.h
+/improper_ring.cpp
+/improper_ring.h
+/improper_umbrella.cpp
+/improper_umbrella.h
+/kissfft.h
+/lj_sdk_common.h
+/math_complex.h
+/math_vector.h
+/mgpt_*.cpp
+/mgpt_*.h
+/msm.cpp
+/msm.h
+/msm_cg.cpp
+/msm_cg.h
+/neb.cpp
+/neb.h
+
+/pair_adp.cpp
+/pair_adp.h
+/pair_airebo.cpp
+/pair_airebo.h
+/pair_airebo_morse.cpp
+/pair_airebo_morse.h
+/pair_body.cpp
+/pair_body.h
+/pair_bop.cpp
+/pair_bop.h
+/pair_born_coul_long.cpp
+/pair_born_coul_long.h
+/pair_born_coul_msm.cpp
+/pair_born_coul_msm.h
+/pair_brownian.cpp
+/pair_brownian.h
+/pair_brownian_poly.cpp
+/pair_brownian_poly.h
+/pair_buck_coul_long.cpp
+/pair_buck_coul_long.h
+/pair_buck_coul_msm.cpp
+/pair_buck_coul_msm.h
+/pair_buck_coul.cpp
+/pair_buck_coul.h
+/pair_buck_long_coul_long.cpp
+/pair_buck_long_coul_long.h
+/pair_cdeam.cpp
+/pair_cdeam.h
+/pair_cg_cmm.cpp
+/pair_cg_cmm.h
+/pair_cg_cmm_coul_cut.cpp
+/pair_cg_cmm_coul_cut.h
+/pair_cg_cmm_coul_long.cpp
+/pair_cg_cmm_coul_long.h
+/pair_cmm_common.cpp
+/pair_cmm_common.h
+/pair_cg_cmm_coul_msm.cpp
+/pair_cg_cmm_coul_msm.h
+/pair_comb.cpp
+/pair_comb.h
+/pair_comb3.cpp
+/pair_comb3.h
+/pair_colloid.cpp
+/pair_colloid.h
+/pair_coul_diel.cpp
+/pair_coul_diel.h
+/pair_coul_long.cpp
+/pair_coul_long.h
+/pair_coul_msm.cpp
+/pair_coul_msm.h
+/pair_dipole_cut.cpp
+/pair_dipole_cut.h
+/pair_dipole_sf.cpp
+/pair_dipole_sf.h
+/pair_dpd_mt.cpp
+/pair_dpd_mt.h
+/pair_dsmc.cpp
+/pair_dsmc.h
+/pair_eam.cpp
+/pair_eam.h
+/pair_eam_opt.cpp
+/pair_eam_opt.h
+/pair_eam_alloy.cpp
+/pair_eam_alloy.h
+/pair_eam_alloy_opt.cpp
+/pair_eam_alloy_opt.h
+/pair_eam_fs.cpp
+/pair_eam_fs.h
+/pair_eam_fs_opt.cpp
+/pair_eam_fs_opt.h
+/pair_edip.cpp
+/pair_edip.h
+/pair_eff_cut.cpp
+/pair_eff_cut.h
+/pair_eff_inline.h
+/pair_eim.cpp
+/pair_eim.h
+/pair_gauss_cut.cpp
+/pair_gauss_cut.h
+/pair_gayberne.cpp
+/pair_gayberne.h
+/pair_gran_easy.cpp
+/pair_gran_easy.h
+/pair_gran_hertz_history.cpp
+/pair_gran_hertz_history.h
+/pair_gran_hooke.cpp
+/pair_gran_hooke.h
+/pair_gran_hooke_history.cpp
+/pair_gran_hooke_history.h
+/pair_gw.cpp
+/pair_gw.h
+/pair_gw_zbl.cpp
+/pair_gw_zbl.h
+/pair_hbond_dreiding_lj.cpp
+/pair_hbond_dreiding_lj.h
+/pair_hbond_dreiding_morse.cpp
+/pair_hbond_dreiding_morse.h
+/pair_lcbop.cpp
+/pair_lcbop.h
+/pair_line_lj.cpp
+/pair_line_lj.h
+/pair_list.cpp
+/pair_list.h
+/pair_lj_charmm_coul_charmm.cpp
+/pair_lj_charmm_coul_charmm.h
+/pair_lj_charmm_coul_charmm_implicit.cpp
+/pair_lj_charmm_coul_charmm_implicit.h
+/pair_lj_charmm_coul_long.cpp
+/pair_lj_charmm_coul_long.h
+/pair_lj_charmm_coul_long_opt.cpp
+/pair_lj_charmm_coul_long_opt.h
+/pair_lj_charmm_coul_long_soft.cpp
+/pair_lj_charmm_coul_long_soft.h
+/pair_lj_charmm_coul_msm.cpp
+/pair_lj_charmm_coul_msm.h
+/pair_lj_class2.cpp
+/pair_lj_class2.h
+/pair_lj_class2_coul_cut.cpp
+/pair_lj_class2_coul_cut.h
+/pair_lj_class2_coul_long.cpp
+/pair_lj_class2_coul_long.h
+/pair_lj_coul.cpp
+/pair_lj_coul.h
+/pair_coul_cut_soft.cpp
+/pair_coul_cut_soft.h
+/pair_coul_long_soft.cpp
+/pair_coul_long_soft.h
+/pair_lj_cut_coul_cut_soft.cpp
+/pair_lj_cut_coul_cut_soft.h
+/pair_lj_cut_tip4p_cut.cpp
+/pair_lj_cut_tip4p_cut.h
+/pair_lj_cut_coul_long.cpp
+/pair_lj_cut_coul_long.h
+/pair_lj_cut_coul_long_opt.cpp
+/pair_lj_cut_coul_long_opt.h
+/pair_lj_cut_coul_long_soft.cpp
+/pair_lj_cut_coul_long_soft.h
+/pair_lj_cut_coul_msm.cpp
+/pair_lj_cut_coul_msm.h
+/pair_lj_cut_dipole_cut.cpp
+/pair_lj_cut_dipole_cut.h
+/pair_lj_cut_dipole_long.cpp
+/pair_lj_cut_dipole_long.h
+/pair_lj_cut_*hars_*.cpp
+/pair_lj_cut_*hars_*.h
+/pair_lj_cut_soft.cpp
+/pair_lj_cut_soft.h
+/pair_lj_cut_tip4p_long.cpp
+/pair_lj_cut_tip4p_long.h
+/pair_lj_cut_tip4p_long_opt.cpp
+/pair_lj_cut_tip4p_long_opt.h
+/pair_lj_cut_tip4p_long_soft.cpp
+/pair_lj_cut_tip4p_long_soft.h
+/pair_lj_long_coul_long.cpp
+/pair_lj_long_coul_long.h
+/pair_lj_long_coul_long_opt.cpp
+/pair_lj_long_coul_long_opt.h
+/pair_lj_long_dipole_long.cpp
+/pair_lj_long_dipole_long.h
+/pair_lj_long_tip4p_long.cpp
+/pair_lj_long_tip4p_long.h
+/pair_lj_cut_opt.cpp
+/pair_lj_cut_opt.h
+/pair_lj_cut_tgpu.cpp
+/pair_lj_cut_tgpu.h
+/pair_lj_sdk.cpp
+/pair_lj_sdk.h
+/pair_lj_sdk_coul_long.cpp
+/pair_lj_sdk_coul_long.h
+/pair_lj_sdk_coul_msm.cpp
+/pair_lj_sdk_coul_msm.h
+/pair_lj_sf.cpp
+/pair_lj_sf.h
+/pair_lj_sf_dipole_sf.cpp
+/pair_lj_sf_dipole_sf.h
+/pair_lubricateU.cpp
+/pair_lubricateU.h
+/pair_lubricateU_poly.cpp
+/pair_lubricateU_poly.h
+/pair_lubricate_poly.cpp
+/pair_lubricate_poly.h
+/pair_lubricate.cpp
+/pair_lubricate.h
+/pair_meam.cpp
+/pair_meam.h
+/pair_meam_spline.cpp
+/pair_meam_spline.h
+/pair_meam_sw_spline.cpp
+/pair_meam_sw_spline.h
+/pair_morse_opt.cpp
+/pair_morse_opt.h
+/pair_morse_soft.cpp
+/pair_morse_soft.h
+/pair_nb3b_harmonic.cpp
+/pair_nb3b_harmonic.h
+/pair_nm_cut.cpp
+/pair_nm_cut.h
+/pair_nm_cut_coul_cut.cpp
+/pair_nm_cut_coul_cut.h
+/pair_nm_cut_coul_long.cpp
+/pair_nm_cut_coul_long.h
+/pair_peri_eps.cpp
+/pair_peri_eps.h
+/pair_peri_lps.cpp
+/pair_peri_lps.h
+/pair_peri_pmb.cpp
+/pair_peri_pmb.h
+/pair_peri_ves.cpp
+/pair_peri_ves.h
+/pair_reax.cpp
+/pair_reax.h
+/pair_reax_fortran.h
+/pair_reax_c.cpp
+/pair_reax_c.h
+/pair_rebo.cpp
+/pair_rebo.h
+/pair_resquared.cpp
+/pair_resquared.h
+/pair_sph_heatconduction.cpp
+/pair_sph_heatconduction.h
+/pair_sph_idealgas.cpp
+/pair_sph_idealgas.h
+/pair_sph_lj.cpp
+/pair_sph_lj.h
+/pair_sph_rhosum.cpp
+/pair_sph_rhosum.h
+/pair_sph_taitwater.cpp
+/pair_sph_taitwater.h
+/pair_sph_taitwater_morris.cpp
+/pair_sph_taitwater_morris.h
+/pair_sw.cpp
+/pair_sw.h
+/pair_tersoff.cpp
+/pair_tersoff.h
+/pair_tersoff_mod.cpp
+/pair_tersoff_mod.h
+/pair_tersoff_table.cpp
+/pair_tersoff_table.h
+/pair_tersoff_zbl.cpp
+/pair_tersoff_zbl.h
+/pair_tip4p_cut.cpp
+/pair_tip4p_cut.h
+/pair_tip4p_long.cpp
+/pair_tip4p_long.h
+/pair_tip4p_long_soft.cpp
+/pair_tip4p_long_soft.h
+/pair_tri_lj.cpp
+/pair_tri_lj.h
+/pair_yukawa_colloid.cpp
+/pair_yukawa_colloid.h
+/pppm.cpp
+/pppm.h
+/pppm_cg.cpp
+/pppm_cg.h
+/pppm_disp.cpp
+/pppm_disp.h
+/pppm_disp_tip4p.cpp
+/pppm_disp_tip4p.h
+/pppm_old.cpp
+/pppm_old.h
+/pppm_proxy.cpp
+/pppm_proxy.h
+/pppm_stagger.cpp
+/pppm_stagger.h
+/pppm_tip4p.cpp
+/pppm_tip4p.h
+/pppm_tip4p_proxy.cpp
+/pppm_tip4p_proxy.h
+/pppm_tip4p_cg.cpp
+/pppm_tip4p_cg.h
+/prd.cpp
+/prd.h
+/python.cpp
+/python.h
+/reader_molfile.cpp
+/reader_molfile.h
+/reaxc_allocate.cpp
+/reaxc_allocate.h
+/reaxc_basic_comm.cpp
+/reaxc_basic_comm.h
+/reaxc_bond_orders.cpp
+/reaxc_bond_orders.h
+/reaxc_bonds.cpp
+/reaxc_bonds.h
+/reaxc_control.cpp
+/reaxc_control.h
+/reaxc_defs.h
+/reaxc_ffield.cpp
+/reaxc_ffield.h
+/reaxc_forces.cpp
+/reaxc_forces.h
+/reaxc_hydrogen_bonds.cpp
+/reaxc_hydrogen_bonds.h
+/reaxc_init_md.cpp
+/reaxc_init_md.h
+/reaxc_io_tools.cpp
+/reaxc_io_tools.h
+/reaxc_list.cpp
+/reaxc_list.h
+/reaxc_lookup.cpp
+/reaxc_lookup.h
+/reaxc_multi_body.cpp
+/reaxc_multi_body.h
+/reaxc_nonbonded.cpp
+/reaxc_nonbonded.h
+/reaxc_reset_tools.cpp
+/reaxc_reset_tools.h
+/reaxc_system_props.cpp
+/reaxc_system_props.h
+/reaxc_tool_box.cpp
+/reaxc_tool_box.h
+/reaxc_torsion_angles.cpp
+/reaxc_torsion_angles.h
+/reaxc_traj.cpp
+/reaxc_traj.h
+/reaxc_types.h
+/reaxc_valence_angles.cpp
+/reaxc_valence_angles.h
+/reaxc_vector.cpp
+/reaxc_vector.h
+/remap.cpp
+/remap.h
+/remap_wrap.cpp
+/remap_wrap.h
+/restart_mpiio.cpp
+/restart_mpiio.h
+/smd_kernels.h
+/smd_material_models.cpp
+/smd_material_models.h
+/smd_math.h
+/tad.cpp
+/tad.h
+/temper.cpp
+/temper.h
+/thr_data.cpp
+/thr_data.h
+/verlet_split.cpp
+/verlet_split.h
+/write_dump.cpp
+/write_dump.h
+/xdr_compat.cpp
+/xdr_compat.h
+
+/atom_vec_smd.cpp
+/atom_vec_smd.h
+/compute_saed.cpp
+/compute_saed.h
+/compute_saed_consts.h
+/compute_smd_contact_radius.cpp
+/compute_smd_contact_radius.h
+/compute_smd_damage.cpp
+/compute_smd_damage.h
+/compute_smd_hourglass_error.cpp
+/compute_smd_hourglass_error.h
+/compute_smd_internal_energy.cpp
+/compute_smd_internal_energy.h
+/compute_smd_plastic_strain.cpp
+/compute_smd_plastic_strain.h
+/compute_smd_plastic_strain_rate.cpp
+/compute_smd_plastic_strain_rate.h
+/compute_smd_rho.cpp
+/compute_smd_rho.h
+/compute_smd_tlsph_defgrad.cpp
+/compute_smd_tlsph_defgrad.h
+/compute_smd_tlsph_dt.cpp
+/compute_smd_tlsph_dt.h
+/compute_smd_tlsph_num_neighs.cpp
+/compute_smd_tlsph_num_neighs.h
+/compute_smd_tlsph_shape.cpp
+/compute_smd_tlsph_shape.h
+/compute_smd_tlsph_strain.cpp
+/compute_smd_tlsph_strain.h
+/compute_smd_tlsph_strain_rate.cpp
+/compute_smd_tlsph_strain_rate.h
+/compute_smd_tlsph_stress.cpp
+/compute_smd_tlsph_stress.h
+/compute_smd_triangle_mesh_vertices.cpp
+/compute_smd_triangle_mesh_vertices.h
+/compute_smd_ulsph_effm.cpp
+/compute_smd_ulsph_effm.h
+/compute_smd_ulsph_num_neighs.cpp
+/compute_smd_ulsph_num_neighs.h
+/compute_smd_ulsph_strain.cpp
+/compute_smd_ulsph_strain.h
+/compute_smd_ulsph_strain_rate.cpp
+/compute_smd_ulsph_strain_rate.h
+/compute_smd_ulsph_stress.cpp
+/compute_smd_ulsph_stress.h
+/compute_smd_vol.cpp
+/compute_smd_vol.h
+/compute_temp_cs.cpp
+/compute_temp_cs.h
+/compute_temp_drude.cpp
+/compute_temp_drude.h
+/compute_xrd.cpp
+/compute_xrd.h
+/compute_xrd_consts.h
+/fix_atom_swap.cpp
+/fix_atom_swap.h
+/fix_ave_spatial_sphere.cpp
+/fix_ave_spatial_sphere.h
+/fix_drude.cpp
+/fix_drude.h
+/fix_drude_transform.cpp
+/fix_drude_transform.h
+/fix_langevin_drude.cpp
+/fix_langevin_drude.h
+/fix_pimd.cpp
+/fix_pimd.h
+/fix_qbmsst.cpp
+/fix_qbmsst.h
+/fix_qtb.cpp
+/fix_qtb.h
+/fix_rattle.cpp
+/fix_rattle.h
+/fix_saed_vtk.cpp
+/fix_saed_vtk.h
+/fix_smd_adjust_dt.cpp
+/fix_smd_adjust_dt.h
+/fix_smd_integrate_tlsph.cpp
+/fix_smd_integrate_tlsph.h
+/fix_smd_integrate_ulsph.cpp
+/fix_smd_integrate_ulsph.h
+/fix_smd_move_triangulated_surface.cpp
+/fix_smd_move_triangulated_surface.h
+/fix_smd_setvel.cpp
+/fix_smd_setvel.h
+/fix_smd_tlsph_reference_configuration.cpp
+/fix_smd_tlsph_reference_configuration.h
+/fix_smd_wall_surface.cpp
+/fix_smd_wall_surface.h
+/fix_srp.cpp
+/fix_srp.h
+/fix_tfmc.cpp
+/fix_tfmc.h
+/fix_ttm_mod.cpp
+/fix_ttm_mod.h
+/pair_born_coul_long_cs.cpp
+/pair_born_coul_long_cs.h
+/pair_buck_coul_long_cs.cpp
+/pair_buck_coul_long_cs.h
+/pair_coul_long_cs.cpp
+/pair_coul_long_cs.h
+/pair_lj_cut_thole_long.cpp
+/pair_lj_cut_thole_long.h
+/pair_plum_hb.cpp
+/pair_plum_hb.h
+/pair_plum_hp.cpp
+/pair_plum_hp.h
+/pair_polymorphic.cpp
+/pair_polymorphic.h
+/pair_smd_hertz.cpp
+/pair_smd_hertz.h
+/pair_smd_tlsph.cpp
+/pair_smd_tlsph.h
+/pair_smd_triangulated_surface.cpp
+/pair_smd_triangulated_surface.h
+/pair_smd_ulsph.cpp
+/pair_smd_ulsph.h
+/pair_srp.cpp
+/pair_srp.h
+/pair_thole.cpp
+/pair_thole.h
+/pair_buck_mdf.cpp
+/pair_buck_mdf.h
+/pair_dpd_conservative.cpp
+/pair_dpd_conservative.h
+/pair_dpd_fdt.cpp
+/pair_dpd_fdt.h
+/pair_dpd_fdt_energy.cpp
+/pair_dpd_fdt_energy.h
+/pair_lennard_mdf.cpp
+/pair_lennard_mdf.h
+/pair_lj_cut_coul_long_cs.cpp
+/pair_lj_cut_coul_long_cs.h
+/pair_lj_mdf.cpp
+/pair_lj_mdf.h
+/pair_mgpt.cpp
+/pair_mgpt.h
+/pair_morse_smooth_linear.cpp
+/pair_morse_smooth_linear.h
+/pair_smtbq.cpp
+/pair_smtbq.h
+/pair_vashishta.cpp
+/pair_vashishta.h
+
diff --git a/src/COMPRESS/Install.sh b/src/COMPRESS/Install.sh
index 49bc09f70..ef1c8920c 100644
--- a/src/COMPRESS/Install.sh
+++ b/src/COMPRESS/Install.sh
@@ -1,60 +1,64 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*compress[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(compress_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(compress_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(compress_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*compress.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/compress\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*compress[^ \t]* //' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*compress.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/CORESHELL/Install.sh b/src/CORESHELL/Install.sh
index 871a78ca8..f5ea54ac8 100644
--- a/src/CORESHELL/Install.sh
+++ b/src/CORESHELL/Install.sh
@@ -1,36 +1,40 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# list of files with optional dependencies
action compute_temp_cs.cpp
action compute_temp_cs.h
action pair_born_coul_long_cs.cpp pair_born_coul_long.cpp
action pair_buck_coul_long_cs.cpp pair_buck_coul_long.cpp
action pair_born_coul_long_cs.h pair_born_coul_long.h
action pair_buck_coul_long_cs.h pair_buck_coul_long.h
action pair_coul_long_cs.cpp pair_coul_long.cpp
action pair_coul_long_cs.h pair_coul_long.h
action pair_lj_cut_coul_long_cs.cpp pair_lj_cut_coul_long.cpp
action pair_lj_cut_coul_long_cs.h pair_lj_cut_coul_long.h
diff --git a/src/Depend.sh b/src/Depend.sh
index 698c16523..7eb485cb1 100644
--- a/src/Depend.sh
+++ b/src/Depend.sh
@@ -1,122 +1,126 @@
# Depend.sh = Install/unInstall files due to package dependencies
# this script is invoked after any package is installed/uninstalled
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# all parent/child package dependencies should be listed below
# parent package = has files that files in another package derive from
# child package = has files that derive from files in another package
# update child packages that depend on the parent,
# but only if the child package is already installed
# this is necessary to insure the child package installs
# only child files whose parent package files are now installed
# decisions on (un)installing individual child files are made by
# the Install.sh script in the child package
# depend function: arg = child-package
# checks if child-package is installed, if not just return
# otherwise invoke update of child package via its Install.sh
depend () {
cd $1
installed=0
for file in *.cpp *.h; do
if (test -e ../$file) then
installed=1
fi
done
cd ..
if (test $installed = 0) then
return
fi
echo " updating package $1"
if (test -e $1/Install.sh) then
cd $1; /bin/sh Install.sh 2; cd ..
else
cd $1; /bin/sh ../Install.sh 2; cd ..
fi
}
# add one if statement per parent package
# add one depend() call per child package that depends on that parent
if (test $1 = "ASPHERE") then
depend GPU
depend USER-OMP
depend USER-INTEL
fi
if (test $1 = "CLASS2") then
depend GPU
depend USER-OMP
fi
if (test $1 = "COLLOID") then
depend GPU
depend USER-OMP
fi
if (test $1 = "DIPOLE") then
depend USER-MISC
depend USER-OMP
fi
if (test $1 = "GRANULAR") then
depend USER-OMP
fi
if (test $1 = "KSPACE") then
depend CORESHELL
depend GPU
depend KOKKOS
depend OPT
depend USER-OMP
depend USER-INTEL
depend USER-PHONON
depend USER-FEP
fi
if (test $1 = "MANYBODY") then
depend GPU
depend KOKKOS
depend OPT
depend USER-MISC
depend USER-OMP
fi
if (test $1 = "MOLECULE") then
depend GPU
depend KOKKOS
depend USER-MISC
depend USER-OMP
depend USER-FEP
depend USER-INTEL
fi
if (test $1 = "PERI") then
depend USER-OMP
fi
if (test $1 = "RIGID") then
depend USER-OMP
fi
if (test $1 = "USER-CG-CMM") then
depend GPU
depend KOKKOS
depend USER-OMP
fi
if (test $1 = "USER-FEP") then
depend USER-OMP
fi
if (test $1 = "USER-MISC") then
depend GPU
depend USER-OMP
fi
if (test $1 = "USER-REAXC") then
depend KOKKOS
fi
diff --git a/src/GPU/Install.sh b/src/GPU/Install.sh
index 0ff436e95..ca73adbf8 100644
--- a/src/GPU/Install.sh
+++ b/src/GPU/Install.sh
@@ -1,160 +1,164 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# list of files with optional dependcies
action fix_gpu.cpp
action fix_gpu.h
action gpu_extra.h
action pair_beck_gpu.cpp
action pair_beck_gpu.h
action pair_born_coul_long_gpu.cpp pair_born_coul_long.cpp
action pair_born_coul_long_gpu.h pair_born_coul_long.cpp
action pair_born_coul_wolf_gpu.cpp
action pair_born_coul_wolf_gpu.h
action pair_born_gpu.cpp
action pair_born_gpu.h
action pair_buck_coul_cut_gpu.cpp pair_buck_coul_cut.cpp
action pair_buck_coul_cut_gpu.h pair_buck_coul_cut.cpp
action pair_buck_coul_long_gpu.cpp pair_buck_coul_long.cpp
action pair_buck_coul_long_gpu.h pair_buck_coul_long.cpp
action pair_buck_gpu.cpp pair_buck.cpp
action pair_buck_gpu.h pair_buck.cpp
action pair_colloid_gpu.cpp pair_colloid.cpp
action pair_colloid_gpu.h pair_colloid.cpp
action pair_coul_cut_gpu.cpp
action pair_coul_cut_gpu.h
action pair_coul_debye_gpu.cpp
action pair_coul_debye_gpu.h
action pair_coul_dsf_gpu.cpp
action pair_coul_dsf_gpu.h
action pair_coul_long_gpu.cpp pair_coul_long.cpp
action pair_coul_long_gpu.h pair_coul_long.cpp
action pair_dpd_gpu.cpp
action pair_dpd_gpu.h
action pair_dpd_tstat_gpu.cpp
action pair_dpd_tstat_gpu.h
action pair_lj_cut_dipole_cut_gpu.cpp pair_lj_cut_dipole_cut.cpp
action pair_lj_cut_dipole_cut_gpu.h pair_lj_cut_dipole_cut.cpp
action pair_lj_sf_dipole_sf_gpu.cpp pair_lj_sf_dipole_sf.cpp
action pair_lj_sf_dipole_sf_gpu.h pair_lj_sf_dipole_sf.cpp
action pair_eam_alloy_gpu.cpp pair_eam.cpp
action pair_eam_alloy_gpu.h pair_eam.cpp
action pair_eam_fs_gpu.cpp pair_eam.cpp
action pair_eam_fs_gpu.h pair_eam.cpp
action pair_eam_gpu.cpp pair_eam.cpp
action pair_eam_gpu.h pair_eam.cpp
action pair_gauss_gpu.cpp
action pair_gauss_gpu.h
action pair_gayberne_gpu.cpp pair_gayberne.cpp
action pair_gayberne_gpu.h pair_gayberne.cpp
action pair_lj96_cut_gpu.cpp
action pair_lj96_cut_gpu.h
action pair_lj_charmm_coul_long_gpu.cpp pair_lj_charmm_coul_long.cpp
action pair_lj_charmm_coul_long_gpu.h pair_lj_charmm_coul_long.cpp
action pair_lj_class2_coul_long_gpu.cpp pair_lj_class2_coul_long.cpp
action pair_lj_class2_coul_long_gpu.h pair_lj_class2_coul_long.cpp
action pair_lj_class2_gpu.cpp pair_lj_class2.cpp
action pair_lj_class2_gpu.h pair_lj_class2.cpp
action pair_lj_cubic_gpu.cpp
action pair_lj_cubic_gpu.h
action pair_lj_cut_coul_cut_gpu.cpp
action pair_lj_cut_coul_cut_gpu.h
action pair_lj_cut_coul_debye_gpu.cpp
action pair_lj_cut_coul_debye_gpu.h
action pair_lj_cut_coul_dsf_gpu.cpp
action pair_lj_cut_coul_dsf_gpu.h
action pair_lj_cut_coul_long_gpu.cpp pair_lj_cut_coul_long.cpp
action pair_lj_cut_coul_long_gpu.h pair_lj_cut_coul_long.cpp
action pair_lj_cut_coul_msm_gpu.cpp pair_lj_cut_coul_msm.cpp
action pair_lj_cut_coul_msm_gpu.h pair_lj_cut_coul_msm.h
action pair_lj_cut_gpu.cpp
action pair_lj_cut_gpu.h
action pair_lj_expand_gpu.cpp
action pair_lj_expand_gpu.h
action pair_lj_gromacs_gpu.cpp
action pair_lj_gromacs_gpu.h
action pair_lj_sdk_coul_long_gpu.cpp pair_lj_sdk_coul_long.cpp
action pair_lj_sdk_coul_long_gpu.h pair_lj_sdk_coul_long.cpp
action pair_lj_sdk_gpu.cpp pair_lj_sdk.cpp
action pair_lj_sdk_gpu.h pair_lj_sdk.cpp
action pair_mie_cut_gpu.cpp
action pair_mie_cut_gpu.h
action pair_morse_gpu.cpp
action pair_morse_gpu.h
action pair_resquared_gpu.cpp pair_resquared.cpp
action pair_resquared_gpu.h pair_resquared.cpp
action pair_soft_gpu.cpp
action pair_soft_gpu.h
action pair_sw_gpu.cpp pair_sw.cpp
action pair_sw_gpu.h pair_sw.h
action pair_table_gpu.cpp pair_table.cpp
action pair_table_gpu.h pair_table.cpp
action pair_tersoff_gpu.cpp pair_tersoff.cpp
action pair_tersoff_gpu.h pair_tersoff.cpp
action pair_tersoff_mod_gpu.cpp pair_tersoff_mod.cpp
action pair_tersoff_mod_gpu.h pair_tersoff_mod.cpp
action pair_tersoff_zbl_gpu.cpp pair_tersoff_zbl.cpp
action pair_tersoff_zbl_gpu.h pair_tersoff_zbl.cpp
action pair_yukawa_colloid_gpu.cpp pair_yukawa_colloid.cpp
action pair_yukawa_colloid_gpu.h pair_yukawa_colloid.cpp
action pair_yukawa_gpu.cpp pair_yukawa.cpp
action pair_yukawa_gpu.h pair_yukawa.cpp
action pair_zbl_gpu.cpp
action pair_zbl_gpu.h
action pppm_gpu.cpp pppm.cpp
action pppm_gpu.h pppm.cpp
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*gpu[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/gpu |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&-lgpu |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(gpu_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(gpu_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(gpu_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*gpu.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/gpu\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*gpu[^ \t]* //' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*gpu.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/Install.sh b/src/Install.sh
index 322631fce..307188a09 100644
--- a/src/Install.sh
+++ b/src/Install.sh
@@ -1,33 +1,37 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
# this is default Install.sh for all packages
# if package has an auxiliary library or a file with a dependency,
# then package dir has its own customized Install.sh
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
diff --git a/src/KIM/Install.sh b/src/KIM/Install.sh
index 128cf1585..bac9d97cc 100644
--- a/src/KIM/Install.sh
+++ b/src/KIM/Install.sh
@@ -1,60 +1,64 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*kim[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(kim_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(kim_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(kim_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*kim.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/kim\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*kim[^ \t]* //' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*kim.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/KOKKOS/Install.sh b/src/KOKKOS/Install.sh
index c8c14b7bf..c269de41d 100644
--- a/src/KOKKOS/Install.sh
+++ b/src/KOKKOS/Install.sh
@@ -1,216 +1,224 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# force rebuild of files with LMP_KOKKOS switch
touch ../accelerator_kokkos.h
touch ../memory.h
# list of files with optional dependcies
action angle_charmm_kokkos.cpp angle_charmm.cpp
action angle_charmm_kokkos.h angle_charmm.h
action angle_harmonic_kokkos.cpp angle_harmonic.cpp
action angle_harmonic_kokkos.h angle_harmonic.h
action atom_kokkos.cpp
action atom_kokkos.h
action atom_vec_angle_kokkos.cpp atom_vec_angle.cpp
action atom_vec_angle_kokkos.h atom_vec_angle.h
action atom_vec_atomic_kokkos.cpp
action atom_vec_atomic_kokkos.h
action atom_vec_bond_kokkos.cpp atom_vec_bond.cpp
action atom_vec_bond_kokkos.h atom_vec_bond.h
action atom_vec_charge_kokkos.cpp
action atom_vec_charge_kokkos.h
action atom_vec_full_kokkos.cpp atom_vec_full.cpp
action atom_vec_full_kokkos.h atom_vec_full.h
action atom_vec_kokkos.cpp
action atom_vec_kokkos.h
action atom_vec_molecular_kokkos.cpp atom_vec_molecular.cpp
action atom_vec_molecular_kokkos.h atom_vec_molecular.h
action bond_fene_kokkos.cpp bond_fene.cpp
action bond_fene_kokkos.h bond_fene.h
action bond_harmonic_kokkos.cpp bond_harmonic.cpp
action bond_harmonic_kokkos.h bond_harmonic.h
action comm_kokkos.cpp
action comm_kokkos.h
action compute_temp_kokkos.cpp
action compute_temp_kokkos.h
action dihedral_charmm_kokkos.cpp dihedral_charmm.cpp
action dihedral_charmm_kokkos.h dihedral_charmm.h
action dihedral_opls_kokkos.cpp dihedral_opls.cpp
action dihedral_opls_kokkos.h dihedral_opls.h
action domain_kokkos.cpp
action domain_kokkos.h
action fix_deform_kokkos.cpp
action fix_deform_kokkos.h
action fix_langevin_kokkos.cpp
action fix_langevin_kokkos.h
action fix_nh_kokkos.cpp
action fix_nh_kokkos.h
action fix_nph_kokkos.cpp
action fix_nph_kokkos.h
action fix_npt_kokkos.cpp
action fix_npt_kokkos.h
action fix_nve_kokkos.cpp
action fix_nve_kokkos.h
action fix_nvt_kokkos.cpp
action fix_nvt_kokkos.h
action fix_qeq_reax_kokkos.cpp fix_qeq_reax.cpp
action fix_qeq_reax_kokkos.h fix_qeq_reax.h
action fix_setforce_kokkos.cpp
action fix_setforce_kokkos.h
action fix_wall_reflect_kokkos.cpp
action fix_wall_reflect_kokkos.h
action improper_harmonic_kokkos.cpp improper_harmonic.cpp
action improper_harmonic_kokkos.h improper_harmonic.h
action kokkos.cpp
action kokkos.h
action kokkos_type.h
action memory_kokkos.h
action modify_kokkos.cpp
action modify_kokkos.h
action neigh_bond_kokkos.cpp
action neigh_bond_kokkos.h
action neigh_full_kokkos.h
action neigh_list_kokkos.cpp
action neigh_list_kokkos.h
action neighbor_kokkos.cpp
action neighbor_kokkos.h
action pair_buck_coul_cut_kokkos.cpp
action pair_buck_coul_cut_kokkos.h
action pair_buck_coul_long_kokkos.cpp pair_buck_coul_long.cpp
action pair_buck_coul_long_kokkos.h pair_buck_coul_long.h
action pair_buck_kokkos.cpp
action pair_buck_kokkos.h
action pair_coul_cut_kokkos.cpp
action pair_coul_cut_kokkos.h
action pair_coul_debye_kokkos.cpp
action pair_coul_debye_kokkos.h
action pair_coul_dsf_kokkos.cpp
action pair_coul_dsf_kokkos.h
action pair_coul_long_kokkos.cpp pair_coul_long.cpp
action pair_coul_long_kokkos.h pair_coul_long.h
action pair_coul_wolf_kokkos.cpp
action pair_coul_wolf_kokkos.h
action pair_eam_kokkos.cpp pair_eam.cpp
action pair_eam_kokkos.h pair_eam.h
action pair_eam_alloy_kokkos.cpp pair_eam_alloy.cpp
action pair_eam_alloy_kokkos.h pair_eam_alloy.h
action pair_eam_fs_kokkos.cpp pair_eam_fs.cpp
action pair_eam_fs_kokkos.h pair_eam_fs.h
action pair_kokkos.h
action pair_lj_charmm_coul_charmm_implicit_kokkos.cpp pair_lj_charmm_coul_charmm_implicit.cpp
action pair_lj_charmm_coul_charmm_implicit_kokkos.h pair_lj_charmm_coul_charmm_implicit.h
action pair_lj_charmm_coul_charmm_kokkos.cpp pair_lj_charmm_coul_charmm.cpp
action pair_lj_charmm_coul_charmm_kokkos.h pair_lj_charmm_coul_charmm.h
action pair_lj_charmm_coul_long_kokkos.cpp pair_lj_charmm_coul_long.cpp
action pair_lj_charmm_coul_long_kokkos.h pair_lj_charmm_coul_long.h
action pair_lj_class2_coul_cut_kokkos.cpp pair_lj_class2_coul_cut.cpp
action pair_lj_class2_coul_cut_kokkos.h pair_lj_class2_coul_cut.h
action pair_lj_class2_coul_long_kokkos.cpp pair_lj_class2_coul_long.cpp
action pair_lj_class2_coul_long_kokkos.h pair_lj_class2_coul_long.h
action pair_lj_class2_kokkos.cpp pair_lj_class2.cpp
action pair_lj_class2_kokkos.h pair_lj_class2.h
action pair_lj_cut_coul_cut_kokkos.cpp
action pair_lj_cut_coul_cut_kokkos.h
action pair_lj_cut_coul_debye_kokkos.cpp
action pair_lj_cut_coul_debye_kokkos.h
action pair_lj_cut_coul_dsf_kokkos.cpp
action pair_lj_cut_coul_dsf_kokkos.h
action pair_lj_cut_coul_long_kokkos.cpp pair_lj_cut_coul_long.cpp
action pair_lj_cut_coul_long_kokkos.h pair_lj_cut_coul_long.h
action pair_lj_cut_kokkos.cpp
action pair_lj_cut_kokkos.h
action pair_lj_expand_kokkos.cpp
action pair_lj_expand_kokkos.h
action pair_lj_gromacs_coul_gromacs_kokkos.cpp
action pair_lj_gromacs_coul_gromacs_kokkos.h
action pair_lj_gromacs_kokkos.cpp
action pair_lj_gromacs_kokkos.h
action pair_lj_sdk_kokkos.cpp pair_lj_sdk.cpp
action pair_lj_sdk_kokkos.h pair_lj_sdk.h
action pair_reax_c_kokkos.cpp pair_reax_c.cpp
action pair_reax_c_kokkos.h pair_reax_c.h
action pair_sw_kokkos.cpp pair_sw.cpp
action pair_sw_kokkos.h pair_sw.h
action pair_table_kokkos.cpp
action pair_table_kokkos.h
action pair_tersoff_kokkos.cpp pair_tersoff.cpp
action pair_tersoff_kokkos.h pair_tersoff.h
action pair_tersoff_mod_kokkos.cpp pair_tersoff_mod.cpp
action pair_tersoff_mod_kokkos.h pair_tersoff_mod.h
action pair_tersoff_zbl_kokkos.cpp pair_tersoff_zbl.cpp
action pair_tersoff_zbl_kokkos.h pair_tersoff_zbl.h
action region_block_kokkos.cpp
action region_block_kokkos.h
action verlet_kokkos.cpp
action verlet_kokkos.h
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*kokkos[^ \t]* //g' ../Makefile.package
sed -i -e 's/[^ \t]*KOKKOS[^ \t]* //g' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-DLMP_KOKKOS |' ../Makefile.package
# sed -i -e 's|^PKG_PATH =[ \t]*|&-L..\/..\/lib\/kokkos\/core\/src |' ../Makefile.package
sed -i -e 's|^PKG_CPP_DEPENDS =[ \t]*|&$(KOKKOS_CPP_DEPENDS) |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&$(KOKKOS_LIBS) |' ../Makefile.package
sed -i -e 's|^PKG_LINK_DEPENDS =[ \t]*|&$(KOKKOS_LINK_DEPENDS) |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(KOKKOS_LDFLAGS) |' ../Makefile.package
# sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(kokkos_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/CXX\ =\ \$(CC)/d' ../Makefile.package.settings
sed -i -e '/^include.*kokkos.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
- sed -i -e '4 i \CXX = $(CC)' ../Makefile.package.settings
- sed -i -e '5 i \include ..\/..\/lib\/kokkos\/Makefile.kokkos' ../Makefile.package.settings
+ sed -i -e '4 i \
+CXX = $(CC)
+' ../Makefile.package.settings
+ sed -i -e '5 i \
+include ..\/..\/lib\/kokkos\/Makefile.kokkos
+' ../Makefile.package.settings
fi
# comb/omp triggers a persistent bug in nvcc. deleting it.
rm -f ../*_comb_omp.*
elif (test $1 = 2) then
# comb/omp triggers a persistent bug in nvcc. deleting it.
rm -f ../*_comb_omp.*
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*kokkos[^ \t]* //g' ../Makefile.package
sed -i -e 's/[^ \t]*KOKKOS[^ \t]* //g' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/CXX\ =\ \$(CC)/d' ../Makefile.package.settings
sed -i -e '/^include.*kokkos.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp
index 0fca51a0e..3ec22c42f 100644
--- a/src/KOKKOS/comm_kokkos.cpp
+++ b/src/KOKKOS/comm_kokkos.cpp
@@ -1,994 +1,994 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "comm_kokkos.h"
#include "kokkos.h"
#include "atom.h"
#include "atom_kokkos.h"
#include "atom_vec.h"
#include "atom_vec_kokkos.h"
#include "domain.h"
#include "atom_masks.h"
#include "error.h"
#include "memory.h"
#include "force.h"
#include "pair.h"
#include "fix.h"
#include "compute.h"
#include "dump.h"
#include "output.h"
#include "modify.h"
using namespace LAMMPS_NS;
#define BUFFACTOR 1.5
#define BUFMIN 10000
#define BUFEXTRA 1000
enum{SINGLE,MULTI};
/* ----------------------------------------------------------------------
setup MPI and allocate buffer space
------------------------------------------------------------------------- */
CommKokkos::CommKokkos(LAMMPS *lmp) : CommBrick(lmp)
{
if (sendlist) for (int i = 0; i < maxswap; i++) memory->destroy(sendlist[i]);
memory->sfree(sendlist);
sendlist = NULL;
k_sendlist = ArrayTypes<LMPDeviceType>::tdual_int_2d();
// error check for disallow of OpenMP threads?
// initialize comm buffers & exchange memory
memory->destroy(buf_send);
buf_send = NULL;
memory->destroy(buf_recv);
buf_recv = NULL;
k_exchange_sendlist = ArrayTypes<LMPDeviceType>::
tdual_int_1d("comm:k_exchange_sendlist",100);
k_exchange_copylist = ArrayTypes<LMPDeviceType>::
tdual_int_1d("comm:k_exchange_copylist",100);
k_count = ArrayTypes<LMPDeviceType>::tdual_int_1d("comm:k_count",1);
k_sendflag = ArrayTypes<LMPDeviceType>::tdual_int_1d("comm:k_sendflag",100);
memory->destroy(maxsendlist);
maxsendlist = NULL;
memory->create(maxsendlist,maxswap,"comm:maxsendlist");
for (int i = 0; i < maxswap; i++) {
maxsendlist[i] = BUFMIN;
}
memory->create_kokkos(k_sendlist,sendlist,maxswap,BUFMIN,"comm:sendlist");
}
/* ---------------------------------------------------------------------- */
CommKokkos::~CommKokkos()
{
memory->destroy_kokkos(k_sendlist,sendlist);
sendlist = NULL;
memory->destroy_kokkos(k_buf_send,buf_send);
buf_send = NULL;
memory->destroy_kokkos(k_buf_recv,buf_recv);
buf_recv = NULL;
}
/* ---------------------------------------------------------------------- */
void CommKokkos::init()
{
grow_send_kokkos(maxsend+bufextra,0,Host);
grow_recv_kokkos(maxrecv,Host);
atomKK = (AtomKokkos *) atom;
exchange_comm_classic = lmp->kokkos->exchange_comm_classic;
forward_comm_classic = lmp->kokkos->forward_comm_classic;
exchange_comm_on_host = lmp->kokkos->exchange_comm_on_host;
forward_comm_on_host = lmp->kokkos->forward_comm_on_host;
CommBrick::init();
int check_forward = 0;
int check_reverse = 0;
if (force->pair && (force->pair->execution_space == Host))
check_forward += force->pair->comm_forward;
if (force->pair && (force->pair->execution_space == Host))
check_reverse += force->pair->comm_reverse;
for (int i = 0; i < modify->nfix; i++) {
check_forward += modify->fix[i]->comm_forward;
check_reverse += modify->fix[i]->comm_reverse;
}
for (int i = 0; i < modify->ncompute; i++) {
check_forward += modify->compute[i]->comm_forward;
check_reverse += modify->compute[i]->comm_reverse;
}
for (int i = 0; i < output->ndump; i++) {
check_forward += output->dump[i]->comm_forward;
check_reverse += output->dump[i]->comm_reverse;
}
if (force->newton == 0) check_reverse = 0;
if (force->pair) check_reverse += force->pair->comm_reverse_off;
if(check_reverse || check_forward)
forward_comm_classic = true;
}
/* ----------------------------------------------------------------------
forward communication of atom coords every timestep
other per-atom attributes may also be sent via pack/unpack routines
------------------------------------------------------------------------- */
void CommKokkos::forward_comm(int dummy)
{
if (!forward_comm_classic) {
if (forward_comm_on_host) forward_comm_device<LMPHostType>(dummy);
else forward_comm_device<LMPDeviceType>(dummy);
return;
}
k_sendlist.sync<LMPHostType>();
if (comm_x_only) {
atomKK->sync(Host,X_MASK);
atomKK->modified(Host,X_MASK);
} else if (ghost_velocity) {
atomKK->sync(Host,X_MASK | V_MASK);
atomKK->modified(Host,X_MASK | V_MASK);
} else {
atomKK->sync(Host,ALL_MASK);
atomKK->modified(Host,ALL_MASK);
}
CommBrick::forward_comm(dummy);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void CommKokkos::forward_comm_device(int dummy)
{
int n;
MPI_Request request;
AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec;
double **x = atom->x;
double *buf;
// exchange data with another proc
// if other proc is self, just copy
// if comm_x_only set, exchange or copy directly to x, don't unpack
k_sendlist.sync<DeviceType>();
for (int iswap = 0; iswap < nswap; iswap++) {
if (sendproc[iswap] != me) {
if (comm_x_only) {
atomKK->sync(ExecutionSpaceFromDevice<DeviceType>::space,X_MASK);
if (size_forward_recv[iswap]) buf = x[firstrecv[iswap]];
else buf = NULL;
if (size_forward_recv[iswap]) {
buf = atomKK->k_x.view<DeviceType>().ptr_on_device() +
firstrecv[iswap]*atomKK->k_x.view<DeviceType>().dimension_1();
MPI_Irecv(buf,size_forward_recv[iswap],MPI_DOUBLE,
recvproc[iswap],0,world,&request);
}
n = avec->pack_comm_kokkos(sendnum[iswap],k_sendlist,
iswap,k_buf_send,pbc_flag[iswap],pbc[iswap]);
if (n) {
MPI_Send(k_buf_send.view<DeviceType>().ptr_on_device(),
n,MPI_DOUBLE,sendproc[iswap],0,world);
}
if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE);
atomKK->modified(ExecutionSpaceFromDevice<DeviceType>::
space,X_MASK);
} else if (ghost_velocity) {
error->all(FLERR,"Ghost velocity forward comm not yet "
"implemented with Kokkos");
if (size_forward_recv[iswap])
MPI_Irecv(k_buf_recv.view<LMPHostType>().ptr_on_device(),
size_forward_recv[iswap],MPI_DOUBLE,
recvproc[iswap],0,world,&request);
n = avec->pack_comm_vel(sendnum[iswap],sendlist[iswap],
buf_send,pbc_flag[iswap],pbc[iswap]);
if (n) MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world);
if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE);
avec->unpack_comm_vel(recvnum[iswap],firstrecv[iswap],buf_recv);
} else {
if (size_forward_recv[iswap])
MPI_Irecv(k_buf_recv.view<DeviceType>().ptr_on_device(),
size_forward_recv[iswap],MPI_DOUBLE,
recvproc[iswap],0,world,&request);
n = avec->pack_comm_kokkos(sendnum[iswap],k_sendlist,iswap,
k_buf_send,pbc_flag[iswap],pbc[iswap]);
if (n)
MPI_Send(k_buf_send.view<DeviceType>().ptr_on_device(),n,
MPI_DOUBLE,sendproc[iswap],0,world);
if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE);
avec->unpack_comm_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv);
}
} else {
if (!ghost_velocity) {
if (sendnum[iswap])
n = avec->pack_comm_self(sendnum[iswap],k_sendlist,iswap,
firstrecv[iswap],pbc_flag[iswap],pbc[iswap]);
} else if (ghost_velocity) {
error->all(FLERR,"Ghost velocity forward comm not yet "
"implemented with Kokkos");
n = avec->pack_comm_vel(sendnum[iswap],sendlist[iswap],
buf_send,pbc_flag[iswap],pbc[iswap]);
avec->unpack_comm_vel(recvnum[iswap],firstrecv[iswap],buf_send);
}
}
}
}
void CommKokkos::reverse_comm()
{
k_sendlist.sync<LMPHostType>();
if (comm_f_only)
atomKK->sync(Host,F_MASK);
else
atomKK->sync(Host,ALL_MASK);
CommBrick::reverse_comm();
if (comm_f_only)
atomKK->modified(Host,F_MASK);
else
atomKK->modified(Host,ALL_MASK);
atomKK->sync(Device,ALL_MASK);
}
void CommKokkos::forward_comm_fix(Fix *fix, int size)
{
k_sendlist.sync<LMPHostType>();
CommBrick::forward_comm_fix(fix,size);
}
void CommKokkos::reverse_comm_fix(Fix *fix, int size)
{
k_sendlist.sync<LMPHostType>();
CommBrick::reverse_comm_fix(fix, size);
}
void CommKokkos::forward_comm_compute(Compute *compute)
{
k_sendlist.sync<LMPHostType>();
CommBrick::forward_comm_compute(compute);
}
void CommKokkos::reverse_comm_compute(Compute *compute)
{
k_sendlist.sync<LMPHostType>();
CommBrick::reverse_comm_compute(compute);
}
void CommKokkos::forward_comm_pair(Pair *pair)
{
if (pair->execution_space == Host) {
k_sendlist.sync<LMPHostType>();
CommBrick::forward_comm_pair(pair);
} else if (pair->execution_space == Device) {
k_sendlist.sync<LMPDeviceType>();
forward_comm_pair_device<LMPDeviceType>(pair);
}
}
template<class DeviceType>
void CommKokkos::forward_comm_pair_device(Pair *pair)
{
int iswap,n;
MPI_Request request;
int nsize = pair->comm_forward;
for (iswap = 0; iswap < nswap; iswap++) {
DAT::tdual_xfloat_1d k_buf_send_pair = DAT::tdual_xfloat_1d("comm:k_buf_send_pair",nsize*sendnum[iswap]);
DAT::tdual_xfloat_1d k_buf_recv_pair = DAT::tdual_xfloat_1d("comm:k_recv_send_pair",nsize*recvnum[iswap]);
// pack buffer
n = pair->pack_forward_comm_kokkos(sendnum[iswap],k_sendlist,
iswap,k_buf_send_pair,pbc_flag[iswap],pbc[iswap]);
// exchange with another proc
// if self, set recv buffer to send buffer
if (sendproc[iswap] != me) {
if (recvnum[iswap])
MPI_Irecv(k_buf_recv_pair.view<DeviceType>().ptr_on_device(),nsize*recvnum[iswap],MPI_DOUBLE,
recvproc[iswap],0,world,&request);
if (sendnum[iswap])
MPI_Send(k_buf_send_pair.view<DeviceType>().ptr_on_device(),n,MPI_DOUBLE,sendproc[iswap],0,world);
if (recvnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE);
} else k_buf_recv_pair = k_buf_send_pair;
// unpack buffer
pair->unpack_forward_comm_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv_pair);
}
}
void CommKokkos::reverse_comm_pair(Pair *pair)
{
k_sendlist.sync<LMPHostType>();
CommBrick::reverse_comm_pair(pair);
}
void CommKokkos::forward_comm_dump(Dump *dump)
{
k_sendlist.sync<LMPHostType>();
CommBrick::forward_comm_dump(dump);
}
void CommKokkos::reverse_comm_dump(Dump *dump)
{
k_sendlist.sync<LMPHostType>();
CommBrick::reverse_comm_dump(dump);
}
/* ----------------------------------------------------------------------
exchange: move atoms to correct processors
atoms exchanged with all 6 stencil neighbors
send out atoms that have left my box, receive ones entering my box
atoms will be lost if not inside some proc's box
can happen if atom moves outside of non-periodic bounary
or if atom moves more than one proc away
this routine called before every reneighboring
for triclinic, atoms must be in lamda coords (0-1) before exchange is called
------------------------------------------------------------------------- */
void CommKokkos::exchange()
{
if(atom->nextra_grow + atom->nextra_border) {
if(!exchange_comm_classic) {
static int print = 1;
if(print && comm->me==0) {
error->warning(FLERR,"Fixes cannot send data in Kokkos communication, "
"switching to classic communication");
- print = 0;
}
+ print = 0;
exchange_comm_classic = true;
}
}
if (!exchange_comm_classic) {
if (exchange_comm_on_host) exchange_device<LMPHostType>();
else exchange_device<LMPDeviceType>();
return;
}
atomKK->sync(Host,ALL_MASK);
atomKK->modified(Host,ALL_MASK);
CommBrick::exchange();
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
struct BuildExchangeListFunctor {
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
X_FLOAT _lo,_hi;
typename AT::t_x_array _x;
int _nlocal,_dim;
typename AT::t_int_1d _nsend;
typename AT::t_int_1d _sendlist;
typename AT::t_int_1d _sendflag;
BuildExchangeListFunctor(
const typename AT::tdual_x_array x,
const typename AT::tdual_int_1d sendlist,
typename AT::tdual_int_1d nsend,
typename AT::tdual_int_1d sendflag,int nlocal, int dim,
X_FLOAT lo, X_FLOAT hi):
_x(x.template view<DeviceType>()),
_sendlist(sendlist.template view<DeviceType>()),
_nsend(nsend.template view<DeviceType>()),
_sendflag(sendflag.template view<DeviceType>()),
_nlocal(nlocal),_dim(dim),
_lo(lo),_hi(hi){
}
KOKKOS_INLINE_FUNCTION
void operator() (int i) const {
if (_x(i,_dim) < _lo || _x(i,_dim) >= _hi) {
const int mysend=Kokkos::atomic_fetch_add(&_nsend(0),1);
if(mysend<_sendlist.dimension_0()) {
_sendlist(mysend) = i;
_sendflag(i) = 1;
}
} else
_sendflag(i) = 0;
}
};
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void CommKokkos::exchange_device()
{
int i,nsend,nrecv,nrecv1,nrecv2,nlocal;
double lo,hi;
double **x;
double *sublo,*subhi;
MPI_Request request;
AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec;
// clear global->local map for owned and ghost atoms
// b/c atoms migrate to new procs in exchange() and
// new ghosts are created in borders()
// map_set() is done at end of borders()
// clear ghost count and any ghost bonus data internal to AtomVec
if (map_style) atom->map_clear();
atom->nghost = 0;
atom->avec->clear_bonus();
// subbox bounds for orthogonal or triclinic
if (triclinic == 0) {
sublo = domain->sublo;
subhi = domain->subhi;
} else {
sublo = domain->sublo_lamda;
subhi = domain->subhi_lamda;
}
atomKK->sync(ExecutionSpaceFromDevice<DeviceType>::space,ALL_MASK);
// loop over dimensions
for (int dim = 0; dim < 3; dim++) {
// fill buffer with atoms leaving my box, using < and >=
// when atom is deleted, fill it in with last atom
x = atom->x;
lo = sublo[dim];
hi = subhi[dim];
nlocal = atom->nlocal;
i = nsend = 0;
if (true) {
if (k_sendflag.h_view.dimension_0()<nlocal) k_sendflag.resize(nlocal);
k_count.h_view(0) = k_exchange_sendlist.h_view.dimension_0();
while (k_count.h_view(0)>=k_exchange_sendlist.h_view.dimension_0()) {
k_count.h_view(0) = 0;
k_count.modify<LMPHostType>();
k_count.sync<DeviceType>();
BuildExchangeListFunctor<DeviceType>
f(atomKK->k_x,k_exchange_sendlist,k_count,k_sendflag,
nlocal,dim,lo,hi);
Kokkos::parallel_for(nlocal,f);
DeviceType::fence();
k_exchange_sendlist.modify<DeviceType>();
k_sendflag.modify<DeviceType>();
k_count.modify<DeviceType>();
k_count.sync<LMPHostType>();
if (k_count.h_view(0)>=k_exchange_sendlist.h_view.dimension_0()) {
k_exchange_sendlist.resize(k_count.h_view(0)*1.1);
k_exchange_copylist.resize(k_count.h_view(0)*1.1);
k_count.h_view(0)=k_exchange_sendlist.h_view.dimension_0();
}
}
k_exchange_copylist.sync<LMPHostType>();
k_exchange_sendlist.sync<LMPHostType>();
k_sendflag.sync<LMPHostType>();
int sendpos = nlocal-1;
nlocal -= k_count.h_view(0);
for(int i = 0; i < k_count.h_view(0); i++) {
if (k_exchange_sendlist.h_view(i)<nlocal) {
while (k_sendflag.h_view(sendpos)) sendpos--;
k_exchange_copylist.h_view(i) = sendpos;
sendpos--;
} else
k_exchange_copylist.h_view(i) = -1;
}
k_exchange_copylist.modify<LMPHostType>();
k_exchange_copylist.sync<DeviceType>();
nsend = k_count.h_view(0);
if (nsend > maxsend) grow_send_kokkos(nsend,1);
nsend =
avec->pack_exchange_kokkos(k_count.h_view(0),k_buf_send,
k_exchange_sendlist,k_exchange_copylist,
ExecutionSpaceFromDevice<DeviceType>::
space,dim,lo,hi);
DeviceType::fence();
} else {
while (i < nlocal) {
if (x[i][dim] < lo || x[i][dim] >= hi) {
if (nsend > maxsend) grow_send_kokkos(nsend,1);
nsend += avec->pack_exchange(i,&buf_send[nsend]);
avec->copy(nlocal-1,i,1);
nlocal--;
} else i++;
}
}
atom->nlocal = nlocal;
// send/recv atoms in both directions
// if 1 proc in dimension, no send/recv, set recv buf to send buf
// if 2 procs in dimension, single send/recv
// if more than 2 procs in dimension, send/recv to both neighbors
if (procgrid[dim] == 1) {
nrecv = nsend;
if (nrecv) {
atom->nlocal=avec->
unpack_exchange_kokkos(k_buf_send,nrecv,atom->nlocal,dim,lo,hi,
ExecutionSpaceFromDevice<DeviceType>::space);
DeviceType::fence();
}
} else {
MPI_Sendrecv(&nsend,1,MPI_INT,procneigh[dim][0],0,
&nrecv1,1,MPI_INT,procneigh[dim][1],0,world,MPI_STATUS_IGNORE);
nrecv = nrecv1;
if (procgrid[dim] > 2) {
MPI_Sendrecv(&nsend,1,MPI_INT,procneigh[dim][1],0,
&nrecv2,1,MPI_INT,procneigh[dim][0],0,world,MPI_STATUS_IGNORE);
nrecv += nrecv2;
}
if (nrecv > maxrecv) grow_recv_kokkos(nrecv);
MPI_Irecv(k_buf_recv.view<DeviceType>().ptr_on_device(),nrecv1,
MPI_DOUBLE,procneigh[dim][1],0,
world,&request);
MPI_Send(k_buf_send.view<DeviceType>().ptr_on_device(),nsend,
MPI_DOUBLE,procneigh[dim][0],0,world);
MPI_Wait(&request,MPI_STATUS_IGNORE);
if (procgrid[dim] > 2) {
MPI_Irecv(k_buf_recv.view<DeviceType>().ptr_on_device()+nrecv1,
nrecv2,MPI_DOUBLE,procneigh[dim][0],0,
world,&request);
MPI_Send(k_buf_send.view<DeviceType>().ptr_on_device(),nsend,
MPI_DOUBLE,procneigh[dim][1],0,world);
MPI_Wait(&request,MPI_STATUS_IGNORE);
}
if (nrecv) {
atom->nlocal = avec->
unpack_exchange_kokkos(k_buf_recv,nrecv,atom->nlocal,dim,lo,hi,
ExecutionSpaceFromDevice<DeviceType>::space);
DeviceType::fence();
}
}
// check incoming atoms to see if they are in my box
// if so, add to my list
}
atomKK->modified(ExecutionSpaceFromDevice<DeviceType>::space,ALL_MASK);
if (atom->firstgroupname) {
/* this is not yet implemented with Kokkos */
atomKK->sync(Host,ALL_MASK);
atom->first_reorder();
atomKK->modified(Host,ALL_MASK);
}
}
/* ----------------------------------------------------------------------
borders: list nearby atoms to send to neighboring procs at every timestep
one list is created for every swap that will be made
as list is made, actually do swaps
this does equivalent of a communicate, so don't need to explicitly
call communicate routine on reneighboring timestep
this routine is called before every reneighboring
for triclinic, atoms must be in lamda coords (0-1) before borders is called
------------------------------------------------------------------------- */
void CommKokkos::borders()
{
if (!exchange_comm_classic) {
if (exchange_comm_on_host) borders_device<LMPHostType>();
else borders_device<LMPDeviceType>();
return;
}
atomKK->sync(Host,ALL_MASK);
atomKK->modified(Host,ALL_MASK);
k_sendlist.sync<LMPHostType>();
k_sendlist.modify<LMPHostType>();
CommBrick::borders();
k_sendlist.modify<LMPHostType>();
atomKK->modified(Host,ALL_MASK);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
struct BuildBorderListFunctor {
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
X_FLOAT lo,hi;
typename AT::t_x_array x;
int iswap,maxsendlist;
int nfirst,nlast,dim;
typename AT::t_int_2d sendlist;
typename AT::t_int_1d nsend;
BuildBorderListFunctor(typename AT::tdual_x_array _x,
typename AT::tdual_int_2d _sendlist,
typename AT::tdual_int_1d _nsend,int _nfirst,
int _nlast, int _dim,
X_FLOAT _lo, X_FLOAT _hi, int _iswap,
int _maxsendlist):
x(_x.template view<DeviceType>()),
sendlist(_sendlist.template view<DeviceType>()),
nsend(_nsend.template view<DeviceType>()),
nfirst(_nfirst),nlast(_nlast),dim(_dim),
lo(_lo),hi(_hi),iswap(_iswap),maxsendlist(_maxsendlist){}
KOKKOS_INLINE_FUNCTION
void operator() (typename Kokkos::TeamPolicy<DeviceType>::member_type dev) const {
const int chunk = ((nlast - nfirst + dev.league_size() - 1 ) /
dev.league_size());
const int teamstart = chunk*dev.league_rank() + nfirst;
const int teamend = (teamstart + chunk) < nlast?(teamstart + chunk):nlast;
int mysend = 0;
for (int i=teamstart + dev.team_rank(); i<teamend; i+=dev.team_size()) {
if (x(i,dim) >= lo && x(i,dim) <= hi) mysend++;
}
const int my_store_pos = dev.team_scan(mysend,&nsend(0));
if (my_store_pos+mysend < maxsendlist) {
mysend = my_store_pos;
for(int i=teamstart + dev.team_rank(); i<teamend; i+=dev.team_size()){
if (x(i,dim) >= lo && x(i,dim) <= hi) {
sendlist(iswap,mysend++) = i;
}
}
}
}
size_t shmem_size(const int team_size) const { (void) team_size; return 1000u;}
};
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void CommKokkos::borders_device() {
int i,n,itype,iswap,dim,ineed,twoneed,smax,rmax;
int nsend,nrecv,sendflag,nfirst,nlast,ngroup;
double lo,hi;
int *type;
double **x;
double *buf,*mlo,*mhi;
MPI_Request request;
AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec;
ExecutionSpace exec_space = ExecutionSpaceFromDevice<DeviceType>::space;
k_sendlist.modify<DeviceType>();
atomKK->sync(exec_space,ALL_MASK);
// do swaps over all 3 dimensions
iswap = 0;
smax = rmax = 0;
for (dim = 0; dim < 3; dim++) {
nlast = 0;
twoneed = 2*maxneed[dim];
for (ineed = 0; ineed < twoneed; ineed++) {
// find atoms within slab boundaries lo/hi using <= and >=
// check atoms between nfirst and nlast
// for first swaps in a dim, check owned and ghost
// for later swaps in a dim, only check newly arrived ghosts
// store sent atom indices in list for use in future timesteps
x = atom->x;
if (style == SINGLE) {
lo = slablo[iswap];
hi = slabhi[iswap];
} else {
type = atom->type;
mlo = multilo[iswap];
mhi = multihi[iswap];
}
if (ineed % 2 == 0) {
nfirst = nlast;
nlast = atom->nlocal + atom->nghost;
}
nsend = 0;
// sendflag = 0 if I do not send on this swap
// sendneed test indicates receiver no longer requires data
// e.g. due to non-PBC or non-uniform sub-domains
if (ineed/2 >= sendneed[dim][ineed % 2]) sendflag = 0;
else sendflag = 1;
// find send atoms according to SINGLE vs MULTI
// all atoms eligible versus atoms in bordergroup
// only need to limit loop to bordergroup for first sends (ineed < 2)
// on these sends, break loop in two: owned (in group) and ghost
if (sendflag) {
if (!bordergroup || ineed >= 2) {
if (style == SINGLE) {
typename ArrayTypes<DeviceType>::tdual_int_1d total_send("TS",1);
total_send.h_view(0) = 0;
if(exec_space == Device) {
total_send.template modify<DeviceType>();
total_send.template sync<LMPDeviceType>();
}
BuildBorderListFunctor<DeviceType> f(atomKK->k_x,k_sendlist,
total_send,nfirst,nlast,dim,lo,hi,iswap,maxsendlist[iswap]);
Kokkos::TeamPolicy<DeviceType> config((nlast-nfirst+127)/128,128);
Kokkos::parallel_for(config,f);
DeviceType::fence();
total_send.template modify<DeviceType>();
total_send.template sync<LMPHostType>();
if(total_send.h_view(0) >= maxsendlist[iswap]) {
grow_list(iswap,total_send.h_view(0));
k_sendlist.modify<DeviceType>();
total_send.h_view(0) = 0;
if(exec_space == Device) {
total_send.template modify<LMPHostType>();
total_send.template sync<LMPDeviceType>();
}
BuildBorderListFunctor<DeviceType> f(atomKK->k_x,k_sendlist,
total_send,nfirst,nlast,dim,lo,hi,iswap,maxsendlist[iswap]);
Kokkos::TeamPolicy<DeviceType> config((nlast-nfirst+127)/128,128);
Kokkos::parallel_for(config,f);
DeviceType::fence();
total_send.template modify<DeviceType>();
total_send.template sync<LMPHostType>();
}
nsend = total_send.h_view(0);
} else {
error->all(FLERR,"Required border comm not yet "
"implemented with Kokkos");
for (i = nfirst; i < nlast; i++) {
itype = type[i];
if (x[i][dim] >= mlo[itype] && x[i][dim] <= mhi[itype]) {
if (nsend == maxsendlist[iswap]) grow_list(iswap,nsend);
sendlist[iswap][nsend++] = i;
}
}
}
} else {
error->all(FLERR,"Required border comm not yet "
"implemented with Kokkos");
if (style == SINGLE) {
ngroup = atom->nfirst;
for (i = 0; i < ngroup; i++)
if (x[i][dim] >= lo && x[i][dim] <= hi) {
if (nsend == maxsendlist[iswap]) grow_list(iswap,nsend);
sendlist[iswap][nsend++] = i;
}
for (i = atom->nlocal; i < nlast; i++)
if (x[i][dim] >= lo && x[i][dim] <= hi) {
if (nsend == maxsendlist[iswap]) grow_list(iswap,nsend);
sendlist[iswap][nsend++] = i;
}
} else {
ngroup = atom->nfirst;
for (i = 0; i < ngroup; i++) {
itype = type[i];
if (x[i][dim] >= mlo[itype] && x[i][dim] <= mhi[itype]) {
if (nsend == maxsendlist[iswap]) grow_list(iswap,nsend);
sendlist[iswap][nsend++] = i;
}
}
for (i = atom->nlocal; i < nlast; i++) {
itype = type[i];
if (x[i][dim] >= mlo[itype] && x[i][dim] <= mhi[itype]) {
if (nsend == maxsendlist[iswap]) grow_list(iswap,nsend);
sendlist[iswap][nsend++] = i;
}
}
}
}
}
// pack up list of border atoms
if (nsend*size_border > maxsend)
grow_send_kokkos(nsend*size_border,0);
if (ghost_velocity) {
error->all(FLERR,"Required border comm not yet "
"implemented with Kokkos");
n = avec->pack_border_vel(nsend,sendlist[iswap],buf_send,
pbc_flag[iswap],pbc[iswap]);
}
else
n = avec->
pack_border_kokkos(nsend,k_sendlist,k_buf_send,iswap,
pbc_flag[iswap],pbc[iswap],exec_space);
// swap atoms with other proc
// no MPI calls except SendRecv if nsend/nrecv = 0
// put incoming ghosts at end of my atom arrays
// if swapping with self, simply copy, no messages
if (sendproc[iswap] != me) {
MPI_Sendrecv(&nsend,1,MPI_INT,sendproc[iswap],0,
&nrecv,1,MPI_INT,recvproc[iswap],0,world,MPI_STATUS_IGNORE);
if (nrecv*size_border > maxrecv) grow_recv_kokkos(nrecv*size_border);
if (nrecv) MPI_Irecv(k_buf_recv.view<DeviceType>().ptr_on_device(),
nrecv*size_border,MPI_DOUBLE,
recvproc[iswap],0,world,&request);
if (n) MPI_Send(k_buf_send.view<DeviceType>().ptr_on_device(),n,
MPI_DOUBLE,sendproc[iswap],0,world);
if (nrecv) MPI_Wait(&request,MPI_STATUS_IGNORE);
buf = buf_recv;
} else {
nrecv = nsend;
buf = buf_send;
}
// unpack buffer
if (ghost_velocity) {
error->all(FLERR,"Required border comm not yet "
"implemented with Kokkos");
avec->unpack_border_vel(nrecv,atom->nlocal+atom->nghost,buf);
}
else
if (sendproc[iswap] != me)
avec->unpack_border_kokkos(nrecv,atom->nlocal+atom->nghost,
k_buf_recv,exec_space);
else
avec->unpack_border_kokkos(nrecv,atom->nlocal+atom->nghost,
k_buf_send,exec_space);
// set all pointers & counters
smax = MAX(smax,nsend);
rmax = MAX(rmax,nrecv);
sendnum[iswap] = nsend;
recvnum[iswap] = nrecv;
size_forward_recv[iswap] = nrecv*size_forward;
size_reverse_send[iswap] = nrecv*size_reverse;
size_reverse_recv[iswap] = nsend*size_reverse;
firstrecv[iswap] = atom->nlocal + atom->nghost;
atom->nghost += nrecv;
iswap++;
}
}
// insure send/recv buffers are long enough for all forward & reverse comm
int max = MAX(maxforward*smax,maxreverse*rmax);
if (max > maxsend) grow_send_kokkos(max,0);
max = MAX(maxforward*rmax,maxreverse*smax);
if (max > maxrecv) grow_recv_kokkos(max);
// reset global->local map
if (exec_space == Host) k_sendlist.sync<LMPDeviceType>();
atomKK->modified(exec_space,ALL_MASK);
DeviceType::fence();
atomKK->sync(Host,TAG_MASK);
if (map_style) atom->map_set();
}
/* ----------------------------------------------------------------------
realloc the size of the send buffer as needed with BUFFACTOR and bufextra
if flag = 1, realloc
if flag = 0, don't need to realloc with copy, just free/malloc
------------------------------------------------------------------------- */
void CommKokkos::grow_send(int n, int flag)
{
grow_send_kokkos(n,flag,Host);
}
/* ----------------------------------------------------------------------
free/malloc the size of the recv buffer as needed with BUFFACTOR
------------------------------------------------------------------------- */
void CommKokkos::grow_recv(int n)
{
grow_recv_kokkos(n,Host);
}
/* ----------------------------------------------------------------------
realloc the size of the send buffer as needed with BUFFACTOR & BUFEXTRA
if flag = 1, realloc
if flag = 0, don't need to realloc with copy, just free/malloc
------------------------------------------------------------------------- */
void CommKokkos::grow_send_kokkos(int n, int flag, ExecutionSpace space)
{
maxsend = static_cast<int> (BUFFACTOR * n);
int maxsend_border = (maxsend+BUFEXTRA+5)/atom->avec->size_border + 2;
if (flag) {
if(space == Device)
k_buf_send.modify<LMPDeviceType>();
else
k_buf_send.modify<LMPHostType>();
k_buf_send.resize(maxsend_border,atom->avec->size_border);
buf_send = k_buf_send.view<LMPHostType>().ptr_on_device();
}
else {
k_buf_send = ArrayTypes<LMPDeviceType>::
tdual_xfloat_2d("comm:k_buf_send",maxsend_border,atom->avec->size_border);
buf_send = k_buf_send.view<LMPHostType>().ptr_on_device();
}
}
/* ----------------------------------------------------------------------
free/malloc the size of the recv buffer as needed with BUFFACTOR
------------------------------------------------------------------------- */
void CommKokkos::grow_recv_kokkos(int n, ExecutionSpace space)
{
maxrecv = static_cast<int> (BUFFACTOR * n);
int maxrecv_border = (maxrecv+BUFEXTRA+5)/atom->avec->size_border + 2;
k_buf_recv = ArrayTypes<LMPDeviceType>::
tdual_xfloat_2d("comm:k_buf_recv",maxrecv_border,atom->avec->size_border);
buf_recv = k_buf_recv.view<LMPHostType>().ptr_on_device();
}
/* ----------------------------------------------------------------------
realloc the size of the iswap sendlist as needed with BUFFACTOR
------------------------------------------------------------------------- */
void CommKokkos::grow_list(int iswap, int n)
{
int size = static_cast<int> (BUFFACTOR * n);
memory->grow_kokkos(k_sendlist,sendlist,maxswap,size,"comm:sendlist");
for(int i=0;i<maxswap;i++) {
maxsendlist[i]=size; sendlist[i]=&k_sendlist.view<LMPHostType>()(i,0);
}
}
/* ----------------------------------------------------------------------
realloc the buffers needed for swaps
------------------------------------------------------------------------- */
void CommKokkos::grow_swap(int n)
{
free_swap();
allocate_swap(n);
if (style == MULTI) {
free_multi();
allocate_multi(n);
}
maxswap = n;
int size = MAX(k_sendlist.d_view.dimension_1(),BUFMIN);
memory->grow_kokkos(k_sendlist,sendlist,maxswap,size,"comm:sendlist");
memory->grow(maxsendlist,n,"comm:maxsendlist");
for (int i=0;i<maxswap;i++) maxsendlist[i]=size;
}
diff --git a/src/KOKKOS/pair_reax_c_kokkos.cpp b/src/KOKKOS/pair_reax_c_kokkos.cpp
index b3d95ebb4..9e0f06ef3 100644
--- a/src/KOKKOS/pair_reax_c_kokkos.cpp
+++ b/src/KOKKOS/pair_reax_c_kokkos.cpp
@@ -1,3919 +1,3934 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Ray Shan (SNL), Stan Moore (SNL)
------------------------------------------------------------------------- */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pair_reax_c_kokkos.h"
#include "kokkos.h"
#include "atom_kokkos.h"
#include "comm.h"
#include "force.h"
#include "neighbor.h"
#include "neigh_request.h"
#include "neigh_list_kokkos.h"
#include "update.h"
#include "integrate.h"
#include "respa.h"
#include "math_const.h"
#include "math_special.h"
#include "memory.h"
#include "error.h"
#include "atom_masks.h"
#include "reaxc_defs.h"
#include "reaxc_lookup.h"
#include "reaxc_tool_box.h"
#define TEAMSIZE 128
/* ---------------------------------------------------------------------- */
namespace LAMMPS_NS{
using namespace MathConst;
using namespace MathSpecial;
template<class DeviceType>
PairReaxCKokkos<DeviceType>::PairReaxCKokkos(LAMMPS *lmp) : PairReaxC(lmp)
{
respa_enable = 0;
cut_nbsq = cut_hbsq = cut_bosq = 0.0;
atomKK = (AtomKokkos *) atom;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
datamask_read = X_MASK | Q_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK;
datamask_modify = F_MASK | ENERGY_MASK | VIRIAL_MASK;
k_resize_bo = DAT::tdual_int_scalar("pair:resize_bo");
d_resize_bo = k_resize_bo.view<DeviceType>();
k_resize_hb = DAT::tdual_int_scalar("pair:resize_hb");
d_resize_hb = k_resize_hb.view<DeviceType>();
nmax = 0;
maxbo = 1;
maxhb = 1;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
PairReaxCKokkos<DeviceType>::~PairReaxCKokkos()
{
if (!copymode) {
memory->destroy_kokkos(k_eatom,eatom);
memory->destroy_kokkos(k_vatom,vatom);
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairReaxCKokkos<DeviceType>::allocate()
{
int n = atom->ntypes;
k_params_sing = Kokkos::DualView<params_sing*,typename DeviceType::array_layout,DeviceType>
("PairReaxC::params_sing",n+1);
paramssing = k_params_sing.d_view;
k_params_twbp = Kokkos::DualView<params_twbp**,typename DeviceType::array_layout,DeviceType>
("PairReaxC::params_twbp",n+1,n+1);
paramstwbp = k_params_twbp.d_view;
k_params_thbp = Kokkos::DualView<params_thbp***,typename DeviceType::array_layout,DeviceType>
("PairReaxC::params_thbp",n+1,n+1,n+1);
paramsthbp = k_params_thbp.d_view;
k_params_fbp = Kokkos::DualView<params_fbp****,typename DeviceType::array_layout,DeviceType>
("PairReaxC::params_fbp",n+1,n+1,n+1,n+1);
paramsfbp = k_params_fbp.d_view;
k_params_hbp = Kokkos::DualView<params_hbp***,typename DeviceType::array_layout,DeviceType>
("PairReaxC::params_hbp",n+1,n+1,n+1);
paramshbp = k_params_hbp.d_view;
k_tap = DAT::tdual_ffloat_1d("pair:tap",8);
d_tap = k_tap.d_view;
h_tap = k_tap.h_view;
}
/* ----------------------------------------------------------------------
init specific to this pair style
------------------------------------------------------------------------- */
template<class DeviceType>
void PairReaxCKokkos<DeviceType>::init_style()
{
PairReaxC::init_style();
// irequest = neigh request made by parent class
neighflag = lmp->kokkos->neighflag;
int irequest = neighbor->nrequest - 1;
neighbor->requests[irequest]->
kokkos_host = Kokkos::Impl::is_same<DeviceType,LMPHostType>::value &&
!Kokkos::Impl::is_same<DeviceType,LMPDeviceType>::value;
neighbor->requests[irequest]->
kokkos_device = Kokkos::Impl::is_same<DeviceType,LMPDeviceType>::value;
if (neighflag == FULL) {
neighbor->requests[irequest]->full = 1;
neighbor->requests[irequest]->half = 0;
neighbor->requests[irequest]->full_cluster = 0;
neighbor->requests[irequest]->ghost = 1;
} else if (neighflag == HALF || neighflag == HALFTHREAD) {
neighbor->requests[irequest]->full = 0;
neighbor->requests[irequest]->half = 1;
neighbor->requests[irequest]->full_cluster = 0;
neighbor->requests[irequest]->ghost = 1;
} else {
error->all(FLERR,"Cannot use chosen neighbor list style with reax/c/kk");
}
allocate();
setup();
init_md();
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairReaxCKokkos<DeviceType>::setup()
{
int i,j,k,m;
int n = atom->ntypes;
// general parameters
for (i = 0; i < 39; i ++)
gp[i] = system->reax_param.gp.l[i];
p_boc1 = gp[0];
p_boc2 = gp[1];
// vdw parameters
vdwflag = system->reax_param.gp.vdw_type;
lgflag = control->lgflag;
// atom, bond, angle, dihedral, H-bond specific parameters
two_body_parameters *twbp;
// valence angle (3-body) parameters
three_body_header *thbh;
three_body_parameters *thbp;
// torsion angle (4-body) parameters
four_body_header *fbh;
four_body_parameters *fbp;
// hydrogen bond parameters
hbond_parameters *hbp;
for (i = 1; i <= n; i++) {
// general
k_params_sing.h_view(i).mass = system->reax_param.sbp[map[i]].mass;
// polarization
k_params_sing.h_view(i).chi = system->reax_param.sbp[map[i]].chi;
k_params_sing.h_view(i).eta = system->reax_param.sbp[map[i]].eta;
// bond order
k_params_sing.h_view(i).r_s = system->reax_param.sbp[map[i]].r_s;
k_params_sing.h_view(i).r_pi = system->reax_param.sbp[map[i]].r_pi;
k_params_sing.h_view(i).r_pi2 = system->reax_param.sbp[map[i]].r_pi_pi;
k_params_sing.h_view(i).valency = system->reax_param.sbp[map[i]].valency;
k_params_sing.h_view(i).valency_val = system->reax_param.sbp[map[i]].valency_val;
k_params_sing.h_view(i).valency_boc = system->reax_param.sbp[map[i]].valency_boc;
k_params_sing.h_view(i).valency_e = system->reax_param.sbp[map[i]].valency_e;
k_params_sing.h_view(i).nlp_opt = system->reax_param.sbp[map[i]].nlp_opt;
// multibody
k_params_sing.h_view(i).p_lp2 = system->reax_param.sbp[map[i]].p_lp2;
k_params_sing.h_view(i).p_ovun2 = system->reax_param.sbp[map[i]].p_ovun2;
k_params_sing.h_view(i).p_ovun5 = system->reax_param.sbp[map[i]].p_ovun5;
// angular
k_params_sing.h_view(i).p_val3 = system->reax_param.sbp[map[i]].p_val3;
k_params_sing.h_view(i).p_val5 = system->reax_param.sbp[map[i]].p_val5;
// hydrogen bond
k_params_sing.h_view(i).p_hbond = system->reax_param.sbp[map[i]].p_hbond;
for (j = 1; j <= n; j++) {
twbp = &(system->reax_param.tbp[map[i]][map[j]]);
// vdW
k_params_twbp.h_view(i,j).gamma = twbp->gamma;
k_params_twbp.h_view(i,j).gamma_w = twbp->gamma_w;
k_params_twbp.h_view(i,j).alpha = twbp->alpha;
k_params_twbp.h_view(i,j).r_vdw = twbp->r_vdW;
k_params_twbp.h_view(i,j).epsilon = twbp->D;
k_params_twbp.h_view(i,j).acore = twbp->acore;
k_params_twbp.h_view(i,j).ecore = twbp->ecore;
k_params_twbp.h_view(i,j).rcore = twbp->rcore;
k_params_twbp.h_view(i,j).lgre = twbp->lgre;
k_params_twbp.h_view(i,j).lgcij = twbp->lgcij;
// bond order
k_params_twbp.h_view(i,j).r_s = twbp->r_s;
k_params_twbp.h_view(i,j).r_pi = twbp->r_p;
k_params_twbp.h_view(i,j).r_pi2 = twbp->r_pp;
k_params_twbp.h_view(i,j).p_bo1 = twbp->p_bo1;
k_params_twbp.h_view(i,j).p_bo2 = twbp->p_bo2;
k_params_twbp.h_view(i,j).p_bo3 = twbp->p_bo3;
k_params_twbp.h_view(i,j).p_bo4 = twbp->p_bo4;
k_params_twbp.h_view(i,j).p_bo5 = twbp->p_bo5;
k_params_twbp.h_view(i,j).p_bo6 = twbp->p_bo6;
k_params_twbp.h_view(i,j).p_boc3 = twbp->p_boc3;
k_params_twbp.h_view(i,j).p_boc4 = twbp->p_boc4;
k_params_twbp.h_view(i,j).p_boc5 = twbp->p_boc5;
k_params_twbp.h_view(i,j).ovc = twbp->ovc;
k_params_twbp.h_view(i,j).v13cor = twbp->v13cor;
// bond energy
k_params_twbp.h_view(i,j).p_be1 = twbp->p_be1;
k_params_twbp.h_view(i,j).p_be2 = twbp->p_be2;
k_params_twbp.h_view(i,j).De_s = twbp->De_s;
k_params_twbp.h_view(i,j).De_p = twbp->De_p;
k_params_twbp.h_view(i,j).De_pp = twbp->De_pp;
// multibody
k_params_twbp.h_view(i,j).p_ovun1 = twbp->p_ovun1;
for (k = 1; k <= n; k++) {
// Angular
thbh = &(system->reax_param.thbp[map[i]][map[j]][map[k]]);
thbp = &(thbh->prm[0]);
k_params_thbp.h_view(i,j,k).cnt = thbh->cnt;
k_params_thbp.h_view(i,j,k).theta_00 = thbp->theta_00;
k_params_thbp.h_view(i,j,k).p_val1 = thbp->p_val1;
k_params_thbp.h_view(i,j,k).p_val2 = thbp->p_val2;
k_params_thbp.h_view(i,j,k).p_val4 = thbp->p_val4;
k_params_thbp.h_view(i,j,k).p_val7 = thbp->p_val7;
k_params_thbp.h_view(i,j,k).p_pen1 = thbp->p_pen1;
k_params_thbp.h_view(i,j,k).p_coa1 = thbp->p_coa1;
// Hydrogen Bond
hbp = &(system->reax_param.hbp[map[i]][map[j]][map[k]]);
k_params_hbp.h_view(i,j,k).p_hb1 = hbp->p_hb1;
k_params_hbp.h_view(i,j,k).p_hb2 = hbp->p_hb2;
k_params_hbp.h_view(i,j,k).p_hb3 = hbp->p_hb3;
k_params_hbp.h_view(i,j,k).r0_hb = hbp->r0_hb;
for (m = 1; m <= n; m++) {
// Torsion
fbh = &(system->reax_param.fbp[map[i]][map[j]][map[k]][map[m]]);
fbp = &(fbh->prm[0]);
k_params_fbp.h_view(i,j,k,m).p_tor1 = fbp->p_tor1;
k_params_fbp.h_view(i,j,k,m).p_cot1 = fbp->p_cot1;
k_params_fbp.h_view(i,j,k,m).V1 = fbp->V1;
k_params_fbp.h_view(i,j,k,m).V2 = fbp->V2;
k_params_fbp.h_view(i,j,k,m).V3 = fbp->V3;
}
}
}
}
k_params_sing.template modify<LMPHostType>();
k_params_twbp.template modify<LMPHostType>();
k_params_thbp.template modify<LMPHostType>();
k_params_fbp.template modify<LMPHostType>();
k_params_hbp.template modify<LMPHostType>();
// cutoffs
cut_nbsq = control->nonb_cut * control->nonb_cut;
cut_hbsq = control->hbond_cut * control->hbond_cut;
cut_bosq = control->bond_cut * control->bond_cut;
// bond order cutoffs
bo_cut = 0.01 * gp[29];
thb_cut = control->thb_cut;
thb_cutsq = 0.000010; //thb_cut*thb_cut;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairReaxCKokkos<DeviceType>::init_md()
{
// init_taper()
F_FLOAT d1, d7, swa, swa2, swa3, swb, swb2, swb3;
swa = control->nonb_low;
swb = control->nonb_cut;
if (fabs(swa) > 0.01 )
error->warning(FLERR,"Warning: non-zero lower Taper-radius cutoff");
if (swb < 0)
error->one(FLERR,"Negative upper Taper-radius cutoff");
else if (swb < 5) {
char str[128];
sprintf(str,"Warning: very low Taper-radius cutoff: %f\n", swb);
error->one(FLERR,str);
}
d1 = swb - swa;
d7 = powint(d1,7);
swa2 = swa * swa;
swa3 = swa * swa2;
swb2 = swb * swb;
swb3 = swb * swb2;
k_tap.h_view(7) = 20.0/d7;
k_tap.h_view(6) = -70.0 * (swa + swb) / d7;
k_tap.h_view(5) = 84.0 * (swa2 + 3.0*swa*swb + swb2) / d7;
k_tap.h_view(4) = -35.0 * (swa3 + 9.0*swa2*swb + 9.0*swa*swb2 + swb3 ) / d7;
k_tap.h_view(3) = 140.0 * (swa3*swb + 3.0*swa2*swb2 + swa*swb3 ) / d7;
k_tap.h_view(2) =-210.0 * (swa3*swb2 + swa2*swb3) / d7;
k_tap.h_view(1) = 140.0 * swa3 * swb3 / d7;
k_tap.h_view(0) = (-35.0*swa3*swb2*swb2 + 21.0*swa2*swb3*swb2 +
7.0*swa*swb3*swb3 + swb3*swb3*swb ) / d7;
k_tap.template modify<LMPHostType>();
k_tap.template sync<DeviceType>();
if ( control->tabulate ) {
int ntypes = atom->ntypes;
Init_Lookup_Tables();
k_LR = tdual_LR_lookup_table_kk_2d("lookup:LR",ntypes+1,ntypes+1);
d_LR = k_LR.d_view;
for (int i = 1; i <= ntypes; ++i) {
for (int j = i; j <= ntypes; ++j) {
int n = LR[i][j].n;
if (n == 0) continue;
k_LR.h_view(i,j).xmin = LR[i][j].xmin;
k_LR.h_view(i,j).xmax = LR[i][j].xmax;
k_LR.h_view(i,j).n = LR[i][j].n;
k_LR.h_view(i,j).dx = LR[i][j].dx;
k_LR.h_view(i,j).inv_dx = LR[i][j].inv_dx;
k_LR.h_view(i,j).a = LR[i][j].a;
k_LR.h_view(i,j).m = LR[i][j].m;
k_LR.h_view(i,j).c = LR[i][j].c;
k_LR.h_view(i,j).k_y = tdual_LR_data_1d("lookup:LR[i,j].y",n);
k_LR.h_view(i,j).k_H = tdual_cubic_spline_coef_1d("lookup:LR[i,j].H",n);
k_LR.h_view(i,j).k_vdW = tdual_cubic_spline_coef_1d("lookup:LR[i,j].vdW",n);
k_LR.h_view(i,j).k_CEvd = tdual_cubic_spline_coef_1d("lookup:LR[i,j].CEvd",n);
k_LR.h_view(i,j).k_ele = tdual_cubic_spline_coef_1d("lookup:LR[i,j].ele",n);
k_LR.h_view(i,j).k_CEclmb = tdual_cubic_spline_coef_1d("lookup:LR[i,j].CEclmb",n);
k_LR.h_view(i,j).d_y = k_LR.h_view(i,j).k_y.d_view;
k_LR.h_view(i,j).d_H = k_LR.h_view(i,j).k_H.d_view;
k_LR.h_view(i,j).d_vdW = k_LR.h_view(i,j).k_vdW.d_view;
k_LR.h_view(i,j).d_CEvd = k_LR.h_view(i,j).k_CEvd.d_view;
k_LR.h_view(i,j).d_ele = k_LR.h_view(i,j).k_ele.d_view;
k_LR.h_view(i,j).d_CEclmb = k_LR.h_view(i,j).k_CEclmb.d_view;
for (int k = 0; k < n; k++) {
k_LR.h_view(i,j).k_y.h_view(k) = LR[i][j].y[k];
k_LR.h_view(i,j).k_H.h_view(k) = LR[i][j].H[k];
k_LR.h_view(i,j).k_vdW.h_view(k) = LR[i][j].vdW[k];
k_LR.h_view(i,j).k_CEvd.h_view(k) = LR[i][j].CEvd[k];
k_LR.h_view(i,j).k_ele.h_view(k) = LR[i][j].ele[k];
k_LR.h_view(i,j).k_CEclmb.h_view(k) = LR[i][j].CEclmb[k];
}
k_LR.h_view(i,j).k_y.template modify<LMPHostType>();
k_LR.h_view(i,j).k_H.template modify<LMPHostType>();
k_LR.h_view(i,j).k_vdW.template modify<LMPHostType>();
k_LR.h_view(i,j).k_CEvd.template modify<LMPHostType>();
k_LR.h_view(i,j).k_ele.template modify<LMPHostType>();
k_LR.h_view(i,j).k_CEclmb.template modify<LMPHostType>();
k_LR.h_view(i,j).k_y.template sync<DeviceType>();
k_LR.h_view(i,j).k_H.template sync<DeviceType>();
k_LR.h_view(i,j).k_vdW.template sync<DeviceType>();
k_LR.h_view(i,j).k_CEvd.template sync<DeviceType>();
k_LR.h_view(i,j).k_ele.template sync<DeviceType>();
k_LR.h_view(i,j).k_CEclmb.template sync<DeviceType>();
}
}
k_LR.template modify<LMPHostType>();
k_LR.template sync<DeviceType>();
Deallocate_Lookup_Tables();
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
int PairReaxCKokkos<DeviceType>::Init_Lookup_Tables()
{
int i, j, r;
int num_atom_types;
double dr;
double *h, *fh, *fvdw, *fele, *fCEvd, *fCEclmb;
double v0_vdw, v0_ele, vlast_vdw, vlast_ele;
/* initializations */
v0_vdw = 0;
v0_ele = 0;
vlast_vdw = 0;
vlast_ele = 0;
num_atom_types = atom->ntypes;
dr = control->nonb_cut / control->tabulate;
h = (double*)
smalloc( (control->tabulate+2) * sizeof(double), "lookup:h", world );
fh = (double*)
smalloc( (control->tabulate+2) * sizeof(double), "lookup:fh", world );
fvdw = (double*)
smalloc( (control->tabulate+2) * sizeof(double), "lookup:fvdw", world );
fCEvd = (double*)
smalloc( (control->tabulate+2) * sizeof(double), "lookup:fCEvd", world );
fele = (double*)
smalloc( (control->tabulate+2) * sizeof(double), "lookup:fele", world );
fCEclmb = (double*)
smalloc( (control->tabulate+2) * sizeof(double), "lookup:fCEclmb", world );
LR = (LR_lookup_table**)
scalloc( num_atom_types+1, sizeof(LR_lookup_table*), "lookup:LR", world );
for( i = 0; i < num_atom_types+1; ++i )
LR[i] = (LR_lookup_table*)
scalloc( num_atom_types+1, sizeof(LR_lookup_table), "lookup:LR[i]", world );
for( i = 1; i <= num_atom_types; ++i ) {
for( j = i; j <= num_atom_types; ++j ) {
LR[i][j].xmin = 0;
LR[i][j].xmax = control->nonb_cut;
LR[i][j].n = control->tabulate + 2;
LR[i][j].dx = dr;
LR[i][j].inv_dx = control->tabulate / control->nonb_cut;
LR[i][j].y = (LR_data*)
smalloc( LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y", world );
LR[i][j].H = (cubic_spline_coef*)
smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H" ,
world );
LR[i][j].vdW = (cubic_spline_coef*)
smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW",
world);
LR[i][j].CEvd = (cubic_spline_coef*)
smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd",
world);
LR[i][j].ele = (cubic_spline_coef*)
smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele",
world );
LR[i][j].CEclmb = (cubic_spline_coef*)
smalloc( LR[i][j].n*sizeof(cubic_spline_coef),
"lookup:LR[i,j].CEclmb", world );
for( r = 1; r <= control->tabulate; ++r ) {
LR_vdW_Coulomb(i, j, r * dr, &(LR[i][j].y[r]) );
h[r] = LR[i][j].dx;
fh[r] = LR[i][j].y[r].H;
fvdw[r] = LR[i][j].y[r].e_vdW;
fCEvd[r] = LR[i][j].y[r].CEvd;
fele[r] = LR[i][j].y[r].e_ele;
fCEclmb[r] = LR[i][j].y[r].CEclmb;
}
// init the start-end points
h[r] = LR[i][j].dx;
v0_vdw = LR[i][j].y[1].CEvd;
v0_ele = LR[i][j].y[1].CEclmb;
fh[r] = fh[r-1];
fvdw[r] = fvdw[r-1];
fCEvd[r] = fCEvd[r-1];
fele[r] = fele[r-1];
fCEclmb[r] = fCEclmb[r-1];
vlast_vdw = fCEvd[r-1];
vlast_ele = fele[r-1];
Natural_Cubic_Spline( &h[1], &fh[1],
&(LR[i][j].H[1]), control->tabulate+1, world );
Complete_Cubic_Spline( &h[1], &fvdw[1], v0_vdw, vlast_vdw,
&(LR[i][j].vdW[1]), control->tabulate+1,
world );
Natural_Cubic_Spline( &h[1], &fCEvd[1],
&(LR[i][j].CEvd[1]), control->tabulate+1,
world );
Complete_Cubic_Spline( &h[1], &fele[1], v0_ele, vlast_ele,
&(LR[i][j].ele[1]), control->tabulate+1,
world );
Natural_Cubic_Spline( &h[1], &fCEclmb[1],
&(LR[i][j].CEclmb[1]), control->tabulate+1,
world );
}// else{
// LR[i][j].n = 0;
//}//
}
free(h);
free(fh);
free(fvdw);
free(fCEvd);
free(fele);
free(fCEclmb);
return 1;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairReaxCKokkos<DeviceType>::Deallocate_Lookup_Tables()
{
int i, j;
int ntypes;
ntypes = atom->ntypes;
for( i = 0; i < ntypes; ++i ) {
for( j = i; j < ntypes; ++j )
if( LR[i][j].n ) {
sfree( LR[i][j].y, "LR[i,j].y" );
sfree( LR[i][j].H, "LR[i,j].H" );
sfree( LR[i][j].vdW, "LR[i,j].vdW" );
sfree( LR[i][j].CEvd, "LR[i,j].CEvd" );
sfree( LR[i][j].ele, "LR[i,j].ele" );
sfree( LR[i][j].CEclmb, "LR[i,j].CEclmb" );
}
sfree( LR[i], "LR[i]" );
}
sfree( LR, "LR" );
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairReaxCKokkos<DeviceType>::LR_vdW_Coulomb( int i, int j, double r_ij, LR_data *lr )
{
double p_vdW1 = system->reax_param.gp.l[28];
double p_vdW1i = 1.0 / p_vdW1;
double powr_vdW1, powgi_vdW1;
double tmp, fn13, exp1, exp2;
double Tap, dTap, dfn13;
double dr3gamij_1, dr3gamij_3;
double e_core, de_core;
double e_lg, de_lg, r_ij5, r_ij6, re6;
two_body_parameters *twbp;
twbp = &(system->reax_param.tbp[map[i]][map[j]]);
e_core = 0;
de_core = 0;
e_lg = de_lg = 0.0;
/* calculate taper and its derivative */
Tap = k_tap.h_view[7] * r_ij + k_tap.h_view[6];
Tap = Tap * r_ij + k_tap.h_view[5];
Tap = Tap * r_ij + k_tap.h_view[4];
Tap = Tap * r_ij + k_tap.h_view[3];
Tap = Tap * r_ij + k_tap.h_view[2];
Tap = Tap * r_ij + k_tap.h_view[1];
Tap = Tap * r_ij + k_tap.h_view[0];
dTap = 7*k_tap.h_view[7] * r_ij + 6*k_tap.h_view[6];
dTap = dTap * r_ij + 5*k_tap.h_view[5];
dTap = dTap * r_ij + 4*k_tap.h_view[4];
dTap = dTap * r_ij + 3*k_tap.h_view[3];
dTap = dTap * r_ij + 2*k_tap.h_view[2];
dTap += k_tap.h_view[1]/r_ij;
/*vdWaals Calculations*/
if(system->reax_param.gp.vdw_type==1 || system->reax_param.gp.vdw_type==3)
{ // shielding
powr_vdW1 = pow(r_ij, p_vdW1);
powgi_vdW1 = pow( 1.0 / twbp->gamma_w, p_vdW1);
fn13 = pow( powr_vdW1 + powgi_vdW1, p_vdW1i );
exp1 = exp( twbp->alpha * (1.0 - fn13 / twbp->r_vdW) );
exp2 = exp( 0.5 * twbp->alpha * (1.0 - fn13 / twbp->r_vdW) );
lr->e_vdW = Tap * twbp->D * (exp1 - 2.0 * exp2);
dfn13 = pow( powr_vdW1 + powgi_vdW1, p_vdW1i-1.0) * pow(r_ij, p_vdW1-2.0);
lr->CEvd = dTap * twbp->D * (exp1 - 2.0 * exp2) -
Tap * twbp->D * (twbp->alpha / twbp->r_vdW) * (exp1 - exp2) * dfn13;
}
else{ // no shielding
exp1 = exp( twbp->alpha * (1.0 - r_ij / twbp->r_vdW) );
exp2 = exp( 0.5 * twbp->alpha * (1.0 - r_ij / twbp->r_vdW) );
lr->e_vdW = Tap * twbp->D * (exp1 - 2.0 * exp2);
lr->CEvd = dTap * twbp->D * (exp1 - 2.0 * exp2) -
Tap * twbp->D * (twbp->alpha / twbp->r_vdW) * (exp1 - exp2) / r_ij;
}
if(system->reax_param.gp.vdw_type==2 || system->reax_param.gp.vdw_type==3)
{ // innner wall
e_core = twbp->ecore * exp(twbp->acore * (1.0-(r_ij/twbp->rcore)));
lr->e_vdW += Tap * e_core;
de_core = -(twbp->acore/twbp->rcore) * e_core;
lr->CEvd += dTap * e_core + Tap * de_core / r_ij;
// lg correction, only if lgvdw is yes
if (control->lgflag) {
r_ij5 = powint( r_ij, 5 );
r_ij6 = powint( r_ij, 6 );
re6 = powint( twbp->lgre, 6 );
e_lg = -(twbp->lgcij/( r_ij6 + re6 ));
lr->e_vdW += Tap * e_lg;
de_lg = -6.0 * e_lg * r_ij5 / ( r_ij6 + re6 ) ;
lr->CEvd += dTap * e_lg + Tap * de_lg/r_ij;
}
}
/* Coulomb calculations */
dr3gamij_1 = ( r_ij * r_ij * r_ij + twbp->gamma );
dr3gamij_3 = pow( dr3gamij_1 , 0.33333333333333 );
tmp = Tap / dr3gamij_3;
lr->H = EV_to_KCALpMOL * tmp;
lr->e_ele = C_ele * tmp;
lr->CEclmb = C_ele * ( dTap - Tap * r_ij / dr3gamij_1 ) / dr3gamij_3;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
{
bocnt = hbcnt = 0;
eflag = eflag_in;
vflag = vflag_in;
if (neighflag == FULL) no_virial_fdotr_compute = 1;
if (eflag || vflag) ev_setup(eflag,vflag);
else evflag = vflag_fdotr = 0;
- // reallocate per-atom arrays if necessary
-
- if (eflag_atom) {
- if (k_eatom.dimension_0()<maxeatom) {
- memory->destroy_kokkos(k_eatom,eatom);
- memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom");
- d_eatom = k_eatom.d_view;
- h_eatom = k_eatom.h_view;
- v_eatom = k_eatom.view<DeviceType>();
- }
- }
- if (vflag_atom) {
- if (k_vatom.dimension_0()<maxvatom) {
- memory->destroy_kokkos(k_vatom,vatom);
- memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom");
- d_vatom = k_vatom.d_view;
- h_vatom = k_vatom.h_view;
- v_vatom = k_vatom.view<DeviceType>();
- }
- }
atomKK->sync(execution_space,datamask_read);
k_params_sing.template sync<DeviceType>();
k_params_twbp.template sync<DeviceType>();
k_params_thbp.template sync<DeviceType>();
k_params_fbp.template sync<DeviceType>();
k_params_hbp.template sync<DeviceType>();
if (eflag || vflag) atomKK->modified(execution_space,datamask_modify);
else atomKK->modified(execution_space,F_MASK);
x = atomKK->k_x.view<DeviceType>();
f = atomKK->k_f.view<DeviceType>();
q = atomKK->k_q.view<DeviceType>();
tag = atomKK->k_tag.view<DeviceType>();
type = atomKK->k_type.view<DeviceType>();
nlocal = atomKK->nlocal;
nall = atom->nlocal + atom->nghost;
newton_pair = force->newton_pair;
const int inum = list->inum;
const int ignum = inum + list->gnum;
NeighListKokkos<DeviceType>* k_list = static_cast<NeighListKokkos<DeviceType>*>(list);
d_numneigh = k_list->d_numneigh;
d_neighbors = k_list->d_neighbors;
d_ilist = k_list->d_ilist;
k_list->clean_copy();
if (eflag_global) {
for (int i = 0; i < 14; i++)
pvector[i] = 0.0;
}
copymode = 1;
EV_FLOAT_REAX ev;
EV_FLOAT_REAX ev_all;
- const int teamsize = TEAMSIZE;
- int maxtmp = 0;
// Polarization (self)
if (neighflag == HALF) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputePolar<HALF,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputePolar<HALF,0> >(0,inum),*this);
} else { //if (neighflag == HALFTHREAD) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputePolar<HALFTHREAD,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputePolar<HALFTHREAD,0> >(0,inum),*this);
}
DeviceType::fence();
ev_all += ev;
pvector[13] = ev.ecoul;
// LJ + Coulomb
if (control->tabulate) {
if (neighflag == HALF) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeTabulatedLJCoulomb<HALF,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeTabulatedLJCoulomb<HALF,0> >(0,inum),*this);
} else if (neighflag == HALFTHREAD) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeTabulatedLJCoulomb<HALFTHREAD,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeTabulatedLJCoulomb<HALFTHREAD,0> >(0,inum),*this);
} else if (neighflag == FULL) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeTabulatedLJCoulomb<FULL,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeTabulatedLJCoulomb<FULL,0> >(0,inum),*this);
}
} else {
if (neighflag == HALF) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeLJCoulomb<HALF,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeLJCoulomb<HALF,0> >(0,inum),*this);
} else if (neighflag == HALFTHREAD) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeLJCoulomb<HALFTHREAD,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeLJCoulomb<HALFTHREAD,0> >(0,inum),*this);
} else if (neighflag == FULL) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeLJCoulomb<FULL,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeLJCoulomb<FULL,0> >(0,inum),*this);
}
}
DeviceType::fence();
ev_all += ev;
pvector[10] = ev.evdwl;
pvector[11] = ev.ecoul;
if (atom->nmax > nmax) {
nmax = atom->nmax;
allocate_array();
}
// Neighbor lists for bond and hbond
// try, resize if necessary
int resize = 1;
while (resize) {
resize = 0;
k_resize_bo.h_view() = 0;
k_resize_bo.modify<LMPHostType>();
k_resize_bo.sync<DeviceType>();
k_resize_hb.h_view() = 0;
k_resize_hb.modify<LMPHostType>();
k_resize_hb.sync<DeviceType>();
// zero
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxZero>(0,nmax),*this);
DeviceType::fence();
if (neighflag == HALF)
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxBuildListsHalf<HALF> >(0,ignum),*this);
else if (neighflag == HALFTHREAD)
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxBuildListsHalf_LessAtomics<HALFTHREAD> >(0,ignum),*this);
else //(neighflag == FULL)
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxBuildListsFull>(0,ignum),*this);
DeviceType::fence();
k_resize_bo.modify<DeviceType>();
k_resize_bo.sync<LMPHostType>();
int resize_bo = k_resize_bo.h_view();
if (resize_bo) maxbo++;
k_resize_hb.modify<DeviceType>();
k_resize_hb.sync<LMPHostType>();
int resize_hb = k_resize_hb.h_view();
if (resize_hb) maxhb++;
resize = resize_bo || resize_hb;
if (resize) allocate_array();
}
// Bond order
if (neighflag == HALF) {
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxBondOrder1>(0,ignum),*this);
DeviceType::fence();
} else if (neighflag == HALFTHREAD) {
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxBondOrder1_LessAtomics>(0,ignum),*this);
DeviceType::fence();
}
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxBondOrder2>(0,ignum),*this);
DeviceType::fence();
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxBondOrder3>(0,ignum),*this);
DeviceType::fence();
// Bond energy
if (neighflag == HALF) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeBond1<HALF,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeBond1<HALF,0> >(0,inum),*this);
DeviceType::fence();
ev_all += ev;
pvector[0] = ev.evdwl;
} else { //if (neighflag == HALFTHREAD) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeBond1<HALFTHREAD,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeBond1<HALFTHREAD,0> >(0,inum),*this);
DeviceType::fence();
ev_all += ev;
pvector[0] = ev.evdwl;
}
// Multi-body corrections
if (neighflag == HALF) {
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeMulti1<HALF,0> >(0,inum),*this);
DeviceType::fence();
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeMulti2<HALF,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeMulti2<HALF,0> >(0,inum),*this);
DeviceType::fence();
ev_all += ev;
} else { //if (neighflag == HALFTHREAD) {
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeMulti1<HALFTHREAD,0> >(0,inum),*this);
DeviceType::fence();
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeMulti2<HALFTHREAD,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeMulti2<HALFTHREAD,0> >(0,inum),*this);
DeviceType::fence();
ev_all += ev;
}
pvector[2] = ev.ereax[0];
pvector[1] = ev.ereax[1]+ev.ereax[2];
pvector[3] = 0.0;
ev_all.evdwl += ev.ereax[0] + ev.ereax[1] + ev.ereax[2];
// Angular
if (neighflag == HALF) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeAngular<HALF,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeAngular<HALF,0> >(0,inum),*this);
DeviceType::fence();
ev_all += ev;
} else { //if (neighflag == HALFTHREAD) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeAngular<HALFTHREAD,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeAngular<HALFTHREAD,0> >(0,inum),*this);
DeviceType::fence();
ev_all += ev;
}
pvector[4] = ev.ereax[3];
pvector[5] = ev.ereax[4];
pvector[6] = ev.ereax[5];
ev_all.evdwl += ev.ereax[3] + ev.ereax[4] + ev.ereax[5];
// Torsion
if (neighflag == HALF) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeTorsion<HALF,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeTorsion<HALF,0> >(0,inum),*this);
DeviceType::fence();
ev_all += ev;
} else { //if (neighflag == HALFTHREAD) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeTorsion<HALFTHREAD,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeTorsion<HALFTHREAD,0> >(0,inum),*this);
DeviceType::fence();
ev_all += ev;
}
pvector[8] = ev.ereax[6];
pvector[9] = ev.ereax[7];
ev_all.evdwl += ev.ereax[6] + ev.ereax[7];
// Hydrogen Bond
if (cut_hbsq > 0.0) {
if (neighflag == HALF) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeHydrogen<HALF,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeHydrogen<HALF,0> >(0,inum),*this);
DeviceType::fence();
ev_all += ev;
} else { //if (neighflag == HALFTHREAD) {
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeHydrogen<HALFTHREAD,1> >(0,inum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeHydrogen<HALFTHREAD,0> >(0,inum),*this);
DeviceType::fence();
ev_all += ev;
}
}
pvector[7] = ev.ereax[8];
ev_all.evdwl += ev.ereax[8];
// Bond force
if (neighflag == HALF) {
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxUpdateBond<HALF> >(0,ignum),*this);
DeviceType::fence();
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeBond2<HALF,1> >(0,ignum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeBond2<HALF,0> >(0,ignum),*this);
DeviceType::fence();
ev_all += ev;
pvector[0] += ev.evdwl;
} else { //if (neighflag == HALFTHREAD) {
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxUpdateBond<HALFTHREAD> >(0,ignum),*this);
DeviceType::fence();
if (evflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeBond2<HALFTHREAD,1> >(0,ignum),*this,ev);
else
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxComputeBond2<HALFTHREAD,0> >(0,ignum),*this);
DeviceType::fence();
ev_all += ev;
pvector[0] += ev.evdwl;
}
if (eflag_global) {
eng_vdwl += ev_all.evdwl;
eng_coul += ev_all.ecoul;
}
if (vflag_global) {
virial[0] += ev_all.v[0];
virial[1] += ev_all.v[1];
virial[2] += ev_all.v[2];
virial[3] += ev_all.v[3];
virial[4] += ev_all.v[4];
virial[5] += ev_all.v[5];
}
if (vflag_fdotr) pair_virial_fdotr_compute(this);
if (eflag_atom) {
k_eatom.template modify<DeviceType>();
k_eatom.template sync<LMPHostType>();
}
if (vflag_atom) {
k_vatom.template modify<DeviceType>();
k_vatom.template sync<LMPHostType>();
}
copymode = 0;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputePolar<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT_REAX& ev) const {
const int i = d_ilist[ii];
const int itype = type(i);
const F_FLOAT qi = q(i);
const F_FLOAT chi = paramssing(itype).chi;
const F_FLOAT eta = paramssing(itype).eta;
const F_FLOAT epol = KCALpMOL_to_EV*(chi*qi+(eta/2.0)*qi*qi);
if (eflag) ev.ecoul += epol;
//if (eflag_atom) this->template ev_tally<NEIGHFLAG>(ev,i,i,epol,0.0,0.0,0.0,0.0);
if (eflag_atom) this->template e_tally_single<NEIGHFLAG>(ev,i,epol);
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputePolar<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT_REAX ev;
this->template operator()<NEIGHFLAG,EVFLAG>(PairReaxComputePolar<NEIGHFLAG,EVFLAG>(), ii, ev);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeLJCoulomb<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT_REAX& ev) const {
// The f array is atomic for Half/Thread neighbor style
Kokkos::View<F_FLOAT*[3], typename DAT::t_f_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_f = f;
F_FLOAT powr_vdw, powgi_vdw, fn13, dfn13, exp1, exp2, etmp;
F_FLOAT evdwl, fvdwl;
evdwl = fvdwl = 0.0;
const int i = d_ilist[ii];
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
const F_FLOAT qi = q(i);
const int itype = type(i);
const int itag = tag(i);
const int jnum = d_numneigh[i];
F_FLOAT fxtmp, fytmp, fztmp;
fxtmp = fytmp = fztmp = 0.0;
for (int jj = 0; jj < jnum; jj++) {
int j = d_neighbors(i,jj);
j &= NEIGHMASK;
const int jtype = type(j);
const int jtag = tag(j);
const F_FLOAT qj = q(j);
if (NEIGHFLAG != FULL) {
// skip half of the interactions
if (j >= nlocal) {
if (itag > jtag) {
if ((itag+jtag) % 2 == 0) continue;
} else if (itag < jtag) {
if ((itag+jtag) % 2 == 1) continue;
} else {
if (x(j,2) < ztmp) continue;
if (x(j,2) == ztmp && x(j,1) < ytmp) continue;
if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue;
}
}
}
const X_FLOAT delx = x(j,0) - xtmp;
const X_FLOAT dely = x(j,1) - ytmp;
const X_FLOAT delz = x(j,2) - ztmp;
const F_FLOAT rsq = delx*delx + dely*dely + delz*delz;
if (rsq > cut_nbsq) continue;
const F_FLOAT rij = sqrt(rsq);
// LJ energy/force
F_FLOAT Tap = d_tap[7] * rij + d_tap[6];
Tap = Tap * rij + d_tap[5];
Tap = Tap * rij + d_tap[4];
Tap = Tap * rij + d_tap[3];
Tap = Tap * rij + d_tap[2];
Tap = Tap * rij + d_tap[1];
Tap = Tap * rij + d_tap[0];
F_FLOAT dTap = 7*d_tap[7] * rij + 6*d_tap[6];
dTap = dTap * rij + 5*d_tap[5];
dTap = dTap * rij + 4*d_tap[4];
dTap = dTap * rij + 3*d_tap[3];
dTap = dTap * rij + 2*d_tap[2];
dTap += d_tap[1]/rij;
const F_FLOAT gamma_w = paramstwbp(itype,jtype).gamma_w;
const F_FLOAT alpha = paramstwbp(itype,jtype).alpha;
const F_FLOAT r_vdw = paramstwbp(itype,jtype).r_vdw;
const F_FLOAT epsilon = paramstwbp(itype,jtype).epsilon;
// shielding
if (vdwflag == 1 || vdwflag == 3) {
powr_vdw = pow(rij,gp[28]);
powgi_vdw = pow(1.0/gamma_w,gp[28]);
fn13 = pow(powr_vdw+powgi_vdw,1.0/gp[28]);
exp1 = exp(alpha*(1.0-fn13/r_vdw));
exp2 = exp(0.5*alpha*(1.0-fn13/r_vdw));
dfn13 = pow(powr_vdw+powgi_vdw,1.0/gp[28]-1.0)*pow(rij,gp[28]-2.0);
etmp = epsilon*(exp1-2.0*exp2);
evdwl = Tap*etmp;
fvdwl = dTap*etmp-Tap*epsilon*(alpha/r_vdw)*(exp1-exp2)*dfn13;
} else {
exp1 = exp(alpha*(1.0-rij/r_vdw));
exp2 = exp(0.5*alpha*(1.0-rij/r_vdw));
etmp = epsilon*(exp1-2.0*exp2);
evdwl = Tap*etmp;
fvdwl = dTap*etmp-Tap*epsilon*(alpha/r_vdw)*(exp1-exp2)*rij;
}
// inner wall
if (vdwflag == 2 || vdwflag == 3) {
const F_FLOAT ecore = paramstwbp(itype,jtype).ecore;
const F_FLOAT acore = paramstwbp(itype,jtype).acore;
const F_FLOAT rcore = paramstwbp(itype,jtype).rcore;
const F_FLOAT e_core = ecore*exp(acore*(1.0-(rij/rcore)));
const F_FLOAT de_core = -(acore/rcore)*e_core;
evdwl += Tap*e_core;
fvdwl += dTap*e_core+Tap*de_core/rij;
if (lgflag) {
const F_FLOAT lgre = paramstwbp(itype,jtype).lgre;
const F_FLOAT lgcij = paramstwbp(itype,jtype).lgcij;
const F_FLOAT rij5 = rsq*rsq*rij;
const F_FLOAT rij6 = rij5*rij;
const F_FLOAT re6 = lgre*lgre*lgre*lgre*lgre*lgre;
const F_FLOAT elg = -lgcij/(rij6+re6);
const F_FLOAT delg = -6.0*elg*rij5/(rij6+re6);
evdwl += Tap*elg;
fvdwl += dTap*elg+Tap*delg/rij;
}
}
// Coulomb energy/force
const F_FLOAT shld = paramstwbp(itype,jtype).gamma;
const F_FLOAT denom1 = rij * rij * rij + shld;
const F_FLOAT denom3 = pow(denom1,0.3333333333333);
const F_FLOAT ecoul = C_ele * qi*qj*Tap/denom3;
const F_FLOAT fcoul = C_ele * qi*qj*(dTap-Tap*rij/denom1)/denom3;
const F_FLOAT ftotal = fvdwl + fcoul;
fxtmp += delx*ftotal;
fytmp += dely*ftotal;
fztmp += delz*ftotal;
if (NEIGHFLAG != FULL) {
a_f(j,0) -= delx*ftotal;
a_f(j,1) -= dely*ftotal;
a_f(j,2) -= delz*ftotal;
}
if (NEIGHFLAG == FULL) {
if (eflag) ev.evdwl += 0.5*evdwl;
if (eflag) ev.ecoul += 0.5*ecoul;
} else {
if (eflag) ev.evdwl += evdwl;
if (eflag) ev.ecoul += ecoul;
}
if (vflag_either || eflag_atom) this->template ev_tally<NEIGHFLAG>(ev,i,j,evdwl+ecoul,-ftotal,delx,dely,delz);
}
a_f(i,0) += fxtmp;
a_f(i,1) += fytmp;
a_f(i,2) += fztmp;
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeLJCoulomb<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT_REAX ev;
this->template operator()<NEIGHFLAG,EVFLAG>(PairReaxComputeLJCoulomb<NEIGHFLAG,EVFLAG>(), ii, ev);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeTabulatedLJCoulomb<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT_REAX& ev) const {
// The f array is atomic for Half/Thread neighbor style
Kokkos::View<F_FLOAT*[3], typename DAT::t_f_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_f = f;
- F_FLOAT powr_vdw, powgi_vdw, fn13, dfn13, exp1, exp2, etmp;
- F_FLOAT evdwl, fvdwl;
- evdwl = fvdwl = 0.0;
-
const int i = d_ilist[ii];
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
const F_FLOAT qi = q(i);
const int itype = type(i);
const int itag = tag(i);
const int jnum = d_numneigh[i];
F_FLOAT fxtmp, fytmp, fztmp;
fxtmp = fytmp = fztmp = 0.0;
for (int jj = 0; jj < jnum; jj++) {
int j = d_neighbors(i,jj);
j &= NEIGHMASK;
const int jtype = type(j);
const int jtag = tag(j);
const F_FLOAT qj = q(j);
if (NEIGHFLAG != FULL) {
// skip half of the interactions
if (j >= nlocal) {
if (itag > jtag) {
if ((itag+jtag) % 2 == 0) continue;
} else if (itag < jtag) {
if ((itag+jtag) % 2 == 1) continue;
} else {
if (x(j,2) < ztmp) continue;
if (x(j,2) == ztmp && x(j,1) < ytmp) continue;
if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue;
}
}
}
const X_FLOAT delx = x(j,0) - xtmp;
const X_FLOAT dely = x(j,1) - ytmp;
const X_FLOAT delz = x(j,2) - ztmp;
const F_FLOAT rsq = delx*delx + dely*dely + delz*delz;
if (rsq > cut_nbsq) continue;
const F_FLOAT rij = sqrt(rsq);
const int tmin = MIN( itype, jtype );
const int tmax = MAX( itype, jtype );
const LR_lookup_table_kk t = d_LR(tmin,tmax);
/* Cubic Spline Interpolation */
int r = (int)(rij * t.inv_dx);
if( r == 0 ) ++r;
const F_FLOAT base = (double)(r+1) * t.dx;
const F_FLOAT dif = rij - base;
const cubic_spline_coef vdW = t.d_vdW[r];
const cubic_spline_coef ele = t.d_ele[r];
const cubic_spline_coef CEvd = t.d_CEvd[r];
const cubic_spline_coef CEclmb = t.d_CEclmb[r];
const F_FLOAT evdwl = ((vdW.d*dif + vdW.c)*dif + vdW.b)*dif +
vdW.a;
const F_FLOAT ecoul = (((ele.d*dif + ele.c)*dif + ele.b)*dif +
ele.a)*qi*qj;
const F_FLOAT fvdwl = ((CEvd.d*dif + CEvd.c)*dif + CEvd.b)*dif +
CEvd.a;
const F_FLOAT fcoul = (((CEclmb.d*dif+CEclmb.c)*dif+CEclmb.b)*dif +
CEclmb.a)*qi*qj;
const F_FLOAT ftotal = fvdwl + fcoul;
fxtmp += delx*ftotal;
fytmp += dely*ftotal;
fztmp += delz*ftotal;
if (NEIGHFLAG != FULL) {
a_f(j,0) -= delx*ftotal;
a_f(j,1) -= dely*ftotal;
a_f(j,2) -= delz*ftotal;
}
if (NEIGHFLAG == FULL) {
if (eflag) ev.evdwl += 0.5*evdwl;
if (eflag) ev.ecoul += 0.5*ecoul;
} else {
if (eflag) ev.evdwl += evdwl;
if (eflag) ev.ecoul += ecoul;
}
if (vflag_either || eflag_atom) this->template ev_tally<NEIGHFLAG>(ev,i,j,evdwl+ecoul,-ftotal,delx,dely,delz);
}
a_f(i,0) += fxtmp;
a_f(i,1) += fytmp;
a_f(i,2) += fztmp;
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeTabulatedLJCoulomb<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT_REAX ev;
this->template operator()<NEIGHFLAG,EVFLAG>(PairReaxComputeTabulatedLJCoulomb<NEIGHFLAG,EVFLAG>(), ii, ev);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairReaxCKokkos<DeviceType>::allocate_array()
{
if (cut_hbsq > 0.0) {
d_hb_first = typename AT::t_int_1d("reax/c/kk:hb_first",nmax);
d_hb_num = typename AT::t_int_1d("reax/c/kk:hb_num",nmax);
d_hb_list = typename AT::t_int_1d("reax/c/kk:hb_list",nmax*maxhb);
}
d_bo_first = typename AT::t_int_1d("reax/c/kk:bo_first",nmax);
d_bo_num = typename AT::t_int_1d("reax/c/kk:bo_num",nmax);
d_bo_list = typename AT::t_int_1d("reax/c/kk:bo_list",nmax*maxbo);
d_BO = typename AT::t_ffloat_2d_dl("reax/c/kk:BO",nmax,maxbo);
d_BO_s = typename AT::t_ffloat_2d_dl("reax/c/kk:BO",nmax,maxbo);
d_BO_pi = typename AT::t_ffloat_2d_dl("reax/c/kk:BO_pi",nmax,maxbo);
d_BO_pi2 = typename AT::t_ffloat_2d_dl("reax/c/kk:BO_pi2",nmax,maxbo);
d_dln_BOp_pix = typename AT::t_ffloat_2d_dl("reax/c/kk:d_dln_BOp_pix",nmax,maxbo);
d_dln_BOp_piy = typename AT::t_ffloat_2d_dl("reax/c/kk:d_dln_BOp_piy",nmax,maxbo);
d_dln_BOp_piz = typename AT::t_ffloat_2d_dl("reax/c/kk:d_dln_BOp_piz",nmax,maxbo);
d_dln_BOp_pi2x = typename AT::t_ffloat_2d_dl("reax/c/kk:d_dln_BOp_pi2x",nmax,maxbo);
d_dln_BOp_pi2y = typename AT::t_ffloat_2d_dl("reax/c/kk:d_dln_BOp_pi2y",nmax,maxbo);
d_dln_BOp_pi2z = typename AT::t_ffloat_2d_dl("reax/c/kk:d_dln_BOp_pi2z",nmax,maxbo);
d_C1dbo = typename AT::t_ffloat_2d_dl("reax/c/kk:d_C1dbo",nmax,maxbo);
d_C2dbo = typename AT::t_ffloat_2d_dl("reax/c/kk:d_C2dbo",nmax,maxbo);
d_C3dbo = typename AT::t_ffloat_2d_dl("reax/c/kk:d_C3dbo",nmax,maxbo);
d_C1dbopi = typename AT::t_ffloat_2d_dl("reax/c/kk:d_C1dbopi",nmax,maxbo);
d_C2dbopi = typename AT::t_ffloat_2d_dl("reax/c/kk:d_C2dbopi",nmax,maxbo);
d_C3dbopi = typename AT::t_ffloat_2d_dl("reax/c/kk:d_C3dbopi",nmax,maxbo);
d_C4dbopi = typename AT::t_ffloat_2d_dl("reax/c/kk:d_C4dbopi",nmax,maxbo);
d_C1dbopi2 = typename AT::t_ffloat_2d_dl("reax/c/kk:d_C1dbopi2",nmax,maxbo);
d_C2dbopi2 = typename AT::t_ffloat_2d_dl("reax/c/kk:d_C2dbopi2",nmax,maxbo);
d_C3dbopi2 = typename AT::t_ffloat_2d_dl("reax/c/kk:d_C3dbopi2",nmax,maxbo);
d_C4dbopi2 = typename AT::t_ffloat_2d_dl("reax/c/kk:d_C4dbopi2",nmax,maxbo);
d_dBOpx = typename AT::t_ffloat_2d_dl("reax/c/kk:dBOpx",nmax,maxbo);
d_dBOpy = typename AT::t_ffloat_2d_dl("reax/c/kk:dBOpy",nmax,maxbo);
d_dBOpz = typename AT::t_ffloat_2d_dl("reax/c/kk:dBOpz",nmax,maxbo);
d_dDeltap_self = typename AT::t_ffloat_2d_dl("reax/c/kk:dDeltap_self",nmax,3);
d_Deltap_boc = typename AT::t_ffloat_1d("reax/c/kk:Deltap_boc",nmax);
d_Deltap = typename AT::t_ffloat_1d("reax/c/kk:Deltap",nmax);
d_total_bo = typename AT::t_ffloat_1d("reax/c/kk:total_bo",nmax);
d_Cdbo = typename AT::t_ffloat_2d_dl("reax/c/kk:Cdbo",nmax,3*maxbo);
d_Cdbopi = typename AT::t_ffloat_2d_dl("reax/c/kk:Cdbopi",nmax,3*maxbo);
d_Cdbopi2 = typename AT::t_ffloat_2d_dl("reax/c/kk:Cdbopi2",nmax,3*maxbo);
d_Delta = typename AT::t_ffloat_1d("reax/c/kk:Delta",nmax);
d_Delta_boc = typename AT::t_ffloat_1d("reax/c/kk:Delta_boc",nmax);
d_dDelta_lp = typename AT::t_ffloat_1d("reax/c/kk:dDelta_lp",nmax);
d_Delta_lp = typename AT::t_ffloat_1d("reax/c/kk:Delta_lp",nmax);
d_Delta_lp_temp = typename AT::t_ffloat_1d("reax/c/kk:Delta_lp_temp",nmax);
d_CdDelta = typename AT::t_ffloat_1d("reax/c/kk:CdDelta",nmax);
d_sum_ovun = typename AT::t_ffloat_2d_dl("reax/c/kk:sum_ovun",nmax,3);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxZero, const int &n) const {
d_total_bo(n) = 0.0;
d_CdDelta(n) = 0.0;
if (neighflag != FULL) {
d_bo_num(n) = 0.0;
d_hb_num(n) = 0.0;
}
for (int j = 0; j < 3; j++)
d_dDeltap_self(n,j) = 0.0;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxBuildListsFull, const int &ii) const {
if (d_resize_bo() || d_resize_hb())
return;
const int i = d_ilist[ii];
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
const int itype = type(i);
const int jnum = d_numneigh[i];
F_FLOAT C12, C34, C56, BO_s, BO_pi, BO_pi2, BO, delij[3], dBOp_i[3], dln_BOp_pi_i[3], dln_BOp_pi2_i[3];
F_FLOAT total_bo = 0.0;
int j_index = i*maxbo;
d_bo_first[i] = j_index;
const int bo_first_i = j_index;
int ihb = -1;
int jhb = -1;
- int jhb_top = -1;
int hb_index = i*maxhb;
int hb_first_i;
if (cut_hbsq > 0.0) {
ihb = paramssing(itype).p_hbond;
if (ihb == 1) {
d_hb_first[i] = hb_index;
hb_first_i = hb_index;
}
}
for (int jj = 0; jj < jnum; jj++) {
int j = d_neighbors(i,jj);
j &= NEIGHMASK;
delij[0] = x(j,0) - xtmp;
delij[1] = x(j,1) - ytmp;
delij[2] = x(j,2) - ztmp;
const F_FLOAT rsq = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2];
double cutoffsq;
if(i < nlocal) cutoffsq = MAX(cut_bosq,cut_hbsq);
else cutoffsq = cut_bosq;
if (rsq > cutoffsq) continue;
const int jtype = type(j);
// hbond list
if (i < nlocal && cut_hbsq > 0.0 && (ihb == 1 || ihb == 2) && rsq <= cut_hbsq) {
jhb = paramssing(jtype).p_hbond;
if( ihb == 1 && jhb == 2) {
const int jj_index = hb_index - hb_first_i;
if (jj_index >= maxhb) {
d_resize_hb() = 1;
return;
}
d_hb_list[hb_index] = j;
hb_index++;
}
}
// bond_list
const F_FLOAT rij = sqrt(rsq);
const F_FLOAT p_bo1 = paramstwbp(itype,jtype).p_bo1;
const F_FLOAT p_bo2 = paramstwbp(itype,jtype).p_bo2;
const F_FLOAT p_bo3 = paramstwbp(itype,jtype).p_bo3;
const F_FLOAT p_bo4 = paramstwbp(itype,jtype).p_bo4;
const F_FLOAT p_bo5 = paramstwbp(itype,jtype).p_bo5;
const F_FLOAT p_bo6 = paramstwbp(itype,jtype).p_bo6;
const F_FLOAT r_s = paramstwbp(itype,jtype).r_s;
const F_FLOAT r_pi = paramstwbp(itype,jtype).r_pi;
const F_FLOAT r_pi2 = paramstwbp(itype,jtype).r_pi2;
if (paramssing(itype).r_s > 0.0 && paramssing(jtype).r_s > 0.0) {
C12 = p_bo1*pow(rij/r_s,p_bo2);
BO_s = (1.0+bo_cut)*exp(C12);
}
else BO_s = C12 = 0.0;
if (paramssing(itype).r_pi > 0.0 && paramssing(jtype).r_pi > 0.0) {
C34 = p_bo3*pow(rij/r_pi,p_bo4);
BO_pi = exp(C34);
}
else BO_pi = C34 = 0.0;
if (paramssing(itype).r_pi2 > 0.0 && paramssing(jtype).r_pi2 > 0.0) {
C56 = p_bo5*pow(rij/r_pi2,p_bo6);
BO_pi2 = exp(C56);
}
else BO_pi2 = C56 = 0.0;
BO = BO_s + BO_pi + BO_pi2;
if (BO < bo_cut) continue;
const int jj_index = j_index - bo_first_i;
if (jj_index >= maxbo) {
d_resize_bo() = 1;
return;
}
d_bo_list[j_index] = j;
// from BondOrder1
d_BO(i,jj_index) = BO;
d_BO_s(i,jj_index) = BO_s;
d_BO_pi(i,jj_index) = BO_pi;
d_BO_pi2(i,jj_index) = BO_pi2;
F_FLOAT Cln_BOp_s = p_bo2 * C12 / rij / rij;
F_FLOAT Cln_BOp_pi = p_bo4 * C34 / rij / rij;
F_FLOAT Cln_BOp_pi2 = p_bo6 * C56 / rij / rij;
if (nlocal == 0)
Cln_BOp_s = Cln_BOp_pi = Cln_BOp_pi2 = 0.0;
for (int d = 0; d < 3; d++) dln_BOp_pi_i[d] = -(BO_pi*Cln_BOp_pi)*delij[d];
for (int d = 0; d < 3; d++) dln_BOp_pi2_i[d] = -(BO_pi2*Cln_BOp_pi2)*delij[d];
for (int d = 0; d < 3; d++) dBOp_i[d] = -(BO_s*Cln_BOp_s+BO_pi*Cln_BOp_pi+BO_pi2*Cln_BOp_pi2)*delij[d];
for (int d = 0; d < 3; d++) d_dDeltap_self(i,d) += dBOp_i[d];
d_dln_BOp_pix(i,jj_index) = dln_BOp_pi_i[0];
d_dln_BOp_piy(i,jj_index) = dln_BOp_pi_i[1];
d_dln_BOp_piz(i,jj_index) = dln_BOp_pi_i[2];
d_dln_BOp_pi2x(i,jj_index) = dln_BOp_pi2_i[0];
d_dln_BOp_pi2y(i,jj_index) = dln_BOp_pi2_i[1];
d_dln_BOp_pi2z(i,jj_index) = dln_BOp_pi2_i[2];
d_dBOpx(i,jj_index) = dBOp_i[0];
d_dBOpy(i,jj_index) = dBOp_i[1];
d_dBOpz(i,jj_index) = dBOp_i[2];
d_BO(i,jj_index) -= bo_cut;
d_BO_s(i,jj_index) -= bo_cut;
total_bo += d_BO(i,jj_index);
j_index++;
}
d_bo_num[i] = j_index - d_bo_first[i];
if (cut_hbsq > 0.0 && ihb == 1) d_hb_num[i] = hb_index - d_hb_first[i];
d_total_bo[i] += total_bo;
const F_FLOAT val_i = paramssing(itype).valency;
d_Deltap[i] = d_total_bo[i] - val_i;
d_Deltap_boc[i] = d_total_bo[i] - paramssing(itype).valency_val;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxBuildListsHalf<NEIGHFLAG>, const int &ii) const {
if (d_resize_bo() || d_resize_hb())
return;
Kokkos::View<F_FLOAT**, typename DAT::t_ffloat_2d_dl::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_dDeltap_self = d_dDeltap_self;
Kokkos::View<F_FLOAT*, typename DAT::t_float_1d::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_total_bo = d_total_bo;
const int i = d_ilist[ii];
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
const int itype = type(i);
const int itag = tag(i);
const int jnum = d_numneigh[i];
F_FLOAT C12, C34, C56, BO_s, BO_pi, BO_pi2, BO, delij[3], dBOp_i[3], dln_BOp_pi_i[3], dln_BOp_pi2_i[3];
F_FLOAT total_bo = 0.0;
int j_index,i_index;
d_bo_first[i] = i*maxbo;
const int bo_first_i = d_bo_first[i];
int ihb = -1;
int jhb = -1;
- int jhb_top = -1;
int hb_first_i;
if (cut_hbsq > 0.0) {
ihb = paramssing(itype).p_hbond;
if (ihb == 1) {
d_hb_first[i] = i*maxhb;
hb_first_i = d_hb_first[i];
}
}
for (int jj = 0; jj < jnum; jj++) {
int j = d_neighbors(i,jj);
j &= NEIGHMASK;
const int jtag = tag(j);
d_bo_first[j] = j*maxbo;
d_hb_first[j] = j*maxhb;
const int jtype = type(j);
delij[0] = x(j,0) - xtmp;
delij[1] = x(j,1) - ytmp;
delij[2] = x(j,2) - ztmp;
const F_FLOAT rsq = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2];
double cutoffsq;
if(i < nlocal) cutoffsq = MAX(cut_bosq,cut_hbsq);
else cutoffsq = cut_bosq;
if (rsq > cutoffsq) continue;
// hbond list
if (i < nlocal && cut_hbsq > 0.0 && (ihb == 1 || ihb == 2) && rsq <= cut_hbsq) {
jhb = paramssing(jtype).p_hbond;
if( ihb == 1 && jhb == 2) {
if (NEIGHFLAG == HALF) {
j_index = hb_first_i + d_hb_num[i];
d_hb_num[i]++;
} else {
j_index = hb_first_i + Kokkos::atomic_fetch_add(&d_hb_num[i],1);
}
const int jj_index = j_index - hb_first_i;
if (jj_index >= maxhb) {
d_resize_hb() = 1;
return;
}
d_hb_list[j_index] = j;
} else if ( j < nlocal && ihb == 2 && jhb == 1) {
if (NEIGHFLAG == HALF) {
i_index = d_hb_first[j] + d_hb_num[j];
d_hb_num[j]++;
} else {
i_index = d_hb_first[j] + Kokkos::atomic_fetch_add(&d_hb_num[j],1);
}
const int ii_index = i_index - d_hb_first[j];
if (ii_index >= maxhb) {
d_resize_hb() = 1;
return;
}
d_hb_list[i_index] = i;
}
}
// bond_list
const F_FLOAT rij = sqrt(rsq);
const F_FLOAT p_bo1 = paramstwbp(itype,jtype).p_bo1;
const F_FLOAT p_bo2 = paramstwbp(itype,jtype).p_bo2;
const F_FLOAT p_bo3 = paramstwbp(itype,jtype).p_bo3;
const F_FLOAT p_bo4 = paramstwbp(itype,jtype).p_bo4;
const F_FLOAT p_bo5 = paramstwbp(itype,jtype).p_bo5;
const F_FLOAT p_bo6 = paramstwbp(itype,jtype).p_bo6;
const F_FLOAT r_s = paramstwbp(itype,jtype).r_s;
const F_FLOAT r_pi = paramstwbp(itype,jtype).r_pi;
const F_FLOAT r_pi2 = paramstwbp(itype,jtype).r_pi2;
if (paramssing(itype).r_s > 0.0 && paramssing(jtype).r_s > 0.0) {
C12 = p_bo1*pow(rij/r_s,p_bo2);
BO_s = (1.0+bo_cut)*exp(C12);
}
else BO_s = C12 = 0.0;
if (paramssing(itype).r_pi > 0.0 && paramssing(jtype).r_pi > 0.0) {
C34 = p_bo3*pow(rij/r_pi,p_bo4);
BO_pi = exp(C34);
}
else BO_pi = C34 = 0.0;
if (paramssing(itype).r_pi2 > 0.0 && paramssing(jtype).r_pi2 > 0.0) {
C56 = p_bo5*pow(rij/r_pi2,p_bo6);
BO_pi2 = exp(C56);
}
else BO_pi2 = C56 = 0.0;
BO = BO_s + BO_pi + BO_pi2;
if (BO < bo_cut) continue;
if (NEIGHFLAG == HALF) {
j_index = bo_first_i + d_bo_num[i];
i_index = d_bo_first[j] + d_bo_num[j];
d_bo_num[i]++;
d_bo_num[j]++;
} else {
j_index = bo_first_i + Kokkos::atomic_fetch_add(&d_bo_num[i],1);
i_index = d_bo_first[j] + Kokkos::atomic_fetch_add(&d_bo_num[j],1);
}
const int jj_index = j_index - bo_first_i;
const int ii_index = i_index - d_bo_first[j];
if (jj_index >= maxbo || ii_index >= maxbo) {
d_resize_bo() = 1;
return;
}
d_bo_list[j_index] = j;
d_bo_list[i_index] = i;
// from BondOrder1
d_BO(i,jj_index) = BO;
d_BO_s(i,jj_index) = BO_s;
d_BO_pi(i,jj_index) = BO_pi;
d_BO_pi2(i,jj_index) = BO_pi2;
d_BO(j,ii_index) = BO;
d_BO_s(j,ii_index) = BO_s;
d_BO_pi(j,ii_index) = BO_pi;
d_BO_pi2(j,ii_index) = BO_pi2;
F_FLOAT Cln_BOp_s = p_bo2 * C12 / rij / rij;
F_FLOAT Cln_BOp_pi = p_bo4 * C34 / rij / rij;
F_FLOAT Cln_BOp_pi2 = p_bo6 * C56 / rij / rij;
if (nlocal == 0)
Cln_BOp_s = Cln_BOp_pi = Cln_BOp_pi2 = 0.0;
for (int d = 0; d < 3; d++) dln_BOp_pi_i[d] = -(BO_pi*Cln_BOp_pi)*delij[d];
for (int d = 0; d < 3; d++) dln_BOp_pi2_i[d] = -(BO_pi2*Cln_BOp_pi2)*delij[d];
for (int d = 0; d < 3; d++) dBOp_i[d] = -(BO_s*Cln_BOp_s+BO_pi*Cln_BOp_pi+BO_pi2*Cln_BOp_pi2)*delij[d];
for (int d = 0; d < 3; d++) a_dDeltap_self(i,d) += dBOp_i[d];
for (int d = 0; d < 3; d++) a_dDeltap_self(j,d) += -dBOp_i[d];
d_dln_BOp_pix(i,jj_index) = dln_BOp_pi_i[0];
d_dln_BOp_piy(i,jj_index) = dln_BOp_pi_i[1];
d_dln_BOp_piz(i,jj_index) = dln_BOp_pi_i[2];
d_dln_BOp_pix(j,ii_index) = -dln_BOp_pi_i[0];
d_dln_BOp_piy(j,ii_index) = -dln_BOp_pi_i[1];
d_dln_BOp_piz(j,ii_index) = -dln_BOp_pi_i[2];
d_dln_BOp_pi2x(i,jj_index) = dln_BOp_pi2_i[0];
d_dln_BOp_pi2y(i,jj_index) = dln_BOp_pi2_i[1];
d_dln_BOp_pi2z(i,jj_index) = dln_BOp_pi2_i[2];
d_dln_BOp_pi2x(j,ii_index) = -dln_BOp_pi2_i[0];
d_dln_BOp_pi2y(j,ii_index) = -dln_BOp_pi2_i[1];
d_dln_BOp_pi2z(j,ii_index) = -dln_BOp_pi2_i[2];
d_dBOpx(i,jj_index) = dBOp_i[0];
d_dBOpy(i,jj_index) = dBOp_i[1];
d_dBOpz(i,jj_index) = dBOp_i[2];
d_dBOpx(j,ii_index) = -dBOp_i[0];
d_dBOpy(j,ii_index) = -dBOp_i[1];
d_dBOpz(j,ii_index) = -dBOp_i[2];
d_BO(i,jj_index) -= bo_cut;
d_BO(j,ii_index) -= bo_cut;
d_BO_s(i,jj_index) -= bo_cut;
d_BO_s(j,ii_index) -= bo_cut;
total_bo += d_BO(i,jj_index);
a_total_bo[j] += d_BO(j,ii_index);
}
a_total_bo[i] += total_bo;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxBondOrder1, const int &ii) const {
const int i = d_ilist[ii];
const int itype = type(i);
const F_FLOAT val_i = paramssing(itype).valency;
d_Deltap[i] = d_total_bo[i] - val_i;
d_Deltap_boc[i] = d_total_bo[i] - paramssing(itype).valency_val;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxBuildListsHalf_LessAtomics<NEIGHFLAG>, const int &ii) const {
if (d_resize_bo() || d_resize_hb())
return;
const int i = d_ilist[ii];
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
const int itype = type(i);
const int itag = tag(i);
const int jnum = d_numneigh[i];
- F_FLOAT C12, C34, C56, BO_s, BO_pi, BO_pi2, BO, delij[3], dBOp_i[3];
- F_FLOAT total_bo = 0.0;
+ F_FLOAT C12, C34, C56, BO_s, BO_pi, BO_pi2, BO, delij[3];
int j_index,i_index;
d_bo_first[i] = i*maxbo;
const int bo_first_i = d_bo_first[i];
int ihb = -1;
int jhb = -1;
- int jhb_top = -1;
int hb_first_i;
if (cut_hbsq > 0.0) {
ihb = paramssing(itype).p_hbond;
if (ihb == 1) {
d_hb_first[i] = i*maxhb;
hb_first_i = d_hb_first[i];
}
}
for (int jj = 0; jj < jnum; jj++) {
int j = d_neighbors(i,jj);
j &= NEIGHMASK;
const int jtag = tag(j);
d_bo_first[j] = j*maxbo;
d_hb_first[j] = j*maxhb;
const int jtype = type(j);
delij[0] = x(j,0) - xtmp;
delij[1] = x(j,1) - ytmp;
delij[2] = x(j,2) - ztmp;
const F_FLOAT rsq = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2];
double cutoffsq;
if(i < nlocal) cutoffsq = MAX(cut_bosq,cut_hbsq);
else cutoffsq = cut_bosq;
if (rsq > cutoffsq) continue;
// hbond list
if (i < nlocal && cut_hbsq > 0.0 && (ihb == 1 || ihb == 2) && rsq <= cut_hbsq) {
jhb = paramssing(jtype).p_hbond;
if( ihb == 1 && jhb == 2) {
if (NEIGHFLAG == HALF) {
j_index = hb_first_i + d_hb_num[i];
d_hb_num[i]++;
} else {
j_index = hb_first_i + Kokkos::atomic_fetch_add(&d_hb_num[i],1);
}
const int jj_index = j_index - hb_first_i;
if (jj_index >= maxhb) {
d_resize_hb() = 1;
return;
}
d_hb_list[j_index] = j;
} else if ( j < nlocal && ihb == 2 && jhb == 1) {
if (NEIGHFLAG == HALF) {
i_index = d_hb_first[j] + d_hb_num[j];
d_hb_num[j]++;
} else {
i_index = d_hb_first[j] + Kokkos::atomic_fetch_add(&d_hb_num[j],1);
}
const int ii_index = i_index - d_hb_first[j];
if (ii_index >= maxhb) {
d_resize_hb() = 1;
return;
}
d_hb_list[i_index] = i;
}
}
// bond_list
const F_FLOAT rij = sqrt(rsq);
const F_FLOAT p_bo1 = paramstwbp(itype,jtype).p_bo1;
const F_FLOAT p_bo2 = paramstwbp(itype,jtype).p_bo2;
const F_FLOAT p_bo3 = paramstwbp(itype,jtype).p_bo3;
const F_FLOAT p_bo4 = paramstwbp(itype,jtype).p_bo4;
const F_FLOAT p_bo5 = paramstwbp(itype,jtype).p_bo5;
const F_FLOAT p_bo6 = paramstwbp(itype,jtype).p_bo6;
const F_FLOAT r_s = paramstwbp(itype,jtype).r_s;
const F_FLOAT r_pi = paramstwbp(itype,jtype).r_pi;
const F_FLOAT r_pi2 = paramstwbp(itype,jtype).r_pi2;
if (paramssing(itype).r_s > 0.0 && paramssing(jtype).r_s > 0.0) {
C12 = p_bo1*pow(rij/r_s,p_bo2);
BO_s = (1.0+bo_cut)*exp(C12);
}
else BO_s = C12 = 0.0;
if (paramssing(itype).r_pi > 0.0 && paramssing(jtype).r_pi > 0.0) {
C34 = p_bo3*pow(rij/r_pi,p_bo4);
BO_pi = exp(C34);
}
else BO_pi = C34 = 0.0;
if (paramssing(itype).r_pi2 > 0.0 && paramssing(jtype).r_pi2 > 0.0) {
C56 = p_bo5*pow(rij/r_pi2,p_bo6);
BO_pi2 = exp(C56);
}
else BO_pi2 = C56 = 0.0;
BO = BO_s + BO_pi + BO_pi2;
if (BO < bo_cut) continue;
if (NEIGHFLAG == HALF) {
j_index = bo_first_i + d_bo_num[i];
i_index = d_bo_first[j] + d_bo_num[j];
d_bo_num[i]++;
d_bo_num[j]++;
} else {
j_index = bo_first_i + Kokkos::atomic_fetch_add(&d_bo_num[i],1);
i_index = d_bo_first[j] + Kokkos::atomic_fetch_add(&d_bo_num[j],1);
}
const int jj_index = j_index - bo_first_i;
const int ii_index = i_index - d_bo_first[j];
if (jj_index >= maxbo || ii_index >= maxbo) {
d_resize_bo() = 1;
return;
}
d_bo_list[j_index] = j;
d_bo_list[i_index] = i;
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxBondOrder1_LessAtomics, const int &ii) const {
F_FLOAT C12, C34, C56, BO_s, BO_pi, BO_pi2, BO, delij[3], dBOp_i[3], dln_BOp_pi_i[3], dln_BOp_pi2_i[3];
const int i = d_ilist[ii];
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
const int itype = type(i);
const int j_start = d_bo_first[i];
const int j_end = j_start + d_bo_num[i];
F_FLOAT total_bo = 0.0;
for (int jj = j_start; jj < j_end; jj++) {
int j = d_bo_list[jj];
j &= NEIGHMASK;
delij[0] = x(j,0) - xtmp;
delij[1] = x(j,1) - ytmp;
delij[2] = x(j,2) - ztmp;
const F_FLOAT rsq = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2];
const F_FLOAT rij = sqrt(rsq);
const int jtype = type(j);
const int j_index = jj - j_start;
// calculate uncorrected BO and total bond order
const F_FLOAT p_bo1 = paramstwbp(itype,jtype).p_bo1;
const F_FLOAT p_bo2 = paramstwbp(itype,jtype).p_bo2;
const F_FLOAT p_bo3 = paramstwbp(itype,jtype).p_bo3;
const F_FLOAT p_bo4 = paramstwbp(itype,jtype).p_bo4;
const F_FLOAT p_bo5 = paramstwbp(itype,jtype).p_bo5;
const F_FLOAT p_bo6 = paramstwbp(itype,jtype).p_bo6;
const F_FLOAT r_s = paramstwbp(itype,jtype).r_s;
const F_FLOAT r_pi = paramstwbp(itype,jtype).r_pi;
const F_FLOAT r_pi2 = paramstwbp(itype,jtype).r_pi2;
if (paramssing(itype).r_s > 0.0 && paramssing(jtype).r_s > 0.0) {
C12 = p_bo1*pow(rij/r_s,p_bo2);
BO_s = (1.0+bo_cut)*exp(C12);
}
else BO_s = C12 = 0.0;
if (paramssing(itype).r_pi > 0.0 && paramssing(jtype).r_pi > 0.0) {
C34 = p_bo3*pow(rij/r_pi,p_bo4);
BO_pi = exp(C34);
}
else BO_pi = C34 = 0.0;
if (paramssing(itype).r_pi2 > 0.0 && paramssing(jtype).r_pi2 > 0.0) {
C56 = p_bo5*pow(rij/r_pi2,p_bo6);
BO_pi2 = exp(C56);
}
else BO_pi2 = C56 = 0.0;
BO = BO_s + BO_pi + BO_pi2;
if (BO < bo_cut) continue;
d_BO(i,j_index) = BO;
d_BO_s(i,j_index) = BO;
d_BO_pi(i,j_index) = BO_pi;
d_BO_pi2(i,j_index) = BO_pi2;
F_FLOAT Cln_BOp_s = p_bo2 * C12 / rij / rij;
F_FLOAT Cln_BOp_pi = p_bo4 * C34 / rij / rij;
F_FLOAT Cln_BOp_pi2 = p_bo6 * C56 / rij / rij;
if (nlocal == 0)
Cln_BOp_s = Cln_BOp_pi = Cln_BOp_pi2 = 0.0;
for (int d = 0; d < 3; d++) dln_BOp_pi_i[d] = -(BO_pi*Cln_BOp_pi)*delij[d];
for (int d = 0; d < 3; d++) dln_BOp_pi2_i[d] = -(BO_pi2*Cln_BOp_pi2)*delij[d];
for (int d = 0; d < 3; d++) dBOp_i[d] = -(BO_s*Cln_BOp_s+BO_pi*Cln_BOp_pi+BO_pi2*Cln_BOp_pi2)*delij[d];
for (int d = 0; d < 3; d++) d_dDeltap_self(i,d) += dBOp_i[d];
d_dln_BOp_pix(i,j_index) = dln_BOp_pi_i[0];
d_dln_BOp_piy(i,j_index) = dln_BOp_pi_i[1];
d_dln_BOp_piz(i,j_index) = dln_BOp_pi_i[2];
d_dln_BOp_pi2x(i,j_index) = dln_BOp_pi2_i[0];
d_dln_BOp_pi2y(i,j_index) = dln_BOp_pi2_i[1];
d_dln_BOp_pi2z(i,j_index) = dln_BOp_pi2_i[2];
d_dBOpx(i,j_index) = dBOp_i[0];
d_dBOpy(i,j_index) = dBOp_i[1];
d_dBOpz(i,j_index) = dBOp_i[2];
d_BO(i,j_index) -= bo_cut;
d_BO_s(i,j_index) -= bo_cut;
total_bo += d_BO(i,j_index);
}
d_total_bo[i] += total_bo;
const F_FLOAT val_i = paramssing(itype).valency;
d_Deltap[i] = d_total_bo[i] - val_i;
d_Deltap_boc[i] = d_total_bo[i] - paramssing(itype).valency_val;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxBondOrder2, const int &ii) const {
F_FLOAT delij[3];
F_FLOAT exp_p1i, exp_p2i, exp_p1j, exp_p2j, f1, f2, f3, u1_ij, u1_ji, Cf1A_ij, Cf1B_ij, Cf1_ij, Cf1_ji;
F_FLOAT f4, f5, exp_f4, exp_f5, f4f5, Cf45_ij, Cf45_ji;
F_FLOAT A0_ij, A1_ij, A2_ij, A3_ij, A2_ji, A3_ji;
const int i = d_ilist[ii];
const int itype = type(i);
const int j_start = d_bo_first[i];
const int j_end = j_start + d_bo_num[i];
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
const F_FLOAT val_i = paramssing(itype).valency;
d_total_bo[i] = 0.0;
F_FLOAT total_bo = 0.0;
for (int jj = j_start; jj < j_end; jj++) {
int j = d_bo_list[jj];
j &= NEIGHMASK;
delij[0] = x(j,0) - xtmp;
delij[1] = x(j,1) - ytmp;
delij[2] = x(j,2) - ztmp;
const F_FLOAT rsq = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2];
const F_FLOAT rij = sqrt(rsq);
const int jtype = type(j);
const int j_index = jj - j_start;
const int i_index = maxbo+j_index;
// calculate corrected BO and total bond order
const F_FLOAT val_j = paramssing(jtype).valency;
const F_FLOAT ovc = paramstwbp(itype,jtype).ovc;
const F_FLOAT v13cor = paramstwbp(itype,jtype).v13cor;
const F_FLOAT p_boc3 = paramstwbp(itype,jtype).p_boc3;
const F_FLOAT p_boc4 = paramstwbp(itype,jtype).p_boc4;
const F_FLOAT p_boc5 = paramstwbp(itype,jtype).p_boc5;
if (ovc < 0.001 && v13cor < 0.001) {
d_C1dbo(i,j_index) = 1.0;
d_C2dbo(i,j_index) = 0.0;
d_C3dbo(i,j_index) = 0.0;
d_C1dbopi(i,j_index) = d_BO_pi(i,j_index);
d_C2dbopi(i,j_index) = 0.0;
d_C3dbopi(i,j_index) = 0.0;
d_C4dbopi(i,j_index) = 0.0;
d_C1dbopi2(i,j_index) = d_BO_pi(i,j_index);
d_C2dbopi2(i,j_index) = 0.0;
d_C3dbopi2(i,j_index) = 0.0;
d_C4dbopi2(i,j_index) = 0.0;
} else {
if (ovc >= 0.001) {
exp_p1i = exp(-p_boc1 * d_Deltap[i]);
exp_p2i = exp(-p_boc2 * d_Deltap[i]);
exp_p1j = exp(-p_boc1 * d_Deltap[j]);
exp_p2j = exp(-p_boc2 * d_Deltap[j]);
f2 = exp_p1i + exp_p1j;
f3 = -1.0/p_boc2*log(0.5*(exp_p2i+exp_p2j));
f1 = 0.5 * ((val_i + f2)/(val_i + f2 + f3) + (val_j + f2)/(val_j + f2 + f3));
u1_ij = val_i + f2 + f3;
u1_ji = val_j + f2 + f3;
Cf1A_ij = 0.5 * f3 * (1.0/(u1_ij*u1_ij)+1.0/(u1_ji*u1_ji));
Cf1B_ij = -0.5 * ((u1_ij - f3)/(u1_ij*u1_ij)+(u1_ji - f3)/(u1_ji*u1_ji));
Cf1_ij = 0.5 * (-p_boc1 * exp_p1i / u1_ij - ((val_i+f2) / (u1_ij*u1_ij)) *
(-p_boc1 * exp_p1i + exp_p2i / (exp_p2i + exp_p2j)) +
-p_boc1 * exp_p1i / u1_ji - ((val_j+f2) / (u1_ji*u1_ji)) *
(-p_boc1 * exp_p1i + exp_p2i / (exp_p2i + exp_p2j)));
Cf1_ji = -Cf1A_ij * p_boc1 * exp_p1j + Cf1B_ij * exp_p2j / ( exp_p2i + exp_p2j );
} else {
f1 = 1.0;
Cf1_ij = Cf1_ji = 0.0;
}
if (v13cor >= 0.001) {
exp_f4 =exp(-(p_boc4*(d_BO(i,j_index)*d_BO(i,j_index))-d_Deltap_boc[i])*p_boc3+p_boc5);
exp_f5 =exp(-(p_boc4*(d_BO(i,j_index)*d_BO(i,j_index))-d_Deltap_boc[j])*p_boc3+p_boc5);
f4 = 1. / (1. + exp_f4);
f5 = 1. / (1. + exp_f5);
f4f5 = f4 * f5;
Cf45_ij = -f4 * exp_f4;
Cf45_ji = -f5 * exp_f5;
} else {
f4 = f5 = f4f5 = 1.0;
Cf45_ij = Cf45_ji = 0.0;
}
A0_ij = f1 * f4f5;
A1_ij = -2 * p_boc3 * p_boc4 * d_BO(i,j_index) * (Cf45_ij + Cf45_ji);
A2_ij = Cf1_ij / f1 + p_boc3 * Cf45_ij;
A2_ji = Cf1_ji / f1 + p_boc3 * Cf45_ji;
A3_ij = A2_ij + Cf1_ij / f1;
A3_ji = A2_ji + Cf1_ji / f1;
d_BO(i,j_index) = d_BO(i,j_index) * A0_ij;
d_BO_pi(i,j_index) = d_BO_pi(i,j_index) * A0_ij * f1;
d_BO_pi2(i,j_index) = d_BO_pi2(i,j_index) * A0_ij * f1;
d_BO_s(i,j_index) = d_BO(i,j_index)-(d_BO_pi(i,j_index)+d_BO_pi2(i,j_index));
d_C1dbo(i,j_index) = A0_ij + d_BO(i,j_index) * A1_ij;
d_C2dbo(i,j_index) = d_BO(i,j_index) * A2_ij;
d_C3dbo(i,j_index) = d_BO(i,j_index) * A2_ji;
d_C1dbopi(i,j_index) = f1*f1*f4*f5;
d_C2dbopi(i,j_index) = d_BO_pi(i,j_index) * A1_ij;
d_C3dbopi(i,j_index) = d_BO_pi(i,j_index) * A3_ij;
d_C4dbopi(i,j_index) = d_BO_pi(i,j_index) * A3_ji;
d_C1dbopi2(i,j_index) = f1*f1*f4*f5;
d_C2dbopi2(i,j_index) = d_BO_pi2(i,j_index) * A1_ij;
d_C3dbopi2(i,j_index) = d_BO_pi2(i,j_index) * A3_ij;
d_C4dbopi2(i,j_index) = d_BO_pi2(i,j_index) * A3_ji;
}
if(d_BO(i,j_index) < 1e-10) d_BO(i,j_index) = 0.0;
if(d_BO_s(i,j_index) < 1e-10) d_BO_s(i,j_index) = 0.0;
if(d_BO_pi(i,j_index) < 1e-10) d_BO_pi(i,j_index) = 0.0;
if(d_BO_pi2(i,j_index) < 1e-10) d_BO_pi2(i,j_index) = 0.0;
total_bo += d_BO(i,j_index);
d_Cdbo(i,j_index) = 0.0;
d_Cdbopi(i,j_index) = 0.0;
d_Cdbopi2(i,j_index) = 0.0;
d_Cdbo(j,i_index) = 0.0;
d_Cdbopi(j,i_index) = 0.0;
d_Cdbopi2(j,i_index) = 0.0;
d_CdDelta[j] = 0.0;
}
d_CdDelta[i] = 0.0;
d_total_bo[i] += total_bo;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxBondOrder3, const int &ii) const {
// bot part of BO()
const int i = d_ilist[ii];
const int itype = type(i);
F_FLOAT nlp_temp;
d_Delta[i] = d_total_bo[i] - paramssing(itype).valency;
const F_FLOAT Delta_e = d_total_bo[i] - paramssing(itype).valency_e;
d_Delta_boc[i] = d_total_bo[i] - paramssing(itype).valency_boc;
const F_FLOAT vlpex = Delta_e - 2.0 * (int)(Delta_e/2.0);
const F_FLOAT explp1 = exp(-gp[15] * SQR(2.0 + vlpex));
const F_FLOAT nlp = explp1 - (int)(Delta_e / 2.0);
d_Delta_lp[i] = paramssing(itype).nlp_opt - nlp;
const F_FLOAT Clp = 2.0 * gp[15] * explp1 * (2.0 + vlpex);
d_dDelta_lp[i] = Clp;
if( paramssing(itype).mass > 21.0 ) {
nlp_temp = 0.5 * (paramssing(itype).valency_e - paramssing(itype).valency);
d_Delta_lp_temp[i] = paramssing(itype).nlp_opt - nlp_temp;
} else {
nlp_temp = nlp;
d_Delta_lp_temp[i] = paramssing(itype).nlp_opt - nlp_temp;
}
d_sum_ovun(i,1) = 0.0;
d_sum_ovun(i,2) = 0.0;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeMulti1<NEIGHFLAG,EVFLAG>, const int &ii) const {
const int i = d_ilist[ii];
const int itype = type(i);
const F_FLOAT imass = paramssing(itype).mass;
F_FLOAT dfvl;
if (imass > 21.0) dfvl = 0.0;
else dfvl = 1.0;
const int j_start = d_bo_first[i];
const int j_end = j_start + d_bo_num[i];
F_FLOAT sum_ovun1 = 0.0;
F_FLOAT sum_ovun2 = 0.0;
for (int jj = j_start; jj < j_end; jj++) {
int j = d_bo_list[jj];
j &= NEIGHMASK;
const int jtype = type(j);
const int j_index = jj - j_start;
sum_ovun1 += paramstwbp(itype,jtype).p_ovun1 * paramstwbp(itype,jtype).De_s * d_BO(i,j_index);
sum_ovun2 += (d_Delta[j] - dfvl * d_Delta_lp_temp[j]) * (d_BO_pi(i,j_index) + d_BO_pi2(i,j_index));
}
d_sum_ovun(i,1) += sum_ovun1;
d_sum_ovun(i,2) += sum_ovun2;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeMulti2<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT_REAX& ev) const {
Kokkos::View<F_FLOAT*, typename DAT::t_float_1d::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_CdDelta = d_CdDelta;
Kokkos::View<F_FLOAT**, typename DAT::t_ffloat_2d_dl::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_Cdbo = d_Cdbo;
Kokkos::View<F_FLOAT**, typename DAT::t_ffloat_2d_dl::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_Cdbopi = d_Cdbopi;
Kokkos::View<F_FLOAT**, typename DAT::t_ffloat_2d_dl::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_Cdbopi2 = d_Cdbopi2;
const int i = d_ilist[ii];
const int itype = type(i);
const F_FLOAT imass = paramssing(itype).mass;
const F_FLOAT val_i = paramssing(itype).valency;
F_FLOAT dfvl;
if (imass > 21.0) dfvl = 0.0;
else dfvl = 1.0;
F_FLOAT e_lp, e_ov, e_un;
F_FLOAT CEover1, CEover2, CEover3, CEover4;
F_FLOAT CEunder1, CEunder2, CEunder3, CEunder4;
const F_FLOAT p_lp3 = gp[5];
const F_FLOAT p_ovun2 = paramssing(itype).p_ovun2;
const F_FLOAT p_ovun3 = gp[32];
const F_FLOAT p_ovun4 = gp[31];
const F_FLOAT p_ovun5 = paramssing(itype).p_ovun5;
const F_FLOAT p_ovun6 = gp[6];
const F_FLOAT p_ovun7 = gp[8];
const F_FLOAT p_ovun8 = gp[9];
// lone pair
const F_FLOAT p_lp2 = paramssing(itype).p_lp2;
const F_FLOAT expvd2 = exp( -75 * d_Delta_lp[i]);
const F_FLOAT inv_expvd2 = 1.0 / (1.0+expvd2);
int numbonds = d_bo_num[i];
e_lp = 0.0;
if (numbonds > 0)
e_lp = p_lp2 * d_Delta_lp[i] * inv_expvd2;
const F_FLOAT dElp = p_lp2 * inv_expvd2 + 75.0 * p_lp2 * d_Delta_lp[i] * expvd2 * inv_expvd2*inv_expvd2;
const F_FLOAT CElp = dElp * d_dDelta_lp[i];
if (numbonds > 0)
a_CdDelta[i] += CElp;
if (eflag) ev.ereax[0] += e_lp;
//if (vflag_either || eflag_atom) this->template ev_tally<NEIGHFLAG>(ev,i,i,e_lp,0.0,0.0,0.0,0.0);
//if (eflag_atom) this->template e_tally<NEIGHFLAG>(ev,i,i,e_lp);
// over coordination
const F_FLOAT exp_ovun1 = p_ovun3 * exp( p_ovun4 * d_sum_ovun(i,2) );
const F_FLOAT inv_exp_ovun1 = 1.0 / (1 + exp_ovun1);
const F_FLOAT Delta_lpcorr = d_Delta[i] - (dfvl * d_Delta_lp_temp[i]) * inv_exp_ovun1;
const F_FLOAT exp_ovun2 = exp( p_ovun2 * Delta_lpcorr );
const F_FLOAT inv_exp_ovun2 = 1.0 / (1.0 + exp_ovun2);
const F_FLOAT DlpVi = 1.0 / (Delta_lpcorr + val_i + 1e-8);
CEover1 = Delta_lpcorr * DlpVi * inv_exp_ovun2;
e_ov = d_sum_ovun(i,1) * CEover1;
if (eflag) ev.ereax[1] += e_ov;
//if (eflag_atom) this->template ev_tally<NEIGHFLAG>(ev,i,i,e_ov,0.0,0.0,0.0,0.0);
//if (eflag_atom) this->template e_tally<NEIGHFLAG>(ev,i,i,e_ov);
CEover2 = d_sum_ovun(i,1) * DlpVi * inv_exp_ovun2 *
(1.0 - Delta_lpcorr * ( DlpVi + p_ovun2 * exp_ovun2 * inv_exp_ovun2 ));
CEover3 = CEover2 * (1.0 - dfvl * d_dDelta_lp[i] * inv_exp_ovun1 );
CEover4 = CEover2 * (dfvl * d_Delta_lp_temp[i]) * p_ovun4 * exp_ovun1 * SQR(inv_exp_ovun1);
// under coordination
const F_FLOAT exp_ovun2n = 1.0 / exp_ovun2;
const F_FLOAT exp_ovun6 = exp( p_ovun6 * Delta_lpcorr );
const F_FLOAT exp_ovun8 = p_ovun7 * exp(p_ovun8 * d_sum_ovun(i,2));
const F_FLOAT inv_exp_ovun2n = 1.0 / (1.0 + exp_ovun2n);
const F_FLOAT inv_exp_ovun8 = 1.0 / (1.0 + exp_ovun8);
e_un = 0;
if (numbonds > 0)
e_un = -p_ovun5 * (1.0 - exp_ovun6) * inv_exp_ovun2n * inv_exp_ovun8;
if (eflag) ev.ereax[2] += e_un;
//if (eflag_atom) this->template ev_tally<NEIGHFLAG>(ev,i,i,e_un,0.0,0.0,0.0,0.0);
//if (eflag_atom) this->template e_tally<NEIGHFLAG>(ev,i,i,e_un);
CEunder1 = inv_exp_ovun2n *
( p_ovun5 * p_ovun6 * exp_ovun6 * inv_exp_ovun8 + p_ovun2 * e_un * exp_ovun2n );
CEunder2 = -e_un * p_ovun8 * exp_ovun8 * inv_exp_ovun8;
CEunder3 = CEunder1 * (1.0 - dfvl * d_dDelta_lp[i] * inv_exp_ovun1);
CEunder4 = CEunder1 * (dfvl * d_Delta_lp_temp[i]) *
p_ovun4 * exp_ovun1 * inv_exp_ovun1 * inv_exp_ovun1 + CEunder2;
const F_FLOAT eng_tmp = e_lp + e_ov + e_un;
if (eflag_atom) this->template e_tally_single<NEIGHFLAG>(ev,i,eng_tmp);
// multibody forces
a_CdDelta[i] += CEover3;
if (numbonds > 0)
a_CdDelta[i] += CEunder3;
const int j_start = d_bo_first[i];
const int j_end = j_start + d_bo_num[i];
F_FLOAT CdDelta_i = 0.0;
for (int jj = j_start; jj < j_end; jj++) {
int j = d_bo_list[jj];
j &= NEIGHMASK;
const int jtype = type(j);
const F_FLOAT jmass = paramssing(jtype).mass;
const int j_index = jj - j_start;
const F_FLOAT De_s = paramstwbp(itype,jtype).De_s;
// multibody lone pair: correction for C2
if (p_lp3 > 0.001 && imass == 12.0 && jmass == 12.0) {
const F_FLOAT Di = d_Delta[i];
const F_FLOAT vov3 = d_BO(i,j_index) - Di - 0.040*pow(Di,4.0);
if (vov3 > 3.0) {
const F_FLOAT e_lph = p_lp3 * (vov3-3.0)*(vov3-3.0);
const F_FLOAT deahu2dbo = 2.0 * p_lp3 * (vov3 - 3.0);
const F_FLOAT deahu2dsbo = 2.0 * p_lp3 * (vov3 - 3.0) * (-1.0 - 0.16 * pow(Di,3.0));
d_Cdbo(i,j_index) += deahu2dbo;
CdDelta_i += deahu2dsbo;
if (eflag) ev.ereax[0] += e_lph;
if (eflag_atom) this->template e_tally<NEIGHFLAG>(ev,i,j,e_lph);
}
}
// over/under coordination forces merged together
const F_FLOAT p_ovun1 = paramstwbp(itype,jtype).p_ovun1;
a_CdDelta[j] += (CEover4 + CEunder4) * (1.0 - dfvl * d_dDelta_lp[j]) * (d_BO_pi(i,j_index) + d_BO_pi2(i,j_index));
d_Cdbo(i,j_index) += CEover1 * p_ovun1 * De_s;
d_Cdbopi(i,j_index) += (CEover4 + CEunder4) * (d_Delta[j] - dfvl*d_Delta_lp_temp[j]);
d_Cdbopi2(i,j_index) += (CEover4 + CEunder4) * (d_Delta[j] - dfvl*d_Delta_lp_temp[j]);
}
a_CdDelta[i] += CdDelta_i;
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeMulti2<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT_REAX ev;
this->template operator()<NEIGHFLAG,EVFLAG>(PairReaxComputeMulti2<NEIGHFLAG,EVFLAG>(), ii, ev);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeAngular<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT_REAX& ev) const {
Kokkos::View<F_FLOAT*[3], typename DAT::t_f_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_f = f;
Kokkos::View<F_FLOAT**, typename DAT::t_ffloat_2d_dl::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_Cdbo = d_Cdbo;
Kokkos::View<F_FLOAT*, typename DAT::t_float_1d::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_CdDelta = d_CdDelta;
const int i = d_ilist[ii];
const int itype = type(i);
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
F_FLOAT temp, temp_bo_jt, pBOjt7;
F_FLOAT p_val1, p_val2, p_val3, p_val4, p_val5;
F_FLOAT p_val6, p_val7, p_val8, p_val9, p_val10;
F_FLOAT p_pen1, p_pen2, p_pen3, p_pen4;
F_FLOAT p_coa1, p_coa2, p_coa3, p_coa4;
F_FLOAT trm8, expval6, expval7, expval2theta, expval12theta, exp3ij, exp3jk;
F_FLOAT exp_pen2ij, exp_pen2jk, exp_pen3, exp_pen4, trm_pen34, exp_coa2;
F_FLOAT dSBO1, dSBO2, SBO, SBO2, CSBO2, SBOp, prod_SBO, vlpadj;
F_FLOAT CEval1, CEval2, CEval3, CEval4, CEval5, CEval6, CEval7, CEval8;
F_FLOAT CEpen1, CEpen2, CEpen3;
F_FLOAT e_ang, e_coa, e_pen;
F_FLOAT CEcoa1, CEcoa2, CEcoa3, CEcoa4, CEcoa5;
F_FLOAT Cf7ij, Cf7jk, Cf8j, Cf9j;
F_FLOAT f7_ij, f7_jk, f8_Dj, f9_Dj;
F_FLOAT Ctheta_0, theta_0, theta_00, theta, cos_theta, sin_theta;
F_FLOAT BOA_ij, BOA_ik, rij, bo_ij, bo_ik;
F_FLOAT dcos_theta_di[3], dcos_theta_dj[3], dcos_theta_dk[3];
F_FLOAT eng_tmp, fi_tmp[3], fj_tmp[3], fk_tmp[3];
F_FLOAT delij[3], delik[3];
p_val6 = gp[14];
p_val8 = gp[33];
p_val9 = gp[16];
p_val10 = gp[17];
p_pen2 = gp[19];
p_pen3 = gp[20];
p_pen4 = gp[21];
p_coa2 = gp[2];
p_coa3 = gp[38];
p_coa4 = gp[30];
p_val3 = paramssing(itype).p_val3;
p_val5 = paramssing(itype).p_val5;
const int j_start = d_bo_first[i];
const int j_end = j_start + d_bo_num[i];
const F_FLOAT Delta_val = d_total_bo[i] - paramssing(itype).valency_val;
SBOp = 0.0, prod_SBO = 1.0;
for (int jj = j_start; jj < j_end; jj++) {
int j = d_bo_list[jj];
j &= NEIGHMASK;
const int j_index = jj - j_start;
bo_ij = d_BO(i,j_index);
SBOp += (d_BO_pi(i,j_index) + d_BO_pi2(i,j_index));
temp = SQR(bo_ij);
temp *= temp;
temp *= temp;
prod_SBO *= exp( -temp );
}
const F_FLOAT Delta_e = d_total_bo[i] - paramssing(itype).valency_e;
const F_FLOAT vlpex = Delta_e - 2.0 * (int)(Delta_e/2.0);
const F_FLOAT explp1 = exp(-gp[15] * SQR(2.0 + vlpex));
const F_FLOAT nlp = explp1 - (int)(Delta_e / 2.0);
if( vlpex >= 0.0 ){
vlpadj = 0.0;
dSBO2 = prod_SBO - 1.0;
} else{
vlpadj = nlp;
dSBO2 = (prod_SBO - 1.0) * (1.0 - p_val8 * d_dDelta_lp[i]);
}
SBO = SBOp + (1.0 - prod_SBO) * (-d_Delta_boc[i] - p_val8 * vlpadj);
dSBO1 = -8.0 * prod_SBO * ( d_Delta_boc[i] + p_val8 * vlpadj );
if( SBO <= 0.0 ) {
SBO2 = 0.0;
CSBO2 = 0.0;
} else if( SBO > 0.0 && SBO <= 1.0 ) {
SBO2 = pow( SBO, p_val9 );
CSBO2 = p_val9 * pow( SBO, p_val9 - 1.0 );
} else if( SBO > 1.0 && SBO < 2.0 ) {
SBO2 = 2.0 - pow( 2.0-SBO, p_val9 );
CSBO2 = p_val9 * pow( 2.0 - SBO, p_val9 - 1.0 );
} else {
SBO2 = 2.0;
CSBO2 = 0.0;
}
expval6 = exp( p_val6 * d_Delta_boc[i] );
F_FLOAT CdDelta_i = 0.0;
F_FLOAT fitmp[3],fjtmp[3];
for (int j = 0; j < 3; j++) fitmp[j] = 0.0;
for (int jj = j_start; jj < j_end; jj++) {
int j = d_bo_list[jj];
j &= NEIGHMASK;
const int j_index = jj - j_start;
delij[0] = x(j,0) - xtmp;
delij[1] = x(j,1) - ytmp;
delij[2] = x(j,2) - ztmp;
const F_FLOAT rsqij = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2];
rij = sqrt(rsqij);
bo_ij = d_BO(i,j_index);
const int i_index = maxbo+j_index;
BOA_ij = bo_ij - thb_cut;
if (BOA_ij <= 0.0) continue;
if (i >= nlocal && j >= nlocal) continue;
const int jtype = type(j);
F_FLOAT CdDelta_j = 0.0;
for (int k = 0; k < 3; k++) fjtmp[k] = 0.0;
for (int kk = jj+1; kk < j_end; kk++ ) {
//for (int kk = j_start; kk < j_end; kk++ ) {
int k = d_bo_list[kk];
k &= NEIGHMASK;
if (k == j) continue;
const int k_index = kk - j_start;
delik[0] = x(k,0) - xtmp;
delik[1] = x(k,1) - ytmp;
delik[2] = x(k,2) - ztmp;
const F_FLOAT rsqik = delik[0]*delik[0] + delik[1]*delik[1] + delik[2]*delik[2];
const F_FLOAT rik = sqrt(rsqik);
bo_ik = d_BO(i,k_index);
BOA_ik = bo_ik - thb_cut;
if (BOA_ik <= 0.0 || bo_ij <= thb_cut || bo_ik <= thb_cut || bo_ij * bo_ik <= thb_cutsq) continue;
const int ktype = type(k);
// theta and derivatives
cos_theta = (delij[0]*delik[0]+delij[1]*delik[1]+delij[2]*delik[2])/(rij*rik);
if( cos_theta > 1.0 ) cos_theta = 1.0;
if( cos_theta < -1.0 ) cos_theta = -1.0;
theta = acos(cos_theta);
const F_FLOAT inv_dists = 1.0 / (rij * rik);
const F_FLOAT Cdot_inv3 = cos_theta * inv_dists * inv_dists;
for( int t = 0; t < 3; t++ ) {
dcos_theta_di[t] = -(delik[t] + delij[t]) * inv_dists + Cdot_inv3 * (rsqik * delij[t] + rsqij * delik[t]);
dcos_theta_dj[t] = delik[t] * inv_dists - Cdot_inv3 * rsqik * delij[t];
dcos_theta_dk[t] = delij[t] * inv_dists - Cdot_inv3 * rsqij * delik[t];
}
sin_theta = sin(theta);
if (sin_theta < 1.0e-5) sin_theta = 1.0e-5;
p_val1 = paramsthbp(jtype,itype,ktype).p_val1;
if (fabs(p_val1) <= 0.001) continue;
// ANGLE ENERGY
p_val1 = paramsthbp(jtype,itype,ktype).p_val1;
p_val2 = paramsthbp(jtype,itype,ktype).p_val2;
p_val4 = paramsthbp(jtype,itype,ktype).p_val4;
p_val7 = paramsthbp(jtype,itype,ktype).p_val7;
theta_00 = paramsthbp(jtype,itype,ktype).theta_00;
exp3ij = exp( -p_val3 * pow( BOA_ij, p_val4 ) );
f7_ij = 1.0 - exp3ij;
Cf7ij = p_val3 * p_val4 * pow( BOA_ij, p_val4 - 1.0 ) * exp3ij;
exp3jk = exp( -p_val3 * pow( BOA_ik, p_val4 ) );
f7_jk = 1.0 - exp3jk;
Cf7jk = p_val3 * p_val4 * pow( BOA_ik, p_val4 - 1.0 ) * exp3jk;
expval7 = exp( -p_val7 * d_Delta_boc[i] );
trm8 = 1.0 + expval6 + expval7;
f8_Dj = p_val5 - ( (p_val5 - 1.0) * (2.0 + expval6) / trm8 );
Cf8j = ((1.0 - p_val5) / (trm8*trm8)) *
(p_val6 * expval6 * trm8 - (2.0 + expval6) * ( p_val6*expval6 - p_val7*expval7));
theta_0 = 180.0 - theta_00 * (1.0 - exp(-p_val10 * (2.0 - SBO2)));
theta_0 = theta_0*constPI/180.0;
expval2theta = exp( -p_val2 * (theta_0-theta)*(theta_0-theta) );
if( p_val1 >= 0 )
expval12theta = p_val1 * (1.0 - expval2theta);
else // To avoid linear Me-H-Me angles (6/6/06)
expval12theta = p_val1 * -expval2theta;
CEval1 = Cf7ij * f7_jk * f8_Dj * expval12theta;
CEval2 = Cf7jk * f7_ij * f8_Dj * expval12theta;
CEval3 = Cf8j * f7_ij * f7_jk * expval12theta;
CEval4 = -2.0 * p_val1 * p_val2 * f7_ij * f7_jk * f8_Dj * expval2theta * (theta_0 - theta);
Ctheta_0 = p_val10 * theta_00*constPI/180.0 * exp( -p_val10 * (2.0 - SBO2) );
CEval5 = -CEval4 * Ctheta_0 * CSBO2;
CEval6 = CEval5 * dSBO1;
CEval7 = CEval5 * dSBO2;
CEval8 = -CEval4 / sin_theta;
e_ang = f7_ij * f7_jk * f8_Dj * expval12theta;
if (eflag) ev.ereax[3] += e_ang;
// Penalty energy
p_pen1 = paramsthbp(jtype,itype,ktype).p_pen1;
exp_pen2ij = exp( -p_pen2 * (BOA_ij - 2.0)*(BOA_ij - 2.0) );
exp_pen2jk = exp( -p_pen2 * (BOA_ik - 2.0)*(BOA_ik - 2.0) );
exp_pen3 = exp( -p_pen3 * d_Delta[i] );
exp_pen4 = exp( p_pen4 * d_Delta[i] );
trm_pen34 = 1.0 + exp_pen3 + exp_pen4;
f9_Dj = (2.0 + exp_pen3 ) / trm_pen34;
Cf9j = (-p_pen3 * exp_pen3 * trm_pen34 - (2.0 + exp_pen3) *
(-p_pen3 * exp_pen3 + p_pen4 * exp_pen4 ) )/(trm_pen34*trm_pen34);
e_pen = p_pen1 * f9_Dj * exp_pen2ij * exp_pen2jk;
if (eflag) ev.ereax[4] += e_pen;
CEpen1 = e_pen * Cf9j / f9_Dj;
temp = -2.0 * p_pen2 * e_pen;
CEpen2 = temp * (BOA_ij - 2.0);
CEpen3 = temp * (BOA_ik - 2.0);
// ConjAngle energy
p_coa1 = paramsthbp(jtype,itype,ktype).p_coa1;
exp_coa2 = exp( p_coa2 * Delta_val );
e_coa = p_coa1 / (1. + exp_coa2) *
exp( -p_coa3 * SQR(d_total_bo[j]-BOA_ij) ) *
exp( -p_coa3 * SQR(d_total_bo[k]-BOA_ik) ) *
exp( -p_coa4 * SQR(BOA_ij - 1.5) ) *
exp( -p_coa4 * SQR(BOA_ik - 1.5) );
CEcoa1 = -2 * p_coa4 * (BOA_ij - 1.5) * e_coa;
CEcoa2 = -2 * p_coa4 * (BOA_ik - 1.5) * e_coa;
CEcoa3 = -p_coa2 * exp_coa2 * e_coa / (1 + exp_coa2);
CEcoa4 = -2 * p_coa3 * (d_total_bo[j]-BOA_ij) * e_coa;
CEcoa5 = -2 * p_coa3 * (d_total_bo[k]-BOA_ik) * e_coa;
if (eflag) ev.ereax[5] += e_coa;
// Forces
a_Cdbo(i,j_index) += (CEval1 + CEpen2 + (CEcoa1 - CEcoa4));
a_Cdbo(j,i_index) += (CEval1 + CEpen2 + (CEcoa1 - CEcoa4));
a_Cdbo(i,k_index) += (CEval2 + CEpen3 + (CEcoa2 - CEcoa5));
a_Cdbo(k,i_index) += (CEval2 + CEpen3 + (CEcoa2 - CEcoa5));
CdDelta_i += ((CEval3 + CEval7) + CEpen1 + CEcoa3);
CdDelta_j += CEcoa4;
a_CdDelta[k] += CEcoa5;
for (int ll = j_start; ll < j_end; ll++) {
int l = d_bo_list[ll];
l &= NEIGHMASK;
const int l_index = ll - j_start;
temp_bo_jt = d_BO(i,l_index);
temp = temp_bo_jt * temp_bo_jt * temp_bo_jt;
pBOjt7 = temp * temp * temp_bo_jt;
a_Cdbo(i,l_index) += (CEval6 * pBOjt7);
d_Cdbopi(i,l_index) += CEval5;
d_Cdbopi2(i,l_index) += CEval5;
}
for (int d = 0; d < 3; d++) fi_tmp[d] = CEval8 * dcos_theta_di[d];
for (int d = 0; d < 3; d++) fj_tmp[d] = CEval8 * dcos_theta_dj[d];
for (int d = 0; d < 3; d++) fk_tmp[d] = CEval8 * dcos_theta_dk[d];
for (int d = 0; d < 3; d++) fitmp[d] -= fi_tmp[d];
for (int d = 0; d < 3; d++) fjtmp[d] -= fj_tmp[d];
for (int d = 0; d < 3; d++) a_f(k,d) -= fk_tmp[d];
// energy/virial tally
if (EVFLAG) {
eng_tmp = e_ang + e_pen + e_coa;
//if (eflag_atom) this->template ev_tally<NEIGHFLAG>(ev,i,j,eng_tmp,0.0,0.0,0.0,0.0);
if (eflag_atom) this->template e_tally<NEIGHFLAG>(ev,i,j,eng_tmp);
if (vflag_either) this->template v_tally3<NEIGHFLAG>(ev,i,j,k,fj_tmp,fk_tmp,delij,delik);
}
}
a_CdDelta[j] += CdDelta_j;
for (int d = 0; d < 3; d++) a_f(j,d) += fjtmp[d];
}
a_CdDelta[i] += CdDelta_i;
for (int d = 0; d < 3; d++) a_f(i,d) += fitmp[d];
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeAngular<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT_REAX ev;
this->template operator()<NEIGHFLAG,EVFLAG>(PairReaxComputeAngular<NEIGHFLAG,EVFLAG>(), ii, ev);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeTorsion<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT_REAX& ev) const {
Kokkos::View<F_FLOAT*[3], typename DAT::t_f_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_f = f;
Kokkos::View<F_FLOAT*, typename DAT::t_float_1d::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_CdDelta = d_CdDelta;
Kokkos::View<F_FLOAT**, typename DAT::t_ffloat_2d_dl::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_Cdbo = d_Cdbo;
// in reaxc_torsion_angles: j = i, k = j, i = k;
F_FLOAT Delta_i, Delta_j, bo_ij, bo_ik, bo_jl, BOA_ij, BOA_ik, BOA_jl;
F_FLOAT p_tor1, p_cot1, V1, V2, V3;
F_FLOAT exp_tor2_ij, exp_tor2_ik, exp_tor2_jl, exp_tor1, exp_tor3_DiDj, exp_tor4_DiDj, exp_tor34_inv;
F_FLOAT exp_cot2_ij, exp_cot2_ik, exp_cot2_jl, fn10, f11_DiDj, dfn11, fn12;
F_FLOAT theta_ijk, theta_jil, sin_ijk, sin_jil, cos_ijk, cos_jil, tan_ijk_i, tan_jil_i;
F_FLOAT cos_omega, cos2omega, cos3omega;
F_FLOAT CV, cmn, CEtors1, CEtors2, CEtors3, CEtors4;
F_FLOAT CEtors5, CEtors6, CEtors7, CEtors8, CEtors9;
F_FLOAT Cconj, CEconj1, CEconj2, CEconj3, CEconj4, CEconj5, CEconj6;
F_FLOAT e_tor, e_con, eng_tmp;
F_FLOAT delij[3], delik[3], deljl[3], dellk[3], delil[3], delkl[3];
F_FLOAT fi_tmp[3], fj_tmp[3], fk_tmp[3], fl_tmp[3];
F_FLOAT dcos_omega_di[3], dcos_omega_dj[3], dcos_omega_dk[3], dcos_omega_dl[3];
F_FLOAT dcos_ijk_di[3], dcos_ijk_dj[3], dcos_ijk_dk[3], dcos_jil_di[3], dcos_jil_dj[3], dcos_jil_dk[3];
F_FLOAT p_tor2 = gp[23];
F_FLOAT p_tor3 = gp[24];
F_FLOAT p_tor4 = gp[25];
F_FLOAT p_cot2 = gp[27];
const int i = d_ilist[ii];
const int itype = type(i);
const int itag = tag(i);
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
Delta_i = d_Delta_boc[i];
const int j_start = d_bo_first[i];
const int j_end = j_start + d_bo_num[i];
F_FLOAT fitmp[3], fjtmp[3], fktmp[3];
for(int j = 0; j < 3; j++) fitmp[j] = 0.0;
F_FLOAT CdDelta_i = 0.0;
for (int jj = j_start; jj < j_end; jj++) {
int j = d_bo_list[jj];
j &= NEIGHMASK;
const int jtag = tag(j);
const int jtype = type(j);
const int j_index = jj - j_start;
// skip half of the interactions
if (itag > jtag) {
if ((itag+jtag) % 2 == 0) continue;
} else if (itag < jtag) {
if ((itag+jtag) % 2 == 1) continue;
} else {
if (x(j,2) < ztmp) continue;
if (x(j,2) == ztmp && x(j,1) < ytmp) continue;
if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue;
}
bo_ij = d_BO(i,j_index);
if (bo_ij < thb_cut) continue;
delij[0] = x(j,0) - xtmp;
delij[1] = x(j,1) - ytmp;
delij[2] = x(j,2) - ztmp;
const F_FLOAT rsqij = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2];
const F_FLOAT rij = sqrt(rsqij);
BOA_ij = bo_ij - thb_cut;
Delta_j = d_Delta_boc[j];
exp_tor2_ij = exp( -p_tor2 * BOA_ij );
exp_cot2_ij = exp( -p_cot2 * SQR(BOA_ij - 1.5) );
exp_tor3_DiDj = exp( -p_tor3 * (Delta_i + Delta_j) );
exp_tor4_DiDj = exp( p_tor4 * (Delta_i + Delta_j) );
exp_tor34_inv = 1.0 / (1.0 + exp_tor3_DiDj + exp_tor4_DiDj);
f11_DiDj = (2.0 + exp_tor3_DiDj) * exp_tor34_inv;
const int l_start = d_bo_first[j];
const int l_end = l_start + d_bo_num[j];
for(int k = 0; k < 3; k++) fjtmp[k] = 0.0;
F_FLOAT CdDelta_j = 0.0;
for (int kk = j_start; kk < j_end; kk++) {
int k = d_bo_list[kk];
k &= NEIGHMASK;
if (k == j) continue;
const int ktype = type(k);
const int k_index = kk - j_start;
bo_ik = d_BO(i,k_index);
if (bo_ik < thb_cut) continue;
BOA_ik = bo_ik - thb_cut;
for (int d = 0; d < 3; d ++) delik[d] = x(k,d) - x(i,d);
const F_FLOAT rsqik = delik[0]*delik[0] + delik[1]*delik[1] + delik[2]*delik[2];
const F_FLOAT rik = sqrt(rsqik);
cos_ijk = (delij[0]*delik[0]+delij[1]*delik[1]+delij[2]*delik[2])/(rij*rik);
if( cos_ijk > 1.0 ) cos_ijk = 1.0;
if( cos_ijk < -1.0 ) cos_ijk = -1.0;
theta_ijk = acos(cos_ijk);
// dcos_ijk
const F_FLOAT inv_dists = 1.0 / (rij * rik);
const F_FLOAT cos_ijk_tmp = cos_ijk / ((rij*rik)*(rij*rik));
for( int d = 0; d < 3; d++ ) {
dcos_ijk_di[d] = -(delik[d] + delij[d]) * inv_dists + cos_ijk_tmp * (rsqik * delij[d] + rsqij * delik[d]);
dcos_ijk_dj[d] = delik[d] * inv_dists - cos_ijk_tmp * rsqik * delij[d];
dcos_ijk_dk[d] = delij[d] * inv_dists - cos_ijk_tmp * rsqij * delik[d];
}
sin_ijk = sin( theta_ijk );
if( sin_ijk >= 0 && sin_ijk <= 1e-10 )
tan_ijk_i = cos_ijk / 1e-10;
else if( sin_ijk <= 0 && sin_ijk >= -1e-10 )
tan_ijk_i = -cos_ijk / 1e-10;
else tan_ijk_i = cos_ijk / sin_ijk;
exp_tor2_ik = exp( -p_tor2 * BOA_ik );
exp_cot2_ik = exp( -p_cot2 * SQR(BOA_ik -1.5) );
for(int l = 0; l < 3; l++) fktmp[l] = 0.0;
for (int ll = l_start; ll < l_end; ll++) {
int l = d_bo_list[ll];
l &= NEIGHMASK;
if (l == i) continue;
const int ltype = type(l);
const int l_index = ll - l_start;
bo_jl = d_BO(j,l_index);
if (l == k || bo_jl < thb_cut || bo_ij*bo_ik*bo_jl < thb_cut) continue;
for (int d = 0; d < 3; d ++) deljl[d] = x(l,d) - x(j,d);
const F_FLOAT rsqjl = deljl[0]*deljl[0] + deljl[1]*deljl[1] + deljl[2]*deljl[2];
const F_FLOAT rjl = sqrt(rsqjl);
BOA_jl = bo_jl - thb_cut;
cos_jil = -(delij[0]*deljl[0]+delij[1]*deljl[1]+delij[2]*deljl[2])/(rij*rjl);
if( cos_jil > 1.0 ) cos_jil = 1.0;
if( cos_jil < -1.0 ) cos_jil = -1.0;
theta_jil = acos(cos_jil);
// dcos_jil
const F_FLOAT inv_distjl = 1.0 / (rij * rjl);
const F_FLOAT inv_distjl3 = pow( inv_distjl, 3.0 );
const F_FLOAT cos_jil_tmp = cos_jil / ((rij*rjl)*(rij*rjl));
for( int d = 0; d < 3; d++ ) {
dcos_jil_di[d] = deljl[d] * inv_distjl - cos_jil_tmp * rsqjl * -delij[d];
dcos_jil_dj[d] = (-deljl[d] + delij[d]) * inv_distjl - cos_jil_tmp * (rsqjl * delij[d] + rsqij * -deljl[d]);
dcos_jil_dk[d] = -delij[d] * inv_distjl - cos_jil_tmp * rsqij * deljl[d];
}
sin_jil = sin( theta_jil );
if( sin_jil >= 0 && sin_jil <= 1e-10 )
tan_jil_i = cos_jil / 1e-10;
else if( sin_jil <= 0 && sin_jil >= -1e-10 )
tan_jil_i = -cos_jil / 1e-10;
else tan_jil_i = cos_jil / sin_jil;
for (int d = 0; d < 3; d ++) dellk[d] = x(k,d) - x(l,d);
const F_FLOAT rsqlk = dellk[0]*dellk[0] + dellk[1]*dellk[1] + dellk[2]*dellk[2];
const F_FLOAT rlk = sqrt(rsqlk);
F_FLOAT unnorm_cos_omega, unnorm_sin_omega, omega;
F_FLOAT htra, htrb, htrc, hthd, hthe, hnra, hnrc, hnhd, hnhe;
F_FLOAT arg, poem, tel;
F_FLOAT cross_ij_jl[3];
// omega
F_FLOAT dot_ij_jk = -(delij[0]*delik[0]+delij[1]*delik[1]+delij[2]*delik[2]);
F_FLOAT dot_ij_lj = delij[0]*deljl[0]+delij[1]*deljl[1]+delij[2]*deljl[2];
F_FLOAT dot_ik_jl = delik[0]*deljl[0]+delik[1]*deljl[1]+delik[2]*deljl[2];
unnorm_cos_omega = dot_ij_jk * dot_ij_lj + rsqij * dot_ik_jl;
cross_ij_jl[0] = delij[1]*deljl[2] - delij[2]*deljl[1];
cross_ij_jl[1] = delij[2]*deljl[0] - delij[0]*deljl[2];
cross_ij_jl[2] = delij[0]*deljl[1] - delij[1]*deljl[0];
unnorm_sin_omega = -rij*(delik[0]*cross_ij_jl[0]+delik[1]*cross_ij_jl[1]+delik[2]*cross_ij_jl[2]);
omega = atan2( unnorm_sin_omega, unnorm_cos_omega );
htra = rik + cos_ijk * ( rjl * cos_jil - rij );
htrb = rij - rik * cos_ijk - rjl * cos_jil;
htrc = rjl + cos_jil * ( rik * cos_ijk - rij );
hthd = rik * sin_ijk * ( rij - rjl * cos_jil );
hthe = rjl * sin_jil * ( rij - rik * cos_ijk );
hnra = rjl * sin_ijk * sin_jil;
hnrc = rik * sin_ijk * sin_jil;
hnhd = rik * rjl * cos_ijk * sin_jil;
hnhe = rik * rjl * sin_ijk * cos_jil;
poem = 2.0 * rik * rjl * sin_ijk * sin_jil;
if( poem < 1e-20 ) poem = 1e-20;
tel = SQR(rik) + SQR(rij) + SQR(rjl) - SQR(rlk) -
2.0 * (rik * rij * cos_ijk - rik * rjl * cos_ijk * cos_jil + rij * rjl * cos_jil);
arg = tel / poem;
if( arg > 1.0 ) arg = 1.0;
if( arg < -1.0 ) arg = -1.0;
if( sin_ijk >= 0 && sin_ijk <= 1e-10 ) sin_ijk = 1e-10;
else if( sin_ijk <= 0 && sin_ijk >= -1e-10 ) sin_ijk = -1e-10;
if( sin_jil >= 0 && sin_jil <= 1e-10 ) sin_jil = 1e-10;
else if( sin_jil <= 0 && sin_jil >= -1e-10 ) sin_jil = -1e-10;
// dcos_omega_di
for (int d = 0; d < 3; d++) dcos_omega_dk[d] = ((htra-arg*hnra)/rik) * delik[d] - dellk[d];
for (int d = 0; d < 3; d++) dcos_omega_dk[d] += (hthd-arg*hnhd)/sin_ijk * -dcos_ijk_dk[d];
for (int d = 0; d < 3; d++) dcos_omega_dk[d] *= 2.0/poem;
// dcos_omega_dj
for (int d = 0; d < 3; d++) dcos_omega_di[d] = -((htra-arg*hnra)/rik) * delik[d] - htrb/rij * delij[d];
for (int d = 0; d < 3; d++) dcos_omega_di[d] += -(hthd-arg*hnhd)/sin_ijk * dcos_ijk_di[d];
for (int d = 0; d < 3; d++) dcos_omega_di[d] += -(hthe-arg*hnhe)/sin_jil * dcos_jil_di[d];
for (int d = 0; d < 3; d++) dcos_omega_di[d] *= 2.0/poem;
// dcos_omega_dk
for (int d = 0; d < 3; d++) dcos_omega_dj[d] = -((htrc-arg*hnrc)/rjl) * deljl[d] + htrb/rij * delij[d];
for (int d = 0; d < 3; d++) dcos_omega_dj[d] += -(hthd-arg*hnhd)/sin_ijk * dcos_ijk_dj[d];
for (int d = 0; d < 3; d++) dcos_omega_dj[d] += -(hthe-arg*hnhe)/sin_jil * dcos_jil_dj[d];
for (int d = 0; d < 3; d++) dcos_omega_dj[d] *= 2.0/poem;
// dcos_omega_dl
for (int d = 0; d < 3; d++) dcos_omega_dl[d] = ((htrc-arg*hnrc)/rjl) * deljl[d] + dellk[d];
for (int d = 0; d < 3; d++) dcos_omega_dl[d] += (hthe-arg*hnhe)/sin_jil * -dcos_jil_dk[d];
for (int d = 0; d < 3; d++) dcos_omega_dl[d] *= 2.0/poem;
cos_omega = cos( omega );
cos2omega = cos( 2. * omega );
cos3omega = cos( 3. * omega );
// torsion energy
p_tor1 = paramsfbp(ktype,itype,jtype,ltype).p_tor1;
p_cot1 = paramsfbp(ktype,itype,jtype,ltype).p_cot1;
V1 = paramsfbp(ktype,itype,jtype,ltype).V1;
V2 = paramsfbp(ktype,itype,jtype,ltype).V2;
V3 = paramsfbp(ktype,itype,jtype,ltype).V3;
exp_tor1 = exp(p_tor1 * SQR(2.0 - d_BO_pi(i,j_index) - f11_DiDj));
exp_tor2_jl = exp(-p_tor2 * BOA_jl);
exp_cot2_jl = exp(-p_cot2 * SQR(BOA_jl - 1.5) );
fn10 = (1.0 - exp_tor2_ik) * (1.0 - exp_tor2_ij) * (1.0 - exp_tor2_jl);
CV = 0.5 * (V1 * (1.0 + cos_omega) + V2 * exp_tor1 * (1.0 - cos2omega) + V3 * (1.0 + cos3omega) );
e_tor = fn10 * sin_ijk * sin_jil * CV;
if (eflag) ev.ereax[6] += e_tor;
dfn11 = (-p_tor3 * exp_tor3_DiDj + (p_tor3 * exp_tor3_DiDj - p_tor4 * exp_tor4_DiDj) *
(2.0 + exp_tor3_DiDj) * exp_tor34_inv) * exp_tor34_inv;
CEtors1 = sin_ijk * sin_jil * CV;
CEtors2 = -fn10 * 2.0 * p_tor1 * V2 * exp_tor1 * (2.0 - d_BO_pi(i,j_index) - f11_DiDj) *
(1.0 - SQR(cos_omega)) * sin_ijk * sin_jil;
CEtors3 = CEtors2 * dfn11;
CEtors4 = CEtors1 * p_tor2 * exp_tor2_ik * (1.0 - exp_tor2_ij) * (1.0 - exp_tor2_jl);
CEtors5 = CEtors1 * p_tor2 * (1.0 - exp_tor2_ik) * exp_tor2_ij * (1.0 - exp_tor2_jl);
CEtors6 = CEtors1 * p_tor2 * (1.0 - exp_tor2_ik) * (1.0 - exp_tor2_ij) * exp_tor2_jl;
cmn = -fn10 * CV;
CEtors7 = cmn * sin_jil * tan_ijk_i;
CEtors8 = cmn * sin_ijk * tan_jil_i;
CEtors9 = fn10 * sin_ijk * sin_jil *
(0.5 * V1 - 2.0 * V2 * exp_tor1 * cos_omega + 1.5 * V3 * (cos2omega + 2.0 * SQR(cos_omega)));
// 4-body conjugation energy
fn12 = exp_cot2_ik * exp_cot2_ij * exp_cot2_jl;
e_con = p_cot1 * fn12 * (1.0 + (SQR(cos_omega) - 1.0) * sin_ijk * sin_jil);
if (eflag) ev.ereax[7] += e_con;
Cconj = -2.0 * fn12 * p_cot1 * p_cot2 * (1.0 + (SQR(cos_omega) - 1.0) * sin_ijk * sin_jil);
CEconj1 = Cconj * (BOA_ik - 1.5e0);
CEconj2 = Cconj * (BOA_ij - 1.5e0);
CEconj3 = Cconj * (BOA_jl - 1.5e0);
CEconj4 = -p_cot1 * fn12 * (SQR(cos_omega) - 1.0) * sin_jil * tan_ijk_i;
CEconj5 = -p_cot1 * fn12 * (SQR(cos_omega) - 1.0) * sin_ijk * tan_jil_i;
CEconj6 = 2.0 * p_cot1 * fn12 * cos_omega * sin_ijk * sin_jil;
// forces
// contribution to bond order
d_Cdbopi(i,j_index) += CEtors2;
CdDelta_i += CEtors3;
CdDelta_j += CEtors3;
a_Cdbo(i,k_index) += CEtors4 + CEconj1;
a_Cdbo(i,j_index) += CEtors5 + CEconj2;
a_Cdbo(j,l_index) += CEtors6 + CEconj3; // trouble
// dcos_theta_ijk
const F_FLOAT coeff74 = CEtors7 + CEconj4;
for (int d = 0; d < 3; d++) fi_tmp[d] = (coeff74) * dcos_ijk_di[d];
for (int d = 0; d < 3; d++) fj_tmp[d] = (coeff74) * dcos_ijk_dj[d];
for (int d = 0; d < 3; d++) fk_tmp[d] = (coeff74) * dcos_ijk_dk[d];
const F_FLOAT coeff85 = CEtors8 + CEconj5;
// dcos_theta_jil
for (int d = 0; d < 3; d++) fi_tmp[d] += (coeff85) * dcos_jil_di[d];
for (int d = 0; d < 3; d++) fj_tmp[d] += (coeff85) * dcos_jil_dj[d];
for (int d = 0; d < 3; d++) fl_tmp[d] = (coeff85) * dcos_jil_dk[d];
// dcos_omega
const F_FLOAT coeff96 = CEtors9 + CEconj6;
for (int d = 0; d < 3; d++) fi_tmp[d] += (coeff96) * dcos_omega_di[d];
for (int d = 0; d < 3; d++) fj_tmp[d] += (coeff96) * dcos_omega_dj[d];
for (int d = 0; d < 3; d++) fk_tmp[d] += (coeff96) * dcos_omega_dk[d];
for (int d = 0; d < 3; d++) fl_tmp[d] += (coeff96) * dcos_omega_dl[d];
// total forces
for (int d = 0; d < 3; d++) fitmp[d] -= fi_tmp[d];
for (int d = 0; d < 3; d++) fjtmp[d] -= fj_tmp[d];
for (int d = 0; d < 3; d++) fktmp[d] -= fk_tmp[d];
for (int d = 0; d < 3; d++) a_f(l,d) -= fl_tmp[d];
// per-atom energy/virial tally
if (EVFLAG) {
eng_tmp = e_tor + e_con;
//if (eflag_atom) this->template ev_tally<NEIGHFLAG>(ev,i,j,eng_tmp,0.0,0.0,0.0,0.0);
if (eflag_atom) this->template e_tally<NEIGHFLAG>(ev,i,j,eng_tmp);
if (vflag_either) {
for (int d = 0; d < 3; d ++) delil[d] = x(l,d) - x(i,d);
for (int d = 0; d < 3; d ++) delkl[d] = x(l,d) - x(k,d);
this->template v_tally4<NEIGHFLAG>(ev,k,i,j,l,fk_tmp,fi_tmp,fj_tmp,delkl,delil,deljl);
}
}
}
for (int d = 0; d < 3; d++) a_f(k,d) += fktmp[d];
}
a_CdDelta[j] += CdDelta_j;
for (int d = 0; d < 3; d++) a_f(j,d) += fjtmp[d];
}
a_CdDelta[i] += CdDelta_i;
for (int d = 0; d < 3; d++) a_f(i,d) += fitmp[d];
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeTorsion<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT_REAX ev;
this->template operator()<NEIGHFLAG,EVFLAG>(PairReaxComputeTorsion<NEIGHFLAG,EVFLAG>(), ii, ev);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeHydrogen<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT_REAX& ev) const {
Kokkos::View<F_FLOAT*[3], typename DAT::t_f_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_f = f;
int hblist[MAX_BONDS];
F_FLOAT theta, cos_theta, sin_xhz4, cos_xhz1, sin_theta2;
F_FLOAT e_hb, exp_hb2, exp_hb3, CEhb1, CEhb2, CEhb3;
F_FLOAT dcos_theta_di[3], dcos_theta_dj[3], dcos_theta_dk[3];
// tally variables
F_FLOAT fi_tmp[3], fj_tmp[3], fk_tmp[3], delij[3], delji[3], delik[3], delki[3];
for (int d = 0; d < 3; d++) fi_tmp[d] = fj_tmp[d] = fk_tmp[d] = 0.0;
const int i = d_ilist[ii];
const int itype = type(i);
if( paramssing(itype).p_hbond != 1 ) return;
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
const int itag = tag(i);
const int j_start = d_bo_first[i];
const int j_end = j_start + d_bo_num[i];
const int k_start = d_hb_first[i];
const int k_end = k_start + d_hb_num[i];
int top = 0;
for (int jj = j_start; jj < j_end; jj++) {
int j = d_bo_list[jj];
j &= NEIGHMASK;
const int jtype = type(j);
const int j_index = jj - j_start;
const F_FLOAT bo_ij = d_BO(i,j_index);
if( paramssing(jtype).p_hbond == 2 && bo_ij >= HB_THRESHOLD ) {
hblist[top] = jj;
top ++;
}
}
- F_FLOAT fitmp[3], fktmp[3];
+ F_FLOAT fitmp[3];
for (int d = 0; d < 3; d++) fitmp[d] = 0.0;
for (int kk = k_start; kk < k_end; kk++) {
int k = d_hb_list[kk];
k &= NEIGHMASK;
const int ktag = tag(k);
const int ktype = type(k);
delik[0] = x(k,0) - xtmp;
delik[1] = x(k,1) - ytmp;
delik[2] = x(k,2) - ztmp;
const F_FLOAT rsqik = delik[0]*delik[0] + delik[1]*delik[1] + delik[2]*delik[2];
const F_FLOAT rik = sqrt(rsqik);
- for (int d = 0; d < 3; d++) fktmp[d] = 0.0;
-
for (int itr = 0; itr < top; itr++) {
const int jj = hblist[itr];
int j = d_bo_list[jj];
j &= NEIGHMASK;
const int jtag = tag(j);
if (jtag == ktag) continue;
const int jtype = type(j);
const int j_index = jj - j_start;
const F_FLOAT bo_ij = d_BO(i,j_index);
delij[0] = x(j,0) - xtmp;
delij[1] = x(j,1) - ytmp;
delij[2] = x(j,2) - ztmp;
const F_FLOAT rsqij = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2];
const F_FLOAT rij = sqrt(rsqij);
// theta and derivatives
cos_theta = (delij[0]*delik[0]+delij[1]*delik[1]+delij[2]*delik[2])/(rij*rik);
if( cos_theta > 1.0 ) cos_theta = 1.0;
if( cos_theta < -1.0 ) cos_theta = -1.0;
theta = acos(cos_theta);
const F_FLOAT inv_dists = 1.0 / (rij * rik);
const F_FLOAT Cdot_inv3 = cos_theta * inv_dists * inv_dists;
for( int d = 0; d < 3; d++ ) {
dcos_theta_di[d] = -(delik[d] + delij[d]) * inv_dists + Cdot_inv3 * (rsqik * delij[d] + rsqij * delik[d]);
dcos_theta_dj[d] = delik[d] * inv_dists - Cdot_inv3 * rsqik * delij[d];
dcos_theta_dk[d] = delij[d] * inv_dists - Cdot_inv3 * rsqij * delik[d];
}
// hydrogen bond energy
const F_FLOAT p_hb1 = paramshbp(jtype,itype,ktype).p_hb1;
const F_FLOAT p_hb2 = paramshbp(jtype,itype,ktype).p_hb2;
const F_FLOAT p_hb3 = paramshbp(jtype,itype,ktype).p_hb3;
const F_FLOAT r0_hb = paramshbp(jtype,itype,ktype).r0_hb;
sin_theta2 = sin(theta/2.0);
sin_xhz4 = SQR(sin_theta2);
sin_xhz4 *= sin_xhz4;
cos_xhz1 = (1.0 - cos_theta);
exp_hb2 = exp(-p_hb2 * bo_ij);
exp_hb3 = exp(-p_hb3 * (r0_hb/rik + rik/r0_hb - 2.0));
e_hb = p_hb1 * (1.0 - exp_hb2) * exp_hb3 * sin_xhz4;
if (eflag) ev.ereax[8] += e_hb;
// hydrogen bond forces
CEhb1 = p_hb1 * p_hb2 * exp_hb2 * exp_hb3 * sin_xhz4;
CEhb2 = -p_hb1/2.0 * (1.0 - exp_hb2) * exp_hb3 * cos_xhz1;
CEhb3 = -p_hb3 * (-r0_hb/SQR(rik) + 1.0/r0_hb) * e_hb;
d_Cdbo(i,j_index) += CEhb1; // dbo term
// dcos terms
for (int d = 0; d < 3; d++) fi_tmp[d] = CEhb2 * dcos_theta_di[d];
for (int d = 0; d < 3; d++) fj_tmp[d] = CEhb2 * dcos_theta_dj[d];
for (int d = 0; d < 3; d++) fk_tmp[d] = CEhb2 * dcos_theta_dk[d];
// dr terms
for (int d = 0; d < 3; d++) fi_tmp[d] -= CEhb3/rik * delik[d];
for (int d = 0; d < 3; d++) fk_tmp[d] += CEhb3/rik * delik[d];
for (int d = 0; d < 3; d++) fitmp[d] -= fi_tmp[d];
for (int d = 0; d < 3; d++) a_f(j,d) -= fj_tmp[d];
for (int d = 0; d < 3; d++) a_f(k,d) -= fk_tmp[d];
for (int d = 0; d < 3; d++) delki[d] = -1.0 * delik[d];
for (int d = 0; d < 3; d++) delji[d] = -1.0 * delij[d];
if (eflag_atom) this->template e_tally<NEIGHFLAG>(ev,i,j,e_hb);
if (vflag_either) this->template v_tally3<NEIGHFLAG>(ev,i,j,k,fj_tmp,fk_tmp,delji,delki);
}
}
for (int d = 0; d < 3; d++) a_f(i,d) += fitmp[d];
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeHydrogen<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT_REAX ev;
this->template operator()<NEIGHFLAG,EVFLAG>(PairReaxComputeHydrogen<NEIGHFLAG,EVFLAG>(), ii, ev);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxUpdateBond<NEIGHFLAG>, const int &ii) const {
Kokkos::View<F_FLOAT**, typename DAT::t_ffloat_2d_dl::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_Cdbo = d_Cdbo;
Kokkos::View<F_FLOAT**, typename DAT::t_ffloat_2d_dl::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_Cdbopi = d_Cdbopi;
Kokkos::View<F_FLOAT**, typename DAT::t_ffloat_2d_dl::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_Cdbopi2 = d_Cdbopi2;
const int i = d_ilist[ii];
const int itag = tag(i);
const int j_start = d_bo_first[i];
const int j_end = j_start + d_bo_num[i];
for (int jj = j_start; jj < j_end; jj++) {
int j = d_bo_list[jj];
j &= NEIGHMASK;
const int jtag = tag(j);
const int j_index = jj - j_start;
const F_FLOAT Cdbo_i = d_Cdbo(i,j_index);
const F_FLOAT Cdbopi_i = d_Cdbopi(i,j_index);
const F_FLOAT Cdbopi2_i = d_Cdbopi2(i,j_index);
const int k_start = d_bo_first[j];
const int k_end = k_start + d_bo_num[j];
for (int kk = k_start; kk < k_end; kk++) {
int k = d_bo_list[kk];
k &= NEIGHMASK;
if (k != i) continue;
const int k_index = kk - k_start;
int flag = 0;
if (itag > jtag) {
if ((itag+jtag) % 2 == 0) flag = 1;
} else if (itag < jtag) {
if ((itag+jtag) % 2 == 1) flag = 1;
}
if (flag) {
a_Cdbo(j,k_index) += Cdbo_i;
a_Cdbopi(j,k_index) += Cdbopi_i;
a_Cdbopi2(j,k_index) += Cdbopi2_i;
}
}
}
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeBond1<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT_REAX& ev) const {
Kokkos::View<F_FLOAT*[3], typename DAT::t_f_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_f = f;
Kokkos::View<F_FLOAT*, typename DAT::t_ffloat_1d::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_CdDelta = d_CdDelta;
F_FLOAT delij[3];
F_FLOAT p_be1, p_be2, De_s, De_p, De_pp, pow_BOs_be2, exp_be12, CEbo, ebond;
const int i = d_ilist[ii];
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
const int itype = type(i);
const int itag = tag(i);
const F_FLOAT imass = paramssing(itype).mass;
const F_FLOAT val_i = paramssing(itype).valency;
const int j_start = d_bo_first[i];
const int j_end = j_start + d_bo_num[i];
F_FLOAT CdDelta_i = 0.0;
- F_FLOAT fitmp[3];
- for (int j = 0; j < 3; j++) fitmp[j] = 0.0;
for (int jj = j_start; jj < j_end; jj++) {
int j = d_bo_list[jj];
j &= NEIGHMASK;
const int jtag = tag(j);
if (itag > jtag) {
if ((itag+jtag) % 2 == 0) continue;
} else if (itag < jtag) {
if ((itag+jtag) % 2 == 1) continue;
} else {
if (x(j,2) < ztmp) continue;
if (x(j,2) == ztmp && x(j,1) < ytmp) continue;
if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue;
}
const int jtype = type(j);
const int j_index = jj - j_start;
const F_FLOAT jmass = paramssing(jtype).mass;
delij[0] = x(j,0) - xtmp;
delij[1] = x(j,1) - ytmp;
delij[2] = x(j,2) - ztmp;
const F_FLOAT rsq = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2];
const F_FLOAT rij = sqrt(rsq);
const int k_start = d_bo_first[j];
const int k_end = k_start + d_bo_num[j];
const F_FLOAT p_bo1 = paramstwbp(itype,jtype).p_bo1;
const F_FLOAT p_bo2 = paramstwbp(itype,jtype).p_bo2;
const F_FLOAT p_bo3 = paramstwbp(itype,jtype).p_bo3;
const F_FLOAT p_bo4 = paramstwbp(itype,jtype).p_bo4;
const F_FLOAT p_bo5 = paramstwbp(itype,jtype).p_bo5;
const F_FLOAT p_bo6 = paramstwbp(itype,jtype).p_bo6;
const F_FLOAT r_s = paramstwbp(itype,jtype).r_s;
const F_FLOAT r_pi = paramstwbp(itype,jtype).r_pi;
const F_FLOAT r_pi2 = paramstwbp(itype,jtype).r_pi2;
// bond energy (nlocal only)
p_be1 = paramstwbp(itype,jtype).p_be1;
p_be2 = paramstwbp(itype,jtype).p_be2;
De_s = paramstwbp(itype,jtype).De_s;
De_p = paramstwbp(itype,jtype).De_p;
De_pp = paramstwbp(itype,jtype).De_pp;
const F_FLOAT BO_i = d_BO(i,j_index);
const F_FLOAT BO_s_i = d_BO_s(i,j_index);
const F_FLOAT BO_pi_i = d_BO_pi(i,j_index);
const F_FLOAT BO_pi2_i = d_BO_pi2(i,j_index);
pow_BOs_be2 = pow(BO_s_i,p_be2);
exp_be12 = exp(p_be1*(1.0-pow_BOs_be2));
CEbo = -De_s*exp_be12*(1.0-p_be1*p_be2*pow_BOs_be2);
ebond = -De_s*BO_s_i*exp_be12
-De_p*BO_pi_i
-De_pp*BO_pi2_i;
if (eflag) ev.evdwl += ebond;
//if (eflag_atom) this->template ev_tally<NEIGHFLAG>(ev,i,j,ebond,0.0,0.0,0.0,0.0);
//if (eflag_atom) this->template e_tally<NEIGHFLAG>(ev,i,j,ebond);
// calculate derivatives of Bond Orders
d_Cdbo(i,j_index) += CEbo;
d_Cdbopi(i,j_index) -= (CEbo + De_p);
d_Cdbopi2(i,j_index) -= (CEbo + De_pp);
// Stabilisation terminal triple bond
F_FLOAT estriph = 0.0;
if( BO_i >= 1.00 ) {
if( gp[37] == 2 || (imass == 12.0000 && jmass == 15.9990) ||
(jmass == 12.0000 && imass == 15.9990) ) {
const F_FLOAT exphu = exp(-gp[7] * SQR(BO_i - 2.50) );
const F_FLOAT exphua1 = exp(-gp[3] * (d_total_bo[i]-BO_i));
const F_FLOAT exphub1 = exp(-gp[3] * (d_total_bo[j]-BO_i));
const F_FLOAT exphuov = exp(gp[4] * (d_Delta[i] + d_Delta[j]));
const F_FLOAT hulpov = 1.0 / (1.0 + 25.0 * exphuov);
estriph = gp[10] * exphu * hulpov * (exphua1 + exphub1);
if (eflag) ev.evdwl += estriph;
//if (eflag_atom) this->template ev_tally<NEIGHFLAG>(ev,i,j,estriph,0.0,0.0,0.0,0.0);
//if (eflag_atom) this->template e_tally<NEIGHFLAG>(ev,i,j,estriph);
const F_FLOAT decobdbo = gp[10] * exphu * hulpov * (exphua1 + exphub1) *
( gp[3] - 2.0 * gp[7] * (BO_i-2.50) );
const F_FLOAT decobdboua = -gp[10] * exphu * hulpov *
(gp[3]*exphua1 + 25.0*gp[4]*exphuov*hulpov*(exphua1+exphub1));
const F_FLOAT decobdboub = -gp[10] * exphu * hulpov *
(gp[3]*exphub1 + 25.0*gp[4]*exphuov*hulpov*(exphua1+exphub1));
d_Cdbo(i,j_index) += decobdbo;
CdDelta_i += decobdboua;
a_CdDelta[j] += decobdboub;
}
}
const F_FLOAT eng_tmp = ebond + estriph;
if (eflag_atom) this->template e_tally<NEIGHFLAG>(ev,i,j,eng_tmp);
}
a_CdDelta[i] += CdDelta_i;
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeBond1<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT_REAX ev;
this->template operator()<NEIGHFLAG,EVFLAG>(PairReaxComputeBond1<NEIGHFLAG,EVFLAG>(), ii, ev);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeBond2<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT_REAX& ev) const {
Kokkos::View<F_FLOAT*[3], typename DAT::t_f_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_f = f;
- F_FLOAT C12, C34, C56, BO_s, BO_pi, BO_pi2, BO, delij[3], delik[3], deljk[3], tmpvec[3];
+ F_FLOAT delij[3], delik[3], deljk[3], tmpvec[3];
F_FLOAT dBOp_i[3], dBOp_k[3], dln_BOp_pi[3], dln_BOp_pi2[3];
const int i = d_ilist[ii];
const X_FLOAT xtmp = x(i,0);
const X_FLOAT ytmp = x(i,1);
const X_FLOAT ztmp = x(i,2);
const int itype = type(i);
const int itag = tag(i);
const F_FLOAT imass = paramssing(itype).mass;
const F_FLOAT val_i = paramssing(itype).valency;
const int j_start = d_bo_first[i];
const int j_end = j_start + d_bo_num[i];
F_FLOAT CdDelta_i = d_CdDelta[i];
F_FLOAT fitmp[3];
for (int j = 0; j < 3; j++) fitmp[j] = 0.0;
for (int jj = j_start; jj < j_end; jj++) {
int j = d_bo_list[jj];
j &= NEIGHMASK;
const int jtag = tag(j);
if (itag > jtag) {
if ((itag+jtag) % 2 == 0) continue;
} else if (itag < jtag) {
if ((itag+jtag) % 2 == 1) continue;
} else {
if (x(j,2) < ztmp) continue;
if (x(j,2) == ztmp && x(j,1) < ytmp) continue;
if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue;
}
const int jtype = type(j);
const int j_index = jj - j_start;
const F_FLOAT jmass = paramssing(jtype).mass;
F_FLOAT CdDelta_j = d_CdDelta[j];
delij[0] = x(j,0) - xtmp;
delij[1] = x(j,1) - ytmp;
delij[2] = x(j,2) - ztmp;
const F_FLOAT rsq = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2];
const F_FLOAT rij = sqrt(rsq);
const int k_start = d_bo_first[j];
const int k_end = k_start + d_bo_num[j];
F_FLOAT coef_C1dbo, coef_C2dbo, coef_C3dbo, coef_C1dbopi, coef_C2dbopi, coef_C3dbopi, coef_C4dbopi;
F_FLOAT coef_C1dbopi2, coef_C2dbopi2, coef_C3dbopi2, coef_C4dbopi2, coef_C1dDelta, coef_C2dDelta, coef_C3dDelta;
coef_C1dbo = coef_C2dbo = coef_C3dbo = 0.0;
coef_C1dbopi = coef_C2dbopi = coef_C3dbopi = coef_C4dbopi = 0.0;
coef_C1dbopi2 = coef_C2dbopi2 = coef_C3dbopi2 = coef_C4dbopi2 = 0.0;
coef_C1dDelta = coef_C2dDelta = coef_C3dDelta = 0.0;
// total forces on i, j, k (nlocal + nghost, from Add_dBond_to_Forces))
const F_FLOAT Cdbo_ij = d_Cdbo(i,j_index);
coef_C1dbo = d_C1dbo(i,j_index) * (Cdbo_ij);
coef_C2dbo = d_C2dbo(i,j_index) * (Cdbo_ij);
coef_C3dbo = d_C3dbo(i,j_index) * (Cdbo_ij);
const F_FLOAT Cdbopi_ij = d_Cdbopi(i,j_index);
coef_C1dbopi = d_C1dbopi(i,j_index) * (Cdbopi_ij);
coef_C2dbopi = d_C2dbopi(i,j_index) * (Cdbopi_ij);
coef_C3dbopi = d_C3dbopi(i,j_index) * (Cdbopi_ij);
coef_C4dbopi = d_C4dbopi(i,j_index) * (Cdbopi_ij);
const F_FLOAT Cdbopi2_ij = d_Cdbopi2(i,j_index);
coef_C1dbopi2 = d_C1dbopi2(i,j_index) * (Cdbopi2_ij);
coef_C2dbopi2 = d_C2dbopi2(i,j_index) * (Cdbopi2_ij);
coef_C3dbopi2 = d_C3dbopi2(i,j_index) * (Cdbopi2_ij);
coef_C4dbopi2 = d_C4dbopi2(i,j_index) * (Cdbopi2_ij);
const F_FLOAT coeff_CdDelta_ij = CdDelta_i + CdDelta_j;
coef_C1dDelta = d_C1dbo(i,j_index) * (coeff_CdDelta_ij);
coef_C2dDelta = d_C2dbo(i,j_index) * (coeff_CdDelta_ij);
coef_C3dDelta = d_C3dbo(i,j_index) * (coeff_CdDelta_ij);
F_FLOAT temp[3];
dln_BOp_pi[0] = d_dln_BOp_pix(i,j_index);
dln_BOp_pi[1] = d_dln_BOp_piy(i,j_index);
dln_BOp_pi[2] = d_dln_BOp_piz(i,j_index);
dln_BOp_pi2[0] = d_dln_BOp_pi2x(i,j_index);
dln_BOp_pi2[1] = d_dln_BOp_pi2y(i,j_index);
dln_BOp_pi2[2] = d_dln_BOp_pi2z(i,j_index);
dBOp_i[0] = d_dBOpx(i,j_index);
dBOp_i[1] = d_dBOpy(i,j_index);
dBOp_i[2] = d_dBOpz(i,j_index);
// forces on i
for (int d = 0; d < 3; d++) temp[d] = coef_C1dbo * dBOp_i[d];
for (int d = 0; d < 3; d++) temp[d] += coef_C2dbo * d_dDeltap_self(i,d);
for (int d = 0; d < 3; d++) temp[d] += coef_C1dDelta * dBOp_i[d];
for (int d = 0; d < 3; d++) temp[d] += coef_C2dDelta * d_dDeltap_self(i,d);
for (int d = 0; d < 3; d++) temp[d] += coef_C1dbopi * dln_BOp_pi[d];
for (int d = 0; d < 3; d++) temp[d] += coef_C2dbopi * dBOp_i[d];
for (int d = 0; d < 3; d++) temp[d] += coef_C3dbopi * d_dDeltap_self(i,d);
for (int d = 0; d < 3; d++) temp[d] += coef_C1dbopi2 * dln_BOp_pi2[d];
for (int d = 0; d < 3; d++) temp[d] += coef_C2dbopi2 * dBOp_i[d];
for (int d = 0; d < 3; d++) temp[d] += coef_C3dbopi2 * d_dDeltap_self(i,d);
if (EVFLAG)
if (vflag_either) this->template v_tally<NEIGHFLAG>(ev,i,temp,delij);
fitmp[0] -= temp[0];
fitmp[1] -= temp[1];
fitmp[2] -= temp[2];
// forces on j
for (int d = 0; d < 3; d++) temp[d] = -coef_C1dbo * dBOp_i[d];
for (int d = 0; d < 3; d++) temp[d] += coef_C3dbo * d_dDeltap_self(j,d);
for (int d = 0; d < 3; d++) temp[d] -= coef_C1dDelta * dBOp_i[d];
for (int d = 0; d < 3; d++) temp[d] += coef_C3dDelta * d_dDeltap_self(j,d);
for (int d = 0; d < 3; d++) temp[d] -= coef_C1dbopi * dln_BOp_pi[d];
for (int d = 0; d < 3; d++) temp[d] -= coef_C2dbopi * dBOp_i[d];
for (int d = 0; d < 3; d++) temp[d] += coef_C4dbopi * d_dDeltap_self(j,d);
for (int d = 0; d < 3; d++) temp[d] -= coef_C1dbopi2 * dln_BOp_pi2[d];
for (int d = 0; d < 3; d++) temp[d] -= coef_C2dbopi2 * dBOp_i[d];
for (int d = 0; d < 3; d++) temp[d] += coef_C4dbopi2 * d_dDeltap_self(j,d);
a_f(j,0) -= temp[0];
a_f(j,1) -= temp[1];
a_f(j,2) -= temp[2];
if (EVFLAG)
if (vflag_either) {
for (int d = 0; d < 3; d++) tmpvec[d] = -delij[d];
this->template v_tally<NEIGHFLAG>(ev,j,temp,tmpvec);
}
// forces on k: i neighbor
for (int kk = j_start; kk < j_end; kk++) {
int k = d_bo_list[kk];
k &= NEIGHMASK;
const int k_index = kk - j_start;
dBOp_k[0] = d_dBOpx(i,k_index);
dBOp_k[1] = d_dBOpy(i,k_index);
dBOp_k[2] = d_dBOpz(i,k_index);
const F_FLOAT coef_all = -coef_C2dbo - coef_C2dDelta - coef_C3dbopi - coef_C3dbopi2;
for (int d = 0; d < 3; d++) temp[d] = coef_all * dBOp_k[d];
a_f(k,0) -= temp[0];
a_f(k,1) -= temp[1];
a_f(k,2) -= temp[2];
if (EVFLAG)
if (vflag_either) {
delik[0] = x(k,0) - xtmp;
delik[1] = x(k,1) - ytmp;
delik[2] = x(k,2) - ztmp;
for (int d = 0; d < 3; d++) tmpvec[d] = x(j,d) - x(k,d) - delik[d];
this->template v_tally<NEIGHFLAG>(ev,k,temp,tmpvec);
}
}
// forces on k: j neighbor
for (int kk = k_start; kk < k_end; kk++) {
int k = d_bo_list[kk];
k &= NEIGHMASK;
const int k_index = kk - k_start;
dBOp_k[0] = d_dBOpx(j,k_index);
dBOp_k[1] = d_dBOpy(j,k_index);
dBOp_k[2] = d_dBOpz(j,k_index);
const F_FLOAT coef_all = -coef_C3dbo - coef_C3dDelta - coef_C4dbopi - coef_C4dbopi2;
for (int d = 0; d < 3; d++) temp[d] = coef_all * dBOp_k[d];
a_f(k,0) -= temp[0];
a_f(k,1) -= temp[1];
a_f(k,2) -= temp[2];
if (EVFLAG) {
if (vflag_either) {
for (int d = 0; d < 3; d++) deljk[d] = x(k,d) - x(j,d);
- const F_FLOAT rsqjk = deljk[0]*deljk[0] + deljk[1]*deljk[1] + deljk[2]*deljk[2];
for (int d = 0; d < 3; d++) tmpvec[d] = x(i,d) - x(k,d) - deljk[d];
this->template v_tally<NEIGHFLAG>(ev,k,temp,tmpvec);
}
}
}
}
for (int d = 0; d < 3; d++) a_f(i,d) += fitmp[d];
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeBond2<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT_REAX ev;
this->template operator()<NEIGHFLAG,EVFLAG>(PairReaxComputeBond2<NEIGHFLAG,EVFLAG>(), ii, ev);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::ev_tally(EV_FLOAT_REAX &ev, const int &i, const int &j,
const F_FLOAT &epair, const F_FLOAT &fpair, const F_FLOAT &delx,
const F_FLOAT &dely, const F_FLOAT &delz) const
{
const int VFLAG = vflag_either;
// The eatom and vatom arrays are atomic for Half/Thread neighbor style
Kokkos::View<E_FLOAT*, typename DAT::t_efloat_1d::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_eatom = v_eatom;
Kokkos::View<F_FLOAT*[6], typename DAT::t_virial_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_vatom = v_vatom;
if (eflag_atom) {
const E_FLOAT epairhalf = 0.5 * epair;
a_eatom[i] += epairhalf;
if (NEIGHFLAG != FULL) a_eatom[j] += epairhalf;
}
if (VFLAG) {
const E_FLOAT v0 = delx*delx*fpair;
const E_FLOAT v1 = dely*dely*fpair;
const E_FLOAT v2 = delz*delz*fpair;
const E_FLOAT v3 = delx*dely*fpair;
const E_FLOAT v4 = delx*delz*fpair;
const E_FLOAT v5 = dely*delz*fpair;
if (vflag_global) {
if (NEIGHFLAG != FULL) {
ev.v[0] += v0;
ev.v[1] += v1;
ev.v[2] += v2;
ev.v[3] += v3;
ev.v[4] += v4;
ev.v[5] += v5;
} else {
ev.v[0] += 0.5*v0;
ev.v[1] += 0.5*v1;
ev.v[2] += 0.5*v2;
ev.v[3] += 0.5*v3;
ev.v[4] += 0.5*v4;
ev.v[5] += 0.5*v5;
}
}
if (vflag_atom) {
a_vatom(i,0) += 0.5*v0;
a_vatom(i,1) += 0.5*v1;
a_vatom(i,2) += 0.5*v2;
a_vatom(i,3) += 0.5*v3;
a_vatom(i,4) += 0.5*v4;
a_vatom(i,5) += 0.5*v5;
if (NEIGHFLAG != FULL) {
a_vatom(j,0) += 0.5*v0;
a_vatom(j,1) += 0.5*v1;
a_vatom(j,2) += 0.5*v2;
a_vatom(j,3) += 0.5*v3;
a_vatom(j,4) += 0.5*v4;
a_vatom(j,5) += 0.5*v5;
}
}
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::e_tally(EV_FLOAT_REAX &ev, const int &i, const int &j,
const F_FLOAT &epair) const
{
// The eatom array is atomic for Half/Thread neighbor style
if (eflag_atom) {
Kokkos::View<E_FLOAT*, typename DAT::t_efloat_1d::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_eatom = v_eatom;
const E_FLOAT epairhalf = 0.5 * epair;
a_eatom[i] += epairhalf;
a_eatom[j] += epairhalf;
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::e_tally_single(EV_FLOAT_REAX &ev, const int &i,
const F_FLOAT &epair) const
{
// The eatom array is atomic for Half/Thread neighbor style
Kokkos::View<E_FLOAT*, typename DAT::t_efloat_1d::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_eatom = v_eatom;
a_eatom[i] += epair;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::v_tally(EV_FLOAT_REAX &ev, const int &i,
F_FLOAT *fi, F_FLOAT *drij) const
{
F_FLOAT v[6];
v[0] = 0.5*drij[0]*fi[0];
v[1] = 0.5*drij[1]*fi[1];
v[2] = 0.5*drij[2]*fi[2];
v[3] = 0.5*drij[0]*fi[1];
v[4] = 0.5*drij[0]*fi[2];
v[5] = 0.5*drij[1]*fi[2];
if (vflag_global) {
ev.v[0] += v[0];
ev.v[1] += v[1];
ev.v[2] += v[2];
ev.v[3] += v[3];
ev.v[4] += v[4];
ev.v[5] += v[5];
}
if (vflag_atom) {
Kokkos::View<F_FLOAT*[6], typename DAT::t_virial_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_vatom = v_vatom;
a_vatom(i,0) += v[0]; a_vatom(i,1) += v[1]; a_vatom(i,2) += v[2];
a_vatom(i,3) += v[3]; a_vatom(i,4) += v[4]; a_vatom(i,5) += v[5];
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::v_tally3(EV_FLOAT_REAX &ev, const int &i, const int &j, const int &k,
F_FLOAT *fj, F_FLOAT *fk, F_FLOAT *drij, F_FLOAT *drik) const
{
// The eatom and vatom arrays are atomic for Half/Thread neighbor style
Kokkos::View<F_FLOAT*[6], typename DAT::t_virial_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_vatom = v_vatom;
F_FLOAT v[6];
v[0] = (drij[0]*fj[0] + drik[0]*fk[0]);
v[1] = (drij[1]*fj[1] + drik[1]*fk[1]);
v[2] = (drij[2]*fj[2] + drik[2]*fk[2]);
v[3] = (drij[0]*fj[1] + drik[0]*fk[1]);
v[4] = (drij[0]*fj[2] + drik[0]*fk[2]);
v[5] = (drij[1]*fj[2] + drik[1]*fk[2]);
if (vflag_global) {
ev.v[0] += v[0];
ev.v[1] += v[1];
ev.v[2] += v[2];
ev.v[3] += v[3];
ev.v[4] += v[4];
ev.v[5] += v[5];
}
if (vflag_atom) {
a_vatom(i,0) += THIRD*v[0]; a_vatom(i,1) += THIRD*v[1]; a_vatom(i,2) += THIRD*v[2];
a_vatom(i,3) += THIRD*v[3]; a_vatom(i,4) += THIRD*v[4]; a_vatom(i,5) += THIRD*v[5];
a_vatom(j,0) += THIRD*v[0]; a_vatom(j,1) += THIRD*v[1]; a_vatom(j,2) += THIRD*v[2];
a_vatom(j,3) += THIRD*v[3]; a_vatom(j,4) += THIRD*v[4]; a_vatom(j,5) += THIRD*v[5];
a_vatom(k,0) += THIRD*v[0]; a_vatom(k,1) += THIRD*v[1]; a_vatom(k,2) += THIRD*v[2];
a_vatom(k,3) += THIRD*v[3]; a_vatom(k,4) += THIRD*v[4]; a_vatom(k,5) += THIRD*v[5];
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::v_tally4(EV_FLOAT_REAX &ev, const int &i, const int &j, const int &k,
const int &l, F_FLOAT *fi, F_FLOAT *fj, F_FLOAT *fk, F_FLOAT *dril, F_FLOAT *drjl, F_FLOAT *drkl) const
{
// The vatom array is atomic for Half/Thread neighbor style
F_FLOAT v[6];
v[0] = 0.25 * (dril[0]*fi[0] + drjl[0]*fj[0] + drkl[0]*fk[0]);
v[1] = 0.25 * (dril[1]*fi[1] + drjl[1]*fj[1] + drkl[1]*fk[1]);
v[2] = 0.25 * (dril[2]*fi[2] + drjl[2]*fj[2] + drkl[2]*fk[2]);
v[3] = 0.25 * (dril[0]*fi[1] + drjl[0]*fj[1] + drkl[0]*fk[1]);
v[4] = 0.25 * (dril[0]*fi[2] + drjl[0]*fj[2] + drkl[0]*fk[2]);
v[5] = 0.25 * (dril[1]*fi[2] + drjl[1]*fj[2] + drkl[1]*fk[2]);
if (vflag_global) {
ev.v[0] += v[0];
ev.v[1] += v[1];
ev.v[2] += v[2];
ev.v[3] += v[3];
ev.v[4] += v[4];
ev.v[5] += v[5];
}
if (vflag_atom) {
Kokkos::View<F_FLOAT*[6], typename DAT::t_virial_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_vatom = v_vatom;
a_vatom(i,0) += v[0]; a_vatom(i,1) += v[1]; a_vatom(i,2) += v[2];
a_vatom(i,3) += v[3]; a_vatom(i,4) += v[4]; a_vatom(i,5) += v[5];
a_vatom(j,0) += v[0]; a_vatom(j,1) += v[1]; a_vatom(j,2) += v[2];
a_vatom(j,3) += v[3]; a_vatom(j,4) += v[4]; a_vatom(j,5) += v[5];
a_vatom(k,0) += v[0]; a_vatom(k,1) += v[1]; a_vatom(k,2) += v[2];
a_vatom(k,3) += v[3]; a_vatom(k,4) += v[4]; a_vatom(k,5) += v[5];
a_vatom(l,0) += v[0]; a_vatom(l,1) += v[1]; a_vatom(l,2) += v[2];
a_vatom(l,3) += v[3]; a_vatom(l,4) += v[4]; a_vatom(l,5) += v[5];
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void PairReaxCKokkos<DeviceType>::v_tally3_atom(EV_FLOAT_REAX &ev, const int &i, const int &j, const int &k,
F_FLOAT *fj, F_FLOAT *fk, F_FLOAT *drji, F_FLOAT *drjk) const
{
F_FLOAT v[6];
v[0] = THIRD * (drji[0]*fj[0] + drjk[0]*fk[0]);
v[1] = THIRD * (drji[1]*fj[1] + drjk[1]*fk[1]);
v[2] = THIRD * (drji[2]*fj[2] + drjk[2]*fk[2]);
v[3] = THIRD * (drji[0]*fj[1] + drjk[0]*fk[1]);
v[4] = THIRD * (drji[0]*fj[2] + drjk[0]*fk[2]);
v[5] = THIRD * (drji[1]*fj[2] + drjk[1]*fk[2]);
if (vflag_global) {
ev.v[0] += v[0];
ev.v[1] += v[1];
ev.v[2] += v[2];
ev.v[3] += v[3];
ev.v[4] += v[4];
ev.v[5] += v[5];
}
if (vflag_atom) {
d_vatom(i,0) += v[0]; d_vatom(i,1) += v[1]; d_vatom(i,2) += v[2];
d_vatom(i,3) += v[3]; d_vatom(i,4) += v[4]; d_vatom(i,5) += v[5];
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void *PairReaxCKokkos<DeviceType>::extract(const char *str, int &dim)
{
dim = 1;
if (strcmp(str,"chi") == 0 && chi) {
for (int i = 1; i <= atom->ntypes; i++)
if (map[i] >= 0) chi[i] = system->reax_param.sbp[map[i]].chi;
else chi[i] = 0.0;
return (void *) chi;
}
if (strcmp(str,"eta") == 0 && eta) {
for (int i = 1; i <= atom->ntypes; i++)
if (map[i] >= 0) eta[i] = system->reax_param.sbp[map[i]].eta;
else eta[i] = 0.0;
return (void *) eta;
}
if (strcmp(str,"gamma") == 0 && gamma) {
for (int i = 1; i <= atom->ntypes; i++)
if (map[i] >= 0) gamma[i] = system->reax_param.sbp[map[i]].gamma;
else gamma[i] = 0.0;
return (void *) gamma;
}
return NULL;
}
+/* ----------------------------------------------------------------------
+ setup for energy, virial computation
+ see integrate::ev_set() for values of eflag (0-3) and vflag (0-6)
+------------------------------------------------------------------------- */
+
+template<class DeviceType>
+void PairReaxCKokkos<DeviceType>::ev_setup(int eflag, int vflag)
+{
+ int i;
+
+ evflag = 1;
+
+ eflag_either = eflag;
+ eflag_global = eflag % 2;
+ eflag_atom = eflag / 2;
+
+ vflag_either = vflag;
+ vflag_global = vflag % 4;
+ vflag_atom = vflag / 4;
+
+ // reallocate per-atom arrays if necessary
+
+ if (eflag_atom && atom->nmax > maxeatom) {
+ memory->destroy_kokkos(k_eatom,eatom);
+ memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom");
+ v_eatom = k_eatom.view<DeviceType>();
+ }
+ if (vflag_atom && atom->nmax > maxvatom) {
+ memory->destroy_kokkos(k_vatom,vatom);
+ memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom");
+ v_vatom = k_vatom.view<DeviceType>();
+ }
+
+ // zero accumulators
+
+ if (eflag_global) eng_vdwl = eng_coul = 0.0;
+ if (vflag_global) for (i = 0; i < 6; i++) virial[i] = 0.0;
+
+ // if vflag_global = 2 and pair::compute() calls virial_fdotr_compute()
+ // compute global virial via (F dot r) instead of via pairwise summation
+ // unset other flags as appropriate
+
+ if (vflag_global == 2 && no_virial_fdotr_compute == 0) {
+ vflag_fdotr = 1;
+ vflag_global = 0;
+ if (vflag_atom == 0) vflag_either = 0;
+ if (vflag_either == 0 && eflag_either == 0) evflag = 0;
+ } else vflag_fdotr = 0;
+}
+
/* ---------------------------------------------------------------------- */
template<class DeviceType>
double PairReaxCKokkos<DeviceType>::memory_usage()
{
double bytes = 0.0;
if (cut_hbsq > 0.0) {
bytes += nmax*3*sizeof(int);
bytes += maxhb*nmax*sizeof(int);
}
bytes += nmax*2*sizeof(int);
bytes += maxbo*nmax*sizeof(int);
bytes += nmax*17*sizeof(F_FLOAT);
bytes += maxbo*nmax*34*sizeof(F_FLOAT);
return bytes;
}
/* ---------------------------------------------------------------------- */
template class PairReaxCKokkos<LMPDeviceType>;
#ifdef KOKKOS_HAVE_CUDA
template class PairReaxCKokkos<LMPHostType>;
#endif
}
diff --git a/src/KOKKOS/pair_reax_c_kokkos.h b/src/KOKKOS/pair_reax_c_kokkos.h
index 9af687844..8bba6c50d 100644
--- a/src/KOKKOS/pair_reax_c_kokkos.h
+++ b/src/KOKKOS/pair_reax_c_kokkos.h
@@ -1,416 +1,415 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifdef PAIR_CLASS
PairStyle(reax/c/kk,PairReaxCKokkos<LMPDeviceType>)
PairStyle(reax/c/kk/device,PairReaxCKokkos<LMPDeviceType>)
PairStyle(reax/c/kk/host,PairReaxCKokkos<LMPHostType>)
#else
#ifndef LMP_PAIR_REAXC_KOKKOS_H
#define LMP_PAIR_REAXC_KOKKOS_H
#include "stdio.h"
#include "pair_kokkos.h"
#include "pair_reax_c.h"
#include "neigh_list_kokkos.h"
#include "reaxc_types.h"
#define C_ele 332.06371
#define SMALL 0.0001
#define KCALpMOL_to_EV 23.02
#define HB_THRESHOLD 1e-2 // 0.01
#define MAX_BONDS 30
#define SQR(x) ((x)*(x))
namespace LAMMPS_NS {
typedef Kokkos::DualView<LR_data*,Kokkos::LayoutRight,LMPDeviceType> tdual_LR_data_1d;
typedef typename tdual_LR_data_1d::t_dev t_LR_data_1d;
typedef Kokkos::DualView<cubic_spline_coef*,Kokkos::LayoutRight,LMPDeviceType> tdual_cubic_spline_coef_1d;
typedef typename tdual_cubic_spline_coef_1d::t_dev t_cubic_spline_coef_1d;
struct LR_lookup_table_kk
{
double xmin, xmax;
int n;
double dx, inv_dx;
double a;
double m;
double c;
tdual_LR_data_1d k_y;
tdual_cubic_spline_coef_1d k_H;
tdual_cubic_spline_coef_1d k_vdW, k_CEvd;
tdual_cubic_spline_coef_1d k_ele, k_CEclmb;
t_LR_data_1d d_y;
t_cubic_spline_coef_1d d_H;
t_cubic_spline_coef_1d d_vdW, d_CEvd;
t_cubic_spline_coef_1d d_ele, d_CEclmb;
};
template<int NEIGHFLAG, int EVFLAG>
struct PairReaxComputePolar{};
template<int NEIGHFLAG, int EVFLAG>
struct PairReaxComputeLJCoulomb{};
template<int NEIGHFLAG, int EVFLAG>
struct PairReaxComputeTabulatedLJCoulomb{};
struct PairReaxBuildListsFull{};
template<int NEIGHFLAG>
struct PairReaxBuildListsHalf{};
template<int NEIGHFLAG>
struct PairReaxBuildListsHalf_LessAtomics{};
struct PairReaxZero{};
struct PairReaxBondOrder1{};
struct PairReaxBondOrder1_LessAtomics{};
struct PairReaxBondOrder2{};
struct PairReaxBondOrder3{};
template<int NEIGHFLAG>
struct PairReaxUpdateBond{};
template<int NEIGHFLAG, int EVFLAG>
struct PairReaxComputeBond1{};
template<int NEIGHFLAG, int EVFLAG>
struct PairReaxComputeBond2{};
template<int NEIGHFLAG, int EVFLAG>
struct PairReaxComputeMulti1{};
template<int NEIGHFLAG, int EVFLAG>
struct PairReaxComputeMulti2{};
template<int NEIGHFLAG, int EVFLAG>
struct PairReaxComputeAngular{};
template<int NEIGHFLAG, int EVFLAG>
struct PairReaxComputeTorsion{};
template<int NEIGHFLAG, int EVFLAG>
struct PairReaxComputeHydrogen{};
template<class DeviceType>
class PairReaxCKokkos : public PairReaxC {
public:
enum {EnabledNeighFlags=FULL|HALF|HALFTHREAD};
enum {COUL_FLAG=1};
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
typedef EV_FLOAT_REAX value_type;
PairReaxCKokkos(class LAMMPS *);
virtual ~PairReaxCKokkos();
- virtual void compute(int, int);
+ void ev_setup(int, int);
+ void compute(int, int);
void *extract(const char *, int &);
void init_style();
double memory_usage();
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputePolar<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputePolar<NEIGHFLAG,EVFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeLJCoulomb<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeLJCoulomb<NEIGHFLAG,EVFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeTabulatedLJCoulomb<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeTabulatedLJCoulomb<NEIGHFLAG,EVFLAG>, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxBuildListsFull, const int&) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxBuildListsHalf<NEIGHFLAG>, const int&) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxBuildListsHalf_LessAtomics<NEIGHFLAG>, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxZero, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxBondOrder1, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxBondOrder1_LessAtomics, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxBondOrder2, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxBondOrder3, const int&) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxUpdateBond<NEIGHFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeBond1<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeBond1<NEIGHFLAG,EVFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeBond2<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeBond2<NEIGHFLAG,EVFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeMulti1<NEIGHFLAG,EVFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeMulti2<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeMulti2<NEIGHFLAG,EVFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeAngular<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeAngular<NEIGHFLAG,EVFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeTorsion<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeTorsion<NEIGHFLAG,EVFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeHydrogen<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(PairReaxComputeHydrogen<NEIGHFLAG,EVFLAG>, const int&) const;
struct params_sing{
params_sing(){mass=0;chi=0;eta=0;r_s=0;r_pi=0;r_pi2=0;valency=0;valency_val=0;valency_e=0;valency_boc=0;nlp_opt=0;
p_lp2=0;p_ovun2=0;p_ovun5=0;p_val3=0;p_val5=0;p_hbond=0;};
params_sing(int i){mass=0;chi=0;eta=0;r_s=0;r_pi=0;r_pi2=0;valency=0;valency_val=0;valency_e=0;valency_boc=0;nlp_opt=0;
p_lp2=0;p_ovun2=0;p_ovun5=0;p_val3=0;p_val5=0;p_hbond=0;};
F_FLOAT mass,chi,eta,r_s,r_pi,r_pi2,valency,valency_val,valency_e,valency_boc,nlp_opt,
p_lp2,p_ovun2,p_ovun5, p_val3, p_val5, p_hbond;
};
struct params_twbp{
params_twbp(){gamma=0;gamma_w=0;alpha=0;r_vdw=0;epsilon=0;acore=0;ecore=0;rcore=0;lgre=0;lgcij=0;
r_s=0;r_pi=0;r_pi2=0;p_bo1=0;p_bo2=0;p_bo3=0;p_bo4=0;p_bo5=0;p_bo6=0;ovc=0;v13cor=0;
p_boc3=0;p_boc4=0;p_boc5=0;p_be1=0,p_be2=0,De_s=0,De_p=0;De_pp=0;
p_ovun1=0;};
params_twbp(int i){gamma=0;gamma_w=0;alpha=0;r_vdw=0;epsilon=0;acore=0;ecore=0;rcore=0;lgre=0;lgcij=0;
r_s=0;r_pi=0;r_pi2=0;p_bo1=0;p_bo2=0;p_bo3=0;p_bo4=0;p_bo5=0;p_bo6=0;ovc=0;v13cor=0;
p_boc3=0;p_boc4=0;p_boc5=0;p_be1=0,p_be2=0,De_s=0,De_p=0;De_pp=0;
p_ovun1=0;};
F_FLOAT gamma,gamma_w,alpha,r_vdw,epsilon,acore,ecore,rcore,lgre,lgcij,
r_s,r_pi,r_pi2,p_bo1,p_bo2,p_bo3,p_bo4,p_bo5,p_bo6,ovc,v13cor,
p_boc3,p_boc4,p_boc5,p_be1,p_be2,De_s,De_p,De_pp,
p_ovun1;
};
struct params_thbp{
params_thbp(){cnt=0;theta_00=0;p_val1=0;p_val2=0;p_val4=0;p_val7=0;p_pen1=0;p_coa1=0;};
params_thbp(int i){cnt=0;theta_00=0;p_val1=0;p_val2=0;p_val4=0;p_val7=0;p_pen1=0;p_coa1=0;};
F_FLOAT cnt, theta_00, p_val1, p_val2, p_val4, p_val7, p_pen1, p_coa1;
};
struct params_fbp{
params_fbp(){p_tor1=0;p_cot1=0;V1=0;V2=0;V3=0;};
params_fbp(int i){p_tor1=0;p_cot1=0;V1=0;V2=0;V3=0;};
F_FLOAT p_tor1, p_cot1, V1, V2, V3;
};
struct params_hbp{
params_hbp(){p_hb1=0;p_hb2=0;p_hb3=0;r0_hb=0;};
params_hbp(int i){p_hb1=0;p_hb2=0;p_hb3=0;r0_hb=0;};
F_FLOAT p_hb1, p_hb2, p_hb3, r0_hb;
};
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void ev_tally(EV_FLOAT_REAX &ev, const int &i, const int &j, const F_FLOAT &epair, const F_FLOAT &fpair, const F_FLOAT &delx,
const F_FLOAT &dely, const F_FLOAT &delz) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void e_tally(EV_FLOAT_REAX &ev, const int &i, const int &j, const F_FLOAT &epair) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void e_tally_single(EV_FLOAT_REAX &ev, const int &i, const F_FLOAT &epair) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void v_tally(EV_FLOAT_REAX &ev, const int &i, F_FLOAT *fi, F_FLOAT *drij) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void v_tally3(EV_FLOAT_REAX &ev, const int &i, const int &j, const int &k,
F_FLOAT *fj, F_FLOAT *fk, F_FLOAT *drij, F_FLOAT *drik) const;
KOKKOS_INLINE_FUNCTION
void v_tally3_atom(EV_FLOAT_REAX &ev, const int &i, const int &j, const int &k,
F_FLOAT *fj, F_FLOAT *fk, F_FLOAT *drji, F_FLOAT *drjk) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void v_tally4(EV_FLOAT_REAX &ev, const int &i, const int &j, const int &k, const int &l,
F_FLOAT *fi, F_FLOAT *fj, F_FLOAT *fk, F_FLOAT *dril, F_FLOAT *drjl, F_FLOAT *drkl) const;
protected:
void cleanup_copy();
void allocate();
void allocate_array();
void setup();
void init_md();
int Init_Lookup_Tables();
void Deallocate_Lookup_Tables();
void LR_vdW_Coulomb( int i, int j, double r_ij, LR_data *lr );
typedef Kokkos::DualView<int*,DeviceType> tdual_int_1d;
Kokkos::DualView<params_sing*,typename DeviceType::array_layout,DeviceType> k_params_sing;
typename Kokkos::DualView<params_sing*,typename DeviceType::array_layout,DeviceType>::t_dev_const paramssing;
typedef Kokkos::DualView<int**,DeviceType> tdual_int_2d;
Kokkos::DualView<params_twbp**,typename DeviceType::array_layout,DeviceType> k_params_twbp;
typename Kokkos::DualView<params_twbp**,typename DeviceType::array_layout,DeviceType>::t_dev_const paramstwbp;
typedef Kokkos::DualView<int***,DeviceType> tdual_int_3d;
Kokkos::DualView<params_thbp***,typename DeviceType::array_layout,DeviceType> k_params_thbp;
typename Kokkos::DualView<params_thbp***,typename DeviceType::array_layout,DeviceType>::t_dev_const paramsthbp;
Kokkos::DualView<params_hbp***,typename DeviceType::array_layout,DeviceType> k_params_hbp;
typename Kokkos::DualView<params_hbp***,typename DeviceType::array_layout,DeviceType>::t_dev_const paramshbp;
typedef Kokkos::DualView<int****,DeviceType> tdual_int_4d;
Kokkos::DualView<params_fbp****,typename DeviceType::array_layout,DeviceType> k_params_fbp;
typename Kokkos::DualView<params_fbp****,typename DeviceType::array_layout,DeviceType>::t_dev_const paramsfbp;
typename AT::t_x_array_randomread x;
typename AT::t_f_array f;
typename AT::t_int_1d_randomread type;
typename AT::t_tagint_1d tag;
typename AT::t_float_1d_randomread q;
DAT::tdual_efloat_1d k_eatom;
- DAT::t_efloat_1d d_eatom;
typename AT::t_efloat_1d v_eatom;
- HAT::t_efloat_1d h_eatom;
DAT::tdual_virial_array k_vatom;
DAT::t_virial_array d_vatom;
typename AT::t_virial_array v_vatom;
HAT::t_virial_array h_vatom;
DAT::tdual_float_1d k_tap;
DAT::t_float_1d d_tap;
HAT::t_float_1d h_tap;
typename AT::t_float_1d d_bo_rij, d_hb_rsq, d_Deltap, d_Deltap_boc, d_total_bo;
typename AT::t_float_1d d_Delta, d_Delta_boc, d_Delta_lp, d_dDelta_lp, d_Delta_lp_temp, d_CdDelta;
typename AT::t_ffloat_2d_dl d_BO, d_BO_s, d_BO_pi, d_BO_pi2, d_dBOp;
typename AT::t_ffloat_2d_dl d_dln_BOp_pix, d_dln_BOp_piy, d_dln_BOp_piz;
typename AT::t_ffloat_2d_dl d_dln_BOp_pi2x, d_dln_BOp_pi2y, d_dln_BOp_pi2z;
typename AT::t_ffloat_2d_dl d_C1dbo, d_C2dbo, d_C3dbo;
typename AT::t_ffloat_2d_dl d_C1dbopi, d_C2dbopi, d_C3dbopi, d_C4dbopi;
typename AT::t_ffloat_2d_dl d_C1dbopi2, d_C2dbopi2, d_C3dbopi2, d_C4dbopi2;
typename AT::t_ffloat_2d_dl d_Cdbo, d_Cdbopi, d_Cdbopi2, d_dDeltap_self;
typedef Kokkos::DualView<F_FLOAT**[7],typename DeviceType::array_layout,DeviceType> tdual_ffloat_2d_n7;
typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread;
typedef typename tdual_ffloat_2d_n7::t_host t_host_ffloat_2d_n7;
typename ArrayTypes<DeviceType>::t_neighbors_2d d_neighbors;
typename ArrayTypes<DeviceType>::t_int_1d_randomread d_ilist;
typename ArrayTypes<DeviceType>::t_int_1d_randomread d_numneigh;
typename AT::t_int_1d d_bo_first, d_bo_num, d_bo_list, d_hb_first, d_hb_num, d_hb_list;
DAT::tdual_int_scalar k_resize_bo, k_resize_hb;
typename AT::t_int_scalar d_resize_bo, d_resize_hb;
typename AT::t_ffloat_2d_dl d_sum_ovun;
typename AT::t_ffloat_2d_dl d_dBOpx, d_dBOpy, d_dBOpz;
class AtomKokkos *atomKK;
int neighflag,newton_pair, maxnumneigh, maxhb, maxbo;
int nlocal,nall,eflag,vflag;
F_FLOAT cut_nbsq, cut_hbsq, cut_bosq, bo_cut, thb_cut, thb_cutsq;
int vdwflag, lgflag;
F_FLOAT gp[39], p_boc1, p_boc2;
friend void pair_virial_fdotr_compute<PairReaxCKokkos>(PairReaxCKokkos*);
int bocnt,hbcnt;
typedef Kokkos::DualView<LR_lookup_table_kk**,LMPDeviceType::array_layout,DeviceType> tdual_LR_lookup_table_kk_2d;
typedef typename tdual_LR_lookup_table_kk_2d::t_dev t_LR_lookup_table_kk_2d;
tdual_LR_lookup_table_kk_2d k_LR;
t_LR_lookup_table_kk_2d d_LR;
};
}
#endif
#endif
/* ERROR/WARNING messages:
*/
diff --git a/src/KOKKOS/verlet_kokkos.cpp b/src/KOKKOS/verlet_kokkos.cpp
index f3c4e3e07..f225249d5 100644
--- a/src/KOKKOS/verlet_kokkos.cpp
+++ b/src/KOKKOS/verlet_kokkos.cpp
@@ -1,612 +1,612 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "verlet_kokkos.h"
#include "neighbor.h"
#include "domain.h"
#include "comm.h"
#include "atom.h"
#include "atom_kokkos.h"
#include "atom_masks.h"
#include "force.h"
#include "pair.h"
#include "bond.h"
#include "angle.h"
#include "dihedral.h"
#include "improper.h"
#include "kspace.h"
#include "output.h"
#include "update.h"
#include "modify.h"
#include "compute.h"
#include "fix.h"
#include "timer.h"
#include "memory.h"
#include "error.h"
#include <ctime>
using namespace LAMMPS_NS;
template<class ViewA, class ViewB>
struct ForceAdder {
ViewA a;
ViewB b;
ForceAdder(const ViewA& a_, const ViewB& b_):a(a_),b(b_) {}
KOKKOS_INLINE_FUNCTION
void operator() (const int& i) const {
a(i,0) += b(i,0);
a(i,1) += b(i,1);
a(i,2) += b(i,2);
}
};
/* ---------------------------------------------------------------------- */
VerletKokkos::VerletKokkos(LAMMPS *lmp, int narg, char **arg) :
Verlet(lmp, narg, arg)
{
atomKK = (AtomKokkos *) atom;
}
/* ----------------------------------------------------------------------
setup before run
------------------------------------------------------------------------- */
void VerletKokkos::setup()
{
if (comm->me == 0 && screen) {
fprintf(screen,"Setting up Verlet run ...\n");
fprintf(screen," Unit style : %s\n", update->unit_style);
fprintf(screen," Current step : " BIGINT_FORMAT "\n", update->ntimestep);
fprintf(screen," Time step : %g\n", update->dt);
timer->print_timeout(screen);
}
update->setupflag = 1;
// setup domain, communication and neighboring
// acquire ghosts
// build neighbor lists
atomKK->modified(Host,ALL_MASK);
atomKK->setup();
modify->setup_pre_exchange();
// debug
atomKK->sync(Host,ALL_MASK);
atomKK->modified(Host,ALL_MASK);
if (triclinic) domain->x2lamda(atomKK->nlocal);
domain->pbc();
atomKK->sync(Host,ALL_MASK);
domain->reset_box();
comm->setup();
if (neighbor->style) neighbor->setup_bins();
comm->exchange();
if (atomKK->sortfreq > 0) atomKK->sort();
comm->borders();
if (triclinic) domain->lamda2x(atomKK->nlocal+atomKK->nghost);
atomKK->sync(Host,ALL_MASK);
domain->image_check();
domain->box_too_small_check();
modify->setup_pre_neighbor();
atomKK->modified(Host,ALL_MASK);
neighbor->build();
neighbor->ncalls = 0;
// compute all forces
ev_set(update->ntimestep);
force_clear();
modify->setup_pre_force(vflag);
if (pair_compute_flag) {
atomKK->sync(force->pair->execution_space,force->pair->datamask_read);
atomKK->modified(force->pair->execution_space,force->pair->datamask_modify);
force->pair->compute(eflag,vflag);
timer->stamp(Timer::PAIR);
}
else if (force->pair) force->pair->compute_dummy(eflag,vflag);
if (atomKK->molecular) {
if (force->bond) {
atomKK->sync(force->bond->execution_space,force->bond->datamask_read);
atomKK->modified(force->bond->execution_space,force->bond->datamask_modify);
force->bond->compute(eflag,vflag);
}
if (force->angle) {
atomKK->sync(force->angle->execution_space,force->angle->datamask_read);
atomKK->modified(force->angle->execution_space,force->angle->datamask_modify);
force->angle->compute(eflag,vflag);
}
if (force->dihedral) {
atomKK->sync(force->dihedral->execution_space,force->dihedral->datamask_read);
atomKK->modified(force->dihedral->execution_space,force->dihedral->datamask_modify);
force->dihedral->compute(eflag,vflag);
}
if (force->improper) {
atomKK->sync(force->improper->execution_space,force->improper->datamask_read);
atomKK->modified(force->improper->execution_space,force->improper->datamask_modify);
force->improper->compute(eflag,vflag);
}
timer->stamp(Timer::BOND);
}
if(force->kspace) {
force->kspace->setup();
if (kspace_compute_flag) {
atomKK->sync(force->kspace->execution_space,force->kspace->datamask_read);
atomKK->modified(force->kspace->execution_space,force->kspace->datamask_modify);
force->kspace->compute(eflag,vflag);
timer->stamp(Timer::KSPACE);
} else force->kspace->compute_dummy(eflag,vflag);
}
if (force->newton) comm->reverse_comm();
modify->setup(vflag);
output->setup();
update->setupflag = 0;
}
/* ----------------------------------------------------------------------
setup without output
flag = 0 = just force calculation
flag = 1 = reneighbor and force calculation
------------------------------------------------------------------------- */
void VerletKokkos::setup_minimal(int flag)
{
update->setupflag = 1;
// setup domain, communication and neighboring
// acquire ghosts
// build neighbor lists
if (flag) {
atomKK->modified(Host,ALL_MASK);
modify->setup_pre_exchange();
// debug
atomKK->sync(Host,ALL_MASK);
atomKK->modified(Host,ALL_MASK);
if (triclinic) domain->x2lamda(atomKK->nlocal);
domain->pbc();
atomKK->sync(Host,ALL_MASK);
domain->reset_box();
comm->setup();
if (neighbor->style) neighbor->setup_bins();
comm->exchange();
comm->borders();
if (triclinic) domain->lamda2x(atomKK->nlocal+atomKK->nghost);
atomKK->sync(Host,ALL_MASK);
domain->image_check();
domain->box_too_small_check();
modify->setup_pre_neighbor();
atomKK->modified(Host,ALL_MASK);
neighbor->build();
neighbor->ncalls = 0;
}
// compute all forces
ev_set(update->ntimestep);
force_clear();
modify->setup_pre_force(vflag);
if (pair_compute_flag) {
atomKK->sync(force->pair->execution_space,force->pair->datamask_read);
atomKK->modified(force->pair->execution_space,force->pair->datamask_modify);
force->pair->compute(eflag,vflag);
timer->stamp(Timer::PAIR);
}
else if (force->pair) force->pair->compute_dummy(eflag,vflag);
if (atomKK->molecular) {
if (force->bond) {
atomKK->sync(force->bond->execution_space,force->bond->datamask_read);
atomKK->modified(force->bond->execution_space,force->bond->datamask_modify);
force->bond->compute(eflag,vflag);
}
if (force->angle) {
atomKK->sync(force->angle->execution_space,force->angle->datamask_read);
atomKK->modified(force->angle->execution_space,force->angle->datamask_modify);
force->angle->compute(eflag,vflag);
}
if (force->dihedral) {
atomKK->sync(force->dihedral->execution_space,force->dihedral->datamask_read);
atomKK->modified(force->dihedral->execution_space,force->dihedral->datamask_modify);
force->dihedral->compute(eflag,vflag);
}
if (force->improper) {
atomKK->sync(force->improper->execution_space,force->improper->datamask_read);
atomKK->modified(force->improper->execution_space,force->improper->datamask_modify);
force->improper->compute(eflag,vflag);
}
timer->stamp(Timer::BOND);
}
if(force->kspace) {
force->kspace->setup();
if (kspace_compute_flag) {
atomKK->sync(force->kspace->execution_space,force->kspace->datamask_read);
atomKK->modified(force->kspace->execution_space,force->kspace->datamask_modify);
force->kspace->compute(eflag,vflag);
timer->stamp(Timer::KSPACE);
} else force->kspace->compute_dummy(eflag,vflag);
}
if (force->newton) comm->reverse_comm();
modify->setup(vflag);
update->setupflag = 0;
}
/* ----------------------------------------------------------------------
run for N steps
------------------------------------------------------------------------- */
void VerletKokkos::run(int n)
{
bigint ntimestep;
int nflag,sortflag;
int n_post_integrate = modify->n_post_integrate;
int n_pre_exchange = modify->n_pre_exchange;
int n_pre_neighbor = modify->n_pre_neighbor;
int n_pre_force = modify->n_pre_force;
int n_post_force = modify->n_post_force;
int n_end_of_step = modify->n_end_of_step;
if (atomKK->sortfreq > 0) sortflag = 1;
else sortflag = 0;
f_merge_copy = DAT::t_f_array("VerletKokkos::f_merge_copy",atomKK->k_f.dimension_0());
static double time = 0.0;
atomKK->sync(Device,ALL_MASK);
Kokkos::Impl::Timer ktimer;
timer->init_timeout();
for (int i = 0; i < n; i++) {
if (timer->check_timeout(i)) {
update->nsteps = i;
break;
}
ntimestep = ++update->ntimestep;
ev_set(ntimestep);
// initial time integration
ktimer.reset();
timer->stamp();
modify->initial_integrate(vflag);
time += ktimer.seconds();
if (n_post_integrate) modify->post_integrate();
timer->stamp(Timer::MODIFY);
// regular communication vs neighbor list rebuild
nflag = neighbor->decide();
if (nflag == 0) {
timer->stamp();
comm->forward_comm();
timer->stamp(Timer::COMM);
} else {
// added debug
//atomKK->sync(Host,ALL_MASK);
//atomKK->modified(Host,ALL_MASK);
if (n_pre_exchange) {
timer->stamp();
modify->pre_exchange();
timer->stamp(Timer::MODIFY);
}
// debug
//atomKK->sync(Host,ALL_MASK);
//atomKK->modified(Host,ALL_MASK);
if (triclinic) domain->x2lamda(atomKK->nlocal);
domain->pbc();
if (domain->box_change) {
domain->reset_box();
comm->setup();
if (neighbor->style) neighbor->setup_bins();
}
timer->stamp();
// added debug
//atomKK->sync(Device,ALL_MASK);
//atomKK->modified(Device,ALL_MASK);
comm->exchange();
if (sortflag && ntimestep >= atomKK->nextsort) atomKK->sort();
comm->borders();
// added debug
//atomKK->sync(Host,ALL_MASK);
//atomKK->modified(Host,ALL_MASK);
if (triclinic) domain->lamda2x(atomKK->nlocal+atomKK->nghost);
timer->stamp(Timer::COMM);
if (n_pre_neighbor) {
modify->pre_neighbor();
timer->stamp(Timer::MODIFY);
}
neighbor->build();
timer->stamp(Timer::NEIGH);
}
// force computations
// important for pair to come before bonded contributions
// since some bonded potentials tally pairwise energy/virial
// and Pair:ev_tally() needs to be called before any tallying
force_clear();
timer->stamp();
if (n_pre_force) {
modify->pre_force(vflag);
timer->stamp(Timer::MODIFY);
}
bool execute_on_host = false;
unsigned int datamask_read_device = 0;
unsigned int datamask_modify_device = 0;
unsigned int datamask_read_host = 0;
if ( pair_compute_flag ) {
if (force->pair->execution_space==Host) {
execute_on_host = true;
datamask_read_host |= force->pair->datamask_read;
datamask_modify_device |= force->pair->datamask_modify;
} else {
datamask_read_device |= force->pair->datamask_read;
datamask_modify_device |= force->pair->datamask_modify;
}
}
if ( atomKK->molecular && force->bond ) {
if (force->bond->execution_space==Host) {
execute_on_host = true;
datamask_read_host |= force->bond->datamask_read;
datamask_modify_device |= force->bond->datamask_modify;
} else {
datamask_read_device |= force->bond->datamask_read;
datamask_modify_device |= force->bond->datamask_modify;
}
}
if ( atomKK->molecular && force->angle ) {
if (force->angle->execution_space==Host) {
execute_on_host = true;
datamask_read_host |= force->angle->datamask_read;
datamask_modify_device |= force->angle->datamask_modify;
} else {
datamask_read_device |= force->angle->datamask_read;
datamask_modify_device |= force->angle->datamask_modify;
}
}
if ( atomKK->molecular && force->dihedral ) {
if (force->dihedral->execution_space==Host) {
execute_on_host = true;
datamask_read_host |= force->dihedral->datamask_read;
datamask_modify_device |= force->dihedral->datamask_modify;
} else {
datamask_read_device |= force->dihedral->datamask_read;
datamask_modify_device |= force->dihedral->datamask_modify;
}
}
if ( atomKK->molecular && force->improper ) {
if (force->improper->execution_space==Host) {
execute_on_host = true;
datamask_read_host |= force->improper->datamask_read;
datamask_modify_device |= force->improper->datamask_modify;
} else {
datamask_read_device |= force->improper->datamask_read;
datamask_modify_device |= force->improper->datamask_modify;
}
}
if ( kspace_compute_flag ) {
if (force->kspace->execution_space==Host) {
execute_on_host = true;
datamask_read_host |= force->kspace->datamask_read;
datamask_modify_device |= force->kspace->datamask_modify;
} else {
datamask_read_device |= force->kspace->datamask_read;
datamask_modify_device |= force->kspace->datamask_modify;
}
}
if (pair_compute_flag) {
atomKK->sync(force->pair->execution_space,force->pair->datamask_read);
atomKK->modified(force->pair->execution_space,force->pair->datamask_modify);
atomKK->sync(force->pair->execution_space,~(~force->pair->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
atomKK->modified(force->pair->execution_space,~(~force->pair->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
Kokkos::Impl::Timer ktimer;
force->pair->compute(eflag,vflag);
timer->stamp(Timer::PAIR);
}
if(execute_on_host) {
if(pair_compute_flag && force->pair->datamask_modify!=(F_MASK | ENERGY_MASK | VIRIAL_MASK))
Kokkos::fence();
atomKK->sync_overlapping_device(Host,~(~datamask_read_host|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
if(pair_compute_flag && force->pair->execution_space!=Host) {
Kokkos::deep_copy(LMPHostType(),atomKK->k_f.h_view,0.0);
}
}
if (atomKK->molecular) {
if (force->bond) {
atomKK->sync(force->bond->execution_space,~(~force->bond->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
atomKK->modified(force->bond->execution_space,~(~force->bond->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
force->bond->compute(eflag,vflag);
}
if (force->angle) {
atomKK->sync(force->angle->execution_space,~(~force->angle->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
atomKK->modified(force->angle->execution_space,~(~force->angle->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
force->angle->compute(eflag,vflag);
}
if (force->dihedral) {
atomKK->sync(force->dihedral->execution_space,~(~force->dihedral->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
atomKK->modified(force->dihedral->execution_space,~(~force->dihedral->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
force->dihedral->compute(eflag,vflag);
}
if (force->improper) {
atomKK->sync(force->improper->execution_space,~(~force->improper->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
atomKK->modified(force->improper->execution_space,~(~force->improper->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
force->improper->compute(eflag,vflag);
}
timer->stamp(Timer::BOND);
}
if (kspace_compute_flag) {
atomKK->sync(force->kspace->execution_space,~(~force->kspace->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
atomKK->modified(force->kspace->execution_space,~(~force->kspace->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
force->kspace->compute(eflag,vflag);
timer->stamp(Timer::KSPACE);
}
if(execute_on_host && !std::is_same<LMPHostType,LMPDeviceType>::value) {
if(f_merge_copy.dimension_0()<atomKK->k_f.dimension_0()) {
f_merge_copy = DAT::t_f_array("VerletKokkos::f_merge_copy",atomKK->k_f.dimension_0());
}
f = atomKK->k_f.d_view;
Kokkos::deep_copy(LMPHostType(),f_merge_copy,atomKK->k_f.h_view);
Kokkos::parallel_for(atomKK->k_f.dimension_0(),
ForceAdder<DAT::t_f_array,DAT::t_f_array>(atomKK->k_f.d_view,f_merge_copy));
- atomKK->k_f.template modify<LMPDeviceType>();
+ atomKK->k_f.modify<LMPDeviceType>();
}
// reverse communication of forces
if (force->newton) comm->reverse_comm();
timer->stamp(Timer::COMM);
// force modifications, final time integration, diagnostics
if (n_post_force) modify->post_force(vflag);
modify->final_integrate();
if (n_end_of_step) modify->end_of_step();
timer->stamp(Timer::MODIFY);
// all output
if (ntimestep == output->next) {
atomKK->sync(Host,ALL_MASK);
timer->stamp();
output->write(ntimestep);
timer->stamp(Timer::OUTPUT);
}
}
}
/* ----------------------------------------------------------------------
clear force on own & ghost atoms
clear other arrays as needed
------------------------------------------------------------------------- */
void VerletKokkos::force_clear()
{
int i;
if (external_force_clear) return;
// clear force on all particles
// if either newton flag is set, also include ghosts
// when using threads always clear all forces.
if (neighbor->includegroup == 0) {
int nall;
if (force->newton) nall = atomKK->nlocal + atomKK->nghost;
else nall = atomKK->nlocal;
size_t nbytes = sizeof(double) * nall;
if (nbytes) {
if (atomKK->k_f.modified_host() > atomKK->k_f.modified_device()) {
memset_kokkos(atomKK->k_f.view<LMPHostType>());
atomKK->modified(Host,F_MASK);
} else {
memset_kokkos(atomKK->k_f.view<LMPDeviceType>());
atomKK->modified(Device,F_MASK);
}
if (torqueflag) memset(&(atomKK->torque[0][0]),0,3*nbytes);
}
// neighbor includegroup flag is set
// clear force only on initial nfirst particles
// if either newton flag is set, also include ghosts
} else {
int nall = atomKK->nfirst;
if (atomKK->k_f.modified_host() > atomKK->k_f.modified_device()) {
memset_kokkos(atomKK->k_f.view<LMPHostType>());
atomKK->modified(Host,F_MASK);
} else {
memset_kokkos(atomKK->k_f.view<LMPDeviceType>());
atomKK->modified(Device,F_MASK);
}
if (torqueflag) {
double **torque = atomKK->torque;
for (i = 0; i < nall; i++) {
torque[i][0] = 0.0;
torque[i][1] = 0.0;
torque[i][2] = 0.0;
}
}
if (force->newton) {
nall = atomKK->nlocal + atomKK->nghost;
if (torqueflag) {
double **torque = atomKK->torque;
for (i = atomKK->nlocal; i < nall; i++) {
torque[i][0] = 0.0;
torque[i][1] = 0.0;
torque[i][2] = 0.0;
}
}
}
}
}
diff --git a/src/MANYBODY/fix_qeq_comb.cpp b/src/MANYBODY/fix_qeq_comb.cpp
index 3c5954677..899cda92a 100644
--- a/src/MANYBODY/fix_qeq_comb.cpp
+++ b/src/MANYBODY/fix_qeq_comb.cpp
@@ -1,318 +1,317 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ray Shan (Sandia, tnshan@sandia.gov)
------------------------------------------------------------------------- */
#include <mpi.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "pair_comb.h"
#include "pair_comb3.h"
#include "fix_qeq_comb.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "atom.h"
#include "comm.h"
#include "force.h"
#include "group.h"
#include "respa.h"
#include "update.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
-FixQEQComb::FixQEQComb(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
+FixQEQComb::FixQEQComb(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg),
+fp(NULL), qf(NULL), q1(NULL), q2(NULL)
{
if (narg < 5) error->all(FLERR,"Illegal fix qeq/comb command");
peratom_flag = 1;
size_peratom_cols = 0;
peratom_freq = 1;
respa_level_support = 1;
ilevel_respa = 0;
nevery = force->inumeric(FLERR,arg[3]);
precision = force->numeric(FLERR,arg[4]);
if (nevery <= 0 || precision <= 0.0)
error->all(FLERR,"Illegal fix qeq/comb command");
MPI_Comm_rank(world,&me);
// optional args
- fp = NULL;
-
int iarg = 5;
while (iarg < narg) {
if (strcmp(arg[iarg],"file") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/comb command");
if (me == 0) {
fp = fopen(arg[iarg+1],"w");
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open fix qeq/comb file %s",arg[iarg+1]);
error->one(FLERR,str);
}
}
iarg += 2;
} else error->all(FLERR,"Illegal fix qeq/comb command");
}
nmax = atom->nmax;
memory->create(qf,nmax,"qeq:qf");
memory->create(q1,nmax,"qeq:q1");
memory->create(q2,nmax,"qeq:q2");
vector_atom = qf;
// zero the vector since dump may access it on timestep 0
// zero the vector since a variable may access it before first run
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) qf[i] = 0.0;
comb = NULL;
comb3 = NULL;
comm_forward = 1;
}
/* ---------------------------------------------------------------------- */
FixQEQComb::~FixQEQComb()
{
if (me == 0 && fp) fclose(fp);
memory->destroy(qf);
memory->destroy(q1);
memory->destroy(q2);
}
/* ---------------------------------------------------------------------- */
int FixQEQComb::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixQEQComb::init()
{
if (!atom->q_flag)
error->all(FLERR,"Fix qeq/comb requires atom attribute q");
comb = (PairComb *) force->pair_match("comb",1);
comb3 = (PairComb3 *) force->pair_match("comb3",1);
if (comb == NULL && comb3 == NULL)
error->all(FLERR,"Must use pair_style comb or comb3 with fix qeq/comb");
if (strstr(update->integrate_style,"respa")) {
ilevel_respa = ((Respa *) update->integrate)->nlevels-1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,ilevel_respa);
}
ngroup = group->count(igroup);
if (ngroup == 0) error->all(FLERR,"Fix qeq/comb group has no atoms");
}
/* ---------------------------------------------------------------------- */
void FixQEQComb::setup(int vflag)
{
firstflag = 1;
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel_respa);
}
firstflag = 0;
}
/* ---------------------------------------------------------------------- */
void FixQEQComb::min_post_force(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixQEQComb::post_force(int vflag)
{
int i,ii,iloop,loopmax,inum,*ilist;
double heatpq,qmass,dtq,dtq2;
double enegchkall,enegmaxall;
if (update->ntimestep % nevery) return;
// reallocate work arrays if necessary
// qf = charge force
// q1 = charge displacement
// q2 = tmp storage of charge force for next iteration
if (atom->nmax > nmax) {
memory->destroy(qf);
memory->destroy(q1);
memory->destroy(q2);
nmax = atom->nmax;
memory->create(qf,nmax,"qeq:qf");
memory->create(q1,nmax,"qeq:q1");
memory->create(q2,nmax,"qeq:q2");
vector_atom = qf;
}
// more loops for first-time charge equilibrium
iloop = 0;
if (firstflag) loopmax = 200;
else loopmax = 100;
// charge-equilibration loop
if (me == 0 && fp)
fprintf(fp,"Charge equilibration on step " BIGINT_FORMAT "\n",
update->ntimestep);
heatpq = 0.05;
qmass = 0.016;
dtq = 0.01;
dtq2 = 0.5*dtq*dtq/qmass;
double enegchk = 0.0;
double enegtot = 0.0;
double enegmax = 0.0;
double *q = atom->q;
int *mask = atom->mask;
if (comb) {
inum = comb->list->inum;
ilist = comb->list->ilist;
}
if (comb3) {
inum = comb3->list->inum;
ilist = comb3->list->ilist;
}
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
q1[i] = q2[i] = qf[i] = 0.0;
}
for (iloop = 0; iloop < loopmax; iloop ++ ) {
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (mask[i] & groupbit) {
q1[i] += qf[i]*dtq2 - heatpq*q1[i];
q[i] += q1[i];
}
}
comm->forward_comm_fix(this);
if(comb) enegtot = comb->yasu_char(qf,igroup);
if(comb3) enegtot = comb3->combqeq(qf,igroup);
enegtot /= ngroup;
enegchk = enegmax = 0.0;
for (ii = 0; ii < inum ; ii++) {
i = ilist[ii];
if (mask[i] & groupbit) {
q2[i] = enegtot-qf[i];
enegmax = MAX(enegmax,fabs(q2[i]));
enegchk += fabs(q2[i]);
qf[i] = q2[i];
}
}
MPI_Allreduce(&enegchk,&enegchkall,1,MPI_DOUBLE,MPI_SUM,world);
enegchk = enegchkall/ngroup;
MPI_Allreduce(&enegmax,&enegmaxall,1,MPI_DOUBLE,MPI_MAX,world);
enegmax = enegmaxall;
if (enegchk <= precision && enegmax <= 100.0*precision) break;
if (me == 0 && fp)
fprintf(fp," iteration: %d, enegtot %.6g, "
"enegmax %.6g, fq deviation: %.6g\n",
iloop,enegtot,enegmax,enegchk);
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (mask[i] & groupbit)
q1[i] += qf[i]*dtq2 - heatpq*q1[i];
}
}
if (me == 0 && fp) {
if (iloop == loopmax)
fprintf(fp,"Charges did not converge in %d iterations\n",iloop);
else
fprintf(fp,"Charges converged in %d iterations to %.10f tolerance\n",
iloop,enegchk);
}
}
/* ---------------------------------------------------------------------- */
void FixQEQComb::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == ilevel_respa) post_force(vflag);
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixQEQComb::memory_usage()
{
double bytes = atom->nmax*3 * sizeof(double);
return bytes;
}
/* ---------------------------------------------------------------------- */
int FixQEQComb::pack_forward_comm(int n, int *list, double *buf,
int pbc_flag, int *pbc)
{
int i,j,m;
m = 0;
for (i = 0; i < n; i ++) {
j = list[i];
buf[m++] = atom->q[j];
}
return m;
}
/* ---------------------------------------------------------------------- */
void FixQEQComb::unpack_forward_comm(int n, int first, double *buf)
{
int i,m,last;
m = 0;
last = first + n ;
for (i = first; i < last; i++) atom->q[i] = buf[m++];
}
diff --git a/src/MC/fix_atom_swap.cpp b/src/MC/fix_atom_swap.cpp
index b66569be3..179ef852d 100644
--- a/src/MC/fix_atom_swap.cpp
+++ b/src/MC/fix_atom_swap.cpp
@@ -1,800 +1,799 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Paul Crozier (SNL)
Alexander Stukowski
------------------------------------------------------------------------- */
#include <math.h>
#include <float.h>
#include <stdlib.h>
#include <string.h>
#include "fix_atom_swap.h"
#include "atom.h"
#include "atom_vec.h"
#include "atom_vec_hybrid.h"
#include "update.h"
#include "modify.h"
#include "fix.h"
#include "comm.h"
#include "compute.h"
#include "group.h"
#include "domain.h"
#include "region.h"
#include "random_park.h"
#include "force.h"
#include "pair.h"
#include "bond.h"
#include "angle.h"
#include "dihedral.h"
#include "improper.h"
#include "kspace.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
#include "thermo.h"
#include "output.h"
#include "neighbor.h"
#include <iostream>
using namespace std;
using namespace LAMMPS_NS;
using namespace FixConst;
using namespace MathConst;
/* ---------------------------------------------------------------------- */
FixAtomSwap::FixAtomSwap(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ idregion(NULL), type_list(NULL), mu(NULL), qtype(NULL), sqrt_mass_ratio(NULL), random_equal(NULL), random_unequal(NULL)
{
if (narg < 10) error->all(FLERR,"Illegal fix atom/swap command");
dynamic_group_allow = 1;
vector_flag = 1;
size_vector = 2;
global_freq = 1;
extvector = 0;
restart_global = 1;
time_depend = 1;
- type_list = NULL;
- qtype = NULL;
-
+
// required args
nevery = force->inumeric(FLERR,arg[3]);
ncycles = force->inumeric(FLERR,arg[4]);
seed = force->inumeric(FLERR,arg[5]);
double temperature = force->numeric(FLERR,arg[6]);
beta = 1.0/(force->boltz*temperature);
if (nevery <= 0) error->all(FLERR,"Illegal fix atom/swap command");
if (ncycles < 0) error->all(FLERR,"Illegal fix atom/swap command");
if (seed <= 0) error->all(FLERR,"Illegal fix atom/swap command");
memory->create(type_list,atom->ntypes,"atom/swap:type_list");
memory->create(mu,atom->ntypes+1,"atom/swap:mu");
for (int i = 1; i <= atom->ntypes; i++) mu[i] = 0.0;
// read options from end of input line
options(narg-7,&arg[7]);
// random number generator, same for all procs
random_equal = new RanPark(lmp,seed);
// random number generator, not the same for all procs
random_unequal = new RanPark(lmp,seed);
// set up reneighboring
force_reneighbor = 1;
next_reneighbor = update->ntimestep + 1;
// zero out counters
nswap_attempts = 0.0;
nswap_successes = 0.0;
atom_swap_nmax = 0;
local_swap_atom_list = NULL;
local_swap_iatom_list = NULL;
local_swap_jatom_list = NULL;
// set comm size needed by this Fix
if (atom->q_flag) comm_forward = 2;
else comm_forward = 1;
}
/* ----------------------------------------------------------------------
parse optional parameters at end of input line
------------------------------------------------------------------------- */
void FixAtomSwap::options(int narg, char **arg)
{
if (narg < 0) error->all(FLERR,"Illegal fix atom/swap command");
regionflag = 0;
conserve_ke_flag = 1;
semi_grand_flag = 0;
nswaptypes = 0;
nmutypes = 0;
iregion = -1;
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix atom/swap command");
iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix atom/swap does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
regionflag = 1;
iarg += 2;
} else if (strcmp(arg[iarg],"ke") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix atom/swap command");
if (strcmp(arg[iarg+1],"no") == 0) conserve_ke_flag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) conserve_ke_flag = 1;
else error->all(FLERR,"Illegal fix atom/swap command");
iarg += 2;
} else if (strcmp(arg[iarg],"semi-grand") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix atom/swap command");
if (strcmp(arg[iarg+1],"no") == 0) semi_grand_flag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) semi_grand_flag = 1;
else error->all(FLERR,"Illegal fix atom/swap command");
iarg += 2;
} else if (strcmp(arg[iarg],"types") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix atom/swap command");
iarg++;
while (iarg < narg) {
if (isalpha(arg[iarg][0])) break;
if (nswaptypes >= atom->ntypes) error->all(FLERR,"Illegal fix atom/swap command");
type_list[nswaptypes] = force->numeric(FLERR,arg[iarg]);
nswaptypes++;
iarg++;
}
} else if (strcmp(arg[iarg],"mu") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix atom/swap command");
iarg++;
while (iarg < narg) {
if (isalpha(arg[iarg][0])) break;
nmutypes++;
if (nmutypes > atom->ntypes) error->all(FLERR,"Illegal fix atom/swap command");
mu[nmutypes] = force->numeric(FLERR,arg[iarg]);
iarg++;
}
} else error->all(FLERR,"Illegal fix atom/swap command");
}
}
/* ---------------------------------------------------------------------- */
FixAtomSwap::~FixAtomSwap()
{
memory->destroy(type_list);
memory->destroy(mu);
memory->destroy(qtype);
memory->destroy(sqrt_mass_ratio);
if (regionflag) delete [] idregion;
delete random_equal;
delete random_unequal;
}
/* ---------------------------------------------------------------------- */
int FixAtomSwap::setmask()
{
int mask = 0;
mask |= PRE_EXCHANGE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixAtomSwap::init()
{
char *id_pe = (char *) "thermo_pe";
int ipe = modify->find_compute(id_pe);
c_pe = modify->compute[ipe];
int *type = atom->type;
if (nswaptypes < 2)
error->all(FLERR,"Must specify at least 2 types in fix atom/swap command");
if (semi_grand_flag) {
if (nswaptypes != nmutypes)
error->all(FLERR,"Need nswaptypes mu values in fix atom/swap command");
} else {
if (nswaptypes != 2)
error->all(FLERR,"Only 2 types allowed when not using semi-grand in fix atom/swap command");
if (nmutypes != 0)
error->all(FLERR,"Mu not allowed when not using semi-grand in fix atom/swap command");
}
for (int iswaptype = 0; iswaptype < nswaptypes; iswaptype++)
if (type_list[iswaptype] <= 0 || type_list[iswaptype] > atom->ntypes)
error->all(FLERR,"Invalid atom type in fix atom/swap command");
// this is only required for non-semi-grand
// in which case, nswaptypes = 2
if (atom->q_flag && !semi_grand_flag) {
double qmax,qmin;
int firstall,first;
memory->create(qtype,nswaptypes,"atom/swap:qtype");
for (int iswaptype = 0; iswaptype < nswaptypes; iswaptype++) {
first = 1;
for (int i = 0; i < atom->nlocal; i++) {
if (atom->mask[i] & groupbit) {
if (type[i] == type_list[iswaptype]) {
if (first) {
qtype[iswaptype] = atom->q[i];
first = 0;
} else if (qtype[iswaptype] != atom->q[i])
error->one(FLERR,"All atoms of a swapped type must have the same charge.");
}
}
}
MPI_Allreduce(&first,&firstall,1,MPI_INT,MPI_MIN,world);
if (firstall) error->all(FLERR,"At least one atom of each swapped type must be present to define charges.");
if (first) qtype[iswaptype] = -DBL_MAX;
MPI_Allreduce(&qtype[iswaptype],&qmax,1,MPI_DOUBLE,MPI_MAX,world);
if (first) qtype[iswaptype] = DBL_MAX;
MPI_Allreduce(&qtype[iswaptype],&qmin,1,MPI_DOUBLE,MPI_MIN,world);
if (qmax != qmin) error->all(FLERR,"All atoms of a swapped type must have same charge.");
}
}
memory->create(sqrt_mass_ratio,atom->ntypes+1,atom->ntypes+1,"atom/swap:sqrt_mass_ratio");
for (int itype = 1; itype <= atom->ntypes; itype++)
for (int jtype = 1; jtype <= atom->ntypes; jtype++)
sqrt_mass_ratio[itype][jtype] = sqrt(atom->mass[itype]/atom->mass[jtype]);
// check to see if itype and jtype cutoffs are the same
// if not, reneighboring will be needed between swaps
double **cutsq = force->pair->cutsq;
unequal_cutoffs = false;
for (int iswaptype = 0; iswaptype < nswaptypes; iswaptype++)
for (int jswaptype = 0; jswaptype < nswaptypes; jswaptype++)
for (int ktype = 1; ktype <= atom->ntypes; ktype++)
if (cutsq[type_list[iswaptype]][ktype] != cutsq[type_list[jswaptype]][ktype])
unequal_cutoffs = true;
// check that no swappable atoms are in atom->firstgroup
// swapping such an atom might not leave firstgroup atoms first
if (atom->firstgroup >= 0) {
int *mask = atom->mask;
int firstgroupbit = group->bitmask[atom->firstgroup];
int flag = 0;
for (int i = 0; i < atom->nlocal; i++)
if ((mask[i] == groupbit) && (mask[i] && firstgroupbit)) flag = 1;
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall)
error->all(FLERR,"Cannot do atom/swap on atoms in atom_modify first group");
}
}
/* ----------------------------------------------------------------------
attempt Monte Carlo swaps
------------------------------------------------------------------------- */
void FixAtomSwap::pre_exchange()
{
// just return if should not be called on this timestep
if (next_reneighbor != update->ntimestep) return;
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
comm->exchange();
comm->borders();
if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
if (modify->n_pre_neighbor) modify->pre_neighbor();
neighbor->build();
energy_stored = energy_full();
int nsuccess = 0;
if (semi_grand_flag) {
update_semi_grand_atoms_list();
for (int i = 0; i < ncycles; i++) nsuccess += attempt_semi_grand();
} else {
update_swap_atoms_list();
for (int i = 0; i < ncycles; i++) nsuccess += attempt_swap();
}
nswap_attempts += ncycles;
nswap_successes += nsuccess;
energy_full();
next_reneighbor = update->ntimestep + nevery;
}
/* ----------------------------------------------------------------------
Note: atom charges are assumed equal and so are not updated
------------------------------------------------------------------------- */
int FixAtomSwap::attempt_semi_grand()
{
if (nswap == 0) return 0;
double energy_before = energy_stored;
int itype,jtype,jswaptype;
int i = pick_semi_grand_atom();
if (i >= 0) {
jswaptype = static_cast<int> (nswaptypes*random_unequal->uniform());
jtype = type_list[jswaptype];
itype = atom->type[i];
while (itype == jtype) {
jswaptype = static_cast<int> (nswaptypes*random_unequal->uniform());
jtype = type_list[jswaptype];
}
atom->type[i] = jtype;
}
if (unequal_cutoffs) {
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
comm->exchange();
comm->borders();
if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
if (modify->n_pre_neighbor) modify->pre_neighbor();
neighbor->build();
} else {
comm->forward_comm_fix(this);
}
if (force->kspace) force->kspace->qsum_qsq();
double energy_after = energy_full();
int success = 0;
if (i >= 0)
if (random_unequal->uniform() <
exp(-beta*(energy_after - energy_before
+ mu[jtype] - mu[itype]))) success = 1;
int success_all = 0;
MPI_Allreduce(&success,&success_all,1,MPI_INT,MPI_MAX,world);
if (success_all) {
update_semi_grand_atoms_list();
energy_stored = energy_after;
if (conserve_ke_flag) {
if (i >= 0) {
atom->v[i][0] *= sqrt_mass_ratio[itype][jtype];
atom->v[i][1] *= sqrt_mass_ratio[itype][jtype];
atom->v[i][2] *= sqrt_mass_ratio[itype][jtype];
}
}
return 1;
} else {
if (i >= 0) {
atom->type[i] = itype;
}
if (force->kspace) force->kspace->qsum_qsq();
energy_stored = energy_before;
if (unequal_cutoffs) {
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
comm->exchange();
comm->borders();
if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
if (modify->n_pre_neighbor) modify->pre_neighbor();
neighbor->build();
} else {
comm->forward_comm_fix(this);
}
}
return 0;
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
int FixAtomSwap::attempt_swap()
{
if ((niswap == 0) || (njswap == 0)) return 0;
double energy_before = energy_stored;
int i = pick_i_swap_atom();
int j = pick_j_swap_atom();
int itype = type_list[0];
int jtype = type_list[1];
if (i >= 0) {
atom->type[i] = jtype;
if (atom->q_flag) atom->q[i] = qtype[1];
}
if (j >= 0) {
atom->type[j] = itype;
if (atom->q_flag) atom->q[j] = qtype[0];
}
if (unequal_cutoffs) {
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
comm->exchange();
comm->borders();
if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
if (modify->n_pre_neighbor) modify->pre_neighbor();
neighbor->build();
} else {
comm->forward_comm_fix(this);
}
double energy_after = energy_full();
if (random_equal->uniform() <
exp(beta*(energy_before - energy_after))) {
update_swap_atoms_list();
energy_stored = energy_after;
if (conserve_ke_flag) {
if (i >= 0) {
atom->v[i][0] *= sqrt_mass_ratio[itype][jtype];
atom->v[i][1] *= sqrt_mass_ratio[itype][jtype];
atom->v[i][2] *= sqrt_mass_ratio[itype][jtype];
}
if (j >= 0) {
atom->v[j][0] *= sqrt_mass_ratio[jtype][itype];
atom->v[j][1] *= sqrt_mass_ratio[jtype][itype];
atom->v[j][2] *= sqrt_mass_ratio[jtype][itype];
}
}
return 1;
} else {
if (i >= 0) {
atom->type[i] = type_list[0];
if (atom->q_flag) atom->q[i] = qtype[0];
}
if (j >= 0) {
atom->type[j] = type_list[1];
if (atom->q_flag) atom->q[j] = qtype[1];
}
energy_stored = energy_before;
if (unequal_cutoffs) {
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
comm->exchange();
comm->borders();
if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
if (modify->n_pre_neighbor) modify->pre_neighbor();
neighbor->build();
} else {
comm->forward_comm_fix(this);
}
}
return 0;
}
/* ----------------------------------------------------------------------
compute system potential energy
------------------------------------------------------------------------- */
double FixAtomSwap::energy_full()
{
int eflag = 1;
int vflag = 0;
if (modify->n_pre_neighbor) modify->pre_neighbor();
if (modify->n_pre_force) modify->pre_force(vflag);
if (force->pair) force->pair->compute(eflag,vflag);
if (atom->molecular) {
if (force->bond) force->bond->compute(eflag,vflag);
if (force->angle) force->angle->compute(eflag,vflag);
if (force->dihedral) force->dihedral->compute(eflag,vflag);
if (force->improper) force->improper->compute(eflag,vflag);
}
if (force->kspace) force->kspace->compute(eflag,vflag);
if (modify->n_post_force) modify->post_force(vflag);
if (modify->n_end_of_step) modify->end_of_step();
update->eflag_global = update->ntimestep;
double total_energy = c_pe->compute_scalar();
return total_energy;
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
int FixAtomSwap::pick_semi_grand_atom()
{
int i = -1;
int iwhichglobal = static_cast<int> (nswap*random_equal->uniform());
if ((iwhichglobal >= nswap_before) &&
(iwhichglobal < nswap_before + nswap_local)) {
int iwhichlocal = iwhichglobal - nswap_before;
i = local_swap_atom_list[iwhichlocal];
}
return i;
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
int FixAtomSwap::pick_i_swap_atom()
{
int i = -1;
int iwhichglobal = static_cast<int> (niswap*random_equal->uniform());
if ((iwhichglobal >= niswap_before) &&
(iwhichglobal < niswap_before + niswap_local)) {
int iwhichlocal = iwhichglobal - niswap_before;
i = local_swap_iatom_list[iwhichlocal];
}
return i;
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
int FixAtomSwap::pick_j_swap_atom()
{
int j = -1;
int jwhichglobal = static_cast<int> (njswap*random_equal->uniform());
if ((jwhichglobal >= njswap_before) &&
(jwhichglobal < njswap_before + njswap_local)) {
int jwhichlocal = jwhichglobal - njswap_before;
j = local_swap_jatom_list[jwhichlocal];
}
return j;
}
/* ----------------------------------------------------------------------
update the list of gas atoms
------------------------------------------------------------------------- */
void FixAtomSwap::update_semi_grand_atoms_list()
{
int nlocal = atom->nlocal;
double **x = atom->x;
if (atom->nmax > atom_swap_nmax) {
memory->sfree(local_swap_atom_list);
atom_swap_nmax = atom->nmax;
local_swap_atom_list = (int *) memory->smalloc(atom_swap_nmax*sizeof(int),
"MCSWAP:local_swap_atom_list");
}
nswap_local = 0;
if (regionflag) {
for (int i = 0; i < nlocal; i++) {
if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]) == 1) {
if (atom->mask[i] & groupbit) {
int itype = atom->type[i];
int iswaptype;
for (iswaptype = 0; iswaptype < nswaptypes; iswaptype++)
if (itype == type_list[iswaptype]) break;
if (iswaptype == nswaptypes) continue;
local_swap_atom_list[nswap_local] = i;
nswap_local++;
}
}
}
} else {
for (int i = 0; i < nlocal; i++) {
if (atom->mask[i] & groupbit) {
int itype = atom->type[i];
int iswaptype;
for (iswaptype = 0; iswaptype < nswaptypes; iswaptype++)
if (itype == type_list[iswaptype]) break;
if (iswaptype == nswaptypes) continue;
local_swap_atom_list[nswap_local] = i;
nswap_local++;
}
}
}
MPI_Allreduce(&nswap_local,&nswap,1,MPI_INT,MPI_SUM,world);
MPI_Scan(&nswap_local,&nswap_before,1,MPI_INT,MPI_SUM,world);
nswap_before -= nswap_local;
}
/* ----------------------------------------------------------------------
update the list of gas atoms
------------------------------------------------------------------------- */
void FixAtomSwap::update_swap_atoms_list()
{
int nlocal = atom->nlocal;
int *type = atom->type;
double **x = atom->x;
if (atom->nmax > atom_swap_nmax) {
memory->sfree(local_swap_iatom_list);
memory->sfree(local_swap_jatom_list);
atom_swap_nmax = atom->nmax;
local_swap_iatom_list = (int *) memory->smalloc(atom_swap_nmax*sizeof(int),
"MCSWAP:local_swap_iatom_list");
local_swap_jatom_list = (int *) memory->smalloc(atom_swap_nmax*sizeof(int),
"MCSWAP:local_swap_jatom_list");
}
niswap_local = 0;
njswap_local = 0;
if (regionflag) {
for (int i = 0; i < nlocal; i++) {
if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]) == 1) {
if (atom->mask[i] & groupbit) {
if (type[i] == type_list[0]) {
local_swap_iatom_list[niswap_local] = i;
niswap_local++;
} else if (type[i] == type_list[1]) {
local_swap_jatom_list[njswap_local] = i;
njswap_local++;
}
}
}
}
} else {
for (int i = 0; i < nlocal; i++) {
if (atom->mask[i] & groupbit) {
if (type[i] == type_list[0]) {
local_swap_iatom_list[niswap_local] = i;
niswap_local++;
} else if (type[i] == type_list[1]) {
local_swap_jatom_list[njswap_local] = i;
njswap_local++;
}
}
}
}
MPI_Allreduce(&niswap_local,&niswap,1,MPI_INT,MPI_SUM,world);
MPI_Scan(&niswap_local,&niswap_before,1,MPI_INT,MPI_SUM,world);
niswap_before -= niswap_local;
MPI_Allreduce(&njswap_local,&njswap,1,MPI_INT,MPI_SUM,world);
MPI_Scan(&njswap_local,&njswap_before,1,MPI_INT,MPI_SUM,world);
njswap_before -= njswap_local;
}
/* ---------------------------------------------------------------------- */
int FixAtomSwap::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc)
{
int i,j,m;
int *type = atom->type;
double *q = atom->q;
m = 0;
if (atom->q_flag) {
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = type[j];
buf[m++] = q[j];
}
} else {
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = type[j];
}
}
return m;
}
/* ---------------------------------------------------------------------- */
void FixAtomSwap::unpack_forward_comm(int n, int first, double *buf)
{
int i,m,last;
int *type = atom->type;
double *q = atom->q;
m = 0;
last = first + n;
if (atom->q_flag) {
for (i = first; i < last; i++) {
type[i] = static_cast<int> (buf[m++]);
q[i] = buf[m++];
}
} else {
for (i = first; i < last; i++)
type[i] = static_cast<int> (buf[m++]);
}
}
/* ----------------------------------------------------------------------
return acceptance ratio
------------------------------------------------------------------------- */
double FixAtomSwap::compute_vector(int n)
{
if (n == 0) return nswap_attempts;
if (n == 1) return nswap_successes;
return 0.0;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixAtomSwap::memory_usage()
{
double bytes = atom_swap_nmax * sizeof(int);
return bytes;
}
/* ----------------------------------------------------------------------
pack entire state of Fix into one write
------------------------------------------------------------------------- */
void FixAtomSwap::write_restart(FILE *fp)
{
int n = 0;
double list[4];
list[n++] = random_equal->state();
list[n++] = random_unequal->state();
list[n++] = next_reneighbor;
if (comm->me == 0) {
int size = n * sizeof(double);
fwrite(&size,sizeof(int),1,fp);
fwrite(list,sizeof(double),n,fp);
}
}
/* ----------------------------------------------------------------------
use state info from restart file to restart the Fix
------------------------------------------------------------------------- */
void FixAtomSwap::restart(char *buf)
{
int n = 0;
double *list = (double *) buf;
seed = static_cast<int> (list[n++]);
random_equal->reset(seed);
seed = static_cast<int> (list[n++]);
random_unequal->reset(seed);
next_reneighbor = static_cast<int> (list[n++]);
}
diff --git a/src/MC/fix_bond_break.cpp b/src/MC/fix_bond_break.cpp
index 8e48f633e..85d014def 100755
--- a/src/MC/fix_bond_break.cpp
+++ b/src/MC/fix_bond_break.cpp
@@ -1,858 +1,856 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <mpi.h>
#include <string.h>
#include <stdlib.h>
#include "fix_bond_break.h"
#include "update.h"
#include "respa.h"
#include "atom.h"
#include "atom_vec.h"
#include "force.h"
#include "comm.h"
#include "neighbor.h"
#include "domain.h"
#include "random_mars.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
#define DELTA 16
/* ---------------------------------------------------------------------- */
FixBondBreak::FixBondBreak(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ partner(NULL), finalpartner(NULL), distsq(NULL), broken(NULL), copy(NULL), random(NULL)
{
if (narg < 6) error->all(FLERR,"Illegal fix bond/break command");
MPI_Comm_rank(world,&me);
MPI_Comm_size(world,&nprocs);
nevery = force->inumeric(FLERR,arg[3]);
if (nevery <= 0) error->all(FLERR,"Illegal fix bond/break command");
force_reneighbor = 1;
next_reneighbor = -1;
vector_flag = 1;
size_vector = 2;
global_freq = 1;
extvector = 0;
btype = force->inumeric(FLERR,arg[4]);
cutoff = force->numeric(FLERR,arg[5]);
if (btype < 1 || btype > atom->nbondtypes)
error->all(FLERR,"Invalid bond type in fix bond/break command");
if (cutoff < 0.0) error->all(FLERR,"Illegal fix bond/break command");
cutsq = cutoff*cutoff;
// optional keywords
fraction = 1.0;
int seed = 12345;
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg],"prob") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix bond/break command");
fraction = force->numeric(FLERR,arg[iarg+1]);
seed = force->inumeric(FLERR,arg[iarg+2]);
if (fraction < 0.0 || fraction > 1.0)
error->all(FLERR,"Illegal fix bond/break command");
if (seed <= 0) error->all(FLERR,"Illegal fix bond/break command");
iarg += 3;
} else error->all(FLERR,"Illegal fix bond/break command");
}
// error check
if (atom->molecular != 1)
error->all(FLERR,"Cannot use fix bond/break with non-molecular systems");
// initialize Marsaglia RNG with processor-unique seed
random = new RanMars(lmp,seed + me);
// set comm sizes needed by this fix
// forward is big due to comm of broken bonds and 1-2 neighbors
comm_forward = MAX(2,2+atom->maxspecial);
comm_reverse = 2;
// allocate arrays local to this fix
nmax = 0;
- partner = finalpartner = NULL;
- distsq = NULL;
maxbreak = 0;
- broken = NULL;
// copy = special list for one atom
// size = ms^2 + ms is sufficient
// b/c in rebuild_special_one() neighs of all 1-2s are added,
// then a dedup(), then neighs of all 1-3s are added, then final dedup()
// this means intermediate size cannot exceed ms^2 + ms
int maxspecial = atom->maxspecial;
copy = new tagint[maxspecial*maxspecial + maxspecial];
// zero out stats
breakcount = 0;
breakcounttotal = 0;
}
/* ---------------------------------------------------------------------- */
FixBondBreak::~FixBondBreak()
{
delete random;
// delete locally stored arrays
memory->destroy(partner);
memory->destroy(finalpartner);
memory->destroy(distsq);
memory->destroy(broken);
delete [] copy;
}
/* ---------------------------------------------------------------------- */
int FixBondBreak::setmask()
{
int mask = 0;
mask |= POST_INTEGRATE;
mask |= POST_INTEGRATE_RESPA;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixBondBreak::init()
{
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
// enable angle/dihedral/improper breaking if any defined
if (atom->nangles) angleflag = 1;
else angleflag = 0;
if (atom->ndihedrals) dihedralflag = 1;
else dihedralflag = 0;
if (atom->nimpropers) improperflag = 1;
else improperflag = 0;
if (force->improper) {
if (force->improper_match("class2") || force->improper_match("ring"))
error->all(FLERR,"Cannot yet use fix bond/break with this "
"improper style");
}
lastcheck = -1;
// DEBUG
//print_bb();
}
/* ---------------------------------------------------------------------- */
void FixBondBreak::post_integrate()
{
int i,j,k,m,n,i1,i2,n1,n3,type;
double delx,dely,delz,rsq;
tagint *slist;
if (update->ntimestep % nevery) return;
// check that all procs have needed ghost atoms within ghost cutoff
// only if neighbor list has changed since last check
if (lastcheck < neighbor->lastcall) check_ghosts();
// acquire updated ghost atom positions
// necessary b/c are calling this after integrate, but before Verlet comm
comm->forward_comm();
// resize bond partner list and initialize it
// probability array overlays distsq array
// needs to be atom->nmax in length
if (atom->nmax > nmax) {
memory->destroy(partner);
memory->destroy(finalpartner);
memory->destroy(distsq);
nmax = atom->nmax;
memory->create(partner,nmax,"bond/break:partner");
memory->create(finalpartner,nmax,"bond/break:finalpartner");
memory->create(distsq,nmax,"bond/break:distsq");
probability = distsq;
}
int nlocal = atom->nlocal;
int nall = atom->nlocal + atom->nghost;
for (i = 0; i < nall; i++) {
partner[i] = 0;
finalpartner[i] = 0;
distsq[i] = 0.0;
}
// loop over bond list
// setup possible partner list of bonds to break
double **x = atom->x;
tagint *tag = atom->tag;
int *mask = atom->mask;
int **bondlist = neighbor->bondlist;
int nbondlist = neighbor->nbondlist;
for (n = 0; n < nbondlist; n++) {
i1 = bondlist[n][0];
i2 = bondlist[n][1];
type = bondlist[n][2];
if (!(mask[i1] & groupbit)) continue;
if (!(mask[i2] & groupbit)) continue;
if (type != btype) continue;
delx = x[i1][0] - x[i2][0];
dely = x[i1][1] - x[i2][1];
delz = x[i1][2] - x[i2][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq <= cutsq) continue;
if (rsq > distsq[i1]) {
partner[i1] = tag[i2];
distsq[i1] = rsq;
}
if (rsq > distsq[i2]) {
partner[i2] = tag[i1];
distsq[i2] = rsq;
}
}
// reverse comm of partner info
if (force->newton_bond) comm->reverse_comm_fix(this);
// each atom now knows its winning partner
// for prob check, generate random value for each atom with a bond partner
// forward comm of partner and random value, so ghosts have it
if (fraction < 1.0) {
for (i = 0; i < nlocal; i++)
if (partner[i]) probability[i] = random->uniform();
}
commflag = 1;
comm->forward_comm_fix(this,2);
// break bonds
// if both atoms list each other as winning bond partner
// and probability constraint is satisfied
int **bond_type = atom->bond_type;
tagint **bond_atom = atom->bond_atom;
int *num_bond = atom->num_bond;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
nbreak = 0;
for (i = 0; i < nlocal; i++) {
if (partner[i] == 0) continue;
j = atom->map(partner[i]);
if (partner[j] != tag[i]) continue;
// apply probability constraint using RN for atom with smallest ID
if (fraction < 1.0) {
if (tag[i] < tag[j]) {
if (probability[i] >= fraction) continue;
} else {
if (probability[j] >= fraction) continue;
}
}
// delete bond from atom I if I stores it
// atom J will also do this
for (m = 0; m < num_bond[i]; m++) {
if (bond_atom[i][m] == partner[i]) {
for (k = m; k < num_bond[i]-1; k++) {
bond_atom[i][k] = bond_atom[i][k+1];
bond_type[i][k] = bond_type[i][k+1];
}
num_bond[i]--;
break;
}
}
// remove J from special bond list for atom I
// atom J will also do this, whatever proc it is on
slist = special[i];
n1 = nspecial[i][0];
for (m = 0; m < n1; m++)
if (slist[m] == partner[i]) break;
n3 = nspecial[i][2];
for (; m < n3-1; m++) slist[m] = slist[m+1];
nspecial[i][0]--;
nspecial[i][1]--;
nspecial[i][2]--;
// store final broken bond partners and count the broken bond once
finalpartner[i] = tag[j];
finalpartner[j] = tag[i];
if (tag[i] < tag[j]) nbreak++;
}
// tally stats
MPI_Allreduce(&nbreak,&breakcount,1,MPI_INT,MPI_SUM,world);
breakcounttotal += breakcount;
atom->nbonds -= breakcount;
// trigger reneighboring if any bonds were broken
// this insures neigh lists will immediately reflect the topology changes
// done if no bonds broken
if (breakcount) next_reneighbor = update->ntimestep;
if (!breakcount) return;
// communicate final partner and 1-2 special neighbors
// 1-2 neighs already reflect broken bonds
commflag = 2;
comm->forward_comm_fix(this);
// create list of broken bonds that influence my owned atoms
// even if between owned-ghost or ghost-ghost atoms
// finalpartner is now set for owned and ghost atoms so loop over nall
// OK if duplicates in broken list due to ghosts duplicating owned atoms
// check J < 0 to insure a broken bond to unknown atom is included
// i.e. bond partner outside of cutoff length
nbreak = 0;
for (i = 0; i < nall; i++) {
if (finalpartner[i] == 0) continue;
j = atom->map(finalpartner[i]);
if (j < 0 || tag[i] < tag[j]) {
if (nbreak == maxbreak) {
maxbreak += DELTA;
memory->grow(broken,maxbreak,2,"bond/break:broken");
}
broken[nbreak][0] = tag[i];
broken[nbreak][1] = finalpartner[i];
nbreak++;
}
}
// update special neigh lists of all atoms affected by any broken bond
// also remove angles/dihedrals/impropers broken by broken bonds
update_topology();
// DEBUG
// print_bb();
}
/* ----------------------------------------------------------------------
insure all atoms 2 hops away from owned atoms are in ghost list
this allows dihedral 1-2-3-4 to be properly deleted
and special list of 1 to be properly updated
if I own atom 1, but not 2,3,4, and bond 3-4 is deleted
then 2,3 will be ghosts and 3 will store 4 as its finalpartner
------------------------------------------------------------------------- */
void FixBondBreak::check_ghosts()
{
int i,j,n;
tagint *slist;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
int nlocal = atom->nlocal;
int flag = 0;
for (i = 0; i < nlocal; i++) {
slist = special[i];
n = nspecial[i][1];
for (j = 0; j < n; j++)
if (atom->map(slist[j]) < 0) flag = 1;
}
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall)
error->all(FLERR,"Fix bond/break needs ghost atoms from further away");
lastcheck = update->ntimestep;
}
/* ----------------------------------------------------------------------
double loop over my atoms and broken bonds
influenced = 1 if atom's topology is affected by any broken bond
yes if is one of 2 atoms in bond
yes if both atom IDs appear in atom's special list
else no
if influenced:
check for angles/dihedrals/impropers to break due to specific broken bonds
rebuild the atom's special list of 1-2,1-3,1-4 neighs
------------------------------------------------------------------------- */
void FixBondBreak::update_topology()
{
int i,j,k,n,influence,influenced,found;
tagint id1,id2;
tagint *slist;
tagint *tag = atom->tag;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
int nlocal = atom->nlocal;
nangles = 0;
ndihedrals = 0;
nimpropers = 0;
//printf("NBREAK %d: ",nbreak);
//for (i = 0; i < nbreak; i++)
// printf(" %d %d,",broken[i][0],broken[i][1]);
//printf("\n");
for (i = 0; i < nlocal; i++) {
influenced = 0;
slist = special[i];
for (j = 0; j < nbreak; j++) {
id1 = broken[j][0];
id2 = broken[j][1];
influence = 0;
if (tag[i] == id1 || tag[i] == id2) influence = 1;
else {
n = nspecial[i][2];
found = 0;
for (k = 0; k < n; k++)
if (slist[k] == id1 || slist[k] == id2) found++;
if (found == 2) influence = 1;
}
if (!influence) continue;
influenced = 1;
if (angleflag) break_angles(i,id1,id2);
if (dihedralflag) break_dihedrals(i,id1,id2);
if (improperflag) break_impropers(i,id1,id2);
}
if (influenced) rebuild_special_one(i);
}
int newton_bond = force->newton_bond;
int all;
if (angleflag) {
MPI_Allreduce(&nangles,&all,1,MPI_INT,MPI_SUM,world);
if (!newton_bond) all /= 3;
atom->nangles -= all;
}
if (dihedralflag) {
MPI_Allreduce(&ndihedrals,&all,1,MPI_INT,MPI_SUM,world);
if (!newton_bond) all /= 4;
atom->ndihedrals -= all;
}
if (improperflag) {
MPI_Allreduce(&nimpropers,&all,1,MPI_INT,MPI_SUM,world);
if (!newton_bond) all /= 4;
atom->nimpropers -= all;
}
}
/* ----------------------------------------------------------------------
re-build special list of atom M
does not affect 1-2 neighs (already include effects of new bond)
affects 1-3 and 1-4 neighs due to other atom's augmented 1-2 neighs
------------------------------------------------------------------------- */
void FixBondBreak::rebuild_special_one(int m)
{
int i,j,n,n1,cn1,cn2,cn3;
tagint *slist;
tagint *tag = atom->tag;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
// existing 1-2 neighs of atom M
slist = special[m];
n1 = nspecial[m][0];
cn1 = 0;
for (i = 0; i < n1; i++)
copy[cn1++] = slist[i];
// new 1-3 neighs of atom M, based on 1-2 neighs of 1-2 neighs
// exclude self
// remove duplicates after adding all possible 1-3 neighs
cn2 = cn1;
for (i = 0; i < cn1; i++) {
n = atom->map(copy[i]);
slist = special[n];
n1 = nspecial[n][0];
for (j = 0; j < n1; j++)
if (slist[j] != tag[m]) copy[cn2++] = slist[j];
}
cn2 = dedup(cn1,cn2,copy);
// new 1-4 neighs of atom M, based on 1-2 neighs of 1-3 neighs
// exclude self
// remove duplicates after adding all possible 1-4 neighs
cn3 = cn2;
for (i = cn1; i < cn2; i++) {
n = atom->map(copy[i]);
slist = special[n];
n1 = nspecial[n][0];
for (j = 0; j < n1; j++)
if (slist[j] != tag[m]) copy[cn3++] = slist[j];
}
cn3 = dedup(cn2,cn3,copy);
// store new special list with atom M
nspecial[m][0] = cn1;
nspecial[m][1] = cn2;
nspecial[m][2] = cn3;
memcpy(special[m],copy,cn3*sizeof(int));
}
/* ----------------------------------------------------------------------
break any angles owned by atom M that include atom IDs 1 and 2
angle is broken if ID1-ID2 is one of 2 bonds in angle (I-J,J-K)
------------------------------------------------------------------------- */
void FixBondBreak::break_angles(int m, tagint id1, tagint id2)
{
int j,found;
int num_angle = atom->num_angle[m];
int *angle_type = atom->angle_type[m];
tagint *angle_atom1 = atom->angle_atom1[m];
tagint *angle_atom2 = atom->angle_atom2[m];
tagint *angle_atom3 = atom->angle_atom3[m];
int i = 0;
while (i < num_angle) {
found = 0;
if (angle_atom1[i] == id1 && angle_atom2[i] == id2) found = 1;
else if (angle_atom2[i] == id1 && angle_atom3[i] == id2) found = 1;
else if (angle_atom1[i] == id2 && angle_atom2[i] == id1) found = 1;
else if (angle_atom2[i] == id2 && angle_atom3[i] == id1) found = 1;
if (!found) i++;
else {
for (j = i; j < num_angle-1; j++) {
angle_type[j] = angle_type[j+1];
angle_atom1[j] = angle_atom1[j+1];
angle_atom2[j] = angle_atom2[j+1];
angle_atom3[j] = angle_atom3[j+1];
}
num_angle--;
nangles++;
}
}
atom->num_angle[m] = num_angle;
}
/* ----------------------------------------------------------------------
break any dihedrals owned by atom M that include atom IDs 1 and 2
dihedral is broken if ID1-ID2 is one of 3 bonds in dihedral (I-J,J-K.K-L)
------------------------------------------------------------------------- */
void FixBondBreak::break_dihedrals(int m, tagint id1, tagint id2)
{
int j,found;
int num_dihedral = atom->num_dihedral[m];
int *dihedral_type = atom->dihedral_type[m];
tagint *dihedral_atom1 = atom->dihedral_atom1[m];
tagint *dihedral_atom2 = atom->dihedral_atom2[m];
tagint *dihedral_atom3 = atom->dihedral_atom3[m];
tagint *dihedral_atom4 = atom->dihedral_atom4[m];
int i = 0;
while (i < num_dihedral) {
found = 0;
if (dihedral_atom1[i] == id1 && dihedral_atom2[i] == id2) found = 1;
else if (dihedral_atom2[i] == id1 && dihedral_atom3[i] == id2) found = 1;
else if (dihedral_atom3[i] == id1 && dihedral_atom4[i] == id2) found = 1;
else if (dihedral_atom1[i] == id2 && dihedral_atom2[i] == id1) found = 1;
else if (dihedral_atom2[i] == id2 && dihedral_atom3[i] == id1) found = 1;
else if (dihedral_atom3[i] == id2 && dihedral_atom4[i] == id1) found = 1;
if (!found) i++;
else {
for (j = i; j < num_dihedral-1; j++) {
dihedral_type[j] = dihedral_type[j+1];
dihedral_atom1[j] = dihedral_atom1[j+1];
dihedral_atom2[j] = dihedral_atom2[j+1];
dihedral_atom3[j] = dihedral_atom3[j+1];
dihedral_atom4[j] = dihedral_atom4[j+1];
}
num_dihedral--;
ndihedrals++;
}
}
atom->num_dihedral[m] = num_dihedral;
}
/* ----------------------------------------------------------------------
break any impropers owned by atom M that include atom IDs 1 and 2
improper is broken if ID1-ID2 is one of 3 bonds in improper (I-J,I-K,I-L)
------------------------------------------------------------------------- */
void FixBondBreak::break_impropers(int m, tagint id1, tagint id2)
{
int j,found;
int num_improper = atom->num_improper[m];
int *improper_type = atom->improper_type[m];
tagint *improper_atom1 = atom->improper_atom1[m];
tagint *improper_atom2 = atom->improper_atom2[m];
tagint *improper_atom3 = atom->improper_atom3[m];
tagint *improper_atom4 = atom->improper_atom4[m];
int i = 0;
while (i < num_improper) {
found = 0;
if (improper_atom1[i] == id1 && improper_atom2[i] == id2) found = 1;
else if (improper_atom1[i] == id1 && improper_atom3[i] == id2) found = 1;
else if (improper_atom1[i] == id1 && improper_atom4[i] == id2) found = 1;
else if (improper_atom1[i] == id2 && improper_atom2[i] == id1) found = 1;
else if (improper_atom1[i] == id2 && improper_atom3[i] == id1) found = 1;
else if (improper_atom1[i] == id2 && improper_atom4[i] == id1) found = 1;
if (!found) i++;
else {
for (j = i; j < num_improper-1; j++) {
improper_type[j] = improper_type[j+1];
improper_atom1[j] = improper_atom1[j+1];
improper_atom2[j] = improper_atom2[j+1];
improper_atom3[j] = improper_atom3[j+1];
improper_atom4[j] = improper_atom4[j+1];
}
num_improper--;
nimpropers++;
}
}
atom->num_improper[m] = num_improper;
}
/* ----------------------------------------------------------------------
remove all ID duplicates in copy from Nstart:Nstop-1
compare to all previous values in copy
return N decremented by any discarded duplicates
------------------------------------------------------------------------- */
int FixBondBreak::dedup(int nstart, int nstop, tagint *copy)
{
int i;
int m = nstart;
while (m < nstop) {
for (i = 0; i < m; i++)
if (copy[i] == copy[m]) {
copy[m] = copy[nstop-1];
nstop--;
break;
}
if (i == m) m++;
}
return nstop;
}
/* ---------------------------------------------------------------------- */
void FixBondBreak::post_integrate_respa(int ilevel, int iloop)
{
if (ilevel == nlevels_respa-1) post_integrate();
}
/* ---------------------------------------------------------------------- */
int FixBondBreak::pack_forward_comm(int n, int *list, double *buf,
int pbc_flag, int *pbc)
{
int i,j,k,m,ns;
if (commflag == 1) {
m = 0;
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = ubuf(partner[j]).d;
buf[m++] = probability[j];
}
return m;
}
int **nspecial = atom->nspecial;
tagint **special = atom->special;
m = 0;
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = ubuf(finalpartner[j]).d;
ns = nspecial[j][0];
buf[m++] = ubuf(ns).d;
for (k = 0; k < ns; k++)
buf[m++] = ubuf(special[j][k]).d;
}
return m;
}
/* ---------------------------------------------------------------------- */
void FixBondBreak::unpack_forward_comm(int n, int first, double *buf)
{
int i,j,m,ns,last;
if (commflag == 1) {
m = 0;
last = first + n;
for (i = first; i < last; i++) {
partner[i] = (tagint) ubuf(buf[m++]).i;
probability[i] = buf[m++];
}
} else {
int **nspecial = atom->nspecial;
tagint **special = atom->special;
m = 0;
last = first + n;
for (i = first; i < last; i++) {
finalpartner[i] = (tagint) ubuf(buf[m++]).i;
ns = (int) ubuf(buf[m++]).i;
nspecial[i][0] = ns;
for (j = 0; j < ns; j++)
special[i][j] = (tagint) ubuf(buf[m++]).i;
}
}
}
/* ---------------------------------------------------------------------- */
int FixBondBreak::pack_reverse_comm(int n, int first, double *buf)
{
int i,m,last;
m = 0;
last = first + n;
for (i = first; i < last; i++) {
buf[m++] = ubuf(partner[i]).d;
buf[m++] = distsq[i];
}
return m;
}
/* ---------------------------------------------------------------------- */
void FixBondBreak::unpack_reverse_comm(int n, int *list, double *buf)
{
int i,j,m;
m = 0;
for (i = 0; i < n; i++) {
j = list[i];
if (buf[m+1] > distsq[j]) {
partner[j] = (tagint) ubuf(buf[m++]).i;
distsq[j] = buf[m++];
} else m += 2;
}
}
/* ---------------------------------------------------------------------- */
void FixBondBreak::print_bb()
{
for (int i = 0; i < atom->nlocal; i++) {
printf("TAG " TAGINT_FORMAT ": %d nbonds: ",atom->tag[i],atom->num_bond[i]);
for (int j = 0; j < atom->num_bond[i]; j++) {
printf(" %d",atom->bond_atom[i][j]);
}
printf("\n");
printf("TAG " TAGINT_FORMAT ": %d nangles: ",atom->tag[i],atom->num_angle[i]);
for (int j = 0; j < atom->num_angle[i]; j++) {
printf(" %d %d %d,",atom->angle_atom1[i][j],
atom->angle_atom2[i][j],atom->angle_atom3[i][j]);
}
printf("\n");
printf("TAG " TAGINT_FORMAT ": %d ndihedrals: ",atom->tag[i],atom->num_dihedral[i]);
for (int j = 0; j < atom->num_dihedral[i]; j++) {
printf(" %d %d %d %d,",atom->dihedral_atom1[i][j],
atom->dihedral_atom2[i][j],atom->dihedral_atom3[i][j],
atom->dihedral_atom4[i][j]);
}
printf("\n");
printf("TAG " TAGINT_FORMAT ": %d %d %d nspecial: ",atom->tag[i],
atom->nspecial[i][0],atom->nspecial[i][1],atom->nspecial[i][2]);
for (int j = 0; j < atom->nspecial[i][2]; j++) {
printf(" %d",atom->special[i][j]);
}
printf("\n");
}
}
/* ---------------------------------------------------------------------- */
void FixBondBreak::print_copy(const char *str, tagint m,
int n1, int n2, int n3, int *v)
{
printf("%s %i: %d %d %d nspecial: ",str,m,n1,n2,n3);
for (int j = 0; j < n3; j++) printf(" %d",v[j]);
printf("\n");
}
/* ---------------------------------------------------------------------- */
double FixBondBreak::compute_vector(int n)
{
if (n == 0) return (double) breakcount;
return (double) breakcounttotal;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixBondBreak::memory_usage()
{
int nmax = atom->nmax;
double bytes = 2*nmax * sizeof(tagint);
bytes += nmax * sizeof(double);
return bytes;
}
diff --git a/src/MC/fix_bond_create.cpp b/src/MC/fix_bond_create.cpp
index 6db8644ca..59e0e4cf7 100755
--- a/src/MC/fix_bond_create.cpp
+++ b/src/MC/fix_bond_create.cpp
@@ -1,1444 +1,1445 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <mpi.h>
#include <string.h>
#include <stdlib.h>
#include "fix_bond_create.h"
#include "update.h"
#include "respa.h"
#include "atom.h"
#include "atom_vec.h"
#include "force.h"
#include "pair.h"
#include "comm.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "random_mars.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
#define BIG 1.0e20
#define DELTA 16
/* ---------------------------------------------------------------------- */
FixBondCreate::FixBondCreate(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ bondcount(NULL), partner(NULL), finalpartner(NULL), distsq(NULL), created(NULL), copy(NULL), random(NULL)
{
if (narg < 8) error->all(FLERR,"Illegal fix bond/create command");
MPI_Comm_rank(world,&me);
nevery = force->inumeric(FLERR,arg[3]);
if (nevery <= 0) error->all(FLERR,"Illegal fix bond/create command");
force_reneighbor = 1;
next_reneighbor = -1;
vector_flag = 1;
size_vector = 2;
global_freq = 1;
extvector = 0;
iatomtype = force->inumeric(FLERR,arg[4]);
jatomtype = force->inumeric(FLERR,arg[5]);
double cutoff = force->numeric(FLERR,arg[6]);
btype = force->inumeric(FLERR,arg[7]);
if (iatomtype < 1 || iatomtype > atom->ntypes ||
jatomtype < 1 || jatomtype > atom->ntypes)
error->all(FLERR,"Invalid atom type in fix bond/create command");
if (cutoff < 0.0) error->all(FLERR,"Illegal fix bond/create command");
if (btype < 1 || btype > atom->nbondtypes)
error->all(FLERR,"Invalid bond type in fix bond/create command");
cutsq = cutoff*cutoff;
// optional keywords
imaxbond = 0;
inewtype = iatomtype;
jmaxbond = 0;
jnewtype = jatomtype;
fraction = 1.0;
int seed = 12345;
atype = dtype = itype = 0;
int iarg = 8;
while (iarg < narg) {
if (strcmp(arg[iarg],"iparam") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix bond/create command");
imaxbond = force->inumeric(FLERR,arg[iarg+1]);
inewtype = force->inumeric(FLERR,arg[iarg+2]);
if (imaxbond < 0) error->all(FLERR,"Illegal fix bond/create command");
if (inewtype < 1 || inewtype > atom->ntypes)
error->all(FLERR,"Invalid atom type in fix bond/create command");
iarg += 3;
} else if (strcmp(arg[iarg],"jparam") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix bond/create command");
jmaxbond = force->inumeric(FLERR,arg[iarg+1]);
jnewtype = force->inumeric(FLERR,arg[iarg+2]);
if (jmaxbond < 0) error->all(FLERR,"Illegal fix bond/create command");
if (jnewtype < 1 || jnewtype > atom->ntypes)
error->all(FLERR,"Invalid atom type in fix bond/create command");
iarg += 3;
} else if (strcmp(arg[iarg],"prob") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix bond/create command");
fraction = force->numeric(FLERR,arg[iarg+1]);
seed = force->inumeric(FLERR,arg[iarg+2]);
if (fraction < 0.0 || fraction > 1.0)
error->all(FLERR,"Illegal fix bond/create command");
if (seed <= 0) error->all(FLERR,"Illegal fix bond/create command");
iarg += 3;
} else if (strcmp(arg[iarg],"atype") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix bond/create command");
atype = force->inumeric(FLERR,arg[iarg+1]);
if (atype < 0) error->all(FLERR,"Illegal fix bond/create command");
iarg += 2;
} else if (strcmp(arg[iarg],"dtype") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix bond/create command");
dtype = force->inumeric(FLERR,arg[iarg+1]);
if (dtype < 0) error->all(FLERR,"Illegal fix bond/create command");
iarg += 2;
} else if (strcmp(arg[iarg],"itype") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix bond/create command");
itype = force->inumeric(FLERR,arg[iarg+1]);
if (itype < 0) error->all(FLERR,"Illegal fix bond/create command");
iarg += 2;
} else error->all(FLERR,"Illegal fix bond/create command");
}
// error check
if (atom->molecular != 1)
error->all(FLERR,"Cannot use fix bond/create with non-molecular systems");
if (iatomtype == jatomtype &&
((imaxbond != jmaxbond) || (inewtype != jnewtype)))
error->all(FLERR,
"Inconsistent iparam/jparam values in fix bond/create command");
// initialize Marsaglia RNG with processor-unique seed
random = new RanMars(lmp,seed + me);
// perform initial allocation of atom-based arrays
// register with Atom class
// bondcount values will be initialized in setup()
bondcount = NULL;
grow_arrays(atom->nmax);
atom->add_callback(0);
countflag = 0;
// set comm sizes needed by this fix
// forward is big due to comm of broken bonds and 1-2 neighbors
comm_forward = MAX(2,2+atom->maxspecial);
comm_reverse = 2;
// allocate arrays local to this fix
nmax = 0;
partner = finalpartner = NULL;
distsq = NULL;
maxcreate = 0;
created = NULL;
// copy = special list for one atom
// size = ms^2 + ms is sufficient
// b/c in rebuild_special_one() neighs of all 1-2s are added,
// then a dedup(), then neighs of all 1-3s are added, then final dedup()
// this means intermediate size cannot exceed ms^2 + ms
int maxspecial = atom->maxspecial;
copy = new tagint[maxspecial*maxspecial + maxspecial];
// zero out stats
createcount = 0;
createcounttotal = 0;
}
/* ---------------------------------------------------------------------- */
FixBondCreate::~FixBondCreate()
{
// unregister callbacks to this fix from Atom class
atom->delete_callback(id,0);
delete random;
// delete locally stored arrays
memory->destroy(bondcount);
memory->destroy(partner);
memory->destroy(finalpartner);
memory->destroy(distsq);
memory->destroy(created);
delete [] copy;
}
/* ---------------------------------------------------------------------- */
int FixBondCreate::setmask()
{
int mask = 0;
mask |= POST_INTEGRATE;
mask |= POST_INTEGRATE_RESPA;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixBondCreate::init()
{
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
// check cutoff for iatomtype,jatomtype
if (force->pair == NULL || cutsq > force->pair->cutsq[iatomtype][jatomtype])
error->all(FLERR,"Fix bond/create cutoff is longer than pairwise cutoff");
// enable angle/dihedral/improper creation if atype/dtype/itype
// option was used and a force field has been specified
if (atype && force->angle) {
angleflag = 1;
if (atype > atom->nangletypes)
error->all(FLERR,"Fix bond/create angle type is invalid");
} else angleflag = 0;
if (dtype && force->dihedral) {
dihedralflag = 1;
if (dtype > atom->ndihedraltypes)
error->all(FLERR,"Fix bond/create dihedral type is invalid");
} else dihedralflag = 0;
if (itype && force->improper) {
improperflag = 1;
if (itype > atom->nimpropertypes)
error->all(FLERR,"Fix bond/create improper type is invalid");
} else improperflag = 0;
if (force->improper) {
if (force->improper_match("class2") || force->improper_match("ring"))
error->all(FLERR,"Cannot yet use fix bond/create with this "
"improper style");
}
// need a half neighbor list, built every Nevery steps
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->fix = 1;
neighbor->requests[irequest]->occasional = 1;
lastcheck = -1;
}
/* ---------------------------------------------------------------------- */
void FixBondCreate::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void FixBondCreate::setup(int vflag)
{
int i,j,m;
// compute initial bondcount if this is first run
// can't do this earlier, in constructor or init, b/c need ghost info
if (countflag) return;
countflag = 1;
// count bonds stored with each bond I own
// if newton bond is not set, just increment count on atom I
// if newton bond is set, also increment count on atom J even if ghost
// bondcount is long enough to tally ghost atom counts
int *num_bond = atom->num_bond;
int **bond_type = atom->bond_type;
tagint **bond_atom = atom->bond_atom;
int nlocal = atom->nlocal;
int nghost = atom->nghost;
int nall = nlocal + nghost;
int newton_bond = force->newton_bond;
for (i = 0; i < nall; i++) bondcount[i] = 0;
for (i = 0; i < nlocal; i++)
for (j = 0; j < num_bond[i]; j++) {
if (bond_type[i][j] == btype) {
bondcount[i]++;
if (newton_bond) {
m = atom->map(bond_atom[i][j]);
if (m < 0)
error->one(FLERR,"Fix bond/create needs ghost atoms "
"from further away");
bondcount[m]++;
}
}
}
// if newton_bond is set, need to sum bondcount
commflag = 1;
if (newton_bond) comm->reverse_comm_fix(this,1);
}
/* ---------------------------------------------------------------------- */
void FixBondCreate::post_integrate()
{
int i,j,k,m,n,ii,jj,inum,jnum,itype,jtype,n1,n2,n3,possible;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
int *ilist,*jlist,*numneigh,**firstneigh;
tagint *slist;
if (update->ntimestep % nevery) return;
// check that all procs have needed ghost atoms within ghost cutoff
// only if neighbor list has changed since last check
// needs to be <= test b/c neighbor list could have been re-built in
// same timestep as last post_integrate() call, but afterwards
// NOTE: no longer think is needed, due to error tests on atom->map()
// NOTE: if delete, can also delete lastcheck and check_ghosts()
//if (lastcheck <= neighbor->lastcall) check_ghosts();
// acquire updated ghost atom positions
// necessary b/c are calling this after integrate, but before Verlet comm
comm->forward_comm();
// forward comm of bondcount, so ghosts have it
commflag = 1;
comm->forward_comm_fix(this,1);
// resize bond partner list and initialize it
// probability array overlays distsq array
// needs to be atom->nmax in length
if (atom->nmax > nmax) {
memory->destroy(partner);
memory->destroy(finalpartner);
memory->destroy(distsq);
nmax = atom->nmax;
memory->create(partner,nmax,"bond/create:partner");
memory->create(finalpartner,nmax,"bond/create:finalpartner");
memory->create(distsq,nmax,"bond/create:distsq");
probability = distsq;
}
int nlocal = atom->nlocal;
int nall = atom->nlocal + atom->nghost;
for (i = 0; i < nall; i++) {
partner[i] = 0;
finalpartner[i] = 0;
distsq[i] = BIG;
}
// loop over neighbors of my atoms
// each atom sets one closest eligible partner atom ID to bond with
double **x = atom->x;
tagint *tag = atom->tag;
tagint **bond_atom = atom->bond_atom;
int *num_bond = atom->num_bond;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
int *mask = atom->mask;
int *type = atom->type;
neighbor->build_one(list,1);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (!(mask[i] & groupbit)) continue;
itype = type[i];
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
jlist = firstneigh[i];
jnum = numneigh[i];
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
if (!(mask[j] & groupbit)) continue;
jtype = type[j];
possible = 0;
if (itype == iatomtype && jtype == jatomtype) {
if ((imaxbond == 0 || bondcount[i] < imaxbond) &&
(jmaxbond == 0 || bondcount[j] < jmaxbond))
possible = 1;
} else if (itype == jatomtype && jtype == iatomtype) {
if ((jmaxbond == 0 || bondcount[i] < jmaxbond) &&
(imaxbond == 0 || bondcount[j] < imaxbond))
possible = 1;
}
if (!possible) continue;
// do not allow a duplicate bond to be created
// check 1-2 neighbors of atom I
for (k = 0; k < nspecial[i][0]; k++)
if (special[i][k] == tag[j]) possible = 0;
if (!possible) continue;
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq >= cutsq) continue;
if (rsq < distsq[i]) {
partner[i] = tag[j];
distsq[i] = rsq;
}
if (rsq < distsq[j]) {
partner[j] = tag[i];
distsq[j] = rsq;
}
}
}
// reverse comm of distsq and partner
// not needed if newton_pair off since I,J pair was seen by both procs
commflag = 2;
if (force->newton_pair) comm->reverse_comm_fix(this);
// each atom now knows its winning partner
// for prob check, generate random value for each atom with a bond partner
// forward comm of partner and random value, so ghosts have it
if (fraction < 1.0) {
for (i = 0; i < nlocal; i++)
if (partner[i]) probability[i] = random->uniform();
}
commflag = 2;
comm->forward_comm_fix(this,2);
// create bonds for atoms I own
// only if both atoms list each other as winning bond partner
// and probability constraint is satisfied
// if other atom is owned by another proc, it should do same thing
int **bond_type = atom->bond_type;
int newton_bond = force->newton_bond;
ncreate = 0;
for (i = 0; i < nlocal; i++) {
if (partner[i] == 0) continue;
j = atom->map(partner[i]);
if (partner[j] != tag[i]) continue;
// apply probability constraint using RN for atom with smallest ID
if (fraction < 1.0) {
if (tag[i] < tag[j]) {
if (probability[i] >= fraction) continue;
} else {
if (probability[j] >= fraction) continue;
}
}
// if newton_bond is set, only store with I or J
// if not newton_bond, store bond with both I and J
// atom J will also do this consistently, whatever proc it is on
if (!newton_bond || tag[i] < tag[j]) {
if (num_bond[i] == atom->bond_per_atom)
error->one(FLERR,"New bond exceeded bonds per atom in fix bond/create");
bond_type[i][num_bond[i]] = btype;
bond_atom[i][num_bond[i]] = tag[j];
num_bond[i]++;
}
// add a 1-2 neighbor to special bond list for atom I
// atom J will also do this, whatever proc it is on
// need to first remove tag[j] from later in list if it appears
// prevents list from overflowing, will be rebuilt in rebuild_special_one()
slist = special[i];
n1 = nspecial[i][0];
n2 = nspecial[i][1];
n3 = nspecial[i][2];
for (m = n1; m < n3; m++)
if (slist[m] == tag[j]) break;
if (m < n3) {
for (n = m; n < n3-1; n++) slist[n] = slist[n+1];
n3--;
if (m < n2) n2--;
}
if (n3 == atom->maxspecial)
error->one(FLERR,
"New bond exceeded special list size in fix bond/create");
for (m = n3; m > n1; m--) slist[m] = slist[m-1];
slist[n1] = tag[j];
nspecial[i][0] = n1+1;
nspecial[i][1] = n2+1;
nspecial[i][2] = n3+1;
// increment bondcount, convert atom to new type if limit reached
// atom J will also do this, whatever proc it is on
bondcount[i]++;
if (type[i] == iatomtype) {
if (bondcount[i] == imaxbond) type[i] = inewtype;
} else {
if (bondcount[i] == jmaxbond) type[i] = jnewtype;
}
// store final created bond partners and count the created bond once
finalpartner[i] = tag[j];
finalpartner[j] = tag[i];
if (tag[i] < tag[j]) ncreate++;
}
// tally stats
MPI_Allreduce(&ncreate,&createcount,1,MPI_INT,MPI_SUM,world);
createcounttotal += createcount;
atom->nbonds += createcount;
// trigger reneighboring if any bonds were formed
// this insures neigh lists will immediately reflect the topology changes
// done if any bonds created
if (createcount) next_reneighbor = update->ntimestep;
if (!createcount) return;
// communicate final partner and 1-2 special neighbors
// 1-2 neighs already reflect created bonds
commflag = 3;
comm->forward_comm_fix(this);
// create list of broken bonds that influence my owned atoms
// even if between owned-ghost or ghost-ghost atoms
// finalpartner is now set for owned and ghost atoms so loop over nall
// OK if duplicates in broken list due to ghosts duplicating owned atoms
// check J < 0 to insure a broken bond to unknown atom is included
// i.e. a bond partner outside of cutoff length
ncreate = 0;
for (i = 0; i < nall; i++) {
if (finalpartner[i] == 0) continue;
j = atom->map(finalpartner[i]);
if (j < 0 || tag[i] < tag[j]) {
if (ncreate == maxcreate) {
maxcreate += DELTA;
memory->grow(created,maxcreate,2,"bond/create:created");
}
created[ncreate][0] = tag[i];
created[ncreate][1] = finalpartner[i];
ncreate++;
}
}
// update special neigh lists of all atoms affected by any created bond
// also add angles/dihedrals/impropers induced by created bonds
update_topology();
// DEBUG
//print_bb();
}
/* ----------------------------------------------------------------------
insure all atoms 2 hops away from owned atoms are in ghost list
this allows dihedral 1-2-3-4 to be properly created
and special list of 1 to be properly updated
if I own atom 1, but not 2,3,4, and bond 3-4 is added
then 2,3 will be ghosts and 3 will store 4 as its finalpartner
------------------------------------------------------------------------- */
void FixBondCreate::check_ghosts()
{
int i,j,n;
tagint *slist;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
int nlocal = atom->nlocal;
int flag = 0;
for (i = 0; i < nlocal; i++) {
slist = special[i];
n = nspecial[i][1];
for (j = 0; j < n; j++)
if (atom->map(slist[j]) < 0) flag = 1;
}
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall)
error->all(FLERR,"Fix bond/create needs ghost atoms from further away");
lastcheck = update->ntimestep;
}
/* ----------------------------------------------------------------------
double loop over my atoms and created bonds
influenced = 1 if atom's topology is affected by any created bond
yes if is one of 2 atoms in bond
yes if either atom ID appears in as 1-2 or 1-3 in atom's special list
else no
if influenced by any created bond:
rebuild the atom's special list of 1-2,1-3,1-4 neighs
check for angles/dihedrals/impropers to create due modified special list
------------------------------------------------------------------------- */
void FixBondCreate::update_topology()
{
int i,j,k,n,influence,influenced;
tagint id1,id2;
tagint *slist;
tagint *tag = atom->tag;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
int nlocal = atom->nlocal;
nangles = 0;
ndihedrals = 0;
nimpropers = 0;
overflow = 0;
//printf("NCREATE %d: ",ncreate);
//for (i = 0; i < ncreate; i++)
// printf(" %d %d,",created[i][0],created[i][1]);
//printf("\n");
for (i = 0; i < nlocal; i++) {
influenced = 0;
slist = special[i];
for (j = 0; j < ncreate; j++) {
id1 = created[j][0];
id2 = created[j][1];
influence = 0;
if (tag[i] == id1 || tag[i] == id2) influence = 1;
else {
n = nspecial[i][1];
for (k = 0; k < n; k++)
if (slist[k] == id1 || slist[k] == id2) {
influence = 1;
break;
}
}
if (!influence) continue;
influenced = 1;
}
// rebuild_special_one() first, since used by create_angles, etc
if (influenced) {
rebuild_special_one(i);
if (angleflag) create_angles(i);
if (dihedralflag) create_dihedrals(i);
if (improperflag) create_impropers(i);
}
}
int overflowall;
MPI_Allreduce(&overflow,&overflowall,1,MPI_INT,MPI_SUM,world);
if (overflowall) error->all(FLERR,"Fix bond/create induced too many "
"angles/dihedrals/impropers per atom");
int newton_bond = force->newton_bond;
int all;
if (angleflag) {
MPI_Allreduce(&nangles,&all,1,MPI_INT,MPI_SUM,world);
if (!newton_bond) all /= 3;
atom->nangles += all;
}
if (dihedralflag) {
MPI_Allreduce(&ndihedrals,&all,1,MPI_INT,MPI_SUM,world);
if (!newton_bond) all /= 4;
atom->ndihedrals += all;
}
if (improperflag) {
MPI_Allreduce(&nimpropers,&all,1,MPI_INT,MPI_SUM,world);
if (!newton_bond) all /= 4;
atom->nimpropers += all;
}
}
/* ----------------------------------------------------------------------
re-build special list of atom M
does not affect 1-2 neighs (already include effects of new bond)
affects 1-3 and 1-4 neighs due to other atom's augmented 1-2 neighs
------------------------------------------------------------------------- */
void FixBondCreate::rebuild_special_one(int m)
{
int i,j,n,n1,cn1,cn2,cn3;
tagint *slist;
tagint *tag = atom->tag;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
// existing 1-2 neighs of atom M
slist = special[m];
n1 = nspecial[m][0];
cn1 = 0;
for (i = 0; i < n1; i++)
copy[cn1++] = slist[i];
// new 1-3 neighs of atom M, based on 1-2 neighs of 1-2 neighs
// exclude self
// remove duplicates after adding all possible 1-3 neighs
cn2 = cn1;
for (i = 0; i < cn1; i++) {
n = atom->map(copy[i]);
if (n < 0)
error->one(FLERR,"Fix bond/create needs ghost atoms from further away");
slist = special[n];
n1 = nspecial[n][0];
for (j = 0; j < n1; j++)
if (slist[j] != tag[m]) copy[cn2++] = slist[j];
}
cn2 = dedup(cn1,cn2,copy);
if (cn2 > atom->maxspecial)
error->one(FLERR,"Special list size exceeded in fix bond/create");
// new 1-4 neighs of atom M, based on 1-2 neighs of 1-3 neighs
// exclude self
// remove duplicates after adding all possible 1-4 neighs
cn3 = cn2;
for (i = cn1; i < cn2; i++) {
n = atom->map(copy[i]);
if (n < 0)
error->one(FLERR,"Fix bond/create needs ghost atoms from further away");
slist = special[n];
n1 = nspecial[n][0];
for (j = 0; j < n1; j++)
if (slist[j] != tag[m]) copy[cn3++] = slist[j];
}
cn3 = dedup(cn2,cn3,copy);
if (cn3 > atom->maxspecial)
error->one(FLERR,"Special list size exceeded in fix bond/create");
// store new special list with atom M
nspecial[m][0] = cn1;
nspecial[m][1] = cn2;
nspecial[m][2] = cn3;
memcpy(special[m],copy,cn3*sizeof(int));
}
/* ----------------------------------------------------------------------
create any angles owned by atom M induced by newly created bonds
walk special list to find all possible angles to create
only add an angle if a new bond is one of its 2 bonds (I-J,J-K)
for newton_bond on, atom M is central atom
for newton_bond off, atom M is any of 3 atoms in angle
------------------------------------------------------------------------- */
void FixBondCreate::create_angles(int m)
{
int i,j,n,i2local,n1,n2;
tagint i1,i2,i3;
tagint *s1list,*s2list;
tagint *tag = atom->tag;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
int num_angle = atom->num_angle[m];
int *angle_type = atom->angle_type[m];
tagint *angle_atom1 = atom->angle_atom1[m];
tagint *angle_atom2 = atom->angle_atom2[m];
tagint *angle_atom3 = atom->angle_atom3[m];
// atom M is central atom in angle
// double loop over 1-2 neighs
// avoid double counting by 2nd loop as j = i+1,N not j = 1,N
// consider all angles, only add if:
// a new bond is in the angle and atom types match
i2 = tag[m];
n2 = nspecial[m][0];
s2list = special[m];
for (i = 0; i < n2; i++) {
i1 = s2list[i];
for (j = i+1; j < n2; j++) {
i3 = s2list[j];
// angle = i1-i2-i3
for (n = 0; n < ncreate; n++) {
if (created[n][0] == i1 && created[n][1] == i2) break;
if (created[n][0] == i2 && created[n][1] == i1) break;
if (created[n][0] == i2 && created[n][1] == i3) break;
if (created[n][0] == i3 && created[n][1] == i2) break;
}
if (n == ncreate) continue;
// NOTE: this is place to check atom types of i1,i2,i3
if (num_angle < atom->angle_per_atom) {
angle_type[num_angle] = atype;
angle_atom1[num_angle] = i1;
angle_atom2[num_angle] = i2;
angle_atom3[num_angle] = i3;
num_angle++;
nangles++;
} else overflow = 1;
}
}
atom->num_angle[m] = num_angle;
if (force->newton_bond) return;
// for newton_bond off, also consider atom M as atom 1 in angle
i1 = tag[m];
n1 = nspecial[m][0];
s1list = special[m];
for (i = 0; i < n1; i++) {
i2 = s1list[i];
i2local = atom->map(i2);
if (i2local < 0)
error->one(FLERR,"Fix bond/create needs ghost atoms from further away");
s2list = special[i2local];
n2 = nspecial[i2local][0];
for (j = 0; j < n2; j++) {
i3 = s2list[j];
if (i3 == i1) continue;
// angle = i1-i2-i3
for (n = 0; n < ncreate; n++) {
if (created[n][0] == i1 && created[n][1] == i2) break;
if (created[n][0] == i2 && created[n][1] == i1) break;
if (created[n][0] == i2 && created[n][1] == i3) break;
if (created[n][0] == i3 && created[n][1] == i2) break;
}
if (n == ncreate) continue;
// NOTE: this is place to check atom types of i1,i2,i3
if (num_angle < atom->angle_per_atom) {
angle_type[num_angle] = atype;
angle_atom1[num_angle] = i1;
angle_atom2[num_angle] = i2;
angle_atom3[num_angle] = i3;
num_angle++;
nangles++;
} else overflow = 1;
}
}
atom->num_angle[m] = num_angle;
}
/* ----------------------------------------------------------------------
create any dihedrals owned by atom M induced by newly created bonds
walk special list to find all possible dihedrals to create
only add a dihedral if a new bond is one of its 3 bonds (I-J,J-K,K-L)
for newton_bond on, atom M is central atom
for newton_bond off, atom M is any of 4 atoms in dihedral
------------------------------------------------------------------------- */
void FixBondCreate::create_dihedrals(int m)
{
int i,j,k,n,i1local,i2local,i3local,n1,n2,n3;
tagint i1,i2,i3,i4;
tagint *s1list,*s2list,*s3list;
tagint *tag = atom->tag;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
int num_dihedral = atom->num_dihedral[m];
int *dihedral_type = atom->dihedral_type[m];
tagint *dihedral_atom1 = atom->dihedral_atom1[m];
tagint *dihedral_atom2 = atom->dihedral_atom2[m];
tagint *dihedral_atom3 = atom->dihedral_atom3[m];
tagint *dihedral_atom4 = atom->dihedral_atom4[m];
// atom M is 2nd atom in dihedral
// double loop over 1-2 neighs
// two triple loops: one over neighs at each end of triplet
// avoid double counting by 2nd loop as j = i+1,N not j = 1,N
// avoid double counting due to another atom being 2nd atom in same dihedral
// by requiring ID of 2nd atom < ID of 3rd atom
// don't do this if newton bond off since want to double count
// consider all dihedrals, only add if:
// a new bond is in the dihedral and atom types match
i2 = tag[m];
n2 = nspecial[m][0];
s2list = special[m];
for (i = 0; i < n2; i++) {
i1 = s2list[i];
for (j = i+1; j < n2; j++) {
i3 = s2list[j];
if (force->newton_bond && i2 > i3) continue;
i3local = atom->map(i3);
if (i3local < 0)
error->one(FLERR,"Fix bond/create needs ghost atoms from further away");
s3list = special[i3local];
n3 = nspecial[i3local][0];
for (k = 0; k < n3; k++) {
i4 = s3list[k];
if (i4 == i1 || i4 == i2 || i4 == i3) continue;
// dihedral = i1-i2-i3-i4
for (n = 0; n < ncreate; n++) {
if (created[n][0] == i1 && created[n][1] == i2) break;
if (created[n][0] == i2 && created[n][1] == i1) break;
if (created[n][0] == i2 && created[n][1] == i3) break;
if (created[n][0] == i3 && created[n][1] == i2) break;
if (created[n][0] == i3 && created[n][1] == i4) break;
if (created[n][0] == i4 && created[n][1] == i3) break;
}
if (n < ncreate) {
// NOTE: this is place to check atom types of i3,i2,i1,i4
if (num_dihedral < atom->dihedral_per_atom) {
dihedral_type[num_dihedral] = dtype;
dihedral_atom1[num_dihedral] = i1;
dihedral_atom2[num_dihedral] = i2;
dihedral_atom3[num_dihedral] = i3;
dihedral_atom4[num_dihedral] = i4;
num_dihedral++;
ndihedrals++;
} else overflow = 1;
}
}
}
}
for (i = 0; i < n2; i++) {
i1 = s2list[i];
if (force->newton_bond && i2 > i1) continue;
i1local = atom->map(i1);
if (i1local < 0)
error->one(FLERR,"Fix bond/create needs ghost atoms from further away");
s3list = special[i1local];
n3 = nspecial[i1local][0];
for (j = i+1; j < n2; j++) {
i3 = s2list[j];
for (k = 0; k < n3; k++) {
i4 = s3list[k];
if (i4 == i1 || i4 == i2 || i4 == i3) continue;
// dihedral = i3-i2-i1-i4
for (n = 0; n < ncreate; n++) {
if (created[n][0] == i3 && created[n][1] == i2) break;
if (created[n][0] == i2 && created[n][1] == i3) break;
if (created[n][0] == i2 && created[n][1] == i1) break;
if (created[n][0] == i1 && created[n][1] == i2) break;
if (created[n][0] == i1 && created[n][1] == i4) break;
if (created[n][0] == i4 && created[n][1] == i1) break;
}
if (n < ncreate) {
// NOTE: this is place to check atom types of i3,i2,i1,i4
if (num_dihedral < atom->dihedral_per_atom) {
dihedral_type[num_dihedral] = dtype;
dihedral_atom1[num_dihedral] = i3;
dihedral_atom2[num_dihedral] = i2;
dihedral_atom3[num_dihedral] = i1;
dihedral_atom4[num_dihedral] = i4;
num_dihedral++;
ndihedrals++;
} else overflow = 1;
}
}
}
}
atom->num_dihedral[m] = num_dihedral;
if (force->newton_bond) return;
// for newton_bond off, also consider atom M as atom 1 in dihedral
i1 = tag[m];
n1 = nspecial[m][0];
s1list = special[m];
for (i = 0; i < n1; i++) {
i2 = s1list[i];
i2local = atom->map(i2);
if (i2local < 0)
error->one(FLERR,"Fix bond/create needs ghost atoms from further away");
s2list = special[i2local];
n2 = nspecial[i2local][0];
for (j = 0; j < n2; j++) {
i3 = s2list[j];
if (i3 == i1) continue;
i3local = atom->map(i3);
if (i3local < 0)
error->one(FLERR,"Fix bond/create needs ghost atoms from further away");
s3list = special[i3local];
n3 = nspecial[i3local][0];
for (k = 0; k < n3; k++) {
i4 = s3list[k];
if (i4 == i1 || i4 == i2 || i4 == i3) continue;
// dihedral = i1-i2-i3-i4
for (n = 0; n < ncreate; n++) {
if (created[n][0] == i1 && created[n][1] == i2) break;
if (created[n][0] == i2 && created[n][1] == i1) break;
if (created[n][0] == i2 && created[n][1] == i3) break;
if (created[n][0] == i3 && created[n][1] == i2) break;
if (created[n][0] == i3 && created[n][1] == i4) break;
if (created[n][0] == i4 && created[n][1] == i3) break;
}
if (n < ncreate) {
// NOTE: this is place to check atom types of i3,i2,i1,i4
if (num_dihedral < atom->dihedral_per_atom) {
dihedral_type[num_dihedral] = dtype;
dihedral_atom1[num_dihedral] = i1;
dihedral_atom2[num_dihedral] = i2;
dihedral_atom3[num_dihedral] = i3;
dihedral_atom4[num_dihedral] = i4;
num_dihedral++;
ndihedrals++;
} else overflow = 1;
}
}
}
}
}
/* ----------------------------------------------------------------------
create any impropers owned by atom M induced by newly created bonds
walk special list to find all possible impropers to create
only add an improper if a new bond is one of its 3 bonds (I-J,I-K,I-L)
for newton_bond on, atom M is central atom
for newton_bond off, atom M is any of 4 atoms in improper
------------------------------------------------------------------------- */
void FixBondCreate::create_impropers(int m)
{
int i,j,k,n,i1local,n1,n2;
tagint i1,i2,i3,i4;
tagint *s1list,*s2list;
tagint *tag = atom->tag;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
int num_improper = atom->num_improper[m];
int *improper_type = atom->improper_type[m];
tagint *improper_atom1 = atom->improper_atom1[m];
tagint *improper_atom2 = atom->improper_atom2[m];
tagint *improper_atom3 = atom->improper_atom3[m];
tagint *improper_atom4 = atom->improper_atom4[m];
// atom M is central atom in improper
// triple loop over 1-2 neighs
// avoid double counting by 2nd loop as j = i+1,N not j = 1,N
// consider all impropers, only add if:
// a new bond is in the improper and atom types match
i1 = tag[m];
n1 = nspecial[m][0];
s1list = special[m];
for (i = 0; i < n1; i++) {
i2 = s1list[i];
for (j = i+1; j < n1; j++) {
i3 = s1list[j];
for (k = j+1; k < n1; k++) {
i4 = s1list[k];
// improper = i1-i2-i3-i4
for (n = 0; n < ncreate; n++) {
if (created[n][0] == i1 && created[n][1] == i2) break;
if (created[n][0] == i2 && created[n][1] == i1) break;
if (created[n][0] == i1 && created[n][1] == i3) break;
if (created[n][0] == i3 && created[n][1] == i1) break;
if (created[n][0] == i1 && created[n][1] == i4) break;
if (created[n][0] == i4 && created[n][1] == i1) break;
}
if (n == ncreate) continue;
// NOTE: this is place to check atom types of i1,i2,i3,i4
if (num_improper < atom->improper_per_atom) {
improper_type[num_improper] = itype;
improper_atom1[num_improper] = i1;
improper_atom2[num_improper] = i2;
improper_atom3[num_improper] = i3;
improper_atom4[num_improper] = i4;
num_improper++;
nimpropers++;
} else overflow = 1;
}
}
}
atom->num_improper[m] = num_improper;
if (force->newton_bond) return;
// for newton_bond off, also consider atom M as atom 2 in improper
i2 = tag[m];
n2 = nspecial[m][0];
s2list = special[m];
for (i = 0; i < n2; i++) {
i1 = s2list[i];
i1local = atom->map(i1);
if (i1local < 0)
error->one(FLERR,"Fix bond/create needs ghost atoms from further away");
s1list = special[i1local];
n1 = nspecial[i1local][0];
for (j = 0; j < n1; j++) {
i3 = s1list[j];
if (i3 == i1 || i3 == i2) continue;
for (k = j+1; k < n1; k++) {
i4 = s1list[k];
if (i4 == i1 || i4 == i2) continue;
// improper = i1-i2-i3-i4
for (n = 0; n < ncreate; n++) {
if (created[n][0] == i1 && created[n][1] == i2) break;
if (created[n][0] == i2 && created[n][1] == i1) break;
if (created[n][0] == i1 && created[n][1] == i3) break;
if (created[n][0] == i3 && created[n][1] == i1) break;
if (created[n][0] == i1 && created[n][1] == i4) break;
if (created[n][0] == i4 && created[n][1] == i1) break;
}
if (n < ncreate) {
// NOTE: this is place to check atom types of i3,i2,i1,i4
if (num_improper < atom->improper_per_atom) {
improper_type[num_improper] = itype;
improper_atom1[num_improper] = i1;
improper_atom2[num_improper] = i2;
improper_atom3[num_improper] = i3;
improper_atom4[num_improper] = i4;
num_improper++;
nimpropers++;
} else overflow = 1;
}
}
}
}
}
/* ----------------------------------------------------------------------
remove all ID duplicates in copy from Nstart:Nstop-1
compare to all previous values in copy
return N decremented by any discarded duplicates
------------------------------------------------------------------------- */
int FixBondCreate::dedup(int nstart, int nstop, tagint *copy)
{
int i;
int m = nstart;
while (m < nstop) {
for (i = 0; i < m; i++)
if (copy[i] == copy[m]) {
copy[m] = copy[nstop-1];
nstop--;
break;
}
if (i == m) m++;
}
return nstop;
}
/* ---------------------------------------------------------------------- */
void FixBondCreate::post_integrate_respa(int ilevel, int iloop)
{
if (ilevel == nlevels_respa-1) post_integrate();
}
/* ---------------------------------------------------------------------- */
int FixBondCreate::pack_forward_comm(int n, int *list, double *buf,
int pbc_flag, int *pbc)
{
int i,j,k,m,ns;
m = 0;
if (commflag == 1) {
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = ubuf(bondcount[j]).d;
}
return m;
}
if (commflag == 2) {
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = ubuf(partner[j]).d;
buf[m++] = probability[j];
}
return m;
}
int **nspecial = atom->nspecial;
tagint **special = atom->special;
m = 0;
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = ubuf(finalpartner[j]).d;
ns = nspecial[j][0];
buf[m++] = ubuf(ns).d;
for (k = 0; k < ns; k++)
buf[m++] = ubuf(special[j][k]).d;
}
return m;
}
/* ---------------------------------------------------------------------- */
void FixBondCreate::unpack_forward_comm(int n, int first, double *buf)
{
int i,j,m,ns,last;
m = 0;
last = first + n;
if (commflag == 1) {
for (i = first; i < last; i++)
bondcount[i] = (int) ubuf(buf[m++]).i;
} else if (commflag == 2) {
for (i = first; i < last; i++) {
partner[i] = (tagint) ubuf(buf[m++]).i;
probability[i] = buf[m++];
}
} else {
int **nspecial = atom->nspecial;
tagint **special = atom->special;
m = 0;
last = first + n;
for (i = first; i < last; i++) {
finalpartner[i] = (tagint) ubuf(buf[m++]).i;
ns = (int) ubuf(buf[m++]).i;
nspecial[i][0] = ns;
for (j = 0; j < ns; j++)
special[i][j] = (tagint) ubuf(buf[m++]).i;
}
}
}
/* ---------------------------------------------------------------------- */
int FixBondCreate::pack_reverse_comm(int n, int first, double *buf)
{
int i,m,last;
m = 0;
last = first + n;
if (commflag == 1) {
for (i = first; i < last; i++)
buf[m++] = ubuf(bondcount[i]).d;
return m;
}
for (i = first; i < last; i++) {
buf[m++] = ubuf(partner[i]).d;
buf[m++] = distsq[i];
}
return m;
}
/* ---------------------------------------------------------------------- */
void FixBondCreate::unpack_reverse_comm(int n, int *list, double *buf)
{
int i,j,m;
m = 0;
if (commflag == 1) {
for (i = 0; i < n; i++) {
j = list[i];
bondcount[j] += (int) ubuf(buf[m++]).i;
}
} else {
for (i = 0; i < n; i++) {
j = list[i];
if (buf[m+1] < distsq[j]) {
partner[j] = (tagint) ubuf(buf[m++]).i;
distsq[j] = buf[m++];
} else m += 2;
}
}
}
/* ----------------------------------------------------------------------
allocate local atom-based arrays
------------------------------------------------------------------------- */
void FixBondCreate::grow_arrays(int nmax)
{
memory->grow(bondcount,nmax,"bond/create:bondcount");
}
/* ----------------------------------------------------------------------
copy values within local atom-based arrays
------------------------------------------------------------------------- */
void FixBondCreate::copy_arrays(int i, int j, int delflag)
{
bondcount[j] = bondcount[i];
}
/* ----------------------------------------------------------------------
pack values in local atom-based arrays for exchange with another proc
------------------------------------------------------------------------- */
int FixBondCreate::pack_exchange(int i, double *buf)
{
buf[0] = bondcount[i];
return 1;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based arrays from exchange with another proc
------------------------------------------------------------------------- */
int FixBondCreate::unpack_exchange(int nlocal, double *buf)
{
bondcount[nlocal] = static_cast<int> (buf[0]);
return 1;
}
/* ---------------------------------------------------------------------- */
double FixBondCreate::compute_vector(int n)
{
if (n == 0) return (double) createcount;
return (double) createcounttotal;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixBondCreate::memory_usage()
{
int nmax = atom->nmax;
double bytes = nmax * sizeof(int);
bytes = 2*nmax * sizeof(tagint);
bytes += nmax * sizeof(double);
return bytes;
}
/* ---------------------------------------------------------------------- */
void FixBondCreate::print_bb()
{
for (int i = 0; i < atom->nlocal; i++) {
printf("TAG " TAGINT_FORMAT ": %d nbonds: ",atom->tag[i],atom->num_bond[i]);
for (int j = 0; j < atom->num_bond[i]; j++) {
printf(" " TAGINT_FORMAT,atom->bond_atom[i][j]);
}
printf("\n");
printf("TAG " TAGINT_FORMAT ": %d nangles: ",atom->tag[i],atom->num_angle[i]);
for (int j = 0; j < atom->num_angle[i]; j++) {
printf(" " TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT ",",
atom->angle_atom1[i][j], atom->angle_atom2[i][j],
atom->angle_atom3[i][j]);
}
printf("\n");
printf("TAG " TAGINT_FORMAT ": %d ndihedrals: ",atom->tag[i],atom->num_dihedral[i]);
for (int j = 0; j < atom->num_dihedral[i]; j++) {
printf(" " TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT " "
TAGINT_FORMAT ",", atom->dihedral_atom1[i][j],
atom->dihedral_atom2[i][j],atom->dihedral_atom3[i][j],
atom->dihedral_atom4[i][j]);
}
printf("\n");
printf("TAG " TAGINT_FORMAT ": %d nimpropers: ",atom->tag[i],atom->num_improper[i]);
for (int j = 0; j < atom->num_improper[i]; j++) {
printf(" " TAGINT_FORMAT " " TAGINT_FORMAT " " TAGINT_FORMAT " "
TAGINT_FORMAT ",",atom->improper_atom1[i][j],
atom->improper_atom2[i][j],atom->improper_atom3[i][j],
atom->improper_atom4[i][j]);
}
printf("\n");
printf("TAG " TAGINT_FORMAT ": %d %d %d nspecial: ",atom->tag[i],
atom->nspecial[i][0],atom->nspecial[i][1],atom->nspecial[i][2]);
for (int j = 0; j < atom->nspecial[i][2]; j++) {
printf(" " TAGINT_FORMAT,atom->special[i][j]);
}
printf("\n");
}
}
/* ---------------------------------------------------------------------- */
void FixBondCreate::print_copy(const char *str, tagint m,
int n1, int n2, int n3, int *v)
{
printf("%s " TAGINT_FORMAT ": %d %d %d nspecial: ",str,m,n1,n2,n3);
for (int j = 0; j < n3; j++) printf(" %d",v[j]);
printf("\n");
}
diff --git a/src/MC/fix_bond_swap.cpp b/src/MC/fix_bond_swap.cpp
index 31194ce12..6d4cf8118 100644
--- a/src/MC/fix_bond_swap.cpp
+++ b/src/MC/fix_bond_swap.cpp
@@ -1,737 +1,738 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "fix_bond_swap.h"
#include "atom.h"
#include "force.h"
#include "pair.h"
#include "bond.h"
#include "angle.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "group.h"
#include "comm.h"
#include "domain.h"
#include "modify.h"
#include "compute.h"
#include "random_mars.h"
#include "citeme.h"
#include "memory.h"
#include "error.h"
#include "update.h"
using namespace LAMMPS_NS;
using namespace FixConst;
static const char cite_fix_bond_swap[] =
"neighbor multi command:\n\n"
"@Article{Auhl03,\n"
" author = {R. Auhl, R. Everaers, G. S. Grest, K. Kremer, S. J. Plimpton},\n"
" title = {Equilibration of long chain polymer melts in computer simulations},\n"
" journal = {J.~Chem.~Phys.},\n"
" year = 2003,\n"
" volume = 119,\n"
" pages = {12718--12728}\n"
"}\n\n";
/* ---------------------------------------------------------------------- */
FixBondSwap::FixBondSwap(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ tflag(0), alist(NULL), id_temp(NULL)
{
if (lmp->citeme) lmp->citeme->add(cite_fix_bond_swap);
if (narg != 7) error->all(FLERR,"Illegal fix bond/swap command");
nevery = force->inumeric(FLERR,arg[3]);
if (nevery <= 0) error->all(FLERR,"Illegal fix bond/swap command");
force_reneighbor = 1;
next_reneighbor = -1;
vector_flag = 1;
size_vector = 2;
global_freq = 1;
extvector = 0;
fraction = force->numeric(FLERR,arg[4]);
double cutoff = force->numeric(FLERR,arg[5]);
cutsq = cutoff*cutoff;
// initialize Marsaglia RNG with processor-unique seed
int seed = force->inumeric(FLERR,arg[6]);
random = new RanMars(lmp,seed + comm->me);
// error check
if (atom->molecular != 1)
error->all(FLERR,"Cannot use fix bond/swap with non-molecular systems");
// create a new compute temp style
// id = fix-ID + temp, compute group = fix group
int n = strlen(id) + 6;
id_temp = new char[n];
strcpy(id_temp,id);
strcat(id_temp,"_temp");
char **newarg = new char*[3];
newarg[0] = id_temp;
newarg[1] = (char *) "all";
newarg[2] = (char *) "temp";
modify->add_compute(3,newarg);
delete [] newarg;
tflag = 1;
// initialize atom list
nmax = 0;
alist = NULL;
naccept = foursome = 0;
}
/* ---------------------------------------------------------------------- */
FixBondSwap::~FixBondSwap()
{
delete random;
// delete temperature if fix created it
if (tflag) modify->delete_compute(id_temp);
delete [] id_temp;
memory->destroy(alist);
}
/* ---------------------------------------------------------------------- */
int FixBondSwap::setmask()
{
int mask = 0;
mask |= POST_INTEGRATE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixBondSwap::init()
{
// require an atom style with molecule IDs
if (atom->molecule == NULL)
error->all(FLERR,
"Must use atom style with molecule IDs with fix bond/swap");
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Temperature ID for fix bond/swap does not exist");
temperature = modify->compute[icompute];
// pair and bonds must be defined
// no dihedral or improper potentials allowed
// special bonds must be 0 1 1
if (force->pair == NULL || force->bond == NULL)
error->all(FLERR,"Fix bond/swap requires pair and bond styles");
if (force->pair->single_enable == 0)
error->all(FLERR,"Pair style does not support fix bond/swap");
if (force->angle == NULL && atom->nangles > 0 && comm->me == 0)
error->warning(FLERR,"Fix bond/swap will ignore defined angles");
if (force->dihedral || force->improper)
error->all(FLERR,"Fix bond/swap cannot use dihedral or improper styles");
if (force->special_lj[1] != 0.0 || force->special_lj[2] != 1.0 ||
force->special_lj[3] != 1.0)
error->all(FLERR,"Fix bond/swap requires special_bonds = 0,1,1");
// need a half neighbor list, built every Nevery steps
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->fix = 1;
neighbor->requests[irequest]->occasional = 1;
// zero out stats
naccept = foursome = 0;
angleflag = 0;
if (force->angle) angleflag = 1;
}
/* ---------------------------------------------------------------------- */
void FixBondSwap::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ----------------------------------------------------------------------
look for and perform swaps
NOTE: used to do this every pre_neighbor(), but think that is a bug
b/c was doing it after exchange() and before neighbor->build()
which is when neigh lists are actually out-of-date or even bogus,
now do it based on user-specified Nevery, and trigger reneigh
if any swaps performed, like fix bond/create
------------------------------------------------------------------------- */
void FixBondSwap::post_integrate()
{
int i,j,ii,jj,m,inum,jnum;
int inext,iprev,ilast,jnext,jprev,jlast,ibond,iangle,jbond,jangle;
int ibondtype,jbondtype,iangletype,inextangletype,jangletype,jnextangletype;
tagint itag,inexttag,iprevtag,ilasttag,jtag,jnexttag,jprevtag,jlasttag;
tagint i1,i2,i3,j1,j2,j3;
int *ilist,*jlist,*numneigh,**firstneigh;
double delta,factor;
if (update->ntimestep % nevery) return;
// compute current temp for Boltzmann factor test
double t_current = temperature->compute_scalar();
// local ptrs to atom arrays
tagint *tag = atom->tag;
int *mask = atom->mask;
tagint *molecule = atom->molecule;
int *num_bond = atom->num_bond;
tagint **bond_atom = atom->bond_atom;
int **bond_type = atom->bond_type;
int *num_angle = atom->num_angle;
tagint **angle_atom1 = atom->angle_atom1;
tagint **angle_atom2 = atom->angle_atom2;
tagint **angle_atom3 = atom->angle_atom3;
int **angle_type = atom->angle_type;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
int newton_bond = force->newton_bond;
int nlocal = atom->nlocal;
type = atom->type;
x = atom->x;
neighbor->build_one(list,1);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// randomize list of my owned atoms that are in fix group
// grow atom list if necessary
if (atom->nmax > nmax) {
memory->destroy(alist);
nmax = atom->nmax;
memory->create(alist,nmax,"bondswap:alist");
}
int neligible = 0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (mask[i] & groupbit)
alist[neligible++] = i;
}
int tmp;
for (i = 0; i < neligible; i++) {
j = static_cast<int> (random->uniform() * neligible);
tmp = alist[i];
alist[i] = alist[j];
alist[j] = tmp;
}
// examine ntest of my eligible atoms for potential swaps
// atom i is randomly selected via atom list
// look at all j neighbors of atom i
// atom j must be on-processor (j < nlocal)
// atom j must be in fix group
// i and j must be same distance from chain end (mol[i] = mol[j])
// NOTE: must use extra parens in if test on mask[j] & groupbit
int ntest = static_cast<int> (fraction * neligible);
int accept = 0;
for (int itest = 0; itest < ntest; itest++) {
i = alist[itest];
jlist = firstneigh[i];
jnum = numneigh[i];
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
if (j >= nlocal) continue;
if ((mask[j] & groupbit) == 0) continue;
if (molecule[i] != molecule[j]) continue;
// look at all bond partners of atoms i and j
// use num_bond for this, not special list, so also find bondtypes
// inext,jnext = bonded atoms
// inext,jnext must be on-processor (inext,jnext < nlocal)
// inext,jnext must be same dist from chain end (mol[inext] = mol[jnext])
// since swaps may occur between two ends of a single chain, insure
// the 4 atoms are unique (no duplicates): inext != jnext, inext != j
// all 4 old and new bonds must have length < cutoff
for (ibond = 0; ibond < num_bond[i]; ibond++) {
inext = atom->map(bond_atom[i][ibond]);
if (inext >= nlocal || inext < 0) continue;
ibondtype = bond_type[i][ibond];
for (jbond = 0; jbond < num_bond[j]; jbond++) {
jnext = atom->map(bond_atom[j][jbond]);
if (jnext >= nlocal || jnext < 0) continue;
jbondtype = bond_type[j][jbond];
if (molecule[inext] != molecule[jnext]) continue;
if (inext == jnext || inext == j) continue;
if (dist_rsq(i,inext) >= cutsq) continue;
if (dist_rsq(j,jnext) >= cutsq) continue;
if (dist_rsq(i,jnext) >= cutsq) continue;
if (dist_rsq(j,inext) >= cutsq) continue;
// if angles are enabled:
// find other atoms i,inext,j,jnext are in angles with
// and angletypes: i/j angletype, i/j nextangletype
// use num_angle for this, not special list, so also find angletypes
// 4 atoms consecutively along 1st chain: iprev,i,inext,ilast
// 4 atoms consecutively along 2nd chain: jprev,j,jnext,jlast
// prev or last atom can be non-existent at end of chain
// set prev/last = -1 in this case
// if newton bond = 0, then angles are stored by all 4 atoms
// so require that iprev,ilast,jprev,jlast be owned by this proc
// so all copies of angles can be updated if a swap takes place
if (angleflag) {
itag = tag[i];
inexttag = tag[inext];
jtag = tag[j];
jnexttag = tag[jnext];
iprev = -1;
for (iangle = 0; iangle < num_angle[i]; iangle++) {
i1 = angle_atom1[i][iangle];
i2 = angle_atom2[i][iangle];
i3 = angle_atom3[i][iangle];
if (i2 == itag && i3 == inexttag) iprev = atom->map(i1);
else if (i1 == inexttag && i2 == itag) iprev = atom->map(i3);
if (iprev >= 0) {
iangletype = angle_type[i][iangle];
break;
}
}
if (!newton_bond && iprev >= nlocal) continue;
ilast = -1;
for (iangle = 0; iangle < num_angle[inext]; iangle++) {
i1 = angle_atom1[inext][iangle];
i2 = angle_atom2[inext][iangle];
i3 = angle_atom3[inext][iangle];
if (i1 == itag && i2 == inexttag) ilast = atom->map(i3);
else if (i2 == inexttag && i3 == itag) ilast = atom->map(i1);
if (ilast >= 0) {
inextangletype = angle_type[inext][iangle];
break;
}
}
if (!newton_bond && ilast >= nlocal) continue;
jprev = -1;
for (jangle = 0; jangle < num_angle[j]; jangle++) {
j1 = angle_atom1[j][jangle];
j2 = angle_atom2[j][jangle];
j3 = angle_atom3[j][jangle];
if (j2 == jtag && j3 == jnexttag) jprev = atom->map(j1);
else if (j1 == jnexttag && j2 == jtag) jprev = atom->map(j3);
if (jprev >= 0) {
jangletype = angle_type[j][jangle];
break;
}
}
if (!newton_bond && jprev >= nlocal) continue;
jlast = -1;
for (jangle = 0; jangle < num_angle[jnext]; jangle++) {
j1 = angle_atom1[jnext][jangle];
j2 = angle_atom2[jnext][jangle];
j3 = angle_atom3[jnext][jangle];
if (j1 == jtag && j2 == jnexttag) jlast = atom->map(j3);
else if (j2 == jnexttag && j3 == jtag) jlast = atom->map(j1);
if (jlast >= 0) {
jnextangletype = angle_type[jnext][jangle];
break;
}
}
if (!newton_bond && jlast >= nlocal) continue;
}
// valid foursome found between 2 chains:
// chains = iprev-i-inext-ilast and jprev-j-jnext-jlast
// prev or last values are -1 if do not exist due to end of chain
// OK to call angle_eng with -1 atom, since just return 0.0
// current energy of foursome =
// E_nb(i,j) + E_nb(i,jnext) + E_nb(inext,j) + E_nb(inext,jnext) +
// E_bond(i,inext) + E_bond(j,jnext) +
// E_angle(iprev,i,inext) + E_angle(i,inext,ilast) +
// E_angle(jprev,j,jnext) + E_angle(j,jnext,jlast)
// new energy of foursome with swapped bonds =
// E_nb(i,j) + E_nb(i,inext) + E_nb(j,jnext) + E_nb(inext,jnext) +
// E_bond(i,jnext) + E_bond(j,inext) +
// E_angle(iprev,i,jnext) + E_angle(i,jnext,jlast) +
// E_angle(jprev,j,inext) + E_angle(j,inext,ilast)
// energy delta = add/subtract differing terms between 2 formulas
foursome++;
delta = pair_eng(i,inext) + pair_eng(j,jnext) -
pair_eng(i,jnext) - pair_eng(inext,j);
delta += bond_eng(ibondtype,i,jnext) + bond_eng(jbondtype,j,inext) -
bond_eng(ibondtype,i,inext) - bond_eng(jbondtype,j,jnext);
if (angleflag)
delta += angle_eng(iangletype,iprev,i,jnext) +
angle_eng(jnextangletype,i,jnext,jlast) +
angle_eng(jangletype,jprev,j,inext) +
angle_eng(inextangletype,j,inext,ilast) -
angle_eng(iangletype,iprev,i,inext) -
angle_eng(inextangletype,i,inext,ilast) -
angle_eng(jangletype,jprev,j,jnext) -
angle_eng(jnextangletype,j,jnext,jlast);
// if delta <= 0, accept swap
// if delta > 0, compute Boltzmann factor with current temperature
// only accept if greater than random value
// whether accept or not, exit test loop
if (delta < 0.0) accept = 1;
else {
factor = exp(-delta/force->boltz/t_current);
if (random->uniform() < factor) accept = 1;
}
goto done;
}
}
}
}
done:
// trigger immediate reneighboring if any swaps occurred
int accept_any;
MPI_Allreduce(&accept,&accept_any,1,MPI_INT,MPI_SUM,world);
if (accept_any) next_reneighbor = update->ntimestep;
if (!accept) return;
naccept++;
// change bond partners of affected atoms
// on atom i: bond i-inext changes to i-jnext
// on atom j: bond j-jnext changes to j-inext
// on atom inext: bond inext-i changes to inext-j
// on atom jnext: bond jnext-j changes to jnext-i
for (ibond = 0; ibond < num_bond[i]; ibond++)
if (bond_atom[i][ibond] == tag[inext]) bond_atom[i][ibond] = tag[jnext];
for (jbond = 0; jbond < num_bond[j]; jbond++)
if (bond_atom[j][jbond] == tag[jnext]) bond_atom[j][jbond] = tag[inext];
for (ibond = 0; ibond < num_bond[inext]; ibond++)
if (bond_atom[inext][ibond] == tag[i]) bond_atom[inext][ibond] = tag[j];
for (jbond = 0; jbond < num_bond[jnext]; jbond++)
if (bond_atom[jnext][jbond] == tag[j]) bond_atom[jnext][jbond] = tag[i];
// set global tags of 4 atoms in bonds
itag = tag[i];
inexttag = tag[inext];
jtag = tag[j];
jnexttag = tag[jnext];
// change 1st special neighbors of affected atoms: i,j,inext,jnext
// don't need to change 2nd/3rd special neighbors for any atom
// since special bonds = 0 1 1 means they are never used
for (m = 0; m < nspecial[i][0]; m++)
if (special[i][m] == inexttag) special[i][m] = jnexttag;
for (m = 0; m < nspecial[j][0]; m++)
if (special[j][m] == jnexttag) special[j][m] = inexttag;
for (m = 0; m < nspecial[inext][0]; m++)
if (special[inext][m] == itag) special[inext][m] = jtag;
for (m = 0; m < nspecial[jnext][0]; m++)
if (special[jnext][m] == jtag) special[jnext][m] = itag;
// done if no angles
if (!angleflag) return;
// set global tags of 4 additional atoms in angles, 0 if no angle
if (iprev >= 0) iprevtag = tag[iprev];
else iprevtag = 0;
if (ilast >= 0) ilasttag = tag[ilast];
else ilasttag = 0;
if (jprev >= 0) jprevtag = tag[jprev];
else jprevtag = 0;
if (jlast >= 0) jlasttag = tag[jlast];
else jlasttag = 0;
// change angle partners of affected atoms
// must check if each angle is stored as a-b-c or c-b-a
// on atom i:
// angle iprev-i-inext changes to iprev-i-jnext
// angle i-inext-ilast changes to i-jnext-jlast
// on atom j:
// angle jprev-j-jnext changes to jprev-j-inext
// angle j-jnext-jlast changes to j-inext-ilast
// on atom inext:
// angle iprev-i-inext changes to jprev-j-inext
// angle i-inext-ilast changes to j-inext-ilast
// on atom jnext:
// angle jprev-j-jnext changes to iprev-i-jnext
// angle j-jnext-jlast changes to i-jnext-jlast
for (iangle = 0; iangle < num_angle[i]; iangle++) {
i1 = angle_atom1[i][iangle];
i2 = angle_atom2[i][iangle];
i3 = angle_atom3[i][iangle];
if (i1 == iprevtag && i2 == itag && i3 == inexttag)
angle_atom3[i][iangle] = jnexttag;
else if (i1 == inexttag && i2 == itag && i3 == iprevtag)
angle_atom1[i][iangle] = jnexttag;
else if (i1 == itag && i2 == inexttag && i3 == ilasttag) {
angle_atom2[i][iangle] = jnexttag;
angle_atom3[i][iangle] = jlasttag;
} else if (i1 == ilasttag && i2 == inexttag && i3 == itag) {
angle_atom1[i][iangle] = jlasttag;
angle_atom2[i][iangle] = jnexttag;
}
}
for (jangle = 0; jangle < num_angle[j]; jangle++) {
j1 = angle_atom1[j][jangle];
j2 = angle_atom2[j][jangle];
j3 = angle_atom3[j][jangle];
if (j1 == jprevtag && j2 == jtag && j3 == jnexttag)
angle_atom3[j][jangle] = inexttag;
else if (j1 == jnexttag && j2 == jtag && j3 == jprevtag)
angle_atom1[j][jangle] = inexttag;
else if (j1 == jtag && j2 == jnexttag && j3 == jlasttag) {
angle_atom2[j][jangle] = inexttag;
angle_atom3[j][jangle] = ilasttag;
} else if (j1 == jlasttag && j2 == jnexttag && j3 == jtag) {
angle_atom1[j][jangle] = ilasttag;
angle_atom2[j][jangle] = inexttag;
}
}
for (iangle = 0; iangle < num_angle[inext]; iangle++) {
i1 = angle_atom1[inext][iangle];
i2 = angle_atom2[inext][iangle];
i3 = angle_atom3[inext][iangle];
if (i1 == iprevtag && i2 == itag && i3 == inexttag) {
angle_atom1[inext][iangle] = jprevtag;
angle_atom2[inext][iangle] = jtag;
} else if (i1 == inexttag && i2 == itag && i3 == iprevtag) {
angle_atom2[inext][iangle] = jtag;
angle_atom3[inext][iangle] = jprevtag;
} else if (i1 == itag && i2 == inexttag && i3 == ilasttag)
angle_atom1[inext][iangle] = jtag;
else if (i1 == ilasttag && i2 == inexttag && i3 == itag)
angle_atom3[inext][iangle] = jtag;
}
for (jangle = 0; jangle < num_angle[jnext]; jangle++) {
j1 = angle_atom1[jnext][jangle];
j2 = angle_atom2[jnext][jangle];
j3 = angle_atom3[jnext][jangle];
if (j1 == jprevtag && j2 == jtag && j3 == jnexttag) {
angle_atom1[jnext][jangle] = iprevtag;
angle_atom2[jnext][jangle] = itag;
} else if (j1 == jnexttag && j2 == jtag && j3 == jprevtag) {
angle_atom2[jnext][jangle] = itag;
angle_atom3[jnext][jangle] = iprevtag;
} else if (j1 == jtag && j2 == jnexttag && j3 == jlasttag)
angle_atom1[jnext][jangle] = itag;
else if (j1 == jlasttag && j2 == jnexttag && j3 == jtag)
angle_atom3[jnext][jangle] = itag;
}
// done if newton bond set
if (newton_bond) return;
// change angles stored by iprev,ilast,jprev,jlast
// on atom iprev: angle iprev-i-inext changes to iprev-i-jnext
// on atom jprev: angle jprev-j-jnext changes to jprev-j-inext
// on atom ilast: angle i-inext-ilast changes to j-inext-ilast
// on atom jlast: angle j-jnext-jlast changes to i-jnext-jlast
for (iangle = 0; iangle < num_angle[iprev]; iangle++) {
i1 = angle_atom1[iprev][iangle];
i2 = angle_atom2[iprev][iangle];
i3 = angle_atom3[iprev][iangle];
if (i1 == iprevtag && i2 == itag && i3 == inexttag)
angle_atom3[iprev][iangle] = jnexttag;
else if (i1 == inexttag && i2 == itag && i3 == iprevtag)
angle_atom1[iprev][iangle] = jnexttag;
}
for (jangle = 0; jangle < num_angle[jprev]; jangle++) {
j1 = angle_atom1[jprev][jangle];
j2 = angle_atom2[jprev][jangle];
j3 = angle_atom3[jprev][jangle];
if (j1 == jprevtag && j2 == jtag && j3 == jnexttag)
angle_atom3[jprev][jangle] = inexttag;
else if (j1 == jnexttag && j2 == jtag && j3 == jprevtag)
angle_atom1[jprev][jangle] = inexttag;
}
for (iangle = 0; iangle < num_angle[ilast]; iangle++) {
i1 = angle_atom1[ilast][iangle];
i2 = angle_atom2[ilast][iangle];
i3 = angle_atom3[ilast][iangle];
if (i1 == itag && i2 == inexttag && i3 == ilasttag)
angle_atom1[ilast][iangle] = jtag;
else if (i1 == ilasttag && i2 == inexttag && i3 == itag)
angle_atom3[ilast][iangle] = jtag;
}
for (jangle = 0; jangle < num_angle[jlast]; jangle++) {
j1 = angle_atom1[jlast][jangle];
j2 = angle_atom2[jlast][jangle];
j3 = angle_atom3[jlast][jangle];
if (j1 == jtag && j2 == jnexttag && j3 == jlasttag)
angle_atom1[jlast][jangle] = itag;
else if (j1 == jlasttag && j2 == jnexttag && j3 == jtag)
angle_atom3[jlast][jangle] = itag;
}
}
/* ---------------------------------------------------------------------- */
int FixBondSwap::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"temp") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (tflag) {
modify->delete_compute(id_temp);
tflag = 0;
}
delete [] id_temp;
int n = strlen(arg[1]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[1]);
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Could not find fix_modify temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,"Fix_modify temperature ID does not "
"compute temperature");
if (temperature->igroup != igroup && comm->me == 0)
error->warning(FLERR,"Group for fix_modify temp != fix group");
return 2;
}
return 0;
}
/* ----------------------------------------------------------------------
compute squared distance between atoms I,J
must use minimum_image since J was found thru atom->map()
------------------------------------------------------------------------- */
double FixBondSwap::dist_rsq(int i, int j)
{
double delx = x[i][0] - x[j][0];
double dely = x[i][1] - x[j][1];
double delz = x[i][2] - x[j][2];
domain->minimum_image(delx,dely,delz);
return (delx*delx + dely*dely + delz*delz);
}
/* ----------------------------------------------------------------------
return pairwise interaction energy between atoms I,J
will always be full non-bond interaction, so factors = 1 in single() call
------------------------------------------------------------------------- */
double FixBondSwap::pair_eng(int i, int j)
{
double tmp;
double rsq = dist_rsq(i,j);
return force->pair->single(i,j,type[i],type[j],rsq,1.0,1.0,tmp);
}
/* ---------------------------------------------------------------------- */
double FixBondSwap::bond_eng(int btype, int i, int j)
{
double tmp;
double rsq = dist_rsq(i,j);
return force->bond->single(btype,rsq,i,j,tmp);
}
/* ---------------------------------------------------------------------- */
double FixBondSwap::angle_eng(int atype, int i, int j, int k)
{
// test for non-existent angle at end of chain
if (i == -1 || k == -1) return 0.0;
return force->angle->single(atype,i,j,k);
}
/* ----------------------------------------------------------------------
return bond swapping stats
n = 1 is # of swaps
n = 2 is # of attempted swaps
------------------------------------------------------------------------- */
double FixBondSwap::compute_vector(int n)
{
double one,all;
if (n == 0) one = naccept;
else one = foursome;
MPI_Allreduce(&one,&all,1,MPI_DOUBLE,MPI_SUM,world);
return all;
}
/* ----------------------------------------------------------------------
memory usage of alist
------------------------------------------------------------------------- */
double FixBondSwap::memory_usage()
{
double bytes = nmax * sizeof(int);
return bytes;
}
diff --git a/src/MC/fix_gcmc.cpp b/src/MC/fix_gcmc.cpp
index aea029e5b..ca93d7f99 100644
--- a/src/MC/fix_gcmc.cpp
+++ b/src/MC/fix_gcmc.cpp
@@ -1,2333 +1,2336 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Paul Crozier, Aidan Thompson (SNL)
------------------------------------------------------------------------- */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "fix_gcmc.h"
#include "atom.h"
#include "atom_vec.h"
#include "atom_vec_hybrid.h"
#include "molecule.h"
#include "update.h"
#include "modify.h"
#include "fix.h"
#include "comm.h"
#include "compute.h"
#include "group.h"
#include "domain.h"
#include "region.h"
#include "random_park.h"
#include "force.h"
#include "pair.h"
#include "bond.h"
#include "angle.h"
#include "dihedral.h"
#include "improper.h"
#include "kspace.h"
#include "math_extra.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
#include "thermo.h"
#include "output.h"
#include "neighbor.h"
#include <iostream>
using namespace std;
using namespace LAMMPS_NS;
using namespace FixConst;
using namespace MathConst;
enum{ATOM,MOLECULE};
/* ---------------------------------------------------------------------- */
FixGCMC::FixGCMC(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ idregion(NULL), full_flag(0), ngroups(0), groupstrings(NULL), ngrouptypes(0), grouptypestrings(NULL),
+ grouptypebits(NULL), grouptypes(NULL), local_gas_list(NULL), atom_coord(NULL), random_equal(NULL), random_unequal(NULL),
+ coords(NULL), imageflags(NULL), idshake(NULL)
{
if (narg < 11) error->all(FLERR,"Illegal fix gcmc command");
if (atom->molecular == 2)
error->all(FLERR,"Fix gcmc does not (yet) work with atom_style template");
dynamic_group_allow = 1;
vector_flag = 1;
size_vector = 8;
global_freq = 1;
extvector = 0;
restart_global = 1;
time_depend = 1;
// required args
nevery = force->inumeric(FLERR,arg[3]);
nexchanges = force->inumeric(FLERR,arg[4]);
nmcmoves = force->inumeric(FLERR,arg[5]);
ngcmc_type = force->inumeric(FLERR,arg[6]);
seed = force->inumeric(FLERR,arg[7]);
reservoir_temperature = force->numeric(FLERR,arg[8]);
chemical_potential = force->numeric(FLERR,arg[9]);
displace = force->numeric(FLERR,arg[10]);
if (nevery <= 0) error->all(FLERR,"Illegal fix gcmc command");
if (nexchanges < 0) error->all(FLERR,"Illegal fix gcmc command");
if (nmcmoves < 0) error->all(FLERR,"Illegal fix gcmc command");
if (seed <= 0) error->all(FLERR,"Illegal fix gcmc command");
if (reservoir_temperature < 0.0)
error->all(FLERR,"Illegal fix gcmc command");
if (displace < 0.0) error->all(FLERR,"Illegal fix gcmc command");
// read options from end of input line
options(narg-11,&arg[11]);
// random number generator, same for all procs
random_equal = new RanPark(lmp,seed);
// random number generator, not the same for all procs
random_unequal = new RanPark(lmp,seed);
// error checks on region and its extent being inside simulation box
region_xlo = region_xhi = region_ylo = region_yhi =
region_zlo = region_zhi = 0.0;
if (regionflag) {
if (domain->regions[iregion]->bboxflag == 0)
error->all(FLERR,"Fix gcmc region does not support a bounding box");
if (domain->regions[iregion]->dynamic_check())
error->all(FLERR,"Fix gcmc region cannot be dynamic");
region_xlo = domain->regions[iregion]->extent_xlo;
region_xhi = domain->regions[iregion]->extent_xhi;
region_ylo = domain->regions[iregion]->extent_ylo;
region_yhi = domain->regions[iregion]->extent_yhi;
region_zlo = domain->regions[iregion]->extent_zlo;
region_zhi = domain->regions[iregion]->extent_zhi;
if (region_xlo < domain->boxlo[0] || region_xhi > domain->boxhi[0] ||
region_ylo < domain->boxlo[1] || region_yhi > domain->boxhi[1] ||
region_zlo < domain->boxlo[2] || region_zhi > domain->boxhi[2])
error->all(FLERR,"Fix gcmc region extends outside simulation box");
// estimate region volume using MC trials
double coord[3];
int inside = 0;
int attempts = 10000000;
for (int i = 0; i < attempts; i++) {
coord[0] = region_xlo + random_equal->uniform() * (region_xhi-region_xlo);
coord[1] = region_ylo + random_equal->uniform() * (region_yhi-region_ylo);
coord[2] = region_zlo + random_equal->uniform() * (region_zhi-region_zlo);
if (domain->regions[iregion]->match(coord[0],coord[1],coord[2]) != 0)
inside++;
}
double max_region_volume = (region_xhi - region_xlo)*
(region_yhi - region_ylo)*(region_zhi - region_zlo);
region_volume = max_region_volume*static_cast<double> (inside)/
static_cast<double> (attempts);
}
// error check and further setup for mode = MOLECULE
if (mode == MOLECULE) {
if (onemols[imol]->xflag == 0)
error->all(FLERR,"Fix gcmc molecule must have coordinates");
if (onemols[imol]->typeflag == 0)
error->all(FLERR,"Fix gcmc molecule must have atom types");
if (ngcmc_type != 0)
error->all(FLERR,"Atom type must be zero in fix gcmc mol command");
if (onemols[imol]->qflag == 1 && atom->q == NULL)
error->all(FLERR,"Fix gcmc molecule has charges, but atom style does not");
if (atom->molecular == 2 && onemols != atom->avec->onemols)
error->all(FLERR,"Fix gcmc molecule template ID must be same "
"as atom_style template ID");
onemols[imol]->check_attributes(0);
}
if (charge_flag && atom->q == NULL)
error->all(FLERR,"Fix gcmc atom has charge, but atom style does not");
if (shakeflag && mode == ATOM)
error->all(FLERR,"Cannot use fix gcmc shake and not molecule");
// setup of coords and imageflags array
if (mode == ATOM) natoms_per_molecule = 1;
else natoms_per_molecule = onemols[imol]->natoms;
memory->create(coords,natoms_per_molecule,3,"gcmc:coords");
memory->create(imageflags,natoms_per_molecule,"gcmc:imageflags");
memory->create(atom_coord,natoms_per_molecule,3,"gcmc:atom_coord");
// compute the number of MC cycles that occur nevery timesteps
ncycles = nexchanges + nmcmoves;
// set up reneighboring
force_reneighbor = 1;
next_reneighbor = update->ntimestep + 1;
// zero out counters
ntranslation_attempts = 0.0;
ntranslation_successes = 0.0;
nrotation_attempts = 0.0;
nrotation_successes = 0.0;
ndeletion_attempts = 0.0;
ndeletion_successes = 0.0;
ninsertion_attempts = 0.0;
ninsertion_successes = 0.0;
gcmc_nmax = 0;
local_gas_list = NULL;
}
/* ----------------------------------------------------------------------
parse optional parameters at end of input line
------------------------------------------------------------------------- */
void FixGCMC::options(int narg, char **arg)
{
if (narg < 0) error->all(FLERR,"Illegal fix gcmc command");
// defaults
mode = ATOM;
max_rotation_angle = 10*MY_PI/180;
regionflag = 0;
iregion = -1;
region_volume = 0;
max_region_attempts = 1000;
molecule_group = 0;
molecule_group_bit = 0;
molecule_group_inversebit = 0;
exclusion_group = 0;
exclusion_group_bit = 0;
pressure_flag = false;
pressure = 0.0;
fugacity_coeff = 1.0;
shakeflag = 0;
charge = 0.0;
charge_flag = false;
full_flag = false;
idshake = NULL;
ngroups = 0;
int ngroupsmax = 0;
groupstrings = NULL;
ngrouptypes = 0;
int ngrouptypesmax = 0;
grouptypestrings = NULL;
grouptypes = NULL;
grouptypebits = NULL;
energy_intra = 0.0;
tfac_insert = 1.0;
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"mol") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix gcmc command");
imol = atom->find_molecule(arg[iarg+1]);
if (imol == -1)
error->all(FLERR,"Molecule template ID for fix gcmc does not exist");
if (atom->molecules[imol]->nset > 1 && comm->me == 0)
error->warning(FLERR,"Molecule template for "
"fix gcmc has multiple molecules");
mode = MOLECULE;
onemols = atom->molecules;
nmol = onemols[imol]->nset;
iarg += 2;
} else if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix gcmc command");
iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix gcmc does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
regionflag = 1;
iarg += 2;
} else if (strcmp(arg[iarg],"maxangle") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix gcmc command");
max_rotation_angle = force->numeric(FLERR,arg[iarg+1]);
max_rotation_angle *= MY_PI/180;
iarg += 2;
} else if (strcmp(arg[iarg],"pressure") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix gcmc command");
pressure = force->numeric(FLERR,arg[iarg+1]);
pressure_flag = true;
iarg += 2;
} else if (strcmp(arg[iarg],"fugacity_coeff") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix gcmc command");
fugacity_coeff = force->numeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"charge") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix gcmc command");
charge = force->numeric(FLERR,arg[iarg+1]);
charge_flag = true;
iarg += 2;
} else if (strcmp(arg[iarg],"shake") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix gcmc command");
int n = strlen(arg[iarg+1]) + 1;
delete [] idshake;
idshake = new char[n];
strcpy(idshake,arg[iarg+1]);
shakeflag = 1;
iarg += 2;
} else if (strcmp(arg[iarg],"full_energy") == 0) {
full_flag = true;
iarg += 1;
} else if (strcmp(arg[iarg],"group") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix gcmc command");
if (ngroups >= ngroupsmax) {
ngroupsmax = ngroups+1;
groupstrings = (char **)
memory->srealloc(groupstrings,
ngroupsmax*sizeof(char *),
"fix_gcmc:groupstrings");
}
int n = strlen(arg[iarg+1]) + 1;
groupstrings[ngroups] = new char[n];
strcpy(groupstrings[ngroups],arg[iarg+1]);
ngroups++;
iarg += 2;
} else if (strcmp(arg[iarg],"grouptype") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix gcmc command");
if (ngrouptypes >= ngrouptypesmax) {
ngrouptypesmax = ngrouptypes+1;
grouptypes = (int*) memory->srealloc(grouptypes,ngrouptypesmax*sizeof(int),
"fix_gcmc:grouptypes");
grouptypestrings = (char**)
memory->srealloc(grouptypestrings,
ngrouptypesmax*sizeof(char *),
"fix_gcmc:grouptypestrings");
}
grouptypes[ngrouptypes] = atoi(arg[iarg+1]);
int n = strlen(arg[iarg+2]) + 1;
grouptypestrings[ngrouptypes] = new char[n];
strcpy(grouptypestrings[ngrouptypes],arg[iarg+2]);
ngrouptypes++;
iarg += 3;
} else if (strcmp(arg[iarg],"intra_energy") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix gcmc command");
energy_intra = force->numeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"tfac_insert") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix gcmc command");
tfac_insert = force->numeric(FLERR,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix gcmc command");
}
}
/* ---------------------------------------------------------------------- */
FixGCMC::~FixGCMC()
{
if (regionflag) delete [] idregion;
delete random_equal;
delete random_unequal;
memory->destroy(local_gas_list);
memory->destroy(atom_coord);
memory->destroy(coords);
memory->destroy(imageflags);
delete [] idshake;
if (ngroups > 0) {
for (int igroup = 0; igroup < ngroups; igroup++)
delete [] groupstrings[igroup];
memory->sfree(groupstrings);
}
if (ngrouptypes > 0) {
memory->destroy(grouptypes);
memory->destroy(grouptypebits);
for (int igroup = 0; igroup < ngrouptypes; igroup++)
delete [] grouptypestrings[igroup];
memory->sfree(grouptypestrings);
}
if (full_flag && group) {
int igroupall = group->find("all");
neighbor->exclusion_group_group_delete(exclusion_group,igroupall);
}
}
/* ---------------------------------------------------------------------- */
int FixGCMC::setmask()
{
int mask = 0;
mask |= PRE_EXCHANGE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixGCMC::init()
{
triclinic = domain->triclinic;
// decide whether to switch to the full_energy option
if (!full_flag) {
if ((force->kspace) ||
(force->pair == NULL) ||
(force->pair->single_enable == 0) ||
(force->pair_match("hybrid",0)) ||
(force->pair_match("eam",0))
) {
full_flag = true;
if (comm->me == 0)
error->warning(FLERR,"Fix gcmc using full_energy option");
}
}
if (full_flag) {
char *id_pe = (char *) "thermo_pe";
int ipe = modify->find_compute(id_pe);
c_pe = modify->compute[ipe];
}
int *type = atom->type;
if (mode == ATOM) {
if (ngcmc_type <= 0 || ngcmc_type > atom->ntypes)
error->all(FLERR,"Invalid atom type in fix gcmc command");
}
// if mode == ATOM, warn if any deletable atom has a mol ID
if ((mode == ATOM) && atom->molecule_flag) {
tagint *molecule = atom->molecule;
int flag = 0;
for (int i = 0; i < atom->nlocal; i++)
if (type[i] == ngcmc_type)
if (molecule[i]) flag = 1;
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall && comm->me == 0)
error->all(FLERR,
"Fix gcmc cannot exchange individual atoms belonging to a molecule");
}
// if mode == MOLECULE, check for unset mol IDs
if (mode == MOLECULE) {
tagint *molecule = atom->molecule;
int *mask = atom->mask;
int flag = 0;
for (int i = 0; i < atom->nlocal; i++)
if (mask[i] == groupbit)
if (molecule[i] == 0) flag = 1;
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall && comm->me == 0)
error->all(FLERR,
"All mol IDs should be set for fix gcmc group atoms");
}
if (((mode == MOLECULE) && (atom->molecule_flag == 0)) ||
((mode == MOLECULE) && (!atom->tag_enable || !atom->map_style)))
error->all(FLERR,
"Fix gcmc molecule command requires that "
"atoms have molecule attributes");
// if shakeflag defined, check for SHAKE fix
// its molecule template must be same as this one
fixshake = NULL;
if (shakeflag) {
int ifix = modify->find_fix(idshake);
if (ifix < 0) error->all(FLERR,"Fix gcmc shake fix does not exist");
fixshake = modify->fix[ifix];
int tmp;
if (onemols != (Molecule **) fixshake->extract("onemol",tmp))
error->all(FLERR,"Fix gcmc and fix shake not using "
"same molecule template ID");
}
// check for fix rigid
for (int irigid = 0; irigid < modify->nfix; irigid++) {
if (strncmp(modify->fix[irigid]->style,"rigid",5) == 0)
error->all(FLERR,"Fix gcmc can not currently be used with any rigid fix");
}
if (domain->dimension == 2)
error->all(FLERR,"Cannot use fix gcmc in a 2d simulation");
// create a new group for interaction exclusions
// used for attempted atom or molecule deletions
// skip if already exists from previous init()
if (full_flag && !exclusion_group_bit) {
char **group_arg = new char*[4];
// create unique group name for atoms to be excluded
int len = strlen(id) + 30;
group_arg[0] = new char[len];
sprintf(group_arg[0],"FixGCMC:gcmc_exclusion_group:%s",id);
group_arg[1] = (char *) "subtract";
group_arg[2] = (char *) "all";
group_arg[3] = (char *) "all";
group->assign(4,group_arg);
exclusion_group = group->find(group_arg[0]);
if (exclusion_group == -1)
error->all(FLERR,"Could not find fix gcmc exclusion group ID");
exclusion_group_bit = group->bitmask[exclusion_group];
// neighbor list exclusion setup
// turn off interactions between group all and the exclusion group
int narg = 4;
char **arg = new char*[narg];;
arg[0] = (char *) "exclude";
arg[1] = (char *) "group";
arg[2] = group_arg[0];
arg[3] = (char *) "all";
neighbor->modify_params(narg,arg);
delete [] group_arg[0];
delete [] group_arg;
delete [] arg;
}
// create a new group for temporary use with selected molecules
if (mode == MOLECULE) {
char **group_arg = new char*[3];
// create unique group name for atoms to be rotated
int len = strlen(id) + 30;
group_arg[0] = new char[len];
sprintf(group_arg[0],"FixGCMC:rotation_gas_atoms:%s",id);
group_arg[1] = (char *) "molecule";
char digits[12];
sprintf(digits,"%d",-1);
group_arg[2] = digits;
group->assign(3,group_arg);
molecule_group = group->find(group_arg[0]);
if (molecule_group == -1)
error->all(FLERR,"Could not find fix gcmc rotation group ID");
molecule_group_bit = group->bitmask[molecule_group];
molecule_group_inversebit = molecule_group_bit ^ ~0;
delete [] group_arg[0];
delete [] group_arg;
}
// get all of the needed molecule data if mode == MOLECULE,
// otherwise just get the gas mass
if (mode == MOLECULE) {
onemols[imol]->compute_mass();
onemols[imol]->compute_com();
gas_mass = onemols[imol]->masstotal;
for (int i = 0; i < onemols[imol]->natoms; i++) {
onemols[imol]->x[i][0] -= onemols[imol]->com[0];
onemols[imol]->x[i][1] -= onemols[imol]->com[1];
onemols[imol]->x[i][2] -= onemols[imol]->com[2];
}
} else gas_mass = atom->mass[ngcmc_type];
if (gas_mass <= 0.0)
error->all(FLERR,"Illegal fix gcmc gas mass <= 0");
// check that no deletable atoms are in atom->firstgroup
// deleting such an atom would not leave firstgroup atoms first
if (atom->firstgroup >= 0) {
int *mask = atom->mask;
int firstgroupbit = group->bitmask[atom->firstgroup];
int flag = 0;
for (int i = 0; i < atom->nlocal; i++)
if ((mask[i] == groupbit) && (mask[i] && firstgroupbit)) flag = 1;
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall)
error->all(FLERR,"Cannot do GCMC on atoms in atom_modify first group");
}
// compute beta, lambda, sigma, and the zz factor
beta = 1.0/(force->boltz*reservoir_temperature);
double lambda = sqrt(force->hplanck*force->hplanck/
(2.0*MY_PI*gas_mass*force->mvv2e*
force->boltz*reservoir_temperature));
sigma = sqrt(force->boltz*reservoir_temperature*tfac_insert/gas_mass/force->mvv2e);
zz = exp(beta*chemical_potential)/(pow(lambda,3.0));
if (pressure_flag) zz = pressure*fugacity_coeff*beta/force->nktv2p;
imagezero = ((imageint) IMGMAX << IMG2BITS) |
((imageint) IMGMAX << IMGBITS) | IMGMAX;
// construct group bitmask for all new atoms
// aggregated over all group keywords
groupbitall = 1 | groupbit;
for (int igroup = 0; igroup < ngroups; igroup++) {
int jgroup = group->find(groupstrings[igroup]);
if (jgroup == -1)
error->all(FLERR,"Could not find specified fix gcmc group ID");
groupbitall |= group->bitmask[jgroup];
}
// construct group type bitmasks
// not aggregated over all group keywords
if (ngrouptypes > 0) {
memory->create(grouptypebits,ngrouptypes,"fix_gcmc:grouptypebits");
for (int igroup = 0; igroup < ngrouptypes; igroup++) {
int jgroup = group->find(grouptypestrings[igroup]);
if (jgroup == -1)
error->all(FLERR,"Could not find specified fix gcmc group ID");
grouptypebits[igroup] = group->bitmask[jgroup];
}
}
}
/* ----------------------------------------------------------------------
attempt Monte Carlo translations, rotations, insertions, and deletions
done before exchange, borders, reneighbor
so that ghost atoms and neighbor lists will be correct
------------------------------------------------------------------------- */
void FixGCMC::pre_exchange()
{
// just return if should not be called on this timestep
if (next_reneighbor != update->ntimestep) return;
xlo = domain->boxlo[0];
xhi = domain->boxhi[0];
ylo = domain->boxlo[1];
yhi = domain->boxhi[1];
zlo = domain->boxlo[2];
zhi = domain->boxhi[2];
if (triclinic) {
sublo = domain->sublo_lamda;
subhi = domain->subhi_lamda;
} else {
sublo = domain->sublo;
subhi = domain->subhi;
}
if (regionflag) volume = region_volume;
else volume = domain->xprd * domain->yprd * domain->zprd;
if (triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
comm->exchange();
atom->nghost = 0;
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
update_gas_atoms_list();
if (full_flag) {
energy_stored = energy_full();
if (mode == MOLECULE) {
for (int i = 0; i < ncycles; i++) {
int random_int_fraction =
static_cast<int>(random_equal->uniform()*ncycles) + 1;
if (random_int_fraction <= nmcmoves) {
if (random_equal->uniform() < 0.5) attempt_molecule_translation_full();
else attempt_molecule_rotation_full();
} else {
if (random_equal->uniform() < 0.5) attempt_molecule_deletion_full();
else attempt_molecule_insertion_full();
}
}
} else {
for (int i = 0; i < ncycles; i++) {
int random_int_fraction =
static_cast<int>(random_equal->uniform()*ncycles) + 1;
if (random_int_fraction <= nmcmoves) {
attempt_atomic_translation_full();
} else {
if (random_equal->uniform() < 0.5) attempt_atomic_deletion_full();
else attempt_atomic_insertion_full();
}
}
}
if (triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
comm->exchange();
atom->nghost = 0;
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
} else {
if (mode == MOLECULE) {
for (int i = 0; i < ncycles; i++) {
int random_int_fraction =
static_cast<int>(random_equal->uniform()*ncycles) + 1;
if (random_int_fraction <= nmcmoves) {
if (random_equal->uniform() < 0.5) attempt_molecule_translation();
else attempt_molecule_rotation();
} else {
if (random_equal->uniform() < 0.5) attempt_molecule_deletion();
else attempt_molecule_insertion();
}
}
} else {
for (int i = 0; i < ncycles; i++) {
int random_int_fraction =
static_cast<int>(random_equal->uniform()*ncycles) + 1;
if (random_int_fraction <= nmcmoves) {
attempt_atomic_translation();
} else {
if (random_equal->uniform() < 0.5) attempt_atomic_deletion();
else attempt_atomic_insertion();
}
}
}
}
next_reneighbor = update->ntimestep + nevery;
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_atomic_translation()
{
ntranslation_attempts += 1.0;
if (ngas == 0) return;
int i = pick_random_gas_atom();
int success = 0;
if (i >= 0) {
double **x = atom->x;
double energy_before = energy(i,ngcmc_type,-1,x[i]);
double rsq = 1.1;
double rx,ry,rz;
rx = ry = rz = 0.0;
double coord[3];
while (rsq > 1.0) {
rx = 2*random_unequal->uniform() - 1.0;
ry = 2*random_unequal->uniform() - 1.0;
rz = 2*random_unequal->uniform() - 1.0;
rsq = rx*rx + ry*ry + rz*rz;
}
coord[0] = x[i][0] + displace*rx;
coord[1] = x[i][1] + displace*ry;
coord[2] = x[i][2] + displace*rz;
if (regionflag) {
while (domain->regions[iregion]->match(coord[0],coord[1],coord[2]) == 0) {
rsq = 1.1;
while (rsq > 1.0) {
rx = 2*random_unequal->uniform() - 1.0;
ry = 2*random_unequal->uniform() - 1.0;
rz = 2*random_unequal->uniform() - 1.0;
rsq = rx*rx + ry*ry + rz*rz;
}
coord[0] = x[i][0] + displace*rx;
coord[1] = x[i][1] + displace*ry;
coord[2] = x[i][2] + displace*rz;
}
}
if (!domain->inside_nonperiodic(coord))
error->one(FLERR,"Fix gcmc put atom outside box");
double energy_after = energy(i,ngcmc_type,-1,coord);
if (random_unequal->uniform() <
exp(beta*(energy_before - energy_after))) {
x[i][0] = coord[0];
x[i][1] = coord[1];
x[i][2] = coord[2];
success = 1;
}
}
int success_all = 0;
MPI_Allreduce(&success,&success_all,1,MPI_INT,MPI_MAX,world);
if (success_all) {
if (triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
comm->exchange();
atom->nghost = 0;
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
update_gas_atoms_list();
ntranslation_successes += 1.0;
}
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_atomic_deletion()
{
ndeletion_attempts += 1.0;
if (ngas == 0) return;
int i = pick_random_gas_atom();
int success = 0;
if (i >= 0) {
double deletion_energy = energy(i,ngcmc_type,-1,atom->x[i]);
if (random_unequal->uniform() <
ngas*exp(beta*deletion_energy)/(zz*volume)) {
atom->avec->copy(atom->nlocal-1,i,1);
atom->nlocal--;
success = 1;
}
}
int success_all = 0;
MPI_Allreduce(&success,&success_all,1,MPI_INT,MPI_MAX,world);
if (success_all) {
atom->natoms--;
if (atom->tag_enable) {
if (atom->map_style) atom->map_init();
}
atom->nghost = 0;
if (triclinic) domain->x2lamda(atom->nlocal);
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
update_gas_atoms_list();
ndeletion_successes += 1.0;
}
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_atomic_insertion()
{
double lamda[3];
ninsertion_attempts += 1.0;
// pick coordinates for insertion point
double coord[3];
if (regionflag) {
int region_attempt = 0;
coord[0] = region_xlo + random_equal->uniform() * (region_xhi-region_xlo);
coord[1] = region_ylo + random_equal->uniform() * (region_yhi-region_ylo);
coord[2] = region_zlo + random_equal->uniform() * (region_zhi-region_zlo);
while (domain->regions[iregion]->match(coord[0],coord[1],coord[2]) == 0) {
coord[0] = region_xlo + random_equal->uniform() * (region_xhi-region_xlo);
coord[1] = region_ylo + random_equal->uniform() * (region_yhi-region_ylo);
coord[2] = region_zlo + random_equal->uniform() * (region_zhi-region_zlo);
region_attempt++;
if (region_attempt >= max_region_attempts) return;
}
if (triclinic) domain->x2lamda(coord,lamda);
} else {
if (triclinic == 0) {
coord[0] = xlo + random_equal->uniform() * (xhi-xlo);
coord[1] = ylo + random_equal->uniform() * (yhi-ylo);
coord[2] = zlo + random_equal->uniform() * (zhi-zlo);
} else {
lamda[0] = random_equal->uniform();
lamda[1] = random_equal->uniform();
lamda[2] = random_equal->uniform();
// wasteful, but necessary
if (lamda[0] == 1.0) lamda[0] = 0.0;
if (lamda[1] == 1.0) lamda[1] = 0.0;
if (lamda[2] == 1.0) lamda[2] = 0.0;
domain->lamda2x(lamda,coord);
}
}
int proc_flag = 0;
if (triclinic == 0) {
domain->remap(coord);
if (!domain->inside(coord))
error->one(FLERR,"Fix gcmc put atom outside box");
if (coord[0] >= sublo[0] && coord[0] < subhi[0] &&
coord[1] >= sublo[1] && coord[1] < subhi[1] &&
coord[2] >= sublo[2] && coord[2] < subhi[2]) proc_flag = 1;
} else {
if (lamda[0] >= sublo[0] && lamda[0] < subhi[0] &&
lamda[1] >= sublo[1] && lamda[1] < subhi[1] &&
lamda[2] >= sublo[2] && lamda[2] < subhi[2]) proc_flag = 1;
}
int success = 0;
if (proc_flag) {
int ii = -1;
if (charge_flag) {
ii = atom->nlocal + atom->nghost;
if (ii >= atom->nmax) atom->avec->grow(0);
atom->q[ii] = charge;
}
double insertion_energy = energy(ii,ngcmc_type,-1,coord);
if (random_unequal->uniform() <
zz*volume*exp(-beta*insertion_energy)/(ngas+1)) {
atom->avec->create_atom(ngcmc_type,coord);
int m = atom->nlocal - 1;
// add to groups
// optionally add to type-based groups
atom->mask[m] = groupbitall;
for (int igroup = 0; igroup < ngrouptypes; igroup++) {
if (ngcmc_type == grouptypes[igroup])
atom->mask[m] |= grouptypebits[igroup];
}
atom->v[m][0] = random_unequal->gaussian()*sigma;
atom->v[m][1] = random_unequal->gaussian()*sigma;
atom->v[m][2] = random_unequal->gaussian()*sigma;
modify->create_attribute(m);
success = 1;
}
}
int success_all = 0;
MPI_Allreduce(&success,&success_all,1,MPI_INT,MPI_MAX,world);
if (success_all) {
atom->natoms++;
if (atom->tag_enable) {
atom->tag_extend();
if (atom->map_style) atom->map_init();
}
atom->nghost = 0;
if (triclinic) domain->x2lamda(atom->nlocal);
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
update_gas_atoms_list();
ninsertion_successes += 1.0;
}
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_molecule_translation()
{
ntranslation_attempts += 1.0;
if (ngas == 0) return;
tagint translation_molecule = pick_random_gas_molecule();
if (translation_molecule == -1) return;
double energy_before_sum = molecule_energy(translation_molecule);
double **x = atom->x;
double rx,ry,rz;
double com_displace[3],coord[3];
double rsq = 1.1;
while (rsq > 1.0) {
rx = 2*random_equal->uniform() - 1.0;
ry = 2*random_equal->uniform() - 1.0;
rz = 2*random_equal->uniform() - 1.0;
rsq = rx*rx + ry*ry + rz*rz;
}
com_displace[0] = displace*rx;
com_displace[1] = displace*ry;
com_displace[2] = displace*rz;
int nlocal = atom->nlocal;
if (regionflag) {
int *mask = atom->mask;
for (int i = 0; i < nlocal; i++) {
if (atom->molecule[i] == translation_molecule) {
mask[i] |= molecule_group_bit;
} else {
mask[i] &= molecule_group_inversebit;
}
}
double com[3];
com[0] = com[1] = com[2] = 0.0;
group->xcm(molecule_group,gas_mass,com);
coord[0] = com[0] + displace*rx;
coord[1] = com[1] + displace*ry;
coord[2] = com[2] + displace*rz;
while (domain->regions[iregion]->match(coord[0],coord[1],coord[2]) == 0) {
rsq = 1.1;
while (rsq > 1.0) {
rx = 2*random_equal->uniform() - 1.0;
ry = 2*random_equal->uniform() - 1.0;
rz = 2*random_equal->uniform() - 1.0;
rsq = rx*rx + ry*ry + rz*rz;
}
coord[0] = com[0] + displace*rx;
coord[1] = com[1] + displace*ry;
coord[2] = com[2] + displace*rz;
}
com_displace[0] = displace*rx;
com_displace[1] = displace*ry;
com_displace[2] = displace*rz;
}
double energy_after = 0.0;
for (int i = 0; i < nlocal; i++) {
if (atom->molecule[i] == translation_molecule) {
coord[0] = x[i][0] + com_displace[0];
coord[1] = x[i][1] + com_displace[1];
coord[2] = x[i][2] + com_displace[2];
if (!domain->inside_nonperiodic(coord))
error->one(FLERR,"Fix gcmc put atom outside box");
energy_after += energy(i,atom->type[i],translation_molecule,coord);
}
}
double energy_after_sum = 0.0;
MPI_Allreduce(&energy_after,&energy_after_sum,1,MPI_DOUBLE,MPI_SUM,world);
if (random_equal->uniform() <
exp(beta*(energy_before_sum - energy_after_sum))) {
for (int i = 0; i < nlocal; i++) {
if (atom->molecule[i] == translation_molecule) {
x[i][0] += com_displace[0];
x[i][1] += com_displace[1];
x[i][2] += com_displace[2];
}
}
if (triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
comm->exchange();
atom->nghost = 0;
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
update_gas_atoms_list();
ntranslation_successes += 1.0;
}
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_molecule_rotation()
{
nrotation_attempts += 1.0;
if (ngas == 0) return;
tagint rotation_molecule = pick_random_gas_molecule();
if (rotation_molecule == -1) return;
double energy_before_sum = molecule_energy(rotation_molecule);
int nlocal = atom->nlocal;
int *mask = atom->mask;
for (int i = 0; i < nlocal; i++) {
if (atom->molecule[i] == rotation_molecule) {
mask[i] |= molecule_group_bit;
} else {
mask[i] &= molecule_group_inversebit;
}
}
double com[3];
com[0] = com[1] = com[2] = 0.0;
group->xcm(molecule_group,gas_mass,com);
// generate point in unit cube
// then restrict to unit sphere
double r[3],rotmat[3][3],quat[4];
double rsq = 1.1;
while (rsq > 1.0) {
r[0] = 2.0*random_equal->uniform() - 1.0;
r[1] = 2.0*random_equal->uniform() - 1.0;
r[2] = 2.0*random_equal->uniform() - 1.0;
rsq = MathExtra::dot3(r, r);
}
double theta = random_equal->uniform() * max_rotation_angle;
MathExtra::norm3(r);
MathExtra::axisangle_to_quat(r,theta,quat);
MathExtra::quat_to_mat(quat,rotmat);
double **x = atom->x;
imageint *image = atom->image;
double energy_after = 0.0;
int n = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & molecule_group_bit) {
double xtmp[3];
domain->unmap(x[i],image[i],xtmp);
xtmp[0] -= com[0];
xtmp[1] -= com[1];
xtmp[2] -= com[2];
MathExtra::matvec(rotmat,xtmp,atom_coord[n]);
atom_coord[n][0] += com[0];
atom_coord[n][1] += com[1];
atom_coord[n][2] += com[2];
xtmp[0] = atom_coord[n][0];
xtmp[1] = atom_coord[n][1];
xtmp[2] = atom_coord[n][2];
domain->remap(xtmp);
if (!domain->inside(xtmp))
error->one(FLERR,"Fix gcmc put atom outside box");
energy_after += energy(i,atom->type[i],rotation_molecule,xtmp);
n++;
}
}
double energy_after_sum = 0.0;
MPI_Allreduce(&energy_after,&energy_after_sum,1,MPI_DOUBLE,MPI_SUM,world);
if (random_equal->uniform() <
exp(beta*(energy_before_sum - energy_after_sum))) {
int n = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & molecule_group_bit) {
image[i] = imagezero;
x[i][0] = atom_coord[n][0];
x[i][1] = atom_coord[n][1];
x[i][2] = atom_coord[n][2];
domain->remap(x[i],image[i]);
n++;
}
}
if (triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
comm->exchange();
atom->nghost = 0;
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
update_gas_atoms_list();
nrotation_successes += 1.0;
}
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_molecule_deletion()
{
ndeletion_attempts += 1.0;
if (ngas == 0) return;
tagint deletion_molecule = pick_random_gas_molecule();
if (deletion_molecule == -1) return;
double deletion_energy_sum = molecule_energy(deletion_molecule);
if (random_equal->uniform() <
ngas*exp(beta*deletion_energy_sum)/(zz*volume*natoms_per_molecule)) {
int i = 0;
while (i < atom->nlocal) {
if (atom->molecule[i] == deletion_molecule) {
atom->avec->copy(atom->nlocal-1,i,1);
atom->nlocal--;
} else i++;
}
atom->natoms -= natoms_per_molecule;
if (atom->map_style) atom->map_init();
atom->nghost = 0;
if (triclinic) domain->x2lamda(atom->nlocal);
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
update_gas_atoms_list();
ndeletion_successes += 1.0;
}
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_molecule_insertion()
{
double lamda[3];
ninsertion_attempts += 1.0;
double com_coord[3];
if (regionflag) {
int region_attempt = 0;
com_coord[0] = region_xlo + random_equal->uniform() *
(region_xhi-region_xlo);
com_coord[1] = region_ylo + random_equal->uniform() *
(region_yhi-region_ylo);
com_coord[2] = region_zlo + random_equal->uniform() *
(region_zhi-region_zlo);
while (domain->regions[iregion]->match(com_coord[0],com_coord[1],
com_coord[2]) == 0) {
com_coord[0] = region_xlo + random_equal->uniform() *
(region_xhi-region_xlo);
com_coord[1] = region_ylo + random_equal->uniform() *
(region_yhi-region_ylo);
com_coord[2] = region_zlo + random_equal->uniform() *
(region_zhi-region_zlo);
region_attempt++;
if (region_attempt >= max_region_attempts) return;
}
if (triclinic) domain->x2lamda(com_coord,lamda);
} else {
if (triclinic == 0) {
com_coord[0] = xlo + random_equal->uniform() * (xhi-xlo);
com_coord[1] = ylo + random_equal->uniform() * (yhi-ylo);
com_coord[2] = zlo + random_equal->uniform() * (zhi-zlo);
} else {
lamda[0] = random_equal->uniform();
lamda[1] = random_equal->uniform();
lamda[2] = random_equal->uniform();
// wasteful, but necessary
if (lamda[0] == 1.0) lamda[0] = 0.0;
if (lamda[1] == 1.0) lamda[1] = 0.0;
if (lamda[2] == 1.0) lamda[2] = 0.0;
domain->lamda2x(lamda,com_coord);
}
}
// generate point in unit cube
// then restrict to unit sphere
double r[3],rotmat[3][3],quat[4];
double rsq = 1.1;
while (rsq > 1.0) {
r[0] = 2.0*random_equal->uniform() - 1.0;
r[1] = 2.0*random_equal->uniform() - 1.0;
r[2] = 2.0*random_equal->uniform() - 1.0;
rsq = MathExtra::dot3(r, r);
}
double theta = random_equal->uniform() * MY_2PI;
MathExtra::norm3(r);
MathExtra::axisangle_to_quat(r,theta,quat);
MathExtra::quat_to_mat(quat,rotmat);
double insertion_energy = 0.0;
bool procflag[natoms_per_molecule];
for (int i = 0; i < natoms_per_molecule; i++) {
MathExtra::matvec(rotmat,onemols[imol]->x[i],atom_coord[i]);
atom_coord[i][0] += com_coord[0];
atom_coord[i][1] += com_coord[1];
atom_coord[i][2] += com_coord[2];
// use temporary variable for remapped position
// so unmapped position is preserved in atom_coord
double xtmp[3];
xtmp[0] = atom_coord[i][0];
xtmp[1] = atom_coord[i][1];
xtmp[2] = atom_coord[i][2];
domain->remap(xtmp);
if (!domain->inside(xtmp))
error->one(FLERR,"Fix gcmc put atom outside box");
procflag[i] = false;
if (triclinic == 0) {
if (xtmp[0] >= sublo[0] && xtmp[0] < subhi[0] &&
xtmp[1] >= sublo[1] && xtmp[1] < subhi[1] &&
xtmp[2] >= sublo[2] && xtmp[2] < subhi[2]) procflag[i] = true;
} else {
domain->x2lamda(xtmp,lamda);
if (lamda[0] >= sublo[0] && lamda[0] < subhi[0] &&
lamda[1] >= sublo[1] && lamda[1] < subhi[1] &&
lamda[2] >= sublo[2] && lamda[2] < subhi[2]) procflag[i] = true;
}
if (procflag[i]) {
int ii = -1;
if (onemols[imol]->qflag == 1) {
ii = atom->nlocal + atom->nghost;
if (ii >= atom->nmax) atom->avec->grow(0);
atom->q[ii] = onemols[imol]->q[i];
}
insertion_energy += energy(ii,onemols[imol]->type[i],-1,xtmp);
}
}
double insertion_energy_sum = 0.0;
MPI_Allreduce(&insertion_energy,&insertion_energy_sum,1,
MPI_DOUBLE,MPI_SUM,world);
if (random_equal->uniform() < zz*volume*natoms_per_molecule*
exp(-beta*insertion_energy_sum)/(ngas + natoms_per_molecule)) {
tagint maxmol = 0;
for (int i = 0; i < atom->nlocal; i++) maxmol = MAX(maxmol,atom->molecule[i]);
tagint maxmol_all;
MPI_Allreduce(&maxmol,&maxmol_all,1,MPI_LMP_TAGINT,MPI_MAX,world);
maxmol_all++;
if (maxmol_all >= MAXTAGINT)
error->all(FLERR,"Fix gcmc ran out of available molecule IDs");
tagint maxtag = 0;
for (int i = 0; i < atom->nlocal; i++) maxtag = MAX(maxtag,atom->tag[i]);
tagint maxtag_all;
MPI_Allreduce(&maxtag,&maxtag_all,1,MPI_LMP_TAGINT,MPI_MAX,world);
int nlocalprev = atom->nlocal;
double vnew[3];
vnew[0] = random_equal->gaussian()*sigma;
vnew[1] = random_equal->gaussian()*sigma;
vnew[2] = random_equal->gaussian()*sigma;
for (int i = 0; i < natoms_per_molecule; i++) {
if (procflag[i]) {
atom->avec->create_atom(onemols[imol]->type[i],atom_coord[i]);
int m = atom->nlocal - 1;
// add to groups
// optionally add to type-based groups
atom->mask[m] = groupbitall;
for (int igroup = 0; igroup < ngrouptypes; igroup++) {
if (ngcmc_type == grouptypes[igroup])
atom->mask[m] |= grouptypebits[igroup];
}
atom->image[m] = imagezero;
domain->remap(atom->x[m],atom->image[m]);
atom->molecule[m] = maxmol_all;
if (maxtag_all+i+1 >= MAXTAGINT)
error->all(FLERR,"Fix gcmc ran out of available atom IDs");
atom->tag[m] = maxtag_all + i + 1;
atom->v[m][0] = vnew[0];
atom->v[m][1] = vnew[1];
atom->v[m][2] = vnew[2];
atom->add_molecule_atom(onemols[imol],i,m,maxtag_all);
modify->create_attribute(m);
}
}
if (shakeflag)
fixshake->set_molecule(nlocalprev,maxtag_all,imol,com_coord,vnew,quat);
atom->natoms += natoms_per_molecule;
if (atom->natoms < 0)
error->all(FLERR,"Too many total atoms");
atom->nbonds += onemols[imol]->nbonds;
atom->nangles += onemols[imol]->nangles;
atom->ndihedrals += onemols[imol]->ndihedrals;
atom->nimpropers += onemols[imol]->nimpropers;
if (atom->map_style) atom->map_init();
atom->nghost = 0;
if (triclinic) domain->x2lamda(atom->nlocal);
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
update_gas_atoms_list();
ninsertion_successes += 1.0;
}
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_atomic_translation_full()
{
ntranslation_attempts += 1.0;
if (ngas == 0) return;
double energy_before = energy_stored;
int i = pick_random_gas_atom();
double **x = atom->x;
double xtmp[3];
xtmp[0] = xtmp[1] = xtmp[2] = 0.0;
tagint tmptag = -1;
if (i >= 0) {
double rsq = 1.1;
double rx,ry,rz;
rx = ry = rz = 0.0;
double coord[3];
while (rsq > 1.0) {
rx = 2*random_unequal->uniform() - 1.0;
ry = 2*random_unequal->uniform() - 1.0;
rz = 2*random_unequal->uniform() - 1.0;
rsq = rx*rx + ry*ry + rz*rz;
}
coord[0] = x[i][0] + displace*rx;
coord[1] = x[i][1] + displace*ry;
coord[2] = x[i][2] + displace*rz;
if (regionflag) {
while (domain->regions[iregion]->match(coord[0],coord[1],coord[2]) == 0) {
rsq = 1.1;
while (rsq > 1.0) {
rx = 2*random_unequal->uniform() - 1.0;
ry = 2*random_unequal->uniform() - 1.0;
rz = 2*random_unequal->uniform() - 1.0;
rsq = rx*rx + ry*ry + rz*rz;
}
coord[0] = x[i][0] + displace*rx;
coord[1] = x[i][1] + displace*ry;
coord[2] = x[i][2] + displace*rz;
}
}
if (!domain->inside_nonperiodic(coord))
error->one(FLERR,"Fix gcmc put atom outside box");
xtmp[0] = x[i][0];
xtmp[1] = x[i][1];
xtmp[2] = x[i][2];
x[i][0] = coord[0];
x[i][1] = coord[1];
x[i][2] = coord[2];
tmptag = atom->tag[i];
}
double energy_after = energy_full();
if (random_equal->uniform() <
exp(beta*(energy_before - energy_after))) {
energy_stored = energy_after;
ntranslation_successes += 1.0;
} else {
tagint tmptag_all;
MPI_Allreduce(&tmptag,&tmptag_all,1,MPI_LMP_TAGINT,MPI_MAX,world);
double xtmp_all[3];
MPI_Allreduce(&xtmp,&xtmp_all,3,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < atom->nlocal; i++) {
if (tmptag_all == atom->tag[i]) {
x[i][0] = xtmp_all[0];
x[i][1] = xtmp_all[1];
x[i][2] = xtmp_all[2];
}
}
energy_stored = energy_before;
}
update_gas_atoms_list();
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_atomic_deletion_full()
{
double q_tmp;
const int q_flag = atom->q_flag;
ndeletion_attempts += 1.0;
if (ngas == 0) return;
double energy_before = energy_stored;
const int i = pick_random_gas_atom();
int tmpmask;
if (i >= 0) {
tmpmask = atom->mask[i];
atom->mask[i] = exclusion_group_bit;
if (q_flag) {
q_tmp = atom->q[i];
atom->q[i] = 0.0;
}
}
if (force->kspace) force->kspace->qsum_qsq();
double energy_after = energy_full();
if (random_equal->uniform() <
ngas*exp(beta*(energy_before - energy_after))/(zz*volume)) {
if (i >= 0) {
atom->avec->copy(atom->nlocal-1,i,1);
atom->nlocal--;
}
atom->natoms--;
if (atom->map_style) atom->map_init();
ndeletion_successes += 1.0;
energy_stored = energy_after;
} else {
if (i >= 0) {
atom->mask[i] = tmpmask;
if (q_flag) atom->q[i] = q_tmp;
}
if (force->kspace) force->kspace->qsum_qsq();
energy_stored = energy_before;
}
update_gas_atoms_list();
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_atomic_insertion_full()
{
double lamda[3];
ninsertion_attempts += 1.0;
double energy_before = energy_stored;
double coord[3];
if (regionflag) {
int region_attempt = 0;
coord[0] = region_xlo + random_equal->uniform() * (region_xhi-region_xlo);
coord[1] = region_ylo + random_equal->uniform() * (region_yhi-region_ylo);
coord[2] = region_zlo + random_equal->uniform() * (region_zhi-region_zlo);
while (domain->regions[iregion]->match(coord[0],coord[1],coord[2]) == 0) {
coord[0] = region_xlo + random_equal->uniform() * (region_xhi-region_xlo);
coord[1] = region_ylo + random_equal->uniform() * (region_yhi-region_ylo);
coord[2] = region_zlo + random_equal->uniform() * (region_zhi-region_zlo);
region_attempt++;
if (region_attempt >= max_region_attempts) return;
}
if (triclinic) domain->x2lamda(coord,lamda);
} else {
if (triclinic == 0) {
coord[0] = xlo + random_equal->uniform() * (xhi-xlo);
coord[1] = ylo + random_equal->uniform() * (yhi-ylo);
coord[2] = zlo + random_equal->uniform() * (zhi-zlo);
} else {
lamda[0] = random_equal->uniform();
lamda[1] = random_equal->uniform();
lamda[2] = random_equal->uniform();
// wasteful, but necessary
if (lamda[0] == 1.0) lamda[0] = 0.0;
if (lamda[1] == 1.0) lamda[1] = 0.0;
if (lamda[2] == 1.0) lamda[2] = 0.0;
domain->lamda2x(lamda,coord);
}
}
int proc_flag = 0;
if (triclinic == 0) {
domain->remap(coord);
if (!domain->inside(coord))
error->one(FLERR,"Fix gcmc put atom outside box");
if (coord[0] >= sublo[0] && coord[0] < subhi[0] &&
coord[1] >= sublo[1] && coord[1] < subhi[1] &&
coord[2] >= sublo[2] && coord[2] < subhi[2]) proc_flag = 1;
} else {
if (lamda[0] >= sublo[0] && lamda[0] < subhi[0] &&
lamda[1] >= sublo[1] && lamda[1] < subhi[1] &&
lamda[2] >= sublo[2] && lamda[2] < subhi[2]) proc_flag = 1;
}
if (proc_flag) {
atom->avec->create_atom(ngcmc_type,coord);
int m = atom->nlocal - 1;
// add to groups
// optionally add to type-based groups
atom->mask[m] = groupbitall;
for (int igroup = 0; igroup < ngrouptypes; igroup++) {
if (ngcmc_type == grouptypes[igroup])
atom->mask[m] |= grouptypebits[igroup];
}
atom->v[m][0] = random_unequal->gaussian()*sigma;
atom->v[m][1] = random_unequal->gaussian()*sigma;
atom->v[m][2] = random_unequal->gaussian()*sigma;
if (charge_flag) atom->q[m] = charge;
modify->create_attribute(m);
}
atom->natoms++;
if (atom->tag_enable) {
atom->tag_extend();
if (atom->map_style) atom->map_init();
}
atom->nghost = 0;
if (triclinic) domain->x2lamda(atom->nlocal);
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
if (force->kspace) force->kspace->qsum_qsq();
double energy_after = energy_full();
if (random_equal->uniform() <
zz*volume*exp(beta*(energy_before - energy_after))/(ngas+1)) {
ninsertion_successes += 1.0;
energy_stored = energy_after;
} else {
atom->natoms--;
if (proc_flag) atom->nlocal--;
if (force->kspace) force->kspace->qsum_qsq();
energy_stored = energy_before;
}
update_gas_atoms_list();
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_molecule_translation_full()
{
ntranslation_attempts += 1.0;
if (ngas == 0) return;
tagint translation_molecule = pick_random_gas_molecule();
if (translation_molecule == -1) return;
double energy_before = energy_stored;
double **x = atom->x;
double rx,ry,rz;
double com_displace[3],coord[3];
double rsq = 1.1;
while (rsq > 1.0) {
rx = 2*random_equal->uniform() - 1.0;
ry = 2*random_equal->uniform() - 1.0;
rz = 2*random_equal->uniform() - 1.0;
rsq = rx*rx + ry*ry + rz*rz;
}
com_displace[0] = displace*rx;
com_displace[1] = displace*ry;
com_displace[2] = displace*rz;
int nlocal = atom->nlocal;
if (regionflag) {
int *mask = atom->mask;
for (int i = 0; i < nlocal; i++) {
if (atom->molecule[i] == translation_molecule) {
mask[i] |= molecule_group_bit;
} else {
mask[i] &= molecule_group_inversebit;
}
}
double com[3];
com[0] = com[1] = com[2] = 0.0;
group->xcm(molecule_group,gas_mass,com);
coord[0] = com[0] + displace*rx;
coord[1] = com[1] + displace*ry;
coord[2] = com[2] + displace*rz;
while (domain->regions[iregion]->match(coord[0],coord[1],coord[2]) == 0) {
rsq = 1.1;
while (rsq > 1.0) {
rx = 2*random_equal->uniform() - 1.0;
ry = 2*random_equal->uniform() - 1.0;
rz = 2*random_equal->uniform() - 1.0;
rsq = rx*rx + ry*ry + rz*rz;
}
coord[0] = com[0] + displace*rx;
coord[1] = com[1] + displace*ry;
coord[2] = com[2] + displace*rz;
}
com_displace[0] = displace*rx;
com_displace[1] = displace*ry;
com_displace[2] = displace*rz;
}
for (int i = 0; i < nlocal; i++) {
if (atom->molecule[i] == translation_molecule) {
x[i][0] += com_displace[0];
x[i][1] += com_displace[1];
x[i][2] += com_displace[2];
if (!domain->inside_nonperiodic(x[i]))
error->one(FLERR,"Fix gcmc put atom outside box");
}
}
double energy_after = energy_full();
if (random_equal->uniform() <
exp(beta*(energy_before - energy_after))) {
ntranslation_successes += 1.0;
energy_stored = energy_after;
} else {
energy_stored = energy_before;
for (int i = 0; i < nlocal; i++) {
if (atom->molecule[i] == translation_molecule) {
x[i][0] -= com_displace[0];
x[i][1] -= com_displace[1];
x[i][2] -= com_displace[2];
}
}
}
update_gas_atoms_list();
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_molecule_rotation_full()
{
nrotation_attempts += 1.0;
if (ngas == 0) return;
tagint rotation_molecule = pick_random_gas_molecule();
if (rotation_molecule == -1) return;
double energy_before = energy_stored;
int nlocal = atom->nlocal;
int *mask = atom->mask;
for (int i = 0; i < nlocal; i++) {
if (atom->molecule[i] == rotation_molecule) {
mask[i] |= molecule_group_bit;
} else {
mask[i] &= molecule_group_inversebit;
}
}
double com[3];
com[0] = com[1] = com[2] = 0.0;
group->xcm(molecule_group,gas_mass,com);
// generate point in unit cube
// then restrict to unit sphere
double r[3],rotmat[3][3],quat[4];
double rsq = 1.1;
while (rsq > 1.0) {
r[0] = 2.0*random_equal->uniform() - 1.0;
r[1] = 2.0*random_equal->uniform() - 1.0;
r[2] = 2.0*random_equal->uniform() - 1.0;
rsq = MathExtra::dot3(r, r);
}
double theta = random_equal->uniform() * max_rotation_angle;
MathExtra::norm3(r);
MathExtra::axisangle_to_quat(r,theta,quat);
MathExtra::quat_to_mat(quat,rotmat);
double **x = atom->x;
imageint *image = atom->image;
imageint image_orig[natoms_per_molecule];
int n = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & molecule_group_bit) {
atom_coord[n][0] = x[i][0];
atom_coord[n][1] = x[i][1];
atom_coord[n][2] = x[i][2];
image_orig[n] = image[i];
double xtmp[3];
domain->unmap(x[i],image[i],xtmp);
xtmp[0] -= com[0];
xtmp[1] -= com[1];
xtmp[2] -= com[2];
MathExtra::matvec(rotmat,xtmp,x[i]);
x[i][0] += com[0];
x[i][1] += com[1];
x[i][2] += com[2];
image[i] = imagezero;
domain->remap(x[i],image[i]);
if (!domain->inside(x[i]))
error->one(FLERR,"Fix gcmc put atom outside box");
n++;
}
}
double energy_after = energy_full();
if (random_equal->uniform() <
exp(beta*(energy_before - energy_after))) {
nrotation_successes += 1.0;
energy_stored = energy_after;
} else {
energy_stored = energy_before;
int n = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & molecule_group_bit) {
x[i][0] = atom_coord[n][0];
x[i][1] = atom_coord[n][1];
x[i][2] = atom_coord[n][2];
image[i] = image_orig[n];
n++;
}
}
}
update_gas_atoms_list();
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_molecule_deletion_full()
{
ndeletion_attempts += 1.0;
if (ngas == 0) return;
tagint deletion_molecule = pick_random_gas_molecule();
if (deletion_molecule == -1) return;
double energy_before = energy_stored;
int m = 0;
double q_tmp[natoms_per_molecule];
int tmpmask[atom->nlocal];
for (int i = 0; i < atom->nlocal; i++) {
if (atom->molecule[i] == deletion_molecule) {
tmpmask[i] = atom->mask[i];
atom->mask[i] = exclusion_group_bit;
toggle_intramolecular(i);
if (atom->q_flag) {
q_tmp[m] = atom->q[i];
m++;
atom->q[i] = 0.0;
}
}
}
if (force->kspace) force->kspace->qsum_qsq();
double energy_after = energy_full();
// energy_before corrected by energy_intra
double deltaphi = ngas*exp(beta*((energy_before - energy_intra) - energy_after))/(zz*volume*natoms_per_molecule);
if (random_equal->uniform() < deltaphi) {
int i = 0;
while (i < atom->nlocal) {
if (atom->molecule[i] == deletion_molecule) {
atom->avec->copy(atom->nlocal-1,i,1);
atom->nlocal--;
} else i++;
}
atom->natoms -= natoms_per_molecule;
if (atom->map_style) atom->map_init();
ndeletion_successes += 1.0;
energy_stored = energy_after;
} else {
energy_stored = energy_before;
int m = 0;
for (int i = 0; i < atom->nlocal; i++) {
if (atom->molecule[i] == deletion_molecule) {
atom->mask[i] = tmpmask[i];
toggle_intramolecular(i);
if (atom->q_flag) {
atom->q[i] = q_tmp[m];
m++;
}
}
}
if (force->kspace) force->kspace->qsum_qsq();
}
update_gas_atoms_list();
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::attempt_molecule_insertion_full()
{
double lamda[3];
ninsertion_attempts += 1.0;
double energy_before = energy_stored;
tagint maxmol = 0;
for (int i = 0; i < atom->nlocal; i++) maxmol = MAX(maxmol,atom->molecule[i]);
tagint maxmol_all;
MPI_Allreduce(&maxmol,&maxmol_all,1,MPI_LMP_TAGINT,MPI_MAX,world);
maxmol_all++;
if (maxmol_all >= MAXTAGINT)
error->all(FLERR,"Fix gcmc ran out of available molecule IDs");
int insertion_molecule = maxmol_all;
tagint maxtag = 0;
for (int i = 0; i < atom->nlocal; i++) maxtag = MAX(maxtag,atom->tag[i]);
tagint maxtag_all;
MPI_Allreduce(&maxtag,&maxtag_all,1,MPI_LMP_TAGINT,MPI_MAX,world);
int nlocalprev = atom->nlocal;
double com_coord[3];
if (regionflag) {
int region_attempt = 0;
com_coord[0] = region_xlo + random_equal->uniform() *
(region_xhi-region_xlo);
com_coord[1] = region_ylo + random_equal->uniform() *
(region_yhi-region_ylo);
com_coord[2] = region_zlo + random_equal->uniform() *
(region_zhi-region_zlo);
while (domain->regions[iregion]->match(com_coord[0],com_coord[1],
com_coord[2]) == 0) {
com_coord[0] = region_xlo + random_equal->uniform() *
(region_xhi-region_xlo);
com_coord[1] = region_ylo + random_equal->uniform() *
(region_yhi-region_ylo);
com_coord[2] = region_zlo + random_equal->uniform() *
(region_zhi-region_zlo);
region_attempt++;
if (region_attempt >= max_region_attempts) return;
}
if (triclinic) domain->x2lamda(com_coord,lamda);
} else {
if (triclinic == 0) {
com_coord[0] = xlo + random_equal->uniform() * (xhi-xlo);
com_coord[1] = ylo + random_equal->uniform() * (yhi-ylo);
com_coord[2] = zlo + random_equal->uniform() * (zhi-zlo);
} else {
lamda[0] = random_equal->uniform();
lamda[1] = random_equal->uniform();
lamda[2] = random_equal->uniform();
// wasteful, but necessary
if (lamda[0] == 1.0) lamda[0] = 0.0;
if (lamda[1] == 1.0) lamda[1] = 0.0;
if (lamda[2] == 1.0) lamda[2] = 0.0;
domain->lamda2x(lamda,com_coord);
}
}
// generate point in unit cube
// then restrict to unit sphere
double r[3],rotmat[3][3],quat[4];
double rsq = 1.1;
while (rsq > 1.0) {
r[0] = 2.0*random_equal->uniform() - 1.0;
r[1] = 2.0*random_equal->uniform() - 1.0;
r[2] = 2.0*random_equal->uniform() - 1.0;
rsq = MathExtra::dot3(r, r);
}
double theta = random_equal->uniform() * MY_2PI;
MathExtra::norm3(r);
MathExtra::axisangle_to_quat(r,theta,quat);
MathExtra::quat_to_mat(quat,rotmat);
double vnew[3];
vnew[0] = random_equal->gaussian()*sigma;
vnew[1] = random_equal->gaussian()*sigma;
vnew[2] = random_equal->gaussian()*sigma;
for (int i = 0; i < natoms_per_molecule; i++) {
double xtmp[3];
MathExtra::matvec(rotmat,onemols[imol]->x[i],xtmp);
xtmp[0] += com_coord[0];
xtmp[1] += com_coord[1];
xtmp[2] += com_coord[2];
// need to adjust image flags in remap()
imageint imagetmp = imagezero;
domain->remap(xtmp,imagetmp);
if (!domain->inside(xtmp))
error->one(FLERR,"Fix gcmc put atom outside box");
int proc_flag = 0;
if (triclinic == 0) {
if (xtmp[0] >= sublo[0] && xtmp[0] < subhi[0] &&
xtmp[1] >= sublo[1] && xtmp[1] < subhi[1] &&
xtmp[2] >= sublo[2] && xtmp[2] < subhi[2]) proc_flag = 1;
} else {
domain->x2lamda(xtmp,lamda);
if (lamda[0] >= sublo[0] && lamda[0] < subhi[0] &&
lamda[1] >= sublo[1] && lamda[1] < subhi[1] &&
lamda[2] >= sublo[2] && lamda[2] < subhi[2]) proc_flag = 1;
}
if (proc_flag) {
atom->avec->create_atom(onemols[imol]->type[i],xtmp);
int m = atom->nlocal - 1;
// add to groups
// optionally add to type-based groups
atom->mask[m] = groupbitall;
for (int igroup = 0; igroup < ngrouptypes; igroup++) {
if (ngcmc_type == grouptypes[igroup])
atom->mask[m] |= grouptypebits[igroup];
}
atom->image[m] = imagetmp;
atom->molecule[m] = insertion_molecule;
if (maxtag_all+i+1 >= MAXTAGINT)
error->all(FLERR,"Fix gcmc ran out of available atom IDs");
atom->tag[m] = maxtag_all + i + 1;
atom->v[m][0] = vnew[0];
atom->v[m][1] = vnew[1];
atom->v[m][2] = vnew[2];
atom->add_molecule_atom(onemols[imol],i,m,maxtag_all);
modify->create_attribute(m);
}
}
if (shakeflag)
fixshake->set_molecule(nlocalprev,maxtag_all,imol,com_coord,vnew,quat);
atom->natoms += natoms_per_molecule;
if (atom->natoms < 0)
error->all(FLERR,"Too many total atoms");
atom->nbonds += onemols[imol]->nbonds;
atom->nangles += onemols[imol]->nangles;
atom->ndihedrals += onemols[imol]->ndihedrals;
atom->nimpropers += onemols[imol]->nimpropers;
if (atom->map_style) atom->map_init();
atom->nghost = 0;
if (triclinic) domain->x2lamda(atom->nlocal);
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
if (force->kspace) force->kspace->qsum_qsq();
double energy_after = energy_full();
// energy_after corrected by energy_intra
double deltaphi = zz*volume*natoms_per_molecule*
exp(beta*(energy_before - (energy_after - energy_intra)))/(ngas + natoms_per_molecule);
if (random_equal->uniform() < deltaphi) {
ninsertion_successes += 1.0;
energy_stored = energy_after;
} else {
atom->nbonds -= onemols[imol]->nbonds;
atom->nangles -= onemols[imol]->nangles;
atom->ndihedrals -= onemols[imol]->ndihedrals;
atom->nimpropers -= onemols[imol]->nimpropers;
atom->natoms -= natoms_per_molecule;
energy_stored = energy_before;
int i = 0;
while (i < atom->nlocal) {
if (atom->molecule[i] == insertion_molecule) {
atom->avec->copy(atom->nlocal-1,i,1);
atom->nlocal--;
} else i++;
}
if (force->kspace) force->kspace->qsum_qsq();
}
update_gas_atoms_list();
}
/* ----------------------------------------------------------------------
compute particle's interaction energy with the rest of the system
------------------------------------------------------------------------- */
double FixGCMC::energy(int i, int itype, tagint imolecule, double *coord)
{
double delx,dely,delz,rsq;
double **x = atom->x;
int *type = atom->type;
tagint *molecule = atom->molecule;
int nall = atom->nlocal + atom->nghost;
pair = force->pair;
cutsq = force->pair->cutsq;
double fpair = 0.0;
double factor_coul = 1.0;
double factor_lj = 1.0;
double total_energy = 0.0;
for (int j = 0; j < nall; j++) {
if (i == j) continue;
if (mode == MOLECULE)
if (imolecule == molecule[j]) continue;
delx = coord[0] - x[j][0];
dely = coord[1] - x[j][1];
delz = coord[2] - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
int jtype = type[j];
if (rsq < cutsq[itype][jtype])
total_energy +=
pair->single(i,j,itype,jtype,rsq,factor_coul,factor_lj,fpair);
}
return total_energy;
}
/* ----------------------------------------------------------------------
compute the energy of the given gas molecule in its current position
sum across all procs that own atoms of the given molecule
------------------------------------------------------------------------- */
double FixGCMC::molecule_energy(tagint gas_molecule_id)
{
double mol_energy = 0.0;
for (int i = 0; i < atom->nlocal; i++)
if (atom->molecule[i] == gas_molecule_id) {
mol_energy += energy(i,atom->type[i],gas_molecule_id,atom->x[i]);
}
double mol_energy_sum = 0.0;
MPI_Allreduce(&mol_energy,&mol_energy_sum,1,MPI_DOUBLE,MPI_SUM,world);
return mol_energy_sum;
}
/* ----------------------------------------------------------------------
compute system potential energy
------------------------------------------------------------------------- */
double FixGCMC::energy_full()
{
if (triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
comm->exchange();
atom->nghost = 0;
comm->borders();
if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
if (modify->n_pre_neighbor) modify->pre_neighbor();
neighbor->build();
int eflag = 1;
int vflag = 0;
if (modify->n_pre_force) modify->pre_force(vflag);
if (force->pair) force->pair->compute(eflag,vflag);
if (atom->molecular) {
if (force->bond) force->bond->compute(eflag,vflag);
if (force->angle) force->angle->compute(eflag,vflag);
if (force->dihedral) force->dihedral->compute(eflag,vflag);
if (force->improper) force->improper->compute(eflag,vflag);
}
if (force->kspace) force->kspace->compute(eflag,vflag);
if (modify->n_post_force) modify->post_force(vflag);
if (modify->n_end_of_step) modify->end_of_step();
update->eflag_global = update->ntimestep;
double total_energy = c_pe->compute_scalar();
return total_energy;
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
int FixGCMC::pick_random_gas_atom()
{
int i = -1;
int iwhichglobal = static_cast<int> (ngas*random_equal->uniform());
if ((iwhichglobal >= ngas_before) &&
(iwhichglobal < ngas_before + ngas_local)) {
int iwhichlocal = iwhichglobal - ngas_before;
i = local_gas_list[iwhichlocal];
}
return i;
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
tagint FixGCMC::pick_random_gas_molecule()
{
int iwhichglobal = static_cast<int> (ngas*random_equal->uniform());
tagint gas_molecule_id = 0;
if ((iwhichglobal >= ngas_before) &&
(iwhichglobal < ngas_before + ngas_local)) {
int iwhichlocal = iwhichglobal - ngas_before;
int i = local_gas_list[iwhichlocal];
gas_molecule_id = atom->molecule[i];
}
tagint gas_molecule_id_all = 0;
MPI_Allreduce(&gas_molecule_id,&gas_molecule_id_all,1,
MPI_LMP_TAGINT,MPI_MAX,world);
return gas_molecule_id_all;
}
/* ----------------------------------------------------------------------
------------------------------------------------------------------------- */
void FixGCMC::toggle_intramolecular(int i)
{
if (atom->avec->bonds_allow)
for (int m = 0; m < atom->num_bond[i]; m++)
atom->bond_type[i][m] = -atom->bond_type[i][m];
if (atom->avec->angles_allow)
for (int m = 0; m < atom->num_angle[i]; m++)
atom->angle_type[i][m] = -atom->angle_type[i][m];
if (atom->avec->dihedrals_allow)
for (int m = 0; m < atom->num_dihedral[i]; m++)
atom->dihedral_type[i][m] = -atom->dihedral_type[i][m];
if (atom->avec->impropers_allow)
for (int m = 0; m < atom->num_improper[i]; m++)
atom->improper_type[i][m] = -atom->improper_type[i][m];
}
/* ----------------------------------------------------------------------
update the list of gas atoms
------------------------------------------------------------------------- */
void FixGCMC::update_gas_atoms_list()
{
int nlocal = atom->nlocal;
int *mask = atom->mask;
tagint *molecule = atom->molecule;
double **x = atom->x;
if (atom->nmax > gcmc_nmax) {
memory->sfree(local_gas_list);
gcmc_nmax = atom->nmax;
local_gas_list = (int *) memory->smalloc(gcmc_nmax*sizeof(int),
"GCMC:local_gas_list");
}
ngas_local = 0;
if (regionflag) {
if (mode == MOLECULE) {
tagint maxmol = 0;
for (int i = 0; i < nlocal; i++) maxmol = MAX(maxmol,molecule[i]);
tagint maxmol_all;
MPI_Allreduce(&maxmol,&maxmol_all,1,MPI_LMP_TAGINT,MPI_MAX,world);
double comx[maxmol_all];
double comy[maxmol_all];
double comz[maxmol_all];
for (int imolecule = 0; imolecule < maxmol_all; imolecule++) {
for (int i = 0; i < nlocal; i++) {
if (molecule[i] == imolecule) {
mask[i] |= molecule_group_bit;
} else {
mask[i] &= molecule_group_inversebit;
}
}
double com[3];
com[0] = com[1] = com[2] = 0.0;
group->xcm(molecule_group,gas_mass,com);
comx[imolecule] = com[0];
comy[imolecule] = com[1];
comz[imolecule] = com[2];
}
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
if (domain->regions[iregion]->match(comx[molecule[i]],
comy[molecule[i]],comz[molecule[i]]) == 1) {
local_gas_list[ngas_local] = i;
ngas_local++;
}
}
}
} else {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]) == 1) {
local_gas_list[ngas_local] = i;
ngas_local++;
}
}
}
}
} else {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
local_gas_list[ngas_local] = i;
ngas_local++;
}
}
}
MPI_Allreduce(&ngas_local,&ngas,1,MPI_INT,MPI_SUM,world);
MPI_Scan(&ngas_local,&ngas_before,1,MPI_INT,MPI_SUM,world);
ngas_before -= ngas_local;
}
/* ----------------------------------------------------------------------
return acceptance ratios
------------------------------------------------------------------------- */
double FixGCMC::compute_vector(int n)
{
if (n == 0) return ntranslation_attempts;
if (n == 1) return ntranslation_successes;
if (n == 2) return ninsertion_attempts;
if (n == 3) return ninsertion_successes;
if (n == 4) return ndeletion_attempts;
if (n == 5) return ndeletion_successes;
if (n == 6) return nrotation_attempts;
if (n == 7) return nrotation_successes;
return 0.0;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixGCMC::memory_usage()
{
double bytes = gcmc_nmax * sizeof(int);
return bytes;
}
/* ----------------------------------------------------------------------
pack entire state of Fix into one write
------------------------------------------------------------------------- */
void FixGCMC::write_restart(FILE *fp)
{
int n = 0;
double list[4];
list[n++] = random_equal->state();
list[n++] = random_unequal->state();
list[n++] = next_reneighbor;
if (comm->me == 0) {
int size = n * sizeof(double);
fwrite(&size,sizeof(int),1,fp);
fwrite(list,sizeof(double),n,fp);
}
}
/* ----------------------------------------------------------------------
use state info from restart file to restart the Fix
------------------------------------------------------------------------- */
void FixGCMC::restart(char *buf)
{
int n = 0;
double *list = (double *) buf;
seed = static_cast<int> (list[n++]);
random_equal->reset(seed);
seed = static_cast<int> (list[n++]);
random_unequal->reset(seed);
next_reneighbor = static_cast<int> (list[n++]);
}
diff --git a/src/MC/fix_tfmc.cpp b/src/MC/fix_tfmc.cpp
index 8ce130869..cb9faaaf5 100755
--- a/src/MC/fix_tfmc.cpp
+++ b/src/MC/fix_tfmc.cpp
@@ -1,298 +1,299 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Kristof Bal (University of Antwerp, Belgium)
------------------------------------------------------------------------- */
#include "fix_tfmc.h"
#include <mpi.h>
#include <string.h>
#include <math.h>
#include <float.h>
#include "atom.h"
#include "force.h"
#include "update.h"
#include "group.h"
#include "random_mars.h"
#include "comm.h"
#include "domain.h"
#include "memory.h"
#include "modify.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixTFMC::FixTFMC(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ xd(NULL), rotflag(0)
{
if (narg < 6) error->all(FLERR,"Illegal fix tfmc command");
// although we are not doing MD, we would like to use tfMC as an MD "drop in"
time_integrate = 1;
d_max = force->numeric(FLERR,arg[3]);
T_set = force->numeric(FLERR,arg[4]);
seed = force->inumeric(FLERR,arg[5]);
if (d_max <= 0) error->all(FLERR,"Fix tfmc displacement length must be > 0");
if (T_set <= 0) error->all(FLERR,"Fix tfmc temperature must be > 0");
if (seed <= 0) error->all(FLERR,"Illegal fix tfmc random seed");
// additional keywords
comflag = 0;
rotflag = 0;
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg],"com") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix tfmc command");
comflag = 1;
xflag = force->inumeric(FLERR,arg[iarg+1]);
yflag = force->inumeric(FLERR,arg[iarg+2]);
zflag = force->inumeric(FLERR,arg[iarg+3]);
iarg += 4;
} else if (strcmp(arg[iarg],"rot") == 0) {
if (iarg+1 > narg) error->all(FLERR,"Illegal fix tfmc command");
rotflag = 1;
iarg += 1;
} else error->all(FLERR,"Illegal fix tfmc command");
}
// error checks
if (comflag)
if (xflag < 0 || xflag > 1 || yflag < 0 || yflag > 1 ||
zflag < 0 || zflag > 1)
error->all(FLERR,"Illegal fix tfmc command");
if (xflag + yflag + zflag == 0)
comflag = 0;
if (rotflag) {
xd = NULL;
nmax = -1;
}
random_num = new RanMars(lmp,seed + comm->me);
}
/* ---------------------------------------------------------------------- */
FixTFMC::~FixTFMC()
{
delete random_num;
if (rotflag) {
memory->destroy(xd);
xd = NULL;
nmax = -1;
}
}
/* ---------------------------------------------------------------------- */
int FixTFMC::setmask()
{
int mask = 0;
mask |= INITIAL_INTEGRATE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixTFMC::init()
{
// shake cannot be handled because it requires velocities
// (and real MD in general)
int has_shake = 0;
for (int i = 0; i < modify->nfix; i++)
if (strcmp(modify->fix[i]->style,"shake") == 0) ++has_shake;
if (has_shake > 0)
error->all(FLERR,"Fix tfmc is not compatible with fix shake");
// obtain lowest mass in the system
// We do this here, in init(), rather than in initial_integrate().
// This might seem somewhat odd: after all, another atom could be added with a
// mass smaller than mass_min (in the case of a per-particle mass), so mass_min
// should change during the run. However, this would imply that the overall
// meaning of the input Delta is not very well-defined, because its meaning
// can change during the run. So we'll assume all particle types (in terms of
// possible masses) are defined before the run starts
double *rmass = atom->rmass;
double *mass = atom->mass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
double mass_min_local = DBL_MAX;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (mass_min_local > rmass[i]) mass_min_local = rmass[i];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (mass_min_local > mass[type[i]]) mass_min_local = mass[type[i]];
}
}
MPI_Allreduce(&mass_min_local,&mass_min,1,MPI_DOUBLE,MPI_MIN,world);
}
/* ---------------------------------------------------------------------- */
void FixTFMC::initial_integrate(int vflag)
{
double boltz = force->boltz;
double **x = atom->x;
double **f = atom->f;
double *rmass = atom->rmass;
double *mass = atom->mass;
double massone;
double masstotal;
double xcm_d[3], xcm_dall[3];
double d_i, xi;
double gamma, gamma_exp, gamma_expi;
double P_acc, P_ran;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
// in case we wish to track (and zero) the com movement
if (comflag) {
xcm_d[0] = 0.0;
xcm_d[1] = 0.0;
xcm_d[2] = 0.0;
}
// displacement vector, needed to calculate (and zero) rotation
if (rotflag && nmax < nlocal) {
nmax = nlocal + 1;
memory->destroy(xd);
memory->create(xd,nmax,3,"tfmc:xd");
}
// generate displacements for each atom
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
d_i = d_max * pow(mass_min/massone, 0.25);
for (int j = 0; j < 3; j++) {
P_acc = 0.0;
P_ran = 1.0;
gamma = f[i][j] * d_i / (2.0*boltz*T_set);
gamma_exp = exp(gamma);
gamma_expi = 1.0/gamma_exp;
// generate displacements according to the tfMC distribution
while (P_acc < P_ran) {
xi = 2.0*random_num->uniform() - 1.0;
P_ran = random_num->uniform();
if (xi < 0) {
P_acc = exp(2.0*xi*gamma) * gamma_exp - gamma_expi;
P_acc = P_acc / (gamma_exp - gamma_expi);
} else if (xi > 0) {
P_acc = gamma_exp - exp(2.0*xi*gamma) * gamma_expi;
P_acc = P_acc / (gamma_exp - gamma_expi);
} else {
P_acc = 1.0;
}
}
// displace
x[i][j] += xi * d_i;
if (comflag) xcm_d[j] += xi * d_i * massone;
if (rotflag) xd[i][j] = xi * d_i;
}
}
}
// if post factum zeroing of linear or rotational motion
if (comflag || rotflag) masstotal = group->mass(igroup);
// zero com motion
if (comflag == 1 && group->count(igroup) != 0) {
MPI_Allreduce(xcm_d,xcm_dall,3,MPI_DOUBLE,MPI_SUM,world);
if (masstotal > 0.0) {
xcm_dall[0] /= masstotal;
xcm_dall[1] /= masstotal;
xcm_dall[2] /= masstotal;
} else xcm_dall[0] = xcm_dall[1] = xcm_dall[2] = 0.0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
if (xflag) x[i][0] -= xcm_dall[0];
if (yflag) x[i][1] -= xcm_dall[1];
if (zflag) x[i][2] -= xcm_dall[2];
}
}
}
// zero rotation
if (rotflag == 1 && group->count(igroup) != 0) {
double dx, dy, dz;
double unwrap[3];
double cm[3], angmom[3], inertia[3][3], omega[3];
tagint *image = atom->image;
group->xcm(igroup,masstotal,cm);
// to zero rotations, we can employ the same principles the
// velocity command uses to zero the angular momentum. of course,
// there is no (conserved) momentum in MC, but we can substitute
// "velocities" by a displacement vector and proceed from there.
// this of course requires "forking" group->angmom(), which is
// what we do here.
double p[3];
p[0] = p[1] = p[2] = 0.0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - cm[0];
dy = unwrap[1] - cm[1];
dz = unwrap[2] - cm[2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
p[0] += massone * (dy*xd[i][2] - dz*xd[i][1]);
p[1] += massone * (dz*xd[i][0] - dx*xd[i][2]);
p[2] += massone * (dx*xd[i][1] - dy*xd[i][0]);
}
}
MPI_Allreduce(p,angmom,3,MPI_DOUBLE,MPI_SUM,world);
// end "angmom" calculation
group->inertia(igroup,cm,inertia);
group->omega(angmom,inertia,omega);
// now, get rid of the rotation
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - cm[0];
dy = unwrap[1] - cm[1];
dz = unwrap[2] - cm[2];
x[i][0] -= omega[1]*dz - omega[2]*dy;
x[i][1] -= omega[2]*dx - omega[0]*dz;
x[i][2] -= omega[0]*dy - omega[1]*dx;
}
}
}
}
diff --git a/src/MEAM/Install.sh b/src/MEAM/Install.sh
index acf4c9091..1825d4327 100644
--- a/src/MEAM/Install.sh
+++ b/src/MEAM/Install.sh
@@ -1,63 +1,67 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*meam[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/meam |' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/meam |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&-lmeam |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(meam_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(meam_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(meam_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*meam.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/meam\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*meam[^ \t]* //' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*meam.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/MPIIO/Install.sh b/src/MPIIO/Install.sh
index 08d284dd2..3834aea5c 100644
--- a/src/MPIIO/Install.sh
+++ b/src/MPIIO/Install.sh
@@ -1,54 +1,58 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# force rebuild of files with LMP_MPIIO switch
# also read/write restart so their *.d dependence on changed mpiio.h is rebuilt
touch ../mpiio.h
touch ../read_restart.cpp
touch ../write_restart.cpp
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package to include/exclude LMP_MPIIO setting
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*MPIIO[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-DLMP_MPIIO |' ../Makefile.package
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*MPIIO[^ \t]* //' ../Makefile.package
fi
fi
diff --git a/src/Make.py b/src/Make.py
index 81f3060c2..0fb298082 100755
--- a/src/Make.py
+++ b/src/Make.py
@@ -1,2346 +1,2349 @@
#!/usr/bin/env python2
# Make.py tool for managing packages and their auxiliary libs,
# auto-editing machine Makefiles, and building LAMMPS
# Syntax: Make.py -h (for help)
-# Notes: needs python 2.7 (not Python 3)
+# Notes: should be compatible with python 2.7 and 3.x thanks to 'futurize'
-import sys,os,commands,re,copy,subprocess,platform
+from __future__ import print_function
+import sys,os,re,copy,subprocess,platform
# switch abbrevs
# switch classes = created class for each switch
# lib classes = auxiliary package libs
# build classes = build options with defaults
# make classes = makefile options with no defaults
# setargs = makefile settings
# actionargs = allowed actions (also lib-dir and machine)
# lib build flags are set if lib is built, for use with zoutput
abbrevs = "adhjmoprsvz"
switchclasses = ("actions","dir","help","jmake","makefile",
"output","packages","redo","settings","verbose","zoutput")
libclasses = ("atc","awpmd","colvars","cuda","gpu","h5md",
"meam","poems","python","qmmm","reax","voronoi")
buildclasses = ("intel","kokkos")
makeclasses = ("cc","flags","mpi","fft","jpg","png")
setargs = ("gzip","#gzip","ffmpeg","#ffmpeg","smallbig","bigbig","smallsmall")
actionargs = ("lib-all","file","clean","exe")
gpubuildflag = 0
# ----------------------------------------------------------------
# functions
# ----------------------------------------------------------------
-# if flag = 1, print str and exit
-# if flag = 0, print str as warning and do not exit
+# if flag = 1, print txt and exit
+# if flag = 0, print txt as warning and do not exit
-def error(str,flag=1):
+def error(txt,flag=1):
if flag:
- print "ERROR:",str
+ print("ERROR:",txt)
sys.exit()
else:
- print "WARNING:",str
+ print("WARNING:",txt)
# store command-line args as sw = dict of key/value
# key = switch word, value = list of following args
# order = list of switches in order specified
# enforce no switch more than once
def parse_args(args):
narg = len(args)
sw = {}
order = []
iarg = 0
while iarg < narg:
if args[iarg][0] != '-': error("Arg %s is not a switch" % args[iarg])
switch = args[iarg][1:]
if switch in sw: error("Duplicate switch %s" % args[iarg])
order.append(switch)
first = iarg+1
last = first
while last < narg and args[last][0] != '-': last += 1
sw[switch] = args[first:last]
iarg = last
return sw,order
# convert info in switches dict back to a string, in switch_order
def switch2str(switches,switch_order):
txt = ""
for switch in switch_order:
if txt: txt += ' '
txt += "-%s" % switch
txt += ' ' + ' '.join(switches[switch])
return txt
# check if compiler works with ccflags on dummy one-line tmpauto.cpp file
# return 1 if successful, else 0
# warn = 1 = print warning if not successful, warn = 0 = no warning
# NOTE: unrecognized -override-limits can leave verride-limits file
def compile_check(compiler,ccflags,warn):
open("tmpauto.cpp",'w').write("int main(int, char **) {}\n")
- str = "%s %s -c tmpauto.cpp" % (compiler,ccflags)
- txt = commands.getoutput(str)
+ tmp = "%s %s -c tmpauto.cpp" % (compiler,ccflags)
+ txt = subprocess.check_output(tmp,stderr=subprocess.STDOUT,shell=True).decode()
flag = 1
if txt or not os.path.isfile("tmpauto.o"):
flag = 0
if warn:
- print str
- if txt: print txt
- else: print "compile produced no output"
+ print(tmp)
+ if txt: print(txt)
+ else: print("compile produced no output")
os.remove("tmpauto.cpp")
if os.path.isfile("tmpauto.o"): os.remove("tmpauto.o")
return flag
# check if linker works with linkflags and libs on tmpauto.o file
# return 1 if successful, else 0
# warn = 1 = print warning if not successful, warn = 0 = no warning
def link_check(linker,linkflags,libs,warn):
open("tmpauto.cpp",'w').write("int main(int, char **) {}\n")
- str = "%s %s -o tmpauto tmpauto.cpp %s" % (linker,linkflags,libs)
- txt = commands.getoutput(str)
+ tmp = "%s %s -o tmpauto tmpauto.cpp %s" % (linker,linkflags,libs)
+ txt = subprocess.check_output(tmp,stderr=subprocess.STDOUT,shell=True).decode()
flag = 1
if txt or not os.path.isfile("tmpauto"):
flag = 0
if warn:
- print str
- if txt: print txt
- else: print "link produced no output"
+ print(tmp)
+ if txt: print(txt)
+ else: print("link produced no output")
os.remove("tmpauto.cpp")
if os.path.isfile("tmpauto"): os.remove("tmpauto")
return flag
# ----------------------------------------------------------------
# switch classes, one per single-letter switch
# ----------------------------------------------------------------
# actions
-class Actions:
+class Actions(object):
def __init__(self,list):
self.inlist = copy.copy(list)
def help(self):
return """
-a action1 action2 ...
possible actions = lib-all, lib-dir, file, clean, exe or machine
machine is a Makefile.machine suffix
actions can be specified in any order
each action can appear only once
lib-dir can appear multiple times for different dirs
some actions depend on installed packages
installed packages = currently installed + result of -p switch
actions are invoked in this order, independent of specified order
(1) lib-all or lib-dir = build auxiliary libraries
lib-all builds all auxiliary libs needed by installed packages
lib-dir builds a specific lib whether package installed or not
dir is any dir in lib directory (atc, cuda, meam, etc) except linalg
(2) file = create a new src/MAKE/MINE/Makefile.auto
if file not specified, existing Makefile.auto is NOT changed
except by -m switch, which will copy Makefile.machine to Makefile.auto
note that exe action can add an -m switch, as described below
if file is specified, new Makefile.auto is created
if "-m machine" specified (or added by exe),
start with existing Makefile.machine, else existing Makefile.auto
if "-m none" specified, start Makefile.auto from scratch
must use -cc and -mpi switches to specify compiler and MPI
settings for these switches will alter Makefile.auto
-s, -intel, -kokkos, -cc, -mpi, -fft, -jpg, -png
if these accelerator packages are installed, they induce settings
that will alter Makefile.auto: opt, user-omp, user-intel, kokkos
use -z switch to copy final Makefile.auto to new filename
(3) clean = invoke "make clean-auto" to insure clean build on current files
useful if compiler flags have changed
(4) exe or machine = build LAMMPS
machine can be any existing Makefile.machine suffix
machine is converted to "exe" action, and additionally:
"-m machine" is added if -m switch is not specified
"-o machine" is added if -o switch is not specified
if either "-m" or "-o" are specified, they are not overridden
does not invoke any lib builds, since libs could be previously built
exe ALWAYS builds using src/MAKE/MINE/Makefile.auto
if file action also specified, it creates a new Makefile.auto
else if -m switch specified,
existing Makefile.machine is copied to create Makefile.auto
else Makefile.auto must already exist and is not changed
build produces src/lmp_auto, or error message if unsuccessful
use -o switch to copy src/lmp_auto to new filename
use -z switch to copy src/MAKE/MINE/Makefile.auto to new filename
"""
def check(self):
if not self.inlist: error("-a args are invalid")
libs = []
cleans = []
files = []
exes = []
for one in self.inlist:
if one.startswith("lib-"):
lib = one[4:]
if lib != "all" and lib not in libclasses: error("Actions are invalid")
libs.append(one)
elif one == "file":
files.append(one)
elif one == "clean":
cleans.append(one)
elif one == "exe":
exes.append(one)
# one action can be unknown, must be a machine (checked in setup)
else:
exes.append(one)
if len(set(libs)) != len(libs) or \
len(cleans) > 1 or len(files) > 1 or len(exes) > 1:
error("Actions are invalid")
self.alist = [action for actions in [libs,cleans,files,exes] \
for action in actions]
# dedup list of actions concatenated from two lists
# current self.inlist = specified -a switch + redo command -a switch
# specified exe/machine action replaces redo exe/machine action
# operates on and replaces self.inlist
def dedup(self):
alist = []
exemachine = 0
for one in self.inlist:
if one == "exe" or (one not in actionargs and not one.startswith("lib-")):
if exemachine: continue
exemachine = 1
if one not in alist: alist.append(one)
self.inlist = alist
# if last action is unknown, assume machine and convert to exe
# only done if action is a suffix for an existing Makefile.machine
# return machine if conversion done, else None
def setup(self):
machine = self.alist[-1]
if machine in actionargs or machine.startswith("lib-"): return None
make = MakeReader(machine,2)
self.alist[-1] = "exe"
return machine
# build one or more auxiliary package libraries
def lib(self,suffix):
if suffix != "all":
- print "building",suffix,"library ..."
- str = "%s.build()" % suffix
- exec(str)
+ print("building",suffix,"library ...")
+ txt = "%s.build()" % suffix
+ exec(txt)
else:
final = packages.final
for one in packages.lib:
if final[one]:
if "user" in one: pkg = one[5:]
else: pkg = one
- print "building",pkg,"library ..."
- str = "%s.build()" % pkg
- exec(str)
+ print("building",pkg,"library ...")
+ txt = "%s.build()" % pkg
+ exec(txt)
# read Makefile.machine
# if caller = "file", edit via switches
# if caller = "exe", just read
# write out new Makefile.auto
def file(self,caller):
# if caller="file", create from mpi or read from Makefile.machine or auto
# if caller="exe" and "file" action already invoked, read from auto
# if caller="exe" and no "file" action, read from Makefile.machine or auto
if caller == "file":
if makefile and makefile.machine == "none":
if cc and mpi: machine = "mpi"
else: error("Cannot create makefile unless -cc and -mpi are used")
elif makefile: machine = makefile.machine
else: machine = "auto"
elif caller == "exe" and "file" in self.alist:
machine = "auto"
elif caller == "exe" and "file" not in self.alist:
if makefile and makefile.machine == "none":
error("Cannot build with makefile = none")
elif makefile: machine = makefile.machine
else: machine = "auto"
make = MakeReader(machine,1)
# change makefile settings to user specifications
precompiler = ""
if caller == "file":
# add compiler/linker and default CCFLAGS,LINKFLAGS
# if cc.wrap, add wrapper setting for mpi = ompi/mpich
# precompiler = env variable setting for OpenMPI wrapper compiler
if cc:
make.setvar("CC",cc.compiler)
make.setvar("LINK",cc.compiler)
if cc.wrap:
if cc.wrap == "nvcc":
wrapper = os.path.abspath("../lib/kokkos/config/nvcc_wrapper")
else: wrapper = cc.wrap
abbrev = cc.abbrev
if abbrev == "mpi":
if cc.parent == "mpich":
make.addvar("CC","-cxx=%s" % wrapper)
make.addvar("LINK","-cxx=%s" % wrapper)
elif cc.parent == "openmpi":
make.addvar("export OMPI_CXX",wrapper,"cc")
precompiler = "env OMPI_CXX=%s " % wrapper
else: error("Could not add MPI wrapper compiler, " +
"did not recognize OpenMPI or MPICH")
make.setvar("CCFLAGS","-g")
make.addvar("CCFLAGS","-O3")
make.setvar("LINKFLAGS","-g")
make.addvar("LINKFLAGS","-O")
# add MPI settings
if mpi:
make.delvar("MPI_INC","*")
make.delvar("MPI_PATH","*")
make.delvar("MPI_LIB","*")
if mpi.style == "mpi":
make.addvar("MPI_INC","-DMPICH_SKIP_MPICXX")
make.addvar("MPI_INC","-DOMPI_SKIP_MPICXX=1")
elif mpi.style == "mpich":
make.addvar("MPI_INC","-DMPICH_SKIP_MPICXX")
make.addvar("MPI_INC","-DOMPI_SKIP_MPICXX=1")
if mpi.dir: make.addvar("MPI_INC","-I%s/include" % mpi.dir)
if mpi.dir: make.addvar("MPI_PATH","-L%s/lib" % mpi.dir)
make.addvar("MPI_LIB","-lmpich")
make.addvar("MPI_LIB","-lmpl")
make.addvar("MPI_LIB","-lpthread")
elif mpi.style == "ompi":
make.addvar("MPI_INC","-DMPICH_SKIP_MPICXX")
make.addvar("MPI_INC","-DOMPI_SKIP_MPICXX=1")
if mpi.dir: make.addvar("MPI_INC","-I%s/include" % mpi.dir)
if mpi.dir: make.addvar("MPI_PATH","-L%s/lib" % mpi.dir)
make.addvar("MPI_LIB","-lmpi")
make.addvar("MPI_LIB","-lmpi_cxx")
elif mpi.style == "serial":
make.addvar("MPI_INC","-I../STUBS")
make.addvar("MPI_PATH","-L../STUBS")
make.addvar("MPI_LIB","-lmpi_stubs")
# add accelerator package CCFLAGS and LINKFLAGS and variables
compiler = precompiler + ' '.join(make.getvar("CC"))
linker = precompiler + ' '.join(make.getvar("LINK"))
final = packages.final
if final["opt"]:
if compile_check(compiler,"-restrict",0):
make.addvar("CCFLAGS","-restrict")
if final["user-omp"]:
if compile_check(compiler,"-fopenmp",1):
make.addvar("CCFLAGS","-fopenmp")
make.addvar("LINKFLAGS","-fopenmp")
if compile_check(compiler,"-restrict",0):
make.addvar("CCFLAGS","-restrict")
if final["user-intel"]:
if intel.mode == "cpu":
make.delvar("CCFLAGS","-O*")
make.addvar("CCFLAGS","-O2")
if compile_check(compiler,"-openmp",1):
make.addvar("CCFLAGS","-openmp")
if compile_check(compiler,"-restrict",1):
make.addvar("CCFLAGS","-restrict")
if compile_check(compiler,"-no-offload",1):
make.addvar("CCFLAGS","-no-offload")
if compile_check(compiler,"-fno-alias",1):
make.addvar("CCFLAGS","-fno-alias")
if compile_check(compiler,"-ansi-alias",1):
make.addvar("CCFLAGS","-ansi-alias")
if compile_check(compiler,"-xAVX",1):
make.addvar("CCFLAGS","-xAVX")
if compile_check(compiler,"-fp-model fast=2",1):
make.addvar("CCFLAGS","-fp-model fast=2")
if compile_check(compiler,"-no-prec-div",1):
make.addvar("CCFLAGS","-no-prec-div")
if compile_check(compiler,"-override-limits",1):
make.addvar("CCFLAGS","-override-limits")
make.addvar("CCFLAGS","-DLAMMPS_MEMALIGN=64")
make.delvar("CCFLAGS","-DLMP_INTEL_OFFLOAD")
make.delvar("LINKFLAGS","-O*")
make.addvar("LINKFLAGS","-O2")
if link_check(linker,"-openmp","",1):
make.addvar("LINKFLAGS","-openmp")
if link_check(linker,"-xAVX","",1):
make.addvar("LINKFLAGS","-xAVX")
if link_check(linker,"-fpmodel fast=2","",1):
make.addvar("LINKFLAGS","-fpmodel fast=2")
if link_check(linker,"-no-prec-div","",1):
make.addvar("LINKFLAGS","-no-prec-div")
if link_check(linker,"-override-limits","",1):
make.addvar("LINKFLAGS","-override-limits")
make.delvar("LINKFLAGS","-offload")
if link_check(linker,"","-ltbbmalloc",1):
make.addvar("LIB","-ltbbmalloc")
if link_check(linker,"","-ltbbmalloc_proxy",1):
make.addvar("LIB","-ltbbmalloc_proxy")
elif intel.mode == "phi":
if compile_check(compiler,"-fopenmp",1):
make.addvar("CCFLAGS","-fopenmp")
make.addvar("LINKFLAGS","-fopenmp")
make.addvar("CCFLAGS","-DLAMMPS_MEMALIGN=64")
if compile_check(compiler,"-restrict",1):
make.addvar("CCFLAGS","-restrict")
if compile_check(compiler,"-xHost",1):
make.addvar("CCFLAGS","-xHost")
make.addvar("CCFLAGS","-DLMP_INTEL_OFFLOAD")
if compile_check(compiler,"-fno-alias",1):
make.addvar("CCFLAGS","-fno-alias")
if compile_check(compiler,"-ansi-alias",1):
make.addvar("CCFLAGS","-ansi-alias")
if compile_check(compiler,"-override-limits",1):
make.addvar("CCFLAGS","-override-limits")
if compile_check(compiler,'-offload-option,mic,compiler,' +
'"-fp-model fast=2 -mGLOB_default_function_attrs=' +
'\\"gather_scatter_loop_unroll=4\\""',1):
make.addvar("CCFLAGS",'-offload-option,mic,compiler,' +
'"-fp-model fast=2 -mGLOB_default_function_attrs=' +
'\\"gather_scatter_loop_unroll=4\\""')
if link_check(linker,"-offload","",1):
make.addvar("LINKFLAGS","-offload")
if final["kokkos"]:
if kokkos.mode == "omp":
make.delvar("KOKKOS_DEVICES","*")
make.delvar("KOKKOS_ARCH","*")
make.addvar("KOKKOS_DEVICES","OpenMP","lmp")
if kokkos.archcpu:
make.addvar("KOKKOS_ARCH",kokkos.archcpu,"lmp")
elif kokkos.mode == "cuda":
make.delvar("KOKKOS_DEVICES","*")
make.delvar("KOKKOS_ARCH","*")
make.addvar("KOKKOS_DEVICES","Cuda, OpenMP","lmp")
if kokkos.archgpu:
if kokkos.archgpu[0] == "3": value = "Kepler" + kokkos.archgpu
elif kokkos.archgpu[0] == "2": value = "Fermi" + kokkos.archgpu
else: error("Unrecognized Kokkos archgpu setting")
if kokkos.archcpu: value += ", %s" % kokkos.archcpu
make.addvar("KOKKOS_ARCH",value,"lmp")
elif kokkos.mode == "phi":
make.delvar("KOKKOS_DEVICES","*")
make.delvar("KOKKOS_ARCH","*")
make.addvar("KOKKOS_DEVICES","OpenMP","lmp")
make.addvar("KOKKOS_ARCH","KNC","lmp")
# add LMP_INC ifdef settings
if settings:
list = settings.inlist
for one in list:
if one == "gzip": make.addvar("LMP_INC","-DLAMMPS_GZIP")
elif one == "#gzip": make.delvar("LMP_INC","-DLAMMPS_GZIP")
elif one == "ffmpeg": make.addvar("LMP_INC","-DLAMMPS_FFMPEG")
elif one == "#ffmpeg": make.delvar("LMP_INC","-DLAMMPS_FFMPEG")
elif one == "smallbig":
make.delvar("LMP_INC","-DLAMMPS_BIGBIG")
make.delvar("LMP_INC","-DLAMMPS_SMALLSMALL")
elif one == "bigbig":
make.delvar("LMP_INC","-DLAMMPS_SMALLBIG")
make.delvar("LMP_INC","-DLAMMPS_SMALLSMALL")
make.addvar("LMP_INC","-DLAMMPS_BIGBIG")
elif one == "smallsmall":
make.delvar("LMP_INC","-DLAMMPS_SMALLBIG")
make.delvar("LMP_INC","-DLAMMPS_BIGBIG")
make.addvar("LMP_INC","-DLAMMPS_SMALLSMALL")
# add FFT, JPG, PNG settings
if fft:
make.delvar("FFT_INC","*")
make.delvar("FFT_PATH","*")
make.delvar("FFT_LIB","*")
if fft.mode == "none": make.addvar("FFT_INC","-DFFT_NONE")
else:
make.addvar("FFT_INC","-DFFT_%s" % fft.mode.upper())
make.addvar("FFT_LIB",fft.lib)
if fft.dir:
make.addvar("FFT_INC","-I%s/include" % fft.dir)
make.addvar("FFT_PATH","-L%s/lib" % fft.dir)
else:
if fft.incdir: make.addvar("FFT_INC","-I%s" % fft.incdir)
if fft.libdir: make.addvar("FFT_PATH","-L%s" % fft.libdir)
if jpg:
if jpg.on == 0:
make.delvar("LMP_INC","-DLAMMPS_JPEG")
make.delvar("JPG_LIB","-ljpeg")
else:
make.addvar("LMP_INC","-DLAMMPS_JPEG")
make.addvar("JPG_LIB","-ljpeg")
if jpg.dir:
make.addvar("JPG_INC","-I%s/include" % jpg.dir)
make.addvar("JPG_PATH","-L%s/lib" % jpg.dir)
else:
if jpg.incdir: make.addvar("JPG_INC","-I%s" % jpg.incdir)
if jpg.libdir: make.addvar("JPG_PATH","-L%s" % jpg.libdir)
if png:
if png.on == 0:
make.delvar("LMP_INC","-DLAMMPS_PNG")
make.delvar("JPG_LIB","-lpng")
else:
make.addvar("LMP_INC","-DLAMMPS_PNG")
make.addvar("JPG_LIB","-lpng")
if png.dir:
make.addvar("JPG_INC","-I%s/include" % png.dir)
make.addvar("JPG_PATH","-L%s/lib" % png.dir)
else:
if png.incdir: make.addvar("JPG_INC","-I%s" % png.incdir)
if png.libdir: make.addvar("JPG_PATH","-L%s" % png.libdir)
# finally after all other settings, add explicit flags
if flags:
for var,action,flist in flags.flags:
values = make.getvar(var)
if values == None:
error("Flags for a non-existent Makefile.auto variable")
for flag in flist:
flag = "-" + flag
if action == "add": make.addvar(var,flag)
elif action == "del": make.delvar(var,flag)
# set self.stubs if Makefile.auto uses STUBS lib in MPI settings
if make.getvar("MPI_LIB") and "-lmpi_stubs" in make.getvar("MPI_LIB"):
self.stubs = 1
else: self.stubs = 0
# write out Makefile.auto
# unless caller = "exe" and "file" action already invoked
if caller == "file" or "file" not in self.alist:
+ # make certain that 'MAKE/MINE' folder exists.
+ subprocess.check_output("mkdir -p %s/MAKE/MINE" % dir.src,stderr=subprocess.STDOUT,shell=True)
make.write("%s/MAKE/MINE/Makefile.auto" % dir.src,1)
- print "Created src/MAKE/MINE/Makefile.auto"
+ print("Created src/MAKE/MINE/Makefile.auto")
# test full compile and link
# unless caller = "file" and "exe" action will be invoked later
if caller == "file" and "exe" in self.alist: return
compiler = precompiler + ' '.join(make.getvar("CC"))
ccflags = ' '.join(make.getvar("CCFLAGS"))
linker = precompiler + ' '.join(make.getvar("LINK"))
linkflags = ' '.join(make.getvar("LINKFLAGS"))
libs = ' '.join(make.getvar("LIB"))
if not compile_check(compiler,ccflags,1):
error("Test of compilation failed")
if not link_check(linker,linkflags,libs,1): error("Test of link failed")
# invoke "make clean-auto" to force clean before build
def clean(self):
- str = "cd %s; make clean-auto" % dir.src
- commands.getoutput(str)
- print "Performed make clean-auto"
+ txt = "cd %s; make clean-auto" % dir.src
+ subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ print("Performed make clean-auto")
# build LAMMPS using Makefile.auto and -j setting
# invoke self.file() first, to test makefile compile/link
# delete existing lmp_auto, so can detect if build fails
# build STUBS lib (if unbuilt) if Makefile.auto MPI settings need it
def exe(self):
self.file("exe")
- commands.getoutput("cd %s; rm -f lmp_auto" % dir.src)
+ subprocess.check_output("cd %s; rm -f lmp_auto" % dir.src,stderr=subprocess.STDOUT,shell=True)
if self.stubs and not os.path.isfile("%s/STUBS/libmpi_stubs.a" % dir.src):
- print "building serial STUBS library ..."
- str = "cd %s/STUBS; make clean; make" % dir.src
- txt = commands.getoutput(str)
+ print("building serial STUBS library ...")
+ tmp = "cd %s/STUBS; make clean; make" % dir.src
+ txt = subprocess.check_output(tmp,stderr=subprocess.STDOUT,shell=True).decode()
if not os.path.isfile("%s/STUBS/libmpi_stubs.a" % dir.src):
- print txt
+ print(txt)
error('Unsuccessful "make stubs"')
- print "Created src/STUBS/libmpi_stubs.a"
+ print("Created src/STUBS/libmpi_stubs.a")
# special hack for shannon GPU cluster
# must use "srun make" if on it and building w/ GPU package, else just make
# this is b/c Cuda libs are not all available on host
make = "make"
if "shannon" == platform.node() and packages.final["gpu"]:
make = "srun make"
- if jmake: str = "cd %s; %s -j %d auto" % (dir.src,make,jmake.n)
- else: str = "cd %s; %s auto" % (dir.src,make)
+ if jmake: tmp = "cd %s; %s -j %d auto" % (dir.src,make,jmake.n)
+ else: tmp = "cd %s; %s auto" % (dir.src,make)
# if verbose, print output as build proceeds, else only print if fails
- if verbose: subprocess.call(str,shell=True)
+ if verbose: subprocess.call(tmp,shell=True)
else:
- print str
- try: subprocess.check_output(str,stderr=subprocess.STDOUT,shell=True)
- except Exception as e: print e.output
+ print(tmp)
+ try: subprocess.check_output(tmp,stderr=subprocess.STDOUT,shell=True)
+ except Exception as e: print(e.output)
if not os.path.isfile("%s/lmp_auto" % dir.src):
error('Unsuccessful "make auto"')
- elif not output: print "Created src/lmp_auto"
+ elif not output: print("Created src/lmp_auto")
# dir switch
-class Dir:
+class Dir(object):
def __init__(self,list):
self.inlist = copy.copy(list)
def help(self):
return """
-d dir
dir = LAMMPS home dir
if -d not specified, working dir must be lammps/src
"""
def check(self):
if self.inlist != None and len(self.inlist) != 1:
error("-d args are invalid")
# if inlist = None, check that cwd = lammps/src
# store cwd and lammps dir
# derive src,make,lib dirs from lammps dir
# check that they all exist
def setup(self):
self.cwd = os.getcwd()
if self.inlist == None: self.lammps = ".."
else: self.lammps = self.inlist[0]
self.lammps = os.path.realpath(self.lammps)
self.src = self.lammps + "/src"
self.make = self.lammps + "/src/MAKE"
self.lib = self.lammps + "/lib"
if not os.path.isdir(self.lammps): error("LAMMPS home dir is invalid")
if not os.path.isdir(self.src): error("LAMMPS src dir is invalid")
if not os.path.isdir(self.lib): error("LAMMPS lib dir is invalid")
# help switch
-class Help:
+class Help(object):
def __init__(self,list): pass
def help(self):
return """
Syntax: Make.py switch args ...
switches can be listed in any order
help switch:
-h prints help and syntax for all other specified switches
switch for actions:
-a lib-all, lib-dir, clean, file, exe or machine
list one or more actions, in any order
machine is a Makefile.machine suffix
one-letter switches:
-d (dir), -j (jmake), -m (makefile), -o (output), -p (packages),
-r (redo), -s (settings), -v (verbose), -z (makefile output)
switches for libs:
-atc, -awpmd, -colvars, -cuda, -gpu, -h5md,
-meam, -poems, -python, -qmmm, -reax, -voronoi
switches for build and makefile options:
-intel, -kokkos, -cc, -flags, -mpi, -fft, -jpg, -png
"""
# jmake switch
-class Jmake:
+class Jmake(object):
def __init__(self,list):
self.inlist = copy.copy(list)
def help(self):
return """
-j N
use N procs for performing parallel make commands
used when building a lib or LAMMPS itself
if -j not specified, serial make commands run on single core
"""
def check(self):
if len(self.inlist) != 1: error("-j args are invalid")
if not self.inlist[0].isdigit(): error("-j args are invalid")
n = int(self.inlist[0])
if n <= 0: error("-j args are invalid")
self.n = n
# makefile switch
-class Makefile:
+class Makefile(object):
def __init__(self,list):
self.inlist = copy.copy(list)
def help(self):
return """
-m machine
use Makefile.machine under src/MAKE as starting point to create Makefile.auto
if machine = "none", file action will create Makefile.auto from scratch
must use -cc and -mpi switches to specify compiler and MPI
if -m not specified, file/exe actions alter existing Makefile.auto
"""
def check(self):
if len(self.inlist) != 1: error("-m args are invalid")
self.machine = self.inlist[0]
# output switch
-class Output:
+class Output(object):
def __init__(self,list):
self.inlist = copy.copy(list)
def help(self):
return """
-o machine
copy final src/lmp_auto to lmp_machine in working dir
if -o not specified, exe action only produces src/lmp_auto
"""
def check(self):
if len(self.inlist) != 1: error("-o args are invalid")
self.machine = self.inlist[0]
# packages switch
-class Packages:
+class Packages(object):
def __init__(self,list):
self.inlist = copy.copy(list)
def help(self):
return """
-p = package1 package2 ...
list of packages to install or uninstall in order specified
operates on set of packages currently installed
valid package names:
any LAMMPS standard or user package (type "make package" to see list)
prefix by yes/no to install/uninstall (see abbrevs)
yes-molecule, yes-user-atc, no-molecule, no-user-atc
can use LAMMPS categories (type "make package" to see list)
all = all standard and user packages (also none = no-all)
std (or standard) = all standard packages
user = all user packages
lib = all standard and user packages with auxiliary libs
can abbreviate package names and yes/no
omp = user-omp = yes-user-omp
^omp = ^user-omp = no-user-omp
user = yes-user, ^user = no-user
all = yes-all, ^all = none = no-all
when action performed, list is processed in order,
as if typed "make yes/no" for each
if "orig" or "original" is last package in list,
set of installed packages will be restored to original (current) list
after "build" action is performed
if -p not specified, currently installed packages are not changed
"""
def check(self):
if self.inlist != None and not self.inlist: error("-p args are invalid")
def setup(self):
# extract package lists from src/Makefile
# remove names from lib that there are not Make.py lib-classes for
# most don't actually have libs, so nothing to control from Make.py
make = MakeReader("%s/Makefile" % dir.src)
std = make.getvar("PACKAGE")
user = make.getvar("PACKUSER")
lib = make.getvar("PACKLIB")
lib.remove("kim")
lib.remove("kokkos")
lib.remove("user-molfile")
lib.remove("python")
lib.remove("user-quip")
all = std + user
# plist = command line args expanded to yes-package or no-package
plist = []
if self.inlist:
for one in self.inlist:
if one in std:
plist.append("yes-%s" % one)
elif one in user:
plist.append("yes-%s" % one)
elif "user-"+one in user:
plist.append("yes-user-%s" % one)
elif one == "std" or one == "standard" or one == "user" or \
one == "lib" or one == "all": plist.append("yes-%s" % one)
elif one.startswith("yes-"):
if one[4:] in std: plist.append("yes-%s" % one[4:])
elif one[4:] in user: plist.append("yes-%s" % one[4:])
elif "user-"+one[4:] in user: plist.append("yes-user-%s" % one[4:])
elif one == "yes-std" or one == "yes-standard" or \
one == "yes-user" or one == "yes-lib" or one == "yes-all":
plist.append("yes-%s" % one[4:])
else: error("Invalid package name %s" % one)
elif one.startswith("no-"):
if one[3:] in std: plist.append("no-%s" % one[3:])
elif one[3:] in user: plist.append("no-%s" % one[3:])
elif "user-"+one[3:] in user: plist.append("no-user-%s" % one[3:])
elif one == "no-std" or one == "no-standard" or one == "no-user" or \
one == "no-lib" or one == "no-all":
plist.append("no-%s" % one[3:])
else: error("Invalid package name %s" % one)
elif one.startswith('^'):
if one[1:] in std: plist.append("no-%s" % one[1:])
elif one[1:] in user: plist.append("no-%s" % one[1:])
elif "user-"+one[1:] in user: plist.append("no-user-%s" % one[1:])
elif one == "^std" or one == "^standard" or one == "^user" or \
one == "^lib" or one == "^all": plist.append("no-%s" % one[1:])
else: error("Invalid package name %s" % one)
elif one == "none": plist.append("no-all")
elif one == "orig": plist.append(one)
else: error("Invalid package name %s" % one)
if "orig" in plist and plist.index("orig") != len(plist)-1:
error('-p orig arg must be last')
if plist.count("orig") > 1: error('-p orig arg must be last')
# original = dict of all packages
# key = package name, value = 1 if currently installed, else 0
original = {}
- str = "cd %s; make ps" % dir.src
- output = commands.getoutput(str).split('\n')
+ tmp = "cd %s; make ps" % dir.src
+ output = subprocess.check_output(tmp,stderr=subprocess.STDOUT,shell=True).decode()
pattern = "Installed\s+(\w+): package (\S+)"
for line in output:
m = re.search(pattern,line)
if not m: continue
pkg = m.group(2).lower()
- if pkg not in all: error('Package list does not math "make ps" results')
+ if pkg not in all: error('Package list does not match "make ps" results')
if m.group(1) == "NO": original[pkg] = 0
elif m.group(1) == "YES": original[pkg] = 1
# final = dict of all packages after plist applied to original
# key = package name, value = 1 if installed, else 0
final = copy.deepcopy(original)
for i,one in enumerate(plist):
if "yes" in one:
pkg = one[4:]
yes = 1
else:
pkg = one[3:]
yes = 0
if pkg in all:
final[pkg] = yes
elif pkg == "std" or pkg == "standard":
for pkg in std: final[pkg] = yes
elif pkg == "user":
for pkg in user: final[pkg] = yes
elif pkg == "lib":
for pkg in lib: final[pkg] = yes
elif pkg == "all":
for pkg in all: final[pkg] = yes
self.std = std
self.user = user
self.lib = lib
self.all = all
self.plist = plist
self.original = original
self.final = final
# install packages in plist
def install(self):
- if self.plist: print "Installing packages ..."
+ if self.plist: print("Installing packages ...")
for one in self.plist:
if one == "orig": continue
- commands.getoutput("cd %s; make %s" % (dir.src,one))
+ subprocess.check_output("cd %s; make %s" % (dir.src,one),stderr=subprocess.STDOUT,shell=True)
if self.plist and verbose:
- txt = commands.getoutput("cd %s; make ps" % dir.src)
- print "Package status after installation:"
- print txt
+ txt = subprocess.check_output("cd %s; make ps" % dir.src,stderr=subprocess.STDOUT,shell=True).decode()
+ print("Package status after installation:")
+ print(txt)
# restore packages to original list if requested
# order of re-install should not matter matter b/c of Depend.sh
def uninstall(self):
if not self.plist or self.plist[-1] != "orig": return
- print "Restoring packages to original state ..."
- commands.getoutput("cd %s; make no-all" % dir.src)
+ print("Restoring packages to original state ...")
+ subprocess.check_output("cd %s; make no-all" % dir.src,stderr=subprocess.STDOUT,shell=True)
for one in self.all:
if self.original[one]:
- commands.getoutput("cd %s; make yes-%s" % (dir.src,one))
+ subprocess.check_output("cd %s; make yes-%s" % (dir.src,one),stderr=subprocess.STDOUT,shell=True)
if verbose:
- txt = commands.getoutput("cd %s; make ps" % dir.src)
- print "Restored package status:"
- print txt
+ txt = subprocess.check_output("cd %s; make ps" % dir.src,stderr=subprocess.STDOUT,shell=True).decode()
+ print("Restored package status:")
+ print(txt)
# redo switch
-class Redo:
+class Redo(object):
def __init__(self,list):
self.inlist = copy.copy(list)
def help(self):
return """
-r file label1 label2 ...
all args are optional
invoke Make.py commands from a file
other specified switches are merged with file commands (see below)
redo file format:
blank lines and lines starting with "#" are skipped
other lines are treated as commands
each command is a list of Make.py args, as if typed at command-line
commands can have leading label, followed by ":"
commands cannot contain a "-r" switch
if no args, execute previous command, which is stored in src/Make.py.last
if one arg, execute all commands from specified file
unlabeled or labeled commands are all executed
if multiple args, execute only matching labeled commands from file
if other switches are specified,
if file command does not have the switch, it is added
if file command has the switch, the specified switch replaces it
except if -a (action) switch is both specified and in the file command,
two sets of actions are merged and duplicates removed
if both switches have "exe or machine" action,
the specified exe/machine overrides the file exe/machine
"""
def check(self):
if len(self.inlist) == 0:
self.dir = 1
self.file = "Make.py.last"
self.labels = []
else:
self.dir = 0
self.file = self.inlist[0]
self.labels = self.inlist[1:]
# read redo file
# self.commands = list of commands to execute
def setup(self):
file = self.file
if not os.path.isfile(file): error("Redo file %s does not exist" % file)
lines = open(file,'r').readlines()
cmdlines = []
for line in lines:
line = line.strip()
if not line or line[0] == '#' : continue
cmdlines.append(line)
# if no labels, add all file commands to command list
# if labels, make a dict with key = label, value = command
# and discard unlabeled commands
dict = {}
commands = []
for line in cmdlines:
words = line.split()
if "-r" in words: error("Redo command cannot contain -r switch")
if words[0][-1] == ':': label = words[0][:-1]
else: label = None
if not self.labels:
- if label: commands.append(' '.join(words[1:]))
- else: commands.append(line)
+ if label: subprocess.append(' '.join(words[1:]))
+ else: subprocess.append(line)
else:
if not label: continue
dict[label] = ' '.join(words[1:])
# extract labeled commands from dict and add to command list
for label in self.labels:
if label not in dict: error("Redo label not in redo file")
- commands.append(dict[label])
+ subprocess.append(dict[label])
self.commands = commands
# settings switch
-class Settings:
+class Settings(object):
def __init__(self,list):
self.inlist = copy.copy(list)
def help(self):
return """
-s set1 set2 ...
possible settings = gzip #gzip ffmpeg #ffmpeg smallbig bigbig smallsmall
alter LAMMPS ifdef settings in Makefile.auto
only happens if new Makefile.auto is created by use of "file" action
gzip and #gzip turn on/off LAMMPS_GZIP setting
ffmpeg and #ffmpeg turn on/off LAMMPS_FFMPEG setting
smallbig, bigbig, smallsmall turn on LAMMPS_SMALLBIG, etc
and turn off other two
"""
def check(self):
if not self.inlist: error("-s args are invalid")
for one in self.inlist:
if one not in setargs: error("-s args are invalid")
# verbose switch
-class Verbose:
+class Verbose(object):
def __init__(self,list):
self.inlist = copy.copy(list)
def help(self):
return """
-v (no arguments)
produce verbose output as Make.py executes
if -v not specified, minimal output is produced
"""
def check(self):
if len(self.inlist): error("-v args are invalid")
# zoutput switch for making copy of final Makefile.auto
-class Zoutput:
+class Zoutput(object):
def __init__(self,list):
self.inlist = copy.copy(list)
def help(self):
return """
-z machine
copy created/used src/MAKE/MINE/Makefile.auto to Makefile.machine in same dir
copy created/used lib/*/Makefile.auto and lib/*/Makefile.lammps to
Makefile_lib.machine and Makefile_lib_lammps.machine in same dir
this can be used to preserve the machine Makefile and lib Makefiles
"""
def check(self):
if len(self.inlist) != 1: error("-z args are invalid")
self.machine = self.inlist[0]
# ----------------------------------------------------------------
# lib classes, one per LAMMPS auxiliary lib
# ----------------------------------------------------------------
# ATC lib
-class ATC:
+class ATC(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.make = "g++"
self.lammpsflag = 0
def help(self):
return """
-atc make=suffix lammps=suffix2
all args are optional and can be in any order
make = use Makefile.suffix (def = g++)
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-atc args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-atc args are invalid")
if words[0] == "make": self.make = words[1]
elif words[0] == "lammps":
self.lammps = words[1]
self.lammpsflag = 1
else: error("-atc args are invalid")
def build(self):
libdir = dir.lib + "/atc"
make = MakeReader("%s/Makefile.%s" % (libdir,self.make))
if self.lammpsflag:
make.setvar("EXTRAMAKE","Makefile.lammps.%s" % self.lammps)
make.write("%s/Makefile.auto" % libdir)
- commands.getoutput("cd %s; make -f Makefile.auto clean" % libdir)
- if jmake: str = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
- else: str = "cd %s; make -f Makefile.auto" % libdir
+ subprocess.check_output("cd %s; make -f Makefile.auto clean" % libdir,stderr=subprocess.STDOUT,shell=True)
+ if jmake: txt = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
+ else: txt = "cd %s; make -f Makefile.auto" % libdir
# if verbose, print output as build proceeds, else only print if fails
- if verbose: subprocess.call(str,shell=True)
+ if verbose: subprocess.call(txt,shell=True)
else:
- try: subprocess.check_output(str,stderr=subprocess.STDOUT,shell=True)
- except Exception as e: print e.output
+ try: subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ except Exception as e: print(e.output)
if not os.path.isfile("%s/libatc.a" % libdir) or \
not os.path.isfile("%s/Makefile.lammps" % libdir):
error("Unsuccessful build of lib/atc library")
- else: print "Created lib/atc library"
+ else: print("Created lib/atc library")
# AWPMD lib
-class AWPMD:
+class AWPMD(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.make = "mpicc"
self.lammpsflag = 0
def help(self):
return """
-awpmd make=suffix lammps=suffix2
all args are optional and can be in any order
make = use Makefile.suffix (def = mpicc)
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-awpmd args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-awpmd args are invalid")
if words[0] == "make": self.make = words[1]
elif words[0] == "lammps":
self.lammps = words[1]
self.lammpsflag = 1
else: error("-awpmd args are invalid")
def build(self):
libdir = dir.lib + "/awpmd"
make = MakeReader("%s/Makefile.%s" % (libdir,self.make))
if self.lammpsflag:
make.setvar("EXTRAMAKE","Makefile.lammps.%s" % self.lammps)
make.write("%s/Makefile.auto" % libdir)
- commands.getoutput("cd %s; make -f Makefile.auto clean" % libdir)
- if jmake: str = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
- else: str = "cd %s; make -f Makefile.auto" % libdir
+ subprocess.check_output("cd %s; make -f Makefile.auto clean" % libdir,stderr=subprocess.STDOUT,shell=True)
+ if jmake: txt = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
+ else: txt = "cd %s; make -f Makefile.auto" % libdir
# if verbose, print output as build proceeds, else only print if fails
- if verbose: subprocess.call(str,shell=True)
+ if verbose: subprocess.call(txt,shell=True)
else:
- try: subprocess.check_output(str,stderr=subprocess.STDOUT,shell=True)
- except Exception as e: print e.output
+ try: subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ except Exception as e: print(e.output)
if not os.path.isfile("%s/libawpmd.a" % libdir) or \
not os.path.isfile("%s/Makefile.lammps" % libdir):
error("Unsuccessful build of lib/awpmd library")
- else: print "Created lib/awpmd library"
+ else: print("Created lib/awpmd library")
# COLVARS lib
-class COLVARS:
+class COLVARS(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.make = "g++"
self.lammpsflag = 0
def help(self):
return """
-colvars make=suffix lammps=suffix2
all args are optional and can be in any order
make = use Makefile.suffix (def = g++)
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-colvars args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-colvars args are invalid")
if words[0] == "make": self.make = words[1]
elif words[0] == "lammps":
self.lammps = words[1]
self.lammpsflag = 1
else: error("-colvars args are invalid")
def build(self):
libdir = dir.lib + "/colvars"
make = MakeReader("%s/Makefile.%s" % (libdir,self.make))
if self.lammpsflag:
make.setvar("EXTRAMAKE","Makefile.lammps.%s" % self.lammps)
make.write("%s/Makefile.auto" % libdir)
- commands.getoutput("cd %s; make -f Makefile.auto clean" % libdir)
- if jmake: str = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
- else: str = "cd %s; make -f Makefile.auto" % libdir
+ subprocess.check_output("cd %s; make -f Makefile.auto clean" % libdir,stderr=subprocess.STDOUT,shell=True)
+ if jmake: txt = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
+ else: txt = "cd %s; make -f Makefile.auto" % libdir
# if verbose, print output as build proceeds, else only print if fails
- if verbose: subprocess.call(str,shell=True)
+ if verbose: subprocess.call(txt,shell=True)
else:
- try: subprocess.check_output(str,stderr=subprocess.STDOUT,shell=True)
- except Exception as e: print e.output
+ try: subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ except Exception as e: print(e.output)
if not os.path.isfile("%s/libcolvars.a" % libdir) or \
not os.path.isfile("%s/Makefile.lammps" % libdir):
error("Unsuccessful build of lib/colvars library")
- else: print "Created lib/colvars library"
+ else: print("Created lib/colvars library")
# CUDA lib
-class CUDA:
+class CUDA(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.mode = "double"
self.arch = "35"
def help(self):
return """
-cuda mode=double arch=35
all args are optional and can be in any order
mode = double or mixed or single (def = double)
arch = M (def = 35)
M = 31,35,37,etc for Kepler
M = 20 for CC2.0 (GF100/110, e.g. C2050,GTX580,GTX470)
M = 21 for CC2.1 (GF104/114, e.g. GTX560, GTX460, GTX450)
M = 13 for CC1.3 (GF200, e.g. C1060, GTX285)
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-cuda args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-cuda args are invalid")
if words[0] == "mode": self.mode = words[1]
elif words[0] == "arch": self.arch = words[1]
else: error("-cuda args are invalid")
if self.mode != "double" and self.mode != "mixed" and \
self.mode != "single":
error("-cuda args are invalid")
if not self.arch.isdigit(): error("-cuda args are invalid")
def build(self):
libdir = dir.lib + "/cuda"
- commands.getoutput("cd %s; make clean" % libdir)
+ subprocess.check_output("cd %s; make clean" % libdir,stderr=subprocess.STDOUT,shell=True)
if self.mode == "double": n = 2
elif self.mode == "mixed": n = 3
elif self.mode == "single": n = 1
- if jmake: str = "cd %s; make -j %d precision=%d arch=%s" % \
+ if jmake: txt = "cd %s; make -j %d precision=%d arch=%s" % \
(libdir,jmake.n,n,self.arch)
- else: str = str = "cd %s; make precision=%d arch=%s" % \
+ else: txt = "cd %s; make precision=%d arch=%s" % \
(libdir,n,self.arch)
# if verbose, print output as build proceeds, else only print if fails
- if verbose: subprocess.call(str,shell=True)
+ if verbose: subprocess.call(txt,shell=True)
else:
- try: subprocess.check_output(str,stderr=subprocess.STDOUT,shell=True)
- except Exception as e: print e.output
+ try: subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ except Exception as e: print(e.output)
if not os.path.isfile("%s/liblammpscuda.a" % libdir) or \
not os.path.isfile("%s/Makefile.lammps" % libdir):
error("Unsuccessful build of lib/cuda library")
- else: print "Created lib/cuda library"
+ else: print("Created lib/cuda library")
# GPU lib
-class GPU:
+class GPU(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.make = "linux.double"
self.lammpsflag = self.modeflag = self.archflag = self.homeflag = 0
def help(self):
return """
-gpu make=suffix lammps=suffix2 mode=double arch=N home=path
all args are optional and can be in any order
make = use Makefile.suffix (def = linux.double)
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
mode = double or mixed or single (def = CUDA_PREC in makefile)
arch = 3x (x = digit for Kepler) or 2x (x = digit for Fermi)
(def = CUDA_ARCH in makefile)
home = path to Cuda, e.g. /usr/local/cuda (def = CUDA_HOME in makefile)
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-gpu args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-gpu args are invalid")
if words[0] == "make": self.make = words[1]
elif words[0] == "lammps":
self.lammps = words[1]
self.lammpsflag = 1
elif words[0] == "mode":
self.mode = words[1]
self.modeflag = 1
elif words[0] == "arch":
self.arch = words[1]
self.archflag = 1
elif words[0] == "home":
self.home = words[1]
self.homeflag = 1
else: error("-gpu args are invalid")
if self.modeflag and (self.mode != "double" and
self.mode != "mixed" and
self.mode != "single"):
error("-gpu args are invalid")
if self.archflag and not self.arch.isdigit():
error("-gpu args are invalid")
def build(self):
global gpubuildflag
gpubuildflag = 1
libdir = dir.lib + "/gpu"
make = MakeReader("%s/Makefile.%s" % (libdir,self.make))
if self.modeflag:
if self.mode == "double":
make.setvar("CUDA_PRECISION","-D_DOUBLE_DOUBLE")
elif self.mode == "mixed":
make.setvar("CUDA_PRECISION","-D_SINGLE_DOUBLE")
elif self.mode == "single":
make.setvar("CUDA_PRECISION","-D_SINGLE_SINGLE")
if self.archflag:
make.setvar("CUDA_ARCH","-arch=sm_%s" % self.arch)
if self.homeflag:
make.setvar("CUDA_HOME",self.home)
if self.lammpsflag:
make.setvar("EXTRAMAKE","Makefile.lammps.%s" % self.lammps)
make.write("%s/Makefile.auto" % libdir)
# special hack for shannon GPU cluster
# must use "srun make" if on it, else just make
# this is b/c Cuda libs are not all available on host
make = "make"
if "shannon" == platform.node(): make = "srun make"
- commands.getoutput("cd %s; %s -f Makefile.auto clean" % (libdir,make))
- if jmake: str = "cd %s; %s -j %d -f Makefile.auto" % (libdir,make,jmake.n)
- else: str = "cd %s; %s -f Makefile.auto" % (libdir,make)
+ subprocess.check_output("cd %s; %s -f Makefile.auto clean" % (libdir,make),stderr=subprocess.STDOUT,shell=True)
+ if jmake: txt = "cd %s; %s -j %d -f Makefile.auto" % (libdir,make,jmake.n)
+ else: txt = "cd %s; %s -f Makefile.auto" % (libdir,make)
# if verbose, print output as build proceeds, else only print if fails
- if verbose: subprocess.call(str,shell=True)
+ if verbose: subprocess.call(txt,shell=True)
else:
- try: subprocess.check_output(str,stderr=subprocess.STDOUT,shell=True)
- except Exception as e: print e.output
+ try: subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ except Exception as e: print(e.output)
if not os.path.isfile("%s/libgpu.a" % libdir) or \
not os.path.isfile("%s/Makefile.lammps" % libdir):
error("Unsuccessful build of lib/gpu library")
- else: print "Created lib/gpu library"
+ else: print("Created lib/gpu library")
# H5MD lib
-class H5MD:
+class H5MD(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.make = "h5cc"
self.lammpsflag = 0
def help(self):
return """
-h5md make=suffix lammps=suffix2
all args are optional and can be in any order
make = use Makefile.suffix (def = h5cc)
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-h5md args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-h5md args are invalid")
if words[0] == "make": self.make = words[1]
elif words[0] == "lammps":
self.lammps = words[1]
self.lammpsflag = 1
else: error("-h5md args are invalid")
def build(self):
libdir = dir.lib + "/h5md"
make = MakeReader("%s/Makefile.%s" % (libdir,self.make))
if self.lammpsflag:
make.setvar("EXTRAMAKE","Makefile.lammps.%s" % self.lammps)
make.write("%s/Makefile.auto" % libdir)
- commands.getoutput("cd %s; make clean" % libdir)
- str = "cd %s; make" % libdir
+ subprocess.check_output("cd %s; make clean" % libdir,stderr=subprocess.STDOUT,shell=True)
+ txt = "cd %s; make" % libdir
# if verbose, print output as build proceeds, else only print if fails
- if verbose: subprocess.call(str,shell=True)
+ if verbose: subprocess.call(txt,shell=True)
else:
- try: subprocess.check_output(str,stderr=subprocess.STDOUT,shell=True)
- except Exception as e: print e.output
+ try: subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ except Exception as e: print(e.output)
if not os.path.isfile("%s/libch5md.a" % libdir) or \
not os.path.isfile("%s/Makefile.lammps" % libdir):
error("Unsuccessful build of lib/h5md library")
- else: print "Created lib/h5md library"
+ else: print("Created lib/h5md library")
# MEAM lib
-class MEAM:
+class MEAM(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.make = "gfortran"
self.lammpsflag = 0
def help(self):
return """
-meam make=suffix lammps=suffix2
all args are optional and can be in any order
make = use Makefile.suffix (def = gfortran)
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-meam args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-meam args are invalid")
if words[0] == "make": self.make = words[1]
elif words[0] == "lammps":
self.lammps = words[1]
self.lammpsflag = 1
else: error("-meam args are invalid")
def build(self):
libdir = dir.lib + "/meam"
make = MakeReader("%s/Makefile.%s" % (libdir,self.make))
if self.lammpsflag:
make.setvar("EXTRAMAKE","Makefile.lammps.%s" % self.lammps)
make.write("%s/Makefile.auto" % libdir)
- commands.getoutput("cd %s; make -f Makefile.auto clean" % libdir)
+ subprocess.check_output("cd %s; make -f Makefile.auto clean" % libdir,stderr=subprocess.STDOUT,shell=True)
# do not use -j for MEAM build, parallel build does not work
- str = "cd %s; make -f Makefile.auto" % libdir
+ txt = "cd %s; make -f Makefile.auto" % libdir
# if verbose, print output as build proceeds, else only print if fails
- if verbose: subprocess.call(str,shell=True)
+ if verbose: subprocess.call(txt,shell=True)
else:
- try: subprocess.check_output(str,stderr=subprocess.STDOUT,shell=True)
- except Exception as e: print e.output
+ try: subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ except Exception as e: print(e.output)
if not os.path.isfile("%s/libmeam.a" % libdir) or \
not os.path.isfile("%s/Makefile.lammps" % libdir):
error("Unsuccessful build of lib/meam library")
- else: print "Created lib/meam library"
+ else: print("Created lib/meam library")
# POEMS lib
-class POEMS:
+class POEMS(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.make = "g++"
self.lammpsflag = 0
def help(self):
return """
-poems make=suffix lammps=suffix2
all args are optional and can be in any order
make = use Makefile.suffix (def = g++)
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-poems args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-poems args are invalid")
if words[0] == "make": self.make = words[1]
elif words[0] == "lammps":
self.lammps = words[1]
self.lammpsflag = 1
else: error("-poems args are invalid")
def build(self):
libdir = dir.lib + "/poems"
make = MakeReader("%s/Makefile.%s" % (libdir,self.make))
if self.lammpsflag:
make.setvar("EXTRAMAKE","Makefile.lammps.%s" % self.lammps)
make.write("%s/Makefile.auto" % libdir)
- commands.getoutput("cd %s; make -f Makefile.auto clean" % libdir)
- if jmake: str = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
- else: str = "cd %s; make -f Makefile.auto" % libdir
+ subprocess.check_output("cd %s; make -f Makefile.auto clean" % libdir,stderr=subprocess.STDOUT,shell=True)
+ if jmake: txt = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
+ else: txt = "cd %s; make -f Makefile.auto" % libdir
# if verbose, print output as build proceeds, else only print if fails
- if verbose: subprocess.call(str,shell=True)
+ if verbose: subprocess.call(txt,shell=True)
else:
- try: subprocess.check_output(str,stderr=subprocess.STDOUT,shell=True)
- except Exception as e: print e.output
+ try: subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ except Exception as e: print(e.output)
if not os.path.isfile("%s/libpoems.a" % libdir) or \
not os.path.isfile("%s/Makefile.lammps" % libdir):
error("Unsuccessful build of lib/poems library")
- else: print "Created lib/poems library"
+ else: print("Created lib/poems library")
# PYTHON lib
-class PYTHON:
+class PYTHON(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.make = "g++"
self.lammpsflag = 0
def help(self):
return """
-python lammps=suffix
arg is optional, use Makefile.lammps if not specified
lammps = use Makefile.lammps.suffix
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-python args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-python args are invalid")
if words[0] == "lammps":
self.lammps = words[1]
self.lammpsflag = 1
else: error("-python args are invalid")
def build(self):
libdir = dir.lib + "/python"
if self.lammpsflag:
- commands.getoutput("cd %s; cp Makefile.lammps.%s Makefile.lammps" %
+ subprocess.check_output("cd %s; cp Makefile.lammps.%s Makefile.lammps" %
(libdir,self.lammps))
if not os.path.isfile("%s/Makefile.lammps.%s" % (libdir,self.lammps)):
error("Unsuccessful creation of lib/python/Makefile.lammps.%s file" % self.lammps)
- else: print "Created lib/python/Makefile.lammps file"
+ else: print("Created lib/python/Makefile.lammps file")
# QMMM lib
-class QMMM:
+class QMMM(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.make = "gfortran"
self.lammpsflag = 0
def help(self):
return """
-qmmm make=suffix lammps=suffix2
all args are optional and can be in any order
make = use Makefile.suffix (def = gfortran)
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-qmmm args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-qmmm args are invalid")
if words[0] == "make": self.make = words[1]
elif words[0] == "lammps":
self.lammps = words[1]
self.lammpsflag = 1
else: error("-qmmm args are invalid")
def build(self):
libdir = dir.lib + "/qmmm"
make = MakeReader("%s/Makefile.%s" % (libdir,self.make))
if self.lammpsflag:
make.setvar("EXTRAMAKE","Makefile.lammps.%s" % self.lammps)
make.write("%s/Makefile.auto" % libdir)
- commands.getoutput("cd %s; make -f Makefile.auto clean" % libdir)
- if jmake: str = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
- else: str = "cd %s; make -f Makefile.auto" % libdir
+ subprocess.check_output("cd %s; make -f Makefile.auto clean" % libdir,stderr=subprocess.STDOUT,shell=True)
+ if jmake: txt = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
+ else: txt = "cd %s; make -f Makefile.auto" % libdir
# if verbose, print output as build proceeds, else only print if fails
- if verbose: subprocess.call(str,shell=True)
+ if verbose: subprocess.call(txt,shell=True)
else:
- try: subprocess.check_output(str,stderr=subprocess.STDOUT,shell=True)
- except Exception as e: print e.output
+ try: subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ except Exception as e: print(e.output)
if not os.path.isfile("%s/libqmmm.a" % libdir) or \
not os.path.isfile("%s/Makefile.lammps" % libdir):
error("Unsuccessful build of lib/qmmm library")
- else: print "Created lib/qmmm library"
+ else: print("Created lib/qmmm library")
# REAX lib
-class REAX:
+class REAX(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.make = "gfortran"
self.lammpsflag = 0
def help(self):
return """
-reax make=suffix lammps=suffix2
all args are optional and can be in any order
make = use Makefile.suffix (def = gfortran)
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-reax args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-reax args are invalid")
if words[0] == "make": self.make = words[1]
elif words[0] == "lammps":
self.lammps = words[1]
self.lammpsflag = 1
else: error("-reax args are invalid")
def build(self):
libdir = dir.lib + "/reax"
make = MakeReader("%s/Makefile.%s" % (libdir,self.make))
if self.lammpsflag:
make.setvar("EXTRAMAKE","Makefile.lammps.%s" % self.lammps)
make.write("%s/Makefile.auto" % libdir)
commands.getoutput("cd %s; make -f Makefile.auto clean" % libdir)
- if jmake: str = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
- else: str = "cd %s; make -f Makefile.auto" % libdir
+ if jmake: txt = "cd %s; make -j %d -f Makefile.auto" % (libdir,jmake.n)
+ else: txt = "cd %s; make -f Makefile.auto" % libdir
# if verbose, print output as build proceeds, else only print if fails
- if verbose: subprocess.call(str,shell=True)
+ if verbose: subprocess.call(txt,shell=True)
else:
- try: subprocess.check_output(str,stderr=subprocess.STDOUT,shell=True)
- except Exception as e: print e.output
+ try: subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ except Exception as e: print(e.output)
if not os.path.isfile("%s/libreax.a" % libdir) or \
not os.path.isfile("%s/Makefile.lammps" % libdir):
error("Unsuccessful build of lib/reax library")
- else: print "Created lib/reax library"
+ else: print("Created lib/reax library")
# VORONOI lib
-class VORONOI:
+class VORONOI(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.install = ""
def help(self):
return """
-voronoi install="-d dir -v version -g -b -i installdir -l incdir libdir"
arg is optional, only needed if want to run install.py script
install = args to use with lib/voronoi/install.py script
must enclose in quotes since install.py args have switches
install.py can download, build, install, setup links to the Voro++ library
see lib/voronoi/README for details on Voro++ and using install.py
"""
def check(self):
if self.inlist != None and len(self.inlist) == 0:
error("-voronoi args are invalid")
for one in self.inlist:
words = one.split('=')
if len(words) != 2: error("-voronoi args are invalid")
if words[0] == "install": self.install = words[1]
else: error("-voronoi args are invalid")
def build(self):
if not self.install: return
libdir = dir.lib + "/voronoi"
cmd = "cd %s; python install.py %s" % (libdir,self.install)
- txt = commands.getoutput(cmd)
- if verbose: print txt
- print "Created lib/voronoi library"
+ txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True).decode()
+ if verbose: print(txt)
+ print("Created lib/voronoi library")
# ----------------------------------------------------------------
# build classes for intel, kokkos build options
# ----------------------------------------------------------------
# Intel class
-class Intel:
+class Intel(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.mode = "cpu"
def help(self):
return """
-intel mode
mode = cpu or phi (def = cpu)
build Intel package for CPU or Xeon Phi
"""
def check(self):
if self.inlist == None: return
if len(self.inlist) != 1: error("-intel args are invalid")
self.mode = self.inlist[0]
if self.mode != "cpu" and self.mode != "phi":
error("-intel args are invalid")
# Kokkos class
-class Kokkos:
+class Kokkos(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.mode = ""
self.archgpu = None
self.archcpu = None
def help(self):
return """
-kokkos mode archgpu=N archcpu=SNB
mode is not optional, arch is optional
mode = omp or cuda or phi (def = KOKKOS_DEVICES setting in Makefile )
build Kokkos package for omp or cuda or phi
sets KOKKOS_DEVICES to "OpenMP" (omp, phi) or "Cuda, OpenMP" (cuda)
archgpu = number like 35 (Kepler) or 21 (Fermi) (def = none)
sets KOKKOS_ARCH for GPU to appropriate value
archcpu = SNB or HSW or BGQ or Power7 or Power8 (def = none)
for CPU = SandyBridge, Haswell, BGQ, Power7, Power8
sets KOKKOS_ARCH for GPU to appropriate value
"""
def check(self):
- print self.inlist
+ print(self.inlist)
if self.inlist != None and len(self.inlist) == 0:
error("-kokkos args are invalid")
if self.inlist == None: return
if len(self.inlist) < 1: error("-kokkos args are invalid")
self.mode = self.inlist[0]
if self.mode != "omp" and self.mode != "cuda" and self.mode != "phi":
error("-kokkos args are invalid")
for one in self.inlist[1:]:
words = one.split('=')
if len(words) != 2: error("-kokkos args are invalid")
if words[0] == "archgpu": self.archgpu = words[1]
elif words[0] == "archcpu": self.archcpu = words[1]
else: error("-kokkos args are invalid")
# ----------------------------------------------------------------
# makefile classes for CC, FLAGS, MPI, JPG, PNG, FFT settings
# ----------------------------------------------------------------
# Cc class
-class Cc:
+class Cc(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.compiler = self.abbrev = ""
self.wrap = ""
self.parent = ""
def help(self):
return """
-cc compiler wrap=wcompiler,parent
alter CC setting in Makefile.auto
only happens if new Makefile.auto is created by use of "file" action
compiler is required, all other args are optional
compiler = any string with g++ or icc or icpc
or mpi (or mpicxx, mpiCC, mpiicpc, etc)
can be compiler name or full path to compiler
mpi by itself is changed to mpicxx
wcompiler = compiler for mpi wrapper to use
use nvcc for building for Kokkos/cuda with provided nvcc_wrapper
parent = openmpi or mpich
parent style determines syntax for setting low-level compiler
"""
def check(self):
if len(self.inlist) < 1: error("-cc args are invalid")
self.compiler = self.inlist[0]
if self.compiler == "mpi":
self.compiler = "mpicxx"
self.abbrev = "mpi"
elif self.compiler.startswith("mpi"):
self.abbrev = "mpi"
elif self.compiler == "g++" or self.compiler == "icc" or \
self.compiler == "icpc":
self.abbrev = self.compiler
elif "mpi" in self.compiler: self.abbrev = "mpi"
elif "g++" in self.compiler: self.abbrev = "g++"
elif "icc" in self.compiler: self.abbrev = "icc"
elif "icpc" in self.compiler: self.abbrev = "icpc"
else: error("-cc args are invalid")
for one in self.inlist[1:]:
words = one.split('=')
if len(words) != 2: error("-cc args are invalid")
args = words[1].split(',')
if len(args) != 2: error("-cc args are invalid")
if words[0] == "wrap":
if self.abbrev != "mpi": error("-cc compiler is not a wrapper")
self.wrap = args[0]
self.parent = args[1]
else: error("-cc args are invalid")
# Flags class
-class Flags:
+class Flags(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.flags = []
def help(self):
return """
-flags var action N f1 f2 ... var action N f1 f2 ...
alter variable settings (flags) in Makefile.auto
only happens if new Makefile.auto is created by use of "file" action
var = CCFLAGS, LINKFLAGS, LIB, etc
any variable in Makefile.auto, must already exist
action = add or del
N = # of flags to follow
f1,f2,etc = flag to add or delete
"-" char will be prepended to each flag
for example: add 4 g O3 xHost "fp-model fast=2"
will add: -g -O3 -xHost -fp-model fast=2
for add: if flag already exists, no change is made
for delete: flag of form "-O*", will delete any wildcard match
for -O,-O2,-O3,etc: existing -O* will first be removed
"""
def check(self):
if len(self.inlist) < 1: error("-flags args are invalid")
narg = len(self.inlist)
i = 0
while i < narg:
if i+3 > narg: error("-flags args are invalid")
var = self.inlist[i]
action = self.inlist[i+1]
if action != "add" and action != "del": error("-flags args are invalid")
nflag = int(self.inlist[i+2])
i += 3
if i+nflag > narg: error("-flags args are invalid")
flags = self.inlist[i:i+nflag]
self.flags.append([var,action,flags])
i += nflag
# Mpi class
-class Mpi:
+class Mpi(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.style = self.dir = ""
def help(self):
return """
-mpi style dir=path
alter MPI settings in Makefile.auto
only happens if new Makefile.auto is created by use of "file" action
style is required, all other args are optional
style = mpi or mpich or ompi or serial
mpi = no MPI settings (assume compiler is MPI wrapper)
mpich = use explicit settings for MPICH
ompi = use explicit settings for OpenMPI
serial = use settings for src/STUBS library
dir = path for MPICH or OpenMPI directory
add -I and -L settings for include and lib sub-dirs
"""
def check(self):
if len(self.inlist) < 1: error("-mpi args are invalid")
self.style = self.inlist[0]
if self.style != "mpi" and self.style != "mpich" and \
self.style != "ompi" and self.style != "serial":
error("-mpi args are invalid")
for one in self.inlist[1:]:
words = one.split('=')
if len(words) != 2: error("-mpi args are invalid")
if words[0] == "dir": self.dir = words[1]
else: error("-mpi args are invalid")
# Fft class
-class Fft:
+class Fft(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.dir = self.incdir = self.libdir = ""
def help(self):
return """
-fft mode lib=libname dir=homedir idir=incdir ldir=libdir
alter FFT settings in Makefile.auto
only happens if new Makefile.auto is created by use of "file" action
mode is required, all other args are optional
first removes all current FFT variable settings
mode = none or fftw or fftw3 or ...
adds -DFFT_MODE setting
lib = name of FFT library to link with (def is libname = mode)
adds -llib{libname} setting, e.g. -llibfftw3
dir = home dir for include and library files (def = none)
adds -Idir/include and -Ldir/lib settings
if set, overrides idir and ldir args
idir = dir for include file (def = none)
adds -Iidir setting
ldir = dir for library file (def = none)
adds -Lldir setting
"""
def check(self):
if not len(self.inlist): error("-fft args are invalid")
self.mode = self.inlist[0]
self.lib = "-l%s" % self.mode
for one in self.inlist[1:]:
words = one.split('=')
if len(words) != 2: error("-fft args are invalid")
if words[0] == "lib": self.lib = "-l%s" % words[1]
elif words[0] == "dir": self.dir = words[1]
elif words[0] == "idir": self.incdir = words[1]
elif words[0] == "ldir": self.libdir = words[1]
else: error("-fft args are invalid")
# Jpg class
-class Jpg:
+class Jpg(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.on = 1
self.dir = self.incdir = self.libdir = ""
def help(self):
return """
-jpg flag dir=homedir idir=incdir ldir=libdir
alter JPG settings in Makefile.auto
only happens if new Makefile.auto is created by use of "file" action
change JPG settings in makefile
all args are optional, flag must come first if specified
flag = yes or no (def = yes)
include or exclude JPEG support
adds/removes -DLAMMPS_JPEG and -ljpeg settings
dir = home dir for include and library files (def = none)
adds -Idir/include and -Ldir/lib settings
if set, overrides idir and ldir args
idir = dir for include file (def = none)
adds -Iidir setting
ldir = dir for library file (def = none)
adds -Lldir setting
"""
def check(self):
for i,one in enumerate(self.inlist):
if one == "no" and i == 0: self.on = 0
elif one == "yes" and i == 0: self.on = 1
else:
words = one.split('=')
if len(words) != 2: error("-jpeg args are invalid")
if words[0] == "dir": self.dir = words[1]
elif words[0] == "idir": self.incdir = words[1]
elif words[0] == "ldir": self.libdir = words[1]
else: error("-jpeg args are invalid")
# Png class
-class Png:
+class Png(object):
def __init__(self,list):
self.inlist = copy.copy(list)
self.on = 1
self.dir = self.incdir = self.libdir = ""
def help(self):
return """
-png flag dir=homedir idir=incdir ldir=libdir
alter PNG settings in Makefile.auto
only happens if new Makefile.auto is created by use of "file" action
all args are optional, flag must come first if specified
flag = yes or no (def = yes)
include or exclude PNG support
adds/removes -DLAMMPS_PNG and -lpng settings
dir = home dir for include and library files (def = none)
adds -Idir/include and -Ldir/lib settings
if set, overrides idir and ldir args
idir = dir for include file (def = none)
adds -Iidir setting
ldir = dir for library file (def = none)
adds -Lldir setting
"""
def check(self):
for i,one in enumerate(self.inlist):
if one == "no" and i == 0: self.on = 0
elif one == "yes" and i == 0: self.on = 1
else:
words = one.split('=')
if len(words) != 2: error("-png args are invalid")
if words[0] == "dir": self.dir = words[1]
elif words[0] == "idir": self.incdir = words[1]
elif words[0] == "ldir": self.libdir = words[1]
else: error("-png args are invalid")
# ----------------------------------------------------------------
# auxiliary classes
# ----------------------------------------------------------------
# read, tweak, and write a Makefile
-class MakeReader:
+class MakeReader(object):
# read a makefile
# flag = 0 if file is full path name
# flag = 1,2 if file is suffix for any Makefile.machine under src/MAKE
# look for this file in same order that src/Makefile does
# if flag = 1, read the file
# if flag = 2, just check if file exists
def __init__(self,file,flag=0):
if flag == 0:
if not os.path.isfile(file): error("Makefile %s does not exist" % file)
lines = open(file,'r').readlines()
else:
mfile = "%s/MAKE/MINE/Makefile.%s" % (dir.src,file)
if not os.path.isfile(mfile):
mfile = "%s/MAKE/Makefile.%s" % (dir.src,file)
if not os.path.isfile(mfile):
mfile = "%s/MAKE/OPTIONS/Makefile.%s" % (dir.src,file)
if not os.path.isfile(mfile):
mfile = "%s/MAKE/MACHINES/Makefile.%s" % (dir.src,file)
if not os.path.isfile(mfile):
error("Makefile.%s does not exist" % file)
if flag == 1: lines = open(mfile,'r').readlines()
else: return
# scan lines of makefile
# if not a variable line, just copy to newlines
# if a variable line, concatenate any continuation lines
# convert variable to var dict entry: key = name, value = list of words
# discard any portion of value string with a comment char
# varinfo = list of variable info: (name, name with whitespace for print)
# add index into varinfo to newlines
# ccindex = index of "CC =" line, to add OMPI var before it
# lmpindex = index of "LAMMPS-specific settings"
# line to add KOKKOS vars before it
var = {}
varinfo = []
newlines = []
pattern = "(\S+\s+=\s+)(.*)"
conditional = 0
multiline = 0
self.ccindex = self.lmpindex = 0
for line in lines:
line = line[:-1]
if "CC =" in line: self.ccindex = len(newlines)
if "LAMMPS-specific settings" in line: self.lmpindex = len(newlines)
if "ifeq" in line:
conditional = 1
continue
if conditional:
if "endif" in line:
conditional = 0
continue
if multiline:
if '#' in line: line = line[:line.find('#')]
morevalues = line.split()
values = values[:-1] + morevalues
if values[-1] != '\\':
var[name] = values
multiline = 0
newlines.append(str(len(varinfo)))
varinfo.append((name,namewhite))
continue
varflag = 1
if len(line.strip()) == 0: varflag = 0
elif line.lstrip()[0] == '#': varflag = 0
else:
m = re.match(pattern,line)
if not m: varflag = 0
if varflag:
namewhite = m.group(1)
name = namewhite.split()[0]
if name in var:
error("Makefile variable %s appears more than once" % name)
remainder = m.group(2)
if '#' in remainder: remainder = remainder[:remainder.find('#')]
values = remainder.split()
if values and values[-1] == '\\': multiline = 1
else:
var[name] = values
newlines.append(str(len(varinfo)))
varinfo.append((name,namewhite))
else:
newlines.append(line)
self.var = var
self.varinfo = varinfo
self.lines = newlines
# return list of values associated with var
# return None if var not defined
def getvar(self,var):
if var in self.var: return self.var[var]
else: return None
# set var to single value
# if var not defined, error
def setvar(self,var,value):
if var not in self.var: error("Variable %s not in makefile" % var)
self.var[var] = [value]
# add value to var
# do not add if value already defined by var
# if var not defined,
# create new variable using "where"
# where="cc", line before "CC =" line, use ":="
# where="lmp", 2 lines before "LAMMPS-specific settings" line, use "="
def addvar(self,var,value,where=""):
if var in self.var:
if value not in self.var[var]: self.var[var].append(value)
else:
if not where:
error("Variable %s with value %s is not in makefile" % (var,value))
if where == "cc":
if not self.ccindex: error("No 'CC =' line in makefile to add variable")
index = self.ccindex
varwhite = "%s :=\t\t" % var
elif where == "lmp":
if not self.lmpindex: error("No 'LAMMPS-specific settings line' " +
"in makefile to add variable")
index = self.lmpindex - 2
varwhite = "%s =\t\t" % var
self.var[var] = [value]
varwhite = "%s =\t\t" % var
self.lines.insert(index,str(len(self.varinfo)))
self.varinfo.append((var,varwhite))
# if value = None, remove entire var
# no need to update lines or varinfo, write() will ignore deleted vars
# else remove value from var
# value can have trailing '*' to remove wildcard match
# if var or value not defined, ignore it
def delvar(self,var,value=None):
#if var == "KOKKOS_DEVICES":
# print self.var,value
if var not in self.var: return
if not value:
del self.var[var]
#print "AGAIN",self.var
elif value and value[-1] != '*':
if value not in self.var[var]: return
self.var[var].remove(value)
else:
value = value[:-1]
values = self.var[var]
dellist = []
for i,one in enumerate(values):
if one.startswith(value): dellist.append(i)
while dellist: values.pop(dellist.pop())
self.var[var] = values
# write stored makefile lines to file, using vars that may have been updated
# do not write var if not in dict, since has been deleted
# wrap var values into multiple lines if needed
# file = 1 if this is Makefile.auto, change 1st line to use "auto"
def write(self,file,flag=0):
fp = open(file,'w')
for i,line in enumerate(self.lines):
if not line.isdigit():
if flag and i == 0:
line = "# auto = makefile auto-generated by Make.py"
- print >>fp,line
+ print(line, file=fp)
else:
index = int(line)
name = self.varinfo[index][0]
txt = self.varinfo[index][1]
if name not in self.var: continue
values = self.var[name]
- print >>fp,"%s%s" % (txt,' '.join(values))
+ print("%s%s" % (txt,' '.join(values)), file=fp)
# ----------------------------------------------------------------
# main program
# ----------------------------------------------------------------
# parse command-line args
# switches dict: key = switch letter, value = list of args
# switch_order = list of switches in order
# will possibly be merged with redo file args below
cmd_switches,cmd_switch_order = parse_args(sys.argv[1:])
if "v" in cmd_switches:
# debug
#print "Command-line parsing:"
#for switch in cmd_switch_order:
# print " %s: %s" % (switch,' '.join(cmd_switches[switch]))
pass
# check for redo switch, process redo file
# redolist = list of commands to execute
redoflag = 0
redolist = []
if 'r' in cmd_switches and 'h' not in cmd_switches:
redoflag = 1
redo = Redo(cmd_switches['r'])
redo.check()
redo.setup()
redolist = redo.commands
redoindex = 0
del redo
if not redolist: error("No commands to execute from redo file")
# loop over Make.py commands
# if no redo switch, loop once for command-line command
# if redo, loop over one or more commands from redo file
while 1:
# if redo:
# parse next command from redo file
# use command-line switches to add/replace file command switches
# do not add -r, since already processed
# and don't want -r swtich to appear in Make.py.last file
# if -a in both: concatenate, de-dup,
# specified exe/machine action replaces file exe/machine action
# print resulting new command
# else just use command-line switches
if redoflag:
if redoindex == len(redolist): break
args = redolist[redoindex].split()
switches,switch_order = parse_args(args)
redoindex += 1
for switch in cmd_switches:
if switch == 'r': continue
if switch == 'a' and switch in switches:
tmp = Actions(cmd_switches[switch] + switches[switch])
tmp.dedup()
switches[switch] = tmp.inlist
continue
if switch not in switches: switch_order.append(switch)
switches[switch] = cmd_switches[switch]
argstr = switch2str(switches,switch_order)
- print "Redo command: Make.py",argstr
+ print("Redo command: Make.py",argstr)
else:
switches = cmd_switches
switch_order = cmd_switch_order
# initialize all class variables to None
for one in switchclasses: exec("%s = None" % one)
for one in libclasses: exec("%s = None" % one)
for one in buildclasses: exec("%s = None" % one)
for one in makeclasses: exec("%s = None" % one)
# classes = dictionary of created classes
# key = switch, value = class instance
classes = {}
for switch in switches:
if len(switch) == 1 and switch in abbrevs:
i = abbrevs.index(switch)
txt = '%s = classes["%s"] = %s(switches["%s"])' % \
(switchclasses[i],switch,switchclasses[i].capitalize(),switch)
exec(txt)
elif switch in libclasses:
i = libclasses.index(switch)
txt = '%s = classes["%s"] = %s(switches["%s"])' % \
(libclasses[i],switch,libclasses[i].upper(),switch)
exec(txt)
elif switch in buildclasses:
i = buildclasses.index(switch)
txt = '%s = classes["%s"] = %s(switches["%s"])' % \
(buildclasses[i],switch,buildclasses[i].capitalize(),switch)
exec(txt)
elif switch in makeclasses:
i = makeclasses.index(switch)
txt = '%s = classes["%s"] = %s(switches["%s"])' % \
(makeclasses[i],switch,makeclasses[i].capitalize(),switch)
exec(txt)
else: error("Unknown command-line switch -%s" % switch)
# print help messages and exit
if help or (actions and "-h" in actions.inlist) or not switches:
if not help: help = Help(None)
- print help.help()
+ print(help.help())
for switch in switch_order:
if switch == "h": continue
- print classes[switch].help()[1:]
+ print(classes[switch].help()[1:])
sys.exit()
# create needed default classes if not specified with switch
# dir and packages plus lib and build classes so defaults are set
if not dir: dir = Dir(None)
if not packages: packages = Packages(None)
for one in libclasses:
txt = "if not %s: %s = %s(None)" % (one,one,one.upper())
exec(txt)
for one in buildclasses:
txt = "if not %s: %s = %s(None)" % (one,one,one.capitalize())
exec(txt)
# error check on args for all classes
for switch in classes: classes[switch].check()
# prep for action
# actions.setup() detects if last action = machine
# if yes, induce addition of "-m" and "-o" switches
dir.setup()
packages.setup()
if actions:
machine = actions.setup()
if machine:
switches['a'][-1] = "exe"
if 'm' not in switches:
switches['m'] = [machine]
switch_order.insert(-1,'m')
makefile = classes['m'] = Makefile(switches['m'])
makefile.check()
if 'o' not in switches:
switches['o'] = [machine]
switch_order.insert(-1,'o')
output = classes['o'] = Output(switches['o'])
output.check()
# perform actions
packages.install()
if actions:
for action in actions.alist:
- print "Action %s ..." % action
+ print("Action %s ..." % action)
if action.startswith("lib-"): actions.lib(action[4:])
elif action == "file": actions.file("file")
elif action == "clean": actions.clean()
elif action == "exe": actions.exe()
packages.uninstall()
# create copy of executable if requested, and exe action performed
if output and actions and "exe" in actions.alist:
txt = "cp %s/lmp_auto %s/lmp_%s" % (dir.src,dir.cwd,output.machine)
- commands.getoutput(txt)
- print "Created lmp_%s in %s" % (output.machine,dir.cwd)
+ subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ print("Created lmp_%s in %s" % (output.machine,dir.cwd))
# create copy of Makefile.auto if requested, and file or exe action performed
# ditto for library Makefile.auto and Makefile.lammps files
-
+
if zoutput and actions and \
("file" in actions.alist or "exe" in actions.alist):
txt = "cp %s/MAKE/MINE/Makefile.auto %s/MAKE/MINE/Makefile.%s" % \
(dir.src,dir.src,zoutput.machine)
- commands.getoutput(txt)
- print "Created Makefile.%s in %s/MAKE/MINE" % (zoutput.machine,dir.src)
+ subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ print("Created Makefile.%s in %s/MAKE/MINE" % (zoutput.machine,dir.src))
if gpubuildflag:
txt = "cp %s/gpu/Makefile.auto %s/MAKE/MINE/Makefile_gpu.%s" % \
(dir.lib,dir.src,zoutput.machine)
- commands.getoutput(txt)
- print "Created Makefile_gpu.%s in %s/MAKE/MINE" % \
- (zoutput.machine,dir.src)
+ subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ print("Created Makefile_gpu.%s in %s/MAKE/MINE" % \
+ (zoutput.machine,dir.src))
txt = "cp %s/gpu/Makefile.lammps %s/MAKE/MINE/Makefile_gpu_lammps.%s" % \
(dir.lib,dir.src,zoutput.machine)
- commands.getoutput(txt)
- print "Created Makefile_gpu_lammps.%s in %s/MAKE/MINE" % \
- (zoutput.machine,dir.src)
+ subprocess.check_output(txt,stderr=subprocess.STDOUT,shell=True)
+ print("Created Makefile_gpu_lammps.%s in %s/MAKE/MINE" % \
+ (zoutput.machine,dir.src))
# write current Make.py command to src/Make.py.last
fp = open("%s/Make.py.last" % dir.src,'w')
- print >>fp,"# last invoked Make.py command"
- print >>fp,switch2str(switches,switch_order)
+ print("# last invoked Make.py command", file=fp)
+ print(switch2str(switches,switch_order), file=fp)
fp.close()
# if not redoflag, done
if not redoflag: break
diff --git a/src/Make.sh b/src/Make.sh
index 3332be92c..fbed1a8bc 100644
--- a/src/Make.sh
+++ b/src/Make.sh
@@ -1,111 +1,117 @@
# Make.sh = update Makefile.lib, Makefile.shlib, Makefile.list
# or style_*.h files
# Syntax: sh Make.sh style
# sh Make.sh Makefile.lib
# sh Make.sh Makefile.shlib
# sh Make.sh Makefile.list
+# turn off enforced customizations
+GREP_OPTIONS=
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL GREP_OPTIONS
+
# function to create one style_*.h file
# must whack *.d files that depend on style_*.h file,
# else Make will not recreate them
style () {
list=`grep -sl $1 $2*.h`
if (test -e style_$3.tmp) then
rm -f style_$3.tmp
fi
for file in $list; do
qfile="\"$file\""
echo "#include $qfile" >> style_$3.tmp
done
if (test ! -e style_$3.tmp) then
if (test ! -e style_$3.h) then
touch style_$3.h
elif (test "`cat style_$3.h`" != "") then
rm -f style_$3.h
touch style_$3.h
rm -f Obj_*/$4.d
if (test $5) then
rm -f Obj_*/$5.d
fi
rm -f Obj_*/lammps.d
fi
elif (test ! -e style_$3.h) then
mv style_$3.tmp style_$3.h
rm -f Obj_*/$4.d
if (test $5) then
rm -f Obj_*/$5.d
fi
rm -f Obj_*/lammps.d
elif (test "`diff --brief style_$3.h style_$3.tmp`" != "") then
mv style_$3.tmp style_$3.h
rm -f Obj_*/$4.d
if (test $5) then
rm -f Obj_*/$5.d
fi
rm -f Obj_*/lammps.d
else
rm -f style_$3.tmp
fi
}
# create individual style files
# called by "make machine"
# col 1 = string to search for
# col 2 = search in *.h files starting with this name
# col 3 = prefix of style file
# col 4
if (test $1 = "style") then
style ANGLE_CLASS angle_ angle force
style ATOM_CLASS atom_vec_ atom atom atom_vec_hybrid
style BODY_CLASS body_ body atom_vec_body
style BOND_CLASS bond_ bond force
style COMMAND_CLASS "" command input
style COMPUTE_CLASS compute_ compute modify modify_cuda
style DIHEDRAL_CLASS dihedral_ dihedral force
style DUMP_CLASS dump_ dump output write_dump
style FIX_CLASS fix_ fix modify
style IMPROPER_CLASS improper_ improper force
style INTEGRATE_CLASS "" integrate update
style KSPACE_CLASS "" kspace force
style MINIMIZE_CLASS min_ minimize update
style PAIR_CLASS pair_ pair force
style READER_CLASS reader_ reader read_dump
style REGION_CLASS region_ region domain
# edit Makefile.lib, for creating non-shared lib
# called by "make makelib"
# use current list of *.cpp and *.h files in src dir w/out main.cpp
elif (test $1 = "Makefile.lib") then
list=`ls -1 *.cpp | sed s/^main\.cpp// | tr "[:cntrl:]" " "`
sed -i -e "s/SRC = .*/SRC = $list/" Makefile.lib
list=`ls -1 *.h | tr "[:cntrl:]" " "`
sed -i -e "s/INC = .*/INC = $list/" Makefile.lib
# edit Makefile.shlib, for creating shared lib
# called by "make makeshlib"
# use current list of *.cpp and *.h files in src dir w/out main.cpp
elif (test $1 = "Makefile.shlib") then
list=`ls -1 *.cpp | sed s/^main\.cpp// | tr "[:cntrl:]" " "`
sed -i -e "s/SRC = .*/SRC = $list/" Makefile.shlib
list=`ls -1 *.h | tr "[:cntrl:]" " "`
sed -i -e "s/INC = .*/INC = $list/" Makefile.shlib
# edit Makefile.list
# called by "make makelist"
# use current list of *.cpp and *.h files in src dir
elif (test $1 = "Makefile.list") then
list=`ls -1 *.cpp | tr "[:cntrl:]" " "`
sed -i -e "s/SRC = .*/SRC = $list/" Makefile.list
list=`ls -1 *.h | tr "[:cntrl:]" " "`
sed -i -e "s/INC = .*/INC = $list/" Makefile.list
fi
diff --git a/src/OPT/Install.sh b/src/OPT/Install.sh
index 2374072a6..ca1231c61 100644
--- a/src/OPT/Install.sh
+++ b/src/OPT/Install.sh
@@ -1,44 +1,48 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
# arg1 = file, arg2 = file it depends on
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# list of files with optional dependencies
action pair_eam_alloy_opt.cpp pair_eam_alloy.cpp
action pair_eam_alloy_opt.h pair_eam_alloy.cpp
action pair_eam_fs_opt.cpp pair_eam_fs.cpp
action pair_eam_fs_opt.h pair_eam_fs.cpp
action pair_eam_opt.cpp pair_eam.cpp
action pair_eam_opt.h pair_eam.cpp
action pair_lj_charmm_coul_long_opt.cpp pair_lj_charmm_coul_long.cpp
action pair_lj_charmm_coul_long_opt.h pair_lj_charmm_coul_long.cpp
action pair_lj_cut_coul_long_opt.cpp pair_lj_cut_coul_long.cpp
action pair_lj_cut_coul_long_opt.h pair_lj_cut_coul_long.cpp
action pair_lj_cut_opt.cpp
action pair_lj_cut_opt.h
action pair_lj_cut_tip4p_long_opt.cpp pair_lj_cut_tip4p_long.cpp
action pair_lj_cut_tip4p_long_opt.h pair_lj_cut_tip4p_long.cpp
action pair_lj_long_coul_long_opt.cpp pair_lj_long_coul_long.cpp
action pair_lj_long_coul_long_opt.h pair_lj_long_coul_long.cpp
action pair_morse_opt.cpp
action pair_morse_opt.h
diff --git a/src/POEMS/Install.sh b/src/POEMS/Install.sh
index b03792e4f..7996f542b 100644
--- a/src/POEMS/Install.sh
+++ b/src/POEMS/Install.sh
@@ -1,60 +1,64 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
# arg1 = file, arg2 = file it depends on
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*poems[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/poems |' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/poems |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&-lpoems |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*poems.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/poems\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*poems[^ \t]* //' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*poems.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/PYTHON/Install.sh b/src/PYTHON/Install.sh
index 02c7acc81..3d6f71958 100755
--- a/src/PYTHON/Install.sh
+++ b/src/PYTHON/Install.sh
@@ -1,69 +1,73 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
# arg1 = file, arg2 = file it depends on
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# force rebuild of files with LMP_KOKKOS switch
# also variable so its *.d dependence on changed python_wrapper.h is rebuilt
touch ../python_wrapper.h
touch ../variable.cpp
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*python[^ \t]* //' ../Makefile.package
sed -i -e 's/[^ \t]*PYTHON[^ \t]* //g' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-DLMP_PYTHON |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(python_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(python_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(python_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*python.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/python\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*python[^ \t]* //' ../Makefile.package
sed -i -e 's/[^ \t]*PYTHON[^ \t]* //g' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*python.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/Package.sh b/src/Package.sh
index 80677665e..ce3819b59 100644
--- a/src/Package.sh
+++ b/src/Package.sh
@@ -1,87 +1,91 @@
# Package.sh = package management, called from Makefile
# Syntax: sh Package.sh DIR status/update/overwrite/diff
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# package is already installed if any package *.cpp or *.h file is in src
# else not installed
cd $1
installed=0
for file in *.cpp *.h; do
if (test -e ../$file) then
installed=1
fi
done
# status, only if installed
# issue warning for any package file not in src or that is different
if (test $2 = "status") then
if (test $installed = 1) then
echo "Installed YES: package $1"
for file in *.cpp *.h; do
if (test ! -e ../$file) then
echo " src/$file does not exist"
elif (! cmp -s $file ../$file) then
echo " src/$file and $1/$file are different"
fi
done
else
echo "Installed NO: package $1"
fi
# update, only if installed
# perform a re-install, but only if the package is already installed
elif (test $2 = "update") then
echo "Updating src files from $1 package files"
if (test $installed = 1) then
echo " updating package $1"
if (test -e Install.sh) then
/bin/sh Install.sh 2
else
/bin/sh ../Install.sh 2
fi
cd ..
/bin/sh Depend.sh $1
else
echo " $1 package is not installed"
fi
# overwrite, only if installed
# overwrite package file with src file, if the two are different
elif (test $2 = "overwrite") then
echo "Overwriting $1 package files with src files"
if (test $installed = 1) then
for file in *.cpp *.h; do
if (test ! -e ../$file) then
continue
elif (! cmp -s $file ../$file) then
echo " overwriting $1/$file"
cp ../$file .
fi
done
else
echo " $1 package is not installed"
fi
# diff
# if installed:
# show any differences between src files and package files
elif (test $2 = "diff") then
if (test $installed = 1) then
echo "Installed YES: package $1"
for file in *.cpp *.h; do
if (test ! -e ../$file) then
echo " src/$file does not exist"
elif (! cmp -s $file ../$file) then
echo "************************************************"
echo "diff -u $1/$file src/$file "
echo "************************************************"
diff -u $file ../$file
fi
done
fi
fi
diff --git a/src/QEQ/fix_qeq_slater.cpp b/src/QEQ/fix_qeq_slater.cpp
index ad1c65210..44e1a0750 100644
--- a/src/QEQ/fix_qeq_slater.cpp
+++ b/src/QEQ/fix_qeq_slater.cpp
@@ -1,387 +1,379 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Ray Shan (Sandia)
------------------------------------------------------------------------- */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fix_qeq_slater.h"
#include "atom.h"
#include "comm.h"
#include "domain.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "update.h"
#include "force.h"
#include "group.h"
#include "pair.h"
#include "kspace.h"
#include "respa.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace MathConst;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixQEqSlater::FixQEqSlater(LAMMPS *lmp, int narg, char **arg) :
FixQEq(lmp, narg, arg)
{
alpha = 0.20;
// optional arg
int iarg = 8;
while (iarg < narg) {
if (strcmp(arg[iarg],"alpha") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/slater command");
alpha = atof(arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix qeq/slater command");
}
if (streitz_flag) extract_streitz();
}
/* ---------------------------------------------------------------------- */
void FixQEqSlater::init()
{
if (!atom->q_flag)
error->all(FLERR,"Fix qeq/slater requires atom attribute q");
ngroup = group->count(igroup);
if (ngroup == 0) error->all(FLERR,"Fix qeq/slater group has no atoms");
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->fix = 1;
neighbor->requests[irequest]->half = 0;
neighbor->requests[irequest]->full = 1;
int ntypes = atom->ntypes;
for (int i = 1; i <= ntypes; i++) {
if (zeta[i] == 0.0)
error->all(FLERR,"Invalid param file for fix qeq/slater");
}
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
}
/* ---------------------------------------------------------------------- */
void FixQEqSlater::extract_streitz()
{
- int ntypes = atom->ntypes;
-
- memory->create(chi,ntypes+1,"qeq:chi");
- memory->create(eta,ntypes+1,"qeq:eta");
- memory->create(gamma,ntypes+1,"qeq:gamma");
- memory->create(zeta,ntypes+1,"qeq:zeta");
- memory->create(zcore,ntypes+1,"qeq:zcore");
-
Pair *pair = force->pair_match("coul/streitz",1);
if (pair == NULL) error->all(FLERR,"No pair coul/streitz for fix qeq/slater");
int tmp;
chi = (double *) pair->extract("chi",tmp);
eta = (double *) pair->extract("eta",tmp);
gamma = (double *) pair->extract("gamma",tmp);
zeta = (double *) pair->extract("zeta",tmp);
zcore = (double *) pair->extract("zcore",tmp);
if (chi == NULL || eta == NULL || gamma == NULL
|| zeta == NULL || zcore == NULL)
error->all(FLERR,
"Fix qeq/slater could not extract params from pair coul/streitz");
}
/* ---------------------------------------------------------------------- */
void FixQEqSlater::pre_force(int vflag)
{
if (update->ntimestep % nevery) return;
nlocal = atom->nlocal;
nall = atom->nlocal + atom->nghost;
if( atom->nmax > nmax ) reallocate_storage();
if( nlocal > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE )
reallocate_matrix();
init_matvec();
matvecs = CG(b_s, s); // CG on s - parallel
matvecs += CG(b_t, t); // CG on t - parallel
calculate_Q();
if (force->kspace) force->kspace->qsum_qsq();
}
/* ---------------------------------------------------------------------- */
void FixQEqSlater::init_matvec()
{
compute_H();
int inum, ii, i;
int *ilist;
inum = list->inum;
ilist = list->ilist;
for( ii = 0; ii < inum; ++ii ) {
i = ilist[ii];
if (atom->mask[i] & groupbit) {
Hdia_inv[i] = 1. / eta[ atom->type[i] ];
b_s[i] = -( chi[atom->type[i]] + chizj[i] );
b_t[i] = -1.0;
t[i] = t_hist[i][2] + 3 * ( t_hist[i][0] - t_hist[i][1] );
s[i] = 4*(s_hist[i][0]+s_hist[i][2])-(6*s_hist[i][1]+s_hist[i][3]);
}
}
pack_flag = 2;
comm->forward_comm_fix(this); //Dist_vector( s );
pack_flag = 3;
comm->forward_comm_fix(this); //Dist_vector( t );
}
/* ---------------------------------------------------------------------- */
void FixQEqSlater::compute_H()
{
int i, j, ii, jj, inum, jnum, itype, jtype;
int *ilist, *jlist, *numneigh, **firstneigh;
double r, rsq, delr[3];
double zei, zej, zj, zjtmp;
int *type = atom->type;
double **x = atom->x;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
m_fill = 0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
itype = type[i];
zei = zeta[itype];
jlist = firstneigh[i];
jnum = numneigh[i];
H.firstnbr[i] = m_fill;
zjtmp = 0.0;
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
jtype = type[j];
zej = zeta[jtype];
zj = zcore[jtype];
delr[0] = x[i][0] - x[j][0];
delr[1] = x[i][1] - x[j][1];
delr[2] = x[i][2] - x[j][2];
rsq = delr[0]*delr[0] + delr[1]*delr[1] + delr[2]*delr[2];
if (rsq > cutoff_sq) continue;
r = sqrt(rsq);
H.jlist[m_fill] = j;
H.val[m_fill] = calculate_H(zei, zej, zj, r, zjtmp);
m_fill++;
}
H.numnbrs[i] = m_fill - H.firstnbr[i];
chizj[i] = zjtmp;
}
if (m_fill >= H.m) {
char str[128];
sprintf(str,"H matrix size has been exceeded: m_fill=%d H.m=%d\n",
m_fill, H.m );
error->warning(FLERR,str);
error->all(FLERR,"Fix qeq/slater has insufficient QEq matrix size");
}
}
/* ---------------------------------------------------------------------- */
double FixQEqSlater::calculate_H(double zei, double zej, double zj,
double r, double &zjtmp)
{
double rinv = 1.0/r;
double exp2zir = exp(-2.0*zei*r);
double zei2 = zei*zei;
double zei4 = zei2*zei2;
double zei6 = zei2*zei4;
double exp2zjr = exp(-2.0*zej*r);
double zej2 = zej*zej;
double zej4 = zej2*zej2;
double zej6 = zej2*zej4;
double sm1 = 11.0/8.0;
double sm2 = 3.00/4.0;
double sm3 = 1.00/6.0;
double erfcr = erfc(alpha*r);
double qqrd2e = force->qqrd2e;
double etmp1, etmp2;
double e1, e2, e3, e4;
double ci_jfi, ci_fifj;
e1 = e2 = e3 = e4 = 0.0;
etmp1 = etmp2 = 0.0;
ci_jfi = -zei*exp2zir - rinv*exp2zir;
if (zei == zej) {
ci_fifj = -exp2zir*(rinv + zei*(sm1 + sm2*zei*r + sm3*zei2*r*r));
} else {
e1 = zei*zej4/((zei+zej)*(zei+zej)*(zei-zej)*(zei-zej));
e2 = zej*zei4/((zei+zej)*(zei+zej)*(zej-zei)*(zej-zei));
e3 = (3.0*zei2*zej4-zej6) /
((zei+zej)*(zei+zej)*(zei+zej)*(zei-zej)*(zei-zej)*(zei-zej));
e4 = (3.0*zej2*zei4-zei6) /
((zei+zej)*(zei+zej)*(zei+zej)*(zej-zei)*(zej-zei)*(zej-zei));
ci_fifj = -exp2zir*(e1+e3/r) - exp2zjr*(e2+e4/r);
}
etmp1 = 1.00 * (ci_jfi - ci_fifj);
etmp2 = 0.50 * (ci_fifj + erfcr*rinv);
zjtmp += qqrd2e * zj * etmp1;
return qqrd2e * etmp2;
}
/* ---------------------------------------------------------------------- */
double FixQEqSlater::calculate_H_wolf(double zei, double zej, double zj,
double r, double &zjtmp)
{
double rinv = 1.0/r;
double exp2zir = exp(-2.0*zei*r);
double zei2 = zei*zei;
double zei4 = zei2*zei2;
double zei6 = zei2*zei4;
double exp2zjr = exp(-2.0*zej*r);
double zej2 = zej*zej;
double zej4 = zej2*zej2;
double zej6 = zej2*zej4;
double sm1 = 11.0/8.0;
double sm2 = 3.00/4.0;
double sm3 = 1.00/6.0;
double e1, e2, e3, e4;
double rc = cutoff;
double rcinv = 1.0/rc;
double rcinv2 = rcinv*rcinv;
double exp2zirsh = exp(-2.0*zei*rc);
double exp2zjrsh = exp(-2.0*zej*rc);
double eshift, fshift, ci_jfi, ci_fifj;
double etmp1, etmp2, etmp3;
double a = alpha;
double erfcr = erfc(a*r);
double erfcrc = erfc(a*rc);
double qqrd2e = force->qqrd2e;
etmp1 = etmp2 = etmp3 = 0.0;
e1 = e2 = e3 = e4 = 0.0;
eshift = -zei*exp2zirsh - rcinv*exp2zirsh;
fshift = 2.0*zei2*exp2zirsh + rcinv2*exp2zirsh + 2.0*zei*rcinv*exp2zirsh;
ci_jfi = -zei*exp2zir - rinv*exp2zir - eshift - (r-rc)*fshift;
if (zei == zej) {
eshift = -exp2zirsh*(rcinv + zei*(sm1 + sm2*zei*rc + sm3*zei2*rc*rc));
ci_fifj = -exp2zir*(rinv + zei*(sm1 + sm2*zei*r + sm3*zei2*r*r))
- eshift - (r-rc)*fshift;
} else {
e1 = zei*zej4/((zei+zej)*(zei+zej)*(zei-zej)*(zei-zej));
e2 = zej*zei4/((zei+zej)*(zei+zej)*(zej-zei)*(zej-zei));
e3 = (3.0*zei2*zej4-zej6) /
((zei+zej)*(zei+zej)*(zei+zej)*(zei-zej)*(zei-zej)*(zei-zej));
e4 = (3.0*zej2*zei4-zei6) /
((zei+zej)*(zei+zej)*(zei+zej)*(zej-zei)*(zej-zei)*(zej-zei));
eshift = -exp2zirsh*(e1+e3/rc) - exp2zjrsh*(e2+e4/rc);
ci_fifj = -exp2zir*(e1+e3/r) - exp2zjr*(e2+e4/r)
- eshift - (r-rc)*fshift;
}
etmp1 = erfcr/r - erfcrc/rc;
etmp2 = 1.00 * (ci_jfi - ci_fifj);
etmp3 = 0.50 * (etmp1 + ci_fifj);
zjtmp += qqrd2e * zj * etmp2;
return qqrd2e * etmp3;
}
/* ---------------------------------------------------------------------- */
void FixQEqSlater::sparse_matvec( sparse_matrix *A, double *x, double *b )
{
int i, j, itr_j;
nlocal = atom->nlocal;
nall = atom->nlocal + atom->nghost;
double r = cutoff;
double woself = 0.50*erfc(alpha*r)/r + alpha/MY_PIS;
for( i = 0; i < nlocal; ++i ) {
if (atom->mask[i] & groupbit)
b[i] = (eta[atom->type[i]] - 2.0*force->qqr2e*woself) * x[i];
}
for( i = nlocal; i < nall; ++i ) {
if (atom->mask[i] & groupbit)
b[i] = 0;
}
for( i = 0; i < nlocal; ++i ) {
if (atom->mask[i] & groupbit) {
for( itr_j=A->firstnbr[i]; itr_j<A->firstnbr[i]+A->numnbrs[i]; itr_j++) {
j = A->jlist[itr_j];
b[i] += A->val[itr_j] * x[j];
b[j] += A->val[itr_j] * x[i];
}
}
}
}
diff --git a/src/REAX/Install.sh b/src/REAX/Install.sh
index af0f1e243..f0083810e 100644
--- a/src/REAX/Install.sh
+++ b/src/REAX/Install.sh
@@ -1,63 +1,67 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
# arg1 = file, arg2 = file it depends on
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*reax[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/reax |' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/reax |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&-lreax |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(reax_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(reax_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(reax_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*reax.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/reax\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*reax[^ \t]* //' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*reax.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/USER-ATC/Install.sh b/src/USER-ATC/Install.sh
index 03ec562a6..113738901 100755
--- a/src/USER-ATC/Install.sh
+++ b/src/USER-ATC/Install.sh
@@ -1,66 +1,70 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
# arg1 = file, arg2 = file it depends on
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*atc[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/atc |' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/atc |' ../Makefile.package
# sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/atc |' ../Makefile.package
# sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/atc$(LIBSOBJDIR) |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&-latc |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(user-atc_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(user-atc_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(user-atc_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*atc.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/atc\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*atc[^ \t]* //' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*atc.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/USER-AWPMD/Install.sh b/src/USER-AWPMD/Install.sh
index 6fd0718b7..7922c5339 100644
--- a/src/USER-AWPMD/Install.sh
+++ b/src/USER-AWPMD/Install.sh
@@ -1,62 +1,66 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
# arg1 = file, arg2 = file it depends on
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*awpmd[^ \t]* //g' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/awpmd/ivutils/include -I../../lib/awpmd/systems/interact |' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/awpmd |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&-lawpmd |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(user-awpmd_SYSPATH) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(user-awpmd_SYSLIB) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*awpmd.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/awpmd\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*awpmd[^ \t]* //g' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*awpmd.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/USER-CG-CMM/Install.sh b/src/USER-CG-CMM/Install.sh
index 8e4376e96..00f515b79 100644
--- a/src/USER-CG-CMM/Install.sh
+++ b/src/USER-CG-CMM/Install.sh
@@ -1,35 +1,39 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
# arg1 = file, arg2 = file it depends on
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# list of files with optional dependcies
action angle_sdk.cpp angle_harmonic.cpp
action angle_sdk.h angle_harmonic.cpp
action lj_sdk_common.h
action pair_lj_sdk.cpp
action pair_lj_sdk.h
action pair_lj_sdk_coul_long.cpp pppm.cpp
action pair_lj_sdk_coul_long.h pppm.cpp
action pair_lj_sdk_coul_msm.cpp msm.cpp
action pair_lj_sdk_coul_msm.h msm.cpp
diff --git a/src/USER-COLVARS/Install.sh b/src/USER-COLVARS/Install.sh
index d4e252c22..c01719e76 100755
--- a/src/USER-COLVARS/Install.sh
+++ b/src/USER-COLVARS/Install.sh
@@ -1,64 +1,68 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
# arg1 = file, arg2 = file it depends on
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*colvars[^ \t]* //g' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-I..\/..\/lib\/colvars |' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L..\/..\/lib\/colvars$(LIBOBJDIR) |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&-lcolvars |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(colvars_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(colvars_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(colvars_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*colvars.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/colvars\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*colvars[^ \t]* //g' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*colvars.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/USER-FEP/Install.sh b/src/USER-FEP/Install.sh
index 695d2baf6..09c2024ad 100644
--- a/src/USER-FEP/Install.sh
+++ b/src/USER-FEP/Install.sh
@@ -1,53 +1,53 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
-# this is default Install.sh for all packages
-# if package has an auxiliary library or a file with a dependency,
-# then package dir has its own customized Install.sh
-
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with dependencies
action compute_fep.cpp
action compute_fep.h
action fix_adapt_fep.cpp
action fix_adapt_fep.h
action pair_coul_cut_soft.cpp
action pair_coul_cut_soft.h
action pair_coul_long_soft.cpp pppm.cpp
action pair_coul_long_soft.h pppm.cpp
action pair_lj_charmm_coul_long_soft.cpp pppm.cpp
action pair_lj_charmm_coul_long_soft.h pppm.cpp
action pair_lj_cut_coul_cut_soft.cpp
action pair_lj_cut_coul_cut_soft.h
action pair_lj_cut_coul_long_soft.cpp pppm.cpp
action pair_lj_cut_coul_long_soft.h pppm.cpp
action pair_lj_cut_soft.cpp
action pair_lj_cut_soft.h
action pair_lj_cut_tip4p_long_soft.cpp pppm_tip4p.cpp
action pair_lj_cut_tip4p_long_soft.h pppm_tip4p.cpp
action pair_morse_soft.cpp
action pair_morse_soft.h
action pair_tip4p_long_soft.cpp pppm_tip4p.cpp
action pair_tip4p_long_soft.h pppm_tip4p.cpp
diff --git a/src/USER-H5MD/Install.sh b/src/USER-H5MD/Install.sh
index 32bd9d193..bdda73280 100644
--- a/src/USER-H5MD/Install.sh
+++ b/src/USER-H5MD/Install.sh
@@ -1,62 +1,66 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*h5md[^ \t]* //g' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-I..\/..\/lib\/h5md\/include |' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L..\/..\/lib\/h5md |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&-lch5md |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(h5md_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(h5md_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(h5md_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*h5md.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/h5md\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*h5md[^ \t]* //g' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*h5md.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/USER-INTEL/Install.sh b/src/USER-INTEL/Install.sh
index 5b7e9e40b..79cc1158e 100644
--- a/src/USER-INTEL/Install.sh
+++ b/src/USER-INTEL/Install.sh
@@ -1,71 +1,75 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# step 1: process all *_intel.cpp and *_intel.h files.
# do not install child files if parent does not exist
for file in *_intel.cpp; do
dep=`echo $file | sed 's/neigh_full_intel/neigh_full/g' | \
sed 's/_offload_intel//g' | sed 's/_intel//g'`
action $file $dep
done
for file in *_intel.h; do
dep=`echo $file | sed 's/_offload_intel//g' | sed 's/_intel//g'`
action $file $dep
done
action intel_preprocess.h
action intel_buffers.h
action intel_buffers.cpp
action math_extra_intel.h
action intel_simd.h pair_sw_intel.cpp
action intel_intrinsics.h pair_tersoff_intel.cpp
action verlet_lrt_intel.h pppm.cpp
action verlet_lrt_intel.cpp pppm.cpp
# step 2: handle cases and tasks not handled in step 1.
if (test $mode = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*INTEL[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-DLMP_USER_INTEL |' ../Makefile.package
fi
# force rebuild of files with LMP_USER_INTEL switch
touch ../accelerator_intel.h
elif (test $mode = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*INTEL[^ \t]* //' ../Makefile.package
fi
# force rebuild of files with LMP_USER_INTEL switch
touch ../accelerator_intel.h
fi
diff --git a/src/USER-MISC/Install.sh b/src/USER-MISC/Install.sh
index 8b2e86478..203d92316 100644
--- a/src/USER-MISC/Install.sh
+++ b/src/USER-MISC/Install.sh
@@ -1,36 +1,40 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test ! -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files
# only a few files have dependencies
for file in *.cpp *.h; do
if (test $file = "pair_cdeam.cpp") then
action pair_cdeam.cpp pair_eam_alloy.cpp
elif (test $file = "pair_cdeam.h") then
action pair_cdeam.h pair_eam_alloy.cpp
else
action $file
fi
done
diff --git a/src/USER-MISC/README b/src/USER-MISC/README
index b3bd1fa3b..d60e2c85c 100644
--- a/src/USER-MISC/README
+++ b/src/USER-MISC/README
@@ -1,66 +1,67 @@
The files in this package are a potpourri of (mostly) unrelated
features contributed to LAMMPS by users. Each feature is a single
pair of files (*.cpp and *.h).
More information about each feature can be found by reading its doc
page in the LAMMPS doc directory. The doc page which lists all LAMMPS
input script commands is as follows:
doc/Section_commands.html, subsection 3.5
User-contributed features are listed at the bottom of the fix,
compute, pair, etc sections.
The list of features and author of each is given below.
You should contact the author directly if you have specific questions
about the feature or its coding.
------------------------------------------------------------
angle_style cosine/shift, Carsten Svaneborg, science at zqex.dk, 8 Aug 11
angle_style cosine/shift/exp, Carsten Svaneborg, science at zqex.dk, 8 Aug 11
angle_style fourier, Loukas Peristeras, loukas.peristeras at scienomics.com, 27 Oct 12
angle_style fourier/simple, Loukas Peristeras, loukas.peristeras at scienomics.com, 27 Oct 12
angle_style dipole, Mario Orsi, orsimario at gmail.com, 10 Jan 12
angle_style quartic, Loukas Peristeras, loukas.peristeras at scienomics.com, 27 Oct 12
bond_style harmonic/shift, Carsten Svaneborg, science at zqex.dk, 8 Aug 11
bond_style harmonic/shift/cut, Carsten Svaneborg, science at zqex.dk, 8 Aug 11
compute ackland/atom, Gerolf Ziegenhain, gerolf at ziegenhain.com, 4 Oct 2007
compute basal/atom, Christopher Barrett, cdb333 at cavs.msstate.edu, 3 Mar 2013
compute temp/rotate, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11
dihedral_style cosine/shift/exp, Carsten Svaneborg, science at zqex.dk, 8 Aug 11
dihedral_style fourier, Loukas Peristeras, loukas.peristeras at scienomics.com, 27 Oct 12
dihedral_style nharmonic, Loukas Peristeras, loukas.peristeras at scienomics.com, 27 Oct 12
dihedral_style quadratic, Loukas Peristeras, loukas.peristeras at scienomics.com, 27 Oct 12
dihedral_style spherical, Andrew Jewett, jewett.aij@gmail.com, 15 Jul 16
dihedral_style table, Andrew Jewett, jewett.aij@gmail.com, 10 Jan 12
fix addtorque, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11
fix ave/correlate/long, Jorge Ramirez (UPM Madrid), jorge.ramirez at upm.es, 21 Oct 2015
+fix flow/gauss, Joel Eaves (CU Boulder), Joel.Eaves@Colorado.edu, 23 Aug 2016
fix gle, Michele Ceriotti (EPFL Lausanne), michele.ceriotti at gmail.com, 24 Nov 2014
fix imd, Axel Kohlmeyer, akohlmey at gmail.com, 9 Nov 2009
fix ipi, Michele Ceriotti (EPFL Lausanne), michele.ceriotti at gmail.com, 24 Nov 2014
fix pimd, Yuxing Peng (U Chicago), yuxing at uchicago.edu, 24 Nov 2014
fix smd, Axel Kohlmeyer, akohlmey at gmail.com, 19 May 2008
fix ti/rs, Rodrigo Freitas (Unicamp/Brazil), rodrigohb at gmail.com, 7 Nov 2013
fix ti/spring, Rodrigo Freitas (Unicamp/Brazil), rodrigohb at gmail.com, 7 Nov 2013
fix ttm/mod, Sergey Starikov and Vasily Pisarev (JIHT), pisarevvv at gmail.com, 2 Feb 2015
improper_style cossq, Georgios Vogiatzis, gvog at chemeng.ntua.gr, 25 May 12
improper_style fourier, Loukas Peristeras, loukas.peristeras at scienomics.com, 27 Oct 12
improper_style ring, Georgios Vogiatzis, gvog at chemeng.ntua.gr, 25 May 12
improper_style distance, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15
pair_style buck/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15
pair_style coul/diel, Axel Kohlmeyer, akohlmey at gmail.com, 1 Dec 11
pair_style dipole/sf, Mario Orsi, orsimario at gmail.com, 8 Aug 11
pair_style edip, Luca Ferraro, luca.ferraro at caspur.it, 15 Sep 11
pair_style eam/cd, Alexander Stukowski, stukowski at mm.tu-darmstadt.de, 7 Nov 09
pair_style gauss/cut, Axel Kohlmeyer, akohlmey at gmail.com, 1 Dec 11
pair_style lennard/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15
pair_style list, Axel Kohlmeyer (Temple U), akohlmey at gmail.com, 1 Jun 13
pair_style lj/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15
pair_style lj/sf, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11
pair_style meam/spline, Alexander Stukowski (LLNL), alex at stukowski.com, 1 Feb 12
pair_style meam/sw/spline, Robert Rudd (LLNL), robert.rudd at llnl.gov, 1 Oct 12
pair_style morse/smooth/linear, Stefan Paquay (TU Eindhoven), stefanpaquay at gmail.com, 29 Feb 16
pair_style srp, Tim Sirk, tim.sirk at us.army.mil, 21 Nov 14
pair_style tersoff/table, Luca Ferraro, luca.ferraro@caspur.it, 1 Dec 11
diff --git a/src/USER-MISC/fix_flow_gauss.cpp b/src/USER-MISC/fix_flow_gauss.cpp
new file mode 100644
index 000000000..e5c319c39
--- /dev/null
+++ b/src/USER-MISC/fix_flow_gauss.cpp
@@ -0,0 +1,220 @@
+/* ----------------------------------------------------------------------
+ LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
+ http://lammps.sandia.gov, Sandia National Laboratories
+ Steve Plimpton, sjplimp@sandia.gov
+
+ Copyright (2003) Sandia Corporation. Under the terms of Contract
+ DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
+ certain rights in this software. This software is distributed under
+ the GNU General Public License.
+
+ See the README file in the top-level LAMMPS directory.
+ ------------------------------------------------------------------------- */
+
+/* ----------------------------------------------------------------------
+ Contributing authors: Steven E. Strong and Joel D. Eaves
+ Joel.Eaves@Colorado.edu
+------------------------------------------------------------------------- */
+
+#include <stdlib.h>
+#include <string.h>
+#include "fix_flow_gauss.h"
+#include "atom.h"
+#include "force.h"
+#include "group.h"
+#include "comm.h"
+#include "update.h"
+#include "domain.h"
+#include "error.h"
+#include "citeme.h"
+
+using namespace LAMMPS_NS;
+using namespace FixConst;
+
+static const char cite_flow_gauss[] =
+ "Gaussian dynamics package:\n\n"
+ "@Article{strong_atomistic_2016,\n"
+ "title = {Atomistic Hydrodynamics and the Dynamical Hydrophobic Effect in Porous Graphene},\n"
+ "volume = {7},\n"
+ "number = {10},\n"
+ "issn = {1948-7185},\n"
+ "url = {http://dx.doi.org/10.1021/acs.jpclett.6b00748},\n"
+ "doi = {10.1021/acs.jpclett.6b00748},\n"
+ "urldate = {2016-05-10},\n"
+ "journal = {J. Phys. Chem. Lett.},\n"
+ "author = {Strong, Steven E. and Eaves, Joel D.},\n"
+ "year = {2016},\n"
+ "pages = {1907--1912}\n"
+ "}\n\n";
+
+FixFlowGauss::FixFlowGauss(LAMMPS *lmp, int narg, char **arg) :
+ Fix(lmp, narg, arg)
+{
+ if (lmp->citeme) lmp->citeme->add(cite_flow_gauss);
+
+ if (narg < 6) error->all(FLERR,"Not enough input arguments");
+
+ // a group which conserves momentum must also conserve particle number
+ dynamic_group_allow = 0;
+
+ scalar_flag = 1;
+ vector_flag = 1;
+ extscalar = 1;
+ extvector = 1;
+ size_vector = 3;
+ global_freq = 1; //data available every timestep
+
+ dimension = domain->dimension;
+
+ //get inputs
+ int tmpFlag;
+ for (int ii=0; ii<3; ii++)
+ {
+ tmpFlag=force->inumeric(FLERR,arg[3+ii]);
+ if (tmpFlag==1 || tmpFlag==0)
+ flow[ii]=tmpFlag;
+ else
+ error->all(FLERR,"Constraint flags must be 1 or 0");
+ }
+
+ //by default, do not compute work done
+ workflag=0;
+
+ // process optional keyword
+ int iarg = 6;
+ while (iarg < narg) {
+ if ( strcmp(arg[iarg],"energy") == 0 ) {
+ if ( iarg+2 > narg ) error->all(FLERR,"Illegal energy keyword");
+ if ( strcmp(arg[iarg+1],"yes") == 0 ) workflag = 1;
+ else if ( strcmp(arg[iarg+1],"no") == 1 )
+ error->all(FLERR,"Illegal energy keyword");
+ iarg += 2;
+ } else error->all(FLERR,"Illegal fix flow/gauss command");
+ }
+
+ //error checking
+ if (dimension == 2) {
+ if (flow[2])
+ error->all(FLERR,"Can't constrain z flow in 2d simulation");
+ }
+
+ dt=update->dt;
+ pe_tot=0.0;
+}
+
+/* ---------------------------------------------------------------------- */
+
+int FixFlowGauss::setmask()
+{
+ int mask = 0;
+ mask |= POST_FORCE;
+ mask |= THERMO_ENERGY;
+ return mask;
+}
+
+/* ----------------------------------------------------------------------
+ setup is called after the initial evaluation of forces before a run, so we
+ must remove the total force here too
+ ------------------------------------------------------------------------- */
+void FixFlowGauss::setup(int vflag)
+{
+ //need to compute work done if set fix_modify energy yes
+ if (thermo_energy)
+ workflag=1;
+
+ //get total mass of group
+ mTot=group->mass(igroup);
+ if (mTot <= 0.0)
+ error->all(FLERR,"Invalid group mass in fix flow/gauss");
+
+ post_force(vflag);
+}
+
+/* ----------------------------------------------------------------------
+ this is where Gaussian dynamics constraint is applied
+ ------------------------------------------------------------------------- */
+void FixFlowGauss::post_force(int vflag)
+{
+ double **f = atom->f;
+ double **x = atom->x;
+ double **v = atom->v;
+
+ int *mask = atom->mask;
+ int *type = atom->type;
+ double *mass = atom->mass;
+ double *rmass = atom->rmass;
+
+ int nlocal = atom->nlocal;
+
+ int ii,jj;
+
+ //find the total force on all atoms
+
+ //initialize to zero
+ double f_thisProc[3];
+ for (ii=0; ii<3; ii++)
+ f_thisProc[ii]=0.0;
+
+ //add all forces on each processor
+ for(ii=0; ii<nlocal; ii++)
+ if (mask[ii] & groupbit)
+ for (jj=0; jj<3; jj++)
+ if (flow[jj])
+ f_thisProc[jj] += f[ii][jj];
+
+ //add the processor sums together
+ MPI_Allreduce(f_thisProc, f_tot, 3, MPI_DOUBLE, MPI_SUM, world);
+
+ //compute applied acceleration
+ for (ii=0; ii<3; ii++)
+ a_app[ii] = -f_tot[ii] / mTot;
+
+ //apply added accelleration to each atom
+ double f_app[3];
+ double peAdded=0.0;
+ for( ii = 0; ii<nlocal; ii++)
+ if (mask[ii] & groupbit) {
+ if (rmass) {
+ f_app[0] = a_app[0]*rmass[ii];
+ f_app[1] = a_app[1]*rmass[ii];
+ f_app[2] = a_app[2]*rmass[ii];
+ } else {
+ f_app[0] = a_app[0]*mass[type[ii]];
+ f_app[1] = a_app[1]*mass[type[ii]];
+ f_app[2] = a_app[2]*mass[type[ii]];
+ }
+
+ f[ii][0] += f_app[0]; //f_app[jj] is 0 if flow[jj] is false
+ f[ii][1] += f_app[1];
+ f[ii][2] += f_app[2];
+
+ //calculate added energy, since more costly, only do this if requested
+ if (workflag)
+ peAdded += f_app[0]*v[ii][0] + f_app[1]*v[ii][1] + f_app[2]*v[ii][2];
+ }
+
+ //finish calculation of work done, sum over all procs
+ if (workflag) {
+ double pe_tmp=0.0;
+ MPI_Allreduce(&peAdded,&pe_tmp,1,MPI_DOUBLE,MPI_SUM,world);
+ pe_tot += pe_tmp;
+ }
+
+}
+
+/* ----------------------------------------------------------------------
+ negative of work done by this fix
+ This is only computed if requested, either with fix_modify energy yes, or with the energy keyword. Otherwise returns 0.
+ ------------------------------------------------------------------------- */
+double FixFlowGauss::compute_scalar()
+{
+ return -pe_tot*dt;
+}
+
+/* ----------------------------------------------------------------------
+ return components of applied force
+ ------------------------------------------------------------------------- */
+double FixFlowGauss::compute_vector(int n)
+{
+ return -f_tot[n];
+}
diff --git a/src/USER-MISC/fix_flow_gauss.h b/src/USER-MISC/fix_flow_gauss.h
new file mode 100644
index 000000000..533767954
--- /dev/null
+++ b/src/USER-MISC/fix_flow_gauss.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- ----------------------------------------------------------
+ LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
+ http://lammps.sandia.gov, Sandia National Laboratories
+ Steve Plimpton, sjplimp@sandia.gov
+
+ Copyright (2003) Sandia Corporation. Under the terms of Contract
+ DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
+ certain rights in this software. This software is distributed under
+ the GNU General Public License.
+
+ See the README file in the top-level LAMMPS directory.
+
+ Contributing authors: Steven E. Strong and Joel D. Eaves
+ Joel.Eaves@Colorado.edu
+ ------------------------------------------------------------------------- */
+#ifdef FIX_CLASS
+
+FixStyle(flow/gauss,FixFlowGauss)
+
+#else
+
+#ifndef LMP_FIX_FLOWGAUSS_H
+#define LMP_FIX_FLOWGAUSS_H
+
+#include "fix.h"
+
+ namespace LAMMPS_NS {
+
+ class FixFlowGauss : public Fix {
+ public:
+ FixFlowGauss(class LAMMPS *, int, char **);
+ int setmask();
+ double compute_scalar();
+ double compute_vector(int n);
+ void post_force(int);
+ void setup(int);
+
+ protected:
+ int dimension;
+ bool flow[3]; //flag if each direction is conserved
+ double a_app[3]; //applied acceleration
+ double mTot; //total mass of constrained group
+ double f_tot[3]; //total applied force
+ double pe_tot; //total added energy
+ double dt; //timestep
+ bool workflag; //if calculate work done by fix
+
+ };
+
+ }
+
+#endif
+#endif
diff --git a/src/USER-MOLFILE/Install.sh b/src/USER-MOLFILE/Install.sh
index df193a6f4..19fd3bd36 100644
--- a/src/USER-MOLFILE/Install.sh
+++ b/src/USER-MOLFILE/Install.sh
@@ -1,60 +1,64 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*molfile[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(molfile_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(molfile_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(molfile_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*molfile.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/molfile\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*molfile[^ \t]* //' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*molfile.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/USER-OMP/Install.sh b/src/USER-OMP/Install.sh
index 85b44f1be..bb4ef6c3a 100644
--- a/src/USER-OMP/Install.sh
+++ b/src/USER-OMP/Install.sh
@@ -1,84 +1,88 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# step 1: process all *_omp.cpp and *_omp.h files.
# do not install child files if parent does not exist
for file in *_omp.cpp; do
test $file = thr_omp.cpp && continue
dep=${file%_omp.cpp}.cpp
action $file $dep
done
for file in *_omp.h; do
test $file = thr_omp.h && continue
dep=${file%_omp.h}.h
action $file $dep
done
action thr_omp.h
action thr_omp.cpp
action thr_data.h
action thr_data.cpp
# step 2: handle cases and tasks not handled in step 1
if (test $mode = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*OMP[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-DLMP_USER_OMP |' ../Makefile.package
fi
# need to delete a bunch of dependency files because they
# indirectly depend on user_cuda.h
for f in finish.d modify_cuda.d
do \
rm -f ../Obj_*/$f
done
# force rebuild of files with LMP_USER_OMP switch
touch ../accelerator_omp.h
elif (test $mode = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*OMP[^ \t]* //' ../Makefile.package
fi
# need to delete a bunch of dependency files because they
# indirectly depend on user_cuda.h
for f in finish.d modify_cuda.d
do \
rm -f ../Obj_*/$f
done
# force rebuild of files with LMP_USER_OMP switch
touch ../accelerator_omp.h
fi
diff --git a/src/USER-PHONON/Install.sh b/src/USER-PHONON/Install.sh
index 36cd17daa..cfa369bb0 100644
--- a/src/USER-PHONON/Install.sh
+++ b/src/USER-PHONON/Install.sh
@@ -1,28 +1,32 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# list of files with optional dependcies
action fix_phonon.cpp fft3d_wrap.h
action fix_phonon.h fft3d_wrap.h
diff --git a/src/USER-QMMM/Install.sh b/src/USER-QMMM/Install.sh
index 02efdf2d7..089b880a7 100755
--- a/src/USER-QMMM/Install.sh
+++ b/src/USER-QMMM/Install.sh
@@ -1,64 +1,68 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*qmmm[^ \t]* //g' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-I..\/..\/lib\/qmmm |' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L..\/..\/lib\/qmmm$(LIBOBJDIR) |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&-lqmmm |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(qmmm_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(qmmm_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(qmmm_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*qmmm.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/qmmm\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*qmmm[^ \t]* //g' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*qmmm.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/USER-QUIP/Install.sh b/src/USER-QUIP/Install.sh
index 9cc672aef..ee7faaf62 100644
--- a/src/USER-QUIP/Install.sh
+++ b/src/USER-QUIP/Install.sh
@@ -1,60 +1,64 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*quip[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(quip_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(quip_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(quip_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*quip.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/quip\/Makefile.lammps\
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*quip[^ \t]* //' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*quip.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/USER-REAXC/reaxc_ffield.cpp b/src/USER-REAXC/reaxc_ffield.cpp
index 912a49daa..fda284140 100644
--- a/src/USER-REAXC/reaxc_ffield.cpp
+++ b/src/USER-REAXC/reaxc_ffield.cpp
@@ -1,694 +1,699 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "error.h"
#include "reaxc_ffield.h"
#include "reaxc_tool_box.h"
char Read_Force_Field( FILE *fp, reax_interaction *reax,
control_params *control )
{
char *s;
char **tmp;
char ****tor_flag;
int c, i, j, k, l, m, n, o, p, cnt;
int lgflag = control->lgflag;
int errorflag = 1;
double val;
MPI_Comm comm;
comm = MPI_COMM_WORLD;
s = (char*) malloc(sizeof(char)*MAX_LINE);
tmp = (char**) malloc(sizeof(char*)*MAX_TOKENS);
for (i=0; i < MAX_TOKENS; i++)
tmp[i] = (char*) malloc(sizeof(char)*MAX_TOKEN_LEN);
/* reading first header comment */
fgets( s, MAX_LINE, fp );
/* line 2 is number of global parameters */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
/* reading the number of global parameters */
n = atoi(tmp[0]);
if (n < 1) {
fprintf( stderr, "WARNING: number of globals in ffield file is 0!\n" );
fclose(fp);
free(s);
free(tmp);
return 1;
}
reax->gp.n_global = n;
reax->gp.l = (double*) malloc(sizeof(double)*n);
/* see reax_types.h for mapping between l[i] and the lambdas used in ff */
for (i=0; i < n; i++) {
fgets(s,MAX_LINE,fp);
c = Tokenize(s,&tmp);
val = (double) atof(tmp[0]);
reax->gp.l[i] = val;
}
control->bo_cut = 0.01 * reax->gp.l[29];
control->nonb_low = reax->gp.l[11];
control->nonb_cut = reax->gp.l[12];
/* next line is number of atom types and some comments */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
reax->num_atom_types = atoi(tmp[0]);
/* 3 lines of comments */
fgets(s,MAX_LINE,fp);
fgets(s,MAX_LINE,fp);
fgets(s,MAX_LINE,fp);
/* Allocating structures in reax_interaction */
reax->sbp = (single_body_parameters*)
scalloc( reax->num_atom_types, sizeof(single_body_parameters), "sbp",
comm );
reax->tbp = (two_body_parameters**)
scalloc( reax->num_atom_types, sizeof(two_body_parameters*), "tbp", comm );
reax->thbp= (three_body_header***)
scalloc( reax->num_atom_types, sizeof(three_body_header**), "thbp", comm );
reax->hbp = (hbond_parameters***)
scalloc( reax->num_atom_types, sizeof(hbond_parameters**), "hbp", comm );
reax->fbp = (four_body_header****)
scalloc( reax->num_atom_types, sizeof(four_body_header***), "fbp", comm );
tor_flag = (char****)
scalloc( reax->num_atom_types, sizeof(char***), "tor_flag", comm );
for( i = 0; i < reax->num_atom_types; i++ ) {
reax->tbp[i] = (two_body_parameters*)
scalloc( reax->num_atom_types, sizeof(two_body_parameters), "tbp[i]",
comm );
reax->thbp[i]= (three_body_header**)
scalloc( reax->num_atom_types, sizeof(three_body_header*), "thbp[i]",
comm );
reax->hbp[i] = (hbond_parameters**)
scalloc( reax->num_atom_types, sizeof(hbond_parameters*), "hbp[i]",
comm );
reax->fbp[i] = (four_body_header***)
scalloc( reax->num_atom_types, sizeof(four_body_header**), "fbp[i]",
comm );
tor_flag[i] = (char***)
scalloc( reax->num_atom_types, sizeof(char**), "tor_flag[i]", comm );
for( j = 0; j < reax->num_atom_types; j++ ) {
reax->thbp[i][j]= (three_body_header*)
scalloc( reax->num_atom_types, sizeof(three_body_header), "thbp[i,j]",
comm );
reax->hbp[i][j] = (hbond_parameters*)
scalloc( reax->num_atom_types, sizeof(hbond_parameters), "hbp[i,j]",
comm );
reax->fbp[i][j] = (four_body_header**)
scalloc( reax->num_atom_types, sizeof(four_body_header*), "fbp[i,j]",
comm );
tor_flag[i][j] = (char**)
scalloc( reax->num_atom_types, sizeof(char*), "tor_flag[i,j]", comm );
for (k=0; k < reax->num_atom_types; k++) {
reax->fbp[i][j][k] = (four_body_header*)
scalloc( reax->num_atom_types, sizeof(four_body_header), "fbp[i,j,k]",
comm );
tor_flag[i][j][k] = (char*)
scalloc( reax->num_atom_types, sizeof(char), "tor_flag[i,j,k]",
comm );
}
}
}
reax->gp.vdw_type = 0;
for( i = 0; i < reax->num_atom_types; i++ ) {
/* line one */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
for( j = 0; j < (int)(strlen(tmp[0])); ++j )
reax->sbp[i].name[j] = toupper( tmp[0][j] );
val = atof(tmp[1]); reax->sbp[i].r_s = val;
val = atof(tmp[2]); reax->sbp[i].valency = val;
val = atof(tmp[3]); reax->sbp[i].mass = val;
val = atof(tmp[4]); reax->sbp[i].r_vdw = val;
val = atof(tmp[5]); reax->sbp[i].epsilon = val;
val = atof(tmp[6]); reax->sbp[i].gamma = val;
val = atof(tmp[7]); reax->sbp[i].r_pi = val;
val = atof(tmp[8]); reax->sbp[i].valency_e = val;
reax->sbp[i].nlp_opt = 0.5 * (reax->sbp[i].valency_e-reax->sbp[i].valency);
/* line two */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
val = atof(tmp[0]); reax->sbp[i].alpha = val;
val = atof(tmp[1]); reax->sbp[i].gamma_w = val;
val = atof(tmp[2]); reax->sbp[i].valency_boc= val;
val = atof(tmp[3]); reax->sbp[i].p_ovun5 = val;
val = atof(tmp[4]);
val = atof(tmp[5]); reax->sbp[i].chi = val;
val = atof(tmp[6]); reax->sbp[i].eta = 2.0 * val;
val = atof(tmp[7]); reax->sbp[i].p_hbond = (int) val;
/* line 3 */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
val = atof(tmp[0]); reax->sbp[i].r_pi_pi = val;
val = atof(tmp[1]); reax->sbp[i].p_lp2 = val;
val = atof(tmp[2]);
val = atof(tmp[3]); reax->sbp[i].b_o_131 = val;
val = atof(tmp[4]); reax->sbp[i].b_o_132 = val;
val = atof(tmp[5]); reax->sbp[i].b_o_133 = val;
val = atof(tmp[6]);
val = atof(tmp[7]);
/* line 4 */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
/* Sanity check */
if (c < 3) {
fprintf(stderr, "Inconsistent ffield file (reaxc_ffield.cpp) \n");
MPI_Abort( comm, FILE_NOT_FOUND );
}
val = atof(tmp[0]); reax->sbp[i].p_ovun2 = val;
val = atof(tmp[1]); reax->sbp[i].p_val3 = val;
val = atof(tmp[2]);
val = atof(tmp[3]); reax->sbp[i].valency_val= val;
val = atof(tmp[4]); reax->sbp[i].p_val5 = val;
val = atof(tmp[5]); reax->sbp[i].rcore2 = val;
val = atof(tmp[6]); reax->sbp[i].ecore2 = val;
val = atof(tmp[7]); reax->sbp[i].acore2 = val;
/* line 5, only if lgvdw is yes */
if (lgflag) {
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
/* Sanity check */
if (c > 3) {
fprintf(stderr, "Inconsistent ffield file (reaxc_ffield.cpp) \n");
MPI_Abort( comm, FILE_NOT_FOUND );
}
val = atof(tmp[0]); reax->sbp[i].lgcij = val;
val = atof(tmp[1]); reax->sbp[i].lgre = val;
}
if( reax->sbp[i].rcore2>0.01 && reax->sbp[i].acore2>0.01 ){ // Inner-wall
if( reax->sbp[i].gamma_w>0.5 ){ // Shielding vdWaals
if( reax->gp.vdw_type != 0 && reax->gp.vdw_type != 3 ) {
if (errorflag)
fprintf( stderr, "Warning: inconsistent vdWaals-parameters\n" \
"Force field parameters for element %s\n" \
"indicate inner wall+shielding, but earlier\n" \
"atoms indicate different vdWaals-method.\n" \
"This may cause division-by-zero errors.\n" \
"Keeping vdWaals-setting for earlier atoms.\n",
reax->sbp[i].name );
errorflag = 0;
}
else{
reax->gp.vdw_type = 3;
}
}
else { // No shielding vdWaals parameters present
if( reax->gp.vdw_type != 0 && reax->gp.vdw_type != 2 )
fprintf( stderr, "Warning: inconsistent vdWaals-parameters\n" \
"Force field parameters for element %s\n" \
"indicate inner wall without shielding, but earlier\n" \
"atoms indicate different vdWaals-method.\n" \
"This may cause division-by-zero errors.\n" \
"Keeping vdWaals-setting for earlier atoms.\n",
reax->sbp[i].name );
else{
reax->gp.vdw_type = 2;
}
}
}
else{ // No Inner wall parameters present
if( reax->sbp[i].gamma_w>0.5 ){ // Shielding vdWaals
if( reax->gp.vdw_type != 0 && reax->gp.vdw_type != 1 )
fprintf( stderr, "Warning: inconsistent vdWaals-parameters\n" \
"Force field parameters for element %s\n" \
"indicate shielding without inner wall, but earlier\n" \
"atoms indicate different vdWaals-method.\n" \
"This may cause division-by-zero errors.\n" \
"Keeping vdWaals-setting for earlier atoms.\n",
reax->sbp[i].name );
else{
reax->gp.vdw_type = 1;
}
}
else{
fprintf( stderr, "Error: inconsistent vdWaals-parameters\n"\
"No shielding or inner-wall set for element %s\n",
reax->sbp[i].name );
MPI_Abort( comm, INVALID_INPUT );
}
}
}
/* Equate vval3 to valf for first-row elements (25/10/2004) */
for( i = 0; i < reax->num_atom_types; i++ )
if( reax->sbp[i].mass < 21 &&
reax->sbp[i].valency_val != reax->sbp[i].valency_boc ){
fprintf( stderr, "Warning: changed valency_val to valency_boc for %s\n",
reax->sbp[i].name );
reax->sbp[i].valency_val = reax->sbp[i].valency_boc;
}
/* next line is number of two body combination and some comments */
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
l = atoi(tmp[0]);
/* a line of comments */
fgets(s,MAX_LINE,fp);
for (i=0; i < l; i++) {
/* line 1 */
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
j = atoi(tmp[0]) - 1;
k = atoi(tmp[1]) - 1;
if (j < reax->num_atom_types && k < reax->num_atom_types) {
val = atof(tmp[2]); reax->tbp[j][k].De_s = val;
reax->tbp[k][j].De_s = val;
val = atof(tmp[3]); reax->tbp[j][k].De_p = val;
reax->tbp[k][j].De_p = val;
val = atof(tmp[4]); reax->tbp[j][k].De_pp = val;
reax->tbp[k][j].De_pp = val;
val = atof(tmp[5]); reax->tbp[j][k].p_be1 = val;
reax->tbp[k][j].p_be1 = val;
val = atof(tmp[6]); reax->tbp[j][k].p_bo5 = val;
reax->tbp[k][j].p_bo5 = val;
val = atof(tmp[7]); reax->tbp[j][k].v13cor = val;
reax->tbp[k][j].v13cor = val;
val = atof(tmp[8]); reax->tbp[j][k].p_bo6 = val;
reax->tbp[k][j].p_bo6 = val;
val = atof(tmp[9]); reax->tbp[j][k].p_ovun1 = val;
reax->tbp[k][j].p_ovun1 = val;
/* line 2 */
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
val = atof(tmp[0]); reax->tbp[j][k].p_be2 = val;
reax->tbp[k][j].p_be2 = val;
val = atof(tmp[1]); reax->tbp[j][k].p_bo3 = val;
reax->tbp[k][j].p_bo3 = val;
val = atof(tmp[2]); reax->tbp[j][k].p_bo4 = val;
reax->tbp[k][j].p_bo4 = val;
val = atof(tmp[3]);
val = atof(tmp[4]); reax->tbp[j][k].p_bo1 = val;
reax->tbp[k][j].p_bo1 = val;
val = atof(tmp[5]); reax->tbp[j][k].p_bo2 = val;
reax->tbp[k][j].p_bo2 = val;
val = atof(tmp[6]); reax->tbp[j][k].ovc = val;
reax->tbp[k][j].ovc = val;
val = atof(tmp[7]);
}
}
for (i=0; i < reax->num_atom_types; i++)
for (j=i; j < reax->num_atom_types; j++) {
reax->tbp[i][j].r_s = 0.5 *
(reax->sbp[i].r_s + reax->sbp[j].r_s);
reax->tbp[j][i].r_s = 0.5 *
(reax->sbp[j].r_s + reax->sbp[i].r_s);
reax->tbp[i][j].r_p = 0.5 *
(reax->sbp[i].r_pi + reax->sbp[j].r_pi);
reax->tbp[j][i].r_p = 0.5 *
(reax->sbp[j].r_pi + reax->sbp[i].r_pi);
reax->tbp[i][j].r_pp = 0.5 *
(reax->sbp[i].r_pi_pi + reax->sbp[j].r_pi_pi);
reax->tbp[j][i].r_pp = 0.5 *
(reax->sbp[j].r_pi_pi + reax->sbp[i].r_pi_pi);
reax->tbp[i][j].p_boc3 =
sqrt(reax->sbp[i].b_o_132 *
reax->sbp[j].b_o_132);
reax->tbp[j][i].p_boc3 =
sqrt(reax->sbp[j].b_o_132 *
reax->sbp[i].b_o_132);
reax->tbp[i][j].p_boc4 =
sqrt(reax->sbp[i].b_o_131 *
reax->sbp[j].b_o_131);
reax->tbp[j][i].p_boc4 =
sqrt(reax->sbp[j].b_o_131 *
reax->sbp[i].b_o_131);
reax->tbp[i][j].p_boc5 =
sqrt(reax->sbp[i].b_o_133 *
reax->sbp[j].b_o_133);
reax->tbp[j][i].p_boc5 =
sqrt(reax->sbp[j].b_o_133 *
reax->sbp[i].b_o_133);
reax->tbp[i][j].D =
sqrt(reax->sbp[i].epsilon *
reax->sbp[j].epsilon);
reax->tbp[j][i].D =
sqrt(reax->sbp[j].epsilon *
reax->sbp[i].epsilon);
reax->tbp[i][j].alpha =
sqrt(reax->sbp[i].alpha *
reax->sbp[j].alpha);
reax->tbp[j][i].alpha =
sqrt(reax->sbp[j].alpha *
reax->sbp[i].alpha);
reax->tbp[i][j].r_vdW =
2.0 * sqrt(reax->sbp[i].r_vdw * reax->sbp[j].r_vdw);
reax->tbp[j][i].r_vdW =
2.0 * sqrt(reax->sbp[j].r_vdw * reax->sbp[i].r_vdw);
reax->tbp[i][j].gamma_w =
sqrt(reax->sbp[i].gamma_w *
reax->sbp[j].gamma_w);
reax->tbp[j][i].gamma_w =
sqrt(reax->sbp[j].gamma_w *
reax->sbp[i].gamma_w);
reax->tbp[i][j].gamma =
pow(reax->sbp[i].gamma *
reax->sbp[j].gamma,-1.5);
reax->tbp[j][i].gamma =
pow(reax->sbp[j].gamma *
reax->sbp[i].gamma,-1.5);
// additions for additional vdWaals interaction types - inner core
reax->tbp[i][j].rcore = reax->tbp[j][i].rcore =
sqrt( reax->sbp[i].rcore2 * reax->sbp[j].rcore2 );
reax->tbp[i][j].ecore = reax->tbp[j][i].ecore =
sqrt( reax->sbp[i].ecore2 * reax->sbp[j].ecore2 );
reax->tbp[i][j].acore = reax->tbp[j][i].acore =
sqrt( reax->sbp[i].acore2 * reax->sbp[j].acore2 );
// additions for additional vdWalls interaction types lg correction
reax->tbp[i][j].lgcij = reax->tbp[j][i].lgcij =
sqrt( reax->sbp[i].lgcij * reax->sbp[j].lgcij );
reax->tbp[i][j].lgre = reax->tbp[j][i].lgre = 2.0 * reax->gp.l[35] *
sqrt( reax->sbp[i].lgre*reax->sbp[j].lgre );
}
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
l = atoi(tmp[0]);
for (i=0; i < l; i++) {
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
j = atoi(tmp[0]) - 1;
k = atoi(tmp[1]) - 1;
if (j < reax->num_atom_types && k < reax->num_atom_types) {
val = atof(tmp[2]);
if (val > 0.0) {
reax->tbp[j][k].D = val;
reax->tbp[k][j].D = val;
}
val = atof(tmp[3]);
if (val > 0.0) {
reax->tbp[j][k].r_vdW = 2 * val;
reax->tbp[k][j].r_vdW = 2 * val;
}
val = atof(tmp[4]);
if (val > 0.0) {
reax->tbp[j][k].alpha = val;
reax->tbp[k][j].alpha = val;
}
val = atof(tmp[5]);
if (val > 0.0) {
reax->tbp[j][k].r_s = val;
reax->tbp[k][j].r_s = val;
}
val = atof(tmp[6]);
if (val > 0.0) {
reax->tbp[j][k].r_p = val;
reax->tbp[k][j].r_p = val;
}
val = atof(tmp[7]);
if (val > 0.0) {
reax->tbp[j][k].r_pp = val;
reax->tbp[k][j].r_pp = val;
}
val = atof(tmp[8]);
if (val >= 0.0) {
reax->tbp[j][k].lgcij = val;
reax->tbp[k][j].lgcij = val;
}
}
}
for( i = 0; i < reax->num_atom_types; ++i )
for( j = 0; j < reax->num_atom_types; ++j )
for( k = 0; k < reax->num_atom_types; ++k )
reax->thbp[i][j][k].cnt = 0;
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
l = atoi( tmp[0] );
for( i = 0; i < l; i++ ) {
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
j = atoi(tmp[0]) - 1;
k = atoi(tmp[1]) - 1;
m = atoi(tmp[2]) - 1;
if (j < reax->num_atom_types && k < reax->num_atom_types &&
m < reax->num_atom_types) {
cnt = reax->thbp[j][k][m].cnt;
reax->thbp[j][k][m].cnt++;
reax->thbp[m][k][j].cnt++;
val = atof(tmp[3]);
reax->thbp[j][k][m].prm[cnt].theta_00 = val;
reax->thbp[m][k][j].prm[cnt].theta_00 = val;
val = atof(tmp[4]);
reax->thbp[j][k][m].prm[cnt].p_val1 = val;
reax->thbp[m][k][j].prm[cnt].p_val1 = val;
val = atof(tmp[5]);
reax->thbp[j][k][m].prm[cnt].p_val2 = val;
reax->thbp[m][k][j].prm[cnt].p_val2 = val;
val = atof(tmp[6]);
reax->thbp[j][k][m].prm[cnt].p_coa1 = val;
reax->thbp[m][k][j].prm[cnt].p_coa1 = val;
val = atof(tmp[7]);
reax->thbp[j][k][m].prm[cnt].p_val7 = val;
reax->thbp[m][k][j].prm[cnt].p_val7 = val;
val = atof(tmp[8]);
reax->thbp[j][k][m].prm[cnt].p_pen1 = val;
reax->thbp[m][k][j].prm[cnt].p_pen1 = val;
val = atof(tmp[9]);
reax->thbp[j][k][m].prm[cnt].p_val4 = val;
reax->thbp[m][k][j].prm[cnt].p_val4 = val;
}
}
/* clear all entries first */
for( i = 0; i < reax->num_atom_types; ++i )
for( j = 0; j < reax->num_atom_types; ++j )
for( k = 0; k < reax->num_atom_types; ++k )
for( m = 0; m < reax->num_atom_types; ++m ) {
reax->fbp[i][j][k][m].cnt = 0;
tor_flag[i][j][k][m] = 0;
}
/* next line is number of 4-body params and some comments */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
l = atoi( tmp[0] );
for( i = 0; i < l; i++ ) {
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
j = atoi(tmp[0]) - 1;
k = atoi(tmp[1]) - 1;
m = atoi(tmp[2]) - 1;
n = atoi(tmp[3]) - 1;
if (j >= 0 && n >= 0) { // this means the entry is not in compact form
if (j < reax->num_atom_types && k < reax->num_atom_types &&
m < reax->num_atom_types && n < reax->num_atom_types) {
tor_flag[j][k][m][n] = 1;
tor_flag[n][m][k][j] = 1;
reax->fbp[j][k][m][n].cnt = 1;
reax->fbp[n][m][k][j].cnt = 1;
val = atof(tmp[4]);
reax->fbp[j][k][m][n].prm[0].V1 = val;
reax->fbp[n][m][k][j].prm[0].V1 = val;
val = atof(tmp[5]);
reax->fbp[j][k][m][n].prm[0].V2 = val;
reax->fbp[n][m][k][j].prm[0].V2 = val;
val = atof(tmp[6]);
reax->fbp[j][k][m][n].prm[0].V3 = val;
reax->fbp[n][m][k][j].prm[0].V3 = val;
val = atof(tmp[7]);
reax->fbp[j][k][m][n].prm[0].p_tor1 = val;
reax->fbp[n][m][k][j].prm[0].p_tor1 = val;
val = atof(tmp[8]);
reax->fbp[j][k][m][n].prm[0].p_cot1 = val;
reax->fbp[n][m][k][j].prm[0].p_cot1 = val;
}
}
else { /* This means the entry is of the form 0-X-Y-0 */
if( k < reax->num_atom_types && m < reax->num_atom_types )
for( p = 0; p < reax->num_atom_types; p++ )
for( o = 0; o < reax->num_atom_types; o++ ) {
reax->fbp[p][k][m][o].cnt = 1;
reax->fbp[o][m][k][p].cnt = 1;
if (tor_flag[p][k][m][o] == 0) {
reax->fbp[p][k][m][o].prm[0].V1 = atof(tmp[4]);
reax->fbp[p][k][m][o].prm[0].V2 = atof(tmp[5]);
reax->fbp[p][k][m][o].prm[0].V3 = atof(tmp[6]);
reax->fbp[p][k][m][o].prm[0].p_tor1 = atof(tmp[7]);
reax->fbp[p][k][m][o].prm[0].p_cot1 = atof(tmp[8]);
}
if (tor_flag[o][m][k][p] == 0) {
reax->fbp[o][m][k][p].prm[0].V1 = atof(tmp[4]);
reax->fbp[o][m][k][p].prm[0].V2 = atof(tmp[5]);
reax->fbp[o][m][k][p].prm[0].V3 = atof(tmp[6]);
reax->fbp[o][m][k][p].prm[0].p_tor1 = atof(tmp[7]);
reax->fbp[o][m][k][p].prm[0].p_cot1 = atof(tmp[8]);
}
}
}
}
/* next line is number of hydrogen bond params and some comments */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
l = atoi( tmp[0] );
+ for( i = 0; i < reax->num_atom_types; ++i )
+ for( j = 0; j < reax->num_atom_types; ++j )
+ for( k = 0; k < reax->num_atom_types; ++k )
+ reax->hbp[i][j][k].r0_hb = -1.0;
+
for( i = 0; i < l; i++ ) {
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
j = atoi(tmp[0]) - 1;
k = atoi(tmp[1]) - 1;
m = atoi(tmp[2]) - 1;
if( j < reax->num_atom_types && m < reax->num_atom_types ) {
val = atof(tmp[3]);
reax->hbp[j][k][m].r0_hb = val;
val = atof(tmp[4]);
reax->hbp[j][k][m].p_hb1 = val;
val = atof(tmp[5]);
reax->hbp[j][k][m].p_hb2 = val;
val = atof(tmp[6]);
reax->hbp[j][k][m].p_hb3 = val;
}
}
/* deallocate helper storage */
for( i = 0; i < MAX_TOKENS; i++ )
free( tmp[i] );
free( tmp );
free( s );
/* deallocate tor_flag */
for( i = 0; i < reax->num_atom_types; i++ ) {
for( j = 0; j < reax->num_atom_types; j++ ) {
for( k = 0; k < reax->num_atom_types; k++ ) {
free( tor_flag[i][j][k] );
}
free( tor_flag[i][j] );
}
free( tor_flag[i] );
}
free( tor_flag );
// close file
fclose(fp);
return SUCCESS;
}
diff --git a/src/USER-REAXC/reaxc_hydrogen_bonds.cpp b/src/USER-REAXC/reaxc_hydrogen_bonds.cpp
index f58f9c584..8d7b3b381 100644
--- a/src/USER-REAXC/reaxc_hydrogen_bonds.cpp
+++ b/src/USER-REAXC/reaxc_hydrogen_bonds.cpp
@@ -1,183 +1,184 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "reaxc_hydrogen_bonds.h"
#include "reaxc_bond_orders.h"
#include "reaxc_list.h"
#include "reaxc_valence_angles.h"
#include "reaxc_vector.h"
void Hydrogen_Bonds( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, output_controls *out_control )
{
int i, j, k, pi, pk;
int type_i, type_j, type_k;
int start_j, end_j, hb_start_j, hb_end_j;
int hblist[MAX_BONDS];
int itr, top;
int num_hb_intrs = 0;
ivec rel_jk;
double r_jk, theta, cos_theta, sin_xhz4, cos_xhz1, sin_theta2;
double e_hb, exp_hb2, exp_hb3, CEhb1, CEhb2, CEhb3;
rvec dcos_theta_di, dcos_theta_dj, dcos_theta_dk;
rvec dvec_jk, force, ext_press;
hbond_parameters *hbp;
bond_order_data *bo_ij;
bond_data *pbond_ij;
far_neighbor_data *nbr_jk;
reax_list *bonds, *hbonds;
bond_data *bond_list;
hbond_data *hbond_list;
// tally variables
double fi_tmp[3], fk_tmp[3], delij[3], delkj[3];
bonds = (*lists) + BONDS;
bond_list = bonds->select.bond_list;
hbonds = (*lists) + HBONDS;
hbond_list = hbonds->select.hbond_list;
for( j = 0; j < system->n; ++j )
if( system->reax_param.sbp[system->my_atoms[j].type].p_hbond == 1 ) {
type_j = system->my_atoms[j].type;
start_j = Start_Index(j, bonds);
end_j = End_Index(j, bonds);
hb_start_j = Start_Index( system->my_atoms[j].Hindex, hbonds );
hb_end_j = End_Index( system->my_atoms[j].Hindex, hbonds );
if (type_j < 0) continue;
top = 0;
for( pi = start_j; pi < end_j; ++pi ) {
pbond_ij = &( bond_list[pi] );
i = pbond_ij->nbr;
type_i = system->my_atoms[i].type;
if (type_i < 0) continue;
bo_ij = &(pbond_ij->bo_data);
if( system->reax_param.sbp[type_i].p_hbond == 2 &&
bo_ij->BO >= HB_THRESHOLD )
hblist[top++] = pi;
}
for( pk = hb_start_j; pk < hb_end_j; ++pk ) {
/* set k's varibles */
k = hbond_list[pk].nbr;
type_k = system->my_atoms[k].type;
if (type_k < 0) continue;
nbr_jk = hbond_list[pk].ptr;
r_jk = nbr_jk->d;
rvec_Scale( dvec_jk, hbond_list[pk].scl, nbr_jk->dvec );
for( itr = 0; itr < top; ++itr ) {
pi = hblist[itr];
pbond_ij = &( bonds->select.bond_list[pi] );
i = pbond_ij->nbr;
if( system->my_atoms[i].orig_id != system->my_atoms[k].orig_id ) {
bo_ij = &(pbond_ij->bo_data);
type_i = system->my_atoms[i].type;
if (type_i < 0) continue;
hbp = &(system->reax_param.hbp[ type_i ][ type_j ][ type_k ]);
+ if (hbp->r0_hb <= 0.0) continue;
++num_hb_intrs;
Calculate_Theta( pbond_ij->dvec, pbond_ij->d, dvec_jk, r_jk,
&theta, &cos_theta );
/* the derivative of cos(theta) */
Calculate_dCos_Theta( pbond_ij->dvec, pbond_ij->d, dvec_jk, r_jk,
&dcos_theta_di, &dcos_theta_dj,
&dcos_theta_dk );
/* hyrogen bond energy*/
sin_theta2 = sin( theta/2.0 );
sin_xhz4 = SQR(sin_theta2);
sin_xhz4 *= sin_xhz4;
cos_xhz1 = ( 1.0 - cos_theta );
exp_hb2 = exp( -hbp->p_hb2 * bo_ij->BO );
exp_hb3 = exp( -hbp->p_hb3 * ( hbp->r0_hb / r_jk +
r_jk / hbp->r0_hb - 2.0 ) );
data->my_en.e_hb += e_hb =
hbp->p_hb1 * (1.0 - exp_hb2) * exp_hb3 * sin_xhz4;
CEhb1 = hbp->p_hb1 * hbp->p_hb2 * exp_hb2 * exp_hb3 * sin_xhz4;
CEhb2 = -hbp->p_hb1/2.0 * (1.0 - exp_hb2) * exp_hb3 * cos_xhz1;
CEhb3 = -hbp->p_hb3 *
(-hbp->r0_hb / SQR(r_jk) + 1.0 / hbp->r0_hb) * e_hb;
/* hydrogen bond forces */
bo_ij->Cdbo += CEhb1; // dbo term
if( control->virial == 0 ) {
// dcos terms
rvec_ScaledAdd( workspace->f[i], +CEhb2, dcos_theta_di );
rvec_ScaledAdd( workspace->f[j], +CEhb2, dcos_theta_dj );
rvec_ScaledAdd( workspace->f[k], +CEhb2, dcos_theta_dk );
// dr terms
rvec_ScaledAdd( workspace->f[j], -CEhb3/r_jk, dvec_jk );
rvec_ScaledAdd( workspace->f[k], +CEhb3/r_jk, dvec_jk );
}
else {
rvec_Scale( force, +CEhb2, dcos_theta_di ); // dcos terms
rvec_Add( workspace->f[i], force );
rvec_iMultiply( ext_press, pbond_ij->rel_box, force );
rvec_ScaledAdd( data->my_ext_press, 1.0, ext_press );
rvec_ScaledAdd( workspace->f[j], +CEhb2, dcos_theta_dj );
ivec_Scale( rel_jk, hbond_list[pk].scl, nbr_jk->rel_box );
rvec_Scale( force, +CEhb2, dcos_theta_dk );
rvec_Add( workspace->f[k], force );
rvec_iMultiply( ext_press, rel_jk, force );
rvec_ScaledAdd( data->my_ext_press, 1.0, ext_press );
// dr terms
rvec_ScaledAdd( workspace->f[j], -CEhb3/r_jk, dvec_jk );
rvec_Scale( force, CEhb3/r_jk, dvec_jk );
rvec_Add( workspace->f[k], force );
rvec_iMultiply( ext_press, rel_jk, force );
rvec_ScaledAdd( data->my_ext_press, 1.0, ext_press );
}
/* tally into per-atom virials */
if (system->pair_ptr->vflag_atom || system->pair_ptr->evflag) {
rvec_ScaledSum( delij, 1., system->my_atoms[j].x,
-1., system->my_atoms[i].x );
rvec_ScaledSum( delkj, 1., system->my_atoms[j].x,
-1., system->my_atoms[k].x );
rvec_Scale(fi_tmp, CEhb2, dcos_theta_di);
rvec_Scale(fk_tmp, CEhb2, dcos_theta_dk);
rvec_ScaledAdd(fk_tmp, CEhb3/r_jk, dvec_jk);
system->pair_ptr->ev_tally3(i,j,k,e_hb,0.0,fi_tmp,fk_tmp,delij,delkj);
}
}
}
}
}
}
diff --git a/src/USER-SMD/Install.sh b/src/USER-SMD/Install.sh
index 4cc736e96..c0f48c546 100644
--- a/src/USER-SMD/Install.sh
+++ b/src/USER-SMD/Install.sh
@@ -1,61 +1,65 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*smd[^ \t]* //g' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-I..\/..\/lib\/smd/includelink |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(user-smd_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(user-smd_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(user-smd_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*smd.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/smd\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*smd[^ \t]* //g' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*smd.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/USER-VTK/Install.sh b/src/USER-VTK/Install.sh
index d61e0640f..d02dc8777 100644
--- a/src/USER-VTK/Install.sh
+++ b/src/USER-VTK/Install.sh
@@ -1,60 +1,64 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*vtk[^ \t]* //g' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L..\/..\/lib\/vtk |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(vtk_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(vtk_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(vtk_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*vtk.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/vtk\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*vtk[^ \t]* //g' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*vtk.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/VORONOI/Install.sh b/src/VORONOI/Install.sh
index a93b2cab7..f21e9404e 100755
--- a/src/VORONOI/Install.sh
+++ b/src/VORONOI/Install.sh
@@ -1,65 +1,69 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
mode=$1
+# enforce using portable C locale
+LC_ALL=C
+export LC_ALL
+
# arg1 = file, arg2 = file it depends on
action () {
if (test $mode = 0) then
rm -f ../$1
elif (! cmp -s $1 ../$1) then
if (test -z "$2" || test -e ../$2) then
cp $1 ..
if (test $mode = 2) then
echo " updating src/$1"
fi
fi
elif (test -n "$2") then
if (test ! -e ../$2) then
rm -f ../$1
fi
fi
}
# all package files with no dependencies
for file in *.cpp *.h; do
action $file
done
# edit 2 Makefile.package files to include/exclude package info
if (test $1 = 1) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*voronoi[^ \t]* //' ../Makefile.package
sed -i -e 's/[^ \t]*voro++[^ \t]* //' ../Makefile.package
sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/voronoi/includelink |' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/voronoi/liblink |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&-lvoro++ |' ../Makefile.package
sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(voronoi_SYSINC) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(voronoi_SYSLIB) |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(voronoi_SYSPATH) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*voronoi.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/voronoi\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*voronoi[^ \t]* //' ../Makefile.package
sed -i -e 's/[^ \t]*voro++[^ \t]* //' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*voronoi.*$/d' ../Makefile.package.settings
fi
fi
diff --git a/src/accelerator_kokkos.h b/src/accelerator_kokkos.h
index 0c9c12156..ecba20da6 100644
--- a/src/accelerator_kokkos.h
+++ b/src/accelerator_kokkos.h
@@ -1,96 +1,97 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifndef LMP_ACCELERATOR_KOKKOS_H
#define LMP_ACCELERATOR_KOKKOS_H
// true interface to KOKKOS
// used when KOKKOS is installed
#ifdef LMP_KOKKOS
#include "kokkos.h"
#include "atom_kokkos.h"
#include "comm_kokkos.h"
#include "domain_kokkos.h"
#include "neighbor_kokkos.h"
#include "modify_kokkos.h"
#else
// dummy interface to KOKKOS
// needed for compiling when KOKKOS is not installed
#include "atom.h"
#include "comm_brick.h"
#include "domain.h"
#include "neighbor.h"
#include "modify.h"
namespace LAMMPS_NS {
class KokkosLMP {
public:
int kokkos_exists;
int num_threads;
+ int ngpu;
int numa;
KokkosLMP(class LAMMPS *, int, char **) {kokkos_exists = 0;}
~KokkosLMP() {}
void accelerator(int, char **) {}
int neigh_list_kokkos(int) {return 0;}
int neigh_count(int) {return 0;}
};
class AtomKokkos : public Atom {
public:
tagint **k_special;
AtomKokkos(class LAMMPS *lmp) : Atom(lmp) {}
~AtomKokkos() {}
};
class CommKokkos : public CommBrick {
public:
CommKokkos(class LAMMPS *lmp) : CommBrick(lmp) {}
~CommKokkos() {}
};
class DomainKokkos : public Domain {
public:
DomainKokkos(class LAMMPS *lmp) : Domain(lmp) {}
~DomainKokkos() {}
};
class NeighborKokkos : public Neighbor {
public:
NeighborKokkos(class LAMMPS *lmp) : Neighbor(lmp) {}
~NeighborKokkos() {}
};
class ModifyKokkos : public Modify {
public:
ModifyKokkos(class LAMMPS *lmp) : Modify(lmp) {}
~ModifyKokkos() {}
};
class DAT {
public:
typedef double tdual_xfloat_1d;
typedef int t_int_1d;
typedef int tdual_int_2d;
};
}
#endif
#endif
diff --git a/src/compute.cpp b/src/compute.cpp
index 153116e4d..96bf6ceb5 100644
--- a/src/compute.cpp
+++ b/src/compute.cpp
@@ -1,234 +1,231 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "compute.h"
#include "atom.h"
#include "domain.h"
#include "force.h"
#include "comm.h"
#include "group.h"
#include "modify.h"
#include "fix.h"
#include "atom_masks.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
#define DELTA 4
#define BIG MAXTAGINT
// allocate space for static class instance variable and initialize it
int Compute::instance_total = 0;
/* ---------------------------------------------------------------------- */
-Compute::Compute(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp)
+Compute::Compute(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp),
+ id(NULL), style(NULL),
+ vector(NULL), array(NULL), vector_atom(NULL), array_atom(NULL), vector_local(NULL), array_local(NULL),
+ tlist(NULL), vbiasall(NULL)
{
instance_me = instance_total++;
-
+
if (narg < 3) error->all(FLERR,"Illegal compute command");
// compute ID, group, and style
// ID must be all alphanumeric chars or underscores
int n = strlen(arg[0]) + 1;
id = new char[n];
strcpy(id,arg[0]);
for (int i = 0; i < n-1; i++)
if (!isalnum(id[i]) && id[i] != '_')
error->all(FLERR,
"Compute ID must be alphanumeric or underscore characters");
igroup = group->find(arg[1]);
if (igroup == -1) error->all(FLERR,"Could not find compute group ID");
groupbit = group->bitmask[igroup];
n = strlen(arg[2]) + 1;
style = new char[n];
strcpy(style,arg[2]);
// set child class defaults
scalar_flag = vector_flag = array_flag = 0;
peratom_flag = local_flag = 0;
size_vector_variable = size_array_rows_variable = 0;
tempflag = pressflag = peflag = 0;
pressatomflag = peatomflag = 0;
create_attribute = 0;
tempbias = 0;
timeflag = 0;
comm_forward = comm_reverse = 0;
dynamic = 0;
dynamic_group_allow = 1;
invoked_scalar = invoked_vector = invoked_array = -1;
invoked_peratom = invoked_local = -1;
invoked_flag = 0;
// set modify defaults
extra_dof = domain->dimension;
dynamic_user = 0;
fix_dof = 0;
// setup list of timesteps
ntime = maxtime = 0;
- tlist = NULL;
-
+
// data masks
datamask = ALL_MASK;
datamask_ext = ALL_MASK;
execution_space = Host;
datamask_read = ALL_MASK;
datamask_modify = ALL_MASK;
copymode = 0;
-
- // force init to zero in case these are used as logicals
-
- vector = vector_atom = vector_local = NULL;
- array = array_atom = array_local = NULL;
}
/* ---------------------------------------------------------------------- */
Compute::~Compute()
{
if (copymode) return;
delete [] id;
delete [] style;
memory->destroy(tlist);
}
/* ---------------------------------------------------------------------- */
void Compute::modify_params(int narg, char **arg)
{
if (narg == 0) error->all(FLERR,"Illegal compute_modify command");
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"extra") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute_modify command");
extra_dof = force->numeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"dynamic") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute_modify command");
if (strcmp(arg[iarg+1],"no") == 0) dynamic_user = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) dynamic_user = 1;
else error->all(FLERR,"Illegal compute_modify command");
iarg += 2;
} else error->all(FLERR,"Illegal compute_modify command");
}
}
/* ----------------------------------------------------------------------
calculate adjustment in DOF due to fixes
------------------------------------------------------------------------- */
void Compute::adjust_dof_fix()
{
Fix **fix = modify->fix;
int nfix = modify->nfix;
fix_dof = 0;
for (int i = 0; i < nfix; i++)
if (fix[i]->dof_flag)
fix_dof += fix[i]->dof(igroup);
}
/* ----------------------------------------------------------------------
reset extra_dof to its default value
------------------------------------------------------------------------- */
void Compute::reset_extra_dof()
{
extra_dof = domain->dimension;
}
/* ---------------------------------------------------------------------- */
void Compute::reset_extra_compute_fix(const char *)
{
error->all(FLERR,
"Compute does not allow an extra compute or fix to be reset");
}
/* ----------------------------------------------------------------------
add ntimestep to list of timesteps the compute will be called on
do not add if already in list
search from top downward, since list of times is in decreasing order
------------------------------------------------------------------------- */
void Compute::addstep(bigint ntimestep)
{
// i = location in list to insert ntimestep
int i;
for (i = ntime-1; i >= 0; i--) {
if (ntimestep == tlist[i]) return;
if (ntimestep < tlist[i]) break;
}
i++;
// extend list as needed
if (ntime == maxtime) {
maxtime += DELTA;
memory->grow(tlist,maxtime,"compute:tlist");
}
// move remainder of list upward and insert ntimestep
for (int j = ntime-1; j >= i; j--) tlist[j+1] = tlist[j];
tlist[i] = ntimestep;
ntime++;
}
/* ----------------------------------------------------------------------
return 1/0 if ntimestep is or is not in list of calling timesteps
if value(s) on top of list are less than ntimestep, delete them
search from top downward, since list of times is in decreasing order
------------------------------------------------------------------------- */
int Compute::matchstep(bigint ntimestep)
{
for (int i = ntime-1; i >= 0; i--) {
if (ntimestep < tlist[i]) return 0;
if (ntimestep == tlist[i]) return 1;
if (ntimestep > tlist[i]) ntime--;
}
return 0;
}
/* ----------------------------------------------------------------------
clean out list of timesteps to call the compute on
------------------------------------------------------------------------- */
void Compute::clearstep()
{
ntime = 0;
}
diff --git a/src/compute_angle.cpp b/src/compute_angle.cpp
index 9301d3ed7..a9fe0f817 100644
--- a/src/compute_angle.cpp
+++ b/src/compute_angle.cpp
@@ -1,80 +1,81 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include "compute_angle.h"
#include "update.h"
#include "force.h"
#include "angle_hybrid.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeAngle::ComputeAngle(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ emine(NULL)
{
if (narg != 3) error->all(FLERR,"Illegal compute angle command");
vector_flag = 1;
extvector = 1;
peflag = 1;
timeflag = 1;
// check if bond style hybrid exists
angle = (AngleHybrid *) force->angle_match("hybrid");
if (!angle)
error->all(FLERR,"Angle style for compute angle command is not hybrid");
size_vector = nsub = angle->nstyles;
emine = new double[nsub];
vector = new double[nsub];
}
/* ---------------------------------------------------------------------- */
ComputeAngle::~ComputeAngle()
{
delete [] emine;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeAngle::init()
{
// recheck angle style in case it has been changed
angle = (AngleHybrid *) force->angle_match("hybrid");
if (!angle)
error->all(FLERR,"Angle style for compute angle command is not hybrid");
if (angle->nstyles != nsub)
error->all(FLERR,"Angle style for compute angle command has changed");
}
/* ---------------------------------------------------------------------- */
void ComputeAngle::compute_vector()
{
invoked_vector = update->ntimestep;
if (update->eflag_global != invoked_vector)
error->all(FLERR,"Energy was not tallied on needed timestep");
for (int i = 0; i < nsub; i++)
emine[i] = angle->styles[i]->energy;
MPI_Allreduce(emine,vector,nsub,MPI_DOUBLE,MPI_SUM,world);
}
diff --git a/src/compute_angle_local.cpp b/src/compute_angle_local.cpp
index 031d4856b..2ea78311a 100644
--- a/src/compute_angle_local.cpp
+++ b/src/compute_angle_local.cpp
@@ -1,246 +1,245 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include "compute_angle_local.h"
#include "atom.h"
#include "atom_vec.h"
#include "molecule.h"
#include "update.h"
#include "domain.h"
#include "force.h"
#include "angle.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace MathConst;
#define DELTA 10000
/* ---------------------------------------------------------------------- */
ComputeAngleLocal::ComputeAngleLocal(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ vector(NULL), array(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute angle/local command");
if (atom->avec->angles_allow == 0)
error->all(FLERR,"Compute angle/local used when angles are not allowed");
local_flag = 1;
nvalues = narg - 3;
if (nvalues == 1) size_local_cols = 0;
else size_local_cols = nvalues;
tflag = eflag = -1;
nvalues = 0;
for (int iarg = 3; iarg < narg; iarg++) {
if (strcmp(arg[iarg],"theta") == 0) tflag = nvalues++;
else if (strcmp(arg[iarg],"eng") == 0) eflag = nvalues++;
else error->all(FLERR,"Invalid keyword in compute angle/local command");
}
nmax = 0;
- vector = NULL;
- array = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeAngleLocal::~ComputeAngleLocal()
{
memory->destroy(vector);
memory->destroy(array);
}
/* ---------------------------------------------------------------------- */
void ComputeAngleLocal::init()
{
if (force->angle == NULL)
error->all(FLERR,"No angle style is defined for compute angle/local");
// do initial memory allocation so that memory_usage() is correct
ncount = compute_angles(0);
if (ncount > nmax) reallocate(ncount);
size_local_rows = ncount;
}
/* ---------------------------------------------------------------------- */
void ComputeAngleLocal::compute_local()
{
invoked_local = update->ntimestep;
// count local entries and compute angle info
ncount = compute_angles(0);
if (ncount > nmax) reallocate(ncount);
size_local_rows = ncount;
ncount = compute_angles(1);
}
/* ----------------------------------------------------------------------
count angles and compute angle info on this proc
only count if 2nd atom is the one storing the angle
all atoms in interaction must be in group
all atoms in interaction must be known to proc
if angle is deleted (type = 0), do not count
if angle is turned off (type < 0), still count
if flag is set, compute requested info about angle
if angle is turned off (type < 0), energy = 0.0
------------------------------------------------------------------------- */
int ComputeAngleLocal::compute_angles(int flag)
{
int i,m,n,na,atom1,atom2,atom3,imol,iatom,atype;
tagint tagprev;
double delx1,dely1,delz1,delx2,dely2,delz2;
double rsq1,rsq2,r1,r2,c;
double *tbuf,*ebuf;
double **x = atom->x;
tagint *tag = atom->tag;
int *num_angle = atom->num_angle;
tagint **angle_atom1 = atom->angle_atom1;
tagint **angle_atom2 = atom->angle_atom2;
tagint **angle_atom3 = atom->angle_atom3;
int **angle_type = atom->angle_type;
int *mask = atom->mask;
int *molindex = atom->molindex;
int *molatom = atom->molatom;
Molecule **onemols = atom->avec->onemols;
int nlocal = atom->nlocal;
int molecular = atom->molecular;
if (flag) {
if (nvalues == 1) {
if (tflag >= 0) tbuf = vector;
if (eflag >= 0) ebuf = vector;
} else {
if (tflag >= 0 && array) tbuf = &array[0][tflag];
else tbuf = NULL;
if (eflag >= 0 && array) ebuf = &array[0][eflag];
else ebuf = NULL;
}
}
Angle *angle = force->angle;
m = n = 0;
for (atom2 = 0; atom2 < nlocal; atom2++) {
if (!(mask[atom2] & groupbit)) continue;
if (molecular == 1) na = num_angle[atom2];
else {
if (molindex[atom2] < 0) continue;
imol = molindex[atom2];
iatom = molatom[atom2];
na = onemols[imol]->num_angle[iatom];
}
for (i = 0; i < na; i++) {
if (molecular == 1) {
if (tag[atom2] != angle_atom2[atom2][i]) continue;
atype = angle_type[atom2][i];
atom1 = atom->map(angle_atom1[atom2][i]);
atom3 = atom->map(angle_atom3[atom2][i]);
} else {
if (tag[atom2] != onemols[imol]->angle_atom2[atom2][i]) continue;
tagprev = tag[atom2] - iatom - 1;
atype = atom->map(onemols[imol]->angle_type[atom2][i]);
atom1 = atom->map(onemols[imol]->angle_atom1[atom2][i]+tagprev);
atom3 = atom->map(onemols[imol]->angle_atom3[atom2][i]+tagprev);
}
if (atom1 < 0 || !(mask[atom1] & groupbit)) continue;
if (atom3 < 0 || !(mask[atom3] & groupbit)) continue;
if (atype == 0) continue;
if (flag) {
if (tflag >= 0) {
delx1 = x[atom1][0] - x[atom2][0];
dely1 = x[atom1][1] - x[atom2][1];
delz1 = x[atom1][2] - x[atom2][2];
domain->minimum_image(delx1,dely1,delz1);
rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1;
r1 = sqrt(rsq1);
delx2 = x[atom3][0] - x[atom2][0];
dely2 = x[atom3][1] - x[atom2][1];
delz2 = x[atom3][2] - x[atom2][2];
domain->minimum_image(delx2,dely2,delz2);
rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2;
r2 = sqrt(rsq2);
// c = cosine of angle
c = delx1*delx2 + dely1*dely2 + delz1*delz2;
c /= r1*r2;
if (c > 1.0) c = 1.0;
if (c < -1.0) c = -1.0;
tbuf[n] = 180.0*acos(c)/MY_PI;
}
if (eflag >= 0) {
if (atype > 0)
ebuf[n] = angle->single(atype,atom1,atom2,atom3);
else ebuf[n] = 0.0;
}
n += nvalues;
}
m++;
}
}
return m;
}
/* ---------------------------------------------------------------------- */
void ComputeAngleLocal::reallocate(int n)
{
// grow vector or array and indices array
while (nmax < n) nmax += DELTA;
if (nvalues == 1) {
memory->destroy(vector);
memory->create(vector,nmax,"bond/local:vector");
vector_local = vector;
} else {
memory->destroy(array);
memory->create(array,nmax,nvalues,"bond/local:array");
array_local = array;
}
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeAngleLocal::memory_usage()
{
double bytes = nmax*nvalues * sizeof(double);
return bytes;
}
diff --git a/src/compute_angmom_chunk.cpp b/src/compute_angmom_chunk.cpp
index 5e88f5bc2..98c6ea044 100644
--- a/src/compute_angmom_chunk.cpp
+++ b/src/compute_angmom_chunk.cpp
@@ -1,257 +1,255 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_angmom_chunk.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeAngmomChunk::ComputeAngmomChunk(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ idchunk(NULL), massproc(NULL), masstotal(NULL), com(NULL), comall(NULL), angmom(NULL), angmomall(NULL)
{
if (narg != 4) error->all(FLERR,"Illegal compute angmom/chunk command");
array_flag = 1;
size_array_cols = 3;
size_array_rows = 0;
size_array_rows_variable = 1;
extarray = 0;
// ID of compute chunk/atom
int n = strlen(arg[3]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[3]);
init();
// chunk-based data
nchunk = 1;
maxchunk = 0;
- massproc = masstotal = NULL;
- com = comall = NULL;
- angmom = angmomall = NULL;
allocate();
}
/* ---------------------------------------------------------------------- */
ComputeAngmomChunk::~ComputeAngmomChunk()
{
delete [] idchunk;
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(angmom);
memory->destroy(angmomall);
}
/* ---------------------------------------------------------------------- */
void ComputeAngmomChunk::init()
{
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for "
"compute angmom/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Compute angmom/chunk does not use chunk/atom compute");
}
/* ---------------------------------------------------------------------- */
void ComputeAngmomChunk::compute_array()
{
int i,index;
double dx,dy,dz,massone;
double unwrap[3];
invoked_array = update->ntimestep;
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
int *ichunk = cchunk->ichunk;
if (nchunk > maxchunk) allocate();
size_array_rows = nchunk;
// zero local per-chunk values
for (int i = 0; i < nchunk; i++) {
massproc[i] = 0.0;
com[i][0] = com[i][1] = com[i][2] = 0.0;
angmom[i][0] = angmom[i][1] = angmom[i][2] = 0.0;
}
// compute COM for each chunk
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
domain->unmap(x[i],image[i],unwrap);
massproc[index] += massone;
com[index][0] += unwrap[0] * massone;
com[index][1] += unwrap[1] * massone;
com[index][2] += unwrap[2] * massone;
}
MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < nchunk; i++) {
if (masstotal[i] > 0.0) {
comall[i][0] /= masstotal[i];
comall[i][1] /= masstotal[i];
comall[i][2] /= masstotal[i];
}
}
// compute angmom for each chunk
double **v = atom->v;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - comall[index][0];
dy = unwrap[1] - comall[index][1];
dz = unwrap[2] - comall[index][2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
angmom[index][0] += massone * (dy*v[i][2] - dz*v[i][1]);
angmom[index][1] += massone * (dz*v[i][0] - dx*v[i][2]);
angmom[index][2] += massone * (dx*v[i][1] - dy*v[i][0]);
}
MPI_Allreduce(&angmom[0][0],&angmomall[0][0],3*nchunk,
MPI_DOUBLE,MPI_SUM,world);
}
/* ----------------------------------------------------------------------
lock methods: called by fix ave/time
these methods insure vector/array size is locked for Nfreq epoch
by passing lock info along to compute chunk/atom
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
increment lock counter
------------------------------------------------------------------------- */
void ComputeAngmomChunk::lock_enable()
{
cchunk->lockcount++;
}
/* ----------------------------------------------------------------------
decrement lock counter in compute chunk/atom, it if still exists
------------------------------------------------------------------------- */
void ComputeAngmomChunk::lock_disable()
{
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->lockcount--;
}
}
/* ----------------------------------------------------------------------
calculate and return # of chunks = length of vector/array
------------------------------------------------------------------------- */
int ComputeAngmomChunk::lock_length()
{
nchunk = cchunk->setup_chunks();
return nchunk;
}
/* ----------------------------------------------------------------------
set the lock from startstep to stopstep
------------------------------------------------------------------------- */
void ComputeAngmomChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
cchunk->lock(fixptr,startstep,stopstep);
}
/* ----------------------------------------------------------------------
unset the lock
------------------------------------------------------------------------- */
void ComputeAngmomChunk::unlock(Fix *fixptr)
{
cchunk->unlock(fixptr);
}
/* ----------------------------------------------------------------------
free and reallocate per-chunk arrays
------------------------------------------------------------------------- */
void ComputeAngmomChunk::allocate()
{
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(angmom);
memory->destroy(angmomall);
maxchunk = nchunk;
memory->create(massproc,maxchunk,"angmom/chunk:massproc");
memory->create(masstotal,maxchunk,"angmom/chunk:masstotal");
memory->create(com,maxchunk,3,"angmom/chunk:com");
memory->create(comall,maxchunk,3,"angmom/chunk:comall");
memory->create(angmom,maxchunk,3,"angmom/chunk:angmom");
memory->create(angmomall,maxchunk,3,"angmom/chunk:angmomall");
array = angmomall;
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeAngmomChunk::memory_usage()
{
double bytes = (bigint) maxchunk * 2 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
return bytes;
}
diff --git a/src/compute_bond.cpp b/src/compute_bond.cpp
index 241702d67..29869713e 100644
--- a/src/compute_bond.cpp
+++ b/src/compute_bond.cpp
@@ -1,80 +1,81 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include "compute_bond.h"
#include "update.h"
#include "force.h"
#include "bond_hybrid.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeBond::ComputeBond(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ emine(NULL)
{
if (narg != 3) error->all(FLERR,"Illegal compute bond command");
vector_flag = 1;
extvector = 1;
peflag = 1;
timeflag = 1;
// check if bond style hybrid exists
bond = (BondHybrid *) force->bond_match("hybrid");
if (!bond)
error->all(FLERR,"Bond style for compute bond command is not hybrid");
size_vector = nsub = bond->nstyles;
emine = new double[nsub];
vector = new double[nsub];
}
/* ---------------------------------------------------------------------- */
ComputeBond::~ComputeBond()
{
delete [] emine;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeBond::init()
{
// recheck bond style in case it has been changed
bond = (BondHybrid *) force->bond_match("hybrid");
if (!bond)
error->all(FLERR,"Bond style for compute bond command is not hybrid");
if (bond->nstyles != nsub)
error->all(FLERR,"Bond style for compute bond command has changed");
}
/* ---------------------------------------------------------------------- */
void ComputeBond::compute_vector()
{
invoked_vector = update->ntimestep;
if (update->eflag_global != invoked_vector)
error->all(FLERR,"Energy was not tallied on needed timestep");
for (int i = 0; i < nsub; i++)
emine[i] = bond->styles[i]->energy;
MPI_Allreduce(emine,vector,nsub,MPI_DOUBLE,MPI_SUM,world);
}
diff --git a/src/compute_bond_local.cpp b/src/compute_bond_local.cpp
index 9cea55de5..f7917acd2 100644
--- a/src/compute_bond_local.cpp
+++ b/src/compute_bond_local.cpp
@@ -1,231 +1,230 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include "compute_bond_local.h"
#include "atom.h"
#include "atom_vec.h"
#include "molecule.h"
#include "update.h"
#include "domain.h"
#include "force.h"
#include "bond.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
#define DELTA 10000
enum{DIST,ENG,FORCE};
/* ---------------------------------------------------------------------- */
ComputeBondLocal::ComputeBondLocal(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ bstyle(NULL), vector(NULL), array(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute bond/local command");
if (atom->avec->bonds_allow == 0)
error->all(FLERR,"Compute bond/local used when bonds are not allowed");
local_flag = 1;
nvalues = narg - 3;
if (nvalues == 1) size_local_cols = 0;
else size_local_cols = nvalues;
bstyle = new int[nvalues];
nvalues = 0;
for (int iarg = 3; iarg < narg; iarg++) {
if (strcmp(arg[iarg],"dist") == 0) bstyle[nvalues++] = DIST;
else if (strcmp(arg[iarg],"eng") == 0) bstyle[nvalues++] = ENG;
else if (strcmp(arg[iarg],"force") == 0) bstyle[nvalues++] = FORCE;
else error->all(FLERR,"Invalid keyword in compute bond/local command");
}
// set singleflag if need to call bond->single()
singleflag = 0;
for (int i = 0; i < nvalues; i++)
if (bstyle[i] != DIST) singleflag = 1;
nmax = 0;
- vector = NULL;
- array = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeBondLocal::~ComputeBondLocal()
{
memory->destroy(vector);
memory->destroy(array);
delete [] bstyle;
}
/* ---------------------------------------------------------------------- */
void ComputeBondLocal::init()
{
if (force->bond == NULL)
error->all(FLERR,"No bond style is defined for compute bond/local");
// do initial memory allocation so that memory_usage() is correct
ncount = compute_bonds(0);
if (ncount > nmax) reallocate(ncount);
size_local_rows = ncount;
}
/* ---------------------------------------------------------------------- */
void ComputeBondLocal::compute_local()
{
invoked_local = update->ntimestep;
// count local entries and compute bond info
ncount = compute_bonds(0);
if (ncount > nmax) reallocate(ncount);
size_local_rows = ncount;
ncount = compute_bonds(1);
}
/* ----------------------------------------------------------------------
count bonds and compute bond info on this proc
only count bond once if newton_bond is off
all atoms in interaction must be in group
all atoms in interaction must be known to proc
if bond is deleted (type = 0), do not count
if bond is turned off (type < 0), still count
if flag is set, compute requested info about bond
if bond is turned off (type < 0), energy = 0.0
------------------------------------------------------------------------- */
int ComputeBondLocal::compute_bonds(int flag)
{
int i,m,n,nb,atom1,atom2,imol,iatom,btype;
tagint tagprev;
double delx,dely,delz,rsq;
double *ptr;
double **x = atom->x;
tagint *tag = atom->tag;
int *num_bond = atom->num_bond;
tagint **bond_atom = atom->bond_atom;
int **bond_type = atom->bond_type;
int *mask = atom->mask;
int *molindex = atom->molindex;
int *molatom = atom->molatom;
Molecule **onemols = atom->avec->onemols;
int nlocal = atom->nlocal;
int newton_bond = force->newton_bond;
int molecular = atom->molecular;
Bond *bond = force->bond;
double eng,fbond;
m = n = 0;
for (atom1 = 0; atom1 < nlocal; atom1++) {
if (!(mask[atom1] & groupbit)) continue;
if (molecular == 1) nb = num_bond[atom1];
else {
if (molindex[atom1] < 0) continue;
imol = molindex[atom1];
iatom = molatom[atom1];
nb = onemols[imol]->num_bond[iatom];
}
for (i = 0; i < nb; i++) {
if (molecular == 1) {
btype = bond_type[atom1][i];
atom2 = atom->map(bond_atom[atom1][i]);
} else {
tagprev = tag[atom1] - iatom - 1;
btype = atom->map(onemols[imol]->bond_type[iatom][i]);
atom2 = atom->map(onemols[imol]->bond_atom[iatom][i]+tagprev);
}
if (atom2 < 0 || !(mask[atom2] & groupbit)) continue;
if (newton_bond == 0 && tag[atom1] > tag[atom2]) continue;
if (btype == 0) continue;
if (flag) {
delx = x[atom1][0] - x[atom2][0];
dely = x[atom1][1] - x[atom2][1];
delz = x[atom1][2] - x[atom2][2];
domain->minimum_image(delx,dely,delz);
rsq = delx*delx + dely*dely + delz*delz;
if (singleflag && (btype > 0))
eng = bond->single(btype,rsq,atom1,atom2,fbond);
else eng = fbond = 0.0;
if (nvalues == 1) ptr = &vector[m];
else ptr = array[m];
for (n = 0; n < nvalues; n++) {
switch (bstyle[n]) {
case DIST:
ptr[n] = sqrt(rsq);
break;
case ENG:
ptr[n] = eng;
break;
case FORCE:
ptr[n] = sqrt(rsq)*fbond;
break;
}
}
}
m++;
}
}
return m;
}
/* ---------------------------------------------------------------------- */
void ComputeBondLocal::reallocate(int n)
{
// grow vector or array and indices array
while (nmax < n) nmax += DELTA;
if (nvalues == 1) {
memory->destroy(vector);
memory->create(vector,nmax,"bond/local:vector");
vector_local = vector;
} else {
memory->destroy(array);
memory->create(array,nmax,nvalues,"bond/local:array");
array_local = array;
}
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeBondLocal::memory_usage()
{
double bytes = nmax*nvalues * sizeof(double);
return bytes;
}
diff --git a/src/compute_centro_atom.cpp b/src/compute_centro_atom.cpp
index 3640b1126..3f88095d7 100644
--- a/src/compute_centro_atom.cpp
+++ b/src/compute_centro_atom.cpp
@@ -1,441 +1,438 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Michel Perez (U Lyon) for non-fcc lattices
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include "compute_centro_atom.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "force.h"
#include "pair.h"
#include "comm.h"
#include "math_extra.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeCentroAtom::ComputeCentroAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ distsq(NULL), nearest(NULL), centro(NULL)
{
if (narg < 4 || narg > 6) error->all(FLERR,"Illegal compute centro/atom command");
if (strcmp(arg[3],"fcc") == 0) nnn = 12;
else if (strcmp(arg[3],"bcc") == 0) nnn = 8;
else nnn = force->inumeric(FLERR,arg[3]);
// default values
axes_flag = 0;
// optional keywords
int iarg = 4;
while (iarg < narg) {
if (strcmp(arg[iarg],"axes") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute centro/atom command3");
if (strcmp(arg[iarg+1],"yes") == 0) axes_flag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) axes_flag = 0;
else error->all(FLERR,"Illegal compute centro/atom command2");
iarg += 2;
} else error->all(FLERR,"Illegal compute centro/atom command1");
}
if (nnn <= 0 || nnn % 2)
error->all(FLERR,"Illegal neighbor value for compute centro/atom command");
peratom_flag = 1;
if (!axes_flag) size_peratom_cols = 0;
else size_peratom_cols = 10;
nmax = 0;
- centro = NULL;
maxneigh = 0;
- distsq = NULL;
- nearest = NULL;
- array_atom = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeCentroAtom::~ComputeCentroAtom()
{
memory->destroy(centro);
memory->destroy(distsq);
memory->destroy(nearest);
if (axes_flag) memory->destroy(array_atom);
}
/* ---------------------------------------------------------------------- */
void ComputeCentroAtom::init()
{
if (force->pair == NULL)
error->all(FLERR,"Compute centro/atom requires a pair style be defined");
int count = 0;
for (int i = 0; i < modify->ncompute; i++)
if (strcmp(modify->compute[i]->style,"centro/atom") == 0) count++;
if (count > 1 && comm->me == 0)
error->warning(FLERR,"More than one compute centro/atom");
// need an occasional full neighbor list
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->half = 0;
neighbor->requests[irequest]->full = 1;
neighbor->requests[irequest]->occasional = 1;
}
/* ---------------------------------------------------------------------- */
void ComputeCentroAtom::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void ComputeCentroAtom::compute_peratom()
{
int i,j,k,ii,jj,kk,n,inum,jnum;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq,value;
int *ilist,*jlist,*numneigh,**firstneigh;
invoked_peratom = update->ntimestep;
// grow centro array if necessary
// grow array_atom array if axes_flag set
if (atom->nmax > nmax) {
if (!axes_flag) {
memory->destroy(centro);
nmax = atom->nmax;
memory->create(centro,nmax,"centro/atom:centro");
vector_atom = centro;
} else {
memory->destroy(centro);
memory->destroy(array_atom);
nmax = atom->nmax;
memory->create(centro,nmax,"centro/atom:centro");
memory->create(array_atom,nmax,size_peratom_cols,"centro/atom:array_atom");
}
}
// invoke full neighbor list (will copy or build if necessary)
neighbor->build_one(list);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// npairs = number of unique pairs
int nhalf = nnn/2;
int npairs = nnn * (nnn-1) / 2;
double *pairs = new double[npairs];
// compute centro-symmetry parameter for each atom in group
// use full neighbor list
double **x = atom->x;
int *mask = atom->mask;
double cutsq = force->pair->cutforce * force->pair->cutforce;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (mask[i] & groupbit) {
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
jlist = firstneigh[i];
jnum = numneigh[i];
// insure distsq and nearest arrays are long enough
if (jnum > maxneigh) {
memory->destroy(distsq);
memory->destroy(nearest);
maxneigh = jnum;
memory->create(distsq,maxneigh,"centro/atom:distsq");
memory->create(nearest,maxneigh,"centro/atom:nearest");
}
// loop over list of all neighbors within force cutoff
// distsq[] = distance sq to each
// nearest[] = atom indices of neighbors
n = 0;
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq < cutsq) {
distsq[n] = rsq;
nearest[n++] = j;
}
}
// check whether to include local crystal symmetry axes
if (!axes_flag) {
// if not nnn neighbors, centro = 0.0
if (n < nnn) {
centro[i] = 0.0;
continue;
}
// store nnn nearest neighs in 1st nnn locations of distsq and nearest
select2(nnn,n,distsq,nearest);
// R = Ri + Rj for each of npairs i,j pairs among nnn neighbors
// pairs = squared length of each R
n = 0;
for (j = 0; j < nnn; j++) {
jj = nearest[j];
for (k = j+1; k < nnn; k++) {
kk = nearest[k];
delx = x[jj][0] + x[kk][0] - 2.0*xtmp;
dely = x[jj][1] + x[kk][1] - 2.0*ytmp;
delz = x[jj][2] + x[kk][2] - 2.0*ztmp;
pairs[n++] = delx*delx + dely*dely + delz*delz;
}
}
} else {
// calculate local crystal symmetry axes
// rsq1, rsq2 are two smallest values of R^2
// R1, R2 are corresponding vectors Ri - Rj
// R3 is normal to R1, R2
double rsq1,rsq2;
double* r1 = &array_atom[i][1];
double* r2 = &array_atom[i][4];
double* r3 = &array_atom[i][7];
if (n < nnn) {
centro[i] = 0.0;
MathExtra::zero3(r1);
MathExtra::zero3(r2);
MathExtra::zero3(r3);
continue;
}
// store nnn nearest neighs in 1st nnn locations of distsq and nearest
select2(nnn,n,distsq,nearest);
n = 0;
rsq1 = rsq2 = cutsq;
for (j = 0; j < nnn; j++) {
jj = nearest[j];
for (k = j+1; k < nnn; k++) {
kk = nearest[k];
delx = x[jj][0] + x[kk][0] - 2.0*xtmp;
dely = x[jj][1] + x[kk][1] - 2.0*ytmp;
delz = x[jj][2] + x[kk][2] - 2.0*ztmp;
double rsq = delx*delx + dely*dely + delz*delz;
pairs[n++] = rsq;
if (rsq < rsq2) {
if (rsq < rsq1) {
rsq2 = rsq1;
MathExtra::copy3(r1, r2);
rsq1 = rsq;
MathExtra::sub3(x[jj],x[kk],r1);
} else {
rsq2 = rsq;
MathExtra::sub3(x[jj],x[kk],r2);
}
}
}
}
MathExtra::cross3(r1,r2,r3);
MathExtra::norm3(r1);
MathExtra::norm3(r2);
MathExtra::norm3(r3);
}
// store nhalf smallest pair distances in 1st nhalf locations of pairs
select(nhalf,npairs,pairs);
// centrosymmetry = sum of nhalf smallest squared values
value = 0.0;
for (j = 0; j < nhalf; j++) value += pairs[j];
centro[i] = value;
} else {
centro[i] = 0.0;
if (axes_flag) {
MathExtra::zero3(&array_atom[i][1]);
MathExtra::zero3(&array_atom[i][4]);
MathExtra::zero3(&array_atom[i][7]);
}
}
}
delete [] pairs;
if (axes_flag)
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (mask[i] & groupbit)
array_atom[i][0] = centro[i];
}
}
/* ----------------------------------------------------------------------
2 select routines from Numerical Recipes (slightly modified)
find k smallest values in array of length n
2nd routine sorts auxiliary array at same time
------------------------------------------------------------------------- */
#define SWAP(a,b) tmp = a; a = b; b = tmp;
#define ISWAP(a,b) itmp = a; a = b; b = itmp;
void ComputeCentroAtom::select(int k, int n, double *arr)
{
int i,ir,j,l,mid;
double a,tmp;
arr--;
l = 1;
ir = n;
for (;;) {
if (ir <= l+1) {
if (ir == l+1 && arr[ir] < arr[l]) {
SWAP(arr[l],arr[ir])
}
return;
} else {
mid=(l+ir) >> 1;
SWAP(arr[mid],arr[l+1])
if (arr[l] > arr[ir]) {
SWAP(arr[l],arr[ir])
}
if (arr[l+1] > arr[ir]) {
SWAP(arr[l+1],arr[ir])
}
if (arr[l] > arr[l+1]) {
SWAP(arr[l],arr[l+1])
}
i = l+1;
j = ir;
a = arr[l+1];
for (;;) {
do i++; while (arr[i] < a);
do j--; while (arr[j] > a);
if (j < i) break;
SWAP(arr[i],arr[j])
}
arr[l+1] = arr[j];
arr[j] = a;
if (j >= k) ir = j-1;
if (j <= k) l = i;
}
}
}
/* ---------------------------------------------------------------------- */
void ComputeCentroAtom::select2(int k, int n, double *arr, int *iarr)
{
int i,ir,j,l,mid,ia,itmp;
double a,tmp;
arr--;
iarr--;
l = 1;
ir = n;
for (;;) {
if (ir <= l+1) {
if (ir == l+1 && arr[ir] < arr[l]) {
SWAP(arr[l],arr[ir])
ISWAP(iarr[l],iarr[ir])
}
return;
} else {
mid=(l+ir) >> 1;
SWAP(arr[mid],arr[l+1])
ISWAP(iarr[mid],iarr[l+1])
if (arr[l] > arr[ir]) {
SWAP(arr[l],arr[ir])
ISWAP(iarr[l],iarr[ir])
}
if (arr[l+1] > arr[ir]) {
SWAP(arr[l+1],arr[ir])
ISWAP(iarr[l+1],iarr[ir])
}
if (arr[l] > arr[l+1]) {
SWAP(arr[l],arr[l+1])
ISWAP(iarr[l],iarr[l+1])
}
i = l+1;
j = ir;
a = arr[l+1];
ia = iarr[l+1];
for (;;) {
do i++; while (arr[i] < a);
do j--; while (arr[j] > a);
if (j < i) break;
SWAP(arr[i],arr[j])
ISWAP(iarr[i],iarr[j])
}
arr[l+1] = arr[j];
arr[j] = a;
iarr[l+1] = iarr[j];
iarr[j] = ia;
if (j >= k) ir = j-1;
if (j <= k) l = i;
}
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputeCentroAtom::memory_usage()
{
double bytes = nmax * sizeof(double);
return bytes;
}
diff --git a/src/compute_chunk_atom.cpp b/src/compute_chunk_atom.cpp
index b9286ea48..7b578611f 100644
--- a/src/compute_chunk_atom.cpp
+++ b/src/compute_chunk_atom.cpp
@@ -1,2002 +1,2005 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
// NOTE: allow for bin center to be variables for sphere/cylinder
#include <mpi.h>
#include <string.h>
#include <stdlib.h>
#include "compute_chunk_atom.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "domain.h"
#include "region.h"
#include "lattice.h"
#include "modify.h"
#include "fix_store.h"
#include "comm.h"
#include "group.h"
#include "input.h"
#include "variable.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
#include <map>
using namespace LAMMPS_NS;
using namespace MathConst;
enum{BIN1D,BIN2D,BIN3D,BINSPHERE,BINCYLINDER,
TYPE,MOLECULE,COMPUTE,FIX,VARIABLE};
enum{LOWER,CENTER,UPPER,COORD};
enum{BOX,LATTICE,REDUCED};
enum{NODISCARD,MIXED,YESDISCARD};
enum{ONCE,NFREQ,EVERY}; // used in several files
enum{LIMITMAX,LIMITEXACT};
#define IDMAX 1024*1024
#define INVOKED_PERATOM 8
// allocate space for static class variable
ComputeChunkAtom *ComputeChunkAtom::cptr;
/* ---------------------------------------------------------------------- */
ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ id_fix(NULL), chunk(NULL), ichunk(NULL), exclude(NULL),
+ chunk_volume_vec(NULL), coord(NULL), chunkID(NULL), idregion(NULL), cfvid(NULL),
+ hash(NULL), varatom(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute chunk/atom command");
peratom_flag = 1;
size_peratom_cols = 0;
create_attribute = 1;
// chunk style and its args
int iarg;
binflag = 0;
ncoord = 0;
cfvid = NULL;
if (strcmp(arg[3],"bin/1d") == 0) {
binflag = 1;
which = BIN1D;
ncoord = 1;
iarg = 4;
readdim(narg,arg,iarg,0);
iarg += 3;
} else if (strcmp(arg[3],"bin/2d") == 0) {
binflag = 1;
which = BIN2D;
ncoord = 2;
iarg = 4;
readdim(narg,arg,iarg,0);
readdim(narg,arg,iarg+3,1);
iarg += 6;
} else if (strcmp(arg[3],"bin/3d") == 0) {
binflag = 1;
which = BIN3D;
ncoord = 3;
iarg = 4;
readdim(narg,arg,iarg,0);
readdim(narg,arg,iarg+3,1);
readdim(narg,arg,iarg+6,2);
iarg += 9;
} else if (strcmp(arg[3],"bin/sphere") == 0) {
binflag = 1;
which = BINSPHERE;
ncoord = 1;
iarg = 4;
if (iarg+6 > narg) error->all(FLERR,"Illegal compute chunk/atom command");
sorigin_user[0] = force->numeric(FLERR,arg[iarg]);
sorigin_user[1] = force->numeric(FLERR,arg[iarg+1]);
sorigin_user[2] = force->numeric(FLERR,arg[iarg+2]);
sradmin_user = force->numeric(FLERR,arg[iarg+3]);
sradmax_user = force->numeric(FLERR,arg[iarg+4]);
nsbin = force->inumeric(FLERR,arg[iarg+5]);
iarg += 6;
} else if (strcmp(arg[3],"bin/cylinder") == 0) {
binflag = 1;
which = BINCYLINDER;
ncoord = 2;
iarg = 4;
readdim(narg,arg,iarg,0);
iarg += 3;
if (dim[0] == 0) {
cdim1 = 1;
cdim2 = 2;
} else if (dim[0] == 1) {
cdim1 = 0;
cdim2 = 2;
} else {
cdim1 = 0;
cdim2 = 1;
}
if (iarg+5 > narg) error->all(FLERR,"Illegal compute chunk/atom command");
corigin_user[dim[0]] = 0.0;
corigin_user[cdim1] = force->numeric(FLERR,arg[iarg]);
corigin_user[cdim2] = force->numeric(FLERR,arg[iarg+1]);
cradmin_user = force->numeric(FLERR,arg[iarg+2]);
cradmax_user = force->numeric(FLERR,arg[iarg+3]);
ncbin = force->inumeric(FLERR,arg[iarg+4]);
iarg += 5;
} else if (strcmp(arg[3],"type") == 0) {
which = TYPE;
iarg = 4;
} else if (strcmp(arg[3],"molecule") == 0) {
which = MOLECULE;
iarg = 4;
} else if (strstr(arg[3],"c_") == arg[3] ||
strstr(arg[3],"f_") == arg[3] ||
strstr(arg[3],"v_") == arg[3]) {
if (arg[3][0] == 'c') which = COMPUTE;
else if (arg[3][0] == 'f') which = FIX;
else if (arg[3][0] == 'v') which = VARIABLE;
iarg = 4;
int n = strlen(arg[3]);
char *suffix = new char[n];
strcpy(suffix,&arg[3][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Illegal compute chunk/atom command");
argindex = atoi(ptr+1);
*ptr = '\0';
} else argindex = 0;
n = strlen(suffix) + 1;
cfvid = new char[n];
strcpy(cfvid,suffix);
delete [] suffix;
} else error->all(FLERR,"Illegal compute chunk/atom command");
// optional args
regionflag = 0;
idregion = NULL;
nchunksetflag = 0;
nchunkflag = EVERY;
limit = 0;
limitstyle = LIMITMAX;
limitfirst = 0;
idsflag = EVERY;
compress = 0;
int discardsetflag = 0;
discard = MIXED;
minflag[0] = LOWER;
minflag[1] = LOWER;
minflag[2] = LOWER;
maxflag[0] = UPPER;
maxflag[1] = UPPER;
maxflag[2] = UPPER;
scaleflag = LATTICE;
pbcflag = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute chunk/atom command");
int iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for compute chunk/atom does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
regionflag = 1;
iarg += 2;
} else if (strcmp(arg[iarg],"nchunk") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute chunk/atom command");
if (strcmp(arg[iarg+1],"once") == 0) nchunkflag = ONCE;
else if (strcmp(arg[iarg+1],"every") == 0) nchunkflag = EVERY;
else error->all(FLERR,"Illegal compute chunk/atom command");
nchunksetflag = 1;
iarg += 2;
} else if (strcmp(arg[iarg],"limit") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute chunk/atom command");
limit = force->inumeric(FLERR,arg[iarg+1]);
if (limit < 0) error->all(FLERR,"Illegal compute chunk/atom command");
if (limit && !compress) limitfirst = 1;
iarg += 2;
if (limit) {
if (iarg+1 > narg)
error->all(FLERR,"Illegal compute chunk/atom command");
if (strcmp(arg[iarg+1],"max") == 0) limitstyle = LIMITMAX;
else if (strcmp(arg[iarg+1],"exact") == 0) limitstyle = LIMITEXACT;
else error->all(FLERR,"Illegal compute chunk/atom command");
iarg++;
}
} else if (strcmp(arg[iarg],"ids") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute chunk/atom command");
if (strcmp(arg[iarg+1],"once") == 0) idsflag = ONCE;
else if (strcmp(arg[iarg+1],"nfreq") == 0) idsflag = NFREQ;
else if (strcmp(arg[iarg+1],"every") == 0) idsflag = EVERY;
else error->all(FLERR,"Illegal compute chunk/atom command");
iarg += 2;
} else if (strcmp(arg[iarg],"compress") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute chunk/atom command");
else if (strcmp(arg[iarg+1],"no") == 0) compress = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) compress = 1;
else error->all(FLERR,"Illegal compute chunk/atom command");
iarg += 2;
} else if (strcmp(arg[iarg],"discard") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute chunk/atom command");
if (strcmp(arg[iarg+1],"mixed") == 0) discard = MIXED;
else if (strcmp(arg[iarg+1],"no") == 0) discard = NODISCARD;
else if (strcmp(arg[iarg+1],"yes") == 0) discard = YESDISCARD;
else error->all(FLERR,"Illegal compute chunk/atom command");
discardsetflag = 1;
iarg += 2;
} else if (strcmp(arg[iarg],"bound") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal compute chunk/atom command");
int idim;
if (strcmp(arg[iarg+1],"x") == 0) idim = 0;
else if (strcmp(arg[iarg+1],"y") == 0) idim = 1;
else if (strcmp(arg[iarg+1],"z") == 0) idim = 2;
else error->all(FLERR,"Illegal compute chunk/atom command");
if (strcmp(arg[iarg+2],"lower") == 0) minflag[idim] = LOWER;
else minflag[idim] = COORD;
if (minflag[idim] == COORD)
minvalue[idim] = force->numeric(FLERR,arg[iarg+2]);
if (strcmp(arg[iarg+3],"upper") == 0) maxflag[idim] = UPPER;
else maxflag[idim] = COORD;
if (maxflag[idim] == COORD)
maxvalue[idim] = force->numeric(FLERR,arg[iarg+3]);
else error->all(FLERR,"Illegal compute chunk/atom command");
iarg += 4;
} else if (strcmp(arg[iarg],"units") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute chunk/atom command");
if (strcmp(arg[iarg+1],"box") == 0) scaleflag = BOX;
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = LATTICE;
else if (strcmp(arg[iarg+1],"reduced") == 0) scaleflag = REDUCED;
else error->all(FLERR,"Illegal compute chunk/atom command");
iarg += 2;
} else if (strcmp(arg[iarg],"pbc") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute chunk/atom command");
if (strcmp(arg[iarg+1],"no") == 0) pbcflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) pbcflag = 1;
else error->all(FLERR,"Illegal compute chunk/atom command");
iarg += 2;
} else error->all(FLERR,"Illegal compute chunk/atom command");
}
// set nchunkflag and discard to default values if not explicitly set
// for binning style, also check in init() if simulation box is static,
// which sets nchunkflag = ONCE
if (!nchunksetflag) {
if (binflag) {
if (scaleflag == REDUCED) nchunkflag = ONCE;
else nchunkflag = EVERY;
}
if (which == TYPE) nchunkflag = ONCE;
if (which == MOLECULE) {
if (regionflag) nchunkflag = EVERY;
else nchunkflag = ONCE;
}
if (compress) nchunkflag = EVERY;
}
if (!discardsetflag) {
if (binflag) discard = MIXED;
else discard = YESDISCARD;
}
// error checks
if (which == MOLECULE && !atom->molecule_flag)
error->all(FLERR,"Compute chunk/atom molecule for non-molecular system");
if (!binflag && discard == MIXED)
error->all(FLERR,"Compute chunk/atom without bins "
"cannot use discard mixed");
if (which == BIN1D && delta[0] <= 0.0)
error->all(FLERR,"Illegal compute chunk/atom command");
if (which == BIN2D && (delta[0] <= 0.0 || delta[1] <= 0.0))
error->all(FLERR,"Illegal compute chunk/atom command");
if (which == BIN2D && (dim[0] == dim[1]))
error->all(FLERR,"Illegal compute chunk/atom command");
if (which == BIN3D &&
(delta[0] <= 0.0 || delta[1] <= 0.0 || delta[2] <= 0.0))
error->all(FLERR,"Illegal compute chunk/atom command");
if (which == BIN3D &&
(dim[0] == dim[1] || dim[1] == dim[2] || dim[0] == dim[2]))
error->all(FLERR,"Illegal compute chunk/atom command");
if (which == BINSPHERE) {
if (domain->dimension == 2 && sorigin_user[2] != 0.0)
error->all(FLERR,"Compute chunk/atom sphere z origin must be 0.0 for 2d");
if (sradmin_user < 0.0 || sradmin_user >= sradmax_user || nsbin < 1)
error->all(FLERR,"Illegal compute chunk/atom command");
}
if (which == BINCYLINDER) {
if (delta[0] <= 0.0)
error->all(FLERR,"Illegal compute chunk/atom command");
if (domain->dimension == 2 && dim[0] != 2)
error->all(FLERR,"Compute chunk/atom cylinder axis must be z for 2d");
if (cradmin_user < 0.0 || cradmin_user >= cradmax_user || ncbin < 1)
error->all(FLERR,"Illegal compute chunk/atom command");
}
if (which == COMPUTE) {
int icompute = modify->find_compute(cfvid);
if (icompute < 0)
error->all(FLERR,"Compute ID for compute chunk /atom does not exist");
if (modify->compute[icompute]->peratom_flag == 0)
error->all(FLERR,
"Compute chunk/atom compute does not calculate "
"per-atom values");
if (argindex == 0 &&
modify->compute[icompute]->size_peratom_cols != 0)
error->all(FLERR,"Compute chunk/atom compute does not "
"calculate a per-atom vector");
if (argindex && modify->compute[icompute]->size_peratom_cols == 0)
error->all(FLERR,"Compute chunk/atom compute does not "
"calculate a per-atom array");
if (argindex &&
argindex > modify->compute[icompute]->size_peratom_cols)
error->all(FLERR,"Compute chunk/atom compute array is "
"accessed out-of-range");
}
if (which == FIX) {
int ifix = modify->find_fix(cfvid);
if (ifix < 0)
error->all(FLERR,"Fix ID for compute chunk/atom does not exist");
if (modify->fix[ifix]->peratom_flag == 0)
error->all(FLERR,"Compute chunk/atom fix does not calculate "
"per-atom values");
if (argindex == 0 && modify->fix[ifix]->size_peratom_cols != 0)
error->all(FLERR,
"Compute chunk/atom fix does not calculate a per-atom vector");
if (argindex && modify->fix[ifix]->size_peratom_cols == 0)
error->all(FLERR,
"Compute chunk/atom fix does not calculate a per-atom array");
if (argindex && argindex > modify->fix[ifix]->size_peratom_cols)
error->all(FLERR,"Compute chunk/atom fix array is accessed out-of-range");
}
if (which == VARIABLE) {
int ivariable = input->variable->find(cfvid);
if (ivariable < 0)
error->all(FLERR,"Variable name for compute chunk/atom does not exist");
if (input->variable->atomstyle(ivariable) == 0)
error->all(FLERR,"Compute chunk/atom variable is not "
"atom-style variable");
}
// setup scaling
if (binflag) {
if (domain->triclinic == 1 && scaleflag != REDUCED)
error->all(FLERR,"Compute chunk/atom for triclinic boxes "
"requires units reduced");
}
if (scaleflag == LATTICE) {
xscale = domain->lattice->xlattice;
yscale = domain->lattice->ylattice;
zscale = domain->lattice->zlattice;
} else xscale = yscale = zscale = 1.0;
// apply scaling factors and cylinder dims orthogonal to axis
if (binflag) {
double scale;
if (which == BIN1D || which == BIN2D || which == BIN3D ||
which == BINCYLINDER) {
if (which == BIN1D || which == BINCYLINDER) ndim = 1;
if (which == BIN2D) ndim = 2;
if (which == BIN3D) ndim = 3;
for (int idim = 0; idim < ndim; idim++) {
if (dim[idim] == 0) scale = xscale;
else if (dim[idim] == 1) scale = yscale;
else if (dim[idim] == 2) scale = zscale;
delta[idim] *= scale;
invdelta[idim] = 1.0/delta[idim];
if (originflag[idim] == COORD) origin[idim] *= scale;
if (minflag[idim] == COORD) minvalue[idim] *= scale;
if (maxflag[idim] == COORD) maxvalue[idim] *= scale;
}
} else if (which == BINSPHERE) {
sorigin_user[0] *= xscale;
sorigin_user[1] *= yscale;
sorigin_user[2] *= zscale;
sradmin_user *= xscale; // radii are scaled by xscale
sradmax_user *= xscale;
} else if (which == BINCYLINDER) {
if (dim[0] == 0) {
corigin_user[cdim1] *= yscale;
corigin_user[cdim2] *= zscale;
cradmin_user *= yscale; // radii are scaled by first non-axis dim
cradmax_user *= yscale;
} else if (dim[0] == 1) {
corigin_user[cdim1] *= xscale;
corigin_user[cdim2] *= zscale;
cradmin_user *= xscale;
cradmax_user *= xscale;
} else {
corigin_user[cdim1] *= xscale;
corigin_user[cdim2] *= yscale;
cradmin_user *= xscale;
cradmax_user *= xscale;
}
}
}
// initialize chunk vector and per-chunk info
nmax = 0;
chunk = NULL;
nmaxint = -1;
ichunk = NULL;
exclude = NULL;
nchunk = 0;
chunk_volume_scalar = 1.0;
chunk_volume_vec = NULL;
coord = NULL;
chunkID = NULL;
// computeflag = 1 if this compute might invoke another compute
// during assign_chunk_ids()
if (which == COMPUTE || which == FIX || which == VARIABLE) computeflag = 1;
else computeflag = 0;
// other initializations
invoked_setup = -1;
invoked_ichunk = -1;
id_fix = NULL;
fixstore = NULL;
if (compress) hash = new std::map<tagint,int>();
else hash = NULL;
maxvar = 0;
varatom = NULL;
lockcount = 0;
lockfix = NULL;
if (which == MOLECULE) molcheck = 1;
else molcheck = 0;
}
/* ---------------------------------------------------------------------- */
ComputeChunkAtom::~ComputeChunkAtom()
{
// check nfix in case all fixes have already been deleted
if (modify->nfix) modify->delete_fix(id_fix);
delete [] id_fix;
memory->destroy(chunk);
memory->destroy(ichunk);
memory->destroy(exclude);
memory->destroy(chunk_volume_vec);
memory->destroy(coord);
memory->destroy(chunkID);
delete [] idregion;
delete [] cfvid;
delete hash;
memory->destroy(varatom);
}
/* ---------------------------------------------------------------------- */
void ComputeChunkAtom::init()
{
// set and check validity of region
if (regionflag) {
int iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for compute chunk/atom does not exist");
region = domain->regions[iregion];
}
// set compute,fix,variable
if (which == COMPUTE) {
int icompute = modify->find_compute(cfvid);
if (icompute < 0)
error->all(FLERR,"Compute ID for compute chunk/atom does not exist");
cchunk = modify->compute[icompute];
} else if (which == FIX) {
int ifix = modify->find_fix(cfvid);
if (ifix < 0)
error->all(FLERR,"Fix ID for compute chunk/atom does not exist");
fchunk = modify->fix[ifix];
} else if (which == VARIABLE) {
int ivariable = input->variable->find(cfvid);
if (ivariable < 0)
error->all(FLERR,"Variable name for compute chunk/atom does not exist");
vchunk = ivariable;
}
// for style MOLECULE, check that no mol IDs exceed MAXSMALLINT
// don't worry about group or optional region
if (which == MOLECULE) {
tagint *molecule = atom->molecule;
int nlocal = atom->nlocal;
tagint maxone = -1;
for (int i = 0; i < nlocal; i++)
if (molecule[i] > maxone) maxone = molecule[i];
tagint maxall;
MPI_Allreduce(&maxone,&maxall,1,MPI_LMP_TAGINT,MPI_MAX,world);
if (maxall > MAXSMALLINT)
error->all(FLERR,"Molecule IDs too large for compute chunk/atom");
}
// for binning, if nchunkflag not already set, set it to ONCE or EVERY
// depends on whether simulation box size is static or dynamic
// reset invoked_setup if this is not first run and box just became static
if (binflag && !nchunksetflag && !compress && scaleflag != REDUCED) {
if (domain->box_change_size == 0) {
if (nchunkflag == EVERY && invoked_setup >= 0) invoked_setup = -1;
nchunkflag = ONCE;
} else nchunkflag = EVERY;
}
// require nchunkflag = ONCE if idsflag = ONCE
// b/c nchunk cannot change if chunk IDs are frozen
// can't check until now since nchunkflag may have been adjusted in init()
if (idsflag == ONCE && nchunkflag != ONCE)
error->all(FLERR,"Compute chunk/atom ids once but nchunk is not once");
// create/destroy fix STORE for persistent chunk IDs as needed
// need to do this if idsflag = ONCE or locks will be used by other commands
// need to wait until init() so that fix command(s) are in place
// they increment lockcount if they lock this compute
// fixstore ID = compute-ID + COMPUTE_STORE, fix group = compute group
// fixstore initializes all values to 0.0
if ((idsflag == ONCE || lockcount) && !fixstore) {
int n = strlen(id) + strlen("_COMPUTE_STORE") + 1;
id_fix = new char[n];
strcpy(id_fix,id);
strcat(id_fix,"_COMPUTE_STORE");
char **newarg = new char*[6];
newarg[0] = id_fix;
newarg[1] = group->names[igroup];
newarg[2] = (char *) "STORE";
newarg[3] = (char *) "peratom";
newarg[4] = (char *) "1";
newarg[5] = (char *) "1";
modify->add_fix(6,newarg);
fixstore = (FixStore *) modify->fix[modify->nfix-1];
delete [] newarg;
}
if ((idsflag != ONCE && !lockcount) && fixstore) {
modify->delete_fix(id_fix);
fixstore = NULL;
}
}
/* ----------------------------------------------------------------------
invoke setup_chunks and/or compute_ichunk if only done ONCE
so that nchunks or chunk IDs are assigned when this compute was specified
as opposed to first times compute_peratom() or compute_ichunk() is called
------------------------------------------------------------------------- */
void ComputeChunkAtom::setup()
{
if (nchunkflag == ONCE) setup_chunks();
if (idsflag == ONCE) compute_ichunk();
}
/* ----------------------------------------------------------------------
only called by classes that use per-atom computes in standard way
dump, variable, thermo output, other computes, etc
not called by fix chunk or compute chunk commands
they invoke setup_chunks() and compute_ichunk() directly
------------------------------------------------------------------------- */
void ComputeChunkAtom::compute_peratom()
{
invoked_peratom = update->ntimestep;
// grow floating point chunk vector if necessary
if (atom->nmax > nmax) {
memory->destroy(chunk);
nmax = atom->nmax;
memory->create(chunk,nmax,"chunk/atom:chunk");
vector_atom = chunk;
}
setup_chunks();
compute_ichunk();
// copy integer indices into floating-point chunk vector
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) chunk[i] = ichunk[i];
}
/* ----------------------------------------------------------------------
set lock, so that nchunk will not change from startstep to stopstep
called by fix for duration of time it requires lock
OK if called by multiple fix commands
error if all callers do not have same duration
last caller holds the lock, so it can also unlock
stopstep can be positive for final step of finite-size time window
or can be -1 for infinite-size time window
------------------------------------------------------------------------- */
void ComputeChunkAtom::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
if (lockfix == NULL) {
lockfix = fixptr;
lockstart = startstep;
lockstop = stopstep;
return;
}
if (startstep != lockstart || stopstep != lockstop)
error->all(FLERR,"Two fix commands using "
"same compute chunk/atom command in incompatible ways");
// set lock to last calling Fix, since it will be last to unlock()
lockfix = fixptr;
}
/* ----------------------------------------------------------------------
unset lock
can only be done by fix command that holds the lock
------------------------------------------------------------------------- */
void ComputeChunkAtom::unlock(Fix *fixptr)
{
if (fixptr != lockfix) return;
lockfix = NULL;
}
/* ----------------------------------------------------------------------
assign chunk IDs from 1 to Nchunk to every atom, or 0 if not in chunk
------------------------------------------------------------------------- */
void ComputeChunkAtom::compute_ichunk()
{
int i;
// skip if already done on this step
if (invoked_ichunk == update->ntimestep) return;
// if old IDs persist via storage in fixstore, then just retrieve them
// yes if idsflag = ONCE, and already done once
// or if idsflag = NFREQ and lock is in place and are on later timestep
// else proceed to recalculate per-atom chunk assignments
int restore = 0;
if (idsflag == ONCE && invoked_ichunk >= 0) restore = 1;
if (idsflag == NFREQ && lockfix && update->ntimestep > lockstart) restore = 1;
if (restore) {
invoked_ichunk = update->ntimestep;
double *vstore = fixstore->vstore;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++) ichunk[i] = static_cast<int> (vstore[i]);
return;
}
invoked_ichunk = update->ntimestep;
// assign chunk IDs to atoms
// will exclude atoms not in group or in optional region
// already invoked if this is same timestep as last setup_chunks()
if (update->ntimestep > invoked_setup) assign_chunk_ids();
// compress chunk IDs via hash of the original uncompressed IDs
// also apply discard rule except for binning styles which already did
int nlocal = atom->nlocal;
if (compress) {
if (binflag) {
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
if (hash->find(ichunk[i]) == hash->end()) exclude[i] = 1;
else ichunk[i] = hash->find(ichunk[i])->second;
}
} else if (discard == NODISCARD) {
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
if (hash->find(ichunk[i]) == hash->end()) ichunk[i] = nchunk;
else ichunk[i] = hash->find(ichunk[i])->second;
}
} else {
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
if (hash->find(ichunk[i]) == hash->end()) exclude[i] = 1;
else ichunk[i] = hash->find(ichunk[i])->second;
}
}
// else if no compression apply discard rule by itself
} else {
if (discard == NODISCARD) {
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
if (ichunk[i] < 1 || ichunk[i] > nchunk) ichunk[i] = nchunk;;
}
} else {
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
if (ichunk[i] < 1 || ichunk[i] > nchunk) exclude[i] = 1;
}
}
}
// set ichunk = 0 for excluded atoms
// this should set any ichunk values which have not yet been set
for (i = 0; i < nlocal; i++)
if (exclude[i]) ichunk[i] = 0;
// if newly calculated IDs need to persist, store them in fixstore
// yes if idsflag = ONCE or idsflag = NFREQ and lock is in place
if (idsflag == ONCE || (idsflag == NFREQ && lockfix)) {
double *vstore = fixstore->vstore;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) vstore[i] = ichunk[i];
}
// one-time check if which = MOLECULE and
// any chunks do not contain all atoms in the molecule
if (molcheck) {
check_molecules();
molcheck = 0;
}
}
/* ----------------------------------------------------------------------
setup chunks
return nchunk = # of chunks
all atoms will be assigned a chunk ID from 1 to Nchunk, or 0
also setup any internal state needed to quickly assign atoms to chunks
called from compute_peratom() and also directly from
fix chunk and compute chunk commands
------------------------------------------------------------------------- */
int ComputeChunkAtom::setup_chunks()
{
if (invoked_setup == update->ntimestep) return nchunk;
// check if setup needs to be done
// no if lock is in place
// no if nchunkflag = ONCE, and already done once
// otherwise yes
// even if no, check if need to re-compute bin volumes
// so that fix ave/chunk can do proper density normalization
int flag = 0;
if (lockfix) flag = 1;
if (nchunkflag == ONCE && invoked_setup >= 0) flag = 1;
if (flag) {
if (binflag && scaleflag == REDUCED && domain->box_change_size)
bin_volumes();
return nchunk;
}
invoked_setup = update->ntimestep;
// assign chunk IDs to atoms
// will exclude atoms not in group or in optional region
// for binning styles, need to setup bins and their volume first
// else chunk_volume_scalar = entire box volume
// IDs are needed to scan for max ID and for compress()
if (binflag) {
if (which == BIN1D || which == BIN2D || which == BIN3D)
nchunk = setup_xyz_bins();
else if (which == BINSPHERE) nchunk = setup_sphere_bins();
else if (which == BINCYLINDER) nchunk = setup_cylinder_bins();
bin_volumes();
} else {
chunk_volume_scalar = domain->xprd * domain->yprd;
if (domain->dimension == 3) chunk_volume_scalar *= domain->zprd;
}
assign_chunk_ids();
// set nchunk for chunk styles other than binning
// for styles other than TYPE, scan for max ID
if (which == TYPE) nchunk = atom->ntypes;
else if (!binflag) {
int nlocal = atom->nlocal;
int hi = -1;
for (int i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
if (ichunk[i] > hi) hi = ichunk[i];
}
MPI_Allreduce(&hi,&nchunk,1,MPI_INT,MPI_MAX,world);
if (nchunk <= 0) nchunk = 1;
}
// apply limit setting as well as compression of chunks with no atoms
// if limit is set, there are 3 cases:
// no compression, limit specified before compression, or vice versa
if (limit && !binflag) {
if (!compress) {
if (limitstyle == LIMITMAX) nchunk = MIN(nchunk,limit);
else if (limitstyle == LIMITEXACT) nchunk = limit;
} else if (limitfirst) {
nchunk = MIN(nchunk,limit);
}
}
if (compress) compress_chunk_ids();
if (limit && !binflag && compress) {
if (limitstyle == LIMITMAX) nchunk = MIN(nchunk,limit);
else if (limitstyle == LIMITEXACT) nchunk = limit;
}
return nchunk;
}
/* ----------------------------------------------------------------------
assign chunk IDs for all atoms, via ichunk vector
except excluded atoms, their chunk IDs are set to 0 later
also set exclude vector to 0/1 for all atoms
excluded atoms are those not in group or in optional region
called from compute_ichunk() and setup_chunks()
------------------------------------------------------------------------- */
void ComputeChunkAtom::assign_chunk_ids()
{
int i;
// grow integer chunk index vector if necessary
if (atom->nmax > nmaxint) {
memory->destroy(ichunk);
memory->destroy(exclude);
nmaxint = atom->nmax;
memory->create(ichunk,nmaxint,"chunk/atom:ichunk");
memory->create(exclude,nmaxint,"chunk/atom:exclude");
}
// update region if necessary
if (regionflag) region->prematch();
// exclude = 1 if atom is not assigned to a chunk
// exclude atoms not in group or not in optional region
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (regionflag) {
for (i = 0; i < nlocal; i++) {
if (mask[i] & groupbit &&
region->match(x[i][0],x[i][1],x[i][2])) exclude[i] = 0;
else exclude[i] = 1;
}
} else {
for (i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) exclude[i] = 0;
else exclude[i] = 1;
}
}
// set ichunk to style value for included atoms
// binning styles apply discard rule, others do not yet
if (binflag) {
if (which == BIN1D) atom2bin1d();
else if (which == BIN2D) atom2bin2d();
else if (which == BIN3D) atom2bin3d();
else if (which == BINSPHERE) atom2binsphere();
else if (which == BINCYLINDER) atom2bincylinder();
} else if (which == TYPE) {
int *type = atom->type;
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
ichunk[i] = type[i];
}
} else if (which == MOLECULE) {
tagint *molecule = atom->molecule;
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
ichunk[i] = static_cast<int> (molecule[i]);
}
} else if (which == COMPUTE) {
if (!(cchunk->invoked_flag & INVOKED_PERATOM)) {
cchunk->compute_peratom();
cchunk->invoked_flag |= INVOKED_PERATOM;
}
if (argindex == 0) {
double *vec = cchunk->vector_atom;
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
ichunk[i] = static_cast<int> (vec[i]);
}
} else {
double **array = cchunk->array_atom;
int argm1 = argindex - 1;
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
ichunk[i] = static_cast<int> (array[i][argm1]);
}
}
} else if (which == FIX) {
if (update->ntimestep % fchunk->peratom_freq)
error->all(FLERR,"Fix used in compute chunk/atom not "
"computed at compatible time");
if (argindex == 0) {
double *vec = fchunk->vector_atom;
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
ichunk[i] = static_cast<int> (vec[i]);
}
} else {
double **array = fchunk->array_atom;
int argm1 = argindex - 1;
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
ichunk[i] = static_cast<int> (array[i][argm1]);
}
}
} else if (which == VARIABLE) {
if (atom->nmax > maxvar) {
maxvar = atom->nmax;
memory->destroy(varatom);
memory->create(varatom,maxvar,"chunk/atom:varatom");
}
input->variable->compute_atom(vchunk,igroup,varatom,1,0);
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
ichunk[i] = static_cast<int> (varatom[i]);
}
}
}
/* ----------------------------------------------------------------------
compress chunk IDs currently assigned to atoms across all processors
by removing those with no atoms assigned
current assignment excludes atoms not in group or in optional region
current Nchunk = max ID
operation:
use hash to store list of populated IDs that I own
add new IDs to populated lists communicated from all other procs
final hash has global list of populated ideas
reset Nchunk = length of global list
called by setup_chunks() when setting Nchunk
remapping of chunk IDs to smaller Nchunk occurs later in compute_ichunk()
------------------------------------------------------------------------- */
void ComputeChunkAtom::compress_chunk_ids()
{
hash->clear();
// put my IDs into hash
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
if (hash->find(ichunk[i]) == hash->end()) (*hash)[ichunk[i]] = 0;
}
// n = # of my populated IDs
// nall = n summed across all procs
int n = hash->size();
bigint nbone = n;
bigint nball;
MPI_Allreduce(&nbone,&nball,1,MPI_LMP_BIGINT,MPI_SUM,world);
// create my list of populated IDs
int *list = NULL;
memory->create(list,n,"chunk/atom:list");
n = 0;
std::map<tagint,int>::iterator pos;
for (pos = hash->begin(); pos != hash->end(); ++pos)
list[n++] = pos->first;
// if nall < 1M, just allgather all ID lists on every proc
// else perform ring comm
// add IDs from all procs to my hash
if (nball <= IDMAX) {
// setup for allgatherv
int nprocs = comm->nprocs;
int nall = nball;
int *recvcounts,*displs,*listall;
memory->create(recvcounts,nprocs,"chunk/atom:recvcounts");
memory->create(displs,nprocs,"chunk/atom:displs");
memory->create(listall,nall,"chunk/atom:listall");
MPI_Allgather(&n,1,MPI_INT,recvcounts,1,MPI_INT,world);
displs[0] = 0;
for (int iproc = 1; iproc < nprocs; iproc++)
displs[iproc] = displs[iproc-1] + recvcounts[iproc-1];
// allgatherv acquires list of populated IDs from all procs
MPI_Allgatherv(list,n,MPI_INT,listall,recvcounts,displs,MPI_INT,world);
// add all unique IDs in listall to my hash
for (int i = 0; i < nall; i++)
if (hash->find(listall[i]) == hash->end()) (*hash)[listall[i]] = 0;
// clean up
memory->destroy(recvcounts);
memory->destroy(displs);
memory->destroy(listall);
} else {
cptr = this;
comm->ring(n,sizeof(int),list,1,idring,NULL,0);
}
memory->destroy(list);
// nchunk = length of hash containing populated IDs from all procs
nchunk = hash->size();
// reset hash value of each original chunk ID to ordered index
// ordered index = new compressed chunk ID (1 to Nchunk)
// leverages fact that map stores keys in ascending order
// also allocate and set chunkID = list of original chunk IDs
// used by fix ave/chunk and compute property/chunk
memory->destroy(chunkID);
memory->create(chunkID,nchunk,"chunk/atom:chunkID");
n = 0;
for (pos = hash->begin(); pos != hash->end(); ++pos) {
chunkID[n] = pos->first;
(*hash)[pos->first] = ++n;
}
}
/* ----------------------------------------------------------------------
callback from comm->ring()
cbuf = list of N chunk IDs from another proc
loop over the list, add each to my hash
hash ends up storing all unique IDs across all procs
------------------------------------------------------------------------- */
void ComputeChunkAtom::idring(int n, char *cbuf)
{
tagint *list = (tagint *) cbuf;
std::map<tagint,int> *hash = cptr->hash;
for (int i = 0; i < n; i++) (*hash)[list[i]] = 0;
}
/* ----------------------------------------------------------------------
one-time check for which = MOLECULE to check
if each chunk contains all atoms in the molecule
issue warning if not
note that this check is without regard to discard rule
if discard == NODISCARD, there is no easy way to check that all
atoms in an out-of-bounds molecule were added to a chunk,
some could have been excluded by group or region, others not
------------------------------------------------------------------------- */
void ComputeChunkAtom::check_molecules()
{
tagint *molecule = atom->molecule;
int nlocal = atom->nlocal;
int flag = 0;
if (!compress) {
for (int i = 0; i < nlocal; i++) {
if (molecule[i] > 0 && molecule[i] <= nchunk &&
ichunk[i] == 0) flag = 1;
}
} else {
int molid;
for (int i = 0; i < nlocal; i++) {
molid = static_cast<int> (molecule[i]);
if (hash->find(molid) != hash->end() && ichunk[i] == 0) flag = 1;
}
}
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall && comm->me == 0)
error->warning(FLERR,
"One or more chunks do not contain all atoms in molecule");
}
/* ----------------------------------------------------------------------
setup xyz spatial bins and their extent and coordinates
return nbins = # of bins, will become # of chunks
called from setup_chunks()
------------------------------------------------------------------------- */
int ComputeChunkAtom::setup_xyz_bins()
{
int i,j,k,m,n,idim;
double lo,hi,coord1,coord2;
// lo = bin boundary immediately below boxlo or minvalue
// hi = bin boundary immediately above boxhi or maxvalue
// allocate and initialize arrays based on new bin count
double binlo[3],binhi[3];
if (scaleflag == REDUCED) {
binlo[0] = domain->boxlo_lamda[0];
binlo[1] = domain->boxlo_lamda[1];
binlo[2] = domain->boxlo_lamda[2];
binhi[0] = domain->boxhi_lamda[0];
binhi[1] = domain->boxhi_lamda[1];
binhi[2] = domain->boxhi_lamda[2];
} else {
binlo[0] = domain->boxlo[0];
binlo[1] = domain->boxlo[1];
binlo[2] = domain->boxlo[2];
binhi[0] = domain->boxhi[0];
binhi[1] = domain->boxhi[1];
binhi[2] = domain->boxhi[2];
}
if (minflag[0] == COORD) binlo[0] = minvalue[0];
if (minflag[1] == COORD) binlo[1] = minvalue[1];
if (minflag[2] == COORD) binlo[2] = minvalue[2];
if (maxflag[0] == COORD) binhi[0] = maxvalue[0];
if (maxflag[1] == COORD) binhi[1] = maxvalue[1];
if (maxflag[2] == COORD) binhi[2] = maxvalue[2];
int nbins = 1;
for (m = 0; m < ndim; m++) {
idim = dim[m];
if (originflag[m] == LOWER) origin[m] = binlo[idim];
else if (originflag[m] == UPPER) origin[m] = binhi[idim];
else if (originflag[m] == CENTER)
origin[m] = 0.5 * (binlo[idim] + binhi[idim]);
if (origin[m] < binlo[idim]) {
n = static_cast<int> ((binlo[idim] - origin[m]) * invdelta[m]);
lo = origin[m] + n*delta[m];
} else {
n = static_cast<int> ((origin[m] - binlo[idim]) * invdelta[m]);
lo = origin[m] - n*delta[m];
if (lo > binlo[idim]) lo -= delta[m];
}
if (origin[m] < binhi[idim]) {
n = static_cast<int> ((binhi[idim] - origin[m]) * invdelta[m]);
hi = origin[m] + n*delta[m];
if (hi < binhi[idim]) hi += delta[m];
} else {
n = static_cast<int> ((origin[m] - binhi[idim]) * invdelta[m]);
hi = origin[m] - n*delta[m];
}
if (lo > hi) error->all(FLERR,"Invalid bin bounds in compute chunk/atom");
offset[m] = lo;
nlayers[m] = static_cast<int> ((hi-lo) * invdelta[m] + 0.5);
nbins *= nlayers[m];
}
// allocate and set bin coordinates
memory->destroy(coord);
memory->create(coord,nbins,ndim,"chunk/atom:coord");
if (ndim == 1) {
for (i = 0; i < nlayers[0]; i++)
coord[i][0] = offset[0] + (i+0.5)*delta[0];
} else if (ndim == 2) {
m = 0;
for (i = 0; i < nlayers[0]; i++) {
coord1 = offset[0] + (i+0.5)*delta[0];
for (j = 0; j < nlayers[1]; j++) {
coord[m][0] = coord1;
coord[m][1] = offset[1] + (j+0.5)*delta[1];
m++;
}
}
} else if (ndim == 3) {
m = 0;
for (i = 0; i < nlayers[0]; i++) {
coord1 = offset[0] + (i+0.5)*delta[0];
for (j = 0; j < nlayers[1]; j++) {
coord2 = offset[1] + (j+0.5)*delta[1];
for (k = 0; k < nlayers[2]; k++) {
coord[m][0] = coord1;
coord[m][1] = coord2;
coord[m][2] = offset[2] + (k+0.5)*delta[2];
m++;
}
}
}
}
return nbins;
}
/* ----------------------------------------------------------------------
setup spherical spatial bins and their single coordinate
return nsphere = # of bins, will become # of chunks
called from setup_chunks()
------------------------------------------------------------------------- */
int ComputeChunkAtom::setup_sphere_bins()
{
// convert sorigin_user to sorigin
// sorigin,srad are always in box units, for orthogonal or triclinic domains
// lamda2x works for either orthogonal or triclinic
if (scaleflag == REDUCED) {
domain->lamda2x(sorigin_user,sorigin);
sradmin = sradmin_user * (domain->boxhi[0]-domain->boxlo[0]);
sradmax = sradmax_user * (domain->boxhi[0]-domain->boxlo[0]);
} else {
sorigin[0] = sorigin_user[0];
sorigin[1] = sorigin_user[1];
sorigin[2] = sorigin_user[2];
sradmin = sradmin_user;
sradmax = sradmax_user;
}
// if pbcflag set, sradmax must be < 1/2 box in any periodic dim
// treat orthongonal and triclinic the same
// check every time bins are created
if (pbcflag) {
double *prd_half = domain->prd_half;
int *periodicity = domain->periodicity;
int flag = 0;
if (periodicity[0] && sradmax > prd_half[0]) flag = 1;
if (periodicity[1] && sradmax > prd_half[1]) flag = 1;
if (domain->dimension == 3 &&
periodicity[2] && sradmax > prd_half[2]) flag = 1;
if (flag)
error->all(FLERR,"Compute chunk/atom bin/sphere radius "
"is too large for periodic box");
}
sinvrad = nsbin / (sradmax-sradmin);
// allocate and set bin coordinates
// coord = midpt of radii for a spherical shell
memory->destroy(coord);
memory->create(coord,nsbin,1,"chunk/atom:coord");
double rlo,rhi;
for (int i = 0; i < nsbin; i++) {
rlo = sradmin + i * (sradmax-sradmin) / nsbin;
rhi = sradmin + (i+1) * (sradmax-sradmin) / nsbin;
if (i == nsbin-1) rhi = sradmax;
coord[i][0] = 0.5 * (rlo+rhi);
}
return nsbin;
}
/* ----------------------------------------------------------------------
setup cylindrical spatial bins and their single coordinate
return nsphere = # of bins, will become # of chunks
called from setup_chunks()
------------------------------------------------------------------------- */
int ComputeChunkAtom::setup_cylinder_bins()
{
// setup bins along cylinder axis
// ncplane = # of axis bins
ncplane = setup_xyz_bins();
// convert corigin_user to corigin
// corigin is always in box units, for orthogonal or triclinic domains
// lamda2x works for either orthogonal or triclinic
if (scaleflag == REDUCED) {
domain->lamda2x(corigin_user,corigin);
cradmin = cradmin_user * (domain->boxhi[cdim1]-domain->boxlo[cdim1]);
cradmax = cradmax_user * (domain->boxhi[cdim1]-domain->boxlo[cdim1]);
} else {
corigin[cdim1] = corigin_user[cdim1];
corigin[cdim2] = corigin_user[cdim2];
cradmin = cradmin_user;
cradmax = cradmax_user;
}
// if pbcflag set, sradmax must be < 1/2 box in any periodic non-axis dim
// treat orthongonal and triclinic the same
// check every time bins are created
if (pbcflag) {
double *prd_half = domain->prd_half;
int *periodicity = domain->periodicity;
int flag = 0;
if (periodicity[cdim1] && sradmax > prd_half[cdim1]) flag = 1;
if (periodicity[cdim2] && sradmax > prd_half[cdim2]) flag = 1;
if (flag)
error->all(FLERR,"Compute chunk/atom bin/cylinder radius "
"is too large for periodic box");
}
cinvrad = ncbin / (cradmax-cradmin);
// allocate and set radial bin coordinates
// radial coord = midpt of radii for a cylindrical shell
// axiscoord = saved bin coords along cylndrical axis
// radcoord = saved bin coords in radial direction
double **axiscoord = coord;
memory->create(coord,ncbin,1,"chunk/atom:coord");
double **radcoord = coord;
double rlo,rhi;
for (int i = 0; i < ncbin; i++) {
rlo = cradmin + i * (cradmax-cradmin) / ncbin;
rhi = cradmin + (i+1) * (cradmax-cradmin) / ncbin;
if (i == ncbin-1) rhi = cradmax;
coord[i][0] = 0.5 * (rlo+rhi);
}
// create array of combined coords for all bins
memory->create(coord,ncbin*ncplane,2,"chunk/atom:coord");
int m = 0;
for (int i = 0; i < ncbin; i++)
for (int j = 0; j < ncplane; j++) {
coord[m][0] = radcoord[i][0];
coord[m][1] = axiscoord[j][0];
m++;
}
memory->destroy(axiscoord);
memory->destroy(radcoord);
return ncbin*ncplane;
}
/* ----------------------------------------------------------------------
calculate chunk volumes = bin volumes
scalar if all bins have same volume
vector if per-bin volumes are different
------------------------------------------------------------------------- */
void ComputeChunkAtom::bin_volumes()
{
if (which == BIN1D || which == BIN2D || which == BIN3D) {
if (domain->dimension == 3)
chunk_volume_scalar = domain->xprd * domain->yprd * domain->zprd;
else chunk_volume_scalar = domain->xprd * domain->yprd;
double *prd;
if (scaleflag == REDUCED) prd = domain->prd_lamda;
else prd = domain->prd;
for (int m = 0; m < ndim; m++)
chunk_volume_scalar *= delta[m]/prd[dim[m]];
} else if (which == BINSPHERE) {
memory->destroy(chunk_volume_vec);
memory->create(chunk_volume_vec,nchunk,"chunk/atom:chunk_volume_vec");
double rlo,rhi,vollo,volhi;
for (int i = 0; i < nchunk; i++) {
rlo = sradmin + i * (sradmax-sradmin) / nsbin;
rhi = sradmin + (i+1) * (sradmax-sradmin) / nsbin;
if (i == nchunk-1) rhi = sradmax;
vollo = 4.0/3.0 * MY_PI * rlo*rlo*rlo;
volhi = 4.0/3.0 * MY_PI * rhi*rhi*rhi;
chunk_volume_vec[i] = volhi - vollo;
}
} else if (which == BINCYLINDER) {
memory->destroy(chunk_volume_vec);
memory->create(chunk_volume_vec,nchunk,"chunk/atom:chunk_volume_vec");
// slabthick = delta of bins along cylinder axis
double *prd;
if (scaleflag == REDUCED) prd = domain->prd_lamda;
else prd = domain->prd;
double slabthick = domain->prd[dim[0]] * delta[0]/prd[dim[0]];
// area lo/hi of concentric circles in radial direction
int iradbin;
double rlo,rhi,arealo,areahi;
for (int i = 0; i < nchunk; i++) {
iradbin = i / ncplane;
rlo = cradmin + iradbin * (cradmax-cradmin) / ncbin;
rhi = cradmin + (iradbin+1) * (cradmax-cradmin) / ncbin;
if (iradbin == ncbin-1) rhi = cradmax;
arealo = MY_PI * rlo*rlo;
areahi = MY_PI * rhi*rhi;
chunk_volume_vec[i] = (areahi-arealo) * slabthick;
}
}
}
/* ----------------------------------------------------------------------
assign each atom to a 1d spatial bin (layer)
------------------------------------------------------------------------- */
void ComputeChunkAtom::atom2bin1d()
{
int i,ibin;
double *boxlo,*boxhi,*prd;
double xremap;
double **x = atom->x;
int nlocal = atom->nlocal;
int idim = dim[0];
int nlayer1m1 = nlayers[0] - 1;
int periodicity = domain->periodicity[idim];
if (periodicity) {
if (scaleflag == REDUCED) {
boxlo = domain->boxlo_lamda;
boxhi = domain->boxhi_lamda;
prd = domain->prd_lamda;
} else {
boxlo = domain->boxlo;
boxhi = domain->boxhi;
prd = domain->prd;
}
}
// remap each atom's relevant coord back into box via PBC if necessary
// if scaleflag = REDUCED, box coords -> lamda coords
// apply discard rule
if (scaleflag == REDUCED) domain->x2lamda(nlocal);
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
xremap = x[i][idim];
if (periodicity) {
if (xremap < boxlo[idim]) xremap += prd[idim];
if (xremap >= boxhi[idim]) xremap -= prd[idim];
}
ibin = static_cast<int> ((xremap - offset[0]) * invdelta[0]);
if (xremap < offset[0]) ibin--;
if (discard == MIXED) {
if (!minflag[idim]) ibin = MAX(ibin,0);
else if (ibin < 0) {
exclude[i] = 1;
continue;
}
if (!maxflag[idim]) ibin = MIN(ibin,nlayer1m1);
else if (ibin > nlayer1m1) {
exclude[i] = 1;
continue;
}
} else if (discard == NODISCARD) {
ibin = MAX(ibin,0);
ibin = MIN(ibin,nlayer1m1);
} else if (ibin < 0 || ibin > nlayer1m1) {
exclude[i] = 1;
continue;
}
ichunk[i] = ibin+1;
}
if (scaleflag == REDUCED) domain->lamda2x(nlocal);
}
/* ----------------------------------------------------------------------
assign each atom to a 2d spatial bin (pencil)
------------------------------------------------------------------------- */
void ComputeChunkAtom::atom2bin2d()
{
int i,ibin,i1bin,i2bin;
double *boxlo,*boxhi,*prd;
double xremap,yremap;
double **x = atom->x;
int nlocal = atom->nlocal;
int idim = dim[0];
int jdim = dim[1];
int nlayer1m1 = nlayers[0] - 1;
int nlayer2m1 = nlayers[1] - 1;
int *periodicity = domain->periodicity;
if (periodicity[idim] || periodicity[jdim]) {
if (scaleflag == REDUCED) {
boxlo = domain->boxlo_lamda;
boxhi = domain->boxhi_lamda;
prd = domain->prd_lamda;
} else {
boxlo = domain->boxlo;
boxhi = domain->boxhi;
prd = domain->prd;
}
}
// remap each atom's relevant coord back into box via PBC if necessary
// if scaleflag = REDUCED, box coords -> lamda coords
// apply discard rule
if (scaleflag == REDUCED) domain->x2lamda(nlocal);
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
xremap = x[i][idim];
if (periodicity[idim]) {
if (xremap < boxlo[idim]) xremap += prd[idim];
if (xremap >= boxhi[idim]) xremap -= prd[idim];
}
i1bin = static_cast<int> ((xremap - offset[0]) * invdelta[0]);
if (xremap < offset[0]) i1bin--;
if (discard == MIXED) {
if (!minflag[idim]) i1bin = MAX(i1bin,0);
else if (i1bin < 0) {
exclude[i] = 1;
continue;
}
if (!maxflag[idim]) i1bin = MIN(i1bin,nlayer1m1);
else if (i1bin > nlayer1m1) {
exclude[i] = 1;
continue;
}
} else if (discard == NODISCARD) {
i1bin = MAX(i1bin,0);
i1bin = MIN(i1bin,nlayer1m1);
} else if (i1bin < 0 || i1bin > nlayer1m1) {
exclude[i] = 1;
continue;
}
yremap = x[i][jdim];
if (periodicity[jdim]) {
if (yremap < boxlo[jdim]) yremap += prd[jdim];
if (yremap >= boxhi[jdim]) yremap -= prd[jdim];
}
i2bin = static_cast<int> ((yremap - offset[1]) * invdelta[1]);
if (yremap < offset[1]) i2bin--;
if (discard == MIXED) {
if (!minflag[jdim]) i2bin = MAX(i2bin,0);
else if (i2bin < 0) {
exclude[i] = 1;
continue;
}
if (!maxflag[jdim]) i2bin = MIN(i2bin,nlayer2m1);
else if (i2bin > nlayer2m1) {
exclude[i] = 1;
continue;
}
} else if (discard == NODISCARD) {
i2bin = MAX(i2bin,0);
i2bin = MIN(i2bin,nlayer2m1);
} else if (i2bin < 0 || i2bin > nlayer2m1) {
exclude[i] = 1;
continue;
}
ibin = i1bin*nlayers[1] + i2bin;
ichunk[i] = ibin+1;
}
if (scaleflag == REDUCED) domain->lamda2x(nlocal);
}
/* ----------------------------------------------------------------------
assign each atom to a 3d spatial bin (brick)
------------------------------------------------------------------------- */
void ComputeChunkAtom::atom2bin3d()
{
int i,ibin,i1bin,i2bin,i3bin;
double *boxlo,*boxhi,*prd;
double xremap,yremap,zremap;
double **x = atom->x;
int nlocal = atom->nlocal;
int idim = dim[0];
int jdim = dim[1];
int kdim = dim[2];
int nlayer1m1 = nlayers[0] - 1;
int nlayer2m1 = nlayers[1] - 1;
int nlayer3m1 = nlayers[2] - 1;
int *periodicity = domain->periodicity;
if (periodicity[idim] || periodicity[jdim] || periodicity[kdim]) {
if (scaleflag == REDUCED) {
boxlo = domain->boxlo_lamda;
boxhi = domain->boxhi_lamda;
prd = domain->prd_lamda;
} else {
boxlo = domain->boxlo;
boxhi = domain->boxhi;
prd = domain->prd;
}
}
// remap each atom's relevant coord back into box via PBC if necessary
// if scaleflag = REDUCED, box coords -> lamda coords
// apply discard rule
if (scaleflag == REDUCED) domain->x2lamda(nlocal);
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
xremap = x[i][idim];
if (periodicity[idim]) {
if (xremap < boxlo[idim]) xremap += prd[idim];
if (xremap >= boxhi[idim]) xremap -= prd[idim];
}
i1bin = static_cast<int> ((xremap - offset[0]) * invdelta[0]);
if (xremap < offset[0]) i1bin--;
if (discard == MIXED) {
if (!minflag[idim]) i1bin = MAX(i1bin,0);
else if (i1bin < 0) {
exclude[i] = 1;
continue;
}
if (!maxflag[idim]) i1bin = MIN(i1bin,nlayer1m1);
else if (i1bin > nlayer1m1) {
exclude[i] = 1;
continue;
}
} else if (discard == NODISCARD) {
i1bin = MAX(i1bin,0);
i1bin = MIN(i1bin,nlayer1m1);
} else if (i1bin < 0 || i1bin > nlayer1m1) {
exclude[i] = 1;
continue;
}
yremap = x[i][jdim];
if (periodicity[jdim]) {
if (yremap < boxlo[jdim]) yremap += prd[jdim];
if (yremap >= boxhi[jdim]) yremap -= prd[jdim];
}
i2bin = static_cast<int> ((yremap - offset[1]) * invdelta[1]);
if (yremap < offset[1]) i2bin--;
if (discard == MIXED) {
if (!minflag[jdim]) i2bin = MAX(i2bin,0);
else if (i2bin < 0) {
exclude[i] = 1;
continue;
}
if (!maxflag[jdim]) i2bin = MIN(i2bin,nlayer2m1);
else if (i2bin > nlayer2m1) {
exclude[i] = 1;
continue;
}
} else if (discard == NODISCARD) {
i2bin = MAX(i2bin,0);
i2bin = MIN(i2bin,nlayer2m1);
} else if (i2bin < 0 || i2bin > nlayer2m1) {
exclude[i] = 1;
continue;
}
zremap = x[i][kdim];
if (periodicity[kdim]) {
if (zremap < boxlo[kdim]) zremap += prd[kdim];
if (zremap >= boxhi[kdim]) zremap -= prd[kdim];
}
i3bin = static_cast<int> ((zremap - offset[2]) * invdelta[2]);
if (zremap < offset[2]) i3bin--;
if (discard == MIXED) {
if (!minflag[kdim]) i3bin = MAX(i3bin,0);
else if (i3bin < 0) {
exclude[i] = 1;
continue;
}
if (!maxflag[kdim]) i3bin = MIN(i3bin,nlayer3m1);
else if (i3bin > nlayer3m1) {
exclude[i] = 1;
continue;
}
} else if (discard == NODISCARD) {
i3bin = MAX(i3bin,0);
i3bin = MIN(i3bin,nlayer3m1);
} else if (i3bin < 0 || i3bin > nlayer3m1) {
exclude[i] = 1;
continue;
}
ibin = i1bin*nlayers[1]*nlayers[2] + i2bin*nlayers[2] + i3bin;
ichunk[i] = ibin+1;
}
if (scaleflag == REDUCED) domain->lamda2x(nlocal);
}
/* ----------------------------------------------------------------------
assign each atom to a spherical bin
------------------------------------------------------------------------- */
void ComputeChunkAtom::atom2binsphere()
{
int i,ibin;
double dx,dy,dz,r;
double xremap,yremap,zremap;
double *boxlo = domain->boxlo;
double *boxhi = domain->boxhi;
double *prd = domain->prd;
double *prd_half = domain->prd_half;
int *periodicity = domain->periodicity;
// remap each atom's relevant coords back into box via PBC if necessary
// apply discard rule based on rmin and rmax
double **x = atom->x;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
xremap = x[i][0];
if (periodicity[0]) {
if (xremap < boxlo[0]) xremap += prd[0];
if (xremap >= boxhi[0]) xremap -= prd[0];
}
yremap = x[i][1];
if (periodicity[1]) {
if (xremap < boxlo[1]) yremap += prd[1];
if (xremap >= boxhi[1]) yremap -= prd[1];
}
zremap = x[i][2];
if (periodicity[2]) {
if (xremap < boxlo[2]) zremap += prd[2];
if (xremap >= boxhi[2]) zremap -= prd[2];
}
dx = xremap - sorigin[0];
dy = yremap - sorigin[1];
dz = zremap - sorigin[2];
// if requested, apply PBC to distance from sphere center
// treat orthogonal and triclinic the same
// with dx,dy,dz = lengths independent of each other
// so do not use domain->minimum_image() which couples for triclinic
if (pbcflag) {
if (periodicity[0]) {
if (fabs(dx) > prd_half[0]) {
if (dx < 0.0) dx += prd[0];
else dx -= prd[0];
}
}
if (periodicity[1]) {
if (fabs(dy) > prd_half[1]) {
if (dy < 0.0) dy += prd[1];
else dy -= prd[1];
}
}
if (periodicity[2]) {
if (fabs(dz) > prd_half[2]) {
if (dz < 0.0) dz += prd[2];
else dz -= prd[2];
}
}
}
r = sqrt(dx*dx + dy*dy + dz*dz);
ibin = static_cast<int> ((r - sradmin) * sinvrad);
if (r < sradmin) ibin--;
if (discard == MIXED || discard == NODISCARD) {
ibin = MAX(ibin,0);
ibin = MIN(ibin,nchunk-1);
} else if (ibin < 0 || ibin >= nchunk) {
exclude[i] = 1;
continue;
}
ichunk[i] = ibin+1;
}
}
/* ----------------------------------------------------------------------
assign each atom to a cylindrical bin
------------------------------------------------------------------------- */
void ComputeChunkAtom::atom2bincylinder()
{
int i,rbin,kbin;
double d1,d2,r;
double remap1,remap2;
// first use atom2bin1d() to bin all atoms along cylinder axis
atom2bin1d();
// now bin in radial direction
// kbin = bin along cylinder axis
// rbin = bin in radial direction
double *boxlo = domain->boxlo;
double *boxhi = domain->boxhi;
double *prd = domain->prd;
double *prd_half = domain->prd_half;
int *periodicity = domain->periodicity;
// remap each atom's relevant coords back into box via PBC if necessary
// apply discard rule based on rmin and rmax
double **x = atom->x;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++) {
if (exclude[i]) continue;
kbin = ichunk[i] - 1;
remap1 = x[i][cdim1];
if (periodicity[cdim1]) {
if (remap1 < boxlo[cdim1]) remap1 += prd[cdim1];
if (remap1 >= boxhi[cdim1]) remap1 -= prd[cdim1];
}
remap2 = x[i][cdim2];
if (periodicity[cdim2]) {
if (remap2 < boxlo[cdim2]) remap2 += prd[cdim2];
if (remap2 >= boxhi[cdim2]) remap2 -= prd[cdim2];
}
d1 = remap1 - corigin[cdim1];
d2 = remap2 - corigin[cdim2];
// if requested, apply PBC to distance from cylinder axis
// treat orthogonal and triclinic the same
// with d1,d2 = lengths independent of each other
if (pbcflag) {
if (periodicity[cdim1]) {
if (fabs(d1) > prd_half[cdim1]) {
if (d1 < 0.0) d1 += prd[cdim1];
else d1 -= prd[cdim1];
}
}
if (periodicity[cdim2]) {
if (fabs(d2) > prd_half[cdim2]) {
if (d2 < 0.0) d2 += prd[cdim2];
else d2 -= prd[cdim2];
}
}
}
r = sqrt(d1*d1 + d2*d2);
rbin = static_cast<int> ((r - cradmin) * cinvrad);
if (r < cradmin) rbin--;
if (discard == MIXED || discard == NODISCARD) {
rbin = MAX(rbin,0);
rbin = MIN(rbin,ncbin-1);
} else if (rbin < 0 || rbin >= ncbin) {
exclude[i] = 1;
continue;
}
// combine axis and radial bin indices to set ichunk
ichunk[i] = rbin*ncplane + kbin + 1;
}
}
/* ----------------------------------------------------------------------
process args for one dimension of binning info
set dim, originflag, origin, delta
------------------------------------------------------------------------- */
void ComputeChunkAtom::readdim(int narg, char **arg, int iarg, int idim)
{
if (narg < iarg+3) error->all(FLERR,"Illegal compute chunk/atom command");
if (strcmp(arg[iarg],"x") == 0) dim[idim] = 0;
else if (strcmp(arg[iarg],"y") == 0) dim[idim] = 1;
else if (strcmp(arg[iarg],"z") == 0) dim[idim] = 2;
else error->all(FLERR,"Illegal compute chunk/atom command");
if (dim[idim] == 2 && domain->dimension == 2)
error->all(FLERR,"Cannot use compute chunk/atom bin z for 2d model");
if (strcmp(arg[iarg+1],"lower") == 0) originflag[idim] = LOWER;
else if (strcmp(arg[iarg+1],"center") == 0) originflag[idim] = CENTER;
else if (strcmp(arg[iarg+1],"upper") == 0) originflag[idim] = UPPER;
else originflag[idim] = COORD;
if (originflag[idim] == COORD)
origin[idim] = force->numeric(FLERR,arg[iarg+1]);
delta[idim] = force->numeric(FLERR,arg[iarg+2]);
}
/* ----------------------------------------------------------------------
initialize one atom's storage values, called when atom is created
just set chunkID to 0 for new atom
------------------------------------------------------------------------- */
void ComputeChunkAtom::set_arrays(int i)
{
if (!fixstore) return;
double *vstore = fixstore->vstore;
vstore[i] = 0.0;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays and per-chunk arrays
note: nchunk is actually 0 until first call
------------------------------------------------------------------------- */
double ComputeChunkAtom::memory_usage()
{
double bytes = 2*MAX(nmaxint,0) * sizeof(int); // ichunk,exclude
bytes += nmax * sizeof(double); // chunk
bytes += ncoord*nchunk * sizeof(double); // coord
if (compress) bytes += nchunk * sizeof(int); // chunkID
return bytes;
}
diff --git a/src/compute_cluster_atom.cpp b/src/compute_cluster_atom.cpp
index c81785f21..80c002d39 100644
--- a/src/compute_cluster_atom.cpp
+++ b/src/compute_cluster_atom.cpp
@@ -1,244 +1,244 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "compute_cluster_atom.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "force.h"
#include "pair.h"
#include "comm.h"
#include "memory.h"
#include "error.h"
#include "group.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeClusterAtom::ComputeClusterAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ clusterID(NULL)
{
if (narg != 4) error->all(FLERR,"Illegal compute cluster/atom command");
double cutoff = force->numeric(FLERR,arg[3]);
cutsq = cutoff*cutoff;
peratom_flag = 1;
size_peratom_cols = 0;
comm_forward = 1;
nmax = 0;
- clusterID = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeClusterAtom::~ComputeClusterAtom()
{
memory->destroy(clusterID);
}
/* ---------------------------------------------------------------------- */
void ComputeClusterAtom::init()
{
if (atom->tag_enable == 0)
error->all(FLERR,"Cannot use compute cluster/atom unless atoms have IDs");
if (force->pair == NULL)
error->all(FLERR,"Compute cluster/atom requires a pair style be defined");
if (sqrt(cutsq) > force->pair->cutforce)
error->all(FLERR,
"Compute cluster/atom cutoff is longer than pairwise cutoff");
// need an occasional full neighbor list
// full required so that pair of atoms on 2 procs both set their clusterID
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->half = 0;
neighbor->requests[irequest]->full = 1;
neighbor->requests[irequest]->occasional = 1;
int count = 0;
for (int i = 0; i < modify->ncompute; i++)
if (strcmp(modify->compute[i]->style,"cluster/atom") == 0) count++;
if (count > 1 && comm->me == 0)
error->warning(FLERR,"More than one compute cluster/atom");
}
/* ---------------------------------------------------------------------- */
void ComputeClusterAtom::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void ComputeClusterAtom::compute_peratom()
{
int i,j,ii,jj,inum,jnum;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
int *ilist,*jlist,*numneigh,**firstneigh;
invoked_peratom = update->ntimestep;
// grow clusterID array if necessary
if (atom->nmax > nmax) {
memory->destroy(clusterID);
nmax = atom->nmax;
memory->create(clusterID,nmax,"cluster/atom:clusterID");
vector_atom = clusterID;
}
// invoke full neighbor list (will copy or build if necessary)
neighbor->build_one(list);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// if group is dynamic, insure ghost atom masks are current
if (group->dynamic[igroup]) {
commflag = 0;
comm->forward_comm_compute(this);
}
// every atom starts in its own cluster, with clusterID = atomID
tagint *tag = atom->tag;
int *mask = atom->mask;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (mask[i] & groupbit) clusterID[i] = tag[i];
else clusterID[i] = 0;
}
// loop until no more changes on any proc:
// acquire clusterIDs of ghost atoms
// loop over my atoms, checking distance to neighbors
// if both atoms are in cluster, assign lowest clusterID to both
// iterate until no changes in my atoms
// then check if any proc made changes
commflag = 1;
double **x = atom->x;
int change,done,anychange;
while (1) {
comm->forward_comm_compute(this);
change = 0;
while (1) {
done = 1;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (!(mask[i] & groupbit)) continue;
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
jlist = firstneigh[i];
jnum = numneigh[i];
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
if (!(mask[j] & groupbit)) continue;
if (clusterID[i] == clusterID[j]) continue;
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq < cutsq) {
clusterID[i] = clusterID[j] = MIN(clusterID[i],clusterID[j]);
done = 0;
}
}
}
if (!done) change = 1;
if (done) break;
}
// stop if all procs are done
MPI_Allreduce(&change,&anychange,1,MPI_INT,MPI_MAX,world);
if (!anychange) break;
}
}
/* ---------------------------------------------------------------------- */
int ComputeClusterAtom::pack_forward_comm(int n, int *list, double *buf,
int pbc_flag, int *pbc)
{
int i,j,m;
m = 0;
if (commflag) {
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = clusterID[j];
}
} else {
int *mask = atom->mask;
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = ubuf(mask[j]).d;
}
}
return m;
}
/* ---------------------------------------------------------------------- */
void ComputeClusterAtom::unpack_forward_comm(int n, int first, double *buf)
{
int i,m,last;
m = 0;
last = first + n;
if (commflag)
for (i = first; i < last; i++) clusterID[i] = buf[m++];
else {
int *mask = atom->mask;
for (i = first; i < last; i++) mask[i] = (int) ubuf(buf[m++]).i;
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputeClusterAtom::memory_usage()
{
double bytes = nmax * sizeof(double);
return bytes;
}
diff --git a/src/compute_cna_atom.cpp b/src/compute_cna_atom.cpp
index 46c6726b0..024a95d9d 100644
--- a/src/compute_cna_atom.cpp
+++ b/src/compute_cna_atom.cpp
@@ -1,367 +1,365 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Wan Liang (Chinese Academy of Sciences)
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include "compute_cna_atom.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "pair.h"
#include "modify.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "comm.h"
#include "memory.h"
#include "error.h"
#include <math.h>
using namespace LAMMPS_NS;
#define MAXNEAR 16
#define MAXCOMMON 8
enum{UNKNOWN,FCC,HCP,BCC,ICOS,OTHER};
enum{NCOMMON,NBOND,MAXBOND,MINBOND};
/* ---------------------------------------------------------------------- */
ComputeCNAAtom::ComputeCNAAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ nearest(NULL), nnearest(NULL), pattern(NULL)
{
if (narg != 4) error->all(FLERR,"Illegal compute cna/atom command");
peratom_flag = 1;
size_peratom_cols = 0;
double cutoff = force->numeric(FLERR,arg[3]);
if (cutoff < 0.0) error->all(FLERR,"Illegal compute cna/atom command");
cutsq = cutoff*cutoff;
nmax = 0;
- nearest = NULL;
- nnearest = NULL;
- pattern = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeCNAAtom::~ComputeCNAAtom()
{
memory->destroy(nearest);
memory->destroy(nnearest);
memory->destroy(pattern);
}
/* ---------------------------------------------------------------------- */
void ComputeCNAAtom::init()
{
if (force->pair == NULL)
error->all(FLERR,"Compute cna/atom requires a pair style be defined");
if (sqrt(cutsq) > force->pair->cutforce)
error->all(FLERR,"Compute cna/atom cutoff is longer than pairwise cutoff");
// cannot use neighbor->cutneighmax b/c neighbor has not yet been init
if (2.0*sqrt(cutsq) > force->pair->cutforce + neighbor->skin &&
comm->me == 0)
error->warning(FLERR,"Compute cna/atom cutoff may be too large to find "
"ghost atom neighbors");
int count = 0;
for (int i = 0; i < modify->ncompute; i++)
if (strcmp(modify->compute[i]->style,"cna/atom") == 0) count++;
if (count > 1 && comm->me == 0)
error->warning(FLERR,"More than one compute cna/atom defined");
// need an occasional full neighbor list
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->half = 0;
neighbor->requests[irequest]->full = 1;
neighbor->requests[irequest]->occasional = 1;
}
/* ---------------------------------------------------------------------- */
void ComputeCNAAtom::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void ComputeCNAAtom::compute_peratom()
{
int i,j,k,ii,jj,kk,m,n,inum,jnum,inear,jnear;
int firstflag,ncommon,nbonds,maxbonds,minbonds;
int nfcc,nhcp,nbcc4,nbcc6,nico,cj,ck,cl,cm;
int *ilist,*jlist,*numneigh,**firstneigh;
int cna[MAXNEAR][4],onenearest[MAXNEAR];
int common[MAXCOMMON],bonds[MAXCOMMON];
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
invoked_peratom = update->ntimestep;
// grow arrays if necessary
if (atom->nmax > nmax) {
memory->destroy(nearest);
memory->destroy(nnearest);
memory->destroy(pattern);
nmax = atom->nmax;
memory->create(nearest,nmax,MAXNEAR,"cna:nearest");
memory->create(nnearest,nmax,"cna:nnearest");
memory->create(pattern,nmax,"cna:cna_pattern");
vector_atom = pattern;
}
// invoke full neighbor list (will copy or build if necessary)
neighbor->build_one(list);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// find the neigbours of each atom within cutoff using full neighbor list
// nearest[] = atom indices of nearest neighbors, up to MAXNEAR
// do this for all atoms, not just compute group
// since CNA calculation requires neighbors of neighbors
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int nerror = 0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
jlist = firstneigh[i];
jnum = numneigh[i];
n = 0;
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq < cutsq) {
if (n < MAXNEAR) nearest[i][n++] = j;
else {
nerror++;
break;
}
}
}
nnearest[i] = n;
}
// warning message
int nerrorall;
MPI_Allreduce(&nerror,&nerrorall,1,MPI_INT,MPI_SUM,world);
if (nerrorall && comm->me == 0) {
char str[128];
sprintf(str,"Too many neighbors in CNA for %d atoms",nerrorall);
error->warning(FLERR,str,0);
}
// compute CNA for each atom in group
// only performed if # of nearest neighbors = 12 or 14 (fcc,hcp)
nerror = 0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (!(mask[i] & groupbit)) {
pattern[i] = UNKNOWN;
continue;
}
if (nnearest[i] != 12 && nnearest[i] != 14) {
pattern[i] = OTHER;
continue;
}
// loop over near neighbors of I to build cna data structure
// cna[k][NCOMMON] = # of common neighbors of I with each of its neighs
// cna[k][NBONDS] = # of bonds between those common neighbors
// cna[k][MAXBOND] = max # of bonds of any common neighbor
// cna[k][MINBOND] = min # of bonds of any common neighbor
for (m = 0; m < nnearest[i]; m++) {
j = nearest[i][m];
// common = list of neighbors common to atom I and atom J
// if J is an owned atom, use its near neighbor list to find them
// if J is a ghost atom, use full neighbor list of I to find them
// in latter case, must exclude J from I's neighbor list
if (j < nlocal) {
firstflag = 1;
ncommon = 0;
for (inear = 0; inear < nnearest[i]; inear++)
for (jnear = 0; jnear < nnearest[j]; jnear++)
if (nearest[i][inear] == nearest[j][jnear]) {
if (ncommon < MAXCOMMON) common[ncommon++] = nearest[i][inear];
else if (firstflag) {
nerror++;
firstflag = 0;
}
}
} else {
xtmp = x[j][0];
ytmp = x[j][1];
ztmp = x[j][2];
jlist = firstneigh[i];
jnum = numneigh[i];
n = 0;
for (kk = 0; kk < jnum; kk++) {
k = jlist[kk];
k &= NEIGHMASK;
if (k == j) continue;
delx = xtmp - x[k][0];
dely = ytmp - x[k][1];
delz = ztmp - x[k][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq < cutsq) {
if (n < MAXNEAR) onenearest[n++] = k;
else break;
}
}
firstflag = 1;
ncommon = 0;
for (inear = 0; inear < nnearest[i]; inear++)
for (jnear = 0; (jnear < n) && (n < MAXNEAR); jnear++)
if (nearest[i][inear] == onenearest[jnear]) {
if (ncommon < MAXCOMMON) common[ncommon++] = nearest[i][inear];
else if (firstflag) {
nerror++;
firstflag = 0;
}
}
}
cna[m][NCOMMON] = ncommon;
// calculate total # of bonds between common neighbor atoms
// also max and min # of common atoms any common atom is bonded to
// bond = pair of atoms within cutoff
for (n = 0; n < ncommon; n++) bonds[n] = 0;
nbonds = 0;
for (jj = 0; jj < ncommon; jj++) {
j = common[jj];
xtmp = x[j][0];
ytmp = x[j][1];
ztmp = x[j][2];
for (kk = jj+1; kk < ncommon; kk++) {
k = common[kk];
delx = xtmp - x[k][0];
dely = ytmp - x[k][1];
delz = ztmp - x[k][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq < cutsq) {
nbonds++;
bonds[jj]++;
bonds[kk]++;
}
}
}
cna[m][NBOND] = nbonds;
maxbonds = 0;
minbonds = MAXCOMMON;
for (n = 0; n < ncommon; n++) {
maxbonds = MAX(bonds[n],maxbonds);
minbonds = MIN(bonds[n],minbonds);
}
cna[m][MAXBOND] = maxbonds;
cna[m][MINBOND] = minbonds;
}
// detect CNA pattern of the atom
nfcc = nhcp = nbcc4 = nbcc6 = nico = 0;
pattern[i] = OTHER;
if (nnearest[i] == 12) {
for (inear = 0; inear < 12; inear++) {
cj = cna[inear][NCOMMON];
ck = cna[inear][NBOND];
cl = cna[inear][MAXBOND];
cm = cna[inear][MINBOND];
if (cj == 4 && ck == 2 && cl == 1 && cm == 1) nfcc++;
else if (cj == 4 && ck == 2 && cl == 2 && cm == 0) nhcp++;
else if (cj == 5 && ck == 5 && cl == 2 && cm == 2) nico++;
}
if (nfcc == 12) pattern[i] = FCC;
else if (nfcc == 6 && nhcp == 6) pattern[i] = HCP;
else if (nico == 12) pattern[i] = ICOS;
} else if (nnearest[i] == 14) {
for (inear = 0; inear < 14; inear++) {
cj = cna[inear][NCOMMON];
ck = cna[inear][NBOND];
cl = cna[inear][MAXBOND];
cm = cna[inear][MINBOND];
if (cj == 4 && ck == 4 && cl == 2 && cm == 2) nbcc4++;
else if (cj == 6 && ck == 6 && cl == 2 && cm == 2) nbcc6++;
}
if (nbcc4 == 6 && nbcc6 == 8) pattern[i] = BCC;
}
}
// warning message
MPI_Allreduce(&nerror,&nerrorall,1,MPI_INT,MPI_SUM,world);
if (nerrorall && comm->me == 0) {
char str[128];
sprintf(str,"Too many common neighbors in CNA %d times",nerrorall);
error->warning(FLERR,str);
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputeCNAAtom::memory_usage()
{
double bytes = nmax * sizeof(int);
bytes += nmax * MAXNEAR * sizeof(int);
bytes += nmax * sizeof(double);
return bytes;
}
diff --git a/src/compute_com_chunk.cpp b/src/compute_com_chunk.cpp
index ebf2b30f6..3eb686783 100644
--- a/src/compute_com_chunk.cpp
+++ b/src/compute_com_chunk.cpp
@@ -1,243 +1,242 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_com_chunk.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{ONCE,NFREQ,EVERY};
/* ---------------------------------------------------------------------- */
ComputeCOMChunk::ComputeCOMChunk(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ idchunk(NULL), masstotal(NULL), massproc(NULL), com(NULL), comall(NULL)
{
if (narg != 4) error->all(FLERR,"Illegal compute com/chunk command");
array_flag = 1;
size_array_cols = 3;
size_array_rows = 0;
size_array_rows_variable = 1;
extarray = 0;
// ID of compute chunk/atom
int n = strlen(arg[3]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[3]);
init();
// chunk-based data
nchunk = 1;
maxchunk = 0;
- massproc = masstotal = NULL;
- com = comall = NULL;
allocate();
firstflag = massneed = 1;
}
/* ---------------------------------------------------------------------- */
ComputeCOMChunk::~ComputeCOMChunk()
{
delete [] idchunk;
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
}
/* ---------------------------------------------------------------------- */
void ComputeCOMChunk::init()
{
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for compute com/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Compute com/chunk does not use chunk/atom compute");
}
/* ---------------------------------------------------------------------- */
void ComputeCOMChunk::setup()
{
// one-time calculation of per-chunk mass
// done in setup, so that ComputeChunkAtom::setup() is already called
if (firstflag && cchunk->idsflag == ONCE) {
compute_array();
firstflag = massneed = 0;
}
}
/* ---------------------------------------------------------------------- */
void ComputeCOMChunk::compute_array()
{
int index;
double massone;
double unwrap[3];
invoked_array = update->ntimestep;
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
int *ichunk = cchunk->ichunk;
if (nchunk > maxchunk) allocate();
size_array_rows = nchunk;
// zero local per-chunk values
for (int i = 0; i < nchunk; i++)
com[i][0] = com[i][1] = com[i][2] = 0.0;
if (massneed)
for (int i = 0; i < nchunk; i++) massproc[i] = 0.0;
// compute COM for each chunk
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
domain->unmap(x[i],image[i],unwrap);
com[index][0] += unwrap[0] * massone;
com[index][1] += unwrap[1] * massone;
com[index][2] += unwrap[2] * massone;
if (massneed) massproc[index] += massone;
}
MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world);
if (massneed)
MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < nchunk; i++) {
if (masstotal[i] > 0.0) {
comall[i][0] /= masstotal[i];
comall[i][1] /= masstotal[i];
comall[i][2] /= masstotal[i];
} else comall[i][0] = comall[i][1] = comall[i][2] = 0.0;
}
}
/* ----------------------------------------------------------------------
lock methods: called by fix ave/time
these methods insure vector/array size is locked for Nfreq epoch
by passing lock info along to compute chunk/atom
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
increment lock counter
------------------------------------------------------------------------- */
void ComputeCOMChunk::lock_enable()
{
cchunk->lockcount++;
}
/* ----------------------------------------------------------------------
decrement lock counter in compute chunk/atom, it if still exists
------------------------------------------------------------------------- */
void ComputeCOMChunk::lock_disable()
{
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->lockcount--;
}
}
/* ----------------------------------------------------------------------
calculate and return # of chunks = length of vector/array
------------------------------------------------------------------------- */
int ComputeCOMChunk::lock_length()
{
nchunk = cchunk->setup_chunks();
return nchunk;
}
/* ----------------------------------------------------------------------
set the lock from startstep to stopstep
------------------------------------------------------------------------- */
void ComputeCOMChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
cchunk->lock(fixptr,startstep,stopstep);
}
/* ----------------------------------------------------------------------
unset the lock
------------------------------------------------------------------------- */
void ComputeCOMChunk::unlock(Fix *fixptr)
{
cchunk->unlock(fixptr);
}
/* ----------------------------------------------------------------------
free and reallocate per-chunk arrays
------------------------------------------------------------------------- */
void ComputeCOMChunk::allocate()
{
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
maxchunk = nchunk;
memory->create(massproc,maxchunk,"com/chunk:massproc");
memory->create(masstotal,maxchunk,"com/chunk:masstotal");
memory->create(com,maxchunk,3,"com/chunk:com");
memory->create(comall,maxchunk,3,"com/chunk:comall");
array = comall;
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeCOMChunk::memory_usage()
{
double bytes = (bigint) maxchunk * 2 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
return bytes;
}
diff --git a/src/compute_contact_atom.cpp b/src/compute_contact_atom.cpp
index 99c4766b6..c86829bc1 100644
--- a/src/compute_contact_atom.cpp
+++ b/src/compute_contact_atom.cpp
@@ -1,197 +1,197 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "compute_contact_atom.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "force.h"
#include "pair.h"
#include "comm.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeContactAtom::ComputeContactAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ contact(NULL)
{
if (narg != 3) error->all(FLERR,"Illegal compute contact/atom command");
peratom_flag = 1;
size_peratom_cols = 0;
comm_reverse = 1;
nmax = 0;
- contact = NULL;
// error checks
if (!atom->sphere_flag)
error->all(FLERR,"Compute contact/atom requires atom style sphere");
}
/* ---------------------------------------------------------------------- */
ComputeContactAtom::~ComputeContactAtom()
{
memory->destroy(contact);
}
/* ---------------------------------------------------------------------- */
void ComputeContactAtom::init()
{
if (force->pair == NULL)
error->all(FLERR,"Compute contact/atom requires a pair style be defined");
int count = 0;
for (int i = 0; i < modify->ncompute; i++)
if (strcmp(modify->compute[i]->style,"contact/atom") == 0) count++;
if (count > 1 && comm->me == 0)
error->warning(FLERR,"More than one compute contact/atom");
// need an occasional neighbor list
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->half = 0;
neighbor->requests[irequest]->gran = 1;
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->occasional = 1;
}
/* ---------------------------------------------------------------------- */
void ComputeContactAtom::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void ComputeContactAtom::compute_peratom()
{
int i,j,ii,jj,inum,jnum;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
double radi,radsum,radsumsq;
int *ilist,*jlist,*numneigh,**firstneigh;
invoked_peratom = update->ntimestep;
// grow contact array if necessary
if (atom->nmax > nmax) {
memory->destroy(contact);
nmax = atom->nmax;
memory->create(contact,nmax,"contact/atom:contact");
vector_atom = contact;
}
// invoke neighbor list (will copy or build if necessary)
neighbor->build_one(list);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// compute number of contacts for each atom in group
// contact if distance <= sum of radii
// tally for both I and J
double **x = atom->x;
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int nall = nlocal + atom->nghost;
for (i = 0; i < nall; i++) contact[i] = 0.0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (mask[i] & groupbit) {
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
radi = radius[i];
jlist = firstneigh[i];
jnum = numneigh[i];
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
radsum = radi + radius[j];
radsumsq = radsum*radsum;
if (rsq <= radsumsq) {
contact[i] += 1.0;
contact[j] += 1.0;
}
}
}
}
// communicate ghost atom counts between neighbor procs if necessary
if (force->newton_pair) comm->reverse_comm_compute(this);
}
/* ---------------------------------------------------------------------- */
int ComputeContactAtom::pack_reverse_comm(int n, int first, double *buf)
{
int i,m,last;
m = 0;
last = first + n;
for (i = first; i < last; i++)
buf[m++] = contact[i];
return m;
}
/* ---------------------------------------------------------------------- */
void ComputeContactAtom::unpack_reverse_comm(int n, int *list, double *buf)
{
int i,j,m;
m = 0;
for (i = 0; i < n; i++) {
j = list[i];
contact[j] += buf[m++];
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputeContactAtom::memory_usage()
{
double bytes = nmax * sizeof(double);
return bytes;
}
diff --git a/src/compute_coord_atom.cpp b/src/compute_coord_atom.cpp
index c6aa561eb..5747c869d 100644
--- a/src/compute_coord_atom.cpp
+++ b/src/compute_coord_atom.cpp
@@ -1,227 +1,226 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "compute_coord_atom.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "force.h"
#include "pair.h"
#include "comm.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeCoordAtom::ComputeCoordAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ typelo(NULL), typehi(NULL), cvec(NULL), carray(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute coord/atom command");
double cutoff = force->numeric(FLERR,arg[3]);
cutsq = cutoff*cutoff;
ncol = narg-4 + 1;
int ntypes = atom->ntypes;
typelo = new int[ncol];
typehi = new int[ncol];
if (narg == 4) {
ncol = 1;
typelo[0] = 1;
typehi[0] = ntypes;
} else {
ncol = 0;
int iarg = 4;
while (iarg < narg) {
force->bounds(arg[iarg],ntypes,typelo[ncol],typehi[ncol]);
if (typelo[ncol] > typehi[ncol])
error->all(FLERR,"Illegal compute coord/atom command");
ncol++;
iarg++;
}
}
peratom_flag = 1;
if (ncol == 1) size_peratom_cols = 0;
else size_peratom_cols = ncol;
nmax = 0;
- cvec = NULL;
- carray = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeCoordAtom::~ComputeCoordAtom()
{
delete [] typelo;
delete [] typehi;
memory->destroy(cvec);
memory->destroy(carray);
}
/* ---------------------------------------------------------------------- */
void ComputeCoordAtom::init()
{
if (force->pair == NULL)
error->all(FLERR,"Compute coord/atom requires a pair style be defined");
if (sqrt(cutsq) > force->pair->cutforce)
error->all(FLERR,
"Compute coord/atom cutoff is longer than pairwise cutoff");
// need an occasional full neighbor list
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->half = 0;
neighbor->requests[irequest]->full = 1;
neighbor->requests[irequest]->occasional = 1;
int count = 0;
for (int i = 0; i < modify->ncompute; i++)
if (strcmp(modify->compute[i]->style,"coord/atom") == 0) count++;
if (count > 1 && comm->me == 0)
error->warning(FLERR,"More than one compute coord/atom");
}
/* ---------------------------------------------------------------------- */
void ComputeCoordAtom::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void ComputeCoordAtom::compute_peratom()
{
int i,j,m,ii,jj,inum,jnum,jtype,n;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
int *ilist,*jlist,*numneigh,**firstneigh;
double *count;
invoked_peratom = update->ntimestep;
// grow coordination array if necessary
if (atom->nmax > nmax) {
if (ncol == 1) {
memory->destroy(cvec);
nmax = atom->nmax;
memory->create(cvec,nmax,"coord/atom:cvec");
vector_atom = cvec;
} else {
memory->destroy(carray);
nmax = atom->nmax;
memory->create(carray,nmax,ncol,"coord/atom:carray");
array_atom = carray;
}
}
// invoke full neighbor list (will copy or build if necessary)
neighbor->build_one(list);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// compute coordination number(s) for each atom in group
// use full neighbor list to count atoms less than cutoff
double **x = atom->x;
int *type = atom->type;
int *mask = atom->mask;
if (ncol == 1) {
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (mask[i] & groupbit) {
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
jlist = firstneigh[i];
jnum = numneigh[i];
n = 0;
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
jtype = type[j];
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq < cutsq && jtype >= typelo[0] && jtype <= typehi[0]) n++;
}
cvec[i] = n;
} else cvec[i] = 0.0;
}
} else {
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
count = carray[i];
for (m = 0; m < ncol; m++) count[m] = 0.0;
if (mask[i] & groupbit) {
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
jlist = firstneigh[i];
jnum = numneigh[i];
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
jtype = type[j];
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq < cutsq) {
for (m = 0; m < ncol; m++)
if (jtype >= typelo[m] && jtype <= typehi[m])
count[m] += 1.0;
}
}
}
}
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputeCoordAtom::memory_usage()
{
double bytes = ncol*nmax * sizeof(double);
return bytes;
}
diff --git a/src/compute_dihedral.cpp b/src/compute_dihedral.cpp
index c6cb97c0d..bbd7fe203 100644
--- a/src/compute_dihedral.cpp
+++ b/src/compute_dihedral.cpp
@@ -1,82 +1,83 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include "compute_dihedral.h"
#include "update.h"
#include "force.h"
#include "dihedral_hybrid.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeDihedral::ComputeDihedral(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ emine(NULL)
{
if (narg != 3) error->all(FLERR,"Illegal compute dihedral command");
vector_flag = 1;
extvector = 1;
peflag = 1;
timeflag = 1;
// check if dihedral style hybrid exists
dihedral = (DihedralHybrid *) force->dihedral_match("hybrid");
if (!dihedral)
error->all(FLERR,
"Dihedral style for compute dihedral command is not hybrid");
size_vector = nsub = dihedral->nstyles;
emine = new double[nsub];
vector = new double[nsub];
}
/* ---------------------------------------------------------------------- */
ComputeDihedral::~ComputeDihedral()
{
delete [] emine;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeDihedral::init()
{
// recheck dihedral style in case it has been changed
dihedral = (DihedralHybrid *) force->dihedral_match("hybrid");
if (!dihedral)
error->all(FLERR,
"Dihedral style for compute dihedral command is not hybrid");
if (dihedral->nstyles != nsub)
error->all(FLERR,"Dihedral style for compute dihedral command has changed");
}
/* ---------------------------------------------------------------------- */
void ComputeDihedral::compute_vector()
{
invoked_vector = update->ntimestep;
if (update->eflag_global != invoked_vector)
error->all(FLERR,"Energy was not tallied on needed timestep");
for (int i = 0; i < nsub; i++)
emine[i] = dihedral->styles[i]->energy;
MPI_Allreduce(emine,vector,nsub,MPI_DOUBLE,MPI_SUM,world);
}
diff --git a/src/compute_dihedral_local.cpp b/src/compute_dihedral_local.cpp
index 66523d00a..f50f49fa1 100644
--- a/src/compute_dihedral_local.cpp
+++ b/src/compute_dihedral_local.cpp
@@ -1,257 +1,256 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include "compute_dihedral_local.h"
#include "atom.h"
#include "atom_vec.h"
#include "molecule.h"
#include "update.h"
#include "domain.h"
#include "force.h"
#include "dihedral.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace MathConst;
#define DELTA 10000
#define SMALL 0.001
/* ---------------------------------------------------------------------- */
ComputeDihedralLocal::ComputeDihedralLocal(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ vector(NULL), array(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute dihedral/local command");
if (atom->avec->dihedrals_allow == 0)
error->all(FLERR,
"Compute dihedral/local used when dihedrals are not allowed");
local_flag = 1;
nvalues = narg - 3;
if (nvalues == 1) size_local_cols = 0;
else size_local_cols = nvalues;
pflag = -1;
nvalues = 0;
for (int iarg = 3; iarg < narg; iarg++) {
if (strcmp(arg[iarg],"phi") == 0) pflag = nvalues++;
else error->all(FLERR,"Invalid keyword in compute dihedral/local command");
}
nmax = 0;
- vector = NULL;
- array = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeDihedralLocal::~ComputeDihedralLocal()
{
memory->destroy(vector);
memory->destroy(array);
}
/* ---------------------------------------------------------------------- */
void ComputeDihedralLocal::init()
{
if (force->dihedral == NULL)
error->all(FLERR,"No dihedral style is defined for compute dihedral/local");
// do initial memory allocation so that memory_usage() is correct
ncount = compute_dihedrals(0);
if (ncount > nmax) reallocate(ncount);
size_local_rows = ncount;
}
/* ---------------------------------------------------------------------- */
void ComputeDihedralLocal::compute_local()
{
invoked_local = update->ntimestep;
// count local entries and compute dihedral info
ncount = compute_dihedrals(0);
if (ncount > nmax) reallocate(ncount);
size_local_rows = ncount;
ncount = compute_dihedrals(1);
}
/* ----------------------------------------------------------------------
count dihedrals on this proc
only count if 2nd atom is the one storing the dihedral
all atoms in interaction must be in group
all atoms in interaction must be known to proc
if flag is set, compute requested info about dihedral
------------------------------------------------------------------------- */
int ComputeDihedralLocal::compute_dihedrals(int flag)
{
int i,m,n,nd,atom1,atom2,atom3,atom4,imol,iatom;
tagint tagprev;
double vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z,vb2xm,vb2ym,vb2zm;
double ax,ay,az,bx,by,bz,rasq,rbsq,rgsq,rg,ra2inv,rb2inv,rabinv;
double s,c;
double *pbuf;
double **x = atom->x;
tagint *tag = atom->tag;
int *num_dihedral = atom->num_dihedral;
tagint **dihedral_atom1 = atom->dihedral_atom1;
tagint **dihedral_atom2 = atom->dihedral_atom2;
tagint **dihedral_atom3 = atom->dihedral_atom3;
tagint **dihedral_atom4 = atom->dihedral_atom4;
int *mask = atom->mask;
int *molindex = atom->molindex;
int *molatom = atom->molatom;
Molecule **onemols = atom->avec->onemols;
int nlocal = atom->nlocal;
int molecular = atom->molecular;
if (flag) {
if (nvalues == 1) {
if (pflag >= 0) pbuf = vector;
} else {
if (pflag >= 0 && array) pbuf = &array[0][pflag];
else pbuf = NULL;
}
}
m = n = 0;
for (atom2 = 0; atom2 < nlocal; atom2++) {
if (!(mask[atom2] & groupbit)) continue;
if (molecular == 1) nd = num_dihedral[atom2];
else {
if (molindex[atom2] < 0) continue;
imol = molindex[atom2];
iatom = molatom[atom2];
nd = onemols[imol]->num_dihedral[iatom];
}
for (i = 0; i < nd; i++) {
if (molecular == 1) {
if (tag[atom2] != dihedral_atom2[atom2][i]) continue;
atom1 = atom->map(dihedral_atom1[atom2][i]);
atom3 = atom->map(dihedral_atom3[atom2][i]);
atom4 = atom->map(dihedral_atom4[atom2][i]);
} else {
if (tag[atom2] != onemols[imol]->dihedral_atom2[atom2][i]) continue;
tagprev = tag[atom2] - iatom - 1;
atom1 = atom->map(onemols[imol]->dihedral_atom1[atom2][i]+tagprev);
atom3 = atom->map(onemols[imol]->dihedral_atom3[atom2][i]+tagprev);
atom4 = atom->map(onemols[imol]->dihedral_atom4[atom2][i]+tagprev);
}
if (atom1 < 0 || !(mask[atom1] & groupbit)) continue;
if (atom3 < 0 || !(mask[atom3] & groupbit)) continue;
if (atom4 < 0 || !(mask[atom4] & groupbit)) continue;
if (flag) {
// phi calculation from dihedral style harmonic
if (pflag >= 0) {
vb1x = x[atom1][0] - x[atom2][0];
vb1y = x[atom1][1] - x[atom2][1];
vb1z = x[atom1][2] - x[atom2][2];
domain->minimum_image(vb1x,vb1y,vb1z);
vb2x = x[atom3][0] - x[atom2][0];
vb2y = x[atom3][1] - x[atom2][1];
vb2z = x[atom3][2] - x[atom2][2];
domain->minimum_image(vb2x,vb2y,vb2z);
vb2xm = -vb2x;
vb2ym = -vb2y;
vb2zm = -vb2z;
domain->minimum_image(vb2xm,vb2ym,vb2zm);
vb3x = x[atom4][0] - x[atom3][0];
vb3y = x[atom4][1] - x[atom3][1];
vb3z = x[atom4][2] - x[atom3][2];
domain->minimum_image(vb3x,vb3y,vb3z);
ax = vb1y*vb2zm - vb1z*vb2ym;
ay = vb1z*vb2xm - vb1x*vb2zm;
az = vb1x*vb2ym - vb1y*vb2xm;
bx = vb3y*vb2zm - vb3z*vb2ym;
by = vb3z*vb2xm - vb3x*vb2zm;
bz = vb3x*vb2ym - vb3y*vb2xm;
rasq = ax*ax + ay*ay + az*az;
rbsq = bx*bx + by*by + bz*bz;
rgsq = vb2xm*vb2xm + vb2ym*vb2ym + vb2zm*vb2zm;
rg = sqrt(rgsq);
ra2inv = rb2inv = 0.0;
if (rasq > 0) ra2inv = 1.0/rasq;
if (rbsq > 0) rb2inv = 1.0/rbsq;
rabinv = sqrt(ra2inv*rb2inv);
c = (ax*bx + ay*by + az*bz)*rabinv;
s = rg*rabinv*(ax*vb3x + ay*vb3y + az*vb3z);
if (c > 1.0) c = 1.0;
if (c < -1.0) c = -1.0;
pbuf[n] = 180.0*atan2(s,c)/MY_PI;
}
n += nvalues;
}
m++;
}
}
return m;
}
/* ---------------------------------------------------------------------- */
void ComputeDihedralLocal::reallocate(int n)
{
// grow vector or array and indices array
while (nmax < n) nmax += DELTA;
if (nvalues == 1) {
memory->destroy(vector);
memory->create(vector,nmax,"bond/local:vector");
vector_local = vector;
} else {
memory->destroy(array);
memory->create(array,nmax,nvalues,"bond/local:array");
array_local = array;
}
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeDihedralLocal::memory_usage()
{
double bytes = nmax*nvalues * sizeof(double);
return bytes;
}
diff --git a/src/compute_dipole_chunk.cpp b/src/compute_dipole_chunk.cpp
index cb618055f..4bdf23e27 100644
--- a/src/compute_dipole_chunk.cpp
+++ b/src/compute_dipole_chunk.cpp
@@ -1,296 +1,294 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "string.h"
#include "compute_dipole_chunk.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
#include "math_special.h"
using namespace LAMMPS_NS;
using namespace MathSpecial;
enum { MASSCENTER, GEOMCENTER };
/* ---------------------------------------------------------------------- */
ComputeDipoleChunk::ComputeDipoleChunk(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ idchunk(NULL), massproc(NULL), masstotal(NULL), chrgproc(NULL), chrgtotal(NULL), com(NULL),
+ comall(NULL), dipole(NULL), dipoleall(NULL)
{
if ((narg != 4) && (narg != 5)) error->all(FLERR,"Illegal compute dipole/chunk command");
array_flag = 1;
size_array_cols = 4;
size_array_rows = 0;
size_array_rows_variable = 1;
extarray = 0;
// ID of compute chunk/atom
int n = strlen(arg[3]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[3]);
usecenter = MASSCENTER;
if (narg == 5) {
if (strncmp(arg[4],"geom",4) == 0) usecenter = GEOMCENTER;
else if (strcmp(arg[4],"mass") == 0) usecenter = MASSCENTER;
else error->all(FLERR,"Illegal compute dipole/chunk command");
}
init();
// chunk-based data
nchunk = 1;
maxchunk = 0;
- massproc = masstotal = NULL;
- chrgproc = chrgtotal = NULL;
- com = comall = NULL;
- dipole = dipoleall = NULL;
allocate();
}
/* ---------------------------------------------------------------------- */
ComputeDipoleChunk::~ComputeDipoleChunk()
{
delete [] idchunk;
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(chrgproc);
memory->destroy(chrgtotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(dipole);
memory->destroy(dipoleall);
}
/* ---------------------------------------------------------------------- */
void ComputeDipoleChunk::init()
{
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for "
"compute dipole/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Compute dipole/chunk does not use chunk/atom compute");
}
/* ---------------------------------------------------------------------- */
void ComputeDipoleChunk::compute_array()
{
int i,index;
double massone;
double unwrap[3];
invoked_array = update->ntimestep;
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
int *ichunk = cchunk->ichunk;
if (nchunk > maxchunk) allocate();
size_array_rows = nchunk;
// zero local per-chunk values
for (int i = 0; i < nchunk; i++) {
massproc[i] = chrgproc[i] = 0.0;
com[i][0] = com[i][1] = com[i][2] = 0.0;
dipole[i][0] = dipole[i][1] = dipole[i][2] = dipole[i][3] = 0.0;
}
// compute COM for each chunk
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
double *q = atom->q;
double **mu = atom->mu;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (usecenter == MASSCENTER) {
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
} else massone = 1.0; // usecenter == GEOMCENTER
domain->unmap(x[i],image[i],unwrap);
massproc[index] += massone;
if (atom->q_flag) chrgproc[index] += atom->q[i];
com[index][0] += unwrap[0] * massone;
com[index][1] += unwrap[1] * massone;
com[index][2] += unwrap[2] * massone;
}
MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(chrgproc,chrgtotal,nchunk,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < nchunk; i++) {
if (masstotal[i] > 0.0) {
comall[i][0] /= masstotal[i];
comall[i][1] /= masstotal[i];
comall[i][2] /= masstotal[i];
}
}
// compute dipole for each chunk
for (i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
domain->unmap(x[i],image[i],unwrap);
if (atom->q_flag) {
dipole[index][0] += q[i]*unwrap[0];
dipole[index][1] += q[i]*unwrap[1];
dipole[index][2] += q[i]*unwrap[2];
}
if (atom->mu_flag) {
dipole[index][0] += mu[i][0];
dipole[index][1] += mu[i][1];
dipole[index][2] += mu[i][2];
}
}
}
MPI_Allreduce(&dipole[0][0],&dipoleall[0][0],4*nchunk,
MPI_DOUBLE,MPI_SUM,world);
for (i = 0; i < nchunk; i++) {
// correct for position dependence with charged chunks
dipoleall[i][0] -= chrgtotal[i]*comall[i][0];
dipoleall[i][1] -= chrgtotal[i]*comall[i][1];
dipoleall[i][2] -= chrgtotal[i]*comall[i][2];
// compute total dipole moment
dipoleall[i][3] = sqrt(square(dipoleall[i][0])
+ square(dipoleall[i][1])
+ square(dipoleall[i][2]));
}
}
/* ----------------------------------------------------------------------
lock methods: called by fix ave/time
these methods insure vector/array size is locked for Nfreq epoch
by passing lock info along to compute chunk/atom
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
increment lock counter
------------------------------------------------------------------------- */
void ComputeDipoleChunk::lock_enable()
{
cchunk->lockcount++;
}
/* ----------------------------------------------------------------------
decrement lock counter in compute chunk/atom, it if still exists
------------------------------------------------------------------------- */
void ComputeDipoleChunk::lock_disable()
{
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->lockcount--;
}
}
/* ----------------------------------------------------------------------
calculate and return # of chunks = length of vector/array
------------------------------------------------------------------------- */
int ComputeDipoleChunk::lock_length()
{
nchunk = cchunk->setup_chunks();
return nchunk;
}
/* ----------------------------------------------------------------------
set the lock from startstep to stopstep
------------------------------------------------------------------------- */
void ComputeDipoleChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
cchunk->lock(fixptr,startstep,stopstep);
}
/* ----------------------------------------------------------------------
unset the lock
------------------------------------------------------------------------- */
void ComputeDipoleChunk::unlock(Fix *fixptr)
{
cchunk->unlock(fixptr);
}
/* ----------------------------------------------------------------------
free and reallocate per-chunk arrays
------------------------------------------------------------------------- */
void ComputeDipoleChunk::allocate()
{
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(chrgproc);
memory->destroy(chrgtotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(dipole);
memory->destroy(dipoleall);
maxchunk = nchunk;
memory->create(massproc,maxchunk,"dipole/chunk:massproc");
memory->create(masstotal,maxchunk,"dipole/chunk:masstotal");
memory->create(chrgproc,maxchunk,"dipole/chunk:chrgproc");
memory->create(chrgtotal,maxchunk,"dipole/chunk:chrgtotal");
memory->create(com,maxchunk,3,"dipole/chunk:com");
memory->create(comall,maxchunk,3,"dipole/chunk:comall");
memory->create(dipole,maxchunk,4,"dipole/chunk:dipole");
memory->create(dipoleall,maxchunk,4,"dipole/chunk:dipoleall");
array = dipoleall;
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeDipoleChunk::memory_usage()
{
double bytes = (bigint) maxchunk * 2 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
bytes += (bigint) maxchunk * 2*4 * sizeof(double);
return bytes;
}
diff --git a/src/compute_displace_atom.cpp b/src/compute_displace_atom.cpp
index f274c32f5..03a56b2bc 100644
--- a/src/compute_displace_atom.cpp
+++ b/src/compute_displace_atom.cpp
@@ -1,194 +1,194 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include "compute_displace_atom.h"
#include "atom.h"
#include "update.h"
#include "group.h"
#include "domain.h"
#include "modify.h"
#include "fix.h"
#include "fix_store.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeDisplaceAtom::ComputeDisplaceAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ id_fix(NULL), displace(NULL)
{
if (narg != 3) error->all(FLERR,"Illegal compute displace/atom command");
peratom_flag = 1;
size_peratom_cols = 4;
create_attribute = 1;
// create a new fix STORE style
// id = compute-ID + COMPUTE_STORE, fix group = compute group
int n = strlen(id) + strlen("_COMPUTE_STORE") + 1;
id_fix = new char[n];
strcpy(id_fix,id);
strcat(id_fix,"_COMPUTE_STORE");
char **newarg = new char*[6];
newarg[0] = id_fix;
newarg[1] = group->names[igroup];
newarg[2] = (char *) "STORE";
newarg[3] = (char *) "peratom";
newarg[4] = (char *) "1";
newarg[5] = (char *) "3";
modify->add_fix(6,newarg);
fix = (FixStore *) modify->fix[modify->nfix-1];
delete [] newarg;
// calculate xu,yu,zu for fix store array
// skip if reset from restart file
if (fix->restart_reset) fix->restart_reset = 0;
else {
double **xoriginal = fix->astore;
double **x = atom->x;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) domain->unmap(x[i],image[i],xoriginal[i]);
else xoriginal[i][0] = xoriginal[i][1] = xoriginal[i][2] = 0.0;
}
// per-atom displacement array
nmax = 0;
- displace = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeDisplaceAtom::~ComputeDisplaceAtom()
{
// check nfix in case all fixes have already been deleted
if (modify->nfix) modify->delete_fix(id_fix);
delete [] id_fix;
memory->destroy(displace);
}
/* ---------------------------------------------------------------------- */
void ComputeDisplaceAtom::init()
{
// set fix which stores original atom coords
int ifix = modify->find_fix(id_fix);
if (ifix < 0) error->all(FLERR,"Could not find compute displace/atom fix ID");
fix = (FixStore *) modify->fix[ifix];
}
/* ---------------------------------------------------------------------- */
void ComputeDisplaceAtom::compute_peratom()
{
invoked_peratom = update->ntimestep;
// grow local displacement array if necessary
if (atom->nmax > nmax) {
memory->destroy(displace);
nmax = atom->nmax;
memory->create(displace,nmax,4,"displace/atom:displace");
array_atom = displace;
}
// dx,dy,dz = displacement of atom from original position
// original unwrapped position is stored by fix
// for triclinic, need to unwrap current atom coord via h matrix
double **xoriginal = fix->astore;
double **x = atom->x;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
double *h = domain->h;
double xprd = domain->xprd;
double yprd = domain->yprd;
double zprd = domain->zprd;
int xbox,ybox,zbox;
double dx,dy,dz;
if (domain->triclinic == 0) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
dx = x[i][0] + xbox*xprd - xoriginal[i][0];
dy = x[i][1] + ybox*yprd - xoriginal[i][1];
dz = x[i][2] + zbox*zprd - xoriginal[i][2];
displace[i][0] = dx;
displace[i][1] = dy;
displace[i][2] = dz;
displace[i][3] = sqrt(dx*dx + dy*dy + dz*dz);
} else displace[i][0] = displace[i][1] =
displace[i][2] = displace[i][3] = 0.0;
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
dx = x[i][0] + h[0]*xbox + h[5]*ybox + h[4]*zbox - xoriginal[i][0];
dy = x[i][1] + h[1]*ybox + h[3]*zbox - xoriginal[i][1];
dz = x[i][2] + h[2]*zbox - xoriginal[i][2];
displace[i][0] = dx;
displace[i][1] = dy;
displace[i][2] = dz;
displace[i][3] = sqrt(dx*dx + dy*dy + dz*dz);
} else displace[i][0] = displace[i][1] =
displace[i][2] = displace[i][3] = 0.0;
}
}
/* ----------------------------------------------------------------------
initialize one atom's storage values, called when atom is created
------------------------------------------------------------------------- */
void ComputeDisplaceAtom::set_arrays(int i)
{
double **xoriginal = fix->astore;
double **x = atom->x;
xoriginal[i][0] = x[i][0];
xoriginal[i][1] = x[i][1];
xoriginal[i][2] = x[i][2];
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputeDisplaceAtom::memory_usage()
{
double bytes = nmax*4 * sizeof(double);
return bytes;
}
diff --git a/src/compute_erotate_sphere_atom.cpp b/src/compute_erotate_sphere_atom.cpp
index ed6946e8c..b29c18c1e 100644
--- a/src/compute_erotate_sphere_atom.cpp
+++ b/src/compute_erotate_sphere_atom.cpp
@@ -1,110 +1,110 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_erotate_sphere_atom.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "comm.h"
#include "force.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
#define INERTIA 0.4 // moment of inertia prefactor for sphere
/* ---------------------------------------------------------------------- */
ComputeErotateSphereAtom::
ComputeErotateSphereAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ erot(NULL)
{
if (narg != 3)
error->all(FLERR,"Illegal compute erotate/sphere//atom command");
peratom_flag = 1;
size_peratom_cols = 0;
// error check
if (!atom->sphere_flag)
error->all(FLERR,"Compute erotate/sphere/atom requires atom style sphere");
nmax = 0;
- erot = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeErotateSphereAtom::~ComputeErotateSphereAtom()
{
memory->destroy(erot);
}
/* ---------------------------------------------------------------------- */
void ComputeErotateSphereAtom::init()
{
int count = 0;
for (int i = 0; i < modify->ncompute; i++)
if (strcmp(modify->compute[i]->style,"erotate/sphere/atom") == 0) count++;
if (count > 1 && comm->me == 0)
error->warning(FLERR,"More than one compute erotate/sphere/atom");
pfactor = 0.5 * force->mvv2e * INERTIA;
}
/* ---------------------------------------------------------------------- */
void ComputeErotateSphereAtom::compute_peratom()
{
invoked_peratom = update->ntimestep;
// grow erot array if necessary
if (atom->nmax > nmax) {
memory->destroy(erot);
nmax = atom->nmax;
memory->create(erot,nmax,"erotate/sphere/atom:erot");
vector_atom = erot;
}
// compute rotational kinetic energy for each atom in group
// point particles will have erot = 0.0, due to radius = 0.0
double **omega = atom->omega;
double *radius = atom->radius;
double *rmass = atom->rmass;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
erot[i] = (omega[i][0]*omega[i][0] + omega[i][1]*omega[i][1] +
omega[i][2]*omega[i][2]) * radius[i]*radius[i]*rmass[i];
erot[i] *= pfactor;
} else erot[i] = 0.0;
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputeErotateSphereAtom::memory_usage()
{
double bytes = nmax * sizeof(double);
return bytes;
}
diff --git a/src/compute_group_group.cpp b/src/compute_group_group.cpp
index 741d4a667..4b5e6ad05 100644
--- a/src/compute_group_group.cpp
+++ b/src/compute_group_group.cpp
@@ -1,401 +1,402 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Naveen Michaud-Agrawal (Johns Hopkins U)
K-space terms added by Stan Moore (BYU)
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include "compute_group_group.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "pair.h"
#include "neighbor.h"
#include "neigh_request.h"
#include "neigh_list.h"
#include "group.h"
#include "kspace.h"
#include "error.h"
#include <math.h>
#include "comm.h"
#include "domain.h"
#include "math_const.h"
using namespace LAMMPS_NS;
using namespace MathConst;
#define SMALL 0.00001
/* ---------------------------------------------------------------------- */
ComputeGroupGroup::ComputeGroupGroup(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ group2(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute group/group command");
scalar_flag = vector_flag = 1;
size_vector = 3;
extscalar = 1;
extvector = 1;
int n = strlen(arg[3]) + 1;
group2 = new char[n];
strcpy(group2,arg[3]);
jgroup = group->find(group2);
if (jgroup == -1)
error->all(FLERR,"Compute group/group group ID does not exist");
jgroupbit = group->bitmask[jgroup];
pairflag = 1;
kspaceflag = 0;
boundaryflag = 1;
int iarg = 4;
while (iarg < narg) {
if (strcmp(arg[iarg],"pair") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute group/group command");
if (strcmp(arg[iarg+1],"yes") == 0) pairflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) pairflag = 0;
else error->all(FLERR,"Illegal compute group/group command");
iarg += 2;
} else if (strcmp(arg[iarg],"kspace") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute group/group command");
if (strcmp(arg[iarg+1],"yes") == 0) kspaceflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) kspaceflag = 0;
else error->all(FLERR,"Illegal compute group/group command");
iarg += 2;
} else if (strcmp(arg[iarg],"boundary") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute group/group command");
if (strcmp(arg[iarg+1],"yes") == 0) boundaryflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) boundaryflag = 0;
else error->all(FLERR,"Illegal compute group/group command");
iarg += 2;
} else error->all(FLERR,"Illegal compute group/group command");
}
vector = new double[3];
}
/* ---------------------------------------------------------------------- */
ComputeGroupGroup::~ComputeGroupGroup()
{
delete [] group2;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeGroupGroup::init()
{
// if non-hybrid, then error if single_enable = 0
// if hybrid, let hybrid determine if sub-style sets single_enable = 0
if (pairflag && force->pair == NULL)
error->all(FLERR,"No pair style defined for compute group/group");
if (force->pair_match("hybrid",0) == NULL && force->pair->single_enable == 0)
error->all(FLERR,"Pair style does not support compute group/group");
// error if Kspace style does not compute group/group interactions
if (kspaceflag && force->kspace == NULL)
error->all(FLERR,"No Kspace style defined for compute group/group");
if (kspaceflag && force->kspace->group_group_enable == 0)
error->all(FLERR,"Kspace style does not support compute group/group");
if (pairflag) {
pair = force->pair;
cutsq = force->pair->cutsq;
} else pair = NULL;
if (kspaceflag) kspace = force->kspace;
else kspace = NULL;
// compute Kspace correction terms
if (kspaceflag) {
kspace_correction();
if (fabs(e_correction) > SMALL && comm->me == 0) {
char str[128];
sprintf(str,"Both groups in compute group/group have a net charge; "
"the Kspace boundary correction to energy will be non-zero");
error->warning(FLERR,str);
}
}
// recheck that group 2 has not been deleted
jgroup = group->find(group2);
if (jgroup == -1)
error->all(FLERR,"Compute group/group group ID does not exist");
jgroupbit = group->bitmask[jgroup];
// need an occasional half neighbor list
if (pairflag) {
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->occasional = 1;
}
}
/* ---------------------------------------------------------------------- */
void ComputeGroupGroup::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
double ComputeGroupGroup::compute_scalar()
{
invoked_scalar = invoked_vector = update->ntimestep;
scalar = 0.0;
vector[0] = vector[1] = vector[2] = 0.0;
if (pairflag) pair_contribution();
if (kspaceflag) kspace_contribution();
return scalar;
}
/* ---------------------------------------------------------------------- */
void ComputeGroupGroup::compute_vector()
{
invoked_scalar = invoked_vector = update->ntimestep;
scalar = 0.0;
vector[0] = vector[1] = vector[2] = 0.0;
if (pairflag) pair_contribution();
if (kspaceflag) kspace_contribution();
}
/* ---------------------------------------------------------------------- */
void ComputeGroupGroup::pair_contribution()
{
int i,j,ii,jj,inum,jnum,itype,jtype;
double xtmp,ytmp,ztmp,delx,dely,delz;
double rsq,eng,fpair,factor_coul,factor_lj;
int *ilist,*jlist,*numneigh,**firstneigh;
double **x = atom->x;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *special_coul = force->special_coul;
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
// invoke half neighbor list (will copy or build if necessary)
neighbor->build_one(list);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// loop over neighbors of my atoms
// skip if I,J are not in 2 groups
double one[4];
one[0] = one[1] = one[2] = one[3] = 0.0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
// skip if atom I is not in either group
if (!(mask[i] & groupbit || mask[i] & jgroupbit)) continue;
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
itype = type[i];
jlist = firstneigh[i];
jnum = numneigh[i];
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
factor_lj = special_lj[sbmask(j)];
factor_coul = special_coul[sbmask(j)];
j &= NEIGHMASK;
if (!(mask[j] & groupbit || mask[j] & jgroupbit)) continue; // skip if atom J is not in either group
int ij_flag = 0;
int ji_flag = 0;
if (mask[i] & groupbit && mask[j] & jgroupbit) ij_flag = 1;
if (mask[j] & groupbit && mask[i] & jgroupbit) ji_flag = 1;
if (!ij_flag && !ji_flag) continue; // skip if atoms I,J are only in the same group
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
jtype = type[j];
if (rsq < cutsq[itype][jtype]) {
eng = pair->single(i,j,itype,jtype,rsq,factor_coul,factor_lj,fpair);
// energy only computed once so tally full amount
// force tally is jgroup acting on igroup
if (newton_pair || j < nlocal) {
one[0] += eng;
if (ij_flag) {
one[1] += delx*fpair;
one[2] += dely*fpair;
one[3] += delz*fpair;
}
if (ji_flag) {
one[1] -= delx*fpair;
one[2] -= dely*fpair;
one[3] -= delz*fpair;
}
// energy computed twice so tally half amount
// only tally force if I own igroup atom
} else {
one[0] += 0.5*eng;
if (ij_flag) {
one[1] += delx*fpair;
one[2] += dely*fpair;
one[3] += delz*fpair;
}
}
}
}
}
double all[4];
MPI_Allreduce(one,all,4,MPI_DOUBLE,MPI_SUM,world);
scalar += all[0];
vector[0] += all[1]; vector[1] += all[2]; vector[2] += all[3];
}
/* ---------------------------------------------------------------------- */
void ComputeGroupGroup::kspace_contribution()
{
double *vector_kspace = force->kspace->f2group;
force->kspace->compute_group_group(groupbit,jgroupbit,0);
scalar += 2.0*force->kspace->e2group;
vector[0] += vector_kspace[0];
vector[1] += vector_kspace[1];
vector[2] += vector_kspace[2];
// subtract extra A <--> A Kspace interaction so energy matches
// real-space style of compute group-group
// add extra Kspace term to energy
force->kspace->compute_group_group(groupbit,jgroupbit,1);
scalar -= force->kspace->e2group;
// self energy correction term
scalar -= e_self;
// k=0 boundary correction term
if (boundaryflag) {
double xprd = domain->xprd;
double yprd = domain->yprd;
double zprd = domain->zprd;
// adjustment of z dimension for 2d slab Ewald
// 3d Ewald just uses zprd since slab_volfactor = 1.0
double volume = xprd*yprd*zprd*force->kspace->slab_volfactor;
scalar -= e_correction/volume;
}
}
/* ---------------------------------------------------------------------- */
void ComputeGroupGroup::kspace_correction()
{
// total charge of groups A & B, needed for correction term
double qsqsum_group,qsum_A,qsum_B;
qsqsum_group = qsum_A = qsum_B = 0.0;
double *q = atom->q;
int *mask = atom->mask;
int groupbit_A = groupbit;
int groupbit_B = jgroupbit;
for (int i = 0; i < atom->nlocal; i++) {
if ((mask[i] & groupbit_A) && (mask[i] & groupbit_B))
qsqsum_group += q[i]*q[i];
if (mask[i] & groupbit_A) qsum_A += q[i];
if (mask[i] & groupbit_B) qsum_B += q[i];
}
double tmp;
MPI_Allreduce(&qsqsum_group,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
qsqsum_group = tmp;
MPI_Allreduce(&qsum_A,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
qsum_A = tmp;
MPI_Allreduce(&qsum_B,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
qsum_B = tmp;
double g_ewald = force->kspace->g_ewald;
double scale = 1.0;
const double qscale = force->qqrd2e * scale;
// self-energy correction
e_self = qscale * g_ewald*qsqsum_group/MY_PIS;
e_correction = 2.0*qsum_A*qsum_B;
// subtract extra AA terms
qsum_A = qsum_B = 0.0;
for (int i = 0; i < atom->nlocal; i++) {
if (!((mask[i] & groupbit_A) && (mask[i] & groupbit_B)))
continue;
if (mask[i] & groupbit_A) qsum_A += q[i];
if (mask[i] & groupbit_B) qsum_B += q[i];
}
MPI_Allreduce(&qsum_A,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
qsum_A = tmp;
MPI_Allreduce(&qsum_B,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
qsum_B = tmp;
// k=0 energy correction term (still need to divide by volume above)
e_correction -= qsum_A*qsum_B;
e_correction *= qscale * MY_PI2 / (g_ewald*g_ewald);
}
diff --git a/src/compute_gyration_chunk.cpp b/src/compute_gyration_chunk.cpp
index 58fe33bc3..f7e774566 100644
--- a/src/compute_gyration_chunk.cpp
+++ b/src/compute_gyration_chunk.cpp
@@ -1,365 +1,363 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include "compute_gyration_chunk.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeGyrationChunk::ComputeGyrationChunk(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ idchunk(NULL), massproc(NULL), masstotal(NULL), com(NULL), comall(NULL), rg(NULL),
+ rgall(NULL), rgt(NULL), rgtall(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute gyration/chunk command");
// ID of compute chunk/atom
int n = strlen(arg[3]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[3]);
init();
// optional args
tensor = 0;
int iarg = 4;
while (iarg < narg) {
if (strcmp(arg[iarg],"tensor") == 0) {
tensor = 1;
iarg++;
} else error->all(FLERR,"Illegal compute gyration/chunk command");
}
if (tensor) {
array_flag = 1;
size_array_cols = 6;
size_array_rows = 0;
size_array_rows_variable = 1;
extarray = 0;
} else {
vector_flag = 1;
size_vector = 0;
size_vector_variable = 1;
extvector = 0;
}
// chunk-based data
nchunk = 1;
maxchunk = 0;
- massproc = masstotal = NULL;
- com = comall = NULL;
- rg = rgall = NULL;
- rgt = rgtall = NULL;
allocate();
}
/* ---------------------------------------------------------------------- */
ComputeGyrationChunk::~ComputeGyrationChunk()
{
delete [] idchunk;
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(rg);
memory->destroy(rgall);
memory->destroy(rgt);
memory->destroy(rgtall);
}
/* ---------------------------------------------------------------------- */
void ComputeGyrationChunk::init()
{
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for "
"compute gyration/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Compute gyration/chunk does not use chunk/atom compute");
}
/* ---------------------------------------------------------------------- */
void ComputeGyrationChunk::compute_vector()
{
int i,index;
double dx,dy,dz,massone;
double unwrap[3];
invoked_array = update->ntimestep;
com_chunk();
int *ichunk = cchunk->ichunk;
for (i = 0; i < nchunk; i++) rg[i] = 0.0;
// compute Rg for each chunk
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - comall[index][0];
dy = unwrap[1] - comall[index][1];
dz = unwrap[2] - comall[index][2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
rg[index] += (dx*dx + dy*dy + dz*dz) * massone;
}
MPI_Allreduce(rg,rgall,nchunk,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < nchunk; i++)
if (masstotal[i] > 0.0)
rgall[i] = sqrt(rgall[i]/masstotal[i]);
}
/* ---------------------------------------------------------------------- */
void ComputeGyrationChunk::compute_array()
{
int i,j,index;
double dx,dy,dz,massone;
double unwrap[3];
invoked_array = update->ntimestep;
com_chunk();
int *ichunk = cchunk->ichunk;
for (i = 0; i < nchunk; i++)
for (j = 0; j < 6; j++) rgt[i][j] = 0.0;
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - comall[index][0];
dy = unwrap[1] - comall[index][1];
dz = unwrap[2] - comall[index][2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
rgt[index][0] += dx*dx * massone;
rgt[index][1] += dy*dy * massone;
rgt[index][2] += dz*dz * massone;
rgt[index][3] += dx*dy * massone;
rgt[index][4] += dx*dz * massone;
rgt[index][5] += dy*dz * massone;
}
if (nchunk)
MPI_Allreduce(&rgt[0][0],&rgtall[0][0],nchunk*6,MPI_DOUBLE,MPI_SUM,world);
for (i = 0; i < nchunk; i++) {
if (masstotal[i] > 0.0) {
for (j = 0; j < 6; j++)
rgtall[i][j] = rgtall[i][j]/masstotal[i];
}
}
}
/* ----------------------------------------------------------------------
calculate per-chunk COM, used by both scalar and tensor
------------------------------------------------------------------------- */
void ComputeGyrationChunk::com_chunk()
{
int index;
double massone;
double unwrap[3];
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
int *ichunk = cchunk->ichunk;
if (nchunk > maxchunk) allocate();
if (tensor) size_array_rows = nchunk;
else size_vector = nchunk;
// zero local per-chunk values
for (int i = 0; i < nchunk; i++) {
massproc[i] = 0.0;
com[i][0] = com[i][1] = com[i][2] = 0.0;
}
// compute COM for each chunk
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
domain->unmap(x[i],image[i],unwrap);
massproc[index] += massone;
com[index][0] += unwrap[0] * massone;
com[index][1] += unwrap[1] * massone;
com[index][2] += unwrap[2] * massone;
}
MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < nchunk; i++) {
if (masstotal[i] > 0.0) {
comall[i][0] /= masstotal[i];
comall[i][1] /= masstotal[i];
comall[i][2] /= masstotal[i];
}
}
}
/* ----------------------------------------------------------------------
lock methods: called by fix ave/time
these methods insure vector/array size is locked for Nfreq epoch
by passing lock info along to compute chunk/atom
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
increment lock counter
------------------------------------------------------------------------- */
void ComputeGyrationChunk::lock_enable()
{
cchunk->lockcount++;
}
/* ----------------------------------------------------------------------
decrement lock counter in compute chunk/atom, it if still exists
------------------------------------------------------------------------- */
void ComputeGyrationChunk::lock_disable()
{
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->lockcount--;
}
}
/* ----------------------------------------------------------------------
calculate and return # of chunks = length of vector/array
------------------------------------------------------------------------- */
int ComputeGyrationChunk::lock_length()
{
nchunk = cchunk->setup_chunks();
return nchunk;
}
/* ----------------------------------------------------------------------
set the lock from startstep to stopstep
------------------------------------------------------------------------- */
void ComputeGyrationChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
cchunk->lock(fixptr,startstep,stopstep);
}
/* ----------------------------------------------------------------------
unset the lock
------------------------------------------------------------------------- */
void ComputeGyrationChunk::unlock(Fix *fixptr)
{
cchunk->unlock(fixptr);
}
/* ----------------------------------------------------------------------
free and reallocate per-chunk arrays
------------------------------------------------------------------------- */
void ComputeGyrationChunk::allocate()
{
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(rg);
memory->destroy(rgall);
memory->destroy(rgt);
memory->destroy(rgtall);
maxchunk = nchunk;
memory->create(massproc,maxchunk,"gyration/chunk:massproc");
memory->create(masstotal,maxchunk,"gyration/chunk:masstotal");
memory->create(com,maxchunk,3,"gyration/chunk:com");
memory->create(comall,maxchunk,3,"gyration/chunk:comall");
if (tensor) {
memory->create(rgt,maxchunk,6,"gyration/chunk:rgt");
memory->create(rgtall,maxchunk,6,"gyration/chunk:rgtall");
array = rgtall;
} else {
memory->create(rg,maxchunk,"gyration/chunk:rg");
memory->create(rgall,maxchunk,"gyration/chunk:rgall");
vector = rgall;
}
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeGyrationChunk::memory_usage()
{
double bytes = (bigint) maxchunk * 2 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
if (tensor) bytes += (bigint) maxchunk * 2*6 * sizeof(double);
else bytes += (bigint) maxchunk * 2 * sizeof(double);
return bytes;
}
diff --git a/src/compute_heat_flux.cpp b/src/compute_heat_flux.cpp
index 33e7f7a44..108691aec 100644
--- a/src/compute_heat_flux.cpp
+++ b/src/compute_heat_flux.cpp
@@ -1,168 +1,169 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: German Samolyuk (ORNL) and
Mario Pinto (Computational Research Lab, Pune, India)
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include "compute_heat_flux.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "force.h"
#include "group.h"
#include "error.h"
using namespace LAMMPS_NS;
#define INVOKED_PERATOM 8
/* ---------------------------------------------------------------------- */
ComputeHeatFlux::ComputeHeatFlux(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ id_ke(NULL), id_pe(NULL), id_stress(NULL)
{
if (narg != 6) error->all(FLERR,"Illegal compute heat/flux command");
vector_flag = 1;
size_vector = 6;
extvector = 1;
// store ke/atom, pe/atom, stress/atom IDs used by heat flux computation
// insure they are valid for these computations
int n = strlen(arg[3]) + 1;
id_ke = new char[n];
strcpy(id_ke,arg[3]);
n = strlen(arg[4]) + 1;
id_pe = new char[n];
strcpy(id_pe,arg[4]);
n = strlen(arg[5]) + 1;
id_stress = new char[n];
strcpy(id_stress,arg[5]);
int ike = modify->find_compute(id_ke);
int ipe = modify->find_compute(id_pe);
int istress = modify->find_compute(id_stress);
if (ike < 0 || ipe < 0 || istress < 0)
error->all(FLERR,"Could not find compute heat/flux compute ID");
if (strcmp(modify->compute[ike]->style,"ke/atom") != 0)
error->all(FLERR,"Compute heat/flux compute ID does not compute ke/atom");
if (modify->compute[ipe]->peatomflag == 0)
error->all(FLERR,"Compute heat/flux compute ID does not compute pe/atom");
if (modify->compute[istress]->pressatomflag == 0)
error->all(FLERR,
"Compute heat/flux compute ID does not compute stress/atom");
vector = new double[6];
}
/* ---------------------------------------------------------------------- */
ComputeHeatFlux::~ComputeHeatFlux()
{
delete [] id_ke;
delete [] id_pe;
delete [] id_stress;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeHeatFlux::init()
{
// error checks
int ike = modify->find_compute(id_ke);
int ipe = modify->find_compute(id_pe);
int istress = modify->find_compute(id_stress);
if (ike < 0 || ipe < 0 || istress < 0)
error->all(FLERR,"Could not find compute heat/flux compute ID");
c_ke = modify->compute[ike];
c_pe = modify->compute[ipe];
c_stress = modify->compute[istress];
}
/* ---------------------------------------------------------------------- */
void ComputeHeatFlux::compute_vector()
{
invoked_vector = update->ntimestep;
// invoke 3 computes if they haven't been already
if (!(c_ke->invoked_flag & INVOKED_PERATOM)) {
c_ke->compute_peratom();
c_ke->invoked_flag |= INVOKED_PERATOM;
}
if (!(c_pe->invoked_flag & INVOKED_PERATOM)) {
c_pe->compute_peratom();
c_pe->invoked_flag |= INVOKED_PERATOM;
}
if (!(c_stress->invoked_flag & INVOKED_PERATOM)) {
c_stress->compute_peratom();
c_stress->invoked_flag |= INVOKED_PERATOM;
}
// heat flux vector = jc[3] + jv[3]
// jc[3] = convective portion of heat flux = sum_i (ke_i + pe_i) v_i[3]
// jv[3] = virial portion of heat flux = sum_i (stress_tensor_i . v_i[3])
// normalization by volume is not included
double *ke = c_ke->vector_atom;
double *pe = c_pe->vector_atom;
double **stress = c_stress->array_atom;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double jc[3] = {0.0,0.0,0.0};
double jv[3] = {0.0,0.0,0.0};
double eng;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
eng = pe[i] + ke[i];
jc[0] += eng*v[i][0];
jc[1] += eng*v[i][1];
jc[2] += eng*v[i][2];
jv[0] -= stress[i][0]*v[i][0] + stress[i][3]*v[i][1] +
stress[i][4]*v[i][2];
jv[1] -= stress[i][3]*v[i][0] + stress[i][1]*v[i][1] +
stress[i][5]*v[i][2];
jv[2] -= stress[i][4]*v[i][0] + stress[i][5]*v[i][1] +
stress[i][2]*v[i][2];
}
}
// convert jv from stress*volume to energy units via nktv2p factor
double nktv2p = force->nktv2p;
jv[0] /= nktv2p;
jv[1] /= nktv2p;
jv[2] /= nktv2p;
// sum across all procs
// 1st 3 terms are total heat flux
// 2nd 3 terms are just conductive portion
double data[6] = {jc[0]+jv[0],jc[1]+jv[1],jc[2]+jv[2],jc[0],jc[1],jc[2]};
MPI_Allreduce(data,vector,6,MPI_DOUBLE,MPI_SUM,world);
}
diff --git a/src/compute_hexorder_atom.cpp b/src/compute_hexorder_atom.cpp
index cf9bd6d09..93b84080b 100644
--- a/src/compute_hexorder_atom.cpp
+++ b/src/compute_hexorder_atom.cpp
@@ -1,346 +1,344 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Aidan Thompson (SNL)
------------------------------------------------------------------------- */
#include <complex>
#include <string.h>
#include <stdlib.h>
#include "compute_hexorder_atom.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "force.h"
#include "pair.h"
#include "comm.h"
#include "memory.h"
#include "error.h"
#include "math_const.h"
#ifdef DBL_EPSILON
#define MY_EPSILON (10.0*DBL_EPSILON)
#else
#define MY_EPSILON (10.0*2.220446049250313e-16)
#endif
using namespace LAMMPS_NS;
using namespace MathConst;
/* ---------------------------------------------------------------------- */
ComputeHexOrderAtom::ComputeHexOrderAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ distsq(NULL), nearest(NULL), qnarray(NULL)
{
if (narg < 3 ) error->all(FLERR,"Illegal compute hexorder/atom command");
ndegree = 6;
nnn = 6;
cutsq = 0.0;
// process optional args
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"degree") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute hexorder/atom command");
ndegree = force->numeric(FLERR,arg[iarg+1]);
if (ndegree < 0)
error->all(FLERR,"Illegal compute hexorder/atom command");
iarg += 2;
} else if (strcmp(arg[iarg],"nnn") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute hexorder/atom command");
if (strcmp(arg[iarg+1],"NULL") == 0)
nnn = 0;
else {
nnn = force->numeric(FLERR,arg[iarg+1]);
if (nnn < 0)
error->all(FLERR,"Illegal compute hexorder/atom command");
}
iarg += 2;
} else if (strcmp(arg[iarg],"cutoff") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute hexorder/atom command");
double cutoff = force->numeric(FLERR,arg[iarg+1]);
if (cutoff <= 0.0)
error->all(FLERR,"Illegal compute hexorder/atom command");
cutsq = cutoff*cutoff;
iarg += 2;
} else error->all(FLERR,"Illegal compute hexorder/atom command");
}
ncol = 2;
peratom_flag = 1;
size_peratom_cols = ncol;
nmax = 0;
- qnarray = NULL;
maxneigh = 0;
- distsq = NULL;
- nearest = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeHexOrderAtom::~ComputeHexOrderAtom()
{
memory->destroy(qnarray);
memory->destroy(distsq);
memory->destroy(nearest);
}
/* ---------------------------------------------------------------------- */
void ComputeHexOrderAtom::init()
{
if (force->pair == NULL)
error->all(FLERR,"Compute hexorder/atom requires a pair style be defined");
if (cutsq == 0.0) cutsq = force->pair->cutforce * force->pair->cutforce;
else if (sqrt(cutsq) > force->pair->cutforce)
error->all(FLERR,
"Compute hexorder/atom cutoff is longer than pairwise cutoff");
// need an occasional full neighbor list
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->half = 0;
neighbor->requests[irequest]->full = 1;
neighbor->requests[irequest]->occasional = 1;
int count = 0;
for (int i = 0; i < modify->ncompute; i++)
if (strcmp(modify->compute[i]->style,"hexorder/atom") == 0) count++;
if (count > 1 && comm->me == 0)
error->warning(FLERR,"More than one compute hexorder/atom");
}
/* ---------------------------------------------------------------------- */
void ComputeHexOrderAtom::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void ComputeHexOrderAtom::compute_peratom()
{
int i,j,ii,jj,inum,jnum;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
int *ilist,*jlist,*numneigh,**firstneigh;
invoked_peratom = update->ntimestep;
// grow order parameter array if necessary
if (atom->nmax > nmax) {
memory->destroy(qnarray);
nmax = atom->nmax;
memory->create(qnarray,nmax,ncol,"hexorder/atom:qnarray");
array_atom = qnarray;
}
// invoke full neighbor list (will copy or build if necessary)
neighbor->build_one(list);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// compute order parameter for each atom in group
// use full neighbor list to count atoms less than cutoff
double **x = atom->x;
int *mask = atom->mask;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
double* qn = qnarray[i];
if (mask[i] & groupbit) {
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
jlist = firstneigh[i];
jnum = numneigh[i];
// insure distsq and nearest arrays are long enough
if (jnum > maxneigh) {
memory->destroy(distsq);
memory->destroy(nearest);
maxneigh = jnum;
memory->create(distsq,maxneigh,"hexorder/atom:distsq");
memory->create(nearest,maxneigh,"hexorder/atom:nearest");
}
// loop over list of all neighbors within force cutoff
// distsq[] = distance sq to each
// nearest[] = atom indices of neighbors
int ncount = 0;
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq < cutsq) {
distsq[ncount] = rsq;
nearest[ncount++] = j;
}
}
// if not nnn neighbors, order parameter = 0;
if (ncount < nnn) {
qn[0] = qn[1] = 0.0;
continue;
}
// if nnn > 0, use only nearest nnn neighbors
if (nnn > 0) {
select2(nnn,ncount,distsq,nearest);
ncount = nnn;
}
double usum = 0.0;
double vsum = 0.0;
for (jj = 0; jj < ncount; jj++) {
j = nearest[jj];
j &= NEIGHMASK;
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
double u, v;
calc_qn_complex(delx, dely, u, v);
usum += u;
vsum += v;
}
qn[0] = usum/nnn;
qn[1] = vsum/nnn;
}
}
}
// calculate order parameter using std::complex::pow function
inline void ComputeHexOrderAtom::calc_qn_complex(double delx, double dely, double &u, double &v) {
double rinv = 1.0/sqrt(delx*delx+dely*dely);
double x = delx*rinv;
double y = dely*rinv;
std::complex<double> z(x, y);
std::complex<double> zn = pow(z, nnn);
u = real(zn);
v = imag(zn);
}
// calculate order parameter using trig functions
// this is usually slower, but can be used if <complex> not available
inline void ComputeHexOrderAtom::calc_qn_trig(double delx, double dely, double &u, double &v) {
double ntheta;
if(fabs(delx) <= MY_EPSILON) {
if(dely > 0.0) ntheta = nnn * MY_PI / 2.0;
else ntheta = nnn * 3.0 * MY_PI / 2.0;
} else ntheta = nnn * atan(dely / delx);
u = cos(ntheta);
v = sin(ntheta);
}
/* ----------------------------------------------------------------------
select2 routine from Numerical Recipes (slightly modified)
find k smallest values in array of length n
sort auxiliary array at same time
------------------------------------------------------------------------- */
#define SWAP(a,b) tmp = a; a = b; b = tmp;
#define ISWAP(a,b) itmp = a; a = b; b = itmp;
/* ---------------------------------------------------------------------- */
void ComputeHexOrderAtom::select2(int k, int n, double *arr, int *iarr)
{
int i,ir,j,l,mid,ia,itmp;
double a,tmp;
arr--;
iarr--;
l = 1;
ir = n;
for (;;) {
if (ir <= l+1) {
if (ir == l+1 && arr[ir] < arr[l]) {
SWAP(arr[l],arr[ir])
ISWAP(iarr[l],iarr[ir])
}
return;
} else {
mid=(l+ir) >> 1;
SWAP(arr[mid],arr[l+1])
ISWAP(iarr[mid],iarr[l+1])
if (arr[l] > arr[ir]) {
SWAP(arr[l],arr[ir])
ISWAP(iarr[l],iarr[ir])
}
if (arr[l+1] > arr[ir]) {
SWAP(arr[l+1],arr[ir])
ISWAP(iarr[l+1],iarr[ir])
}
if (arr[l] > arr[l+1]) {
SWAP(arr[l],arr[l+1])
ISWAP(iarr[l],iarr[l+1])
}
i = l+1;
j = ir;
a = arr[l+1];
ia = iarr[l+1];
for (;;) {
do i++; while (arr[i] < a);
do j--; while (arr[j] > a);
if (j < i) break;
SWAP(arr[i],arr[j])
ISWAP(iarr[i],iarr[j])
}
arr[l+1] = arr[j];
arr[j] = a;
iarr[l+1] = iarr[j];
iarr[j] = ia;
if (j >= k) ir = j-1;
if (j <= k) l = i;
}
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputeHexOrderAtom::memory_usage()
{
double bytes = ncol*nmax * sizeof(double);
bytes += maxneigh * sizeof(double);
bytes += maxneigh * sizeof(int);
return bytes;
}
diff --git a/src/compute_improper.cpp b/src/compute_improper.cpp
index 961ddb2c1..32c5811af 100644
--- a/src/compute_improper.cpp
+++ b/src/compute_improper.cpp
@@ -1,82 +1,83 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include "compute_improper.h"
#include "update.h"
#include "force.h"
#include "improper_hybrid.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeImproper::ComputeImproper(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ emine(NULL)
{
if (narg != 3) error->all(FLERR,"Illegal compute improper command");
vector_flag = 1;
extvector = 1;
peflag = 1;
timeflag = 1;
// check if improper style hybrid exists
improper = (ImproperHybrid *) force->improper_match("hybrid");
if (!improper)
error->all(FLERR,
"Improper style for compute improper command is not hybrid");
size_vector = nsub = improper->nstyles;
emine = new double[nsub];
vector = new double[nsub];
}
/* ---------------------------------------------------------------------- */
ComputeImproper::~ComputeImproper()
{
delete [] emine;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeImproper::init()
{
// recheck improper style in case it has been changed
improper = (ImproperHybrid *) force->improper_match("hybrid");
if (!improper)
error->all(FLERR,
"Improper style for compute improper command is not hybrid");
if (improper->nstyles != nsub)
error->all(FLERR,"Improper style for compute improper command has changed");
}
/* ---------------------------------------------------------------------- */
void ComputeImproper::compute_vector()
{
invoked_vector = update->ntimestep;
if (update->eflag_global != invoked_vector)
error->all(FLERR,"Energy was not tallied on needed timestep");
for (int i = 0; i < nsub; i++)
emine[i] = improper->styles[i]->energy;
MPI_Allreduce(emine,vector,nsub,MPI_DOUBLE,MPI_SUM,world);
}
diff --git a/src/compute_improper_local.cpp b/src/compute_improper_local.cpp
index 3c0af24a1..b9d69dc5b 100644
--- a/src/compute_improper_local.cpp
+++ b/src/compute_improper_local.cpp
@@ -1,256 +1,255 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include "compute_improper_local.h"
#include "atom.h"
#include "atom_vec.h"
#include "molecule.h"
#include "update.h"
#include "domain.h"
#include "force.h"
#include "improper.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace MathConst;
#define DELTA 10000
#define SMALL 0.001
/* ---------------------------------------------------------------------- */
ComputeImproperLocal::ComputeImproperLocal(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ vector(NULL), array(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute improper/local command");
if (atom->avec->impropers_allow == 0)
error->all(FLERR,
"Compute improper/local used when impropers are not allowed");
local_flag = 1;
nvalues = narg - 3;
if (nvalues == 1) size_local_cols = 0;
else size_local_cols = nvalues;
cflag = -1;
nvalues = 0;
for (int iarg = 3; iarg < narg; iarg++) {
if (strcmp(arg[iarg],"chi") == 0) cflag = nvalues++;
else error->all(FLERR,"Invalid keyword in compute improper/local command");
}
nmax = 0;
- vector = NULL;
- array = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeImproperLocal::~ComputeImproperLocal()
{
memory->destroy(vector);
memory->destroy(array);
}
/* ---------------------------------------------------------------------- */
void ComputeImproperLocal::init()
{
if (force->improper == NULL)
error->all(FLERR,"No improper style is defined for compute improper/local");
// do initial memory allocation so that memory_usage() is correct
ncount = compute_impropers(0);
if (ncount > nmax) reallocate(ncount);
size_local_rows = ncount;
}
/* ---------------------------------------------------------------------- */
void ComputeImproperLocal::compute_local()
{
invoked_local = update->ntimestep;
// count local entries and compute improper info
ncount = compute_impropers(0);
if (ncount > nmax) reallocate(ncount);
size_local_rows = ncount;
ncount = compute_impropers(1);
}
/* ----------------------------------------------------------------------
count impropers on this proc
only count if 2nd atom is the one storing the improper
all atoms in interaction must be in group
all atoms in interaction must be known to proc
if flag is set, compute requested info about improper
------------------------------------------------------------------------- */
int ComputeImproperLocal::compute_impropers(int flag)
{
int i,m,n,ni,atom1,atom2,atom3,atom4,imol,iatom;
tagint tagprev;
double vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z;
double ss1,ss2,ss3,r1,r2,r3,c0,c1,c2,s1,s2;
double s12,c;
double *cbuf;
double **x = atom->x;
tagint *tag = atom->tag;
int *num_improper = atom->num_improper;
tagint **improper_atom1 = atom->improper_atom1;
tagint **improper_atom2 = atom->improper_atom2;
tagint **improper_atom3 = atom->improper_atom3;
tagint **improper_atom4 = atom->improper_atom4;
int *mask = atom->mask;
int *molindex = atom->molindex;
int *molatom = atom->molatom;
Molecule **onemols = atom->avec->onemols;
int nlocal = atom->nlocal;
int molecular = atom->molecular;
if (flag) {
if (nvalues == 1) {
if (cflag >= 0) cbuf = vector;
} else {
if (cflag >= 0 && array) cbuf = &array[0][cflag];
else cbuf = NULL;
}
}
m = n = 0;
for (atom2 = 0; atom2 < nlocal; atom2++) {
if (!(mask[atom2] & groupbit)) continue;
if (molecular == 1) ni = num_improper[atom2];
else {
if (molindex[atom2] < 0) continue;
imol = molindex[atom2];
iatom = molatom[atom2];
ni = onemols[imol]->num_improper[iatom];
}
for (i = 0; i < ni; i++) {
if (molecular == 1) {
if (tag[atom2] != improper_atom2[atom2][i]) continue;
atom1 = atom->map(improper_atom1[atom2][i]);
atom3 = atom->map(improper_atom3[atom2][i]);
atom4 = atom->map(improper_atom4[atom2][i]);
} else {
if (tag[atom2] != onemols[imol]->improper_atom2[atom2][i]) continue;
tagprev = tag[atom2] - iatom - 1;
atom1 = atom->map(onemols[imol]->improper_atom1[atom2][i]+tagprev);
atom3 = atom->map(onemols[imol]->improper_atom3[atom2][i]+tagprev);
atom4 = atom->map(onemols[imol]->improper_atom4[atom2][i]+tagprev);
}
if (atom1 < 0 || !(mask[atom1] & groupbit)) continue;
if (atom3 < 0 || !(mask[atom3] & groupbit)) continue;
if (atom4 < 0 || !(mask[atom4] & groupbit)) continue;
if (flag) {
// chi calculation from improper style harmonic
if (cflag >= 0) {
vb1x = x[atom1][0] - x[atom2][0];
vb1y = x[atom1][1] - x[atom2][1];
vb1z = x[atom1][2] - x[atom2][2];
domain->minimum_image(vb1x,vb1y,vb1z);
vb2x = x[atom3][0] - x[atom2][0];
vb2y = x[atom3][1] - x[atom2][1];
vb2z = x[atom3][2] - x[atom2][2];
domain->minimum_image(vb2x,vb2y,vb2z);
vb3x = x[atom4][0] - x[atom3][0];
vb3y = x[atom4][1] - x[atom3][1];
vb3z = x[atom4][2] - x[atom3][2];
domain->minimum_image(vb3x,vb3y,vb3z);
ss1 = 1.0 / (vb1x*vb1x + vb1y*vb1y + vb1z*vb1z);
ss2 = 1.0 / (vb2x*vb2x + vb2y*vb2y + vb2z*vb2z);
ss3 = 1.0 / (vb3x*vb3x + vb3y*vb3y + vb3z*vb3z);
r1 = sqrt(ss1);
r2 = sqrt(ss2);
r3 = sqrt(ss3);
c0 = (vb1x * vb3x + vb1y * vb3y + vb1z * vb3z) * r1 * r3;
c1 = (vb1x * vb2x + vb1y * vb2y + vb1z * vb2z) * r1 * r2;
c2 = -(vb3x * vb2x + vb3y * vb2y + vb3z * vb2z) * r3 * r2;
s1 = 1.0 - c1*c1;
if (s1 < SMALL) s1 = SMALL;
s1 = 1.0 / s1;
s2 = 1.0 - c2*c2;
if (s2 < SMALL) s2 = SMALL;
s2 = 1.0 / s2;
s12 = sqrt(s1*s2);
c = (c1*c2 + c0) * s12;
if (c > 1.0) c = 1.0;
if (c < -1.0) c = -1.0;
cbuf[n] = 180.0*acos(c)/MY_PI;
}
n += nvalues;
}
m++;
}
}
return m;
}
/* ---------------------------------------------------------------------- */
void ComputeImproperLocal::reallocate(int n)
{
// grow vector or array and indices array
while (nmax < n) nmax += DELTA;
if (nvalues == 1) {
memory->destroy(vector);
memory->create(vector,nmax,"bond/local:vector");
vector_local = vector;
} else {
memory->destroy(array);
memory->create(array,nmax,nvalues,"bond/local:array");
array_local = array;
}
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeImproperLocal::memory_usage()
{
double bytes = nmax*nvalues * sizeof(double);
return bytes;
}
diff --git a/src/compute_inertia_chunk.cpp b/src/compute_inertia_chunk.cpp
index c4e83fa4a..1e3c595ed 100644
--- a/src/compute_inertia_chunk.cpp
+++ b/src/compute_inertia_chunk.cpp
@@ -1,259 +1,258 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_inertia_chunk.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeInertiaChunk::ComputeInertiaChunk(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ idchunk(NULL), massproc(NULL), masstotal(NULL), com(NULL), comall(NULL),
+ inertia(NULL), inertiaall(NULL)
{
if (narg != 4) error->all(FLERR,"Illegal compute inertia/chunk command");
array_flag = 1;
size_array_cols = 6;
size_array_rows = 0;
size_array_rows_variable = 1;
extarray = 0;
// ID of compute chunk/atom
int n = strlen(arg[3]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[3]);
init();
// chunk-based data
nchunk = 1;
maxchunk = 0;
- massproc = masstotal = NULL;
- com = comall = NULL;
- inertia = inertiaall = NULL;
allocate();
}
/* ---------------------------------------------------------------------- */
ComputeInertiaChunk::~ComputeInertiaChunk()
{
delete [] idchunk;
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(inertia);
memory->destroy(inertiaall);
}
/* ---------------------------------------------------------------------- */
void ComputeInertiaChunk::init()
{
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for "
"compute inertia/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Compute inertia/chunk does not use chunk/atom compute");
}
/* ---------------------------------------------------------------------- */
void ComputeInertiaChunk::compute_array()
{
int i,j,index;
double dx,dy,dz,massone;
double unwrap[3];
invoked_array = update->ntimestep;
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
int *ichunk = cchunk->ichunk;
if (nchunk > maxchunk) allocate();
size_array_rows = nchunk;
// zero local per-chunk values
for (int i = 0; i < nchunk; i++) {
massproc[i] = 0.0;
com[i][0] = com[i][1] = com[i][2] = 0.0;
for (j = 0; j < 6; j++) inertia[i][j] = 0.0;
}
// compute COM for each chunk
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
domain->unmap(x[i],image[i],unwrap);
massproc[index] += massone;
com[index][0] += unwrap[0] * massone;
com[index][1] += unwrap[1] * massone;
com[index][2] += unwrap[2] * massone;
}
MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < nchunk; i++) {
if (masstotal[i] > 0.0) {
comall[i][0] /= masstotal[i];
comall[i][1] /= masstotal[i];
comall[i][2] /= masstotal[i];
}
}
// compute inertia tensor for each chunk
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - comall[index][0];
dy = unwrap[1] - comall[index][1];
dz = unwrap[2] - comall[index][2];
inertia[index][0] += massone * (dy*dy + dz*dz);
inertia[index][1] += massone * (dx*dx + dz*dz);
inertia[index][2] += massone * (dx*dx + dy*dy);
inertia[index][3] -= massone * dx*dy;
inertia[index][4] -= massone * dy*dz;
inertia[index][5] -= massone * dx*dz;
}
MPI_Allreduce(&inertia[0][0],&inertiaall[0][0],6*nchunk,
MPI_DOUBLE,MPI_SUM,world);
}
/* ----------------------------------------------------------------------
lock methods: called by fix ave/time
these methods insure vector/array size is locked for Nfreq epoch
by passing lock info along to compute chunk/atom
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
increment lock counter
------------------------------------------------------------------------- */
void ComputeInertiaChunk::lock_enable()
{
cchunk->lockcount++;
}
/* ----------------------------------------------------------------------
decrement lock counter in compute chunk/atom, it if still exists
------------------------------------------------------------------------- */
void ComputeInertiaChunk::lock_disable()
{
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->lockcount--;
}
}
/* ----------------------------------------------------------------------
calculate and return # of chunks = length of vector/array
------------------------------------------------------------------------- */
int ComputeInertiaChunk::lock_length()
{
nchunk = cchunk->setup_chunks();
return nchunk;
}
/* ----------------------------------------------------------------------
set the lock from startstep to stopstep
------------------------------------------------------------------------- */
void ComputeInertiaChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
cchunk->lock(fixptr,startstep,stopstep);
}
/* ----------------------------------------------------------------------
unset the lock
------------------------------------------------------------------------- */
void ComputeInertiaChunk::unlock(Fix *fixptr)
{
cchunk->unlock(fixptr);
}
/* ----------------------------------------------------------------------
free and reallocate per-chunk arrays
------------------------------------------------------------------------- */
void ComputeInertiaChunk::allocate()
{
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(inertia);
memory->destroy(inertiaall);
maxchunk = nchunk;
memory->create(massproc,maxchunk,"inertia/chunk:massproc");
memory->create(masstotal,maxchunk,"inertia/chunk:masstotal");
memory->create(com,maxchunk,3,"inertia/chunk:com");
memory->create(comall,maxchunk,3,"inertia/chunk:comall");
memory->create(inertia,maxchunk,6,"inertia/chunk:inertia");
memory->create(inertiaall,maxchunk,6,"inertia/chunk:inertiaall");
array = inertiaall;
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeInertiaChunk::memory_usage()
{
double bytes = (bigint) maxchunk * 2 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
bytes += (bigint) maxchunk * 2*6 * sizeof(double);
return bytes;
}
diff --git a/src/compute_ke_atom.cpp b/src/compute_ke_atom.cpp
index aa893981a..da159669d 100644
--- a/src/compute_ke_atom.cpp
+++ b/src/compute_ke_atom.cpp
@@ -1,108 +1,108 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_ke_atom.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "comm.h"
#include "force.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeKEAtom::ComputeKEAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ ke(NULL)
{
if (narg != 3) error->all(FLERR,"Illegal compute ke/atom command");
peratom_flag = 1;
size_peratom_cols = 0;
nmax = 0;
- ke = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeKEAtom::~ComputeKEAtom()
{
memory->destroy(ke);
}
/* ---------------------------------------------------------------------- */
void ComputeKEAtom::init()
{
int count = 0;
for (int i = 0; i < modify->ncompute; i++)
if (strcmp(modify->compute[i]->style,"ke/atom") == 0) count++;
if (count > 1 && comm->me == 0)
error->warning(FLERR,"More than one compute ke/atom");
}
/* ---------------------------------------------------------------------- */
void ComputeKEAtom::compute_peratom()
{
invoked_peratom = update->ntimestep;
// grow ke array if necessary
if (atom->nmax > nmax) {
memory->destroy(ke);
nmax = atom->nmax;
memory->create(ke,nmax,"ke/atom:ke");
vector_atom = ke;
}
// compute kinetic energy for each atom in group
double mvv2e = force->mvv2e;
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
if (rmass)
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
ke[i] = 0.5 * mvv2e * rmass[i] *
(v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]);
} else ke[i] = 0.0;
}
else
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
ke[i] = 0.5 * mvv2e * mass[type[i]] *
(v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]);
} else ke[i] = 0.0;
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputeKEAtom::memory_usage()
{
double bytes = nmax * sizeof(double);
return bytes;
}
diff --git a/src/compute_msd.cpp b/src/compute_msd.cpp
index 7f005d275..f2e82fe23 100644
--- a/src/compute_msd.cpp
+++ b/src/compute_msd.cpp
@@ -1,269 +1,270 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_msd.h"
#include "atom.h"
#include "update.h"
#include "group.h"
#include "domain.h"
#include "modify.h"
#include "fix_store.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeMSD::ComputeMSD(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ id_fix(NULL)
{
if (narg < 3) error->all(FLERR,"Illegal compute msd command");
vector_flag = 1;
size_vector = 4;
extvector = 0;
create_attribute = 1;
dynamic_group_allow = 0;
// optional args
comflag = 0;
avflag = 0;
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"com") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute msd command");
if (strcmp(arg[iarg+1],"no") == 0) comflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) comflag = 1;
else error->all(FLERR,"Illegal compute msd command");
iarg += 2;
} else if (strcmp(arg[iarg],"average") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute msd command");
if (strcmp(arg[iarg+1],"no") == 0) avflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) avflag = 1;
else error->all(FLERR,"Illegal compute msd command");
iarg += 2;
} else error->all(FLERR,"Illegal compute msd command");
}
// create a new fix STORE style for reference positions
// id = compute-ID + COMPUTE_STORE, fix group = compute group
int n = strlen(id) + strlen("_COMPUTE_STORE") + 1;
id_fix = new char[n];
strcpy(id_fix,id);
strcat(id_fix,"_COMPUTE_STORE");
char **newarg = new char*[6];
newarg[0] = id_fix;
newarg[1] = group->names[igroup];
newarg[2] = (char *) "STORE";
newarg[3] = (char *) "peratom";
newarg[4] = (char *) "1";
newarg[5] = (char *) "3";
modify->add_fix(6,newarg);
fix = (FixStore *) modify->fix[modify->nfix-1];
delete [] newarg;
// calculate xu,yu,zu for fix store array
// skip if reset from restart file
if (fix->restart_reset) fix->restart_reset = 0;
else {
double **xoriginal = fix->astore;
double **x = atom->x;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) domain->unmap(x[i],image[i],xoriginal[i]);
else xoriginal[i][0] = xoriginal[i][1] = xoriginal[i][2] = 0.0;
// adjust for COM if requested
if (comflag) {
double cm[3];
masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,cm);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
xoriginal[i][0] -= cm[0];
xoriginal[i][1] -= cm[1];
xoriginal[i][2] -= cm[2];
}
}
// initialize counter for average positions if requested
naverage = 0;
}
// displacement vector
vector = new double[4];
}
/* ---------------------------------------------------------------------- */
ComputeMSD::~ComputeMSD()
{
// check nfix in case all fixes have already been deleted
if (modify->nfix) modify->delete_fix(id_fix);
delete [] id_fix;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeMSD::init()
{
// set fix which stores reference atom coords
int ifix = modify->find_fix(id_fix);
if (ifix < 0) error->all(FLERR,"Could not find compute msd fix ID");
fix = (FixStore *) modify->fix[ifix];
// nmsd = # of atoms in group
nmsd = group->count(igroup);
masstotal = group->mass(igroup);
}
/* ---------------------------------------------------------------------- */
void ComputeMSD::compute_vector()
{
invoked_vector = update->ntimestep;
// cm = current center of mass
double cm[3];
if (comflag) group->xcm(igroup,masstotal,cm);
else cm[0] = cm[1] = cm[2] = 0.0;
// dx,dy,dz = displacement of atom from reference position
// reference unwrapped position is stored by fix
// relative to center of mass if comflag is set
// for triclinic, need to unwrap current atom coord via h matrix
double **xoriginal = fix->astore;
double **x = atom->x;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
double *h = domain->h;
double xprd = domain->xprd;
double yprd = domain->yprd;
double zprd = domain->zprd;
double dx,dy,dz;
int xbox,ybox,zbox;
double msd[4];
msd[0] = msd[1] = msd[2] = msd[3] = 0.0;
double xtmp, ytmp, ztmp;
// update number of averages if requested
double navfac;
if (avflag) {
naverage++;
navfac = 1.0/(naverage+1);
}
if (domain->triclinic == 0) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
xtmp = x[i][0] + xbox*xprd - cm[0];
ytmp = x[i][1] + ybox*yprd - cm[1];
ztmp = x[i][2] + zbox*zprd - cm[2];
// use running average position for reference if requested
if (avflag) {
xoriginal[i][0] = (xoriginal[i][0]*naverage + xtmp)*navfac;
xoriginal[i][1] = (xoriginal[i][1]*naverage + ytmp)*navfac;
xoriginal[i][2] = (xoriginal[i][2]*naverage + ztmp)*navfac;
}
dx = xtmp - xoriginal[i][0];
dy = ytmp - xoriginal[i][1];
dz = ztmp - xoriginal[i][2];
msd[0] += dx*dx;
msd[1] += dy*dy;
msd[2] += dz*dz;
msd[3] += dx*dx + dy*dy + dz*dz;
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
xtmp = x[i][0] + h[0]*xbox + h[5]*ybox + h[4]*zbox - cm[0];
ytmp = x[i][1] + h[1]*ybox + h[3]*zbox - cm[1];
ztmp = x[i][2] + h[2]*zbox - cm[2];
// use running average position for reference if requested
if (avflag) {
xoriginal[i][0] = (xoriginal[i][0]*naverage + xtmp)*navfac;
xoriginal[i][1] = (xoriginal[i][0]*naverage + xtmp)*navfac;
xoriginal[i][2] = (xoriginal[i][0]*naverage + xtmp)*navfac;
}
dx = xtmp - xoriginal[i][0];
dy = ytmp - xoriginal[i][1];
dz = ztmp - xoriginal[i][2];
msd[0] += dx*dx;
msd[1] += dy*dy;
msd[2] += dz*dz;
msd[3] += dx*dx + dy*dy + dz*dz;
}
}
MPI_Allreduce(msd,vector,4,MPI_DOUBLE,MPI_SUM,world);
if (nmsd) {
vector[0] /= nmsd;
vector[1] /= nmsd;
vector[2] /= nmsd;
vector[3] /= nmsd;
}
}
/* ----------------------------------------------------------------------
initialize one atom's storage values, called when atom is created
------------------------------------------------------------------------- */
void ComputeMSD::set_arrays(int i)
{
double **xoriginal = fix->astore;
double **x = atom->x;
xoriginal[i][0] = x[i][0];
xoriginal[i][1] = x[i][1];
xoriginal[i][2] = x[i][2];
}
diff --git a/src/compute_msd_chunk.cpp b/src/compute_msd_chunk.cpp
index 30eee1d64..bc5a374fa 100644
--- a/src/compute_msd_chunk.cpp
+++ b/src/compute_msd_chunk.cpp
@@ -1,310 +1,307 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_msd_chunk.h"
#include "atom.h"
#include "group.h"
#include "update.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "domain.h"
#include "fix_store.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeMSDChunk::ComputeMSDChunk(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ idchunk(NULL), id_fix(NULL), massproc(NULL), masstotal(NULL), com(NULL), comall(NULL), msd(NULL)
{
if (narg != 4) error->all(FLERR,"Illegal compute msd/chunk command");
array_flag = 1;
size_array_cols = 4;
size_array_rows = 0;
size_array_rows_variable = 1;
extarray = 0;
// ID of compute chunk/atom
int n = strlen(arg[3]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[3]);
firstflag = 1;
init();
- massproc = masstotal = NULL;
- com = comall = NULL;
- msd = NULL;
-
// create a new fix STORE style for reference positions
// id = compute-ID + COMPUTE_STORE, fix group = compute group
// do not know size of array at this point, just allocate 1x3 array
// fix creation must be done now so that a restart run can
// potentially re-populate the fix array (and change it to correct size)
// otherwise size reset and init will be done in setup()
n = strlen(id) + strlen("_COMPUTE_STORE") + 1;
id_fix = new char[n];
strcpy(id_fix,id);
strcat(id_fix,"_COMPUTE_STORE");
char **newarg = new char*[6];
newarg[0] = id_fix;
newarg[1] = group->names[igroup];
newarg[2] = (char *) "STORE";
newarg[3] = (char *) "global";
newarg[4] = (char *) "1";
newarg[5] = (char *) "1";
modify->add_fix(6,newarg);
fix = (FixStore *) modify->fix[modify->nfix-1];
delete [] newarg;
}
/* ---------------------------------------------------------------------- */
ComputeMSDChunk::~ComputeMSDChunk()
{
// check nfix in case all fixes have already been deleted
if (modify->nfix) modify->delete_fix(id_fix);
delete [] id_fix;
delete [] idchunk;
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(msd);
}
/* ---------------------------------------------------------------------- */
void ComputeMSDChunk::init()
{
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for compute msd/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Compute msd/chunk does not use chunk/atom compute");
// set fix which stores reference atom coords
// if firstflag, will be created in setup()
if (!firstflag) {
int ifix = modify->find_fix(id_fix);
if (ifix < 0) error->all(FLERR,"Could not find compute msd/chunk fix ID");
fix = (FixStore *) modify->fix[ifix];
}
}
/* ----------------------------------------------------------------------
compute initial COM for each chunk
only once on timestep compute is defined, when firstflag = 1
------------------------------------------------------------------------- */
void ComputeMSDChunk::setup()
{
if (!firstflag) return;
compute_array();
firstflag = 0;
// if fix->astore is already correct size, restart file set it up
// otherwise reset its size now and initialize to current COM
if (fix->nrow == nchunk && fix->ncol == 3) return;
fix->reset_global(nchunk,3);
double **cominit = fix->astore;
for (int i = 0; i < nchunk; i++) {
cominit[i][0] = comall[i][0];
cominit[i][1] = comall[i][1];
cominit[i][2] = comall[i][2];
msd[i][0] = msd[i][1] = msd[i][2] = msd[i][3] = 0.0;
}
}
/* ---------------------------------------------------------------------- */
void ComputeMSDChunk::compute_array()
{
int index;
double massone;
double unwrap[3];
invoked_array = update->ntimestep;
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
int n = cchunk->setup_chunks();
cchunk->compute_ichunk();
int *ichunk = cchunk->ichunk;
// first time call, allocate per-chunk arrays
// thereafter, require nchunk remain the same
if (firstflag) {
nchunk = n;
allocate();
size_array_rows = nchunk;
} else if (n != nchunk)
error->all(FLERR,"Compute msd/chunk nchunk is not static");
// zero local per-chunk values
for (int i = 0; i < nchunk; i++) {
massproc[i] = 0.0;
com[i][0] = com[i][1] = com[i][2] = 0.0;
}
// compute current COM for each chunk
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
domain->unmap(x[i],image[i],unwrap);
massproc[index] += massone;
com[index][0] += unwrap[0] * massone;
com[index][1] += unwrap[1] * massone;
com[index][2] += unwrap[2] * massone;
}
MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < nchunk; i++) {
if (masstotal[i] > 0.0) {
comall[i][0] /= masstotal[i];
comall[i][1] /= masstotal[i];
comall[i][2] /= masstotal[i];
}
}
// MSD is difference between current and initial COM
// cominit is initilialized by setup() when firstflag is set
if (firstflag) return;
double dx,dy,dz;
double **cominit = fix->astore;
for (int i = 0; i < nchunk; i++) {
dx = comall[i][0] - cominit[i][0];
dy = comall[i][1] - cominit[i][1];
dz = comall[i][2] - cominit[i][2];
msd[i][0] = dx*dx;
msd[i][1] = dy*dy;
msd[i][2] = dz*dz;
msd[i][3] = dx*dx + dy*dy + dz*dz;
}
}
/* ----------------------------------------------------------------------
lock methods: called by fix ave/time
these methods insure vector/array size is locked for Nfreq epoch
by passing lock info along to compute chunk/atom
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
increment lock counter
------------------------------------------------------------------------- */
void ComputeMSDChunk::lock_enable()
{
cchunk->lockcount++;
}
/* ----------------------------------------------------------------------
decrement lock counter in compute chunk/atom, it if still exists
------------------------------------------------------------------------- */
void ComputeMSDChunk::lock_disable()
{
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->lockcount--;
}
}
/* ----------------------------------------------------------------------
calculate and return # of chunks = length of vector/array
------------------------------------------------------------------------- */
int ComputeMSDChunk::lock_length()
{
nchunk = cchunk->setup_chunks();
return nchunk;
}
/* ----------------------------------------------------------------------
set the lock from startstep to stopstep
------------------------------------------------------------------------- */
void ComputeMSDChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
cchunk->lock(fixptr,startstep,stopstep);
}
/* ----------------------------------------------------------------------
unset the lock
------------------------------------------------------------------------- */
void ComputeMSDChunk::unlock(Fix *fixptr)
{
cchunk->unlock(fixptr);
}
/* ----------------------------------------------------------------------
one-time allocate of per-chunk arrays
------------------------------------------------------------------------- */
void ComputeMSDChunk::allocate()
{
memory->create(massproc,nchunk,"msd/chunk:massproc");
memory->create(masstotal,nchunk,"msd/chunk:masstotal");
memory->create(com,nchunk,3,"msd/chunk:com");
memory->create(comall,nchunk,3,"msd/chunk:comall");
memory->create(msd,nchunk,4,"msd/chunk:msd");
array = msd;
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeMSDChunk::memory_usage()
{
double bytes = (bigint) nchunk * 2 * sizeof(double);
bytes += (bigint) nchunk * 2*3 * sizeof(double);
bytes += (bigint) nchunk * 4 * sizeof(double);
return bytes;
}
diff --git a/src/compute_omega_chunk.cpp b/src/compute_omega_chunk.cpp
index 54e0b8f90..58acc19c3 100644
--- a/src/compute_omega_chunk.cpp
+++ b/src/compute_omega_chunk.cpp
@@ -1,335 +1,333 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_omega_chunk.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeOmegaChunk::ComputeOmegaChunk(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ idchunk(NULL), massproc(NULL), masstotal(NULL), com(NULL), comall(NULL), angmom(NULL), angmomall(NULL)
{
if (narg != 4) error->all(FLERR,"Illegal compute omega/chunk command");
array_flag = 1;
size_array_cols = 3;
size_array_rows = 0;
size_array_rows_variable = 1;
extarray = 0;
// ID of compute chunk/atom
int n = strlen(arg[3]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[3]);
init();
// chunk-based data
nchunk = 1;
maxchunk = 0;
- massproc = masstotal = NULL;
- com = comall = NULL;
- angmom = angmomall = NULL;
allocate();
}
/* ---------------------------------------------------------------------- */
ComputeOmegaChunk::~ComputeOmegaChunk()
{
delete [] idchunk;
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(angmom);
memory->destroy(angmomall);
}
/* ---------------------------------------------------------------------- */
void ComputeOmegaChunk::init()
{
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for "
"compute omega/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Compute omega/chunk does not use chunk/atom compute");
}
/* ---------------------------------------------------------------------- */
void ComputeOmegaChunk::compute_array()
{
int i,j,index;
double dx,dy,dz,massone;
double unwrap[3];
invoked_array = update->ntimestep;
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
int *ichunk = cchunk->ichunk;
if (nchunk > maxchunk) allocate();
size_array_rows = nchunk;
// zero local per-chunk values
for (int i = 0; i < nchunk; i++) {
massproc[i] = 0.0;
com[i][0] = com[i][1] = com[i][2] = 0.0;
for (j = 0; j < 6; j++) inertia[i][j] = 0.0;
angmom[i][0] = angmom[i][1] = angmom[i][2] = 0.0;
omega[i][0] = omega[i][1] = omega[i][2] = 0.0;
}
// compute COM for each chunk
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
domain->unmap(x[i],image[i],unwrap);
massproc[index] += massone;
com[index][0] += unwrap[0] * massone;
com[index][1] += unwrap[1] * massone;
com[index][2] += unwrap[2] * massone;
}
MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < nchunk; i++) {
if (masstotal[i] > 0.0) {
comall[i][0] /= masstotal[i];
comall[i][1] /= masstotal[i];
comall[i][2] /= masstotal[i];
}
}
// compute inertia tensor for each chunk
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - comall[index][0];
dy = unwrap[1] - comall[index][1];
dz = unwrap[2] - comall[index][2];
inertia[index][0] += massone * (dy*dy + dz*dz);
inertia[index][1] += massone * (dx*dx + dz*dz);
inertia[index][2] += massone * (dx*dx + dy*dy);
inertia[index][3] -= massone * dx*dy;
inertia[index][4] -= massone * dy*dz;
inertia[index][5] -= massone * dx*dz;
}
MPI_Allreduce(&inertia[0][0],&inertiaall[0][0],6*nchunk,
MPI_DOUBLE,MPI_SUM,world);
// compute angmom for each chunk
double **v = atom->v;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - comall[index][0];
dy = unwrap[1] - comall[index][1];
dz = unwrap[2] - comall[index][2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
angmom[index][0] += massone * (dy*v[i][2] - dz*v[i][1]);
angmom[index][1] += massone * (dz*v[i][0] - dx*v[i][2]);
angmom[index][2] += massone * (dx*v[i][1] - dy*v[i][0]);
}
MPI_Allreduce(&angmom[0][0],&angmomall[0][0],3*nchunk,
MPI_DOUBLE,MPI_SUM,world);
// compute omega for each chunk from L = Iw, inverting I to solve for w
double ione[3][3],inverse[3][3];
for (i = 0; i < nchunk; i++) {
ione[0][0] = inertiaall[i][0];
ione[1][1] = inertiaall[i][1];
ione[2][2] = inertiaall[i][2];
ione[0][1] = inertiaall[i][3];
ione[1][2] = inertiaall[i][4];
ione[0][2] = inertiaall[i][5];
ione[1][0] = ione[0][1];
ione[2][1] = ione[1][2];
ione[2][0] = ione[0][2];
inverse[0][0] = ione[1][1]*ione[2][2] - ione[1][2]*ione[2][1];
inverse[0][1] = -(ione[0][1]*ione[2][2] - ione[0][2]*ione[2][1]);
inverse[0][2] = ione[0][1]*ione[1][2] - ione[0][2]*ione[1][1];
inverse[1][0] = -(ione[1][0]*ione[2][2] - ione[1][2]*ione[2][0]);
inverse[1][1] = ione[0][0]*ione[2][2] - ione[0][2]*ione[2][0];
inverse[1][2] = -(ione[0][0]*ione[1][2] - ione[0][2]*ione[1][0]);
inverse[2][0] = ione[1][0]*ione[2][1] - ione[1][1]*ione[2][0];
inverse[2][1] = -(ione[0][0]*ione[2][1] - ione[0][1]*ione[2][0]);
inverse[2][2] = ione[0][0]*ione[1][1] - ione[0][1]*ione[1][0];
double determinant = ione[0][0]*ione[1][1]*ione[2][2] +
ione[0][1]*ione[1][2]*ione[2][0] + ione[0][2]*ione[1][0]*ione[2][1] -
ione[0][0]*ione[1][2]*ione[2][1] - ione[0][1]*ione[1][0]*ione[2][2] -
ione[2][0]*ione[1][1]*ione[0][2];
if (determinant > 0.0)
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
inverse[i][j] /= determinant;
omega[i][0] = inverse[0][0]*angmom[i][0] + inverse[0][1]*angmom[i][1] +
inverse[0][2]*angmom[i][2];
omega[i][1] = inverse[1][0]*angmom[i][0] + inverse[1][1]*angmom[i][1] +
inverse[1][2]*angmom[i][2];
omega[i][2] = inverse[2][0]*angmom[i][0] + inverse[2][1]*angmom[i][1] +
inverse[2][2]*angmom[i][2];
}
}
/* ----------------------------------------------------------------------
lock methods: called by fix ave/time
these methods insure vector/array size is locked for Nfreq epoch
by passing lock info along to compute chunk/atom
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
increment lock counter
------------------------------------------------------------------------- */
void ComputeOmegaChunk::lock_enable()
{
cchunk->lockcount++;
}
/* ----------------------------------------------------------------------
decrement lock counter in compute chunk/atom, it if still exists
------------------------------------------------------------------------- */
void ComputeOmegaChunk::lock_disable()
{
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->lockcount--;
}
}
/* ----------------------------------------------------------------------
calculate and return # of chunks = length of vector/array
------------------------------------------------------------------------- */
int ComputeOmegaChunk::lock_length()
{
nchunk = cchunk->setup_chunks();
return nchunk;
}
/* ----------------------------------------------------------------------
set the lock from startstep to stopstep
------------------------------------------------------------------------- */
void ComputeOmegaChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
cchunk->lock(fixptr,startstep,stopstep);
}
/* ----------------------------------------------------------------------
unset the lock
------------------------------------------------------------------------- */
void ComputeOmegaChunk::unlock(Fix *fixptr)
{
cchunk->unlock(fixptr);
}
/* ----------------------------------------------------------------------
free and reallocate per-chunk arrays
------------------------------------------------------------------------- */
void ComputeOmegaChunk::allocate()
{
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(inertia);
memory->destroy(inertiaall);
memory->destroy(angmom);
memory->destroy(angmomall);
memory->destroy(omega);
maxchunk = nchunk;
memory->create(massproc,maxchunk,"omega/chunk:massproc");
memory->create(masstotal,maxchunk,"omega/chunk:masstotal");
memory->create(com,maxchunk,3,"omega/chunk:com");
memory->create(comall,maxchunk,3,"omega/chunk:comall");
memory->create(inertia,maxchunk,6,"omega/chunk:inertia");
memory->create(inertiaall,maxchunk,6,"omega/chunk:inertiaall");
memory->create(angmom,maxchunk,3,"omega/chunk:angmom");
memory->create(angmomall,maxchunk,3,"omega/chunk:angmomall");
memory->create(omega,maxchunk,3,"omega/chunk:omega");
array = omega;
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeOmegaChunk::memory_usage()
{
double bytes = (bigint) maxchunk * 2 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
bytes += (bigint) maxchunk * 2*6 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
bytes += (bigint) maxchunk * 3 * sizeof(double);
return bytes;
}
diff --git a/src/compute_orientorder_atom.cpp b/src/compute_orientorder_atom.cpp
index fd3493cd7..6c5a2c0c0 100644
--- a/src/compute_orientorder_atom.cpp
+++ b/src/compute_orientorder_atom.cpp
@@ -1,508 +1,503 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Aidan Thompson (SNL)
Axel Kohlmeyer (Temple U)
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include "compute_orientorder_atom.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "force.h"
#include "pair.h"
#include "comm.h"
#include "memory.h"
#include "error.h"
#include "math_const.h"
using namespace LAMMPS_NS;
using namespace MathConst;
using namespace std;
#ifdef DBL_EPSILON
#define MY_EPSILON (10.0*DBL_EPSILON)
#else
#define MY_EPSILON (10.0*2.220446049250313e-16)
#endif
/* ---------------------------------------------------------------------- */
ComputeOrientOrderAtom::ComputeOrientOrderAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ distsq(NULL), nearest(NULL), rlist(NULL), qlist(NULL), qnarray(NULL), qnm_r(NULL), qnm_i(NULL)
{
if (narg < 3 ) error->all(FLERR,"Illegal compute orientorder/atom command");
// set default values for optional args
nnn = 12;
cutsq = 0.0;
// specify which orders to request
nqlist = 5;
memory->create(qlist,nqlist,"orientorder/atom:qlist");
qlist[0] = 4;
qlist[1] = 6;
qlist[2] = 8;
qlist[3] = 10;
qlist[4] = 12;
qmax = 12;
// process optional args
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"nnn") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute orientorder/atom command");
if (strcmp(arg[iarg+1],"NULL") == 0)
nnn = 0;
else {
nnn = force->numeric(FLERR,arg[iarg+1]);
if (nnn <= 0)
error->all(FLERR,"Illegal compute orientorder/atom command");
}
iarg += 2;
} else if (strcmp(arg[iarg],"degrees") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute orientorder/atom command");
nqlist = force->numeric(FLERR,arg[iarg+1]);
if (nqlist <= 0) error->all(FLERR,"Illegal compute orientorder/atom command");
memory->destroy(qlist);
memory->create(qlist,nqlist,"orientorder/atom:qlist");
iarg += 2;
if (iarg+nqlist > narg) error->all(FLERR,"Illegal compute orientorder/atom command");
qmax = 0;
for (int iw = 0; iw < nqlist; iw++) {
qlist[iw] = force->numeric(FLERR,arg[iarg+iw]);
if (qlist[iw] < 0)
error->all(FLERR,"Illegal compute orientorder/atom command");
if (qlist[iw] > qmax) qmax = qlist[iw];
}
iarg += nqlist;
} else if (strcmp(arg[iarg],"cutoff") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute orientorder/atom command");
double cutoff = force->numeric(FLERR,arg[iarg+1]);
if (cutoff <= 0.0) error->all(FLERR,"Illegal compute orientorder/atom command");
cutsq = cutoff*cutoff;
iarg += 2;
} else error->all(FLERR,"Illegal compute orientorder/atom command");
}
ncol = nqlist;
peratom_flag = 1;
size_peratom_cols = ncol;
nmax = 0;
- qnarray = NULL;
maxneigh = 0;
- distsq = NULL;
- nearest = NULL;
- rlist = NULL;
- qnm_r = NULL;
- qnm_i = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeOrientOrderAtom::~ComputeOrientOrderAtom()
{
memory->destroy(qnarray);
memory->destroy(distsq);
memory->destroy(rlist);
memory->destroy(nearest);
memory->destroy(qlist);
memory->destroy(qnm_r);
memory->destroy(qnm_i);
}
/* ---------------------------------------------------------------------- */
void ComputeOrientOrderAtom::init()
{
if (force->pair == NULL)
error->all(FLERR,"Compute orientorder/atom requires a pair style be defined");
if (cutsq == 0.0) cutsq = force->pair->cutforce * force->pair->cutforce;
else if (sqrt(cutsq) > force->pair->cutforce)
error->all(FLERR,
"Compute orientorder/atom cutoff is longer than pairwise cutoff");
memory->create(qnm_r,qmax,2*qmax+1,"orientorder/atom:qnm_r");
memory->create(qnm_i,qmax,2*qmax+1,"orientorder/atom:qnm_i");
// need an occasional full neighbor list
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->half = 0;
neighbor->requests[irequest]->full = 1;
neighbor->requests[irequest]->occasional = 1;
int count = 0;
for (int i = 0; i < modify->ncompute; i++)
if (strcmp(modify->compute[i]->style,"orientorder/atom") == 0) count++;
if (count > 1 && comm->me == 0)
error->warning(FLERR,"More than one compute orientorder/atom");
}
/* ---------------------------------------------------------------------- */
void ComputeOrientOrderAtom::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void ComputeOrientOrderAtom::compute_peratom()
{
int i,j,ii,jj,inum,jnum;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
int *ilist,*jlist,*numneigh,**firstneigh;
invoked_peratom = update->ntimestep;
// grow order parameter array if necessary
if (atom->nmax > nmax) {
memory->destroy(qnarray);
nmax = atom->nmax;
memory->create(qnarray,nmax,ncol,"orientorder/atom:qnarray");
array_atom = qnarray;
}
// invoke full neighbor list (will copy or build if necessary)
neighbor->build_one(list);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// compute order parameter for each atom in group
// use full neighbor list to count atoms less than cutoff
double **x = atom->x;
int *mask = atom->mask;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
double* qn = qnarray[i];
if (mask[i] & groupbit) {
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
jlist = firstneigh[i];
jnum = numneigh[i];
// insure distsq and nearest arrays are long enough
if (jnum > maxneigh) {
memory->destroy(distsq);
memory->destroy(rlist);
memory->destroy(nearest);
maxneigh = jnum;
memory->create(distsq,maxneigh,"orientorder/atom:distsq");
memory->create(rlist,maxneigh,3,"orientorder/atom:rlist");
memory->create(nearest,maxneigh,"orientorder/atom:nearest");
}
// loop over list of all neighbors within force cutoff
// distsq[] = distance sq to each
// rlist[] = distance vector to each
// nearest[] = atom indices of neighbors
int ncount = 0;
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq < cutsq) {
distsq[ncount] = rsq;
rlist[ncount][0] = delx;
rlist[ncount][1] = dely;
rlist[ncount][2] = delz;
nearest[ncount++] = j;
}
}
// if not nnn neighbors, order parameter = 0;
if ((ncount == 0) || (ncount < nnn)) {
for (int iw = 0; iw < nqlist; iw++)
qn[iw] = 0.0;
continue;
}
// if nnn > 0, use only nearest nnn neighbors
if (nnn > 0) {
select3(nnn,ncount,distsq,nearest,rlist);
ncount = nnn;
}
calc_boop(rlist, ncount, qn, qlist, nqlist);
}
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputeOrientOrderAtom::memory_usage()
{
double bytes = ncol*nmax * sizeof(double);
bytes += (qmax*(2*qmax+1)+maxneigh*4) * sizeof(double);
bytes += (nqlist+maxneigh) * sizeof(int);
return bytes;
}
/* ----------------------------------------------------------------------
select3 routine from Numerical Recipes (slightly modified)
find k smallest values in array of length n
sort auxiliary arrays at same time
------------------------------------------------------------------------- */
// Use no-op do while to create single statement
#define SWAP(a,b) do { \
tmp = a; a = b; b = tmp; \
} while(0)
#define ISWAP(a,b) do { \
itmp = a; a = b; b = itmp; \
} while(0)
#define SWAP3(a,b) do { \
tmp = a[0]; a[0] = b[0]; b[0] = tmp; \
tmp = a[1]; a[1] = b[1]; b[1] = tmp; \
tmp = a[2]; a[2] = b[2]; b[2] = tmp; \
} while(0)
/* ---------------------------------------------------------------------- */
void ComputeOrientOrderAtom::select3(int k, int n, double *arr, int *iarr, double **arr3)
{
int i,ir,j,l,mid,ia,itmp;
double a,tmp,a3[3];
arr--;
iarr--;
arr3--;
l = 1;
ir = n;
for (;;) {
if (ir <= l+1) {
if (ir == l+1 && arr[ir] < arr[l]) {
SWAP(arr[l],arr[ir]);
ISWAP(iarr[l],iarr[ir]);
SWAP3(arr3[l],arr3[ir]);
}
return;
} else {
mid=(l+ir) >> 1;
SWAP(arr[mid],arr[l+1]);
ISWAP(iarr[mid],iarr[l+1]);
SWAP3(arr3[mid],arr3[l+1]);
if (arr[l] > arr[ir]) {
SWAP(arr[l],arr[ir]);
ISWAP(iarr[l],iarr[ir]);
SWAP3(arr3[l],arr3[ir]);
}
if (arr[l+1] > arr[ir]) {
SWAP(arr[l+1],arr[ir]);
ISWAP(iarr[l+1],iarr[ir]);
SWAP3(arr3[l+1],arr3[ir]);
}
if (arr[l] > arr[l+1]) {
SWAP(arr[l],arr[l+1]);
ISWAP(iarr[l],iarr[l+1]);
SWAP3(arr3[l],arr3[l+1]);
}
i = l+1;
j = ir;
a = arr[l+1];
ia = iarr[l+1];
a3[0] = arr3[l+1][0];
a3[1] = arr3[l+1][1];
a3[2] = arr3[l+1][2];
for (;;) {
do i++; while (arr[i] < a);
do j--; while (arr[j] > a);
if (j < i) break;
SWAP(arr[i],arr[j]);
ISWAP(iarr[i],iarr[j]);
SWAP3(arr3[i],arr3[j]);
}
arr[l+1] = arr[j];
arr[j] = a;
iarr[l+1] = iarr[j];
iarr[j] = ia;
arr3[l+1][0] = arr3[j][0];
arr3[l+1][1] = arr3[j][1];
arr3[l+1][2] = arr3[j][2];
arr3[j][0] = a3[0];
arr3[j][1] = a3[1];
arr3[j][2] = a3[2];
if (j >= k) ir = j-1;
if (j <= k) l = i;
}
}
}
/* ----------------------------------------------------------------------
calculate the bond orientational order parameters
------------------------------------------------------------------------- */
void ComputeOrientOrderAtom::calc_boop(double **rlist,
int ncount, double qn[],
int qlist[], int nqlist) {
for (int iw = 0; iw < nqlist; iw++) {
int n = qlist[iw];
qn[iw] = 0.0;
for(int m = 0; m < 2*n+1; m++) {
qnm_r[iw][m] = 0.0;
qnm_i[iw][m] = 0.0;
}
}
for(int ineigh = 0; ineigh < ncount; ineigh++) {
const double * const r = rlist[ineigh];
double rmag = dist(r);
if(rmag <= MY_EPSILON) {
return;
}
double costheta = r[2] / rmag;
double expphi_r = r[0];
double expphi_i = r[1];
double rxymag = sqrt(expphi_r*expphi_r+expphi_i*expphi_i);
if(rxymag <= MY_EPSILON) {
expphi_r = 1.0;
expphi_i = 0.0;
} else {
double rxymaginv = 1.0/rxymag;
expphi_r *= rxymaginv;
expphi_i *= rxymaginv;
}
for (int iw = 0; iw < nqlist; iw++) {
int n = qlist[iw];
qnm_r[iw][n] += polar_prefactor(n, 0, costheta);
double expphim_r = expphi_r;
double expphim_i = expphi_i;
for(int m = 1; m <= +n; m++) {
double prefactor = polar_prefactor(n, m, costheta);
double c_r = prefactor * expphim_r;
double c_i = prefactor * expphim_i;
qnm_r[iw][m+n] += c_r;
qnm_i[iw][m+n] += c_i;
if(m & 1) {
qnm_r[iw][-m+n] -= c_r;
qnm_i[iw][-m+n] += c_i;
} else {
qnm_r[iw][-m+n] += c_r;
qnm_i[iw][-m+n] -= c_i;
}
double tmp_r = expphim_r*expphi_r - expphim_i*expphi_i;
double tmp_i = expphim_r*expphi_i + expphim_i*expphi_r;
expphim_r = tmp_r;
expphim_i = tmp_i;
}
}
}
double fac = sqrt(MY_4PI) / ncount;
for (int iw = 0; iw < nqlist; iw++) {
int n = qlist[iw];
double qm_sum = 0.0;
for(int m = 0; m < 2*n+1; m++) {
qm_sum += qnm_r[iw][m]*qnm_r[iw][m] + qnm_i[iw][m]*qnm_i[iw][m];
// printf("Ylm^2 = %d %d %g\n",n,m,
// qnm_r[iw][m]*qnm_r[iw][m] + qnm_i[iw][m]*qnm_i[iw][m]);
}
qn[iw] = fac * sqrt(qm_sum / (2*n+1));
}
}
/* ----------------------------------------------------------------------
calculate scalar distance
------------------------------------------------------------------------- */
double ComputeOrientOrderAtom::dist(const double r[]) {
return sqrt(r[0]*r[0] + r[1]*r[1] + r[2]*r[2]);
}
/* ----------------------------------------------------------------------
polar prefactor for spherical harmonic Y_l^m, where
Y_l^m (theta, phi) = prefactor(l, m, cos(theta)) * exp(i*m*phi)
------------------------------------------------------------------------- */
double ComputeOrientOrderAtom::
polar_prefactor(int l, int m, double costheta) {
const int mabs = abs(m);
double prefactor = 1.0;
for (int i=l-mabs+1; i < l+mabs+1; ++i)
prefactor *= static_cast<double>(i);
prefactor = sqrt(static_cast<double>(2*l+1)/(MY_4PI*prefactor))
* associated_legendre(l,mabs,costheta);
if ((m < 0) && (m % 2)) prefactor = -prefactor;
return prefactor;
}
/* ----------------------------------------------------------------------
associated legendre polynomial
------------------------------------------------------------------------- */
double ComputeOrientOrderAtom::
associated_legendre(int l, int m, double x) {
if (l < m) return 0.0;
double p(1.0), pm1(0.0), pm2(0.0);
if (m != 0) {
const double sqx = sqrt(1.0-x*x);
for (int i=1; i < m+1; ++i)
p *= static_cast<double>(2*i-1) * sqx;
}
for (int i=m+1; i < l+1; ++i) {
pm2 = pm1;
pm1 = p;
p = (static_cast<double>(2*i-1)*x*pm1
- static_cast<double>(i+m-1)*pm2) / static_cast<double>(i-m);
}
return p;
}
diff --git a/src/compute_pair.cpp b/src/compute_pair.cpp
index 62661b43e..b00944e1b 100644
--- a/src/compute_pair.cpp
+++ b/src/compute_pair.cpp
@@ -1,119 +1,120 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include "compute_pair.h"
#include "update.h"
#include "force.h"
#include "pair.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{EPAIR,EVDWL,ECOUL};
/* ---------------------------------------------------------------------- */
ComputePair::ComputePair(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ pstyle(NULL), pair(NULL), one(NULL)
{
if (narg < 4 || narg > 5) error->all(FLERR,"Illegal compute pair command");
scalar_flag = 1;
extscalar = 1;
peflag = 1;
timeflag = 1;
int n = strlen(arg[3]) + 1;
if (lmp->suffix) n += strlen(lmp->suffix) + 1;
pstyle = new char[n];
strcpy(pstyle,arg[3]);
if (narg == 5) {
if (strcmp(arg[4],"epair") == 0) evalue = EPAIR;
if (strcmp(arg[4],"evdwl") == 0) evalue = EVDWL;
if (strcmp(arg[4],"ecoul") == 0) evalue = ECOUL;
} else evalue = EPAIR;
// check if pair style with and without suffix exists
pair = force->pair_match(pstyle,1);
if (!pair && lmp->suffix) {
strcat(pstyle,"/");
strcat(pstyle,lmp->suffix);
pair = force->pair_match(pstyle,1);
}
if (!pair)
error->all(FLERR,"Unrecognized pair style in compute pair command");
npair = pair->nextra;
if (npair) {
vector_flag = 1;
size_vector = npair;
extvector = 1;
one = new double[npair];
vector = new double[npair];
} else one = vector = NULL;
}
/* ---------------------------------------------------------------------- */
ComputePair::~ComputePair()
{
delete [] pstyle;
delete [] one;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputePair::init()
{
// recheck for pair style in case it has been deleted
pair = force->pair_match(pstyle,1);
if (!pair)
error->all(FLERR,"Unrecognized pair style in compute pair command");
}
/* ---------------------------------------------------------------------- */
double ComputePair::compute_scalar()
{
invoked_scalar = update->ntimestep;
if (update->eflag_global != invoked_scalar)
error->all(FLERR,"Energy was not tallied on needed timestep");
double eng;
if (evalue == EPAIR) eng = pair->eng_vdwl + pair->eng_coul;
else if (evalue == EVDWL) eng = pair->eng_vdwl;
else if (evalue == ECOUL) eng = pair->eng_coul;
MPI_Allreduce(&eng,&scalar,1,MPI_DOUBLE,MPI_SUM,world);
return scalar;
}
/* ---------------------------------------------------------------------- */
void ComputePair::compute_vector()
{
invoked_vector = update->ntimestep;
if (update->eflag_global != invoked_vector)
error->all(FLERR,"Energy was not tallied on needed timestep");
for (int i = 0; i < npair; i++)
one[i] = pair->pvector[i];
MPI_Allreduce(one,vector,npair,MPI_DOUBLE,MPI_SUM,world);
}
diff --git a/src/compute_pair_local.cpp b/src/compute_pair_local.cpp
index 13dccc578..6ba4b7572 100644
--- a/src/compute_pair_local.cpp
+++ b/src/compute_pair_local.cpp
@@ -1,322 +1,321 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "compute_pair_local.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "pair.h"
#include "neighbor.h"
#include "neigh_request.h"
#include "neigh_list.h"
#include "group.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
#define DELTA 10000
enum{DIST,ENG,FORCE,FX,FY,FZ,PN};
enum{TYPE,RADIUS};
/* ---------------------------------------------------------------------- */
ComputePairLocal::ComputePairLocal(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ pstyle(NULL), pindex(NULL), vector(NULL), array(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute pair/local command");
local_flag = 1;
nvalues = narg - 3;
if (nvalues == 1) size_local_cols = 0;
else size_local_cols = nvalues;
pstyle = new int[nvalues];
pindex = new int[nvalues];
nvalues = 0;
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"dist") == 0) pstyle[nvalues++] = DIST;
else if (strcmp(arg[iarg],"eng") == 0) pstyle[nvalues++] = ENG;
else if (strcmp(arg[iarg],"force") == 0) pstyle[nvalues++] = FORCE;
else if (strcmp(arg[iarg],"fx") == 0) pstyle[nvalues++] = FX;
else if (strcmp(arg[iarg],"fy") == 0) pstyle[nvalues++] = FY;
else if (strcmp(arg[iarg],"fz") == 0) pstyle[nvalues++] = FZ;
else if (arg[iarg][0] == 'p') {
int n = atoi(&arg[iarg][1]);
if (n <= 0) error->all(FLERR,
"Invalid keyword in compute pair/local command");
pstyle[nvalues] = PN;
pindex[nvalues++] = n-1;
} else break;
iarg++;
}
// optional args
cutstyle = TYPE;
while (iarg < narg) {
if (strcmp(arg[iarg],"cutoff") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute pair/local command");
if (strcmp(arg[iarg+1],"type") == 0) cutstyle = TYPE;
else if (strcmp(arg[iarg+1],"radius") == 0) cutstyle = RADIUS;
else error->all(FLERR,"Illegal compute pair/local command");
iarg += 2;
} else error->all(FLERR,"Illegal compute pair/local command");
}
// error check
if (cutstyle == RADIUS && !atom->radius_flag)
error->all(FLERR,"Compute pair/local requires atom attribute radius");
// set singleflag if need to call pair->single()
singleflag = 0;
for (int i = 0; i < nvalues; i++)
if (pstyle[i] != DIST) singleflag = 1;
nmax = 0;
- vector = NULL;
- array = NULL;
}
/* ---------------------------------------------------------------------- */
ComputePairLocal::~ComputePairLocal()
{
memory->destroy(vector);
memory->destroy(array);
delete [] pstyle;
delete [] pindex;
}
/* ---------------------------------------------------------------------- */
void ComputePairLocal::init()
{
if (singleflag && force->pair == NULL)
error->all(FLERR,"No pair style is defined for compute pair/local");
if (singleflag && force->pair->single_enable == 0)
error->all(FLERR,"Pair style does not support compute pair/local");
for (int i = 0; i < nvalues; i++)
if (pstyle[i] == PN && pindex[i] >= force->pair->single_extra)
error->all(FLERR,"Pair style does not have extra field"
" requested by compute pair/local");
// need an occasional half neighbor list
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->occasional = 1;
}
/* ---------------------------------------------------------------------- */
void ComputePairLocal::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void ComputePairLocal::compute_local()
{
invoked_local = update->ntimestep;
// count local entries and compute pair info
ncount = compute_pairs(0);
if (ncount > nmax) reallocate(ncount);
size_local_rows = ncount;
compute_pairs(1);
}
/* ----------------------------------------------------------------------
count pairs and compute pair info on this proc
only count pair once if newton_pair is off
both atom I,J must be in group
if flag is set, compute requested info about pair
------------------------------------------------------------------------- */
int ComputePairLocal::compute_pairs(int flag)
{
int i,j,m,n,ii,jj,inum,jnum,itype,jtype;
tagint itag,jtag;
double xtmp,ytmp,ztmp,delx,dely,delz;
double rsq,radsum,eng,fpair,factor_coul,factor_lj;
int *ilist,*jlist,*numneigh,**firstneigh;
double *ptr;
double **x = atom->x;
double *radius = atom->radius;
tagint *tag = atom->tag;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *special_coul = force->special_coul;
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
// invoke half neighbor list (will copy or build if necessary)
if (flag == 0) neighbor->build_one(list);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// loop over neighbors of my atoms
// skip if I or J are not in group
// for newton = 0 and J = ghost atom,
// need to insure I,J pair is only output by one proc
// use same itag,jtag logic as in Neighbor::neigh_half_nsq()
// for flag = 0, just count pair interactions within force cutoff
// for flag = 1, calculate requested output fields
Pair *pair = force->pair;
double **cutsq = force->pair->cutsq;
m = 0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (!(mask[i] & groupbit)) continue;
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
itag = tag[i];
itype = type[i];
jlist = firstneigh[i];
jnum = numneigh[i];
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
factor_lj = special_lj[sbmask(j)];
factor_coul = special_coul[sbmask(j)];
j &= NEIGHMASK;
if (!(mask[j] & groupbit)) continue;
// itag = jtag is possible for long cutoffs that include images of self
if (newton_pair == 0 && j >= nlocal) {
jtag = tag[j];
if (itag > jtag) {
if ((itag+jtag) % 2 == 0) continue;
} else if (itag < jtag) {
if ((itag+jtag) % 2 == 1) continue;
} else {
if (x[j][2] < ztmp) continue;
if (x[j][2] == ztmp) {
if (x[j][1] < ytmp) continue;
if (x[j][1] == ytmp && x[j][0] < xtmp) continue;
}
}
}
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
jtype = type[j];
if (cutstyle == TYPE) {
if (rsq >= cutsq[itype][jtype]) continue;
} else {
radsum = radius[i] + radius[j];
if (rsq >= radsum*radsum) continue;
}
if (flag) {
if (singleflag)
eng = pair->single(i,j,itype,jtype,rsq,factor_coul,factor_lj,fpair);
else eng = fpair = 0.0;
if (nvalues == 1) ptr = &vector[m];
else ptr = array[m];
for (n = 0; n < nvalues; n++) {
switch (pstyle[n]) {
case DIST:
ptr[n] = sqrt(rsq);
break;
case ENG:
ptr[n] = eng;
break;
case FORCE:
ptr[n] = sqrt(rsq)*fpair;
break;
case FX:
ptr[n] = delx*fpair;
break;
case FY:
ptr[n] = dely*fpair;
break;
case FZ:
ptr[n] = delz*fpair;
break;
case PN:
ptr[n] = pair->svector[pindex[n]];
break;
}
}
}
m++;
}
}
return m;
}
/* ---------------------------------------------------------------------- */
void ComputePairLocal::reallocate(int n)
{
// grow vector or array and indices array
while (nmax < n) nmax += DELTA;
if (nvalues == 1) {
memory->destroy(vector);
memory->create(vector,nmax,"pair/local:vector");
vector_local = vector;
} else {
memory->destroy(array);
memory->create(array,nmax,nvalues,"pair/local:array");
array_local = array;
}
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputePairLocal::memory_usage()
{
double bytes = nmax*nvalues * sizeof(double);
return bytes;
}
diff --git a/src/compute_pe_atom.cpp b/src/compute_pe_atom.cpp
index c04edb09f..f83c91b94 100755
--- a/src/compute_pe_atom.cpp
+++ b/src/compute_pe_atom.cpp
@@ -1,206 +1,206 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_pe_atom.h"
#include "atom.h"
#include "update.h"
#include "comm.h"
#include "force.h"
#include "pair.h"
#include "bond.h"
#include "angle.h"
#include "dihedral.h"
#include "improper.h"
#include "kspace.h"
#include "modify.h"
#include "fix.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputePEAtom::ComputePEAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ energy(NULL)
{
if (narg < 3) error->all(FLERR,"Illegal compute pe/atom command");
peratom_flag = 1;
size_peratom_cols = 0;
peatomflag = 1;
timeflag = 1;
comm_reverse = 1;
if (narg == 3) {
pairflag = 1;
bondflag = angleflag = dihedralflag = improperflag = 1;
kspaceflag = 1;
fixflag = 1;
} else {
pairflag = 0;
bondflag = angleflag = dihedralflag = improperflag = 0;
kspaceflag = 0;
fixflag = 0;
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"pair") == 0) pairflag = 1;
else if (strcmp(arg[iarg],"bond") == 0) bondflag = 1;
else if (strcmp(arg[iarg],"angle") == 0) angleflag = 1;
else if (strcmp(arg[iarg],"dihedral") == 0) dihedralflag = 1;
else if (strcmp(arg[iarg],"improper") == 0) improperflag = 1;
else if (strcmp(arg[iarg],"kspace") == 0) kspaceflag = 1;
else if (strcmp(arg[iarg],"fix") == 0) fixflag = 1;
else error->all(FLERR,"Illegal compute pe/atom command");
iarg++;
}
}
nmax = 0;
- energy = NULL;
}
/* ---------------------------------------------------------------------- */
ComputePEAtom::~ComputePEAtom()
{
memory->destroy(energy);
}
/* ---------------------------------------------------------------------- */
void ComputePEAtom::compute_peratom()
{
int i;
invoked_peratom = update->ntimestep;
if (update->eflag_atom != invoked_peratom)
error->all(FLERR,"Per-atom energy was not tallied on needed timestep");
// grow local energy array if necessary
// needs to be atom->nmax in length
if (atom->nmax > nmax) {
memory->destroy(energy);
nmax = atom->nmax;
memory->create(energy,nmax,"pe/atom:energy");
vector_atom = energy;
}
// npair includes ghosts if either newton flag is set
// b/c some bonds/dihedrals call pair::ev_tally with pairwise info
// nbond includes ghosts if newton_bond is set
// ntotal includes ghosts if either newton flag is set
// KSpace includes ghosts if tip4pflag is set
int nlocal = atom->nlocal;
int npair = nlocal;
int nbond = nlocal;
int ntotal = nlocal;
int nkspace = nlocal;
if (force->newton) npair += atom->nghost;
if (force->newton_bond) nbond += atom->nghost;
if (force->newton) ntotal += atom->nghost;
if (force->kspace && force->kspace->tip4pflag) nkspace += atom->nghost;
// clear local energy array
for (i = 0; i < ntotal; i++) energy[i] = 0.0;
// add in per-atom contributions from each force
if (pairflag && force->pair) {
double *eatom = force->pair->eatom;
for (i = 0; i < npair; i++) energy[i] += eatom[i];
}
if (bondflag && force->bond) {
double *eatom = force->bond->eatom;
for (i = 0; i < nbond; i++) energy[i] += eatom[i];
}
if (angleflag && force->angle) {
double *eatom = force->angle->eatom;
for (i = 0; i < nbond; i++) energy[i] += eatom[i];
}
if (dihedralflag && force->dihedral) {
double *eatom = force->dihedral->eatom;
for (i = 0; i < nbond; i++) energy[i] += eatom[i];
}
if (improperflag && force->improper) {
double *eatom = force->improper->eatom;
for (i = 0; i < nbond; i++) energy[i] += eatom[i];
}
if (kspaceflag && force->kspace) {
double *eatom = force->kspace->eatom;
for (i = 0; i < nkspace; i++) energy[i] += eatom[i];
}
// add in per-atom contributions from relevant fixes
// always only for owned atoms, not ghost
if (fixflag && modify->n_thermo_energy_atom)
modify->thermo_energy_atom(nlocal,energy);
// communicate ghost energy between neighbor procs
if (force->newton || (force->kspace && force->kspace->tip4pflag))
comm->reverse_comm_compute(this);
// zero energy of atoms not in group
// only do this after comm since ghost contributions must be included
int *mask = atom->mask;
for (i = 0; i < nlocal; i++)
if (!(mask[i] & groupbit)) energy[i] = 0.0;
}
/* ---------------------------------------------------------------------- */
int ComputePEAtom::pack_reverse_comm(int n, int first, double *buf)
{
int i,m,last;
m = 0;
last = first + n;
for (i = first; i < last; i++) buf[m++] = energy[i];
return m;
}
/* ---------------------------------------------------------------------- */
void ComputePEAtom::unpack_reverse_comm(int n, int *list, double *buf)
{
int i,j,m;
m = 0;
for (i = 0; i < n; i++) {
j = list[i];
energy[j] += buf[m++];
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputePEAtom::memory_usage()
{
double bytes = nmax * sizeof(double);
return bytes;
}
diff --git a/src/compute_pressure.cpp b/src/compute_pressure.cpp
index ca493e46f..fde19a277 100644
--- a/src/compute_pressure.cpp
+++ b/src/compute_pressure.cpp
@@ -1,302 +1,303 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include <stdlib.h>
#include "compute_pressure.h"
#include "atom.h"
#include "update.h"
#include "domain.h"
#include "modify.h"
#include "fix.h"
#include "force.h"
#include "pair.h"
#include "bond.h"
#include "angle.h"
#include "dihedral.h"
#include "improper.h"
#include "kspace.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputePressure::ComputePressure(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ vptr(NULL), id_temp(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute pressure command");
if (igroup) error->all(FLERR,"Compute pressure must use group all");
scalar_flag = vector_flag = 1;
size_vector = 6;
extscalar = 0;
extvector = 0;
pressflag = 1;
timeflag = 1;
// store temperature ID used by pressure computation
// insure it is valid for temperature computation
if (strcmp(arg[3],"NULL") == 0) id_temp = NULL;
else {
int n = strlen(arg[3]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[3]);
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Could not find compute pressure temperature ID");
if (modify->compute[icompute]->tempflag == 0)
error->all(FLERR,"Compute pressure temperature ID does not "
"compute temperature");
}
// process optional args
if (narg == 4) {
keflag = 1;
pairflag = 1;
bondflag = angleflag = dihedralflag = improperflag = 1;
kspaceflag = fixflag = 1;
} else {
keflag = 0;
pairflag = 0;
bondflag = angleflag = dihedralflag = improperflag = 0;
kspaceflag = fixflag = 0;
int iarg = 4;
while (iarg < narg) {
if (strcmp(arg[iarg],"ke") == 0) keflag = 1;
else if (strcmp(arg[iarg],"pair") == 0) pairflag = 1;
else if (strcmp(arg[iarg],"bond") == 0) bondflag = 1;
else if (strcmp(arg[iarg],"angle") == 0) angleflag = 1;
else if (strcmp(arg[iarg],"dihedral") == 0) dihedralflag = 1;
else if (strcmp(arg[iarg],"improper") == 0) improperflag = 1;
else if (strcmp(arg[iarg],"kspace") == 0) kspaceflag = 1;
else if (strcmp(arg[iarg],"fix") == 0) fixflag = 1;
else if (strcmp(arg[iarg],"virial") == 0) {
pairflag = 1;
bondflag = angleflag = dihedralflag = improperflag = 1;
kspaceflag = fixflag = 1;
} else error->all(FLERR,"Illegal compute pressure command");
iarg++;
}
}
// error check
if (keflag && id_temp == NULL)
error->all(FLERR,"Compute pressure requires temperature ID "
"to include kinetic energy");
vector = new double[6];
nvirial = 0;
vptr = NULL;
}
/* ---------------------------------------------------------------------- */
ComputePressure::~ComputePressure()
{
delete [] id_temp;
delete [] vector;
delete [] vptr;
}
/* ---------------------------------------------------------------------- */
void ComputePressure::init()
{
boltz = force->boltz;
nktv2p = force->nktv2p;
dimension = domain->dimension;
// set temperature compute, must be done in init()
// fixes could have changed or compute_modify could have changed it
if (keflag) {
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Could not find compute pressure temperature ID");
temperature = modify->compute[icompute];
}
// detect contributions to virial
// vptr points to all virial[6] contributions
delete [] vptr;
nvirial = 0;
vptr = NULL;
if (pairflag && force->pair) nvirial++;
if (bondflag && atom->molecular && force->bond) nvirial++;
if (angleflag && atom->molecular && force->angle) nvirial++;
if (dihedralflag && atom->molecular && force->dihedral) nvirial++;
if (improperflag && atom->molecular && force->improper) nvirial++;
if (fixflag)
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->virial_flag) nvirial++;
if (nvirial) {
vptr = new double*[nvirial];
nvirial = 0;
if (pairflag && force->pair) vptr[nvirial++] = force->pair->virial;
if (bondflag && force->bond) vptr[nvirial++] = force->bond->virial;
if (angleflag && force->angle) vptr[nvirial++] = force->angle->virial;
if (dihedralflag && force->dihedral)
vptr[nvirial++] = force->dihedral->virial;
if (improperflag && force->improper)
vptr[nvirial++] = force->improper->virial;
if (fixflag)
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->virial_flag)
vptr[nvirial++] = modify->fix[i]->virial;
}
// flag Kspace contribution separately, since not summed across procs
if (kspaceflag && force->kspace) kspace_virial = force->kspace->virial;
else kspace_virial = NULL;
}
/* ----------------------------------------------------------------------
compute total pressure, averaged over Pxx, Pyy, Pzz
------------------------------------------------------------------------- */
double ComputePressure::compute_scalar()
{
invoked_scalar = update->ntimestep;
if (update->vflag_global != invoked_scalar)
error->all(FLERR,"Virial was not tallied on needed timestep");
// invoke temperature if it hasn't been already
double t;
if (keflag) {
if (temperature->invoked_scalar != update->ntimestep)
t = temperature->compute_scalar();
else t = temperature->scalar;
}
if (dimension == 3) {
inv_volume = 1.0 / (domain->xprd * domain->yprd * domain->zprd);
virial_compute(3,3);
if (keflag)
scalar = (temperature->dof * boltz * t +
virial[0] + virial[1] + virial[2]) / 3.0 * inv_volume * nktv2p;
else
scalar = (virial[0] + virial[1] + virial[2]) / 3.0 * inv_volume * nktv2p;
} else {
inv_volume = 1.0 / (domain->xprd * domain->yprd);
virial_compute(2,2);
if (keflag)
scalar = (temperature->dof * boltz * t +
virial[0] + virial[1]) / 2.0 * inv_volume * nktv2p;
else
scalar = (virial[0] + virial[1]) / 2.0 * inv_volume * nktv2p;
}
return scalar;
}
/* ----------------------------------------------------------------------
compute pressure tensor
assume KE tensor has already been computed
------------------------------------------------------------------------- */
void ComputePressure::compute_vector()
{
invoked_vector = update->ntimestep;
if (update->vflag_global != invoked_vector)
error->all(FLERR,"Virial was not tallied on needed timestep");
if (force->kspace && kspace_virial && force->kspace->scalar_pressure_flag)
error->all(FLERR,"Must use 'kspace_modify pressure/scalar no' for "
"tensor components with kspace_style msm");
// invoke temperature if it hasn't been already
double *ke_tensor;
if (keflag) {
if (temperature->invoked_vector != update->ntimestep)
temperature->compute_vector();
ke_tensor = temperature->vector;
}
if (dimension == 3) {
inv_volume = 1.0 / (domain->xprd * domain->yprd * domain->zprd);
virial_compute(6,3);
if (keflag) {
for (int i = 0; i < 6; i++)
vector[i] = (ke_tensor[i] + virial[i]) * inv_volume * nktv2p;
} else
for (int i = 0; i < 6; i++)
vector[i] = virial[i] * inv_volume * nktv2p;
} else {
inv_volume = 1.0 / (domain->xprd * domain->yprd);
virial_compute(4,2);
if (keflag) {
vector[0] = (ke_tensor[0] + virial[0]) * inv_volume * nktv2p;
vector[1] = (ke_tensor[1] + virial[1]) * inv_volume * nktv2p;
vector[3] = (ke_tensor[3] + virial[3]) * inv_volume * nktv2p;
vector[2] = vector[4] = vector[5] = 0.0;
} else {
vector[0] = virial[0] * inv_volume * nktv2p;
vector[1] = virial[1] * inv_volume * nktv2p;
vector[3] = virial[3] * inv_volume * nktv2p;
vector[2] = vector[4] = vector[5] = 0.0;
}
}
}
/* ---------------------------------------------------------------------- */
void ComputePressure::virial_compute(int n, int ndiag)
{
int i,j;
double v[6],*vcomponent;
for (i = 0; i < n; i++) v[i] = 0.0;
// sum contributions to virial from forces and fixes
for (j = 0; j < nvirial; j++) {
vcomponent = vptr[j];
for (i = 0; i < n; i++) v[i] += vcomponent[i];
}
// sum virial across procs
MPI_Allreduce(v,virial,n,MPI_DOUBLE,MPI_SUM,world);
// KSpace virial contribution is already summed across procs
if (kspace_virial)
for (i = 0; i < n; i++) virial[i] += kspace_virial[i];
// LJ long-range tail correction, only if pair contributions are included
if (force->pair && pairflag && force->pair->tail_flag)
for (i = 0; i < ndiag; i++) virial[i] += force->pair->ptail * inv_volume;
}
/* ---------------------------------------------------------------------- */
void ComputePressure::reset_extra_compute_fix(const char *id_new)
{
delete [] id_temp;
int n = strlen(id_new) + 1;
id_temp = new char[n];
strcpy(id_temp,id_new);
}
diff --git a/src/compute_property_atom.cpp b/src/compute_property_atom.cpp
index c9575dba5..2ce10fdb6 100644
--- a/src/compute_property_atom.cpp
+++ b/src/compute_property_atom.cpp
@@ -1,1689 +1,1688 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include "compute_property_atom.h"
#include "math_extra.h"
#include "atom.h"
#include "atom_vec.h"
#include "atom_vec_ellipsoid.h"
#include "atom_vec_line.h"
#include "atom_vec_tri.h"
#include "atom_vec_body.h"
#include "update.h"
#include "domain.h"
#include "comm.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputePropertyAtom::ComputePropertyAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ index(NULL), vector(NULL), array(NULL), pack_choice(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute property/atom command");
peratom_flag = 1;
nvalues = narg - 3;
if (nvalues == 1) size_peratom_cols = 0;
else size_peratom_cols = nvalues;
// parse input values
// customize a new keyword by adding to if statement
pack_choice = new FnPtrPack[nvalues];
index = new int[nvalues];
int i;
for (int iarg = 3; iarg < narg; iarg++) {
i = iarg-3;
if (strcmp(arg[iarg],"id") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_id;
} else if (strcmp(arg[iarg],"mol") == 0) {
if (!atom->molecule_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_molecule;
} else if (strcmp(arg[iarg],"proc") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_proc;
} else if (strcmp(arg[iarg],"type") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_type;
} else if (strcmp(arg[iarg],"mass") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_mass;
} else if (strcmp(arg[iarg],"x") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_x;
} else if (strcmp(arg[iarg],"y") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_y;
} else if (strcmp(arg[iarg],"z") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_z;
} else if (strcmp(arg[iarg],"xs") == 0) {
if (domain->triclinic)
pack_choice[i] = &ComputePropertyAtom::pack_xs_triclinic;
else pack_choice[i] = &ComputePropertyAtom::pack_xs;
} else if (strcmp(arg[iarg],"ys") == 0) {
if (domain->triclinic)
pack_choice[i] = &ComputePropertyAtom::pack_ys_triclinic;
else pack_choice[i] = &ComputePropertyAtom::pack_ys;
} else if (strcmp(arg[iarg],"zs") == 0) {
if (domain->triclinic)
pack_choice[i] = &ComputePropertyAtom::pack_zs_triclinic;
else pack_choice[i] = &ComputePropertyAtom::pack_zs;
} else if (strcmp(arg[iarg],"xu") == 0) {
if (domain->triclinic)
pack_choice[i] = &ComputePropertyAtom::pack_xu_triclinic;
else pack_choice[i] = &ComputePropertyAtom::pack_xu;
} else if (strcmp(arg[iarg],"yu") == 0) {
if (domain->triclinic)
pack_choice[i] = &ComputePropertyAtom::pack_yu_triclinic;
else pack_choice[i] = &ComputePropertyAtom::pack_yu;
} else if (strcmp(arg[iarg],"zu") == 0) {
if (domain->triclinic)
pack_choice[i] = &ComputePropertyAtom::pack_zu_triclinic;
else pack_choice[i] = &ComputePropertyAtom::pack_zu;
} else if (strcmp(arg[iarg],"ix") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_ix;
} else if (strcmp(arg[iarg],"iy") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_iy;
} else if (strcmp(arg[iarg],"iz") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_iz;
} else if (strcmp(arg[iarg],"vx") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_vx;
} else if (strcmp(arg[iarg],"vy") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_vy;
} else if (strcmp(arg[iarg],"vz") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_vz;
} else if (strcmp(arg[iarg],"fx") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_fx;
} else if (strcmp(arg[iarg],"fy") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_fy;
} else if (strcmp(arg[iarg],"fz") == 0) {
pack_choice[i] = &ComputePropertyAtom::pack_fz;
} else if (strcmp(arg[iarg],"q") == 0) {
if (!atom->q_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_q;
} else if (strcmp(arg[iarg],"mux") == 0) {
if (!atom->mu_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_mux;
} else if (strcmp(arg[iarg],"muy") == 0) {
if (!atom->mu_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_muy;
} else if (strcmp(arg[iarg],"muz") == 0) {
if (!atom->mu_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_muz;
} else if (strcmp(arg[iarg],"mu") == 0) {
if (!atom->mu_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_mu;
} else if (strcmp(arg[iarg],"radius") == 0) {
if (!atom->radius_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_radius;
} else if (strcmp(arg[iarg],"diameter") == 0) {
if (!atom->radius_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_diameter;
} else if (strcmp(arg[iarg],"omegax") == 0) {
if (!atom->omega_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_omegax;
} else if (strcmp(arg[iarg],"omegay") == 0) {
if (!atom->omega_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_omegay;
} else if (strcmp(arg[iarg],"omegaz") == 0) {
if (!atom->omega_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_omegaz;
} else if (strcmp(arg[iarg],"angmomx") == 0) {
if (!atom->angmom_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_angmomx;
} else if (strcmp(arg[iarg],"angmomy") == 0) {
if (!atom->angmom_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_angmomy;
} else if (strcmp(arg[iarg],"angmomz") == 0) {
if (!atom->angmom_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_angmomz;
} else if (strcmp(arg[iarg],"shapex") == 0) {
avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid");
if (!avec_ellipsoid) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_shapex;
} else if (strcmp(arg[iarg],"shapey") == 0) {
avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid");
if (!avec_ellipsoid) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_shapey;
} else if (strcmp(arg[iarg],"shapez") == 0) {
avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid");
if (!avec_ellipsoid) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_shapez;
} else if (strcmp(arg[iarg],"quatw") == 0) {
avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid");
avec_body = (AtomVecBody *) atom->style_match("body");
if (!avec_ellipsoid && !avec_body)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_quatw;
} else if (strcmp(arg[iarg],"quati") == 0) {
avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid");
avec_body = (AtomVecBody *) atom->style_match("body");
if (!avec_ellipsoid && !avec_body)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_quati;
} else if (strcmp(arg[iarg],"quatj") == 0) {
avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid");
avec_body = (AtomVecBody *) atom->style_match("body");
if (!avec_ellipsoid && !avec_body)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_quatj;
} else if (strcmp(arg[iarg],"quatk") == 0) {
avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid");
avec_body = (AtomVecBody *) atom->style_match("body");
if (!avec_ellipsoid && !avec_body)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_quatk;
} else if (strcmp(arg[iarg],"tqx") == 0) {
if (!atom->torque_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_tqx;
} else if (strcmp(arg[iarg],"tqy") == 0) {
if (!atom->torque_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_tqy;
} else if (strcmp(arg[iarg],"tqz") == 0) {
if (!atom->torque_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_tqz;
} else if (strcmp(arg[iarg],"end1x") == 0) {
avec_line = (AtomVecLine *) atom->style_match("line");
if (!avec_line) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_end1x;
} else if (strcmp(arg[iarg],"end1y") == 0) {
avec_line = (AtomVecLine *) atom->style_match("line");
if (!avec_line) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_end1y;
} else if (strcmp(arg[iarg],"end1z") == 0) {
avec_line = (AtomVecLine *) atom->style_match("line");
if (!avec_line) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_end1z;
} else if (strcmp(arg[iarg],"end2x") == 0) {
avec_line = (AtomVecLine *) atom->style_match("line");
if (!avec_line) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_end2x;
} else if (strcmp(arg[iarg],"end2y") == 0) {
avec_line = (AtomVecLine *) atom->style_match("line");
if (!avec_line) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_end2y;
} else if (strcmp(arg[iarg],"end2z") == 0) {
avec_line = (AtomVecLine *) atom->style_match("line");
if (!avec_line) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_end2z;
} else if (strcmp(arg[iarg],"corner1x") == 0) {
avec_tri = (AtomVecTri *) atom->style_match("tri");
if (!avec_tri) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_corner1x;
} else if (strcmp(arg[iarg],"corner1y") == 0) {
avec_tri = (AtomVecTri *) atom->style_match("tri");
if (!avec_tri) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_corner1y;
} else if (strcmp(arg[iarg],"corner1z") == 0) {
avec_tri = (AtomVecTri *) atom->style_match("tri");
if (!avec_tri) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_corner1z;
} else if (strcmp(arg[iarg],"corner2x") == 0) {
avec_tri = (AtomVecTri *) atom->style_match("tri");
if (!avec_tri) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_corner2x;
} else if (strcmp(arg[iarg],"corner2y") == 0) {
avec_tri = (AtomVecTri *) atom->style_match("tri");
if (!avec_tri) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_corner2y;
} else if (strcmp(arg[iarg],"corner2z") == 0) {
avec_tri = (AtomVecTri *) atom->style_match("tri");
if (!avec_tri) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_corner2z;
} else if (strcmp(arg[iarg],"corner3x") == 0) {
avec_tri = (AtomVecTri *) atom->style_match("tri");
if (!avec_tri) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_corner3x;
} else if (strcmp(arg[iarg],"corner3y") == 0) {
avec_tri = (AtomVecTri *) atom->style_match("tri");
if (!avec_tri) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_corner3y;
} else if (strcmp(arg[iarg],"corner3z") == 0) {
avec_tri = (AtomVecTri *) atom->style_match("tri");
if (!avec_tri) error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_corner3z;
} else if (strcmp(arg[iarg],"nbonds") == 0) {
if (!atom->molecule_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_nbonds;
} else if (strstr(arg[iarg],"i_") == arg[iarg]) {
int flag;
index[i] = atom->find_custom(&arg[iarg][2],flag);
if (index[i] < 0 || flag != 0)
error->all(FLERR,"Compute property/atom integer "
"vector does not exist");
pack_choice[i] = &ComputePropertyAtom::pack_iname;
} else if (strstr(arg[iarg],"d_") == arg[iarg]) {
int flag;
index[i] = atom->find_custom(&arg[iarg][2],flag);
if (index[i] < 0 || flag != 1)
error->all(FLERR,"Compute property/atom floating point "
"vector does not exist");
pack_choice[i] = &ComputePropertyAtom::pack_dname;
// check if atom style recognizes keyword
} else {
index[i] = atom->avec->property_atom(arg[iarg]);
if (index[i] < 0)
error->all(FLERR,"Invalid keyword in compute property/atom command");
pack_choice[i] = &ComputePropertyAtom::pack_property_atom;
}
}
nmax = 0;
- vector = NULL;
- array = NULL;
}
/* ---------------------------------------------------------------------- */
ComputePropertyAtom::~ComputePropertyAtom()
{
delete [] pack_choice;
delete [] index;
memory->destroy(vector);
memory->destroy(array);
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::init()
{
avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid");
avec_line = (AtomVecLine *) atom->style_match("line");
avec_tri = (AtomVecTri *) atom->style_match("tri");
avec_body = (AtomVecBody *) atom->style_match("body");
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::compute_peratom()
{
invoked_peratom = update->ntimestep;
// grow vector or array if necessary
if (atom->nmax > nmax) {
nmax = atom->nmax;
if (nvalues == 1) {
memory->destroy(vector);
memory->create(vector,nmax,"property/atom:vector");
vector_atom = vector;
} else {
memory->destroy(array);
memory->create(array,nmax,nvalues,"property/atom:array");
array_atom = array;
}
}
// fill vector or array with per-atom values
if (nvalues == 1) {
buf = vector;
(this->*pack_choice[0])(0);
} else {
if (nmax) buf = &array[0][0];
else buf = NULL;
for (int n = 0; n < nvalues; n++)
(this->*pack_choice[n])(n);
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputePropertyAtom::memory_usage()
{
double bytes = nmax*nvalues * sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
one method for every keyword compute property/atom can output
the atom property is packed into buf starting at n with stride nvalues
customize a new keyword by adding a method
------------------------------------------------------------------------- */
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_id(int n)
{
tagint *tag = atom->tag;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = tag[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_molecule(int n)
{
tagint *molecule = atom->molecule;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = molecule[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_proc(int n)
{
int *mask = atom->mask;
int nlocal = atom->nlocal;
int me = comm->me;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = me;
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_type(int n)
{
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = type[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_mass(int n)
{
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (rmass) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = rmass[i];
else buf[n] = 0.0;
n += nvalues;
}
} else {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = mass[type[i]];
else buf[n] = 0.0;
n += nvalues;
}
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_x(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = x[i][0];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_y(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = x[i][1];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_z(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = x[i][2];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_xs(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double boxxlo = domain->boxlo[0];
double invxprd = 1.0/domain->xprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = (x[i][0] - boxxlo) * invxprd;
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_ys(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double boxylo = domain->boxlo[1];
double invyprd = 1.0/domain->yprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = (x[i][1] - boxylo) * invyprd;
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_zs(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double boxzlo = domain->boxlo[2];
double invzprd = 1.0/domain->zprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = (x[i][2] - boxzlo) * invzprd;
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_xs_triclinic(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
buf[n] = h_inv[0]*(x[i][0]-boxlo[0]) +
h_inv[5]*(x[i][1]-boxlo[1]) + h_inv[4]*(x[i][2]-boxlo[2]);
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_ys_triclinic(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
buf[n] = h_inv[1]*(x[i][1]-boxlo[1]) + h_inv[3]*(x[i][2]-boxlo[2]);
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_zs_triclinic(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
buf[n] = h_inv[2]*(x[i][2]-boxlo[2]);
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_xu(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double xprd = domain->xprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
buf[n] = x[i][0] + ((image[i] & IMGMASK) - IMGMAX) * xprd;
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_yu(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double yprd = domain->yprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
buf[n] = x[i][1] + ((image[i] >> IMGBITS & IMGMASK) - IMGMAX) * yprd;
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_zu(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double zprd = domain->zprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
buf[n] = x[i][2] + ((image[i] >> IMG2BITS) - IMGMAX) * zprd;
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_xu_triclinic(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *h = domain->h;
int xbox,ybox,zbox;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
buf[n] = x[i][0] + h[0]*xbox + h[5]*ybox + h[4]*zbox;
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_yu_triclinic(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *h = domain->h;
int ybox,zbox;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
buf[n] = x[i][1] + h[1]*ybox + h[3]*zbox;
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_zu_triclinic(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *h = domain->h;
int zbox;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
zbox = (image[i] >> IMG2BITS) - IMGMAX;
buf[n] = x[i][2] + h[2]*zbox;
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_ix(int n)
{
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = (image[i] & IMGMASK) - IMGMAX;
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_iy(int n)
{
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_iz(int n)
{
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = (image[i] >> IMG2BITS) - IMGMAX;
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_vx(int n)
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = v[i][0];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_vy(int n)
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = v[i][1];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_vz(int n)
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = v[i][2];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_fx(int n)
{
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = f[i][0];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_fy(int n)
{
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = f[i][1];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_fz(int n)
{
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = f[i][2];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_q(int n)
{
double *q = atom->q;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = q[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_mux(int n)
{
double **mu = atom->mu;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = mu[i][0];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_muy(int n)
{
double **mu = atom->mu;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = mu[i][1];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_muz(int n)
{
double **mu = atom->mu;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = mu[i][2];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_mu(int n)
{
double **mu = atom->mu;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = mu[i][3];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_radius(int n)
{
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = radius[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_diameter(int n)
{
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = 2.0*radius[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_omegax(int n)
{
double **omega = atom->omega;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = omega[i][0];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_omegay(int n)
{
double **omega = atom->omega;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = omega[i][1];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_omegaz(int n)
{
double **omega = atom->omega;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = omega[i][2];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_angmomx(int n)
{
double **angmom = atom->angmom;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = angmom[i][0];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_angmomy(int n)
{
double **angmom = atom->angmom;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = angmom[i][1];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_angmomz(int n)
{
double **angmom = atom->angmom;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = angmom[i][2];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_shapex(int n)
{
AtomVecEllipsoid::Bonus *bonus = avec_ellipsoid->bonus;
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && ellipsoid[i] >= 0)
buf[n] = bonus[ellipsoid[i]].shape[0];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_shapey(int n)
{
AtomVecEllipsoid::Bonus *bonus = avec_ellipsoid->bonus;
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && ellipsoid[i] >= 0)
buf[n] = bonus[ellipsoid[i]].shape[1];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_shapez(int n)
{
AtomVecEllipsoid::Bonus *bonus = avec_ellipsoid->bonus;
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && ellipsoid[i] >= 0)
buf[n] = bonus[ellipsoid[i]].shape[2];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_quatw(int n)
{
if (avec_ellipsoid) {
AtomVecEllipsoid::Bonus *bonus = avec_ellipsoid->bonus;
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && ellipsoid[i] >= 0)
buf[n] = bonus[ellipsoid[i]].quat[0];
else buf[n] = 0.0;
n += nvalues;
}
} else {
AtomVecBody::Bonus *bonus = avec_body->bonus;
int *body = atom->body;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && body[i] >= 0)
buf[n] = bonus[body[i]].quat[0];
else buf[n] = 0.0;
n += nvalues;
}
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_quati(int n)
{
if (avec_ellipsoid) {
AtomVecEllipsoid::Bonus *bonus = avec_ellipsoid->bonus;
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && ellipsoid[i] >= 0)
buf[n] = bonus[ellipsoid[i]].quat[1];
else buf[n] = 0.0;
n += nvalues;
}
} else {
AtomVecBody::Bonus *bonus = avec_body->bonus;
int *body = atom->body;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && body[i] >= 0)
buf[n] = bonus[body[i]].quat[1];
else buf[n] = 0.0;
n += nvalues;
}
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_quatj(int n)
{
if (avec_ellipsoid) {
AtomVecEllipsoid::Bonus *bonus = avec_ellipsoid->bonus;
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && ellipsoid[i] >= 0)
buf[n] = bonus[ellipsoid[i]].quat[2];
else buf[n] = 0.0;
n += nvalues;
}
} else {
AtomVecBody::Bonus *bonus = avec_body->bonus;
int *body = atom->body;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && body[i] >= 0)
buf[n] = bonus[body[i]].quat[2];
else buf[n] = 0.0;
n += nvalues;
}
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_quatk(int n)
{
if (avec_ellipsoid) {
AtomVecEllipsoid::Bonus *bonus = avec_ellipsoid->bonus;
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && ellipsoid[i] >= 0)
buf[n] = bonus[ellipsoid[i]].quat[3];
else buf[n] = 0.0;
n += nvalues;
}
} else {
AtomVecBody::Bonus *bonus = avec_body->bonus;
int *body = atom->body;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && body[i] >= 0)
buf[n] = bonus[body[i]].quat[3];
else buf[n] = 0.0;
n += nvalues;
}
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_tqx(int n)
{
double **torque = atom->torque;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = torque[i][0];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_tqy(int n)
{
double **torque = atom->torque;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = torque[i][1];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_tqz(int n)
{
double **torque = atom->torque;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = torque[i][2];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_end1x(int n)
{
AtomVecLine::Bonus *bonus = avec_line->bonus;
int *line = atom->line;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && line[i] >= 0)
buf[n] = x[i][0] - 0.5*bonus[line[i]].length*cos(bonus[line[i]].theta);
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_end1y(int n)
{
AtomVecLine::Bonus *bonus = avec_line->bonus;
int *line = atom->line;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && line[i] >= 0)
buf[n] = x[i][1] - 0.5*bonus[line[i]].length*sin(bonus[line[i]].theta);
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_end1z(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = x[i][2];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_end2x(int n)
{
AtomVecLine::Bonus *bonus = avec_line->bonus;
int *line = atom->line;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && line[i] >= 0)
buf[n] = x[i][0] + 0.5*bonus[line[i]].length*cos(bonus[line[i]].theta);
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_end2y(int n)
{
AtomVecLine::Bonus *bonus = avec_line->bonus;
int *line = atom->line;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && line[i] >= 0)
buf[n] = x[i][1] + 0.5*bonus[line[i]].length*sin(bonus[line[i]].theta);
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_end2z(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = x[i][2];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_corner1x(int n)
{
AtomVecTri::Bonus *bonus = avec_tri->bonus;
int *tri = atom->tri;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double p[3][3],c[3];
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && tri[i] >= 0) {
MathExtra::quat_to_mat(bonus[tri[i]].quat,p);
MathExtra::matvec(p,bonus[tri[i]].c1,c);
buf[n] = x[i][0] + c[0];
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_corner1y(int n)
{
AtomVecTri::Bonus *bonus = avec_tri->bonus;
int *tri = atom->tri;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double p[3][3],c[3];
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && tri[i] >= 0) {
MathExtra::quat_to_mat(bonus[tri[i]].quat,p);
MathExtra::matvec(p,bonus[tri[i]].c1,c);
buf[n] = x[i][1] + c[1];
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_corner1z(int n)
{
AtomVecTri::Bonus *bonus = avec_tri->bonus;
int *tri = atom->tri;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double p[3][3],c[3];
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && tri[i] >= 0) {
MathExtra::quat_to_mat(bonus[tri[i]].quat,p);
MathExtra::matvec(p,bonus[tri[i]].c1,c);
buf[n] = x[i][2] + c[2];
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_corner2x(int n)
{
AtomVecTri::Bonus *bonus = avec_tri->bonus;
int *tri = atom->tri;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double p[3][3],c[3];
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && tri[i] >= 0) {
MathExtra::quat_to_mat(bonus[tri[i]].quat,p);
MathExtra::matvec(p,bonus[tri[i]].c2,c);
buf[n] = x[i][0] + c[0];
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_corner2y(int n)
{
AtomVecTri::Bonus *bonus = avec_tri->bonus;
int *tri = atom->tri;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double p[3][3],c[3];
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && tri[i] >= 0) {
MathExtra::quat_to_mat(bonus[tri[i]].quat,p);
MathExtra::matvec(p,bonus[tri[i]].c2,c);
buf[n] = x[i][1] + c[1];
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_corner2z(int n)
{
AtomVecTri::Bonus *bonus = avec_tri->bonus;
int *tri = atom->tri;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double p[3][3],c[3];
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && tri[i] >= 0) {
MathExtra::quat_to_mat(bonus[tri[i]].quat,p);
MathExtra::matvec(p,bonus[tri[i]].c2,c);
buf[n] = x[i][2] + c[2];
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_corner3x(int n)
{
AtomVecTri::Bonus *bonus = avec_tri->bonus;
int *tri = atom->tri;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double p[3][3],c[3];
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && tri[i] >= 0) {
MathExtra::quat_to_mat(bonus[tri[i]].quat,p);
MathExtra::matvec(p,bonus[tri[i]].c3,c);
buf[n] = x[i][0] + c[0];
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_corner3y(int n)
{
AtomVecTri::Bonus *bonus = avec_tri->bonus;
int *tri = atom->tri;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double p[3][3],c[3];
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && tri[i] >= 0) {
MathExtra::quat_to_mat(bonus[tri[i]].quat,p);
MathExtra::matvec(p,bonus[tri[i]].c3,c);
buf[n] = x[i][1] + c[1];
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_corner3z(int n)
{
AtomVecTri::Bonus *bonus = avec_tri->bonus;
int *tri = atom->tri;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double p[3][3],c[3];
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && tri[i] >= 0) {
MathExtra::quat_to_mat(bonus[tri[i]].quat,p);
MathExtra::matvec(p,bonus[tri[i]].c3,c);
buf[n] = x[i][2] + c[2];
} else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_nbonds(int n)
{
int *num_bond = atom->num_bond;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = num_bond[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_iname(int n)
{
int *ivector = atom->ivector[index[n]];
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = ivector[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_dname(int n)
{
double *dvector = atom->dvector[index[n]];
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = dvector[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_property_atom(int n)
{
atom->avec->pack_property_atom(index[n],&buf[n],nvalues,groupbit);
}
diff --git a/src/compute_property_chunk.cpp b/src/compute_property_chunk.cpp
index 956774891..1461a83ad 100644
--- a/src/compute_property_chunk.cpp
+++ b/src/compute_property_chunk.cpp
@@ -1,338 +1,336 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_property_chunk.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputePropertyChunk::ComputePropertyChunk(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ idchunk(NULL), count_one(NULL), count_all(NULL)
{
if (narg < 5) error->all(FLERR,"Illegal compute property/chunk command");
// ID of compute chunk/atom
int n = strlen(arg[3]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[3]);
init();
// parse values
nvalues = narg - 4;
pack_choice = new FnPtrPack[nvalues];
countflag = 0;
int i;
for (int iarg = 4; iarg < narg; iarg++) {
i = iarg-4;
if (strcmp(arg[iarg],"count") == 0) {
pack_choice[i] = &ComputePropertyChunk::pack_count;
countflag = 1;
} else if (strcmp(arg[iarg],"id") == 0) {
if (!cchunk->compress)
error->all(FLERR,"Compute chunk/atom stores no IDs for "
"compute property/chunk");
pack_choice[i] = &ComputePropertyChunk::pack_id;
} else if (strcmp(arg[iarg],"coord1") == 0) {
if (cchunk->ncoord < 1)
error->all(FLERR,"Compute chunk/atom stores no coord1 for "
"compute property/chunk");
pack_choice[i] = &ComputePropertyChunk::pack_coord1;
} else if (strcmp(arg[iarg],"coord2") == 0) {
if (cchunk->ncoord < 2)
error->all(FLERR,"Compute chunk/atom stores no coord2 for "
"compute property/chunk");
pack_choice[i] = &ComputePropertyChunk::pack_coord2;
} else if (strcmp(arg[iarg],"coord3") == 0) {
if (cchunk->ncoord < 3)
error->all(FLERR,"Compute chunk/atom stores no coord3 for "
"compute property/chunk");
pack_choice[i] = &ComputePropertyChunk::pack_coord3;
} else error->all(FLERR,
"Invalid keyword in compute property/chunk command");
}
// initialization
nchunk = 1;
maxchunk = 0;
- vector = NULL;
- array = NULL;
- count_one = count_all = NULL;
allocate();
if (nvalues == 1) {
vector_flag = 1;
size_vector = 0;
size_vector_variable = 1;
extvector = 0;
} else {
array_flag = 1;
size_array_cols = nvalues;
size_array_rows = 0;
size_array_rows_variable = 1;
extarray = 0;
}
}
/* ---------------------------------------------------------------------- */
ComputePropertyChunk::~ComputePropertyChunk()
{
delete [] idchunk;
delete [] pack_choice;
memory->destroy(vector);
memory->destroy(array);
memory->destroy(count_one);
memory->destroy(count_all);
}
/* ---------------------------------------------------------------------- */
void ComputePropertyChunk::init()
{
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for "
"compute property/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Compute property/chunk does not use chunk/atom compute");
}
/* ---------------------------------------------------------------------- */
void ComputePropertyChunk::compute_vector()
{
invoked_vector = update->ntimestep;
// compute chunk/atom assigns atoms to chunk IDs
// if need count, extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
if (nchunk > maxchunk) allocate();
if (nvalues == 1) size_vector = nchunk;
else size_array_rows = nchunk;
if (countflag) {
cchunk->compute_ichunk();
ichunk = cchunk->ichunk;
}
// fill vector
buf = vector;
(this->*pack_choice[0])(0);
}
/* ---------------------------------------------------------------------- */
void ComputePropertyChunk::compute_array()
{
invoked_array = update->ntimestep;
// compute chunk/atom assigns atoms to chunk IDs
// if need count, extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
if (nchunk > maxchunk) allocate();
if (nvalues == 1) size_vector = nchunk;
else size_array_rows = nchunk;
if (countflag) {
cchunk->compute_ichunk();
ichunk = cchunk->ichunk;
}
// fill array
if (array) buf = &array[0][0];
for (int n = 0; n < nvalues; n++)
(this->*pack_choice[n])(n);
}
/* ----------------------------------------------------------------------
lock methods: called by fix ave/time
these methods insure vector/array size is locked for Nfreq epoch
by passing lock info along to compute chunk/atom
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
increment lock counter
------------------------------------------------------------------------- */
void ComputePropertyChunk::lock_enable()
{
cchunk->lockcount++;
}
/* ----------------------------------------------------------------------
decrement lock counter in compute chunk/atom, it if still exists
------------------------------------------------------------------------- */
void ComputePropertyChunk::lock_disable()
{
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->lockcount--;
}
}
/* ----------------------------------------------------------------------
calculate and return # of chunks = length of vector/array
------------------------------------------------------------------------- */
int ComputePropertyChunk::lock_length()
{
nchunk = cchunk->setup_chunks();
return nchunk;
}
/* ----------------------------------------------------------------------
set the lock from startstep to stopstep
------------------------------------------------------------------------- */
void ComputePropertyChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
cchunk->lock(fixptr,startstep,stopstep);
}
/* ----------------------------------------------------------------------
unset the lock
------------------------------------------------------------------------- */
void ComputePropertyChunk::unlock(Fix *fixptr)
{
cchunk->unlock(fixptr);
}
/* ----------------------------------------------------------------------
free and reallocate per-chunk arrays
------------------------------------------------------------------------- */
void ComputePropertyChunk::allocate()
{
memory->destroy(vector);
memory->destroy(array);
memory->destroy(count_one);
memory->destroy(count_all);
maxchunk = nchunk;
if (nvalues == 1) memory->create(vector,maxchunk,"property/chunk:vector");
else memory->create(array,maxchunk,nvalues,"property/chunk:array");
if (countflag) {
memory->create(count_one,maxchunk,"property/chunk:count_one");
memory->create(count_all,maxchunk,"property/chunk:count_all");
}
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputePropertyChunk::memory_usage()
{
double bytes = (bigint) nchunk * nvalues * sizeof(double);
if (countflag) bytes += (bigint) nchunk * 2 * sizeof(int);
return bytes;
}
/* ----------------------------------------------------------------------
one method for every keyword compute property/chunk can output
the property is packed into buf starting at n with stride nvalues
customize a new keyword by adding a method
------------------------------------------------------------------------- */
/* ---------------------------------------------------------------------- */
void ComputePropertyChunk::pack_count(int n)
{
int index;
for (int m = 0; m < nchunk; m++) count_one[m] = 0;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
count_one[index]++;
}
}
MPI_Allreduce(count_one,count_all,nchunk,MPI_INT,MPI_SUM,world);
for (int m = 0; m < nchunk; m++) {
buf[n] = count_all[m];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyChunk::pack_id(int n)
{
int *origID = cchunk->chunkID;
for (int m = 0; m < nchunk; m++) {
buf[n] = origID[m];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyChunk::pack_coord1(int n)
{
double **coord = cchunk->coord;
for (int m = 0; m < nchunk; m++) {
buf[n] = coord[m][0];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyChunk::pack_coord2(int n)
{
double **coord = cchunk->coord;
for (int m = 0; m < nchunk; m++) {
buf[n] = coord[m][1];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyChunk::pack_coord3(int n)
{
double **coord = cchunk->coord;
for (int m = 0; m < nchunk; m++) {
buf[n] = coord[m][2];
n += nvalues;
}
}
diff --git a/src/compute_property_local.cpp b/src/compute_property_local.cpp
index 60460f271..b9472cb45 100644
--- a/src/compute_property_local.cpp
+++ b/src/compute_property_local.cpp
@@ -1,967 +1,965 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_property_local.h"
#include "atom.h"
#include "atom_vec.h"
#include "update.h"
#include "force.h"
#include "pair.h"
#include "neighbor.h"
#include "neigh_request.h"
#include "neigh_list.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{NONE,NEIGH,PAIR,BOND,ANGLE,DIHEDRAL,IMPROPER};
enum{TYPE,RADIUS};
#define DELTA 10000
/* ---------------------------------------------------------------------- */
ComputePropertyLocal::ComputePropertyLocal(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ vector(NULL), array(NULL), indices(NULL), pack_choice(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute property/local command");
local_flag = 1;
nvalues = narg - 3;
pack_choice = new FnPtrPack[nvalues];
kindflag = NONE;
int i;
nvalues = 0;
int iarg = 3;
while (iarg < narg) {
i = iarg-3;
if (strcmp(arg[iarg],"natom1") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_patom1;
if (kindflag != NONE && kindflag != NEIGH)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = NEIGH;
} else if (strcmp(arg[iarg],"natom2") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_patom2;
if (kindflag != NONE && kindflag != NEIGH)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = NEIGH;
} else if (strcmp(arg[iarg],"ntype1") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_ptype1;
if (kindflag != NONE && kindflag != NEIGH)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = NEIGH;
} else if (strcmp(arg[iarg],"ntype2") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_ptype2;
if (kindflag != NONE && kindflag != NEIGH)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = NEIGH;
} else if (strcmp(arg[iarg],"patom1") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_patom1;
if (kindflag != NONE && kindflag != PAIR)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = PAIR;
} else if (strcmp(arg[iarg],"patom2") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_patom2;
if (kindflag != NONE && kindflag != PAIR)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = PAIR;
} else if (strcmp(arg[iarg],"ptype1") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_ptype1;
if (kindflag != NONE && kindflag != PAIR)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = PAIR;
} else if (strcmp(arg[iarg],"ptype2") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_ptype2;
if (kindflag != NONE && kindflag != PAIR)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = PAIR;
} else if (strcmp(arg[iarg],"batom1") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_batom1;
if (kindflag != NONE && kindflag != BOND)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = BOND;
} else if (strcmp(arg[iarg],"batom2") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_batom2;
if (kindflag != NONE && kindflag != BOND)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = BOND;
} else if (strcmp(arg[iarg],"btype") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_btype;
if (kindflag != NONE && kindflag != BOND)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = BOND;
} else if (strcmp(arg[iarg],"aatom1") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_aatom1;
if (kindflag != NONE && kindflag != ANGLE)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = ANGLE;
} else if (strcmp(arg[iarg],"aatom2") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_aatom2;
if (kindflag != NONE && kindflag != ANGLE)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = ANGLE;
} else if (strcmp(arg[iarg],"aatom3") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_aatom3;
if (kindflag != NONE && kindflag != ANGLE)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = ANGLE;
} else if (strcmp(arg[iarg],"atype") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_atype;
if (kindflag != NONE && kindflag != ANGLE)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = ANGLE;
} else if (strcmp(arg[iarg],"datom1") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_datom1;
if (kindflag != NONE && kindflag != DIHEDRAL)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = DIHEDRAL;
} else if (strcmp(arg[iarg],"datom2") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_datom2;
if (kindflag != NONE && kindflag != DIHEDRAL)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = DIHEDRAL;
} else if (strcmp(arg[iarg],"datom3") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_datom3;
if (kindflag != NONE && kindflag != DIHEDRAL)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = DIHEDRAL;
} else if (strcmp(arg[iarg],"datom4") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_datom4;
if (kindflag != NONE && kindflag != DIHEDRAL)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = DIHEDRAL;
} else if (strcmp(arg[iarg],"dtype") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_dtype;
if (kindflag != NONE && kindflag != DIHEDRAL)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = DIHEDRAL;
} else if (strcmp(arg[iarg],"iatom1") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_iatom1;
if (kindflag != NONE && kindflag != IMPROPER)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = IMPROPER;
} else if (strcmp(arg[iarg],"iatom2") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_iatom2;
if (kindflag != NONE && kindflag != IMPROPER)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = IMPROPER;
} else if (strcmp(arg[iarg],"iatom3") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_iatom3;
if (kindflag != NONE && kindflag != IMPROPER)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = IMPROPER;
} else if (strcmp(arg[iarg],"iatom4") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_iatom4;
if (kindflag != NONE && kindflag != IMPROPER)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = IMPROPER;
} else if (strcmp(arg[iarg],"itype") == 0) {
pack_choice[i] = &ComputePropertyLocal::pack_itype;
if (kindflag != NONE && kindflag != IMPROPER)
error->all(FLERR,
"Compute property/local cannot use these inputs together");
kindflag = IMPROPER;
} else break;
nvalues++;
iarg++;
}
if (nvalues == 1) size_local_cols = 0;
else size_local_cols = nvalues;
// optional args
cutstyle = TYPE;
while (iarg < narg) {
if (strcmp(arg[iarg],"cutoff") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute property/local command");
if (strcmp(arg[iarg+1],"type") == 0) cutstyle = TYPE;
else if (strcmp(arg[iarg+1],"radius") == 0) cutstyle = RADIUS;
else error->all(FLERR,"Illegal compute property/local command");
iarg += 2;
} else error->all(FLERR,"Illegal compute property/local command");
}
// error check
if (atom->molecular == 2 && (kindflag == BOND || kindflag == ANGLE ||
kindflag == DIHEDRAL || kindflag == IMPROPER))
error->all(FLERR,"Compute property/local does not (yet) work "
"with atom_style template");
if (kindflag == BOND && atom->avec->bonds_allow == 0)
error->all(FLERR,
"Compute property/local for property that isn't allocated");
if (kindflag == ANGLE && atom->avec->angles_allow == 0)
error->all(FLERR,
"Compute property/local for property that isn't allocated");
if (kindflag == DIHEDRAL && atom->avec->dihedrals_allow == 0)
error->all(FLERR,
"Compute property/local for property that isn't allocated");
if (kindflag == IMPROPER && atom->avec->impropers_allow == 0)
error->all(FLERR,
"Compute property/local for property that isn't allocated");
if (cutstyle == RADIUS && !atom->radius_flag)
error->all(FLERR,"Compute property/local requires atom attribute radius");
nmax = 0;
- vector = NULL;
- array = NULL;
- indices = NULL;
}
/* ---------------------------------------------------------------------- */
ComputePropertyLocal::~ComputePropertyLocal()
{
delete [] pack_choice;
memory->destroy(vector);
memory->destroy(array);
memory->destroy(indices);
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::init()
{
if (kindflag == NEIGH || kindflag == PAIR) {
if (force->pair == NULL)
error->all(FLERR,"No pair style is defined for compute property/local");
if (force->pair->single_enable == 0)
error->all(FLERR,"Pair style does not support compute property/local");
}
// for NEIGH/PAIR need an occasional half neighbor list
if (kindflag == NEIGH || kindflag == PAIR) {
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->occasional = 1;
}
// do initial memory allocation so that memory_usage() is correct
// cannot be done yet for NEIGH/PAIR, since neigh list does not exist
if (kindflag == NEIGH) ncount = 0;
else if (kindflag == PAIR) ncount = 0;
else if (kindflag == BOND) ncount = count_bonds(0);
else if (kindflag == ANGLE) ncount = count_angles(0);
else if (kindflag == DIHEDRAL) ncount = count_dihedrals(0);
else if (kindflag == IMPROPER) ncount = count_impropers(0);
if (ncount > nmax) reallocate(ncount);
size_local_rows = ncount;
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::compute_local()
{
invoked_local = update->ntimestep;
// count local entries and generate list of indices
if (kindflag == NEIGH) ncount = count_pairs(0,0);
else if (kindflag == PAIR) ncount = count_pairs(0,1);
else if (kindflag == BOND) ncount = count_bonds(0);
else if (kindflag == ANGLE) ncount = count_angles(0);
else if (kindflag == DIHEDRAL) ncount = count_dihedrals(0);
else if (kindflag == IMPROPER) ncount = count_impropers(0);
if (ncount > nmax) reallocate(ncount);
size_local_rows = ncount;
if (kindflag == NEIGH) ncount = count_pairs(1,0);
else if (kindflag == PAIR) ncount = count_pairs(1,1);
else if (kindflag == BOND) ncount = count_bonds(1);
else if (kindflag == ANGLE) ncount = count_angles(1);
else if (kindflag == DIHEDRAL) ncount = count_dihedrals(1);
else if (kindflag == IMPROPER) ncount = count_impropers(1);
// fill vector or array with local values
if (nvalues == 1) {
buf = vector;
(this->*pack_choice[0])(0);
} else {
if (array) buf = &array[0][0];
for (int n = 0; n < nvalues; n++)
(this->*pack_choice[n])(n);
}
}
/* ----------------------------------------------------------------------
count pairs and compute pair info on this proc
only count pair once if newton_pair is off
both atom I,J must be in group
if allflag is set, compute requested info about pair
if forceflag = 1, pair must be within force cutoff, else neighbor cutoff
------------------------------------------------------------------------- */
int ComputePropertyLocal::count_pairs(int allflag, int forceflag)
{
int i,j,m,ii,jj,inum,jnum,itype,jtype;
tagint itag,jtag;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq,radsum;
int *ilist,*jlist,*numneigh,**firstneigh;
double **x = atom->x;
double *radius = atom->radius;
tagint *tag = atom->tag;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int newton_pair = force->newton_pair;
// invoke half neighbor list (will copy or build if necessary)
if (allflag == 0) neighbor->build_one(list);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// loop over neighbors of my atoms
// skip if I or J are not in group
// for newton = 0 and J = ghost atom,
// need to insure I,J pair is only output by one proc
// use same itag,jtag logic as in Neighbor::neigh_half_nsq()
double **cutsq = force->pair->cutsq;
m = 0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (!(mask[i] & groupbit)) continue;
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
itag = tag[i];
itype = type[i];
jlist = firstneigh[i];
jnum = numneigh[i];
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
if (!(mask[j] & groupbit)) continue;
// itag = jtag is possible for long cutoffs that include images of self
if (newton_pair == 0 && j >= nlocal) {
jtag = tag[j];
if (itag > jtag) {
if ((itag+jtag) % 2 == 0) continue;
} else if (itag < jtag) {
if ((itag+jtag) % 2 == 1) continue;
} else {
if (x[j][2] < ztmp) continue;
if (x[j][2] == ztmp) {
if (x[j][1] < ytmp) continue;
if (x[j][1] == ytmp && x[j][0] < xtmp) continue;
}
}
}
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
jtype = type[j];
if (forceflag) {
if (cutstyle == TYPE) {
if (rsq >= cutsq[itype][jtype]) continue;
} else {
radsum = radius[i] + radius[j];
if (rsq >= radsum*radsum) continue;
}
}
if (allflag) {
indices[m][0] = i;
indices[m][1] = j;
}
m++;
}
}
return m;
}
/* ----------------------------------------------------------------------
count bonds on this proc
only count bond once if newton_bond is off
all atoms in interaction must be in group
all atoms in interaction must be known to proc
if bond is deleted (type = 0), do not count
if bond is turned off (type < 0), still count
------------------------------------------------------------------------- */
int ComputePropertyLocal::count_bonds(int flag)
{
int i,atom1,atom2;
int *num_bond = atom->num_bond;
tagint **bond_atom = atom->bond_atom;
int **bond_type = atom->bond_type;
tagint *tag = atom->tag;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int newton_bond = force->newton_bond;
int m = 0;
for (atom1 = 0; atom1 < nlocal; atom1++) {
if (!(mask[atom1] & groupbit)) continue;
for (i = 0; i < num_bond[atom1]; i++) {
atom2 = atom->map(bond_atom[atom1][i]);
if (atom2 < 0 || !(mask[atom2] & groupbit)) continue;
if (newton_bond == 0 && tag[atom1] > tag[atom2]) continue;
if (bond_type[atom1][i] == 0) continue;
if (flag) {
indices[m][0] = atom1;
indices[m][1] = i;
}
m++;
}
}
return m;
}
/* ----------------------------------------------------------------------
count angles on this proc
only count if 2nd atom is the one storing the angle
all atoms in interaction must be in group
all atoms in interaction must be known to proc
if angle is deleted (type = 0), do not count
if angle is turned off (type < 0), still count
------------------------------------------------------------------------- */
int ComputePropertyLocal::count_angles(int flag)
{
int i,atom1,atom2,atom3;
int *num_angle = atom->num_angle;
tagint **angle_atom1 = atom->angle_atom1;
tagint **angle_atom2 = atom->angle_atom2;
tagint **angle_atom3 = atom->angle_atom3;
int **angle_type = atom->angle_type;
tagint *tag = atom->tag;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int m = 0;
for (atom2 = 0; atom2 < nlocal; atom2++) {
if (!(mask[atom2] & groupbit)) continue;
for (i = 0; i < num_angle[atom2]; i++) {
if (tag[atom2] != angle_atom2[atom2][i]) continue;
atom1 = atom->map(angle_atom1[atom2][i]);
if (atom1 < 0 || !(mask[atom1] & groupbit)) continue;
atom3 = atom->map(angle_atom3[atom2][i]);
if (atom3 < 0 || !(mask[atom3] & groupbit)) continue;
if (angle_type[atom2][i] == 0) continue;
if (flag) {
indices[m][0] = atom2;
indices[m][1] = i;
}
m++;
}
}
return m;
}
/* ----------------------------------------------------------------------
count dihedrals on this proc
only count if 2nd atom is the one storing the dihedral
all atoms in interaction must be in group
all atoms in interaction must be known to proc
------------------------------------------------------------------------- */
int ComputePropertyLocal::count_dihedrals(int flag)
{
int i,atom1,atom2,atom3,atom4;
int *num_dihedral = atom->num_dihedral;
tagint **dihedral_atom1 = atom->dihedral_atom1;
tagint **dihedral_atom2 = atom->dihedral_atom2;
tagint **dihedral_atom3 = atom->dihedral_atom3;
tagint **dihedral_atom4 = atom->dihedral_atom4;
tagint *tag = atom->tag;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int m = 0;
for (atom2 = 0; atom2 < nlocal; atom2++) {
if (!(mask[atom2] & groupbit)) continue;
for (i = 0; i < num_dihedral[atom2]; i++) {
if (tag[atom2] != dihedral_atom2[atom2][i]) continue;
atom1 = atom->map(dihedral_atom1[atom2][i]);
if (atom1 < 0 || !(mask[atom1] & groupbit)) continue;
atom3 = atom->map(dihedral_atom3[atom2][i]);
if (atom3 < 0 || !(mask[atom3] & groupbit)) continue;
atom4 = atom->map(dihedral_atom4[atom2][i]);
if (atom4 < 0 || !(mask[atom4] & groupbit)) continue;
if (flag) {
indices[m][0] = atom2;
indices[m][1] = i;
}
m++;
}
}
return m;
}
/* ----------------------------------------------------------------------
count impropers on this proc
only count if 2nd atom is the one storing the improper
all atoms in interaction must be in group
all atoms in interaction must be known to proc
------------------------------------------------------------------------- */
int ComputePropertyLocal::count_impropers(int flag)
{
int i,atom1,atom2,atom3,atom4;
int *num_improper = atom->num_improper;
tagint **improper_atom1 = atom->improper_atom1;
tagint **improper_atom2 = atom->improper_atom2;
tagint **improper_atom3 = atom->improper_atom3;
tagint **improper_atom4 = atom->improper_atom4;
tagint *tag = atom->tag;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int m = 0;
for (atom2 = 0; atom2 < nlocal; atom2++) {
if (!(mask[atom2] & groupbit)) continue;
for (i = 0; i < num_improper[atom2]; i++) {
if (tag[atom2] != improper_atom2[atom2][i]) continue;
atom1 = atom->map(improper_atom1[atom2][i]);
if (atom1 < 0 || !(mask[atom1] & groupbit)) continue;
atom3 = atom->map(improper_atom3[atom2][i]);
if (atom3 < 0 || !(mask[atom3] & groupbit)) continue;
atom4 = atom->map(improper_atom4[atom2][i]);
if (atom4 < 0 || !(mask[atom4] & groupbit)) continue;
if (flag) {
indices[m][0] = atom2;
indices[m][1] = i;
}
m++;
}
}
return m;
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::reallocate(int n)
{
// grow vector or array and indices array
while (nmax < n) nmax += DELTA;
if (nvalues == 1) {
memory->destroy(vector);
memory->create(vector,nmax,"property/local:vector");
vector_local = vector;
} else {
memory->destroy(array);
memory->create(array,nmax,nvalues,"property/local:array");
array_local = array;
}
memory->destroy(indices);
memory->create(indices,nmax,2,"property/local:indices");
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputePropertyLocal::memory_usage()
{
double bytes = nmax*nvalues * sizeof(double);
bytes += nmax*2 * sizeof(int);
return bytes;
}
/* ----------------------------------------------------------------------
one method for every keyword compute property/local can output
the atom property is packed into buf starting at n with stride nvalues
customize a new keyword by adding a method
------------------------------------------------------------------------- */
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_patom1(int n)
{
int i;
tagint *tag = atom->tag;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
buf[n] = tag[i];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_patom2(int n)
{
int i;
tagint *tag = atom->tag;
for (int m = 0; m < ncount; m++) {
i = indices[m][1];
buf[n] = tag[i];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_ptype1(int n)
{
int i;
int *type = atom->type;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
buf[n] = type[i];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_ptype2(int n)
{
int i;
int *type = atom->type;
for (int m = 0; m < ncount; m++) {
i = indices[m][1];
buf[n] = type[i];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_batom1(int n)
{
int i;
tagint *tag = atom->tag;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
buf[n] = tag[i];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_batom2(int n)
{
int i,j;
tagint **bond_atom = atom->bond_atom;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = bond_atom[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_btype(int n)
{
int i,j;
int **bond_type = atom->bond_type;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = bond_type[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_aatom1(int n)
{
int i,j;
tagint **angle_atom1 = atom->angle_atom1;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = angle_atom1[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_aatom2(int n)
{
int i,j;
tagint **angle_atom2 = atom->angle_atom2;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = angle_atom2[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_aatom3(int n)
{
int i,j;
tagint **angle_atom3 = atom->angle_atom3;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = angle_atom3[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_atype(int n)
{
int i,j;
int **angle_type = atom->angle_type;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = angle_type[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_datom1(int n)
{
int i,j;
tagint **dihedral_atom1 = atom->dihedral_atom1;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = dihedral_atom1[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_datom2(int n)
{
int i,j;
tagint **dihedral_atom2 = atom->dihedral_atom2;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = dihedral_atom2[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_datom3(int n)
{
int i,j;
tagint **dihedral_atom3 = atom->dihedral_atom3;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = dihedral_atom3[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_datom4(int n)
{
int i,j;
tagint **dihedral_atom4 = atom->dihedral_atom4;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = dihedral_atom4[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_dtype(int n)
{
int i,j;
int **dihedral_type = atom->dihedral_type;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = dihedral_type[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_iatom1(int n)
{
int i,j;
tagint **improper_atom1 = atom->improper_atom1;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = improper_atom1[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_iatom2(int n)
{
int i,j;
tagint **improper_atom2 = atom->improper_atom2;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = improper_atom2[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_iatom3(int n)
{
int i,j;
tagint **improper_atom3 = atom->improper_atom3;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = improper_atom3[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_iatom4(int n)
{
int i,j;
tagint **improper_atom4 = atom->improper_atom4;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = improper_atom4[i][j];
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyLocal::pack_itype(int n)
{
int i,j;
int **improper_type = atom->improper_type;
for (int m = 0; m < ncount; m++) {
i = indices[m][0];
j = indices[m][1];
buf[n] = improper_type[i][j];
n += nvalues;
}
}
diff --git a/src/compute_rdf.cpp b/src/compute_rdf.cpp
index 14a12bb5c..862450801 100644
--- a/src/compute_rdf.cpp
+++ b/src/compute_rdf.cpp
@@ -1,325 +1,327 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Paul Crozier (SNL), Jeff Greathouse (SNL)
------------------------------------------------------------------------- */
#include <mpi.h>
#include <math.h>
#include <stdlib.h>
#include "compute_rdf.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "pair.h"
#include "domain.h"
#include "neighbor.h"
#include "neigh_request.h"
#include "neigh_list.h"
#include "group.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace MathConst;
/* ---------------------------------------------------------------------- */
ComputeRDF::ComputeRDF(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ rdfpair(NULL), nrdfpair(NULL), ilo(NULL), ihi(NULL), jlo(NULL), jhi(NULL),
+ hist(NULL), histall(NULL), typecount(NULL), icount(NULL), jcount(NULL), duplicates(NULL)
{
if (narg < 4 || (narg-4) % 2) error->all(FLERR,"Illegal compute rdf command");
array_flag = 1;
extarray = 0;
nbin = force->inumeric(FLERR,arg[3]);
if (nbin < 1) error->all(FLERR,"Illegal compute rdf command");
if (narg == 4) npairs = 1;
else npairs = (narg-4)/2;
size_array_rows = nbin;
size_array_cols = 1 + 2*npairs;
int ntypes = atom->ntypes;
memory->create(rdfpair,npairs,ntypes+1,ntypes+1,"rdf:rdfpair");
memory->create(nrdfpair,ntypes+1,ntypes+1,"rdf:nrdfpair");
ilo = new int[npairs];
ihi = new int[npairs];
jlo = new int[npairs];
jhi = new int[npairs];
if (narg == 4) {
ilo[0] = 1; ihi[0] = ntypes;
jlo[0] = 1; jhi[0] = ntypes;
npairs = 1;
} else {
npairs = 0;
int iarg = 4;
while (iarg < narg) {
force->bounds(arg[iarg],atom->ntypes,ilo[npairs],ihi[npairs]);
force->bounds(arg[iarg+1],atom->ntypes,jlo[npairs],jhi[npairs]);
if (ilo[npairs] > ihi[npairs] || jlo[npairs] > jhi[npairs])
error->all(FLERR,"Illegal compute rdf command");
npairs++;
iarg += 2;
}
}
int i,j;
for (i = 1; i <= ntypes; i++)
for (j = 1; j <= ntypes; j++)
nrdfpair[i][j] = 0;
for (int m = 0; m < npairs; m++)
for (i = ilo[m]; i <= ihi[m]; i++)
for (j = jlo[m]; j <= jhi[m]; j++)
rdfpair[nrdfpair[i][j]++][i][j] = m;
memory->create(hist,npairs,nbin,"rdf:hist");
memory->create(histall,npairs,nbin,"rdf:histall");
memory->create(array,nbin,1+2*npairs,"rdf:array");
typecount = new int[ntypes+1];
icount = new int[npairs];
jcount = new int[npairs];
duplicates = new int[npairs];
}
/* ---------------------------------------------------------------------- */
ComputeRDF::~ComputeRDF()
{
memory->destroy(rdfpair);
memory->destroy(nrdfpair);
delete [] ilo;
delete [] ihi;
delete [] jlo;
delete [] jhi;
memory->destroy(hist);
memory->destroy(histall);
memory->destroy(array);
delete [] typecount;
delete [] icount;
delete [] jcount;
delete [] duplicates;
}
/* ---------------------------------------------------------------------- */
void ComputeRDF::init()
{
int i,j,m;
if (force->pair) delr = force->pair->cutforce / nbin;
else error->all(FLERR,"Compute rdf requires a pair style be defined");
delrinv = 1.0/delr;
// set 1st column of output array to bin coords
for (int i = 0; i < nbin; i++)
array[i][0] = (i+0.5) * delr;
// count atoms of each type that are also in group
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
int ntypes = atom->ntypes;
for (i = 1; i <= ntypes; i++) typecount[i] = 0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) typecount[type[i]]++;
// icount = # of I atoms participating in I,J pairs for each histogram
// jcount = # of J atoms participating in I,J pairs for each histogram
// duplicates = # of atoms in both groups I and J for each histogram
for (m = 0; m < npairs; m++) {
icount[m] = 0;
for (i = ilo[m]; i <= ihi[m]; i++) icount[m] += typecount[i];
jcount[m] = 0;
for (i = jlo[m]; i <= jhi[m]; i++) jcount[m] += typecount[i];
duplicates[m] = 0;
for (i = ilo[m]; i <= ihi[m]; i++)
for (j = jlo[m]; j <= jhi[m]; j++)
if (i == j) duplicates[m] += typecount[i];
}
int *scratch = new int[npairs];
MPI_Allreduce(icount,scratch,npairs,MPI_INT,MPI_SUM,world);
for (i = 0; i < npairs; i++) icount[i] = scratch[i];
MPI_Allreduce(jcount,scratch,npairs,MPI_INT,MPI_SUM,world);
for (i = 0; i < npairs; i++) jcount[i] = scratch[i];
MPI_Allreduce(duplicates,scratch,npairs,MPI_INT,MPI_SUM,world);
for (i = 0; i < npairs; i++) duplicates[i] = scratch[i];
delete [] scratch;
// need an occasional half neighbor list
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->compute = 1;
neighbor->requests[irequest]->occasional = 1;
}
/* ---------------------------------------------------------------------- */
void ComputeRDF::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void ComputeRDF::compute_array()
{
int i,j,m,ii,jj,inum,jnum,itype,jtype,ipair,jpair,ibin,ihisto;
double xtmp,ytmp,ztmp,delx,dely,delz,r;
int *ilist,*jlist,*numneigh,**firstneigh;
double factor_lj,factor_coul;
invoked_array = update->ntimestep;
// invoke half neighbor list (will copy or build if necessary)
neighbor->build_one(list);
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// zero the histogram counts
for (i = 0; i < npairs; i++)
for (j = 0; j < nbin; j++)
hist[i][j] = 0;
// tally the RDF
// both atom i and j must be in fix group
// itype,jtype must have been specified by user
// consider I,J as one interaction even if neighbor pair is stored on 2 procs
// tally I,J pair each time I is central atom, and each time J is central
double **x = atom->x;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *special_coul = force->special_coul;
double *special_lj = force->special_lj;
int newton_pair = force->newton_pair;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (!(mask[i] & groupbit)) continue;
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
itype = type[i];
jlist = firstneigh[i];
jnum = numneigh[i];
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
factor_lj = special_lj[sbmask(j)];
factor_coul = special_coul[sbmask(j)];
j &= NEIGHMASK;
// if both weighting factors are 0, skip this pair
// could be 0 and still be in neigh list for long-range Coulombics
// want consistency with non-charged pairs which wouldn't be in list
if (factor_lj == 0.0 && factor_coul == 0.0) continue;
if (!(mask[j] & groupbit)) continue;
jtype = type[j];
ipair = nrdfpair[itype][jtype];
jpair = nrdfpair[jtype][itype];
if (!ipair && !jpair) continue;
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
r = sqrt(delx*delx + dely*dely + delz*delz);
ibin = static_cast<int> (r*delrinv);
if (ibin >= nbin) continue;
if (ipair)
for (ihisto = 0; ihisto < ipair; ihisto++)
hist[rdfpair[ihisto][itype][jtype]][ibin] += 1.0;
if (newton_pair || j < nlocal) {
if (jpair)
for (ihisto = 0; ihisto < jpair; ihisto++)
hist[rdfpair[ihisto][jtype][itype]][ibin] += 1.0;
}
}
}
// sum histograms across procs
MPI_Allreduce(hist[0],histall[0],npairs*nbin,MPI_DOUBLE,MPI_SUM,world);
// convert counts to g(r) and coord(r) and copy into output array
// vfrac = fraction of volume in shell m
// npairs = number of pairs, corrected for duplicates
// duplicates = pairs in which both atoms are the same
double constant,vfrac,gr,ncoord,rlower,rupper,normfac;
if (domain->dimension == 3) {
constant = 4.0*MY_PI / (3.0*domain->xprd*domain->yprd*domain->zprd);
for (m = 0; m < npairs; m++) {
normfac = (icount[m] > 0) ? static_cast<double>(jcount[m])
- static_cast<double>(duplicates[m])/icount[m] : 0.0;
ncoord = 0.0;
for (ibin = 0; ibin < nbin; ibin++) {
rlower = ibin*delr;
rupper = (ibin+1)*delr;
vfrac = constant * (rupper*rupper*rupper - rlower*rlower*rlower);
if (vfrac * normfac != 0.0)
gr = histall[m][ibin] / (vfrac * normfac * icount[m]);
else gr = 0.0;
if (icount[m] != 0)
ncoord += gr * vfrac * normfac;
array[ibin][1+2*m] = gr;
array[ibin][2+2*m] = ncoord;
}
}
} else {
constant = MY_PI / (domain->xprd*domain->yprd);
for (m = 0; m < npairs; m++) {
ncoord = 0.0;
normfac = (icount[m] > 0) ? static_cast<double>(jcount[m])
- static_cast<double>(duplicates[m])/icount[m] : 0.0;
for (ibin = 0; ibin < nbin; ibin++) {
rlower = ibin*delr;
rupper = (ibin+1)*delr;
vfrac = constant * (rupper*rupper - rlower*rlower);
if (vfrac * normfac != 0.0)
gr = histall[m][ibin] / (vfrac * normfac * icount[m]);
else gr = 0.0;
if (icount[m] != 0)
ncoord += gr * vfrac * normfac;
array[ibin][1+2*m] = gr;
array[ibin][2+2*m] = ncoord;
}
}
}
}
diff --git a/src/compute_reduce.cpp b/src/compute_reduce.cpp
index 7ea3c2aaf..dc6896f27 100644
--- a/src/compute_reduce.cpp
+++ b/src/compute_reduce.cpp
@@ -1,675 +1,677 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include "compute_reduce.h"
#include "atom.h"
#include "update.h"
#include "domain.h"
#include "modify.h"
#include "fix.h"
#include "force.h"
#include "comm.h"
#include "group.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{SUM,SUMSQ,MINN,MAXX,AVE,AVESQ}; // also in ReduceRegion
enum{X,V,F,COMPUTE,FIX,VARIABLE};
enum{PERATOM,LOCAL};
#define INVOKED_VECTOR 2
#define INVOKED_ARRAY 4
#define INVOKED_PERATOM 8
#define INVOKED_LOCAL 16
#define BIG 1.0e20
/* ---------------------------------------------------------------------- */
ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ nvalues(0), which(NULL), argindex(NULL), flavor(NULL), value2index(NULL), ids(NULL),
+ onevec(NULL), replace(NULL), indices(NULL), owner(NULL), idregion(NULL), varatom(NULL)
{
int iarg = 0;
if (strcmp(style,"reduce") == 0) {
if (narg < 5) error->all(FLERR,"Illegal compute reduce command");
idregion = NULL;
iarg = 3;
} else if (strcmp(style,"reduce/region") == 0) {
if (narg < 6) error->all(FLERR,"Illegal compute reduce/region command");
iregion = domain->find_region(arg[3]);
if (iregion == -1)
error->all(FLERR,"Region ID for compute reduce/region does not exist");
int n = strlen(arg[3]) + 1;
idregion = new char[n];
strcpy(idregion,arg[3]);
iarg = 4;
}
if (strcmp(arg[iarg],"sum") == 0) mode = SUM;
else if (strcmp(arg[iarg],"sumsq") == 0) mode = SUMSQ;
else if (strcmp(arg[iarg],"min") == 0) mode = MINN;
else if (strcmp(arg[iarg],"max") == 0) mode = MAXX;
else if (strcmp(arg[iarg],"ave") == 0) mode = AVE;
else if (strcmp(arg[iarg],"avesq") == 0) mode = AVESQ;
else error->all(FLERR,"Illegal compute reduce command");
iarg++;
MPI_Comm_rank(world,&me);
// expand args if any have wildcard character "*"
int expand = 0;
char **earg;
int nargnew = input->expand_args(narg-iarg,&arg[iarg],1,earg);
if (earg != &arg[iarg]) expand = 1;
arg = earg;
// parse values until one isn't recognized
which = new int[nargnew];
argindex = new int[nargnew];
flavor = new int[nargnew];
ids = new char*[nargnew];
value2index = new int[nargnew];
nvalues = 0;
iarg = 0;
while (iarg < nargnew) {
ids[nvalues] = NULL;
if (strcmp(arg[iarg],"x") == 0) {
which[nvalues] = X;
argindex[nvalues++] = 0;
} else if (strcmp(arg[iarg],"y") == 0) {
which[nvalues] = X;
argindex[nvalues++] = 1;
} else if (strcmp(arg[iarg],"z") == 0) {
which[nvalues] = X;
argindex[nvalues++] = 2;
} else if (strcmp(arg[iarg],"vx") == 0) {
which[nvalues] = V;
argindex[nvalues++] = 0;
} else if (strcmp(arg[iarg],"vy") == 0) {
which[nvalues] = V;
argindex[nvalues++] = 1;
} else if (strcmp(arg[iarg],"vz") == 0) {
which[nvalues] = V;
argindex[nvalues++] = 2;
} else if (strcmp(arg[iarg],"fx") == 0) {
which[nvalues] = F;
argindex[nvalues++] = 0;
} else if (strcmp(arg[iarg],"fy") == 0) {
which[nvalues] = F;
argindex[nvalues++] = 1;
} else if (strcmp(arg[iarg],"fz") == 0) {
which[nvalues] = F;
argindex[nvalues++] = 2;
} else if (strncmp(arg[iarg],"c_",2) == 0 ||
strncmp(arg[iarg],"f_",2) == 0 ||
strncmp(arg[iarg],"v_",2) == 0) {
if (arg[iarg][0] == 'c') which[nvalues] = COMPUTE;
else if (arg[iarg][0] == 'f') which[nvalues] = FIX;
else if (arg[iarg][0] == 'v') which[nvalues] = VARIABLE;
int n = strlen(arg[iarg]);
char *suffix = new char[n];
strcpy(suffix,&arg[iarg][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Illegal compute reduce command");
argindex[nvalues] = atoi(ptr+1);
*ptr = '\0';
} else argindex[nvalues] = 0;
n = strlen(suffix) + 1;
ids[nvalues] = new char[n];
strcpy(ids[nvalues],suffix);
nvalues++;
delete [] suffix;
} else break;
iarg++;
}
// optional args
replace = new int[nvalues];
for (int i = 0; i < nvalues; i++) replace[i] = -1;
while (iarg < nargnew) {
if (strcmp(arg[iarg],"replace") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal compute reduce command");
if (mode != MINN && mode != MAXX)
error->all(FLERR,"Compute reduce replace requires min or max mode");
int col1 = atoi(arg[iarg+1]) - 1;
int col2 = atoi(arg[iarg+2]) - 1;
if (col1 < 0 || col1 >= nvalues || col2 < 0 || col2 >= nvalues)
error->all(FLERR,"Illegal compute reduce command");
if (col1 == col2) error->all(FLERR,"Illegal compute reduce command");
if (replace[col1] >= 0 || replace[col2] >= 0)
error->all(FLERR,"Invalid replace values in compute reduce");
replace[col1] = col2;
iarg += 3;
} else error->all(FLERR,"Illegal compute reduce command");
}
// delete replace if not set
int flag = 0;
for (int i = 0; i < nvalues; i++)
if (replace[i] >= 0) flag = 1;
if (!flag) {
delete [] replace;
replace = NULL;
}
// if wildcard expansion occurred, free earg memory from expand_args()
if (expand) {
for (int i = 0; i < nargnew; i++) delete [] earg[i];
memory->sfree(earg);
}
// setup and error check
for (int i = 0; i < nvalues; i++) {
if (which[i] == X || which[i] == V || which[i] == F)
flavor[i] = PERATOM;
else if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for compute reduce does not exist");
if (modify->compute[icompute]->peratom_flag) {
flavor[i] = PERATOM;
if (argindex[i] == 0 &&
modify->compute[icompute]->size_peratom_cols != 0)
error->all(FLERR,"Compute reduce compute does not "
"calculate a per-atom vector");
if (argindex[i] && modify->compute[icompute]->size_peratom_cols == 0)
error->all(FLERR,"Compute reduce compute does not "
"calculate a per-atom array");
if (argindex[i] &&
argindex[i] > modify->compute[icompute]->size_peratom_cols)
error->all(FLERR,
"Compute reduce compute array is accessed out-of-range");
} else if (modify->compute[icompute]->local_flag) {
flavor[i] = LOCAL;
if (argindex[i] == 0 &&
modify->compute[icompute]->size_local_cols != 0)
error->all(FLERR,"Compute reduce compute does not "
"calculate a local vector");
if (argindex[i] && modify->compute[icompute]->size_local_cols == 0)
error->all(FLERR,"Compute reduce compute does not "
"calculate a local array");
if (argindex[i] &&
argindex[i] > modify->compute[icompute]->size_local_cols)
error->all(FLERR,
"Compute reduce compute array is accessed out-of-range");
} else error->all(FLERR,
"Compute reduce compute calculates global values");
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for compute reduce does not exist");
if (modify->fix[ifix]->peratom_flag) {
flavor[i] = PERATOM;
if (argindex[i] == 0 &&
modify->fix[ifix]->size_peratom_cols != 0)
error->all(FLERR,"Compute reduce fix does not "
"calculate a per-atom vector");
if (argindex[i] && modify->fix[ifix]->size_peratom_cols == 0)
error->all(FLERR,"Compute reduce fix does not "
"calculate a per-atom array");
if (argindex[i] &&
argindex[i] > modify->fix[ifix]->size_peratom_cols)
error->all(FLERR,"Compute reduce fix array is accessed out-of-range");
} else if (modify->fix[ifix]->local_flag) {
flavor[i] = LOCAL;
if (argindex[i] == 0 &&
modify->fix[ifix]->size_local_cols != 0)
error->all(FLERR,"Compute reduce fix does not "
"calculate a local vector");
if (argindex[i] && modify->fix[ifix]->size_local_cols == 0)
error->all(FLERR,"Compute reduce fix does not "
"calculate a local array");
if (argindex[i] &&
argindex[i] > modify->fix[ifix]->size_local_cols)
error->all(FLERR,"Compute reduce fix array is accessed out-of-range");
} else error->all(FLERR,"Compute reduce fix calculates global values");
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for compute reduce does not exist");
if (input->variable->atomstyle(ivariable) == 0)
error->all(FLERR,"Compute reduce variable is not atom-style variable");
flavor[i] = PERATOM;
}
}
// this compute produces either a scalar or vector
if (nvalues == 1) {
scalar_flag = 1;
if (mode == SUM || mode == SUMSQ) extscalar = 1;
else extscalar = 0;
vector = onevec = NULL;
indices = owner = NULL;
} else {
vector_flag = 1;
size_vector = nvalues;
if (mode == SUM || mode == SUMSQ) extvector = 1;
else extvector = 0;
vector = new double[size_vector];
onevec = new double[size_vector];
indices = new int[size_vector];
owner = new int[size_vector];
}
maxatom = 0;
varatom = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeReduce::~ComputeReduce()
{
delete [] which;
delete [] argindex;
delete [] flavor;
for (int m = 0; m < nvalues; m++) delete [] ids[m];
delete [] ids;
delete [] value2index;
delete [] replace;
delete [] idregion;
delete [] vector;
delete [] onevec;
delete [] indices;
delete [] owner;
memory->destroy(varatom);
}
/* ---------------------------------------------------------------------- */
void ComputeReduce::init()
{
// set indices of all computes,fixes,variables
for (int m = 0; m < nvalues; m++) {
if (which[m] == COMPUTE) {
int icompute = modify->find_compute(ids[m]);
if (icompute < 0)
error->all(FLERR,"Compute ID for compute reduce does not exist");
value2index[m] = icompute;
} else if (which[m] == FIX) {
int ifix = modify->find_fix(ids[m]);
if (ifix < 0)
error->all(FLERR,"Fix ID for compute reduce does not exist");
value2index[m] = ifix;
} else if (which[m] == VARIABLE) {
int ivariable = input->variable->find(ids[m]);
if (ivariable < 0)
error->all(FLERR,"Variable name for compute reduce does not exist");
value2index[m] = ivariable;
} else value2index[m] = -1;
}
// set index and check validity of region
if (idregion) {
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for compute reduce/region does not exist");
}
}
/* ---------------------------------------------------------------------- */
double ComputeReduce::compute_scalar()
{
invoked_scalar = update->ntimestep;
double one = compute_one(0,-1);
if (mode == SUM || mode == SUMSQ) {
MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_SUM,world);
} else if (mode == MINN) {
MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_MIN,world);
} else if (mode == MAXX) {
MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_MAX,world);
} else if (mode == AVE || mode == AVESQ) {
MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_SUM,world);
bigint n = count(0);
if (n) scalar /= n;
}
return scalar;
}
/* ---------------------------------------------------------------------- */
void ComputeReduce::compute_vector()
{
invoked_vector = update->ntimestep;
for (int m = 0; m < nvalues; m++)
if (!replace || replace[m] < 0) {
onevec[m] = compute_one(m,-1);
indices[m] = index;
}
if (mode == SUM || mode == SUMSQ) {
for (int m = 0; m < nvalues; m++)
MPI_Allreduce(&onevec[m],&vector[m],1,MPI_DOUBLE,MPI_SUM,world);
} else if (mode == MINN) {
if (!replace) {
for (int m = 0; m < nvalues; m++)
MPI_Allreduce(&onevec[m],&vector[m],1,MPI_DOUBLE,MPI_MIN,world);
} else {
for (int m = 0; m < nvalues; m++)
if (replace[m] < 0) {
pairme.value = onevec[m];
pairme.proc = me;
MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MINLOC,world);
vector[m] = pairall.value;
owner[m] = pairall.proc;
}
for (int m = 0; m < nvalues; m++)
if (replace[m] >= 0) {
if (me == owner[replace[m]])
vector[m] = compute_one(m,indices[replace[m]]);
MPI_Bcast(&vector[m],1,MPI_DOUBLE,owner[replace[m]],world);
}
}
} else if (mode == MAXX) {
if (!replace) {
for (int m = 0; m < nvalues; m++)
MPI_Allreduce(&onevec[m],&vector[m],1,MPI_DOUBLE,MPI_MAX,world);
} else {
for (int m = 0; m < nvalues; m++)
if (replace[m] < 0) {
pairme.value = onevec[m];
pairme.proc = me;
MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MAXLOC,world);
vector[m] = pairall.value;
owner[m] = pairall.proc;
}
for (int m = 0; m < nvalues; m++)
if (replace[m] >= 0) {
if (me == owner[replace[m]])
vector[m] = compute_one(m,indices[replace[m]]);
MPI_Bcast(&vector[m],1,MPI_DOUBLE,owner[replace[m]],world);
}
}
} else if (mode == AVE || mode == AVESQ) {
for (int m = 0; m < nvalues; m++) {
MPI_Allreduce(&onevec[m],&vector[m],1,MPI_DOUBLE,MPI_SUM,world);
bigint n = count(m);
if (n) vector[m] /= n;
}
}
}
/* ----------------------------------------------------------------------
calculate reduced value for one input M and return it
if flag = -1:
sum/min/max/ave all values in vector
for per-atom quantities, limit to atoms in group
if mode = MIN or MAX, also set index to which vector value wins
if flag >= 0: simply return vector[flag]
------------------------------------------------------------------------- */
double ComputeReduce::compute_one(int m, int flag)
{
int i;
// invoke the appropriate attribute,compute,fix,variable
// for flag = -1, compute scalar quantity by scanning over atom properties
// only include atoms in group for atom properties and per-atom quantities
index = -1;
int vidx = value2index[m];
int aidx = argindex[m];
int *mask = atom->mask;
int nlocal = atom->nlocal;
double one = 0.0;
if (mode == MINN) one = BIG;
if (mode == MAXX) one = -BIG;
if (which[m] == X) {
double **x = atom->x;
if (flag < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) combine(one,x[i][aidx],i);
} else one = x[flag][aidx];
} else if (which[m] == V) {
double **v = atom->v;
if (flag < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) combine(one,v[i][aidx],i);
} else one = v[flag][aidx];
} else if (which[m] == F) {
double **f = atom->f;
if (flag < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) combine(one,f[i][aidx],i);
} else one = f[flag][aidx];
// invoke compute if not previously invoked
} else if (which[m] == COMPUTE) {
Compute *compute = modify->compute[vidx];
if (flavor[m] == PERATOM) {
if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
if (aidx == 0) {
double *comp_vec = compute->vector_atom;
int n = nlocal;
if (flag < 0) {
for (i = 0; i < n; i++)
if (mask[i] & groupbit) combine(one,comp_vec[i],i);
} else one = comp_vec[flag];
} else {
double **carray_atom = compute->array_atom;
int n = nlocal;
int aidxm1 = aidx - 1;
if (flag < 0) {
for (i = 0; i < n; i++)
if (mask[i] & groupbit) combine(one,carray_atom[i][aidxm1],i);
} else one = carray_atom[flag][aidxm1];
}
} else if (flavor[m] == LOCAL) {
if (!(compute->invoked_flag & INVOKED_LOCAL)) {
compute->compute_local();
compute->invoked_flag |= INVOKED_LOCAL;
}
if (aidx == 0) {
double *comp_vec = compute->vector_local;
int n = compute->size_local_rows;
if (flag < 0)
for (i = 0; i < n; i++)
combine(one,comp_vec[i],i);
else one = comp_vec[flag];
} else {
double **carray_local = compute->array_local;
int n = compute->size_local_rows;
int aidxm1 = aidx - 1;
if (flag < 0)
for (i = 0; i < n; i++)
combine(one,carray_local[i][aidxm1],i);
else one = carray_local[flag][aidxm1];
}
}
// access fix fields, check if fix frequency is a match
} else if (which[m] == FIX) {
if (update->ntimestep % modify->fix[vidx]->peratom_freq)
error->all(FLERR,"Fix used in compute reduce not "
"computed at compatible time");
Fix *fix = modify->fix[vidx];
if (flavor[m] == PERATOM) {
if (aidx == 0) {
double *fix_vector = fix->vector_atom;
int n = nlocal;
if (flag < 0) {
for (i = 0; i < n; i++)
if (mask[i] & groupbit) combine(one,fix_vector[i],i);
} else one = fix_vector[flag];
} else {
double **fix_array = fix->array_atom;
int aidxm1 = aidx - 1;
if (flag < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) combine(one,fix_array[i][aidxm1],i);
} else one = fix_array[flag][aidxm1];
}
} else if (flavor[m] == LOCAL) {
if (aidx == 0) {
double *fix_vector = fix->vector_local;
int n = fix->size_local_rows;
if (flag < 0)
for (i = 0; i < n; i++)
combine(one,fix_vector[i],i);
else one = fix_vector[flag];
} else {
double **fix_array = fix->array_local;
int n = fix->size_local_rows;
int aidxm1 = aidx - 1;
if (flag < 0)
for (i = 0; i < n; i++)
combine(one,fix_array[i][aidxm1],i);
else one = fix_array[flag][aidxm1];
}
}
// evaluate atom-style variable
} else if (which[m] == VARIABLE) {
if (atom->nmax > maxatom) {
maxatom = atom->nmax;
memory->destroy(varatom);
memory->create(varatom,maxatom,"reduce:varatom");
}
input->variable->compute_atom(vidx,igroup,varatom,1,0);
if (flag < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) combine(one,varatom[i],i);
} else one = varatom[flag];
}
return one;
}
/* ---------------------------------------------------------------------- */
bigint ComputeReduce::count(int m)
{
int vidx = value2index[m];
if (which[m] == X || which[m] == V || which[m] == F)
return group->count(igroup);
else if (which[m] == COMPUTE) {
Compute *compute = modify->compute[vidx];
if (flavor[m] == PERATOM) {
return group->count(igroup);
} else if (flavor[m] == LOCAL) {
bigint ncount = compute->size_local_rows;
bigint ncountall;
MPI_Allreduce(&ncount,&ncountall,1,MPI_LMP_BIGINT,MPI_SUM,world);
return ncountall;
}
} else if (which[m] == FIX) {
Fix *fix = modify->fix[vidx];
if (flavor[m] == PERATOM) {
return group->count(igroup);
} else if (flavor[m] == LOCAL) {
bigint ncount = fix->size_local_rows;
bigint ncountall;
MPI_Allreduce(&ncount,&ncountall,1,MPI_LMP_BIGINT,MPI_SUM,world);
return ncountall;
}
} else if (which[m] == VARIABLE)
return group->count(igroup);
bigint dummy = 0;
return dummy;
}
/* ----------------------------------------------------------------------
combine two values according to reduction mode
for MIN/MAX, also update index with winner
------------------------------------------------------------------------- */
void ComputeReduce::combine(double &one, double two, int i)
{
if (mode == SUM || mode == AVE) one += two;
else if (mode == SUMSQ || mode == AVESQ) one += two*two;
else if (mode == MINN) {
if (two < one) {
one = two;
index = i;
}
} else if (mode == MAXX) {
if (two > one) {
one = two;
index = i;
}
}
}
/* ----------------------------------------------------------------------
memory usage of varatom
------------------------------------------------------------------------- */
double ComputeReduce::memory_usage()
{
double bytes = maxatom * sizeof(double);
return bytes;
}
diff --git a/src/compute_slice.cpp b/src/compute_slice.cpp
index d2c3c18de..da077ddfc 100644
--- a/src/compute_slice.cpp
+++ b/src/compute_slice.cpp
@@ -1,357 +1,358 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include "compute_slice.h"
#include "update.h"
#include "modify.h"
#include "fix.h"
#include "group.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
enum{COMPUTE,FIX,VARIABLE};
#define INVOKED_VECTOR 2
#define INVOKED_ARRAY 4
/* ---------------------------------------------------------------------- */
ComputeSlice::ComputeSlice(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ nvalues(0), which(NULL), argindex(NULL), value2index(NULL), ids(NULL)
{
if (narg < 7) error->all(FLERR,"Illegal compute slice command");
MPI_Comm_rank(world,&me);
nstart = force->inumeric(FLERR,arg[3]);
nstop = force->inumeric(FLERR,arg[4]);
nskip = force->inumeric(FLERR,arg[5]);
if (nstart < 1 || nstop < nstart || nskip < 1)
error->all(FLERR,"Illegal compute slice command");
// parse remaining values until one isn't recognized
which = new int[narg-6];
argindex = new int[narg-6];
ids = new char*[narg-6];
value2index = new int[narg-6];
nvalues = 0;
for (int iarg = 6; iarg < narg; iarg++) {
if (strncmp(arg[iarg],"c_",2) == 0 ||
strncmp(arg[iarg],"f_",2) == 0 ||
strncmp(arg[iarg],"v_",2) == 0) {
if (arg[iarg][0] == 'c') which[nvalues] = COMPUTE;
else if (arg[iarg][0] == 'f') which[nvalues] = FIX;
else if (arg[iarg][0] == 'v') which[nvalues] = VARIABLE;
int n = strlen(arg[iarg]);
char *suffix = new char[n];
strcpy(suffix,&arg[iarg][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Illegal compute slice command");
argindex[nvalues] = atoi(ptr+1);
*ptr = '\0';
} else argindex[nvalues] = 0;
n = strlen(suffix) + 1;
ids[nvalues] = new char[n];
strcpy(ids[nvalues],suffix);
nvalues++;
delete [] suffix;
} else error->all(FLERR,"Illegal compute slice command");
}
// setup and error check
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for compute slice does not exist");
if (modify->compute[icompute]->vector_flag) {
if (argindex[i])
error->all(FLERR,"Compute slice compute does not "
"calculate a global array");
if (nstop > modify->compute[icompute]->size_vector)
error->all(FLERR,"Compute slice compute vector is "
"accessed out-of-range");
} else if (modify->compute[icompute]->array_flag) {
if (argindex[i] == 0)
error->all(FLERR,"Compute slice compute does not "
"calculate a global vector");
if (argindex[i] > modify->compute[icompute]->size_array_cols)
error->all(FLERR,"Compute slice compute array is "
"accessed out-of-range");
if (nstop > modify->compute[icompute]->size_array_rows)
error->all(FLERR,"Compute slice compute array is "
"accessed out-of-range");
} else error->all(FLERR,"Compute slice compute does not calculate "
"global vector or array");
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for compute slice does not exist");
if (modify->fix[ifix]->vector_flag) {
if (argindex[i])
error->all(FLERR,"Compute slice fix does not "
"calculate a global array");
if (nstop > modify->fix[ifix]->size_vector)
error->all(FLERR,"Compute slice fix vector is accessed out-of-range");
} else if (modify->fix[ifix]->array_flag) {
if (argindex[i] == 0)
error->all(FLERR,"Compute slice fix does not "
"calculate a global vector");
if (argindex[i] > modify->fix[ifix]->size_array_cols)
error->all(FLERR,"Compute slice fix array is accessed out-of-range");
if (nstop > modify->fix[ifix]->size_array_rows)
error->all(FLERR,"Compute slice fix array is accessed out-of-range");
} else error->all(FLERR,"Compute slice fix does not calculate "
"global vector or array");
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for compute slice does not exist");
if (argindex[i] == 0 && input->variable->vectorstyle(ivariable) == 0)
error->all(FLERR,"Compute slice variable is not vector-style variable");
if (argindex[i])
error->all(FLERR,"Compute slice vector variable cannot be indexed");
}
}
// this compute produces either a vector or array
// for vector, set intensive/extensive to mirror input values
// for array, set intensive if all input values are intensive, else extensive
vector = NULL;
array = NULL;
extlist = NULL;
if (nvalues == 1) {
vector_flag = 1;
size_vector = (nstop-nstart) / nskip;
memory->create(vector,size_vector,"slice:vector");
if (which[0] == COMPUTE) {
int icompute = modify->find_compute(ids[0]);
if (argindex[0] == 0) {
extvector = modify->compute[icompute]->extvector;
if (modify->compute[icompute]->extvector == -1) {
extlist = new int[size_vector];
int j = 0;
for (int i = nstart; i < nstop; i += nskip)
extlist[j++] = modify->compute[icompute]->extlist[i-1];
}
} else extvector = modify->compute[icompute]->extarray;
} else if (which[0] == FIX) {
int ifix = modify->find_fix(ids[0]);
if (argindex[0] == 0) {
extvector = modify->fix[ifix]->extvector;
if (modify->fix[ifix]->extvector == -1) {
extlist = new int[size_vector];
int j = 0;
for (int i = nstart; i < nstop; i += nskip)
extlist[j++] = modify->fix[ifix]->extlist[i-1];
}
} else extvector = modify->fix[ifix]->extarray;
} else if (which[0] == VARIABLE) {
extvector = 0;
}
} else {
array_flag = 1;
size_array_rows = (nstop-nstart) / nskip;
size_array_cols = nvalues;
memory->create(array,size_array_rows,size_array_cols,"slice:array");
extarray = 0;
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (argindex[i] == 0) {
if (modify->compute[icompute]->extvector == 1) extarray = 1;
if (modify->compute[icompute]->extvector == -1) {
for (int j = 0; j < modify->compute[icompute]->size_vector; j++)
if (modify->compute[icompute]->extlist[j]) extarray = 1;
}
} else {
if (modify->compute[icompute]->extarray) extarray = 1;
}
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (argindex[i] == 0) {
if (modify->fix[ifix]->extvector == 1) extarray = 1;
if (modify->fix[ifix]->extvector == -1) {
for (int j = 0; j < modify->fix[ifix]->size_vector; j++)
if (modify->fix[ifix]->extlist[j]) extarray = 1;
}
} else {
if (modify->fix[ifix]->extarray) extarray = 1;
}
} else if (which[i] == VARIABLE) {
// variable is always intensive, does not change extarray
}
}
}
}
/* ---------------------------------------------------------------------- */
ComputeSlice::~ComputeSlice()
{
delete [] which;
delete [] argindex;
for (int m = 0; m < nvalues; m++) delete [] ids[m];
delete [] ids;
delete [] value2index;
memory->destroy(vector);
memory->destroy(array);
}
/* ---------------------------------------------------------------------- */
void ComputeSlice::init()
{
// set indices and check validity of all computes,fixes
for (int m = 0; m < nvalues; m++) {
if (which[m] == COMPUTE) {
int icompute = modify->find_compute(ids[m]);
if (icompute < 0)
error->all(FLERR,"Compute ID for compute slice does not exist");
value2index[m] = icompute;
} else if (which[m] == FIX) {
int ifix = modify->find_fix(ids[m]);
if (ifix < 0)
error->all(FLERR,"Fix ID for compute slice does not exist");
value2index[m] = ifix;
} else if (which[m] == VARIABLE) {
int ivariable = input->variable->find(ids[m]);
if (ivariable < 0)
error->all(FLERR,"Variable name for compute slice does not exist");
value2index[m] = ivariable;
}
}
}
/* ---------------------------------------------------------------------- */
void ComputeSlice::compute_vector()
{
invoked_vector = update->ntimestep;
extract_one(0,vector,1);
}
/* ---------------------------------------------------------------------- */
void ComputeSlice::compute_array()
{
invoked_array = update->ntimestep;
for (int m = 0; m < nvalues; m++)
extract_one(0,&array[m][0],nvalues);
}
/* ----------------------------------------------------------------------
calculate sliced value for one input M and return it in vec
vec may be array so that returned values are with stride
------------------------------------------------------------------------- */
void ComputeSlice::extract_one(int m, double *vec, int stride)
{
int i,j;
// invoke the appropriate compute if needed
if (which[m] == COMPUTE) {
Compute *compute = modify->compute[value2index[m]];
if (argindex[m] == 0) {
if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
double *cvector = compute->vector;
j = 0;
for (i = nstart; i < nstop; i += nskip) {
vec[j] = cvector[i-1];
j += stride;
}
} else {
if (!(compute->invoked_flag & INVOKED_ARRAY)) {
compute->compute_array();
compute->invoked_flag |= INVOKED_ARRAY;
}
double **carray = compute->array;
int icol = argindex[m]-1;
j = 0;
for (i = nstart; i < nstop; i += nskip) {
vec[j] = carray[i-1][icol];
j += stride;
}
}
// access fix fields, check if fix frequency is a match
} else if (which[m] == FIX) {
if (update->ntimestep % modify->fix[value2index[m]]->global_freq)
error->all(FLERR,"Fix used in compute slice not "
"computed at compatible time");
Fix *fix = modify->fix[value2index[m]];
if (argindex[m] == 0) {
j = 0;
for (i = nstart; i < nstop; i += nskip) {
vec[j] = fix->compute_vector(i-1);
j += stride;
}
} else {
int icol = argindex[m]-1;
j = 0;
for (i = nstart; i < nstop; i += nskip) {
vec[j] = fix->compute_array(i-1,icol);
j += stride;
}
}
// invoke vector-style variable
} else if (which[m] == VARIABLE) {
double *varvec;
int nvec = input->variable->compute_vector(value2index[m],&varvec);
if (nvec < nstop)
error->all(FLERR,"Compute slice variable is not long enough");
j = 0;
for (i = nstart; i < nstop; i += nskip) {
vec[j] = varvec[i-1];
j += stride;
}
}
}
diff --git a/src/compute_stress_atom.cpp b/src/compute_stress_atom.cpp
index 3455d9eb0..46ee2ec3c 100644
--- a/src/compute_stress_atom.cpp
+++ b/src/compute_stress_atom.cpp
@@ -1,388 +1,388 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include "compute_stress_atom.h"
#include "atom.h"
#include "update.h"
#include "comm.h"
#include "force.h"
#include "pair.h"
#include "bond.h"
#include "angle.h"
#include "dihedral.h"
#include "improper.h"
#include "kspace.h"
#include "modify.h"
#include "fix.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{NOBIAS,BIAS};
/* ---------------------------------------------------------------------- */
ComputeStressAtom::ComputeStressAtom(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ id_temp(NULL), stress(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute stress/atom command");
peratom_flag = 1;
size_peratom_cols = 6;
pressatomflag = 1;
timeflag = 1;
comm_reverse = 6;
// store temperature ID used by stress computation
// insure it is valid for temperature computation
if (strcmp(arg[3],"NULL") == 0) id_temp = NULL;
else {
int n = strlen(arg[3]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[3]);
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Could not find compute stress/atom temperature ID");
if (modify->compute[icompute]->tempflag == 0)
error->all(FLERR,
"Compute stress/atom temperature ID does not "
"compute temperature");
}
// process optional args
if (narg == 4) {
keflag = 1;
pairflag = 1;
bondflag = angleflag = dihedralflag = improperflag = 1;
kspaceflag = 1;
fixflag = 1;
} else {
keflag = 0;
pairflag = 0;
bondflag = angleflag = dihedralflag = improperflag = 0;
kspaceflag = 0;
fixflag = 0;
int iarg = 4;
while (iarg < narg) {
if (strcmp(arg[iarg],"ke") == 0) keflag = 1;
else if (strcmp(arg[iarg],"pair") == 0) pairflag = 1;
else if (strcmp(arg[iarg],"bond") == 0) bondflag = 1;
else if (strcmp(arg[iarg],"angle") == 0) angleflag = 1;
else if (strcmp(arg[iarg],"dihedral") == 0) dihedralflag = 1;
else if (strcmp(arg[iarg],"improper") == 0) improperflag = 1;
else if (strcmp(arg[iarg],"kspace") == 0) kspaceflag = 1;
else if (strcmp(arg[iarg],"fix") == 0) fixflag = 1;
else if (strcmp(arg[iarg],"virial") == 0) {
pairflag = 1;
bondflag = angleflag = dihedralflag = improperflag = 1;
kspaceflag = fixflag = 1;
} else error->all(FLERR,"Illegal compute stress/atom command");
iarg++;
}
}
nmax = 0;
- stress = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeStressAtom::~ComputeStressAtom()
{
delete [] id_temp;
memory->destroy(stress);
}
/* ---------------------------------------------------------------------- */
void ComputeStressAtom::init()
{
// set temperature compute, must be done in init()
// fixes could have changed or compute_modify could have changed it
if (id_temp) {
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Could not find compute stress/atom temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempbias) biasflag = BIAS;
else biasflag = NOBIAS;
} else biasflag = NOBIAS;
}
/* ---------------------------------------------------------------------- */
void ComputeStressAtom::compute_peratom()
{
int i,j;
double onemass;
invoked_peratom = update->ntimestep;
if (update->vflag_atom != invoked_peratom)
error->all(FLERR,"Per-atom virial was not tallied on needed timestep");
// grow local stress array if necessary
// needs to be atom->nmax in length
if (atom->nmax > nmax) {
memory->destroy(stress);
nmax = atom->nmax;
memory->create(stress,nmax,6,"stress/atom:stress");
array_atom = stress;
}
// npair includes ghosts if either newton flag is set
// b/c some bonds/dihedrals call pair::ev_tally with pairwise info
// nbond includes ghosts if newton_bond is set
// ntotal includes ghosts if either newton flag is set
// KSpace includes ghosts if tip4pflag is set
int nlocal = atom->nlocal;
int npair = nlocal;
int nbond = nlocal;
int ntotal = nlocal;
int nkspace = nlocal;
if (force->newton) npair += atom->nghost;
if (force->newton_bond) nbond += atom->nghost;
if (force->newton) ntotal += atom->nghost;
if (force->kspace && force->kspace->tip4pflag) nkspace += atom->nghost;
// clear local stress array
for (i = 0; i < ntotal; i++)
for (j = 0; j < 6; j++)
stress[i][j] = 0.0;
// add in per-atom contributions from each force
if (pairflag && force->pair) {
double **vatom = force->pair->vatom;
for (i = 0; i < npair; i++)
for (j = 0; j < 6; j++)
stress[i][j] += vatom[i][j];
}
if (bondflag && force->bond) {
double **vatom = force->bond->vatom;
for (i = 0; i < nbond; i++)
for (j = 0; j < 6; j++)
stress[i][j] += vatom[i][j];
}
if (angleflag && force->angle) {
double **vatom = force->angle->vatom;
for (i = 0; i < nbond; i++)
for (j = 0; j < 6; j++)
stress[i][j] += vatom[i][j];
}
if (dihedralflag && force->dihedral) {
double **vatom = force->dihedral->vatom;
for (i = 0; i < nbond; i++)
for (j = 0; j < 6; j++)
stress[i][j] += vatom[i][j];
}
if (improperflag && force->improper) {
double **vatom = force->improper->vatom;
for (i = 0; i < nbond; i++)
for (j = 0; j < 6; j++)
stress[i][j] += vatom[i][j];
}
if (kspaceflag && force->kspace) {
double **vatom = force->kspace->vatom;
for (i = 0; i < nkspace; i++)
for (j = 0; j < 6; j++)
stress[i][j] += vatom[i][j];
}
// add in per-atom contributions from relevant fixes
// skip if vatom = NULL
// possible during setup phase if fix has not initialized its vatom yet
// e.g. fix ave/spatial defined before fix shake,
// and fix ave/spatial uses a per-atom stress from this compute as input
if (fixflag) {
for (int ifix = 0; ifix < modify->nfix; ifix++)
if (modify->fix[ifix]->virial_flag) {
double **vatom = modify->fix[ifix]->vatom;
if (vatom)
for (i = 0; i < nlocal; i++)
for (j = 0; j < 6; j++)
stress[i][j] += vatom[i][j];
}
}
// communicate ghost virials between neighbor procs
if (force->newton || (force->kspace && force->kspace->tip4pflag))
comm->reverse_comm_compute(this);
// zero virial of atoms not in group
// only do this after comm since ghost contributions must be included
int *mask = atom->mask;
for (i = 0; i < nlocal; i++)
if (!(mask[i] & groupbit)) {
stress[i][0] = 0.0;
stress[i][1] = 0.0;
stress[i][2] = 0.0;
stress[i][3] = 0.0;
stress[i][4] = 0.0;
stress[i][5] = 0.0;
}
// include kinetic energy term for each atom in group
// apply temperature bias is applicable
// mvv2e converts mv^2 to energy
if (keflag) {
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *type = atom->type;
double mvv2e = force->mvv2e;
if (biasflag == NOBIAS) {
if (rmass) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
onemass = mvv2e * rmass[i];
stress[i][0] += onemass*v[i][0]*v[i][0];
stress[i][1] += onemass*v[i][1]*v[i][1];
stress[i][2] += onemass*v[i][2]*v[i][2];
stress[i][3] += onemass*v[i][0]*v[i][1];
stress[i][4] += onemass*v[i][0]*v[i][2];
stress[i][5] += onemass*v[i][1]*v[i][2];
}
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
onemass = mvv2e * mass[type[i]];
stress[i][0] += onemass*v[i][0]*v[i][0];
stress[i][1] += onemass*v[i][1]*v[i][1];
stress[i][2] += onemass*v[i][2]*v[i][2];
stress[i][3] += onemass*v[i][0]*v[i][1];
stress[i][4] += onemass*v[i][0]*v[i][2];
stress[i][5] += onemass*v[i][1]*v[i][2];
}
}
} else {
// invoke temperature if it hasn't been already
// this insures bias factor is pre-computed
if (keflag && temperature->invoked_scalar != update->ntimestep)
temperature->compute_scalar();
if (rmass) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
temperature->remove_bias(i,v[i]);
onemass = mvv2e * rmass[i];
stress[i][0] += onemass*v[i][0]*v[i][0];
stress[i][1] += onemass*v[i][1]*v[i][1];
stress[i][2] += onemass*v[i][2]*v[i][2];
stress[i][3] += onemass*v[i][0]*v[i][1];
stress[i][4] += onemass*v[i][0]*v[i][2];
stress[i][5] += onemass*v[i][1]*v[i][2];
temperature->restore_bias(i,v[i]);
}
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
temperature->remove_bias(i,v[i]);
onemass = mvv2e * mass[type[i]];
stress[i][0] += onemass*v[i][0]*v[i][0];
stress[i][1] += onemass*v[i][1]*v[i][1];
stress[i][2] += onemass*v[i][2]*v[i][2];
stress[i][3] += onemass*v[i][0]*v[i][1];
stress[i][4] += onemass*v[i][0]*v[i][2];
stress[i][5] += onemass*v[i][1]*v[i][2];
temperature->restore_bias(i,v[i]);
}
}
}
}
// convert to stress*volume units = -pressure*volume
double nktv2p = -force->nktv2p;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
stress[i][0] *= nktv2p;
stress[i][1] *= nktv2p;
stress[i][2] *= nktv2p;
stress[i][3] *= nktv2p;
stress[i][4] *= nktv2p;
stress[i][5] *= nktv2p;
}
}
/* ---------------------------------------------------------------------- */
int ComputeStressAtom::pack_reverse_comm(int n, int first, double *buf)
{
int i,m,last;
m = 0;
last = first + n;
for (i = first; i < last; i++) {
buf[m++] = stress[i][0];
buf[m++] = stress[i][1];
buf[m++] = stress[i][2];
buf[m++] = stress[i][3];
buf[m++] = stress[i][4];
buf[m++] = stress[i][5];
}
return m;
}
/* ---------------------------------------------------------------------- */
void ComputeStressAtom::unpack_reverse_comm(int n, int *list, double *buf)
{
int i,j,m;
m = 0;
for (i = 0; i < n; i++) {
j = list[i];
stress[j][0] += buf[m++];
stress[j][1] += buf[m++];
stress[j][2] += buf[m++];
stress[j][3] += buf[m++];
stress[j][4] += buf[m++];
stress[j][5] += buf[m++];
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double ComputeStressAtom::memory_usage()
{
double bytes = nmax*6 * sizeof(double);
return bytes;
}
diff --git a/src/compute_temp_chunk.cpp b/src/compute_temp_chunk.cpp
index 87d6e1186..8daaeb062 100644
--- a/src/compute_temp_chunk.cpp
+++ b/src/compute_temp_chunk.cpp
@@ -1,864 +1,861 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_temp_chunk.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{TEMP,KECOM,INTERNAL};
/* ---------------------------------------------------------------------- */
ComputeTempChunk::ComputeTempChunk(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ which(NULL), idchunk(NULL), id_bias(NULL), sum(NULL), sumall(NULL), count(NULL),
+ countall(NULL), massproc(NULL), masstotal(NULL), vcm(NULL), vcmall(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal compute temp/chunk command");
scalar_flag = vector_flag = 1;
size_vector = 6;
extscalar = 0;
extvector = 1;
tempflag = 1;
// ID of compute chunk/atom
int n = strlen(arg[3]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[3]);
biasflag = 0;
init();
// optional per-chunk values
nvalues = narg-4;
which = new int[nvalues];
nvalues = 0;
int iarg = 4;
while (iarg < narg) {
if (strcmp(arg[iarg],"temp") == 0) which[nvalues] = TEMP;
else if (strcmp(arg[iarg],"kecom") == 0) which[nvalues] = KECOM;
else if (strcmp(arg[iarg],"internal") == 0) which[nvalues] = INTERNAL;
else break;
iarg++;
nvalues++;
}
// optional args
comflag = 0;
biasflag = 0;
id_bias = NULL;
adof = domain->dimension;
cdof = 0.0;
while (iarg < narg) {
if (strcmp(arg[iarg],"com") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute temp/chunk command");
if (strcmp(arg[iarg+1],"yes") == 0) comflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) comflag = 0;
else error->all(FLERR,"Illegal compute temp/chunk command");
iarg += 2;
} else if (strcmp(arg[iarg],"bias") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute temp/chunk command");
biasflag = 1;
int n = strlen(arg[iarg+1]) + 1;
id_bias = new char[n];
strcpy(id_bias,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"adof") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute temp/chunk command");
adof = force->numeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"cdof") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute temp/chunk command");
cdof = force->numeric(FLERR,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal compute temp/chunk command");
}
// error check on bias compute
if (biasflag) {
int i = modify->find_compute(id_bias);
if (i < 0)
error->all(FLERR,"Could not find compute ID for temperature bias");
tbias = modify->compute[i];
if (tbias->tempflag == 0)
error->all(FLERR,"Bias compute does not calculate temperature");
if (tbias->tempbias == 0)
error->all(FLERR,"Bias compute does not calculate a velocity bias");
}
// this compute only calculates a bias, if comflag is set
// won't be two biases since comflag and biasflag cannot both be set
if (comflag && biasflag)
error->all(FLERR,"Cannot use both com and bias with compute temp/chunk");
if (comflag) tempbias = 1;
// vector data
vector = new double[6];
// chunk-based data
nchunk = 1;
maxchunk = 0;
- sum = sumall = NULL;
- count = countall = NULL;
- massproc = masstotal = NULL;
- vcm = vcmall = NULL;
- array = NULL;
-
+
if (nvalues) {
array_flag = 1;
size_array_cols = nvalues;
size_array_rows = 0;
size_array_rows_variable = 1;
extarray = 0;
}
allocate();
comstep = -1;
}
/* ---------------------------------------------------------------------- */
ComputeTempChunk::~ComputeTempChunk()
{
delete [] idchunk;
delete [] which;
delete [] id_bias;
delete [] vector;
memory->destroy(sum);
memory->destroy(sumall);
memory->destroy(count);
memory->destroy(countall);
memory->destroy(array);
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(vcm);
memory->destroy(vcmall);
}
/* ---------------------------------------------------------------------- */
void ComputeTempChunk::init()
{
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for "
"compute temp/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Compute temp/chunk does not use chunk/atom compute");
if (biasflag) {
int i = modify->find_compute(id_bias);
if (i < 0)
error->all(FLERR,"Could not find compute ID for temperature bias");
tbias = modify->compute[i];
}
}
/* ---------------------------------------------------------------------- */
double ComputeTempChunk::compute_scalar()
{
int i,index;
invoked_scalar = update->ntimestep;
// calculate chunk assignments,
// since only atoms in chunks contribute to global temperature
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
int *ichunk = cchunk->ichunk;
if (nchunk > maxchunk) allocate();
// remove velocity bias
if (biasflag) {
if (tbias->invoked_scalar != update->ntimestep) tbias->compute_scalar();
tbias->remove_bias_all();
}
// calculate COM velocity for each chunk
// won't be invoked with bias also removed = 2 biases
if (comflag && comstep != update->ntimestep) vcm_compute();
// calculate global temperature, optionally removing COM velocity
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double t = 0.0;
int mycount = 0;
if (!comflag) {
if (rmass) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) *
rmass[i];
mycount++;
}
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) *
mass[type[i]];
mycount++;
}
}
} else {
double vx,vy,vz;
if (rmass) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
vx = v[i][0] - vcmall[index][0];
vy = v[i][1] - vcmall[index][1];
vz = v[i][2] - vcmall[index][2];
t += (vx*vx + vy*vy + vz*vz) * rmass[i];
mycount++;
}
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
vx = v[i][0] - vcmall[index][0];
vy = v[i][1] - vcmall[index][1];
vz = v[i][2] - vcmall[index][2];
t += (vx*vx + vy*vy + vz*vz) * mass[type[i]];
mycount++;
}
}
}
// restore velocity bias
if (biasflag) tbias->restore_bias_all();
// final temperature
MPI_Allreduce(&t,&scalar,1,MPI_DOUBLE,MPI_SUM,world);
double rcount = mycount;
double allcount;
MPI_Allreduce(&rcount,&allcount,1,MPI_DOUBLE,MPI_SUM,world);
double dof = nchunk*cdof + adof*allcount;
double tfactor = 0.0;
if (dof > 0.0) tfactor = force->mvv2e / (dof * force->boltz);
if (dof < 0.0 && allcount > 0.0)
error->all(FLERR,"Temperature compute degrees of freedom < 0");
scalar *= tfactor;
return scalar;
}
/* ---------------------------------------------------------------------- */
void ComputeTempChunk::compute_vector()
{
int i,index;
invoked_vector = update->ntimestep;
// calculate chunk assignments,
// since only atoms in chunks contribute to global temperature
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
int *ichunk = cchunk->ichunk;
if (nchunk > maxchunk) allocate();
// remove velocity bias
if (biasflag) {
if (tbias->invoked_scalar != update->ntimestep) tbias->compute_scalar();
tbias->remove_bias_all();
}
// calculate COM velocity for each chunk
// won't be invoked with bias also removed = 2 biases
if (comflag && comstep != update->ntimestep) vcm_compute();
// calculate KE tensor, optionally removing COM velocity
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double massone,t[6];
for (i = 0; i < 6; i++) t[i] = 0.0;
if (!comflag) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
t[0] += massone * v[i][0]*v[i][0];
t[1] += massone * v[i][1]*v[i][1];
t[2] += massone * v[i][2]*v[i][2];
t[3] += massone * v[i][0]*v[i][1];
t[4] += massone * v[i][0]*v[i][2];
t[5] += massone * v[i][1]*v[i][2];
}
} else {
double vx,vy,vz;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
vx = v[i][0] - vcmall[index][0];
vy = v[i][1] - vcmall[index][1];
vz = v[i][2] - vcmall[index][2];
t[0] += massone * vx*vx;
t[1] += massone * vy*vy;
t[2] += massone * vz*vz;
t[3] += massone * vx*vy;
t[4] += massone * vx*vz;
t[5] += massone * vy*vz;
}
}
// restore velocity bias
if (biasflag) tbias->restore_bias_all();
// final KE
MPI_Allreduce(t,vector,6,MPI_DOUBLE,MPI_SUM,world);
for (i = 0; i < 6; i++) vector[i] *= force->mvv2e;
}
/* ---------------------------------------------------------------------- */
void ComputeTempChunk::compute_array()
{
invoked_array = update->ntimestep;
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
if (nchunk > maxchunk) allocate();
size_array_rows = nchunk;
// remove velocity bias
if (biasflag) {
if (tbias->invoked_scalar != update->ntimestep) tbias->compute_scalar();
tbias->remove_bias_all();
}
// calculate COM velocity for each chunk whether comflag set or not
// needed by some values even if comflag not set
// important to do this after velocity bias is removed
// otherwise per-chunk values that use both v and vcm will be inconsistent
if (comstep != update->ntimestep) vcm_compute();
// compute each value
for (int i = 0; i < nvalues; i++) {
if (which[i] == TEMP) temperature(i);
else if (which[i] == KECOM) kecom(i);
else if (which[i] == INTERNAL) internal(i);
}
// restore velocity bias
if (biasflag) tbias->restore_bias_all();
}
/* ----------------------------------------------------------------------
calculate velocity of COM for each chunk
------------------------------------------------------------------------- */
void ComputeTempChunk::vcm_compute()
{
int i,index;
double massone;
// avoid re-computing VCM more than once per step
comstep = update->ntimestep;
int *ichunk = cchunk->ichunk;
for (int i = 0; i < nchunk; i++) {
vcm[i][0] = vcm[i][1] = vcm[i][2] = 0.0;
massproc[i] = 0.0;
}
double **v = atom->v;
int *mask = atom->mask;
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
vcm[index][0] += v[i][0] * massone;
vcm[index][1] += v[i][1] * massone;
vcm[index][2] += v[i][2] * massone;
massproc[index] += massone;
}
MPI_Allreduce(&vcm[0][0],&vcmall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world);
for (i = 0; i < nchunk; i++) {
if (masstotal[i] > 0.0) {
vcmall[i][0] /= masstotal[i];
vcmall[i][1] /= masstotal[i];
vcmall[i][2] /= masstotal[i];
} else {
vcmall[i][0] = vcmall[i][1] = vcmall[i][2] = 0.0;
}
}
}
/* ----------------------------------------------------------------------
temperature of each chunk
------------------------------------------------------------------------- */
void ComputeTempChunk::temperature(int icol)
{
int i,index;
int *ichunk = cchunk->ichunk;
// zero local per-chunk values
for (int i = 0; i < nchunk; i++) {
count[i] = 0;
sum[i] = 0.0;
}
// per-chunk temperature, option for removing COM velocity
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
if (!comflag) {
if (rmass) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
sum[index] += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) *
rmass[i];
count[index]++;
}
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
sum[index] += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) *
mass[type[i]];
count[index]++;
}
}
} else {
double vx,vy,vz;
if (rmass) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
vx = v[i][0] - vcmall[index][0];
vy = v[i][1] - vcmall[index][1];
vz = v[i][2] - vcmall[index][2];
sum[index] += (vx*vx + vy*vy + vz*vz) * rmass[i];
count[index]++;
}
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
vx = v[i][0] - vcmall[index][0];
vy = v[i][1] - vcmall[index][1];
vz = v[i][2] - vcmall[index][2];
sum[index] += (vx*vx + vy*vy + vz*vz) * mass[type[i]];
count[index]++;
}
}
}
// sum across procs
MPI_Allreduce(sum,sumall,nchunk,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(count,countall,nchunk,MPI_INT,MPI_SUM,world);
// normalize temperatures by per-chunk DOF
double dof,tfactor;
double mvv2e = force->mvv2e;
double boltz = force->boltz;
for (int i = 0; i < nchunk; i++) {
dof = cdof + adof*countall[i];
if (dof > 0.0) tfactor = mvv2e / (dof * boltz);
else tfactor = 0.0;
array[i][icol] = tfactor * sumall[i];
}
}
/* ----------------------------------------------------------------------
KE of entire chunk moving at VCM
------------------------------------------------------------------------- */
void ComputeTempChunk::kecom(int icol)
{
int index;
int *ichunk = cchunk->ichunk;
// zero local per-chunk values
for (int i = 0; i < nchunk; i++) sum[i] = 0.0;
// per-chunk COM KE
double *mass = atom->mass;
double *rmass = atom->rmass;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
double vx,vy,vz;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
vx = vcmall[index][0];
vy = vcmall[index][1];
vz = vcmall[index][2];
sum[index] += (vx*vx + vy*vy + vz*vz) * rmass[i];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
vx = vcmall[index][0];
vy = vcmall[index][1];
vz = vcmall[index][2];
sum[index] += (vx*vx + vy*vy + vz*vz) * mass[type[i]];
}
}
// sum across procs
MPI_Allreduce(sum,sumall,nchunk,MPI_DOUBLE,MPI_SUM,world);
double mvv2e = force->mvv2e;
for (int i = 0; i < nchunk; i++)
array[i][icol] = 0.5 * mvv2e * sumall[i];
}
/* ----------------------------------------------------------------------
internal KE of each chunk around its VCM
computed using per-atom velocities with chunk VCM subtracted off
------------------------------------------------------------------------- */
void ComputeTempChunk::internal(int icol)
{
int index;
int *ichunk = cchunk->ichunk;
// zero local per-chunk values
for (int i = 0; i < nchunk; i++) sum[i] = 0.0;
// per-chunk internal KE
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
double vx,vy,vz;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
vx = v[i][0] - vcmall[index][0];
vy = v[i][1] - vcmall[index][1];
vz = v[i][2] - vcmall[index][2];
sum[index] += (vx*vx + vy*vy + vz*vz) * rmass[i];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
vx = v[i][0] - vcmall[index][0];
vy = v[i][1] - vcmall[index][1];
vz = v[i][2] - vcmall[index][2];
sum[index] += (vx*vx + vy*vy + vz*vz) * mass[type[i]];
}
}
// sum across procs
MPI_Allreduce(sum,sumall,nchunk,MPI_DOUBLE,MPI_SUM,world);
double mvv2e = force->mvv2e;
for (int i = 0; i < nchunk; i++)
array[i][icol] = 0.5 * mvv2e * sumall[i];
}
/* ----------------------------------------------------------------------
bias methods: called by thermostats
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
remove velocity bias from atom I to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempChunk::remove_bias(int i, double *v)
{
int index = cchunk->ichunk[i]-1;
if (index < 0) return;
v[0] -= vcmall[index][0];
v[1] -= vcmall[index][1];
v[2] -= vcmall[index][2];
}
/* ----------------------------------------------------------------------
remove velocity bias from all atoms to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempChunk::remove_bias_all()
{
int index;
int *ichunk = cchunk->ichunk;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
v[i][0] -= vcmall[index][0];
v[i][1] -= vcmall[index][1];
v[i][2] -= vcmall[index][2];
}
}
/* ----------------------------------------------------------------------
add back in velocity bias to atom I removed by remove_bias()
assume remove_bias() was previously called
------------------------------------------------------------------------- */
void ComputeTempChunk::restore_bias(int i, double *v)
{
int index = cchunk->ichunk[i]-1;
if (index < 0) return;
v[0] += vcmall[index][0];
v[1] += vcmall[index][1];
v[2] += vcmall[index][2];
}
/* ----------------------------------------------------------------------
add back in velocity bias to all atoms removed by remove_bias_all()
assume remove_bias_all() was previously called
------------------------------------------------------------------------- */
void ComputeTempChunk::restore_bias_all()
{
int index;
int *ichunk = cchunk->ichunk;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
v[i][0] += vcmall[index][0];
v[i][1] += vcmall[index][1];
v[i][2] += vcmall[index][2];
}
}
/* ----------------------------------------------------------------------
lock methods: called by fix ave/time
these methods insure vector/array size is locked for Nfreq epoch
by passing lock info along to compute chunk/atom
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
increment lock counter
------------------------------------------------------------------------- */
void ComputeTempChunk::lock_enable()
{
cchunk->lockcount++;
}
/* ----------------------------------------------------------------------
decrement lock counter in compute chunk/atom, it if still exists
------------------------------------------------------------------------- */
void ComputeTempChunk::lock_disable()
{
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->lockcount--;
}
}
/* ----------------------------------------------------------------------
calculate and return # of chunks = length of vector/array
------------------------------------------------------------------------- */
int ComputeTempChunk::lock_length()
{
nchunk = cchunk->setup_chunks();
return nchunk;
}
/* ----------------------------------------------------------------------
set the lock from startstep to stopstep
------------------------------------------------------------------------- */
void ComputeTempChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
cchunk->lock(fixptr,startstep,stopstep);
}
/* ----------------------------------------------------------------------
unset the lock
------------------------------------------------------------------------- */
void ComputeTempChunk::unlock(Fix *fixptr)
{
cchunk->unlock(fixptr);
}
/* ----------------------------------------------------------------------
free and reallocate per-chunk arrays
------------------------------------------------------------------------- */
void ComputeTempChunk::allocate()
{
memory->destroy(sum);
memory->destroy(sumall);
memory->destroy(count);
memory->destroy(countall);
memory->destroy(array);
maxchunk = nchunk;
memory->create(sum,maxchunk,"temp/chunk:sum");
memory->create(sumall,maxchunk,"temp/chunk:sumall");
memory->create(count,maxchunk,"temp/chunk:count");
memory->create(countall,maxchunk,"temp/chunk:countall");
memory->create(array,maxchunk,nvalues,"temp/chunk:array");
if (comflag || nvalues) {
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(vcm);
memory->destroy(vcmall);
memory->create(massproc,maxchunk,"vcm/chunk:massproc");
memory->create(masstotal,maxchunk,"vcm/chunk:masstotal");
memory->create(vcm,maxchunk,3,"vcm/chunk:vcm");
memory->create(vcmall,maxchunk,3,"vcm/chunk:vcmall");
}
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeTempChunk::memory_usage()
{
double bytes = (bigint) maxchunk * 2 * sizeof(double);
bytes += (bigint) maxchunk * 2 * sizeof(int);
bytes += (bigint) maxchunk * nvalues * sizeof(double);
if (comflag || nvalues) {
bytes += (bigint) maxchunk * 2 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
}
return bytes;
}
diff --git a/src/compute_temp_profile.cpp b/src/compute_temp_profile.cpp
index 654bea7eb..1c6e56359 100644
--- a/src/compute_temp_profile.cpp
+++ b/src/compute_temp_profile.cpp
@@ -1,566 +1,566 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <stdlib.h>
#include <string.h>
#include "compute_temp_profile.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "group.h"
#include "fix.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{TENSOR,BIN};
/* ---------------------------------------------------------------------- */
ComputeTempProfile::ComputeTempProfile(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ bin(NULL), vbin(NULL), binave(NULL), tbin(NULL), tbinall(NULL)
{
if (narg < 7) error->all(FLERR,"Illegal compute temp/profile command");
scalar_flag = 1;
extscalar = 0;
tempflag = 1;
tempbias = 1;
xflag = force->inumeric(FLERR,arg[3]);
yflag = force->inumeric(FLERR,arg[4]);
zflag = force->inumeric(FLERR,arg[5]);
if (zflag && domain->dimension == 2)
error->all(FLERR,"Compute temp/profile cannot use vz for 2d systemx");
ncount = 0;
ivx = ivy = ivz = 0;
if (xflag) ivx = ncount++;
if (yflag) ivy = ncount++;
if (zflag) ivz = ncount++;
ncount += 2;
nbinx = nbiny = nbinz = 1;
int iarg = 6;
if (strcmp(arg[iarg],"x") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute temp/profile command");
nbinx = force->inumeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"y") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute temp/profile command");
nbiny = force->inumeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"z") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute temp/profile command");
if (domain->dimension == 2)
error->all(FLERR,"Compute temp/profile cannot bin z for 2d systems");
nbinz = force->inumeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"xy") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal compute temp/profile command");
nbinx = force->inumeric(FLERR,arg[iarg+1]);
nbiny = force->inumeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg],"yz") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal compute temp/profile command");
if (domain->dimension == 2)
error->all(FLERR,"Compute temp/profile cannot bin z for 2d systems");
nbiny = force->inumeric(FLERR,arg[iarg+1]);
nbinz = force->inumeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg],"xz") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal compute temp/profile command");
if (domain->dimension == 2)
error->all(FLERR,"Compute temp/profile cannot bin z for 2d systems");
nbinx = force->inumeric(FLERR,arg[iarg+1]);
nbinz = force->inumeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg],"xyz") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal compute temp/profile command");
if (domain->dimension == 2)
error->all(FLERR,"Compute temp/profile cannot bin z for 2d systems");
nbinx = force->inumeric(FLERR,arg[iarg+1]);
nbiny = force->inumeric(FLERR,arg[iarg+2]);
nbinz = force->inumeric(FLERR,arg[iarg+3]);
iarg += 4;
} else error->all(FLERR,"Illegal compute temp/profile command");
// optional keywords
outflag = TENSOR;
while (iarg < narg) {
if (strcmp(arg[iarg],"out") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute temp/profile command");
if (strcmp(arg[iarg+1],"tensor") == 0) outflag = TENSOR;
else if (strcmp(arg[iarg+1],"bin") == 0) outflag = BIN;
else error->all(FLERR,"Illegal compute temp/profile command");
iarg += 2;
} else error->all(FLERR,"Illegal compute temp/profile command");
}
// setup
nbins = nbinx*nbiny*nbinz;
if (nbins <= 0) error->all(FLERR,"Illegal compute temp/profile command");
memory->create(vbin,nbins,ncount,"temp/profile:vbin");
memory->create(binave,nbins,ncount,"temp/profile:binave");
if (outflag == TENSOR) {
vector_flag = 1;
size_vector = 6;
extvector = 1;
vector = new double[size_vector];
} else {
array_flag = 1;
size_array_rows = nbins;
size_array_cols = 2;
extarray = 0;
memory->create(tbin,nbins,"temp/profile:tbin");
memory->create(tbinall,nbins,"temp/profile:tbinall");
memory->create(array,nbins,2,"temp/profile:array");
}
maxatom = 0;
- bin = NULL;
}
/* ---------------------------------------------------------------------- */
ComputeTempProfile::~ComputeTempProfile()
{
memory->destroy(vbin);
memory->destroy(binave);
memory->destroy(bin);
if (outflag == TENSOR) delete [] vector;
else {
memory->destroy(tbin);
memory->destroy(tbinall);
memory->destroy(array);
}
}
/* ---------------------------------------------------------------------- */
void ComputeTempProfile::init()
{
dof_compute();
// ptrs to domain data
box_change = domain->box_change;
triclinic = domain->triclinic;
periodicity = domain->periodicity;
if (triclinic) {
boxlo = domain->boxlo_lamda;
boxhi = domain->boxhi_lamda;
prd = domain->prd_lamda;
} else {
boxlo = domain->boxlo;
boxhi = domain->boxhi;
prd = domain->prd;
}
if (!box_change) bin_setup();
}
/* ---------------------------------------------------------------------- */
void ComputeTempProfile::setup()
{
dynamic = 0;
if (dynamic_user || group->dynamic[igroup]) dynamic = 1;
dof_compute();
}
/* ---------------------------------------------------------------------- */
void ComputeTempProfile::dof_compute()
{
adjust_dof_fix();
natoms_temp = group->count(igroup);
dof = domain->dimension * natoms_temp;
// subtract additional d*Nbins DOF, as in Evans and Morriss paper
dof -= extra_dof + fix_dof + domain->dimension*nbins;
if (dof > 0) tfactor = force->mvv2e / (dof * force->boltz);
else tfactor = 0.0;
}
/* ---------------------------------------------------------------------- */
double ComputeTempProfile::compute_scalar()
{
int ibin;
double vthermal[3];
invoked_scalar = update->ntimestep;
bin_average();
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double t = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
ibin = bin[i];
if (xflag) vthermal[0] = v[i][0] - binave[ibin][ivx];
else vthermal[0] = v[i][0];
if (yflag) vthermal[1] = v[i][1] - binave[ibin][ivy];
else vthermal[1] = v[i][1];
if (zflag) vthermal[2] = v[i][2] - binave[ibin][ivz];
else vthermal[2] = v[i][2];
if (rmass)
t += (vthermal[0]*vthermal[0] + vthermal[1]*vthermal[1] +
vthermal[2]*vthermal[2]) * rmass[i];
else
t += (vthermal[0]*vthermal[0] + vthermal[1]*vthermal[1] +
vthermal[2]*vthermal[2]) * mass[type[i]];
}
MPI_Allreduce(&t,&scalar,1,MPI_DOUBLE,MPI_SUM,world);
if (dynamic) dof_compute();
if (dof < 0.0 && natoms_temp > 0.0)
error->all(FLERR,"Temperature compute degrees of freedom < 0");
scalar *= tfactor;
return scalar;
}
/* ---------------------------------------------------------------------- */
void ComputeTempProfile::compute_vector()
{
int i,ibin;
double vthermal[3];
invoked_vector = update->ntimestep;
bin_average();
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double massone,t[6];
for (i = 0; i < 6; i++) t[i] = 0.0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
ibin = bin[i];
if (xflag) vthermal[0] = v[i][0] - binave[ibin][ivx];
else vthermal[0] = v[i][0];
if (yflag) vthermal[1] = v[i][1] - binave[ibin][ivy];
else vthermal[1] = v[i][1];
if (zflag) vthermal[2] = v[i][2] - binave[ibin][ivz];
else vthermal[2] = v[i][2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
t[0] += massone * vthermal[0]*vthermal[0];
t[1] += massone * vthermal[1]*vthermal[1];
t[2] += massone * vthermal[2]*vthermal[2];
t[3] += massone * vthermal[0]*vthermal[1];
t[4] += massone * vthermal[0]*vthermal[2];
t[5] += massone * vthermal[1]*vthermal[2];
}
MPI_Allreduce(t,vector,6,MPI_DOUBLE,MPI_SUM,world);
for (i = 0; i < 6; i++) vector[i] *= force->mvv2e;
}
/* ---------------------------------------------------------------------- */
void ComputeTempProfile::compute_array()
{
int i,ibin;
double vthermal[3];
invoked_array = update->ntimestep;
bin_average();
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (i = 0; i < nbins; i++) tbin[i] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
ibin = bin[i];
if (xflag) vthermal[0] = v[i][0] - binave[ibin][ivx];
else vthermal[0] = v[i][0];
if (yflag) vthermal[1] = v[i][1] - binave[ibin][ivy];
else vthermal[1] = v[i][1];
if (zflag) vthermal[2] = v[i][2] - binave[ibin][ivz];
else vthermal[2] = v[i][2];
if (rmass)
tbin[ibin] += (vthermal[0]*vthermal[0] + vthermal[1]*vthermal[1] +
vthermal[2]*vthermal[2]) * rmass[i];
else
tbin[ibin] += (vthermal[0]*vthermal[0] + vthermal[1]*vthermal[1] +
vthermal[2]*vthermal[2]) * mass[type[i]];
}
MPI_Allreduce(tbin,tbinall,nbins,MPI_DOUBLE,MPI_SUM,world);
int nper = domain->dimension;
for (i = 0; i < nbins; i++) {
array[i][0] = binave[i][ncount-1];
if (array[i][0] > 0.0) {
dof = nper*array[i][0] - extra_dof;
if (dof > 0) tfactor = force->mvv2e / (dof * force->boltz);
else tfactor = 0.0;
array[i][1] = tfactor*tbinall[i];
} else array[i][1] = 0.0;
}
}
/* ----------------------------------------------------------------------
remove velocity bias from atom I to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempProfile::remove_bias(int i, double *v)
{
int ibin = bin[i];
if (xflag) v[0] -= binave[ibin][ivx];
if (yflag) v[1] -= binave[ibin][ivy];
if (zflag) v[2] -= binave[ibin][ivz];
}
/* ----------------------------------------------------------------------
remove velocity bias from all atoms to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempProfile::remove_bias_all()
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int ibin;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
ibin = bin[i];
if (xflag) v[i][0] -= binave[ibin][ivx];
if (yflag) v[i][1] -= binave[ibin][ivy];
if (zflag) v[i][2] -= binave[ibin][ivz];
}
}
/* ----------------------------------------------------------------------
add back in velocity bias to atom I removed by remove_bias()
assume remove_bias() was previously called
------------------------------------------------------------------------- */
void ComputeTempProfile::restore_bias(int i, double *v)
{
int ibin = bin[i];
if (xflag) v[0] += binave[ibin][ivx];
if (yflag) v[1] += binave[ibin][ivy];
if (zflag) v[2] += binave[ibin][ivz];
}
/* ----------------------------------------------------------------------
add back in velocity bias to all atoms removed by remove_bias_all()
assume remove_bias_all() was previously called
------------------------------------------------------------------------- */
void ComputeTempProfile::restore_bias_all()
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int ibin;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
ibin = bin[i];
if (xflag) v[i][0] += binave[ibin][ivx];
if (yflag) v[i][1] += binave[ibin][ivy];
if (zflag) v[i][2] += binave[ibin][ivz];
}
}
/* ----------------------------------------------------------------------
compute average COM velocity in each bin
------------------------------------------------------------------------- */
void ComputeTempProfile::bin_average()
{
int i,j,ibin;
if (box_change) bin_setup();
bin_assign();
// clear bins, including particle mass and count
for (i = 0; i < nbins; i++)
for (j = 0; j < ncount; j++)
vbin[i][j] = 0.0;
// sum each particle's mass-weighted velocity, mass, count to appropriate bin
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
int nc2 = ncount-2;
int nc1 = ncount-1;
if (rmass) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
ibin = bin[i];
if (xflag) vbin[ibin][ivx] += rmass[i]*v[i][0];
if (yflag) vbin[ibin][ivy] += rmass[i]*v[i][1];
if (zflag) vbin[ibin][ivz] += rmass[i]*v[i][2];
vbin[ibin][nc2] += rmass[i];
vbin[ibin][nc1] += 1.0;
}
} else {
double onemass;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
ibin = bin[i];
onemass = mass[type[i]];
if (xflag) vbin[ibin][ivx] += onemass*v[i][0];
if (yflag) vbin[ibin][ivy] += onemass*v[i][1];
if (zflag) vbin[ibin][ivz] += onemass*v[i][2];
vbin[ibin][nc2] += onemass;
vbin[ibin][nc1] += 1.0;
}
}
// sum bins across processors
MPI_Allreduce(vbin[0],binave[0],nbins*ncount,MPI_DOUBLE,MPI_SUM,world);
// compute ave COM velocity in each bin, checking for no particles
for (i = 0; i < nbins; i++)
if (binave[i][nc1] > 0.0)
for (j = 0; j < nc2; j++)
binave[i][j] /= binave[i][nc2];
}
/* ----------------------------------------------------------------------
set bin sizes, redo if box size changes
------------------------------------------------------------------------- */
void ComputeTempProfile::bin_setup()
{
invdelta[0] = nbinx / prd[0];
invdelta[1] = nbiny / prd[1];
invdelta[2] = nbinz / prd[2];
}
/* ----------------------------------------------------------------------
assign all atoms to bins
------------------------------------------------------------------------- */
void ComputeTempProfile::bin_assign()
{
// reallocate bin array if necessary
if (atom->nmax > maxatom) {
maxatom = atom->nmax;
memory->destroy(bin);
memory->create(bin,maxatom,"temp/profile:bin");
}
// assign each atom to a bin, accounting for PBC
// if triclinic, do this in lamda space
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int ibinx,ibiny,ibinz;
double coord;
if (triclinic) domain->x2lamda(nlocal);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (nbinx > 1) {
coord = x[i][0];
if (periodicity[0]) {
if (coord < boxlo[0]) coord += prd[0];
if (coord >= boxhi[0]) coord -= prd[0];
}
ibinx = static_cast<int> ((coord - boxlo[0]) * invdelta[0]);
ibinx = MAX(ibinx,0);
ibinx = MIN(ibinx,nbinx-1);
} else ibinx = 0;
if (nbiny > 1) {
coord = x[i][1];
if (periodicity[1]) {
if (coord < boxlo[1]) coord += prd[1];
if (coord >= boxhi[1]) coord -= prd[1];
}
ibiny = static_cast<int> ((coord - boxlo[1]) * invdelta[1]);
ibiny = MAX(ibiny,0);
ibiny = MIN(ibiny,nbiny-1);
} else ibiny = 0;
if (nbinz > 1) {
coord = x[i][2];
if (periodicity[2]) {
if (coord < boxlo[2]) coord += prd[2];
if (coord >= boxhi[2]) coord -= prd[2];
}
ibinz = static_cast<int> ((coord - boxlo[2]) * invdelta[2]);
ibinz = MAX(ibinz,0);
ibinz = MIN(ibinz,nbinz-1);
} else ibinz = 0;
bin[i] = nbinx*nbiny*ibinz + nbinx*ibiny + ibinx;
}
if (triclinic) domain->lamda2x(nlocal);
}
/* ---------------------------------------------------------------------- */
double ComputeTempProfile::memory_usage()
{
double bytes = maxatom * sizeof(int);
bytes += nbins*ncount * sizeof(double);
return bytes;
}
diff --git a/src/compute_temp_region.cpp b/src/compute_temp_region.cpp
index 33e07bfb1..e63666934 100644
--- a/src/compute_temp_region.cpp
+++ b/src/compute_temp_region.cpp
@@ -1,270 +1,271 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include "compute_temp_region.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "domain.h"
#include "region.h"
#include "group.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeTempRegion::ComputeTempRegion(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ idregion(NULL)
{
if (narg != 4) error->all(FLERR,"Illegal compute temp/region command");
iregion = domain->find_region(arg[3]);
if (iregion == -1)
error->all(FLERR,"Region ID for compute temp/region does not exist");
int n = strlen(arg[3]) + 1;
idregion = new char[n];
strcpy(idregion,arg[3]);
scalar_flag = vector_flag = 1;
size_vector = 6;
extscalar = 0;
extvector = 1;
tempflag = 1;
tempbias = 1;
maxbias = 0;
vbiasall = NULL;
vector = new double[6];
}
/* ---------------------------------------------------------------------- */
ComputeTempRegion::~ComputeTempRegion()
{
delete [] idregion;
memory->destroy(vbiasall);
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeTempRegion::init()
{
// set index and check validity of region
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for compute temp/region does not exist");
}
/* ---------------------------------------------------------------------- */
void ComputeTempRegion::setup()
{
dynamic = 0;
if (dynamic_user || group->dynamic[igroup]) dynamic = 1;
dof = 0.0;
}
/* ---------------------------------------------------------------------- */
void ComputeTempRegion::dof_remove_pre()
{
domain->regions[iregion]->prematch();
}
/* ---------------------------------------------------------------------- */
int ComputeTempRegion::dof_remove(int i)
{
double *x = atom->x[i];
if (domain->regions[iregion]->match(x[0],x[1],x[2])) return 0;
return 1;
}
/* ---------------------------------------------------------------------- */
double ComputeTempRegion::compute_scalar()
{
invoked_scalar = update->ntimestep;
double **x = atom->x;
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
Region *region = domain->regions[iregion];
region->prematch();
int count = 0;
double t = 0.0;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
count++;
t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) * rmass[i];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
count++;
t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) *
mass[type[i]];
}
}
double tarray[2],tarray_all[2];
tarray[0] = count;
tarray[1] = t;
MPI_Allreduce(tarray,tarray_all,2,MPI_DOUBLE,MPI_SUM,world);
dof = domain->dimension * tarray_all[0] - extra_dof;
if (dof < 0.0 && tarray_all[0] > 0.0)
error->all(FLERR,"Temperature compute degrees of freedom < 0");
if (dof > 0) scalar = force->mvv2e * tarray_all[1] / (dof * force->boltz);
else scalar = 0.0;
return scalar;
}
/* ---------------------------------------------------------------------- */
void ComputeTempRegion::compute_vector()
{
int i;
invoked_vector = update->ntimestep;
double **x = atom->x;
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
Region *region = domain->regions[iregion];
region->prematch();
double massone,t[6];
for (i = 0; i < 6; i++) t[i] = 0.0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
t[0] += massone * v[i][0]*v[i][0];
t[1] += massone * v[i][1]*v[i][1];
t[2] += massone * v[i][2]*v[i][2];
t[3] += massone * v[i][0]*v[i][1];
t[4] += massone * v[i][0]*v[i][2];
t[5] += massone * v[i][1]*v[i][2];
}
MPI_Allreduce(t,vector,6,MPI_DOUBLE,MPI_SUM,world);
for (i = 0; i < 6; i++) vector[i] *= force->mvv2e;
}
/* ----------------------------------------------------------------------
remove velocity bias from atom I to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempRegion::remove_bias(int i, double *v)
{
double *x = atom->x[i];
if (domain->regions[iregion]->match(x[0],x[1],x[2]))
vbias[0] = vbias[1] = vbias[2] = 0.0;
else {
vbias[0] = v[0];
vbias[1] = v[1];
vbias[2] = v[2];
v[0] = v[1] = v[2] = 0.0;
}
}
/* ----------------------------------------------------------------------
remove velocity bias from all atoms to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempRegion::remove_bias_all()
{
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (atom->nmax > maxbias) {
memory->destroy(vbiasall);
maxbias = atom->nmax;
memory->create(vbiasall,maxbias,3,"temp/region:vbiasall");
}
Region *region = domain->regions[iregion];
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region->match(x[i][0],x[i][1],x[i][2]))
vbiasall[i][0] = vbiasall[i][1] = vbiasall[i][2] = 0.0;
else {
vbiasall[i][0] = v[i][0];
vbiasall[i][1] = v[i][1];
vbiasall[i][2] = v[i][2];
v[i][0] = v[i][1] = v[i][2] = 0.0;
}
}
}
/* ----------------------------------------------------------------------
add back in velocity bias to atom I removed by remove_bias()
assume remove_bias() was previously called
------------------------------------------------------------------------- */
void ComputeTempRegion::restore_bias(int i, double *v)
{
v[0] += vbias[0];
v[1] += vbias[1];
v[2] += vbias[2];
}
/* ----------------------------------------------------------------------
add back in velocity bias to all atoms removed by remove_bias_all()
assume remove_bias_all() was previously called
------------------------------------------------------------------------- */
void ComputeTempRegion::restore_bias_all()
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
v[i][0] += vbiasall[i][0];
v[i][1] += vbiasall[i][1];
v[i][2] += vbiasall[i][2];
}
}
/* ---------------------------------------------------------------------- */
double ComputeTempRegion::memory_usage()
{
double bytes = 3*maxbias * sizeof(double);
return bytes;
}
diff --git a/src/compute_temp_sphere.cpp b/src/compute_temp_sphere.cpp
index 64b23308e..50995dfa8 100644
--- a/src/compute_temp_sphere.cpp
+++ b/src/compute_temp_sphere.cpp
@@ -1,337 +1,337 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include "compute_temp_sphere.h"
#include "atom.h"
#include "atom_vec.h"
#include "update.h"
#include "force.h"
#include "domain.h"
#include "modify.h"
#include "comm.h"
#include "group.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{ROTATE,ALL};
#define INERTIA 0.4 // moment of inertia prefactor for sphere
/* ---------------------------------------------------------------------- */
ComputeTempSphere::ComputeTempSphere(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ id_bias(NULL)
{
if (narg < 3) error->all(FLERR,"Illegal compute temp/sphere command");
scalar_flag = vector_flag = 1;
size_vector = 6;
extscalar = 0;
extvector = 1;
tempflag = 1;
tempbias = 0;
- id_bias = NULL;
mode = ALL;
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"bias") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute temp/sphere command");
tempbias = 1;
int n = strlen(arg[iarg+1]) + 1;
id_bias = new char[n];
strcpy(id_bias,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"dof") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute temp/sphere command");
if (strcmp(arg[iarg+1],"rotate") == 0) mode = ROTATE;
else if (strcmp(arg[iarg+1],"all") == 0) mode = ALL;
else error->all(FLERR,"Illegal compute temp/sphere command");
iarg += 2;
} else error->all(FLERR,"Illegal compute temp/sphere command");
}
vector = new double[6];
// error checks
if (!atom->sphere_flag)
error->all(FLERR,"Compute temp/sphere requires atom style sphere");
}
/* ---------------------------------------------------------------------- */
ComputeTempSphere::~ComputeTempSphere()
{
delete [] id_bias;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeTempSphere::init()
{
if (tempbias) {
int i = modify->find_compute(id_bias);
if (i < 0)
error->all(FLERR,"Could not find compute ID for temperature bias");
tbias = modify->compute[i];
if (tbias->tempflag == 0)
error->all(FLERR,"Bias compute does not calculate temperature");
if (tbias->tempbias == 0)
error->all(FLERR,"Bias compute does not calculate a velocity bias");
if (tbias->igroup != igroup)
error->all(FLERR,"Bias compute group does not match compute group");
if (strcmp(tbias->style,"temp/region") == 0) tempbias = 2;
else tempbias = 1;
// init and setup bias compute because
// this compute's setup()->dof_compute() may be called first
tbias->init();
tbias->setup();
}
}
/* ---------------------------------------------------------------------- */
void ComputeTempSphere::setup()
{
dynamic = 0;
if (dynamic_user || group->dynamic[igroup]) dynamic = 1;
dof_compute();
}
/* ---------------------------------------------------------------------- */
void ComputeTempSphere::dof_compute()
{
int count,count_all;
adjust_dof_fix();
natoms_temp = group->count(igroup);
// 6 or 3 dof for extended/point particles for 3d
// 3 or 2 dof for extended/point particles for 2d
// which dof are included also depends on mode
// assume full rotation of extended particles
// user should correct this via compute_modify if needed
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
count = 0;
if (domain->dimension == 3) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (radius[i] == 0.0) {
if (mode == ALL) count += 3;
} else {
if (mode == ALL) count += 6;
else count += 3;
}
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (radius[i] == 0.0) {
if (mode == ALL) count += 2;
} else {
if (mode == ALL) count += 3;
else count += 1;
}
}
}
MPI_Allreduce(&count,&count_all,1,MPI_INT,MPI_SUM,world);
dof = count_all;
// additional adjustments to dof
if (tempbias == 1) {
if (mode == ALL) dof -= tbias->dof_remove(-1) * natoms_temp;
} else if (tempbias == 2) {
int *mask = atom->mask;
int nlocal = atom->nlocal;
tbias->dof_remove_pre();
count = 0;
if (domain->dimension == 3) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (tbias->dof_remove(i)) {
if (radius[i] == 0.0) {
if (mode == ALL) count += 3;
} else {
if (mode == ALL) count += 6;
else count += 3;
}
}
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (tbias->dof_remove(i)) {
if (radius[i] == 0.0) {
if (mode == ALL) count += 2;
} else {
if (mode == ALL) count += 3;
else count += 1;
}
}
}
}
MPI_Allreduce(&count,&count_all,1,MPI_INT,MPI_SUM,world);
dof -= count_all;
}
dof -= extra_dof + fix_dof;
if (dof > 0) tfactor = force->mvv2e / (dof * force->boltz);
else tfactor = 0.0;
}
/* ---------------------------------------------------------------------- */
double ComputeTempSphere::compute_scalar()
{
invoked_scalar = update->ntimestep;
if (tempbias) {
if (tbias->invoked_scalar != update->ntimestep) tbias->compute_scalar();
tbias->remove_bias_all();
}
double **v = atom->v;
double **omega = atom->omega;
double *radius = atom->radius;
double *rmass = atom->rmass;
int *mask = atom->mask;
int nlocal = atom->nlocal;
// point particles will not contribute rotation due to radius = 0
double t = 0.0;
if (mode == ALL) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) * rmass[i];
t += (omega[i][0]*omega[i][0] + omega[i][1]*omega[i][1] +
omega[i][2]*omega[i][2]) * INERTIA*rmass[i]*radius[i]*radius[i];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
t += (omega[i][0]*omega[i][0] + omega[i][1]*omega[i][1] +
omega[i][2]*omega[i][2]) * INERTIA*rmass[i]*radius[i]*radius[i];
}
if (tempbias) tbias->restore_bias_all();
MPI_Allreduce(&t,&scalar,1,MPI_DOUBLE,MPI_SUM,world);
if (dynamic || tempbias == 2) dof_compute();
if (dof < 0.0 && natoms_temp > 0.0)
error->all(FLERR,"Temperature compute degrees of freedom < 0");
scalar *= tfactor;
return scalar;
}
/* ---------------------------------------------------------------------- */
void ComputeTempSphere::compute_vector()
{
invoked_vector = update->ntimestep;
if (tempbias) {
if (tbias->invoked_vector != update->ntimestep) tbias->compute_vector();
tbias->remove_bias_all();
}
double **v = atom->v;
double **omega = atom->omega;
double *rmass = atom->rmass;
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
// point particles will not contribute rotation due to radius = 0
double massone,inertiaone,t[6];
for (int i = 0; i < 6; i++) t[i] = 0.0;
if (mode == ALL) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
massone = rmass[i];
t[0] += massone * v[i][0]*v[i][0];
t[1] += massone * v[i][1]*v[i][1];
t[2] += massone * v[i][2]*v[i][2];
t[3] += massone * v[i][0]*v[i][1];
t[4] += massone * v[i][0]*v[i][2];
t[5] += massone * v[i][1]*v[i][2];
inertiaone = INERTIA*rmass[i]*radius[i]*radius[i];
t[0] += inertiaone * omega[i][0]*omega[i][0];
t[1] += inertiaone * omega[i][1]*omega[i][1];
t[2] += inertiaone * omega[i][2]*omega[i][2];
t[3] += inertiaone * omega[i][0]*omega[i][1];
t[4] += inertiaone * omega[i][0]*omega[i][2];
t[5] += inertiaone * omega[i][1]*omega[i][2];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
inertiaone = INERTIA*rmass[i]*radius[i]*radius[i];
t[0] += inertiaone * omega[i][0]*omega[i][0];
t[1] += inertiaone * omega[i][1]*omega[i][1];
t[2] += inertiaone * omega[i][2]*omega[i][2];
t[3] += inertiaone * omega[i][0]*omega[i][1];
t[4] += inertiaone * omega[i][0]*omega[i][2];
t[5] += inertiaone * omega[i][1]*omega[i][2];
}
}
if (tempbias) tbias->restore_bias_all();
MPI_Allreduce(t,vector,6,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < 6; i++) vector[i] *= force->mvv2e;
}
/* ----------------------------------------------------------------------
remove velocity bias from atom I to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempSphere::remove_bias(int i, double *v)
{
tbias->remove_bias(i,v);
}
/* ----------------------------------------------------------------------
add back in velocity bias to atom I removed by remove_bias()
assume remove_bias() was previously called
------------------------------------------------------------------------- */
void ComputeTempSphere::restore_bias(int i, double *v)
{
tbias->restore_bias(i,v);
}
diff --git a/src/compute_torque_chunk.cpp b/src/compute_torque_chunk.cpp
index 5462debcf..25386ad40 100644
--- a/src/compute_torque_chunk.cpp
+++ b/src/compute_torque_chunk.cpp
@@ -1,255 +1,253 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_torque_chunk.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeTorqueChunk::ComputeTorqueChunk(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ idchunk(NULL), massproc(NULL), masstotal(NULL), com(NULL), comall(NULL), torque(NULL), torqueall(NULL)
{
if (narg != 4) error->all(FLERR,"Illegal compute torque/chunk command");
array_flag = 1;
size_array_cols = 3;
size_array_rows = 0;
size_array_rows_variable = 1;
extarray = 0;
// ID of compute chunk/atom
int n = strlen(arg[3]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[3]);
init();
// chunk-based data
nchunk = 1;
maxchunk = 0;
- massproc = masstotal = NULL;
- com = comall = NULL;
- torque = torqueall = NULL;
allocate();
}
/* ---------------------------------------------------------------------- */
ComputeTorqueChunk::~ComputeTorqueChunk()
{
delete [] idchunk;
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(torque);
memory->destroy(torqueall);
}
/* ---------------------------------------------------------------------- */
void ComputeTorqueChunk::init()
{
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for "
"compute torque/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Compute torque/chunk does not use chunk/atom compute");
}
/* ---------------------------------------------------------------------- */
void ComputeTorqueChunk::compute_array()
{
int i,index;
double dx,dy,dz,massone;
double unwrap[3];
invoked_array = update->ntimestep;
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
int *ichunk = cchunk->ichunk;
if (nchunk > maxchunk) allocate();
size_array_rows = nchunk;
// zero local per-chunk values
for (int i = 0; i < nchunk; i++) {
massproc[i] = 0.0;
com[i][0] = com[i][1] = com[i][2] = 0.0;
torque[i][0] = torque[i][1] = torque[i][2] = 0.0;
}
// compute COM for each chunk
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
domain->unmap(x[i],image[i],unwrap);
massproc[index] += massone;
com[index][0] += unwrap[0] * massone;
com[index][1] += unwrap[1] * massone;
com[index][2] += unwrap[2] * massone;
}
MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&com[0][0],&comall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < nchunk; i++) {
if (masstotal[i] > 0.0) {
comall[i][0] /= masstotal[i];
comall[i][1] /= masstotal[i];
comall[i][2] /= masstotal[i];
}
}
// compute torque on each chunk
double **f = atom->f;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - comall[index][0];
dy = unwrap[1] - comall[index][1];
dz = unwrap[2] - comall[index][2];
torque[index][0] += dy*f[i][2] - dz*f[i][1];
torque[index][1] += dz*f[i][0] - dx*f[i][2];
torque[index][2] += dx*f[i][1] - dy*f[i][0];
}
MPI_Allreduce(&torque[0][0],&torqueall[0][0],3*nchunk,
MPI_DOUBLE,MPI_SUM,world);
}
/* ----------------------------------------------------------------------
lock methods: called by fix ave/time
these methods insure vector/array size is locked for Nfreq epoch
by passing lock info along to compute chunk/atom
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
increment lock counter
------------------------------------------------------------------------- */
void ComputeTorqueChunk::lock_enable()
{
cchunk->lockcount++;
}
/* ----------------------------------------------------------------------
decrement lock counter in compute chunk/atom, it if still exists
------------------------------------------------------------------------- */
void ComputeTorqueChunk::lock_disable()
{
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->lockcount--;
}
}
/* ----------------------------------------------------------------------
calculate and return # of chunks = length of vector/array
------------------------------------------------------------------------- */
int ComputeTorqueChunk::lock_length()
{
nchunk = cchunk->setup_chunks();
return nchunk;
}
/* ----------------------------------------------------------------------
set the lock from startstep to stopstep
------------------------------------------------------------------------- */
void ComputeTorqueChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
cchunk->lock(fixptr,startstep,stopstep);
}
/* ----------------------------------------------------------------------
unset the lock
------------------------------------------------------------------------- */
void ComputeTorqueChunk::unlock(Fix *fixptr)
{
cchunk->unlock(fixptr);
}
/* ----------------------------------------------------------------------
free and reallocate per-chunk arrays
------------------------------------------------------------------------- */
void ComputeTorqueChunk::allocate()
{
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(com);
memory->destroy(comall);
memory->destroy(torque);
memory->destroy(torqueall);
maxchunk = nchunk;
memory->create(massproc,maxchunk,"torque/chunk:massproc");
memory->create(masstotal,maxchunk,"torque/chunk:masstotal");
memory->create(com,maxchunk,3,"torque/chunk:com");
memory->create(comall,maxchunk,3,"torque/chunk:comall");
memory->create(torque,maxchunk,3,"torque/chunk:torque");
memory->create(torqueall,maxchunk,3,"torque/chunk:torqueall");
array = torqueall;
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeTorqueChunk::memory_usage()
{
double bytes = (bigint) maxchunk * 2 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
return bytes;
}
diff --git a/src/compute_vacf.cpp b/src/compute_vacf.cpp
index c06113a77..6ba272e57 100755
--- a/src/compute_vacf.cpp
+++ b/src/compute_vacf.cpp
@@ -1,155 +1,156 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government ret
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.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_vacf.h"
#include "atom.h"
#include "update.h"
#include "group.h"
#include "modify.h"
#include "fix_store.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeVACF::ComputeVACF(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ id_fix(NULL)
{
if (narg < 3) error->all(FLERR,"Illegal compute vacf command");
vector_flag = 1;
size_vector = 4;
extvector = 0;
create_attribute = 1;
// create a new fix STORE style
// id = compute-ID + COMPUTE_STORE, fix group = compute group
int n = strlen(id) + strlen("_COMPUTE_STORE") + 1;
id_fix = new char[n];
strcpy(id_fix,id);
strcat(id_fix,"_COMPUTE_STORE");
char **newarg = new char*[6];
newarg[0] = id_fix;
newarg[1] = group->names[igroup];
newarg[2] = (char *) "STORE";
newarg[3] = (char *) "peratom";
newarg[4] = (char *) "1";
newarg[5] = (char *) "3";
modify->add_fix(6,newarg);
fix = (FixStore *) modify->fix[modify->nfix-1];
delete [] newarg;
// store current velocities in fix store array
// skip if reset from restart file
if (fix->restart_reset) fix->restart_reset = 0;
else {
double **voriginal = fix->astore;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
voriginal[i][0] = v[i][0];
voriginal[i][1] = v[i][1];
voriginal[i][2] = v[i][2];
} else voriginal[i][0] = voriginal[i][1] = voriginal[i][2] = 0.0;
}
// displacement vector
vector = new double[4];
}
/* ---------------------------------------------------------------------- */
ComputeVACF::~ComputeVACF()
{
// check nfix in case all fixes have already been deleted
if (modify->nfix) modify->delete_fix(id_fix);
delete [] id_fix;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeVACF::init()
{
// set fix which stores original atom velocities
int ifix = modify->find_fix(id_fix);
if (ifix < 0) error->all(FLERR,"Could not find compute vacf fix ID");
fix = (FixStore *) modify->fix[ifix];
// nvacf = # of atoms in group
nvacf = group->count(igroup);
}
/* ---------------------------------------------------------------------- */
void ComputeVACF::compute_vector()
{
invoked_vector = update->ntimestep;
double **voriginal = fix->astore;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double vxsq,vysq,vzsq;
double vacf[4];
vacf[0] = vacf[1] = vacf[2] = vacf[3] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
vxsq = v[i][0] * voriginal[i][0];
vysq = v[i][1] * voriginal[i][1];
vzsq = v[i][2] * voriginal[i][2];
vacf[0] += vxsq;
vacf[1] += vysq;
vacf[2] += vzsq;
vacf[3] += vxsq + vysq + vzsq;
}
MPI_Allreduce(vacf,vector,4,MPI_DOUBLE,MPI_SUM,world);
if (nvacf) {
vector[0] /= nvacf;
vector[1] /= nvacf;
vector[2] /= nvacf;
vector[3] /= nvacf;
}
}
/* ----------------------------------------------------------------------
initialize one atom's storage values, called when atom is created
------------------------------------------------------------------------- */
void ComputeVACF::set_arrays(int i)
{
double **voriginal = fix->astore;
double **v = atom->v;
voriginal[i][0] = v[i][0];
voriginal[i][1] = v[i][1];
voriginal[i][2] = v[i][2];
}
diff --git a/src/compute_vcm_chunk.cpp b/src/compute_vcm_chunk.cpp
index cd864b2aa..0661bf445 100644
--- a/src/compute_vcm_chunk.cpp
+++ b/src/compute_vcm_chunk.cpp
@@ -1,240 +1,239 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "compute_vcm_chunk.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{ONCE,NFREQ,EVERY};
/* ---------------------------------------------------------------------- */
ComputeVCMChunk::ComputeVCMChunk(LAMMPS *lmp, int narg, char **arg) :
- Compute(lmp, narg, arg)
+ Compute(lmp, narg, arg),
+ idchunk(NULL), massproc(NULL), masstotal(NULL), vcm(NULL), vcmall(NULL)
{
if (narg != 4) error->all(FLERR,"Illegal compute vcm/chunk command");
array_flag = 1;
size_array_cols = 3;
size_array_rows = 0;
size_array_rows_variable = 1;
extarray = 0;
// ID of compute chunk/atom
int n = strlen(arg[3]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[3]);
init();
// chunk-based data
nchunk = 1;
maxchunk = 0;
- massproc = masstotal = NULL;
- vcm = vcmall = NULL;
allocate();
firstflag = massneed = 1;
}
/* ---------------------------------------------------------------------- */
ComputeVCMChunk::~ComputeVCMChunk()
{
delete [] idchunk;
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(vcm);
memory->destroy(vcmall);
}
/* ---------------------------------------------------------------------- */
void ComputeVCMChunk::init()
{
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for compute vcm/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Compute vcm/chunk does not use chunk/atom compute");
}
/* ---------------------------------------------------------------------- */
void ComputeVCMChunk::setup()
{
// one-time calculation of per-chunk mass
// done in setup, so that ComputeChunkAtom::setup() is already called
if (firstflag && cchunk->idsflag == ONCE) {
compute_array();
firstflag = massneed = 0;
}
}
/* ---------------------------------------------------------------------- */
void ComputeVCMChunk::compute_array()
{
int index;
double massone;
invoked_array = update->ntimestep;
// compute chunk/atom assigns atoms to chunk IDs
// extract ichunk index vector from compute
// ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
int *ichunk = cchunk->ichunk;
if (nchunk > maxchunk) allocate();
size_array_rows = nchunk;
// zero local per-chunk values
for (int i = 0; i < nchunk; i++)
vcm[i][0] = vcm[i][1] = vcm[i][2] = 0.0;
if (massneed)
for (int i = 0; i < nchunk; i++) massproc[i] = 0.0;
// compute VCM for each chunk
double **v = atom->v;
int *mask = atom->mask;
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
index = ichunk[i]-1;
if (index < 0) continue;
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
vcm[index][0] += v[i][0] * massone;
vcm[index][1] += v[i][1] * massone;
vcm[index][2] += v[i][2] * massone;
if (massneed) massproc[index] += massone;
}
MPI_Allreduce(&vcm[0][0],&vcmall[0][0],3*nchunk,MPI_DOUBLE,MPI_SUM,world);
if (massneed)
MPI_Allreduce(massproc,masstotal,nchunk,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < nchunk; i++) {
if (masstotal[i] > 0.0) {
vcmall[i][0] /= masstotal[i];
vcmall[i][1] /= masstotal[i];
vcmall[i][2] /= masstotal[i];
} else vcmall[i][0] = vcmall[i][1] = vcmall[i][2] = 0.0;
}
}
/* ----------------------------------------------------------------------
lock methods: called by fix ave/time
these methods insure vector/array size is locked for Nfreq epoch
by passing lock info along to compute chunk/atom
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
increment lock counter
------------------------------------------------------------------------- */
void ComputeVCMChunk::lock_enable()
{
cchunk->lockcount++;
}
/* ----------------------------------------------------------------------
decrement lock counter in compute chunk/atom, it if still exists
------------------------------------------------------------------------- */
void ComputeVCMChunk::lock_disable()
{
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->lockcount--;
}
}
/* ----------------------------------------------------------------------
calculate and return # of chunks = length of vector/array
------------------------------------------------------------------------- */
int ComputeVCMChunk::lock_length()
{
nchunk = cchunk->setup_chunks();
return nchunk;
}
/* ----------------------------------------------------------------------
set the lock from startstep to stopstep
------------------------------------------------------------------------- */
void ComputeVCMChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep)
{
cchunk->lock(fixptr,startstep,stopstep);
}
/* ----------------------------------------------------------------------
unset the lock
------------------------------------------------------------------------- */
void ComputeVCMChunk::unlock(Fix *fixptr)
{
cchunk->unlock(fixptr);
}
/* ----------------------------------------------------------------------
free and reallocate per-chunk arrays
------------------------------------------------------------------------- */
void ComputeVCMChunk::allocate()
{
memory->destroy(massproc);
memory->destroy(masstotal);
memory->destroy(vcm);
memory->destroy(vcmall);
maxchunk = nchunk;
memory->create(massproc,maxchunk,"vcm/chunk:massproc");
memory->create(masstotal,maxchunk,"vcm/chunk:masstotal");
memory->create(vcm,maxchunk,3,"vcm/chunk:vcm");
memory->create(vcmall,maxchunk,3,"vcm/chunk:vcmall");
array = vcmall;
}
/* ----------------------------------------------------------------------
memory usage of local data
------------------------------------------------------------------------- */
double ComputeVCMChunk::memory_usage()
{
double bytes = (bigint) maxchunk * 2 * sizeof(double);
bytes += (bigint) maxchunk * 2*3 * sizeof(double);
return bytes;
}
diff --git a/src/dump.h b/src/dump.h
index e92d048b9..c4d933520 100644
--- a/src/dump.h
+++ b/src/dump.h
@@ -1,207 +1,207 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifndef LMP_DUMP_H
#define LMP_DUMP_H
#include <mpi.h>
#include <stdio.h>
#include "pointers.h"
namespace LAMMPS_NS {
class Dump : protected Pointers {
public:
char *id; // user-defined name of Dump
char *style; // style of Dump
char *filename; // user-specified file
int igroup,groupbit; // group that Dump is performed on
int first_flag; // 0 if no initial dump, 1 if yes initial dump
int clearstep; // 1 if dump invokes computes, 0 if not
int comm_forward; // size of forward communication (0 if none)
int comm_reverse; // size of reverse communication (0 if none)
// static variable across all Dump objects
static Dump *dumpptr; // holds a ptr to Dump currently being used
Dump(class LAMMPS *, int, char **);
virtual ~Dump();
void init();
virtual void write();
virtual int pack_forward_comm(int, int *, double *, int, int *) {return 0;}
virtual void unpack_forward_comm(int, int, double *) {}
virtual int pack_reverse_comm(int, int, double *) {return 0;}
virtual void unpack_reverse_comm(int, int *, double *) {}
void modify_params(int, char **);
virtual bigint memory_usage();
protected:
int me,nprocs; // proc info
int compressed; // 1 if dump file is written compressed, 0 no
int binary; // 1 if dump file is written binary, 0 no
int multifile; // 0 = one big file, 1 = one file per timestep
int multiproc; // 0 = proc 0 writes for all,
// else # of procs writing files
int nclusterprocs; // # of procs in my cluster that write to one file
int filewriter; // 1 if this proc writes a file, else 0
int fileproc; // ID of proc in my cluster who writes to file
char *multiname; // filename with % converted to cluster ID
MPI_Comm clustercomm; // MPI communicator within my cluster of procs
int header_flag; // 0 = item, 2 = xyz
int flush_flag; // 0 if no flush, 1 if flush every dump
int sort_flag; // 1 if sorted output
int append_flag; // 1 if open file in append mode, 0 if not
int buffer_allow; // 1 if style allows for buffer_flag, 0 if not
int buffer_flag; // 1 if buffer output as one big string, 0 if not
int padflag; // timestep padding in filename
int pbcflag; // 1 if remap dumped atoms via PBC, 0 if not
int singlefile_opened; // 1 = one big file, already opened, else 0
int sortcol; // 0 to sort on ID, 1-N on columns
int sortcolm1; // sortcol - 1
int sortorder; // ASCEND or DESCEND
char boundstr[9]; // encoding of boundary flags
char *format; // format string for the file write
char *format_default; // default format string
char *format_line_user; // user-specified format strings
char *format_float_user;
char *format_int_user;
char *format_bigint_user;
char **format_column_user;
FILE *fp; // file to write dump to
int size_one; // # of quantities for one atom
int nme; // # of atoms in this dump from me
int nsme; // # of chars in string output from me
double boxxlo,boxxhi; // local copies of domain values
double boxylo,boxyhi; // lo/hi are bounding box for triclinic
double boxzlo,boxzhi;
double boxxy,boxxz,boxyz;
bigint ntotal; // total # of per-atom lines in snapshot
int reorderflag; // 1 if OK to reorder instead of sort
int ntotal_reorder; // # of atoms that must be in snapshot
int nme_reorder; // # of atoms I must own in snapshot
tagint idlo; // lowest ID I own when reordering
int maxbuf; // size of buf
double *buf; // memory for atom quantities
int maxsbuf; // size of sbuf
char *sbuf; // memory for atom quantities in string format
int maxids; // size of ids
int maxsort; // size of bufsort, idsort, index
int maxproc; // size of proclist
tagint *ids; // list of atom IDs, if sorting on IDs
double *bufsort;
tagint *idsort;
int *index,*proclist;
double **xpbc,**vpbc;
- int *imagepbc;
+ imageint *imagepbc;
int maxpbc;
class Irregular *irregular;
virtual void init_style() = 0;
virtual void openfile();
virtual int modify_param(int, char **) {return 0;}
virtual void write_header(bigint) = 0;
virtual int count();
virtual void pack(tagint *) = 0;
virtual int convert_string(int, double *) {return 0;}
virtual void write_data(int, double *) = 0;
void pbc_allocate();
void sort();
static int idcompare(const void *, const void *);
static int bufcompare(const void *, const void *);
static int bufcompare_reverse(const void *, const void *);
};
}
#endif
/* ERROR/WARNING messages:
E: Dump file MPI-IO output not allowed with % in filename
This is because a % signifies one file per processor and MPI-IO
creates one large file for all processors.
E: Cannot dump sort when multiple dump files are written
In this mode, each processor dumps its atoms to a file, so
no sorting is allowed.
E: Cannot dump sort on atom IDs with no atom IDs defined
Self-explanatory.
E: Dump sort column is invalid
Self-explanatory.
E: Too many atoms to dump sort
Cannot sort when running with more than 2^31 atoms.
E: Too much per-proc info for dump
Number of local atoms times number of columns must fit in a 32-bit
integer for dump.
E: Too much buffered per-proc info for dump
The size of the buffered string must fit in a 32-bit integer for a
dump.
E: Cannot open gzipped file
LAMMPS was compiled without support for reading and writing gzipped
files through a pipeline to the gzip program with -DLAMMPS_GZIP.
E: Cannot open dump file
Self-explanatory.
E: Illegal ... command
Self-explanatory. Check the input script syntax and compare to the
documentation for the command. You can use -echo screen as a
command-line option when running LAMMPS to see the offending line.
E: Dump_modify buffer yes not allowed for this style
Self-explanatory.
E: Cannot use dump_modify fileper without % in dump file name
Self-explanatory.
E: Cannot use dump_modify nfile without % in dump file name
Self-explanatory.
*/
diff --git a/src/finish.cpp b/src/finish.cpp
index 40f54480f..3ab4fd0cb 100644
--- a/src/finish.cpp
+++ b/src/finish.cpp
@@ -1,918 +1,934 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <math.h>
+#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "finish.h"
#include "timer.h"
#include "universe.h"
#include "accelerator_kokkos.h"
#include "accelerator_omp.h"
#include "atom.h"
#include "atom_vec.h"
#include "molecule.h"
#include "comm.h"
#include "force.h"
#include "kspace.h"
#include "update.h"
#include "min.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "output.h"
#include "memory.h"
+#include "error.h"
#ifdef LMP_USER_OMP
#include "modify.h"
#include "fix_omp.h"
#include "thr_data.h"
#endif
using namespace LAMMPS_NS;
// local function prototypes, code at end of file
static void mpi_timings(const char *label, Timer *t, enum Timer::ttype tt,
MPI_Comm world, const int nprocs, const int nthreads,
const int me, double time_loop, FILE *scr, FILE *log);
#ifdef LMP_USER_OMP
static void omp_times(FixOMP *fix, const char *label, enum Timer::ttype which,
const int nthreads,FILE *scr, FILE *log);
#endif
/* ---------------------------------------------------------------------- */
Finish::Finish(LAMMPS *lmp) : Pointers(lmp) {}
/* ---------------------------------------------------------------------- */
void Finish::end(int flag)
{
int i,m,nneigh,nneighfull;
int histo[10];
int minflag,prdflag,tadflag,timeflag,fftflag,histoflag,neighflag;
double time,tmp,ave,max,min;
double time_loop,time_other,cpu_loop;
int me,nprocs;
MPI_Comm_rank(world,&me);
MPI_Comm_size(world,&nprocs);
const int nthreads = comm->nthreads;
// recompute natoms in case atoms have been lost
bigint nblocal = atom->nlocal;
MPI_Allreduce(&nblocal,&atom->natoms,1,MPI_LMP_BIGINT,MPI_SUM,world);
// choose flavors of statistical output
// flag determines caller
// flag = 0 = just loop summary
// flag = 1 = dynamics or minimization
// flag = 2 = PRD
// flag = 3 = TAD
// turn off neighflag for Kspace partition of verlet/split integrator
minflag = prdflag = tadflag = timeflag = fftflag = histoflag = neighflag = 0;
time_loop = cpu_loop = time_other = 0.0;
if (flag == 1) {
if (update->whichflag == 2) minflag = 1;
timeflag = histoflag = 1;
neighflag = 1;
if (update->whichflag == 1 &&
strncmp(update->integrate_style,"verlet/split",12) == 0 &&
universe->iworld == 1) neighflag = 0;
if (force->kspace && force->kspace_match("pppm",0)
&& force->kspace->fftbench) fftflag = 1;
}
if (flag == 2) prdflag = timeflag = histoflag = neighflag = 1;
if (flag == 3) tadflag = histoflag = neighflag = 1;
// loop stats
if (timer->has_loop()) {
// overall loop time
time_loop = timer->get_wall(Timer::TOTAL);
cpu_loop = timer->get_cpu(Timer::TOTAL);
MPI_Allreduce(&time_loop,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time_loop = tmp/nprocs;
MPI_Allreduce(&cpu_loop,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
cpu_loop = tmp/nprocs;
if (time_loop > 0.0) cpu_loop = cpu_loop/time_loop*100.0;
if (me == 0) {
int ntasks = nprocs * nthreads;
const char fmt1[] = "Loop time of %g on %d procs "
"for %d steps with " BIGINT_FORMAT " atoms\n\n";
if (screen) fprintf(screen,fmt1,time_loop,ntasks,update->nsteps,
atom->natoms);
if (logfile) fprintf(logfile,fmt1,time_loop,ntasks,update->nsteps,
atom->natoms);
// Gromacs/NAMD-style performance metric for suitable unit settings
if ( timeflag && !minflag && !prdflag && !tadflag &&
(update->nsteps > 0) && (update->dt != 0.0) &&
((strcmp(update->unit_style,"lj") == 0) ||
(strcmp(update->unit_style,"metal") == 0) ||
(strcmp(update->unit_style,"micro") == 0) ||
(strcmp(update->unit_style,"nano") == 0) ||
(strcmp(update->unit_style,"electron") == 0) ||
(strcmp(update->unit_style,"real") == 0)) ) {
double one_fs = force->femtosecond;
double t_step = ((double) time_loop) / ((double) update->nsteps);
double step_t = 1.0/t_step;
if (strcmp(update->unit_style,"lj") == 0) {
double tau_day = 24.0*3600.0 / t_step * update->dt / one_fs;
const char perf[] = "Performance: %.3f tau/day, %.3f timesteps/s\n";
if (screen) fprintf(screen,perf,tau_day,step_t);
if (logfile) fprintf(logfile,perf,tau_day,step_t);
} else {
double hrs_ns = t_step / update->dt * 1000000.0 * one_fs / 3600.0;
double ns_day = 24.0*3600.0 / t_step * update->dt / one_fs/1000000.0;
const char perf[] =
"Performance: %.3f ns/day, %.3f hours/ns, %.3f timesteps/s\n";
if (screen) fprintf(screen,perf,ns_day,hrs_ns,step_t);
if (logfile) fprintf(logfile,perf,ns_day,hrs_ns,step_t);
}
}
// CPU use on MPI tasks and OpenMP threads
#ifdef LMP_USER_OMP
const char fmt2[] =
"%.1f%% CPU use with %d MPI tasks x %d OpenMP threads\n";
if (screen) fprintf(screen,fmt2,cpu_loop,nprocs,nthreads);
if (logfile) fprintf(logfile,fmt2,cpu_loop,nprocs,nthreads);
#else
- const char fmt2[] =
- "%.1f%% CPU use with %d MPI tasks x no OpenMP threads\n";
- if (screen) fprintf(screen,fmt2,cpu_loop,nprocs);
- if (logfile) fprintf(logfile,fmt2,cpu_loop,nprocs);
+ if (lmp->kokkos) {
+ const char fmt2[] =
+ "%.1f%% CPU use with %d MPI tasks x %d OpenMP threads\n";
+ if (screen) fprintf(screen,fmt2,cpu_loop,nprocs,lmp->kokkos->num_threads);
+ if (logfile) fprintf(logfile,fmt2,cpu_loop,nprocs,lmp->kokkos->num_threads);
+ } else {
+ const char fmt2[] =
+ "%.1f%% CPU use with %d MPI tasks x no OpenMP threads\n";
+ if (screen) fprintf(screen,fmt2,cpu_loop,nprocs);
+ if (logfile) fprintf(logfile,fmt2,cpu_loop,nprocs);
+ }
#endif
}
}
// avoid division by zero for very short runs
if (time_loop == 0.0) time_loop = 1.0;
if (cpu_loop == 0.0) cpu_loop = 100.0;
// get "Other" wall time for later use
if (timer->has_normal())
time_other = timer->get_wall(Timer::TOTAL) - timer->get_wall(Timer::ALL);
// minimization stats
if (minflag) {
if (me == 0) {
if (screen) fprintf(screen,"\n");
if (logfile) fprintf(logfile,"\n");
}
if (me == 0) {
if (screen) {
fprintf(screen,"Minimization stats:\n");
fprintf(screen," Stopping criterion = %s\n",
update->minimize->stopstr);
fprintf(screen," Energy initial, next-to-last, final = \n"
" %18.12g %18.12g %18.12g\n",
update->minimize->einitial,update->minimize->eprevious,
update->minimize->efinal);
fprintf(screen," Force two-norm initial, final = %g %g\n",
update->minimize->fnorm2_init,update->minimize->fnorm2_final);
fprintf(screen," Force max component initial, final = %g %g\n",
update->minimize->fnorminf_init,
update->minimize->fnorminf_final);
fprintf(screen," Final line search alpha, max atom move = %g %g\n",
update->minimize->alpha_final,
update->minimize->alpha_final*
update->minimize->fnorminf_final);
fprintf(screen," Iterations, force evaluations = %d %d\n",
update->minimize->niter,update->minimize->neval);
}
if (logfile) {
fprintf(logfile,"Minimization stats:\n");
fprintf(logfile," Stopping criterion = %s\n",
update->minimize->stopstr);
fprintf(logfile," Energy initial, next-to-last, final = \n"
" %18.12g %18.12g %18.12g\n",
update->minimize->einitial,update->minimize->eprevious,
update->minimize->efinal);
fprintf(logfile," Force two-norm initial, final = %g %g\n",
update->minimize->fnorm2_init,update->minimize->fnorm2_final);
fprintf(logfile," Force max component initial, final = %g %g\n",
update->minimize->fnorminf_init,
update->minimize->fnorminf_final);
fprintf(logfile," Final line search alpha, max atom move = %g %g\n",
update->minimize->alpha_final,
update->minimize->alpha_final*
update->minimize->fnorminf_final);
fprintf(logfile," Iterations, force evaluations = %d %d\n",
update->minimize->niter,update->minimize->neval);
}
}
}
// PRD stats using PAIR,BOND,KSPACE for dephase,dynamics,quench
if (prdflag) {
if (me == 0) {
if (screen) fprintf(screen,"\n");
if (logfile) fprintf(logfile,"\n");
}
if (screen) fprintf(screen,"PRD stats:\n");
if (logfile) fprintf(logfile,"PRD stats:\n");
time = timer->get_wall(Timer::DEPHASE);
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) {
if (screen)
fprintf(screen," Dephase time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," Dephase time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
time = timer->get_wall(Timer::DYNAMICS);
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) {
if (screen)
fprintf(screen," Dynamics time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," Dynamics time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
time = timer->get_wall(Timer::QUENCH);
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) {
if (screen)
fprintf(screen," Quench time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," Quench time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
time = timer->get_wall(Timer::REPCOMM);
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) {
if (screen)
fprintf(screen," Comm time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," Comm time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
time = timer->get_wall(Timer::REPOUT);
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) {
if (screen)
fprintf(screen," Output time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," Output time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
time = time_other;
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) { // XXXX: replica comm, replica output
if (screen)
fprintf(screen," Other time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," Other time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
}
// TAD stats using PAIR,BOND,KSPACE for neb,dynamics,quench
if (tadflag) {
if (me == 0) {
if (screen) fprintf(screen,"\n");
if (logfile) fprintf(logfile,"\n");
}
if (screen) fprintf(screen,"TAD stats:\n");
if (logfile) fprintf(logfile,"TAD stats:\n");
time = timer->get_wall(Timer::NEB);
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) {
if (screen)
fprintf(screen," NEB time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," NEB time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
time = timer->get_wall(Timer::DYNAMICS);
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) {
if (screen)
fprintf(screen," Dynamics time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," Dynamics time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
time = timer->get_wall(Timer::QUENCH);
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) {
if (screen)
fprintf(screen," Quench time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," Quench time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
time = timer->get_wall(Timer::REPCOMM);
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) {
if (screen)
fprintf(screen," Comm time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," Comm time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
time = timer->get_wall(Timer::REPOUT);
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) {
if (screen)
fprintf(screen," Output time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," Output time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
time = time_other;
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
if (me == 0) {
if (screen)
fprintf(screen," Other time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
if (logfile)
fprintf(logfile," Other time (%%) = %g (%g)\n",
time,time/time_loop*100.0);
}
}
if (timeflag && timer->has_normal()) {
if (timer->has_full()) {
const char hdr[] = "\nMPI task timing breakdown:\n"
"Section | min time | avg time | max time |%varavg| %CPU | %total\n"
"-----------------------------------------------------------------------\n";
if (me == 0) {
if (screen) fputs(hdr,screen);
if (logfile) fputs(hdr,logfile);
}
} else {
const char hdr[] = "\nMPI task timing breakdown:\n"
"Section | min time | avg time | max time |%varavg| %total\n"
"---------------------------------------------------------------\n";
if (me == 0) {
if (screen) fputs(hdr,screen);
if (logfile) fputs(hdr,logfile);
}
}
mpi_timings("Pair",timer,Timer::PAIR, world,nprocs,
nthreads,me,time_loop,screen,logfile);
if (atom->molecular)
mpi_timings("Bond",timer,Timer::BOND,world,nprocs,
nthreads,me,time_loop,screen,logfile);
if (force->kspace)
mpi_timings("Kspace",timer,Timer::KSPACE,world,nprocs,
nthreads,me,time_loop,screen,logfile);
mpi_timings("Neigh",timer,Timer::NEIGH,world,nprocs,
nthreads,me,time_loop,screen,logfile);
mpi_timings("Comm",timer,Timer::COMM,world,nprocs,
nthreads,me,time_loop,screen,logfile);
mpi_timings("Output",timer,Timer::OUTPUT,world,nprocs,
nthreads,me,time_loop,screen,logfile);
mpi_timings("Modify",timer,Timer::MODIFY,world,nprocs,
nthreads,me,time_loop,screen,logfile);
if (timer->has_sync())
mpi_timings("Sync",timer,Timer::SYNC,world,nprocs,
nthreads,me,time_loop,screen,logfile);
time = time_other;
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
const char *fmt;
if (timer->has_full())
fmt = "Other | |%- 12.4g| | | |%6.2f\n";
else
fmt = "Other | |%- 12.4g| | |%6.2f\n";
if (me == 0) {
if (screen) fprintf(screen,fmt,time,time/time_loop*100.0);
if (logfile) fprintf(logfile,fmt,time,time/time_loop*100.0);
}
}
#ifdef LMP_USER_OMP
const char thr_hdr_fmt[] =
"\nThread timing breakdown (MPI rank %d):\nTotal threaded time %.4g / %.1f%%\n";
const char thr_header[] =
"Section | min time | avg time | max time |%varavg| %total\n"
"---------------------------------------------------------------\n";
int ifix = modify->find_fix("package_omp");
// print thread breakdown only with full timer detail
if ((ifix >= 0) && timer->has_full() && me == 0) {
double thr_total = 0.0;
ThrData *td;
FixOMP *fixomp = static_cast<FixOMP *>(lmp->modify->fix[ifix]);
for (i=0; i < nthreads; ++i) {
td = fixomp->get_thr(i);
thr_total += td->get_time(Timer::ALL);
}
thr_total /= (double) nthreads;
if (thr_total > 0.0) {
if (screen) {
fprintf(screen,thr_hdr_fmt,me,thr_total,thr_total/time_loop*100.0);
fputs(thr_header,screen);
}
if (logfile) {
fprintf(logfile,thr_hdr_fmt,me,thr_total,thr_total/time_loop*100.0);
fputs(thr_header,logfile);
}
omp_times(fixomp,"Pair",Timer::PAIR,nthreads,screen,logfile);
if (atom->molecular)
omp_times(fixomp,"Bond",Timer::BOND,nthreads,screen,logfile);
if (force->kspace)
omp_times(fixomp,"Kspace",Timer::KSPACE,nthreads,screen,logfile);
omp_times(fixomp,"Neigh",Timer::NEIGH,nthreads,screen,logfile);
omp_times(fixomp,"Reduce",Timer::COMM,nthreads,screen,logfile);
}
}
#endif
+ if (lmp->kokkos && lmp->kokkos->ngpu > 0)
+ if (const char* env_clb = getenv("CUDA_LAUNCH_BLOCKING"))
+ if (!(strcmp(env_clb,"1") == 0)) {
+ error->warning(FLERR,"Timing breakdown may not be accurate since GPU/CPU overlap is enabled. "
+ "Using 'export CUDA_LAUNCH_BLOCKING=1' will give an accurate timing breakdown but will reduce performance");
+ }
+
// FFT timing statistics
// time3d,time1d = total time during run for 3d and 1d FFTs
// loop on timing() until nsample FFTs require at least 1.0 CPU sec
// time_kspace may be 0.0 if another partition is doing Kspace
if (fftflag) {
if (me == 0) {
if (screen) fprintf(screen,"\n");
if (logfile) fprintf(logfile,"\n");
}
int nsteps = update->nsteps;
double time3d;
int nsample = 1;
int nfft = force->kspace->timing_3d(nsample,time3d);
while (time3d < 1.0) {
nsample *= 2;
nfft = force->kspace->timing_3d(nsample,time3d);
}
time3d = nsteps * time3d / nsample;
MPI_Allreduce(&time3d,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time3d = tmp/nprocs;
double time1d;
nsample = 1;
nfft = force->kspace->timing_1d(nsample,time1d);
while (time1d < 1.0) {
nsample *= 2;
nfft = force->kspace->timing_1d(nsample,time1d);
}
time1d = nsteps * time1d / nsample;
MPI_Allreduce(&time1d,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time1d = tmp/nprocs;
double time_kspace = timer->get_wall(Timer::KSPACE);
MPI_Allreduce(&time_kspace,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time_kspace = tmp/nprocs;
double ntotal = 1.0 * force->kspace->nx_pppm *
force->kspace->ny_pppm * force->kspace->nz_pppm;
double nflops = 5.0 * ntotal * log(ntotal);
double fraction,flop3,flop1;
if (nsteps) {
if (time_kspace) fraction = time3d/time_kspace*100.0;
else fraction = 0.0;
flop3 = nfft*nflops/1.0e9/(time3d/nsteps);
flop1 = nfft*nflops/1.0e9/(time1d/nsteps);
} else fraction = flop3 = flop1 = 0.0;
if (me == 0) {
if (screen) {
fprintf(screen,"FFT time (%% of Kspce) = %g (%g)\n",time3d,fraction);
fprintf(screen,"FFT Gflps 3d (1d only) = %g %g\n",flop3,flop1);
}
if (logfile) {
fprintf(logfile,"FFT time (%% of Kspce) = %g (%g)\n",time3d,fraction);
fprintf(logfile,"FFT Gflps 3d (1d only) = %g %g\n",flop3,flop1);
}
}
}
if (histoflag) {
if (me == 0) {
if (screen) fprintf(screen,"\n");
if (logfile) fprintf(logfile,"\n");
}
tmp = atom->nlocal;
stats(1,&tmp,&ave,&max,&min,10,histo);
if (me == 0) {
if (screen) {
fprintf(screen,"Nlocal: %g ave %g max %g min\n",ave,max,min);
fprintf(screen,"Histogram:");
for (i = 0; i < 10; i++) fprintf(screen," %d",histo[i]);
fprintf(screen,"\n");
}
if (logfile) {
fprintf(logfile,"Nlocal: %g ave %g max %g min\n",ave,max,min);
fprintf(logfile,"Histogram:");
for (i = 0; i < 10; i++) fprintf(logfile," %d",histo[i]);
fprintf(logfile,"\n");
}
}
tmp = atom->nghost;
stats(1,&tmp,&ave,&max,&min,10,histo);
if (me == 0) {
if (screen) {
fprintf(screen,"Nghost: %g ave %g max %g min\n",ave,max,min);
fprintf(screen,"Histogram:");
for (i = 0; i < 10; i++) fprintf(screen," %d",histo[i]);
fprintf(screen,"\n");
}
if (logfile) {
fprintf(logfile,"Nghost: %g ave %g max %g min\n",ave,max,min);
fprintf(logfile,"Histogram:");
for (i = 0; i < 10; i++) fprintf(logfile," %d",histo[i]);
fprintf(logfile,"\n");
}
}
// find a non-skip neighbor list containing half pairwise interactions
// count neighbors in that list for stats purposes
// allow it to be Kokkos neigh list as well
for (m = 0; m < neighbor->old_nrequest; m++) {
if ((neighbor->old_requests[m]->half ||
neighbor->old_requests[m]->gran ||
neighbor->old_requests[m]->respaouter ||
neighbor->old_requests[m]->half_from_full) &&
neighbor->old_requests[m]->skip == 0 &&
neighbor->lists[m] && neighbor->lists[m]->numneigh) {
if (!neighbor->lists[m] && lmp->kokkos &&
lmp->kokkos->neigh_list_kokkos(m)) break;
else break;
}
}
nneigh = 0;
if (m < neighbor->old_nrequest) {
if (neighbor->lists[m]) {
int inum = neighbor->lists[m]->inum;
int *ilist = neighbor->lists[m]->ilist;
int *numneigh = neighbor->lists[m]->numneigh;
for (i = 0; i < inum; i++)
nneigh += numneigh[ilist[i]];
} else if (lmp->kokkos) nneigh = lmp->kokkos->neigh_count(m);
}
tmp = nneigh;
stats(1,&tmp,&ave,&max,&min,10,histo);
if (me == 0) {
if (screen) {
fprintf(screen,"Neighs: %g ave %g max %g min\n",ave,max,min);
fprintf(screen,"Histogram:");
for (i = 0; i < 10; i++) fprintf(screen," %d",histo[i]);
fprintf(screen,"\n");
}
if (logfile) {
fprintf(logfile,"Neighs: %g ave %g max %g min\n",ave,max,min);
fprintf(logfile,"Histogram:");
for (i = 0; i < 10; i++) fprintf(logfile," %d",histo[i]);
fprintf(logfile,"\n");
}
}
// find a non-skip neighbor list containing full pairwise interactions
// count neighbors in that list for stats purposes
// allow it to be Kokkos neigh list as well
for (m = 0; m < neighbor->old_nrequest; m++) {
if (neighbor->old_requests[m]->full &&
neighbor->old_requests[m]->skip == 0) {
if (lmp->kokkos && lmp->kokkos->neigh_list_kokkos(m)) break;
else break;
}
}
nneighfull = 0;
if (m < neighbor->old_nrequest) {
if (neighbor->lists[m] && neighbor->lists[m]->numneigh) {
int inum = neighbor->lists[m]->inum;
int *ilist = neighbor->lists[m]->ilist;
int *numneigh = neighbor->lists[m]->numneigh;
for (i = 0; i < inum; i++)
nneighfull += numneigh[ilist[i]];
} else if (!neighbor->lists[m] && lmp->kokkos)
nneighfull = lmp->kokkos->neigh_count(m);
tmp = nneighfull;
stats(1,&tmp,&ave,&max,&min,10,histo);
if (me == 0) {
if (screen) {
fprintf(screen,"FullNghs: %g ave %g max %g min\n",ave,max,min);
fprintf(screen,"Histogram:");
for (i = 0; i < 10; i++) fprintf(screen," %d",histo[i]);
fprintf(screen,"\n");
}
if (logfile) {
fprintf(logfile,"FullNghs: %g ave %g max %g min\n",ave,max,min);
fprintf(logfile,"Histogram:");
for (i = 0; i < 10; i++) fprintf(logfile," %d",histo[i]);
fprintf(logfile,"\n");
}
}
}
}
if (neighflag) {
if (me == 0) {
if (screen) fprintf(screen,"\n");
if (logfile) fprintf(logfile,"\n");
}
tmp = MAX(nneigh,nneighfull);
double nall;
MPI_Allreduce(&tmp,&nall,1,MPI_DOUBLE,MPI_SUM,world);
int nspec;
double nspec_all = 0;
if (atom->molecular == 1) {
int **nspecial = atom->nspecial;
int nlocal = atom->nlocal;
nspec = 0;
for (i = 0; i < nlocal; i++) nspec += nspecial[i][2];
tmp = nspec;
MPI_Allreduce(&tmp,&nspec_all,1,MPI_DOUBLE,MPI_SUM,world);
} else if (atom->molecular == 2) {
Molecule **onemols = atom->avec->onemols;
int *molindex = atom->molindex;
int *molatom = atom->molatom;
int nlocal = atom->nlocal;
int imol,iatom;
nspec = 0;
for (i = 0; i < nlocal; i++) {
if (molindex[i] < 0) continue;
imol = molindex[i];
iatom = molatom[i];
nspec += onemols[imol]->nspecial[iatom][2];
}
tmp = nspec;
MPI_Allreduce(&tmp,&nspec_all,1,MPI_DOUBLE,MPI_SUM,world);
}
if (me == 0) {
if (screen) {
if (nall < 2.0e9)
fprintf(screen,
"Total # of neighbors = %d\n",static_cast<int> (nall));
else fprintf(screen,"Total # of neighbors = %g\n",nall);
if (atom->natoms > 0)
fprintf(screen,"Ave neighs/atom = %g\n",nall/atom->natoms);
if (atom->molecular && atom->natoms > 0)
fprintf(screen,"Ave special neighs/atom = %g\n",
nspec_all/atom->natoms);
fprintf(screen,"Neighbor list builds = " BIGINT_FORMAT "\n",
neighbor->ncalls);
if (neighbor->dist_check)
fprintf(screen,"Dangerous builds = " BIGINT_FORMAT "\n",
neighbor->ndanger);
else fprintf(screen,"Dangerous builds not checked\n");
}
if (logfile) {
if (nall < 2.0e9)
fprintf(logfile,
"Total # of neighbors = %d\n",static_cast<int> (nall));
else fprintf(logfile,"Total # of neighbors = %g\n",nall);
if (atom->natoms > 0)
fprintf(logfile,"Ave neighs/atom = %g\n",nall/atom->natoms);
if (atom->molecular && atom->natoms > 0)
fprintf(logfile,"Ave special neighs/atom = %g\n",
nspec_all/atom->natoms);
fprintf(logfile,"Neighbor list builds = " BIGINT_FORMAT "\n",
neighbor->ncalls);
if (neighbor->dist_check)
fprintf(logfile,"Dangerous builds = " BIGINT_FORMAT "\n",
neighbor->ndanger);
else fprintf(logfile,"Dangerous builds not checked\n");
}
}
}
if (logfile) fflush(logfile);
}
/* ---------------------------------------------------------------------- */
void Finish::stats(int n, double *data,
double *pave, double *pmax, double *pmin,
int nhisto, int *histo)
{
int i,m;
int *histotmp;
double min = 1.0e20;
double max = -1.0e20;
double ave = 0.0;
for (i = 0; i < n; i++) {
ave += data[i];
if (data[i] < min) min = data[i];
if (data[i] > max) max = data[i];
}
int ntotal;
MPI_Allreduce(&n,&ntotal,1,MPI_INT,MPI_SUM,world);
double tmp;
MPI_Allreduce(&ave,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
ave = tmp/ntotal;
MPI_Allreduce(&min,&tmp,1,MPI_DOUBLE,MPI_MIN,world);
min = tmp;
MPI_Allreduce(&max,&tmp,1,MPI_DOUBLE,MPI_MAX,world);
max = tmp;
for (i = 0; i < nhisto; i++) histo[i] = 0;
double del = max - min;
for (i = 0; i < n; i++) {
if (del == 0.0) m = 0;
else m = static_cast<int> ((data[i]-min)/del * nhisto);
if (m > nhisto-1) m = nhisto-1;
histo[m]++;
}
memory->create(histotmp,nhisto,"finish:histotmp");
MPI_Allreduce(histo,histotmp,nhisto,MPI_INT,MPI_SUM,world);
for (i = 0; i < nhisto; i++) histo[i] = histotmp[i];
memory->destroy(histotmp);
*pave = ave;
*pmax = max;
*pmin = min;
}
/* ---------------------------------------------------------------------- */
void mpi_timings(const char *label, Timer *t, enum Timer::ttype tt,
MPI_Comm world, const int nprocs, const int nthreads,
const int me, double time_loop, FILE *scr, FILE *log)
{
double tmp, time_max, time_min, time_sq;
double time = t->get_wall(tt);
double time_cpu = t->get_cpu(tt);
if (time/time_loop < 0.001) // insufficient timer resolution!
time_cpu = 1.0;
else
time_cpu = time_cpu / time;
if (time_cpu > nthreads) time_cpu = nthreads;
MPI_Allreduce(&time,&time_min,1,MPI_DOUBLE,MPI_MIN,world);
MPI_Allreduce(&time,&time_max,1,MPI_DOUBLE,MPI_MAX,world);
time_sq = time*time;
MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time = tmp/nprocs;
MPI_Allreduce(&time_sq,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time_sq = tmp/nprocs;
MPI_Allreduce(&time_cpu,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
time_cpu = tmp/nprocs*100.0;
// % variance from the average as measure of load imbalance
if (time > 1.0e-10)
time_sq = sqrt(time_sq/time - time)*100.0;
else
time_sq = 0.0;
if (me == 0) {
tmp = time/time_loop*100.0;
if (t->has_full()) {
const char fmt[] = "%-8s|%- 12.5g|%- 12.5g|%- 12.5g|%6.1f |%6.1f |%6.2f\n";
if (scr)
fprintf(scr,fmt,label,time_min,time,time_max,time_sq,time_cpu,tmp);
if (log)
fprintf(log,fmt,label,time_min,time,time_max,time_sq,time_cpu,tmp);
time_loop = 100.0/time_loop;
} else {
const char fmt[] = "%-8s|%- 12.5g|%- 12.5g|%- 12.5g|%6.1f |%6.2f\n";
if (scr)
fprintf(scr,fmt,label,time_min,time,time_max,time_sq,tmp);
if (log)
fprintf(log,fmt,label,time_min,time,time_max,time_sq,tmp);
}
}
}
/* ---------------------------------------------------------------------- */
#ifdef LMP_USER_OMP
void omp_times(FixOMP *fix, const char *label, enum Timer::ttype which,
const int nthreads,FILE *scr, FILE *log)
{
const char fmt[] = "%-8s|%- 12.5g|%- 12.5g|%- 12.5g|%6.1f |%6.2f\n";
double time_min, time_max, time_avg, time_total, time_std;
time_min = 1.0e100;
time_max = -1.0e100;
time_total = time_avg = time_std = 0.0;
for (int i=0; i < nthreads; ++i) {
ThrData *thr = fix->get_thr(i);
double tmp=thr->get_time(which);
time_min = MIN(time_min,tmp);
time_max = MAX(time_max,tmp);
time_avg += tmp;
time_std += tmp*tmp;
time_total += thr->get_time(Timer::ALL);
}
time_avg /= nthreads;
time_std /= nthreads;
time_total /= nthreads;
if (time_avg > 1.0e-10)
time_std = sqrt(time_std/time_avg - time_avg)*100.0;
else
time_std = 0.0;
if (scr) fprintf(scr,fmt,label,time_min,time_avg,time_max,time_std,
time_avg/time_total*100.0);
if (log) fprintf(log,fmt,label,time_min,time_avg,time_max,time_std,
time_avg/time_total*100.0);
}
#endif
diff --git a/src/fix.cpp b/src/fix.cpp
index c83385228..aa18e0476 100644
--- a/src/fix.cpp
+++ b/src/fix.cpp
@@ -1,312 +1,311 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include <ctype.h>
#include "fix.h"
#include "atom.h"
#include "group.h"
#include "force.h"
#include "comm.h"
#include "atom_masks.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
// allocate space for static class instance variable and initialize it
int Fix::instance_total = 0;
/* ---------------------------------------------------------------------- */
-Fix::Fix(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp)
+Fix::Fix(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp),
+id(NULL), style(NULL), eatom(NULL), vatom(NULL)
{
instance_me = instance_total++;
// fix ID, group, and style
// ID must be all alphanumeric chars or underscores
int n = strlen(arg[0]) + 1;
id = new char[n];
strcpy(id,arg[0]);
for (int i = 0; i < n-1; i++)
if (!isalnum(id[i]) && id[i] != '_')
error->all(FLERR,"Fix ID must be alphanumeric or underscore characters");
igroup = group->find(arg[1]);
if (igroup == -1) error->all(FLERR,"Could not find fix group ID");
groupbit = group->bitmask[igroup];
n = strlen(arg[2]) + 1;
style = new char[n];
strcpy(style,arg[2]);
restart_global = restart_peratom = restart_file = 0;
force_reneighbor = 0;
box_change_size = box_change_shape = box_change_domain = 0;
thermo_energy = 0;
rigid_flag = 0;
peatom_flag = 0;
virial_flag = 0;
no_change_box = 0;
time_integrate = 0;
time_depend = 0;
create_attribute = 0;
restart_pbc = 0;
wd_header = wd_section = 0;
dynamic_group_allow = 0;
dof_flag = 0;
special_alter_flag = 0;
enforce2d_flag = 0;
respa_level_support = 0;
respa_level = -1;
scalar_flag = vector_flag = array_flag = 0;
peratom_flag = local_flag = 0;
size_vector_variable = size_array_rows_variable = 0;
comm_forward = comm_reverse = comm_border = 0;
restart_reset = 0;
// reasonable defaults
// however, each fix that uses these values should explicitly set them
nevery = 1;
global_freq = 1;
// per-atom virial
// set vflag_atom = 0 b/c some fixes grow vatom in grow_arrays()
// which may occur outside of timestepping
maxeatom = maxvatom = 0;
- eatom = NULL;
- vatom = NULL;
vflag_atom = 0;
// CUDA and KOKKOS per-fix data masks
datamask = ALL_MASK;
datamask_ext = ALL_MASK;
execution_space = Host;
datamask_read = ALL_MASK;
datamask_modify = ALL_MASK;
copymode = 0;
}
/* ---------------------------------------------------------------------- */
Fix::~Fix()
{
if (copymode) return;
delete [] id;
delete [] style;
memory->destroy(eatom);
memory->destroy(vatom);
}
/* ----------------------------------------------------------------------
process params common to all fixes here
if unknown param, call modify_param specific to the fix
------------------------------------------------------------------------- */
void Fix::modify_params(int narg, char **arg)
{
if (narg == 0) error->all(FLERR,"Illegal fix_modify command");
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"energy") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix_modify command");
if (strcmp(arg[iarg+1],"no") == 0) thermo_energy = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) thermo_energy = 1;
else error->all(FLERR,"Illegal fix_modify command");
iarg += 2;
} else if (strcmp(arg[iarg],"respa") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix_modify command");
if (!respa_level_support) error->all(FLERR,"Illegal fix_modify command");
int lvl = force->inumeric(FLERR,arg[1]);
if (lvl < 0) error->all(FLERR,"Illegal fix_modify command");
respa_level = lvl-1;
iarg += 2;
} else {
int n = modify_param(narg-iarg,&arg[iarg]);
if (n == 0) error->all(FLERR,"Illegal fix_modify command");
iarg += n;
}
}
}
/* ----------------------------------------------------------------------
setup for energy, virial computation
see integrate::ev_set() for values of eflag (0-3) and vflag (0-6)
fixes call this if use ev_tally()
------------------------------------------------------------------------- */
void Fix::ev_setup(int eflag, int vflag)
{
int i,n;
evflag = 1;
eflag_either = eflag;
eflag_global = eflag % 2;
eflag_atom = eflag / 2;
vflag_either = vflag;
vflag_global = vflag % 4;
vflag_atom = vflag / 4;
// reallocate per-atom arrays if necessary
if (eflag_atom && atom->nlocal > maxeatom) {
maxeatom = atom->nmax;
memory->destroy(eatom);
memory->create(eatom,maxeatom,"fix:eatom");
}
if (vflag_atom && atom->nlocal > maxvatom) {
maxvatom = atom->nmax;
memory->destroy(vatom);
memory->create(vatom,maxvatom,6,"fix:vatom");
}
// zero accumulators
// no global energy variable to zero (unlike pair,bond,angle,etc)
// fixes tally it individually via fix_modify energy yes and compute_scalar()
if (vflag_global) for (i = 0; i < 6; i++) virial[i] = 0.0;
if (eflag_atom) {
n = atom->nlocal;
for (i = 0; i < n; i++) eatom[i] = 0.0;
}
if (vflag_atom) {
n = atom->nlocal;
for (i = 0; i < n; i++) {
vatom[i][0] = 0.0;
vatom[i][1] = 0.0;
vatom[i][2] = 0.0;
vatom[i][3] = 0.0;
vatom[i][4] = 0.0;
vatom[i][5] = 0.0;
}
}
}
/* ----------------------------------------------------------------------
setup for virial computation
see integrate::ev_set() for values of vflag (0-6)
fixes call this if use v_tally()
------------------------------------------------------------------------- */
void Fix::v_setup(int vflag)
{
int i,n;
evflag = 1;
vflag_global = vflag % 4;
vflag_atom = vflag / 4;
// reallocate per-atom array if necessary
if (vflag_atom && atom->nlocal > maxvatom) {
maxvatom = atom->nmax;
memory->destroy(vatom);
memory->create(vatom,maxvatom,6,"fix:vatom");
}
// zero accumulators
if (vflag_global) for (i = 0; i < 6; i++) virial[i] = 0.0;
if (vflag_atom) {
n = atom->nlocal;
for (i = 0; i < n; i++) {
vatom[i][0] = 0.0;
vatom[i][1] = 0.0;
vatom[i][2] = 0.0;
vatom[i][3] = 0.0;
vatom[i][4] = 0.0;
vatom[i][5] = 0.0;
}
}
}
/* ----------------------------------------------------------------------
tally per-atom energy and global/per-atom virial into accumulators
n = # of local owned atoms involved, with local indices in list
eng = total energy for the interaction involving total atoms
v = total virial for the interaction involving total atoms
increment per-atom energy of each atom in list by 1/total fraction
v_tally tallies virial
this method can be used when fix computes energy/forces in post_force()
e.g. fix cmap: compute energy and virial only on owned atoms
whether newton_bond is on or off
other procs will tally left-over fractions for atoms they own
------------------------------------------------------------------------- */
void Fix::ev_tally(int n, int *list, double total, double eng, double *v)
{
if (eflag_atom) {
double fraction = eng/total;
for (int i = 0; i < n; i++)
eatom[list[i]] += fraction;
}
v_tally(n,list,total,v);
}
/* ----------------------------------------------------------------------
tally virial into global and per-atom accumulators
n = # of local owned atoms involved, with local indices in list
v = total virial for the interaction involving total atoms
increment global virial by n/total fraction
increment per-atom virial of each atom in list by 1/total fraction
this method can be used when fix computes forces in post_force()
e.g. fix shake, fix rigid: compute virial only on owned atoms
whether newton_bond is on or off
other procs will tally left-over fractions for atoms they own
------------------------------------------------------------------------- */
void Fix::v_tally(int n, int *list, double total, double *v)
{
int m;
if (vflag_global) {
double fraction = n/total;
virial[0] += fraction*v[0];
virial[1] += fraction*v[1];
virial[2] += fraction*v[2];
virial[3] += fraction*v[3];
virial[4] += fraction*v[4];
virial[5] += fraction*v[5];
}
if (vflag_atom) {
double fraction = 1.0/total;
for (int i = 0; i < n; i++) {
m = list[i];
vatom[m][0] += fraction*v[0];
vatom[m][1] += fraction*v[1];
vatom[m][2] += fraction*v[2];
vatom[m][3] += fraction*v[3];
vatom[m][4] += fraction*v[4];
vatom[m][5] += fraction*v[5];
}
}
}
diff --git a/src/fix_adapt.cpp b/src/fix_adapt.cpp
index 85e3bed56..48d93211a 100644
--- a/src/fix_adapt.cpp
+++ b/src/fix_adapt.cpp
@@ -1,600 +1,599 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "fix_adapt.h"
#include "atom.h"
#include "update.h"
#include "group.h"
#include "modify.h"
#include "force.h"
#include "pair.h"
#include "pair_hybrid.h"
#include "kspace.h"
#include "fix_store.h"
#include "input.h"
#include "variable.h"
#include "respa.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
using namespace MathConst;
enum{PAIR,KSPACE,ATOM};
enum{DIAMETER,CHARGE};
/* ---------------------------------------------------------------------- */
-FixAdapt::FixAdapt(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
+FixAdapt::FixAdapt(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg),
+nadapt(0), id_fix_diam(NULL), id_fix_chg(NULL), adapt(NULL)
{
if (narg < 5) error->all(FLERR,"Illegal fix adapt command");
nevery = force->inumeric(FLERR,arg[3]);
if (nevery < 0) error->all(FLERR,"Illegal fix adapt command");
dynamic_group_allow = 1;
create_attribute = 1;
// count # of adaptations
nadapt = 0;
int iarg = 4;
while (iarg < narg) {
if (strcmp(arg[iarg],"pair") == 0) {
if (iarg+6 > narg) error->all(FLERR,"Illegal fix adapt command");
nadapt++;
iarg += 6;
} else if (strcmp(arg[iarg],"kspace") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix adapt command");
nadapt++;
iarg += 2;
} else if (strcmp(arg[iarg],"atom") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix adapt command");
nadapt++;
iarg += 3;
} else break;
}
if (nadapt == 0) error->all(FLERR,"Illegal fix adapt command");
adapt = new Adapt[nadapt];
// parse keywords
nadapt = 0;
diamflag = 0;
chgflag = 0;
iarg = 4;
while (iarg < narg) {
if (strcmp(arg[iarg],"pair") == 0) {
if (iarg+6 > narg) error->all(FLERR,"Illegal fix adapt command");
adapt[nadapt].which = PAIR;
int n = strlen(arg[iarg+1]) + 1;
adapt[nadapt].pstyle = new char[n];
strcpy(adapt[nadapt].pstyle,arg[iarg+1]);
n = strlen(arg[iarg+2]) + 1;
adapt[nadapt].pparam = new char[n];
adapt[nadapt].pair = NULL;
strcpy(adapt[nadapt].pparam,arg[iarg+2]);
force->bounds(arg[iarg+3],atom->ntypes,
adapt[nadapt].ilo,adapt[nadapt].ihi);
force->bounds(arg[iarg+4],atom->ntypes,
adapt[nadapt].jlo,adapt[nadapt].jhi);
if (strstr(arg[iarg+5],"v_") == arg[iarg+5]) {
n = strlen(&arg[iarg+5][2]) + 1;
adapt[nadapt].var = new char[n];
strcpy(adapt[nadapt].var,&arg[iarg+5][2]);
} else error->all(FLERR,"Illegal fix adapt command");
nadapt++;
iarg += 6;
} else if (strcmp(arg[iarg],"kspace") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix adapt command");
adapt[nadapt].which = KSPACE;
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) {
int n = strlen(&arg[iarg+1][2]) + 1;
adapt[nadapt].var = new char[n];
strcpy(adapt[nadapt].var,&arg[iarg+1][2]);
} else error->all(FLERR,"Illegal fix adapt command");
nadapt++;
iarg += 2;
} else if (strcmp(arg[iarg],"atom") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix adapt command");
adapt[nadapt].which = ATOM;
if (strcmp(arg[iarg+1],"diameter") == 0) {
adapt[nadapt].aparam = DIAMETER;
diamflag = 1;
} else if (strcmp(arg[iarg+1],"charge") == 0) {
adapt[nadapt].aparam = CHARGE;
chgflag = 1;
} else error->all(FLERR,"Illegal fix adapt command");
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) {
int n = strlen(&arg[iarg+2][2]) + 1;
adapt[nadapt].var = new char[n];
strcpy(adapt[nadapt].var,&arg[iarg+2][2]);
} else error->all(FLERR,"Illegal fix adapt command");
nadapt++;
iarg += 3;
} else break;
}
// optional keywords
resetflag = 0;
scaleflag = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"reset") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix adapt command");
if (strcmp(arg[iarg+1],"no") == 0) resetflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) resetflag = 1;
else error->all(FLERR,"Illegal fix adapt command");
iarg += 2;
} else if (strcmp(arg[iarg],"scale") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix adapt command");
if (strcmp(arg[iarg+1],"no") == 0) scaleflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) scaleflag = 1;
else error->all(FLERR,"Illegal fix adapt command");
iarg += 2;
} else error->all(FLERR,"Illegal fix adapt command");
}
// allocate pair style arrays
int n = atom->ntypes;
for (int m = 0; m < nadapt; m++)
if (adapt[m].which == PAIR)
memory->create(adapt[m].array_orig,n+1,n+1,"adapt:array_orig");
-
- id_fix_diam = id_fix_chg = NULL;
}
/* ---------------------------------------------------------------------- */
FixAdapt::~FixAdapt()
{
for (int m = 0; m < nadapt; m++) {
delete [] adapt[m].var;
if (adapt[m].which == PAIR) {
delete [] adapt[m].pstyle;
delete [] adapt[m].pparam;
memory->destroy(adapt[m].array_orig);
}
}
delete [] adapt;
// check nfix in case all fixes have already been deleted
if (id_fix_diam && modify->nfix) modify->delete_fix(id_fix_diam);
if (id_fix_chg && modify->nfix) modify->delete_fix(id_fix_chg);
delete [] id_fix_diam;
delete [] id_fix_chg;
}
/* ---------------------------------------------------------------------- */
int FixAdapt::setmask()
{
int mask = 0;
mask |= PRE_FORCE;
mask |= POST_RUN;
mask |= PRE_FORCE_RESPA;
return mask;
}
/* ----------------------------------------------------------------------
if need to restore per-atom quantities, create new fix STORE styles
------------------------------------------------------------------------- */
void FixAdapt::post_constructor()
{
if (!resetflag) return;
if (!diamflag && !chgflag) return;
// new id = fix-ID + FIX_STORE_ATTRIBUTE
// new fix group = group for this fix
id_fix_diam = NULL;
id_fix_chg = NULL;
char **newarg = new char*[6];
newarg[1] = group->names[igroup];
newarg[2] = (char *) "STORE";
newarg[3] = (char *) "peratom";
newarg[4] = (char *) "1";
newarg[5] = (char *) "1";
if (diamflag) {
int n = strlen(id) + strlen("_FIX_STORE_DIAM") + 1;
id_fix_diam = new char[n];
strcpy(id_fix_diam,id);
strcat(id_fix_diam,"_FIX_STORE_DIAM");
newarg[0] = id_fix_diam;
modify->add_fix(6,newarg);
fix_diam = (FixStore *) modify->fix[modify->nfix-1];
if (fix_diam->restart_reset) fix_diam->restart_reset = 0;
else {
double *vec = fix_diam->vstore;
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vec[i] = radius[i];
else vec[i] = 0.0;
}
}
}
if (chgflag) {
int n = strlen(id) + strlen("_FIX_STORE_CHG") + 1;
id_fix_chg = new char[n];
strcpy(id_fix_chg,id);
strcat(id_fix_chg,"_FIX_STORE_CHG");
newarg[0] = id_fix_chg;
modify->add_fix(6,newarg);
fix_chg = (FixStore *) modify->fix[modify->nfix-1];
if (fix_chg->restart_reset) fix_chg->restart_reset = 0;
else {
double *vec = fix_chg->vstore;
double *q = atom->q;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vec[i] = q[i];
else vec[i] = 0.0;
}
}
}
delete [] newarg;
}
/* ---------------------------------------------------------------------- */
void FixAdapt::init()
{
int i,j;
// allow a dynamic group only if ATOM attribute not used
if (group->dynamic[igroup])
for (int i = 0; i < nadapt; i++)
if (adapt[i].which == ATOM)
error->all(FLERR,"Cannot use dynamic group with fix adapt atom");
// setup and error checks
anypair = 0;
for (int m = 0; m < nadapt; m++) {
Adapt *ad = &adapt[m];
ad->ivar = input->variable->find(ad->var);
if (ad->ivar < 0)
error->all(FLERR,"Variable name for fix adapt does not exist");
if (!input->variable->equalstyle(ad->ivar))
error->all(FLERR,"Variable for fix adapt is invalid style");
if (ad->which == PAIR) {
anypair = 1;
ad->pair = NULL;
// if ad->pstyle has trailing sub-style annotation ":N",
// strip it for pstyle arg to pair_match() and set nsub = N
// this should work for appended suffixes as well
int n = strlen(ad->pstyle) + 1;
char *pstyle = new char[n];
strcpy(pstyle,ad->pstyle);
char *cptr;
int nsub = 0;
if ((cptr = strchr(pstyle,':'))) {
*cptr = '\0';
nsub = force->inumeric(FLERR,cptr+1);
}
if (lmp->suffix_enable) {
int len = 2 + strlen(pstyle) + strlen(lmp->suffix);
char *psuffix = new char[len];
strcpy(psuffix,pstyle);
strcat(psuffix,"/");
strcat(psuffix,lmp->suffix);
ad->pair = force->pair_match(psuffix,1,nsub);
delete[] psuffix;
}
if (ad->pair == NULL) ad->pair = force->pair_match(pstyle,1,nsub);
if (ad->pair == NULL) error->all(FLERR,"Fix adapt pair style does not exist");
void *ptr = ad->pair->extract(ad->pparam,ad->pdim);
if (ptr == NULL)
error->all(FLERR,"Fix adapt pair style param not supported");
// for pair styles only parameters that are 2-d arrays in atom types or
// scalars are supported
if (ad->pdim != 2 && ad->pdim != 0)
error->all(FLERR,"Fix adapt pair style param is not compatible");
if(ad->pdim == 2) ad->array = (double **) ptr;
if(ad->pdim == 0) ad->scalar = (double *) ptr;
// if pair hybrid, test that ilo,ihi,jlo,jhi are valid for sub-style
if (strcmp(force->pair_style,"hybrid") == 0 ||
strcmp(force->pair_style,"hybrid/overlay") == 0) {
PairHybrid *pair = (PairHybrid *) force->pair;
for (i = ad->ilo; i <= ad->ihi; i++)
for (j = MAX(ad->jlo,i); j <= ad->jhi; j++)
if (!pair->check_ijtype(i,j,pstyle))
error->all(FLERR,"Fix adapt type pair range is not valid for "
"pair hybrid sub-style");
}
delete [] pstyle;
} else if (ad->which == KSPACE) {
if (force->kspace == NULL)
error->all(FLERR,"Fix adapt kspace style does not exist");
kspace_scale = (double *) force->kspace->extract("scale");
} else if (ad->which == ATOM) {
if (ad->aparam == DIAMETER) {
if (!atom->radius_flag)
error->all(FLERR,"Fix adapt requires atom attribute diameter");
}
if (ad->aparam == CHARGE) {
if (!atom->q_flag)
error->all(FLERR,"Fix adapt requires atom attribute charge");
}
}
}
// make copy of original pair array values
for (int m = 0; m < nadapt; m++) {
Adapt *ad = &adapt[m];
if (ad->which == PAIR && ad->pdim == 2) {
for (i = ad->ilo; i <= ad->ihi; i++)
for (j = MAX(ad->jlo,i); j <= ad->jhi; j++)
ad->array_orig[i][j] = ad->array[i][j];
}else if (ad->which == PAIR && ad->pdim == 0){
ad->scalar_orig = *ad->scalar;
}
}
// fixes that store initial per-atom values
if (id_fix_diam) {
int ifix = modify->find_fix(id_fix_diam);
if (ifix < 0) error->all(FLERR,"Could not find fix adapt storage fix ID");
fix_diam = (FixStore *) modify->fix[ifix];
}
if (id_fix_chg) {
int ifix = modify->find_fix(id_fix_chg);
if (ifix < 0) error->all(FLERR,"Could not find fix adapt storage fix ID");
fix_chg = (FixStore *) modify->fix[ifix];
}
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
}
/* ---------------------------------------------------------------------- */
void FixAdapt::setup_pre_force(int vflag)
{
change_settings();
}
/* ---------------------------------------------------------------------- */
void FixAdapt::setup_pre_force_respa(int vflag, int ilevel)
{
if (ilevel < nlevels_respa-1) return;
setup_pre_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixAdapt::pre_force(int vflag)
{
if (nevery == 0) return;
if (update->ntimestep % nevery) return;
change_settings();
}
/* ---------------------------------------------------------------------- */
void FixAdapt::pre_force_respa(int vflag, int ilevel, int)
{
if (ilevel < nlevels_respa-1) return;
pre_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixAdapt::post_run()
{
if (resetflag) restore_settings();
}
/* ----------------------------------------------------------------------
change pair,kspace,atom parameters based on variable evaluation
------------------------------------------------------------------------- */
void FixAdapt::change_settings()
{
int i,j;
// variable evaluation may invoke computes so wrap with clear/add
modify->clearstep_compute();
for (int m = 0; m < nadapt; m++) {
Adapt *ad = &adapt[m];
double value = input->variable->compute_equal(ad->ivar);
// set global scalar or type pair array values
if (ad->which == PAIR) {
if (ad->pdim == 0) {
if (scaleflag) *ad->scalar = value * ad->scalar_orig;
else *ad->scalar = value;
} else if (ad->pdim == 2) {
if (scaleflag)
for (i = ad->ilo; i <= ad->ihi; i++)
for (j = MAX(ad->jlo,i); j <= ad->jhi; j++)
ad->array[i][j] = value*ad->array_orig[i][j];
else
for (i = ad->ilo; i <= ad->ihi; i++)
for (j = MAX(ad->jlo,i); j <= ad->jhi; j++)
ad->array[i][j] = value;
}
// set kspace scale factor
} else if (ad->which == KSPACE) {
*kspace_scale = value;
// set per atom values, also make changes for ghost atoms
} else if (ad->which == ATOM) {
// reset radius from diameter
// also scale rmass to new value
if (ad->aparam == DIAMETER) {
int mflag = 0;
if (atom->rmass_flag) mflag = 1;
double density;
double *radius = atom->radius;
double *rmass = atom->rmass;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int nall = nlocal + atom->nghost;
if (mflag == 0) {
for (i = 0; i < nall; i++)
if (mask[i] & groupbit)
radius[i] = 0.5*value;
} else {
for (i = 0; i < nall; i++)
if (mask[i] & groupbit) {
density = rmass[i] / (4.0*MY_PI/3.0 *
radius[i]*radius[i]*radius[i]);
radius[i] = 0.5*value;
rmass[i] = 4.0*MY_PI/3.0 *
radius[i]*radius[i]*radius[i] * density;
}
}
} else if (ad->aparam == CHARGE) {
double *q = atom->q;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int nall = nlocal + atom->nghost;
for (i = 0; i < nall; i++)
if (mask[i] & groupbit) q[i] = value;
}
}
}
modify->addstep_compute(update->ntimestep + nevery);
// re-initialize pair styles if any PAIR settings were changed
// this resets other coeffs that may depend on changed values,
// and also offset and tail corrections
if (anypair) {
for (int m = 0; m < nadapt; m++) {
Adapt *ad = &adapt[m];
if (ad->which == PAIR) {
ad->pair->reinit();
}
}
}
// reset KSpace charges if charges have changed
if (chgflag && force->kspace) force->kspace->qsum_qsq();
}
/* ----------------------------------------------------------------------
restore pair,kspace,atom parameters to original values
------------------------------------------------------------------------- */
void FixAdapt::restore_settings()
{
for (int m = 0; m < nadapt; m++) {
Adapt *ad = &adapt[m];
if (ad->which == PAIR) {
if (ad->pdim == 0) *ad->scalar = ad->scalar_orig;
else if (ad->pdim == 2) {
for (int i = ad->ilo; i <= ad->ihi; i++)
for (int j = MAX(ad->jlo,i); j <= ad->jhi; j++)
ad->array[i][j] = ad->array_orig[i][j];
}
} else if (ad->which == KSPACE) {
*kspace_scale = 1.0;
} else if (ad->which == ATOM) {
if (diamflag) {
double density;
double *vec = fix_diam->vstore;
double *radius = atom->radius;
double *rmass = atom->rmass;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
density = rmass[i] / (4.0*MY_PI/3.0 *
radius[i]*radius[i]*radius[i]);
radius[i] = vec[i];
rmass[i] = 4.0*MY_PI/3.0 * radius[i]*radius[i]*radius[i] * density;
}
}
if (chgflag) {
double *vec = fix_chg->vstore;
double *q = atom->q;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) q[i] = vec[i];
}
}
}
if (anypair) force->pair->reinit();
if (chgflag && force->kspace) force->kspace->qsum_qsq();
}
/* ----------------------------------------------------------------------
initialize one atom's storage values, called when atom is created
------------------------------------------------------------------------- */
void FixAdapt::set_arrays(int i)
{
if (fix_diam) fix_diam->vstore[i] = atom->radius[i];
if (fix_chg) fix_chg->vstore[i] = atom->q[i];
}
diff --git a/src/fix_addforce.cpp b/src/fix_addforce.cpp
index ac8384f2c..b8520f2d5 100644
--- a/src/fix_addforce.cpp
+++ b/src/fix_addforce.cpp
@@ -1,383 +1,383 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include "fix_addforce.h"
#include "atom.h"
#include "atom_masks.h"
#include "accelerator_kokkos.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "region.h"
#include "respa.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NONE,CONSTANT,EQUAL,ATOM};
/* ---------------------------------------------------------------------- */
FixAddForce::FixAddForce(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ xstr(NULL), ystr(NULL), zstr(NULL), estr(NULL), idregion(NULL), sforce(NULL)
+
{
if (narg < 6) error->all(FLERR,"Illegal fix addforce command");
dynamic_group_allow = 1;
scalar_flag = 1;
vector_flag = 1;
size_vector = 3;
global_freq = 1;
extscalar = 1;
extvector = 1;
respa_level_support = 1;
ilevel_respa = 0;
xstr = ystr = zstr = NULL;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[3][2]);
} else {
xvalue = force->numeric(FLERR,arg[3]);
xstyle = CONSTANT;
}
if (strstr(arg[4],"v_") == arg[4]) {
int n = strlen(&arg[4][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[4][2]);
} else {
yvalue = force->numeric(FLERR,arg[4]);
ystyle = CONSTANT;
}
if (strstr(arg[5],"v_") == arg[5]) {
int n = strlen(&arg[5][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[5][2]);
} else {
zvalue = force->numeric(FLERR,arg[5]);
zstyle = CONSTANT;
}
// optional args
nevery = 1;
iregion = -1;
- idregion = NULL;
- estr = NULL;
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg],"every") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix addforce command");
nevery = atoi(arg[iarg+1]);
if (nevery <= 0) error->all(FLERR,"Illegal fix addforce command");
iarg += 2;
} else if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix addforce command");
iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix addforce does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"energy") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix addforce command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) {
int n = strlen(&arg[iarg+1][2]) + 1;
estr = new char[n];
strcpy(estr,&arg[iarg+1][2]);
} else error->all(FLERR,"Illegal fix addforce command");
iarg += 2;
} else error->all(FLERR,"Illegal fix addforce command");
}
force_flag = 0;
foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0;
maxatom = 1;
memory->create(sforce,maxatom,4,"addforce:sforce");
}
/* ---------------------------------------------------------------------- */
FixAddForce::~FixAddForce()
{
delete [] xstr;
delete [] ystr;
delete [] zstr;
delete [] estr;
delete [] idregion;
memory->destroy(sforce);
}
/* ---------------------------------------------------------------------- */
int FixAddForce::setmask()
{
datamask_read = datamask_modify = 0;
int mask = 0;
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixAddForce::init()
{
// check variables
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0)
error->all(FLERR,"Variable name for fix addforce does not exist");
if (input->variable->equalstyle(xvar)) xstyle = EQUAL;
else if (input->variable->atomstyle(xvar)) xstyle = ATOM;
else error->all(FLERR,"Variable for fix addforce is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0)
error->all(FLERR,"Variable name for fix addforce does not exist");
if (input->variable->equalstyle(yvar)) ystyle = EQUAL;
else if (input->variable->atomstyle(yvar)) ystyle = ATOM;
else error->all(FLERR,"Variable for fix addforce is invalid style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0)
error->all(FLERR,"Variable name for fix addforce does not exist");
if (input->variable->equalstyle(zvar)) zstyle = EQUAL;
else if (input->variable->atomstyle(zvar)) zstyle = ATOM;
else error->all(FLERR,"Variable for fix addforce is invalid style");
}
if (estr) {
evar = input->variable->find(estr);
if (evar < 0)
error->all(FLERR,"Variable name for fix addforce does not exist");
if (input->variable->atomstyle(evar)) estyle = ATOM;
else error->all(FLERR,"Variable for fix addforce is invalid style");
} else estyle = NONE;
// set index and check validity of region
if (iregion >= 0) {
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix addforce does not exist");
}
if (xstyle == ATOM || ystyle == ATOM || zstyle == ATOM)
varflag = ATOM;
else if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL)
varflag = EQUAL;
else varflag = CONSTANT;
if (varflag == CONSTANT && estyle != NONE)
error->all(FLERR,"Cannot use variable energy with "
"constant force in fix addforce");
if ((varflag == EQUAL || varflag == ATOM) &&
update->whichflag == 2 && estyle == NONE)
error->all(FLERR,"Must use variable energy with fix addforce");
int max_respa = 0;
if (strstr(update->integrate_style,"respa"))
max_respa = ((Respa *) update->integrate)->nlevels-1;
if (respa_level >= 0)
ilevel_respa = MIN(respa_level,max_respa);
}
/* ---------------------------------------------------------------------- */
void FixAddForce::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixAddForce::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixAddForce::post_force(int vflag)
{
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
if (update->ntimestep % nevery) return;
if (lmp->kokkos)
atom->sync_modify(Host, (unsigned int) (F_MASK | MASK_MASK),
(unsigned int) F_MASK);
// update region if necessary
Region *region = NULL;
if (iregion >= 0) {
region = domain->regions[iregion];
region->prematch();
}
// reallocate sforce array if necessary
if ((varflag == ATOM || estyle == ATOM) && atom->nmax > maxatom) {
maxatom = atom->nmax;
memory->destroy(sforce);
memory->create(sforce,maxatom,4,"addforce:sforce");
}
// foriginal[0] = "potential energy" for added force
// foriginal[123] = force on atoms before extra force added
foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0;
force_flag = 0;
// constant force
// potential energy = - x dot f in unwrapped coords
if (varflag == CONSTANT) {
double unwrap[3];
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
domain->unmap(x[i],image[i],unwrap);
foriginal[0] -= xvalue*unwrap[0] + yvalue*unwrap[1] + zvalue*unwrap[2];
foriginal[1] += f[i][0];
foriginal[2] += f[i][1];
foriginal[3] += f[i][2];
f[i][0] += xvalue;
f[i][1] += yvalue;
f[i][2] += zvalue;
}
// variable force, wrap with clear/add
// potential energy = evar if defined, else 0.0
// wrap with clear/add
} else {
modify->clearstep_compute();
if (xstyle == EQUAL) xvalue = input->variable->compute_equal(xvar);
else if (xstyle == ATOM)
input->variable->compute_atom(xvar,igroup,&sforce[0][0],4,0);
if (ystyle == EQUAL) yvalue = input->variable->compute_equal(yvar);
else if (ystyle == ATOM)
input->variable->compute_atom(yvar,igroup,&sforce[0][1],4,0);
if (zstyle == EQUAL) zvalue = input->variable->compute_equal(zvar);
else if (zstyle == ATOM)
input->variable->compute_atom(zvar,igroup,&sforce[0][2],4,0);
if (estyle == ATOM)
input->variable->compute_atom(evar,igroup,&sforce[0][3],4,0);
modify->addstep_compute(update->ntimestep + 1);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
if (estyle == ATOM) foriginal[0] += sforce[i][3];
foriginal[1] += f[i][0];
foriginal[2] += f[i][1];
foriginal[3] += f[i][2];
if (xstyle == ATOM) f[i][0] += sforce[i][0];
else if (xstyle) f[i][0] += xvalue;
if (ystyle == ATOM) f[i][1] += sforce[i][1];
else if (ystyle) f[i][1] += yvalue;
if (zstyle == ATOM) f[i][2] += sforce[i][2];
else if (zstyle) f[i][2] += zvalue;
}
}
}
/* ---------------------------------------------------------------------- */
void FixAddForce::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == ilevel_respa) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixAddForce::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
potential energy of added force
------------------------------------------------------------------------- */
double FixAddForce::compute_scalar()
{
// only sum across procs one time
if (force_flag == 0) {
MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world);
force_flag = 1;
}
return foriginal_all[0];
}
/* ----------------------------------------------------------------------
return components of total force on fix group before force was changed
------------------------------------------------------------------------- */
double FixAddForce::compute_vector(int n)
{
// only sum across procs one time
if (force_flag == 0) {
MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world);
force_flag = 1;
}
return foriginal_all[n+1];
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixAddForce::memory_usage()
{
double bytes = 0.0;
if (varflag == ATOM) bytes = maxatom*4 * sizeof(double);
return bytes;
}
diff --git a/src/fix_ave_atom.cpp b/src/fix_ave_atom.cpp
index 2784537c6..ce904df85 100644
--- a/src/fix_ave_atom.cpp
+++ b/src/fix_ave_atom.cpp
@@ -1,475 +1,475 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include "fix_ave_atom.h"
#include "atom.h"
#include "domain.h"
#include "update.h"
#include "modify.h"
#include "compute.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{X,V,F,COMPUTE,FIX,VARIABLE};
#define INVOKED_PERATOM 8
/* ---------------------------------------------------------------------- */
FixAveAtom::FixAveAtom(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ nvalues(0), which(NULL), argindex(NULL), value2index(NULL), ids(NULL), array(NULL)
{
if (narg < 7) error->all(FLERR,"Illegal fix ave/atom command");
nevery = force->inumeric(FLERR,arg[3]);
nrepeat = force->inumeric(FLERR,arg[4]);
peratom_freq = force->inumeric(FLERR,arg[5]);
nvalues = narg - 6;
// expand args if any have wildcard character "*"
// this can reset nvalues
int expand = 0;
char **earg;
nvalues = input->expand_args(nvalues,&arg[6],1,earg);
if (earg != &arg[6]) expand = 1;
arg = earg;
// parse values
which = new int[nvalues];
argindex = new int[nvalues];
ids = new char*[nvalues];
value2index = new int[nvalues];
for (int i = 0; i < nvalues; i++) {
ids[i] = NULL;
if (strcmp(arg[i],"x") == 0) {
which[i] = X;
argindex[i++] = 0;
} else if (strcmp(arg[i],"y") == 0) {
which[i] = X;
argindex[i++] = 1;
} else if (strcmp(arg[i],"z") == 0) {
which[i] = X;
argindex[i++] = 2;
} else if (strcmp(arg[i],"vx") == 0) {
which[i] = V;
argindex[i++] = 0;
} else if (strcmp(arg[i],"vy") == 0) {
which[i] = V;
argindex[i++] = 1;
} else if (strcmp(arg[i],"vz") == 0) {
which[i] = V;
argindex[i++] = 2;
} else if (strcmp(arg[i],"fx") == 0) {
which[i] = F;
argindex[i++] = 0;
} else if (strcmp(arg[i],"fy") == 0) {
which[i] = F;
argindex[i++] = 1;
} else if (strcmp(arg[i],"fz") == 0) {
which[i] = F;
argindex[i++] = 2;
} else if (strncmp(arg[i],"c_",2) == 0 ||
strncmp(arg[i],"f_",2) == 0 ||
strncmp(arg[i],"v_",2) == 0) {
if (arg[i][0] == 'c') which[i] = COMPUTE;
else if (arg[i][0] == 'f') which[i] = FIX;
else if (arg[i][0] == 'v') which[i] = VARIABLE;
int n = strlen(arg[i]);
char *suffix = new char[n];
strcpy(suffix,&arg[i][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Illegal fix ave/atom command");
argindex[i] = atoi(ptr+1);
*ptr = '\0';
} else argindex[i] = 0;
n = strlen(suffix) + 1;
ids[i] = new char[n];
strcpy(ids[i],suffix);
delete [] suffix;
} else error->all(FLERR,"Illegal fix ave/atom command");
}
// if wildcard expansion occurred, free earg memory from exapnd_args()
if (expand) {
for (int i = 0; i < nvalues; i++) delete [] earg[i];
memory->sfree(earg);
}
// setup and error check
// for fix inputs, check that fix frequency is acceptable
if (nevery <= 0 || nrepeat <= 0 || peratom_freq <= 0)
error->all(FLERR,"Illegal fix ave/atom command");
if (peratom_freq % nevery || nrepeat*nevery > peratom_freq)
error->all(FLERR,"Illegal fix ave/atom command");
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/atom does not exist");
if (modify->compute[icompute]->peratom_flag == 0)
error->all(FLERR,
"Fix ave/atom compute does not calculate per-atom values");
if (argindex[i] == 0 &&
modify->compute[icompute]->size_peratom_cols != 0)
error->all(FLERR,"Fix ave/atom compute does not "
"calculate a per-atom vector");
if (argindex[i] && modify->compute[icompute]->size_peratom_cols == 0)
error->all(FLERR,"Fix ave/atom compute does not "
"calculate a per-atom array");
if (argindex[i] &&
argindex[i] > modify->compute[icompute]->size_peratom_cols)
error->all(FLERR,"Fix ave/atom compute array is accessed out-of-range");
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/atom does not exist");
if (modify->fix[ifix]->peratom_flag == 0)
error->all(FLERR,"Fix ave/atom fix does not calculate per-atom values");
if (argindex[i] == 0 && modify->fix[ifix]->size_peratom_cols != 0)
error->all(FLERR,
"Fix ave/atom fix does not calculate a per-atom vector");
if (argindex[i] && modify->fix[ifix]->size_peratom_cols == 0)
error->all(FLERR,
"Fix ave/atom fix does not calculate a per-atom array");
if (argindex[i] && argindex[i] > modify->fix[ifix]->size_peratom_cols)
error->all(FLERR,"Fix ave/atom fix array is accessed out-of-range");
if (nevery % modify->fix[ifix]->peratom_freq)
error->all(FLERR,
"Fix for fix ave/atom not computed at compatible time");
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/atom does not exist");
if (input->variable->atomstyle(ivariable) == 0)
error->all(FLERR,"Fix ave/atom variable is not atom-style variable");
}
}
// this fix produces either a per-atom vector or array
peratom_flag = 1;
if (nvalues == 1) size_peratom_cols = 0;
else size_peratom_cols = nvalues;
// perform initial allocation of atom-based array
// register with Atom class
- array = NULL;
grow_arrays(atom->nmax);
atom->add_callback(0);
// zero the array since dump may access it on timestep 0
// zero the array since a variable may access it before first run
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
for (int m = 0; m < nvalues; m++)
array[i][m] = 0.0;
// nvalid = next step on which end_of_step does something
// add nvalid to all computes that store invocation times
// since don't know a priori which are invoked by this fix
// once in end_of_step() can set timestep for ones actually invoked
irepeat = 0;
nvalid_last = -1;
nvalid = nextvalid();
modify->addstep_compute_all(nvalid);
}
/* ---------------------------------------------------------------------- */
FixAveAtom::~FixAveAtom()
{
// unregister callback to this fix from Atom class
atom->delete_callback(id,0);
delete [] which;
delete [] argindex;
for (int m = 0; m < nvalues; m++) delete [] ids[m];
delete [] ids;
delete [] value2index;
memory->destroy(array);
}
/* ---------------------------------------------------------------------- */
int FixAveAtom::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixAveAtom::init()
{
// set indices and check validity of all computes,fixes,variables
for (int m = 0; m < nvalues; m++) {
if (which[m] == COMPUTE) {
int icompute = modify->find_compute(ids[m]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/atom does not exist");
value2index[m] = icompute;
} else if (which[m] == FIX) {
int ifix = modify->find_fix(ids[m]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/atom does not exist");
value2index[m] = ifix;
} else if (which[m] == VARIABLE) {
int ivariable = input->variable->find(ids[m]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/atom does not exist");
value2index[m] = ivariable;
} else value2index[m] = -1;
}
// need to reset nvalid if nvalid < ntimestep b/c minimize was performed
if (nvalid < update->ntimestep) {
irepeat = 0;
nvalid = nextvalid();
modify->addstep_compute_all(nvalid);
}
}
/* ----------------------------------------------------------------------
only does something if nvalid = current timestep
------------------------------------------------------------------------- */
void FixAveAtom::setup(int vflag)
{
end_of_step();
}
/* ---------------------------------------------------------------------- */
void FixAveAtom::end_of_step()
{
int i,j,m,n;
// skip if not step which requires doing something
// error check if timestep was reset in an invalid manner
bigint ntimestep = update->ntimestep;
if (ntimestep < nvalid_last || ntimestep > nvalid)
error->all(FLERR,"Invalid timestep reset for fix ave/atom");
if (ntimestep != nvalid) return;
nvalid_last = nvalid;
// zero if first step
int nlocal = atom->nlocal;
if (irepeat == 0)
for (i = 0; i < nlocal; i++)
for (m = 0; m < nvalues; m++)
array[i][m] = 0.0;
// accumulate results of attributes,computes,fixes,variables to local copy
// compute/fix/variable may invoke computes so wrap with clear/add
modify->clearstep_compute();
int *mask = atom->mask;
for (m = 0; m < nvalues; m++) {
n = value2index[m];
j = argindex[m];
if (which[m] == X) {
double **x = atom->x;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) array[i][m] += x[i][j];
} else if (which[m] == V) {
double **v = atom->v;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) array[i][m] += v[i][j];
} else if (which[m] == F) {
double **f = atom->f;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) array[i][m] += f[i][j];
// invoke compute if not previously invoked
} else if (which[m] == COMPUTE) {
Compute *compute = modify->compute[n];
if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
if (j == 0) {
double *compute_vector = compute->vector_atom;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) array[i][m] += compute_vector[i];
} else {
int jm1 = j - 1;
double **compute_array = compute->array_atom;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) array[i][m] += compute_array[i][jm1];
}
// access fix fields, guaranteed to be ready
} else if (which[m] == FIX) {
if (j == 0) {
double *fix_vector = modify->fix[n]->vector_atom;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) array[i][m] += fix_vector[i];
} else {
int jm1 = j - 1;
double **fix_array = modify->fix[n]->array_atom;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) array[i][m] += fix_array[i][jm1];
}
// evaluate atom-style variable
// final argument = 1 sums result to array
} else if (which[m] == VARIABLE) {
if (array) input->variable->compute_atom(n,igroup,&array[0][m],nvalues,1);
else input->variable->compute_atom(n,igroup,NULL,nvalues,1);
}
}
// done if irepeat < nrepeat
// else reset irepeat and nvalid
irepeat++;
if (irepeat < nrepeat) {
nvalid += nevery;
modify->addstep_compute(nvalid);
return;
}
irepeat = 0;
nvalid = ntimestep+peratom_freq - (nrepeat-1)*nevery;
modify->addstep_compute(nvalid);
if (array == NULL) return;
// average the final result for the Nfreq timestep
double repeat = nrepeat;
for (i = 0; i < nlocal; i++)
for (m = 0; m < nvalues; m++)
array[i][m] /= repeat;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixAveAtom::memory_usage()
{
double bytes;
bytes = atom->nmax*nvalues * sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
allocate atom-based array
------------------------------------------------------------------------- */
void FixAveAtom::grow_arrays(int nmax)
{
memory->grow(array,nmax,nvalues,"fix_ave/atom:array");
array_atom = array;
if (array) vector_atom = array[0];
else vector_atom = NULL;
}
/* ----------------------------------------------------------------------
copy values within local atom-based array
------------------------------------------------------------------------- */
void FixAveAtom::copy_arrays(int i, int j, int delflag)
{
for (int m = 0; m < nvalues; m++)
array[j][m] = array[i][m];
}
/* ----------------------------------------------------------------------
pack values in local atom-based array for exchange with another proc
------------------------------------------------------------------------- */
int FixAveAtom::pack_exchange(int i, double *buf)
{
for (int m = 0; m < nvalues; m++) buf[m] = array[i][m];
return nvalues;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based array from exchange with another proc
------------------------------------------------------------------------- */
int FixAveAtom::unpack_exchange(int nlocal, double *buf)
{
for (int m = 0; m < nvalues; m++) array[nlocal][m] = buf[m];
return nvalues;
}
/* ----------------------------------------------------------------------
calculate nvalid = next step on which end_of_step does something
can be this timestep if multiple of nfreq and nrepeat = 1
else backup from next multiple of nfreq
------------------------------------------------------------------------- */
bigint FixAveAtom::nextvalid()
{
bigint nvalid = (update->ntimestep/peratom_freq)*peratom_freq + peratom_freq;
if (nvalid-peratom_freq == update->ntimestep && nrepeat == 1)
nvalid = update->ntimestep;
else
nvalid -= (nrepeat-1)*nevery;
if (nvalid < update->ntimestep) nvalid += peratom_freq;
return nvalid;
}
diff --git a/src/fix_ave_correlate.cpp b/src/fix_ave_correlate.cpp
index 18e16d1ea..fffcc09d7 100644
--- a/src/fix_ave_correlate.cpp
+++ b/src/fix_ave_correlate.cpp
@@ -1,650 +1,652 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors:
Benoit Leblanc, Dave Rigby, Paul Saxe (Materials Design)
Reese Jones (Sandia)
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "fix_ave_correlate.h"
#include "update.h"
#include "modify.h"
#include "compute.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{COMPUTE,FIX,VARIABLE};
enum{ONE,RUNNING};
enum{AUTO,UPPER,LOWER,AUTOUPPER,AUTOLOWER,FULL};
#define INVOKED_SCALAR 1
#define INVOKED_VECTOR 2
#define INVOKED_ARRAY 4
/* ---------------------------------------------------------------------- */
FixAveCorrelate::FixAveCorrelate(LAMMPS * lmp, int narg, char **arg):
- Fix (lmp, narg, arg)
+ Fix (lmp, narg, arg),
+ nvalues(0), which(NULL), argindex(NULL), value2index(NULL), ids(NULL), fp(NULL),
+ count(NULL), values(NULL), corr(NULL), save_count(NULL), save_corr(NULL)
{
if (narg < 7) error->all(FLERR,"Illegal fix ave/correlate command");
MPI_Comm_rank(world,&me);
nevery = force->inumeric(FLERR,arg[3]);
nrepeat = force->inumeric(FLERR,arg[4]);
nfreq = force->inumeric(FLERR,arg[5]);
global_freq = nfreq;
// expand args if any have wildcard character "*"
int expand = 0;
char **earg;
int nargnew = input->expand_args(narg-6,&arg[6],0,earg);
if (earg != &arg[6]) expand = 1;
arg = earg;
// parse values until one isn't recognized
which = new int[nargnew];
argindex = new int[nargnew];
ids = new char*[nargnew];
value2index = new int[nargnew];
nvalues = 0;
int iarg = 0;
while (iarg < nargnew) {
if (strncmp(arg[iarg],"c_",2) == 0 ||
strncmp(arg[iarg],"f_",2) == 0 ||
strncmp(arg[iarg],"v_",2) == 0) {
if (arg[iarg][0] == 'c') which[nvalues] = COMPUTE;
else if (arg[iarg][0] == 'f') which[nvalues] = FIX;
else if (arg[iarg][0] == 'v') which[nvalues] = VARIABLE;
int n = strlen(arg[iarg]);
char *suffix = new char[n];
strcpy(suffix,&arg[iarg][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Illegal fix ave/correlate command");
argindex[nvalues] = atoi(ptr+1);
*ptr = '\0';
} else argindex[nvalues] = 0;
n = strlen(suffix) + 1;
ids[nvalues] = new char[n];
strcpy(ids[nvalues],suffix);
delete [] suffix;
nvalues++;
iarg++;
} else break;
}
// optional args
type = AUTO;
ave = ONE;
startstep = 0;
prefactor = 1.0;
fp = NULL;
overwrite = 0;
char *title1 = NULL;
char *title2 = NULL;
char *title3 = NULL;
while (iarg < nargnew) {
if (strcmp(arg[iarg],"type") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/correlate command");
if (strcmp(arg[iarg+1],"auto") == 0) type = AUTO;
else if (strcmp(arg[iarg+1],"upper") == 0) type = UPPER;
else if (strcmp(arg[iarg+1],"lower") == 0) type = LOWER;
else if (strcmp(arg[iarg+1],"auto/upper") == 0) type = AUTOUPPER;
else if (strcmp(arg[iarg+1],"auto/lower") == 0) type = AUTOLOWER;
else if (strcmp(arg[iarg+1],"full") == 0) type = FULL;
else error->all(FLERR,"Illegal fix ave/correlate command");
iarg += 2;
} else if (strcmp(arg[iarg],"ave") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/correlate command");
if (strcmp(arg[iarg+1],"one") == 0) ave = ONE;
else if (strcmp(arg[iarg+1],"running") == 0) ave = RUNNING;
else error->all(FLERR,"Illegal fix ave/correlate command");
iarg += 2;
} else if (strcmp(arg[iarg],"start") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/correlate command");
startstep = force->inumeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"prefactor") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/correlate command");
prefactor = force->numeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"file") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/correlate command");
if (me == 0) {
fp = fopen(arg[iarg+1],"w");
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open fix ave/correlate file %s",arg[iarg+1]);
error->one(FLERR,str);
}
}
iarg += 2;
} else if (strcmp(arg[iarg],"overwrite") == 0) {
overwrite = 1;
iarg += 1;
} else if (strcmp(arg[iarg],"title1") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/correlate command");
delete [] title1;
int n = strlen(arg[iarg+1]) + 1;
title1 = new char[n];
strcpy(title1,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"title2") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/correlate command");
delete [] title2;
int n = strlen(arg[iarg+1]) + 1;
title2 = new char[n];
strcpy(title2,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"title3") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/correlate command");
delete [] title3;
int n = strlen(arg[iarg+1]) + 1;
title3 = new char[n];
strcpy(title3,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix ave/correlate command");
}
// setup and error check
// for fix inputs, check that fix frequency is acceptable
if (nevery <= 0 || nrepeat <= 0 || nfreq <= 0)
error->all(FLERR,"Illegal fix ave/correlate command");
if (nfreq % nevery)
error->all(FLERR,"Illegal fix ave/correlate command");
if (ave == ONE && nfreq < (nrepeat-1)*nevery)
error->all(FLERR,"Illegal fix ave/correlate command");
if (ave != RUNNING && overwrite)
error->all(FLERR,"Illegal fix ave/correlate command");
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/correlate does not exist");
if (argindex[i] == 0 && modify->compute[icompute]->scalar_flag == 0)
error->all(FLERR,
"Fix ave/correlate compute does not calculate a scalar");
if (argindex[i] && modify->compute[icompute]->vector_flag == 0)
error->all(FLERR,
"Fix ave/correlate compute does not calculate a vector");
if (argindex[i] && argindex[i] > modify->compute[icompute]->size_vector)
error->all(FLERR,"Fix ave/correlate compute vector "
"is accessed out-of-range");
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/correlate does not exist");
if (argindex[i] == 0 && modify->fix[ifix]->scalar_flag == 0)
error->all(FLERR,"Fix ave/correlate fix does not calculate a scalar");
if (argindex[i] && modify->fix[ifix]->vector_flag == 0)
error->all(FLERR,"Fix ave/correlate fix does not calculate a vector");
if (argindex[i] && argindex[i] > modify->fix[ifix]->size_vector)
error->all(FLERR,
"Fix ave/correlate fix vector is accessed out-of-range");
if (nevery % modify->fix[ifix]->global_freq)
error->all(FLERR,"Fix for fix ave/correlate "
"not computed at compatible time");
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/correlate does not exist");
if (argindex[i] == 0 && input->variable->equalstyle(ivariable) == 0)
error->all(FLERR,
"Fix ave/correlate variable is not equal-style variable");
if (argindex[i] && input->variable->vectorstyle(ivariable) == 0)
error->all(FLERR,
"Fix ave/correlate variable is not vector-style variable");
}
}
// npair = # of correlation pairs to calculate
if (type == AUTO) npair = nvalues;
if (type == UPPER || type == LOWER) npair = nvalues*(nvalues-1)/2;
if (type == AUTOUPPER || type == AUTOLOWER) npair = nvalues*(nvalues+1)/2;
if (type == FULL) npair = nvalues*nvalues;
// print file comment lines
if (fp && me == 0) {
clearerr(fp);
if (title1) fprintf(fp,"%s\n",title1);
else fprintf(fp,"# Time-correlated data for fix %s\n",id);
if (title2) fprintf(fp,"%s\n",title2);
else fprintf(fp,"# Timestep Number-of-time-windows\n");
if (title3) fprintf(fp,"%s\n",title3);
else {
fprintf(fp,"# Index TimeDelta Ncount");
if (type == AUTO)
for (int i = 0; i < nvalues; i++)
fprintf(fp," %s*%s",earg[i],earg[i]);
else if (type == UPPER)
for (int i = 0; i < nvalues; i++)
for (int j = i+1; j < nvalues; j++)
fprintf(fp," %s*%s",earg[i],earg[j]);
else if (type == LOWER)
for (int i = 0; i < nvalues; i++)
for (int j = 0; j < i-1; j++)
fprintf(fp," %s*%s",earg[i],earg[j]);
else if (type == AUTOUPPER)
for (int i = 0; i < nvalues; i++)
for (int j = i; j < nvalues; j++)
fprintf(fp," %s*%s",earg[i],earg[j]);
else if (type == AUTOLOWER)
for (int i = 0; i < nvalues; i++)
for (int j = 0; j < i; j++)
fprintf(fp," %s*%s",earg[i],earg[j]);
else if (type == FULL)
for (int i = 0; i < nvalues; i++)
for (int j = 0; j < nvalues; j++)
fprintf(fp," %s*%s",earg[i],earg[j]);
fprintf(fp,"\n");
}
if (ferror(fp))
error->one(FLERR,"Error writing file header");
filepos = ftell(fp);
}
delete [] title1;
delete [] title2;
delete [] title3;
// if wildcard expansion occurred, free earg memory from expand_args()
// wait to do this until after file comment lines are printed
if (expand) {
for (int i = 0; i < nargnew; i++) delete [] earg[i];
memory->sfree(earg);
}
// allocate and initialize memory for averaging
// set count and corr to zero since they accumulate
// also set save versions to zero in case accessed via compute_array()
memory->create(values,nrepeat,nvalues,"ave/correlate:values");
memory->create(count,nrepeat,"ave/correlate:count");
memory->create(save_count,nrepeat,"ave/correlate:save_count");
memory->create(corr,nrepeat,npair,"ave/correlate:corr");
memory->create(save_corr,nrepeat,npair,"ave/correlate:save_corr");
int i,j;
for (i = 0; i < nrepeat; i++) {
save_count[i] = count[i] = 0;
for (j = 0; j < npair; j++)
save_corr[i][j] = corr[i][j] = 0.0;
}
// this fix produces a global array
array_flag = 1;
size_array_rows = nrepeat;
size_array_cols = npair+2;
extarray = 0;
// nvalid = next step on which end_of_step does something
// add nvalid to all computes that store invocation times
// since don't know a priori which are invoked by this fix
// once in end_of_step() can set timestep for ones actually invoked
lastindex = -1;
firstindex = 0;
nsample = 0;
nvalid_last = -1;
nvalid = nextvalid();
modify->addstep_compute_all(nvalid);
}
/* ---------------------------------------------------------------------- */
FixAveCorrelate::~FixAveCorrelate()
{
delete [] which;
delete [] argindex;
delete [] value2index;
for (int i = 0; i < nvalues; i++) delete [] ids[i];
delete [] ids;
memory->destroy(values);
memory->destroy(count);
memory->destroy(save_count);
memory->destroy(corr);
memory->destroy(save_corr);
if (fp && me == 0) fclose(fp);
}
/* ---------------------------------------------------------------------- */
int FixAveCorrelate::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixAveCorrelate::init()
{
// set current indices for all computes,fixes,variables
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/correlate does not exist");
value2index[i] = icompute;
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/correlate does not exist");
value2index[i] = ifix;
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/correlate does not exist");
value2index[i] = ivariable;
}
}
// need to reset nvalid if nvalid < ntimestep b/c minimize was performed
if (nvalid < update->ntimestep) {
lastindex = -1;
firstindex = 0;
nsample = 0;
nvalid = nextvalid();
modify->addstep_compute_all(nvalid);
}
}
/* ----------------------------------------------------------------------
only does something if nvalid = current timestep
------------------------------------------------------------------------- */
void FixAveCorrelate::setup(int vflag)
{
end_of_step();
}
/* ---------------------------------------------------------------------- */
void FixAveCorrelate::end_of_step()
{
int i,j,m;
double scalar;
// skip if not step which requires doing something
// error check if timestep was reset in an invalid manner
bigint ntimestep = update->ntimestep;
if (ntimestep < nvalid_last || ntimestep > nvalid)
error->all(FLERR,"Invalid timestep reset for fix ave/correlate");
if (ntimestep != nvalid) return;
nvalid_last = nvalid;
// accumulate results of computes,fixes,variables to origin
// compute/fix/variable may invoke computes so wrap with clear/add
modify->clearstep_compute();
// lastindex = index in values ring of latest time sample
lastindex++;
if (lastindex == nrepeat) lastindex = 0;
for (i = 0; i < nvalues; i++) {
m = value2index[i];
// invoke compute if not previously invoked
if (which[i] == COMPUTE) {
Compute *compute = modify->compute[m];
if (argindex[i] == 0) {
if (!(compute->invoked_flag & INVOKED_SCALAR)) {
compute->compute_scalar();
compute->invoked_flag |= INVOKED_SCALAR;
}
scalar = compute->scalar;
} else {
if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
scalar = compute->vector[argindex[i]-1];
}
// access fix fields, guaranteed to be ready
} else if (which[i] == FIX) {
if (argindex[i] == 0)
scalar = modify->fix[m]->compute_scalar();
else
scalar = modify->fix[m]->compute_vector(argindex[i]-1);
// evaluate equal-style or vector-style variable
} else if (which[i] == VARIABLE) {
if (argindex[i] == 0)
scalar = input->variable->compute_equal(m);
else {
double *varvec;
int nvec = input->variable->compute_vector(m,&varvec);
int index = argindex[i];
if (nvec < index) scalar = 0.0;
else scalar = varvec[index-1];
}
}
values[lastindex][i] = scalar;
}
// fistindex = index in values ring of earliest time sample
// nsample = number of time samples in values ring
if (nsample < nrepeat) nsample++;
else {
firstindex++;
if (firstindex == nrepeat) firstindex = 0;
}
nvalid += nevery;
modify->addstep_compute(nvalid);
// calculate all Cij() enabled by latest values
accumulate();
if (ntimestep % nfreq) return;
// save results in save_count and save_corr
for (i = 0; i < nrepeat; i++) {
save_count[i] = count[i];
if (count[i])
for (j = 0; j < npair; j++)
save_corr[i][j] = prefactor*corr[i][j]/count[i];
else
for (j = 0; j < npair; j++)
save_corr[i][j] = 0.0;
}
// output result to file
if (fp && me == 0) {
clearerr(fp);
if (overwrite) fseek(fp,filepos,SEEK_SET);
fprintf(fp,BIGINT_FORMAT " %d\n",ntimestep,nrepeat);
for (i = 0; i < nrepeat; i++) {
fprintf(fp,"%d %d %d",i+1,i*nevery,count[i]);
if (count[i])
for (j = 0; j < npair; j++)
fprintf(fp," %g",prefactor*corr[i][j]/count[i]);
else
for (j = 0; j < npair; j++)
fprintf(fp," 0.0");
fprintf(fp,"\n");
}
if (ferror(fp))
error->one(FLERR,"Error writing out correlation data");
fflush(fp);
if (overwrite) {
long fileend = ftell(fp);
if (fileend > 0) ftruncate(fileno(fp),fileend);
}
}
// zero accumulation if requested
// recalculate Cij(0)
if (ave == ONE) {
for (i = 0; i < nrepeat; i++) {
count[i] = 0;
for (j = 0; j < npair; j++)
corr[i][j] = 0.0;
}
nsample = 1;
accumulate();
}
}
/* ----------------------------------------------------------------------
accumulate correlation data using more recently added values
------------------------------------------------------------------------- */
void FixAveCorrelate::accumulate()
{
int i,j,k,m,n,ipair;
for (k = 0; k < nsample; k++) count[k]++;
if (type == AUTO) {
m = n = lastindex;
for (k = 0; k < nsample; k++) {
ipair = 0;
for (i = 0; i < nvalues; i++) {
corr[k][ipair++] += values[m][i]*values[n][i];
}
m--;
if (m < 0) m = nrepeat-1;
}
} else if (type == UPPER) {
m = n = lastindex;
for (k = 0; k < nsample; k++) {
ipair = 0;
for (i = 0; i < nvalues; i++)
for (j = i+1; j < nvalues; j++)
corr[k][ipair++] += values[m][i]*values[n][j];
m--;
if (m < 0) m = nrepeat-1;
}
} else if (type == LOWER) {
m = n = lastindex;
for (k = 0; k < nsample; k++) {
ipair = 0;
for (i = 0; i < nvalues; i++)
for (j = 0; j < i; j++)
corr[k][ipair++] += values[m][i]*values[n][j];
m--;
if (m < 0) m = nrepeat-1;
}
} else if (type == AUTOUPPER) {
m = n = lastindex;
for (k = 0; k < nsample; k++) {
ipair = 0;
for (i = 0; i < nvalues; i++)
for (j = i; j < nvalues; j++)
corr[k][ipair++] += values[m][i]*values[n][j];
m--;
if (m < 0) m = nrepeat-1;
}
} else if (type == AUTOLOWER) {
m = n = lastindex;
for (k = 0; k < nsample; k++) {
ipair = 0;
for (i = 0; i < nvalues; i++)
for (j = 0; j <= i; j++)
corr[k][ipair++] += values[m][i]*values[n][j];
m--;
if (m < 0) m = nrepeat-1;
}
} else if (type == FULL) {
m = n = lastindex;
for (k = 0; k < nsample; k++) {
ipair = 0;
for (i = 0; i < nvalues; i++)
for (j = 0; j < nvalues; j++)
corr[k][ipair++] += values[m][i]*values[n][j];
m--;
if (m < 0) m = nrepeat-1;
}
}
}
/* ----------------------------------------------------------------------
return I,J array value
------------------------------------------------------------------------- */
double FixAveCorrelate::compute_array(int i, int j)
{
if (j == 0) return 1.0*i*nevery;
else if (j == 1) return 1.0*save_count[i];
else if (save_count[i]) return save_corr[i][j-2];
return 0.0;
}
/* ----------------------------------------------------------------------
nvalid = next step on which end_of_step does something
this step if multiple of nevery, else next multiple
startstep is lower bound
------------------------------------------------------------------------- */
bigint FixAveCorrelate::nextvalid()
{
bigint nvalid = update->ntimestep;
if (startstep > nvalid) nvalid = startstep;
if (nvalid % nevery) nvalid = (nvalid/nevery)*nevery + nevery;
return nvalid;
}
diff --git a/src/fix_ave_histo.cpp b/src/fix_ave_histo.cpp
index 06281e2ec..e0d010aac 100644
--- a/src/fix_ave_histo.cpp
+++ b/src/fix_ave_histo.cpp
@@ -1,1013 +1,1015 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "fix_ave_histo.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "compute.h"
#include "group.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{X,V,F,COMPUTE,FIX,VARIABLE};
enum{ONE,RUNNING};
enum{SCALAR,VECTOR,WINDOW};
enum{GLOBAL,PERATOM,LOCAL};
enum{IGNORE,END,EXTRA};
#define INVOKED_SCALAR 1
#define INVOKED_VECTOR 2
#define INVOKED_ARRAY 4
#define INVOKED_PERATOM 8
#define INVOKED_LOCAL 16
#define BIG 1.0e20
/* ---------------------------------------------------------------------- */
FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ nvalues(0), which(NULL), argindex(NULL), value2index(NULL), ids(NULL), fp(NULL), stats_list(NULL),
+ bin(NULL), bin_total(NULL), bin_all(NULL), bin_list(NULL), coord(NULL), vector(NULL)
{
if (narg < 10) error->all(FLERR,"Illegal fix ave/histo command");
MPI_Comm_rank(world,&me);
nevery = force->inumeric(FLERR,arg[3]);
nrepeat = force->inumeric(FLERR,arg[4]);
nfreq = force->inumeric(FLERR,arg[5]);
global_freq = nfreq;
vector_flag = 1;
size_vector = 4;
extvector = 0;
array_flag = 1;
size_array_cols = 3;
extarray = 0;
dynamic_group_allow = 1;
lo = force->numeric(FLERR,arg[6]);
hi = force->numeric(FLERR,arg[7]);
nbins = force->inumeric(FLERR,arg[8]);
// scan values to count them
// then read options so know mode = SCALAR/VECTOR before re-reading values
nvalues = 0;
int iarg = 9;
while (iarg < narg) {
if (strcmp(arg[iarg],"x") == 0 ||
strcmp(arg[iarg],"y") == 0 ||
strcmp(arg[iarg],"z") == 0 ||
strcmp(arg[iarg],"vx") == 0 ||
strcmp(arg[iarg],"vy") == 0 ||
strcmp(arg[iarg],"vz") == 0 ||
strcmp(arg[iarg],"fx") == 0 ||
strcmp(arg[iarg],"fy") == 0 ||
strcmp(arg[iarg],"fz") == 0 ||
strncmp(arg[iarg],"c_",2) == 0 ||
strncmp(arg[iarg],"f_",2) == 0 ||
strncmp(arg[iarg],"v_",2) == 0) {
nvalues++;
iarg++;
} else break;
}
if (nvalues == 0) error->all(FLERR,"No values in fix ave/histo command");
options(iarg,narg,arg);
// expand args if any have wildcard character "*"
// this can reset nvalues
int expand = 0;
char **earg;
nvalues = input->expand_args(nvalues,&arg[9],mode,earg);
if (earg != &arg[9]) expand = 1;
arg = earg;
// parse values
which = new int[nvalues];
argindex = new int[nvalues];
value2index = new int[nvalues];
ids = new char*[nvalues];
for (int i = 0; i < nvalues; i++) {
if (strcmp(arg[i],"x") == 0) {
which[i] = X;
argindex[i] = 0;
ids[i] = NULL;
} else if (strcmp(arg[i],"y") == 0) {
which[i] = X;
argindex[i] = 1;
ids[i] = NULL;
} else if (strcmp(arg[i],"z") == 0) {
which[i] = X;
argindex[i] = 2;
ids[i] = NULL;
} else if (strcmp(arg[i],"vx") == 0) {
which[i] = V;
argindex[i] = 0;
ids[i] = NULL;
} else if (strcmp(arg[i],"vy") == 0) {
which[i] = V;
argindex[i] = 1;
ids[i] = NULL;
} else if (strcmp(arg[i],"vz") == 0) {
which[i] = V;
argindex[i] = 2;
ids[i] = NULL;
} else if (strcmp(arg[i],"fx") == 0) {
which[i] = F;
argindex[i] = 0;
ids[i] = NULL;
} else if (strcmp(arg[i],"fy") == 0) {
which[i] = F;
argindex[i] = 1;
ids[i] = NULL;
} else if (strcmp(arg[i],"fz") == 0) {
which[i] = F;
argindex[i] = 2;
ids[i] = NULL;
} else if ((strncmp(arg[i],"c_",2) == 0) ||
(strncmp(arg[i],"f_",2) == 0) ||
(strncmp(arg[i],"v_",2) == 0)) {
if (arg[i][0] == 'c') which[i] = COMPUTE;
else if (arg[i][0] == 'f') which[i] = FIX;
else if (arg[i][0] == 'v') which[i] = VARIABLE;
int n = strlen(arg[i]);
char *suffix = new char[n];
strcpy(suffix,&arg[i][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Illegal fix ave/histo command");
argindex[i] = atoi(ptr+1);
*ptr = '\0';
} else argindex[i] = 0;
n = strlen(suffix) + 1;
ids[i] = new char[n];
strcpy(ids[i],suffix);
delete [] suffix;
}
}
// if wildcard expansion occurred, free earg memory from expand_args()
if (expand) {
for (int i = 0; i < nvalues; i++) delete [] earg[i];
memory->sfree(earg);
}
// setup and error check
// kind = inputs are all global, or all per-atom, or all local
// for fix inputs, check that fix frequency is acceptable
if (nevery <= 0 || nrepeat <= 0 || nfreq <= 0)
error->all(FLERR,"Illegal fix ave/histo command");
if (nfreq % nevery || nrepeat*nevery > nfreq)
error->all(FLERR,"Illegal fix ave/histo command");
if (lo >= hi) error->all(FLERR,"Illegal fix ave/histo command");
if (nbins <= 0) error->all(FLERR,"Illegal fix ave/histo command");
if (ave != RUNNING && overwrite)
error->all(FLERR,"Illegal fix ave/histo command");
int kindflag;
for (int i = 0; i < nvalues; i++) {
if (which[i] == X || which[i] == V || which[i] == F) kindflag = PERATOM;
else if (which[i] == COMPUTE) {
- Compute *compute = modify->compute[modify->find_compute(ids[0])];
+ Compute *compute = modify->compute[modify->find_compute(ids[i])];
if (compute->scalar_flag || compute->vector_flag || compute->array_flag)
kindflag = GLOBAL;
else if (compute->peratom_flag) kindflag = PERATOM;
else if (compute->local_flag) kindflag = LOCAL;
else error->all(FLERR,"Fix ave/histo input is invalid compute");
} else if (which[i] == FIX) {
- Fix *fix = modify->fix[modify->find_fix(ids[0])];
+ Fix *fix = modify->fix[modify->find_fix(ids[i])];
if (fix->scalar_flag || fix->vector_flag || fix->array_flag)
kindflag = GLOBAL;
else if (fix->peratom_flag) kindflag = PERATOM;
else if (fix->local_flag) kindflag = LOCAL;
else error->all(FLERR,"Fix ave/histo input is invalid fix");
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (input->variable->equalstyle(ivariable)) kindflag = GLOBAL;
else if (input->variable->atomstyle(ivariable)) kindflag = PERATOM;
else error->all(FLERR,"Fix ave/histo input is invalid variable");
}
if (i == 0) kind = kindflag;
else if (kindflag != kind)
error->all(FLERR,
"Fix ave/histo inputs are not all global, peratom, or local");
}
if (kind == PERATOM && mode == SCALAR)
error->all(FLERR,
"Fix ave/histo cannot input per-atom values in scalar mode");
if (kind == LOCAL && mode == SCALAR)
error->all(FLERR,"Fix ave/histo cannot input local values in scalar mode");
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE && kind == GLOBAL && mode == SCALAR) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/histo does not exist");
if (argindex[i] == 0 && modify->compute[icompute]->scalar_flag == 0)
error->all(FLERR,
"Fix ave/histo compute does not calculate a global scalar");
if (argindex[i] && modify->compute[icompute]->vector_flag == 0)
error->all(FLERR,
"Fix ave/histo compute does not calculate a global vector");
if (argindex[i] && argindex[i] > modify->compute[icompute]->size_vector)
error->all(FLERR,
"Fix ave/histo compute vector is accessed out-of-range");
} else if (which[i] == COMPUTE && kind == GLOBAL && mode == VECTOR) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/histo does not exist");
if (argindex[i] == 0 && modify->compute[icompute]->vector_flag == 0)
error->all(FLERR,
"Fix ave/histo compute does not calculate a global vector");
if (argindex[i] && modify->compute[icompute]->array_flag == 0)
error->all(FLERR,
"Fix ave/histo compute does not calculate a global array");
if (argindex[i] &&
argindex[i] > modify->compute[icompute]->size_array_cols)
error->all(FLERR,
"Fix ave/histo compute array is accessed out-of-range");
} else if (which[i] == COMPUTE && kind == PERATOM) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/histo does not exist");
if (modify->compute[icompute]->peratom_flag == 0)
error->all(FLERR,
"Fix ave/histo compute does not calculate per-atom values");
if (argindex[i] == 0 &&
modify->compute[icompute]->size_peratom_cols != 0)
error->all(FLERR,"Fix ave/histo compute does not "
"calculate a per-atom vector");
if (argindex[i] && modify->compute[icompute]->size_peratom_cols == 0)
error->all(FLERR,"Fix ave/histo compute does not "
"calculate a per-atom array");
if (argindex[i] &&
argindex[i] > modify->compute[icompute]->size_peratom_cols)
error->all(FLERR,
"Fix ave/histo compute array is accessed out-of-range");
} else if (which[i] == COMPUTE && kind == LOCAL) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/histo does not exist");
if (modify->compute[icompute]->local_flag == 0)
error->all(FLERR,
"Fix ave/histo compute does not calculate local values");
if (argindex[i] == 0 &&
modify->compute[icompute]->size_local_cols != 0)
error->all(FLERR,"Fix ave/histo compute does not "
"calculate a local vector");
if (argindex[i] && modify->compute[icompute]->size_local_cols == 0)
error->all(FLERR,"Fix ave/histo compute does not "
"calculate a local array");
if (argindex[i] &&
argindex[i] > modify->compute[icompute]->size_local_cols)
error->all(FLERR,
"Fix ave/histo compute array is accessed out-of-range");
} else if (which[i] == FIX && kind == GLOBAL && mode == SCALAR) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/histo does not exist");
if (argindex[i] == 0 && modify->fix[ifix]->scalar_flag == 0)
error->all(FLERR,
"Fix ave/histo fix does not calculate a global scalar");
if (argindex[i] && modify->fix[ifix]->vector_flag == 0)
error->all(FLERR,
"Fix ave/histo fix does not calculate a global vector");
if (argindex[i] && argindex[i] > modify->fix[ifix]->size_vector)
error->all(FLERR,"Fix ave/histo fix vector is accessed out-of-range");
if (nevery % modify->fix[ifix]->global_freq)
error->all(FLERR,
"Fix for fix ave/histo not computed at compatible time");
} else if (which[i] == FIX && kind == GLOBAL && mode == VECTOR) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/histo does not exist");
if (argindex[i] == 0 && modify->fix[ifix]->vector_flag == 0)
error->all(FLERR,
"Fix ave/histo fix does not calculate a global vector");
if (argindex[i] && modify->fix[ifix]->array_flag == 0)
error->all(FLERR,"Fix ave/histo fix does not calculate a global array");
if (argindex[i] && argindex[i] > modify->fix[ifix]->size_array_cols)
error->all(FLERR,"Fix ave/histo fix array is accessed out-of-range");
if (nevery % modify->fix[ifix]->global_freq)
error->all(FLERR,
"Fix for fix ave/histo not computed at compatible time");
} else if (which[i] == FIX && kind == PERATOM) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/histo does not exist");
if (modify->fix[ifix]->peratom_flag == 0)
error->all(FLERR,
"Fix ave/histo fix does not calculate per-atom values");
if (argindex[i] == 0 &&
modify->fix[ifix]->size_peratom_cols != 0)
error->all(FLERR,"Fix ave/histo fix does not "
"calculate a per-atom vector");
if (argindex[i] && modify->fix[ifix]->size_peratom_cols == 0)
error->all(FLERR,"Fix ave/histo fix does not "
"calculate a per-atom array");
if (argindex[i] &&
argindex[i] > modify->fix[ifix]->size_peratom_cols)
error->all(FLERR,"Fix ave/histo fix array is accessed out-of-range");
if (nevery % modify->fix[ifix]->global_freq)
error->all(FLERR,
"Fix for fix ave/histo not computed at compatible time");
} else if (which[i] == FIX && kind == LOCAL) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/histo does not exist");
if (modify->fix[ifix]->local_flag == 0)
error->all(FLERR,"Fix ave/histo fix does not calculate local values");
if (argindex[i] == 0 &&
modify->fix[ifix]->size_local_cols != 0)
error->all(FLERR,"Fix ave/histo fix does not "
"calculate a local vector");
if (argindex[i] && modify->fix[ifix]->size_local_cols == 0)
error->all(FLERR,"Fix ave/histo fix does not "
"calculate a local array");
if (argindex[i] &&
argindex[i] > modify->fix[ifix]->size_local_cols)
error->all(FLERR,"Fix ave/histo fix array is accessed out-of-range");
if (nevery % modify->fix[ifix]->global_freq)
error->all(FLERR,
"Fix for fix ave/histo not computed at compatible time");
} else if (which[i] == VARIABLE && kind == GLOBAL && mode == SCALAR) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/histo does not exist");
if (argindex[i] == 0 && input->variable->equalstyle(ivariable) == 0)
error->all(FLERR,"Fix ave/histo variable is not equal-style variable");
if (argindex[i] && input->variable->vectorstyle(ivariable) == 0)
error->all(FLERR,"Fix ave/histo variable is not vector-style variable");
} else if (which[i] == VARIABLE && kind == GLOBAL && mode == VECTOR) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/histo does not exist");
if (argindex[i] == 0 && input->variable->vectorstyle(ivariable) == 0)
error->all(FLERR,"Fix ave/histo variable is not vector-style variable");
if (argindex[i])
error->all(FLERR,"Fix ave/histo variable cannot be indexed");
} else if (which[i] == VARIABLE && kind == PERATOM) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/histo does not exist");
if (argindex[i] == 0 && input->variable->atomstyle(ivariable) == 0)
error->all(FLERR,"Fix ave/histo variable is not atom-style variable");
if (argindex[i])
error->all(FLERR,"Fix ave/histo variable cannot be indexed");
}
}
// print file comment lines
if (fp && me == 0) {
clearerr(fp);
if (title1) fprintf(fp,"%s\n",title1);
else fprintf(fp,"# Histogrammed data for fix %s\n",id);
if (title2) fprintf(fp,"%s\n",title2);
else fprintf(fp,"# TimeStep Number-of-bins "
"Total-counts Missing-counts Min-value Max-value\n");
if (title3) fprintf(fp,"%s\n",title3);
else fprintf(fp,"# Bin Coord Count Count/Total\n");
if (ferror(fp))
error->one(FLERR,"Error writing file header");
filepos = ftell(fp);
}
delete [] title1;
delete [] title2;
delete [] title3;
// allocate and initialize memory for averaging
if (beyond == EXTRA) nbins += 2;
size_array_rows = nbins;
bin = new double[nbins];
bin_total = new double[nbins];
bin_all = new double[nbins];
coord = new double[nbins];
stats_list = NULL;
bin_list = NULL;
vector = NULL;
maxatom = 0;
if (ave == WINDOW) {
memory->create(stats_list,nwindow,4,"ave/histo:stats_list");
memory->create(bin_list,nwindow,nbins,"ave/histo:bin_list");
}
// initializations
// set coord to bin centers
if (beyond == EXTRA) {
binsize = (hi-lo)/(nbins-2);
bininv = 1.0/binsize;
} else {
binsize = (hi-lo)/nbins;
bininv = 1.0/binsize;
}
if (beyond == EXTRA) {
coord[0] = lo;
coord[nbins-1] = hi;
for (int i = 1; i < nbins-1; i++)
coord[i] = lo + (i-1+0.5)*binsize;
} else {
for (int i = 0; i < nbins; i++)
coord[i] = lo + (i+0.5)*binsize;
}
irepeat = 0;
iwindow = window_limit = 0;
stats_total[0] = stats_total[1] = stats_total[2] = stats_total[3] = 0.0;
for (int i = 0; i < nbins; i++) bin_total[i] = 0.0;
// nvalid = next step on which end_of_step does something
// add nvalid to all computes that store invocation times
// since don't know a priori which are invoked by this fix
// once in end_of_step() can set timestep for ones actually invoked
nvalid_last = -1;
nvalid = nextvalid();
modify->addstep_compute_all(nvalid);
}
/* ---------------------------------------------------------------------- */
FixAveHisto::~FixAveHisto()
{
delete [] which;
delete [] argindex;
delete [] value2index;
for (int i = 0; i < nvalues; i++) delete [] ids[i];
delete [] ids;
if (fp && me == 0) fclose(fp);
delete [] bin;
delete [] bin_total;
delete [] bin_all;
delete [] coord;
memory->destroy(stats_list);
memory->destroy(bin_list);
memory->destroy(vector);
}
/* ---------------------------------------------------------------------- */
int FixAveHisto::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixAveHisto::init()
{
// set current indices for all computes,fixes,variables
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/histo does not exist");
value2index[i] = icompute;
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/histo does not exist");
value2index[i] = ifix;
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/histo does not exist");
value2index[i] = ivariable;
}
}
// need to reset nvalid if nvalid < ntimestep b/c minimize was performed
if (nvalid < update->ntimestep) {
irepeat = 0;
nvalid = nextvalid();
modify->addstep_compute_all(nvalid);
}
}
/* ----------------------------------------------------------------------
only does something if nvalid = current timestep
------------------------------------------------------------------------- */
void FixAveHisto::setup(int vflag)
{
end_of_step();
}
/* ---------------------------------------------------------------------- */
void FixAveHisto::end_of_step()
{
int i,j,m;
// skip if not step which requires doing something
// error check if timestep was reset in an invalid manner
bigint ntimestep = update->ntimestep;
if (ntimestep < nvalid_last || ntimestep > nvalid)
error->all(FLERR,"Invalid timestep reset for fix ave/histo");
if (ntimestep != nvalid) return;
nvalid_last = nvalid;
// zero if first step
if (irepeat == 0) {
stats[0] = stats[1] = 0.0;
stats[2] = BIG;
stats[3] = -BIG;
for (i = 0; i < nbins; i++) bin[i] = 0.0;
}
// accumulate results of computes,fixes,variables to local copy
// compute/fix/variable may invoke computes so wrap with clear/add
modify->clearstep_compute();
for (i = 0; i < nvalues; i++) {
m = value2index[i];
j = argindex[i];
// atom attributes
if (which[i] == X)
bin_atoms(&atom->x[0][j],3);
else if (which[i] == V)
bin_atoms(&atom->v[0][j],3);
else if (which[i] == F)
bin_atoms(&atom->f[0][j],3);
// invoke compute if not previously invoked
if (which[i] == COMPUTE) {
Compute *compute = modify->compute[m];
if (kind == GLOBAL && mode == SCALAR) {
if (j == 0) {
if (!(compute->invoked_flag & INVOKED_SCALAR)) {
compute->compute_scalar();
compute->invoked_flag |= INVOKED_SCALAR;
}
bin_one(compute->scalar);
} else {
if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
bin_one(compute->vector[j-1]);
}
} else if (kind == GLOBAL && mode == VECTOR) {
if (j == 0) {
if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
bin_vector(compute->size_vector,compute->vector,1);
} else {
if (!(compute->invoked_flag & INVOKED_ARRAY)) {
compute->compute_array();
compute->invoked_flag |= INVOKED_ARRAY;
}
if (compute->array)
bin_vector(compute->size_array_rows,&compute->array[0][j-1],
compute->size_array_cols);
}
} else if (kind == PERATOM) {
if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
if (j == 0)
bin_atoms(compute->vector_atom,1);
else if (compute->array_atom)
bin_atoms(&compute->array_atom[0][j-1],compute->size_peratom_cols);
} else if (kind == LOCAL) {
if (!(compute->invoked_flag & INVOKED_LOCAL)) {
compute->compute_local();
compute->invoked_flag |= INVOKED_LOCAL;
}
if (j == 0)
bin_vector(compute->size_local_rows,compute->vector_local,1);
else if (compute->array_local)
bin_vector(compute->size_local_rows,&compute->array_local[0][j-1],
compute->size_local_cols);
}
// access fix fields, guaranteed to be ready
} else if (which[i] == FIX) {
Fix *fix = modify->fix[m];
if (kind == GLOBAL && mode == SCALAR) {
if (j == 0) bin_one(fix->compute_scalar());
else bin_one(fix->compute_vector(j-1));
} else if (kind == GLOBAL && mode == VECTOR) {
if (j == 0) {
int n = fix->size_vector;
for (i = 0; i < n; i++) bin_one(fix->compute_vector(i));
} else {
int n = fix->size_vector;
for (i = 0; i < n; i++) bin_one(fix->compute_array(i,j-1));
}
} else if (kind == PERATOM) {
if (j == 0) bin_atoms(fix->vector_atom,1);
else if (fix->array_atom)
bin_atoms(fix->array_atom[j-1],fix->size_peratom_cols);
} else if (kind == LOCAL) {
if (j == 0) bin_vector(fix->size_local_rows,fix->vector_local,1);
else if (fix->array_local)
bin_vector(fix->size_local_rows,&fix->array_local[0][j-1],
fix->size_local_cols);
}
// evaluate equal-style or vector-style or atom-style variable
} else if (which[i] == VARIABLE) {
if (kind == GLOBAL && mode == SCALAR) {
if (j == 0) bin_one(input->variable->compute_equal(m));
else {
double *varvec;
int nvec = input->variable->compute_vector(m,&varvec);
if (nvec < j) bin_one(0.0);
else bin_one(varvec[j-1]);
}
} else if (kind == GLOBAL && mode == VECTOR) {
double *varvec;
int nvec = input->variable->compute_vector(m,&varvec);
bin_vector(nvec,varvec,1);
} else if (which[i] == VARIABLE && kind == PERATOM) {
if (atom->nmax > maxatom) {
memory->destroy(vector);
maxatom = atom->nmax;
memory->create(vector,maxatom,"ave/histo:vector");
}
input->variable->compute_atom(m,igroup,vector,1,0);
bin_atoms(vector,1);
}
}
}
// done if irepeat < nrepeat
// else reset irepeat and nvalid
irepeat++;
if (irepeat < nrepeat) {
nvalid += nevery;
modify->addstep_compute(nvalid);
return;
}
irepeat = 0;
nvalid = ntimestep + nfreq - (nrepeat-1)*nevery;
modify->addstep_compute(nvalid);
// merge histogram stats across procs if necessary
if (kind == PERATOM || kind == LOCAL) {
MPI_Allreduce(stats,stats_all,2,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&stats[2],&stats_all[2],1,MPI_DOUBLE,MPI_MIN,world);
MPI_Allreduce(&stats[3],&stats_all[3],1,MPI_DOUBLE,MPI_MAX,world);
MPI_Allreduce(bin,bin_all,nbins,MPI_DOUBLE,MPI_SUM,world);
stats[0] = stats_all[0];
stats[1] = stats_all[1];
stats[2] = stats_all[2];
stats[3] = stats_all[3];
for (i = 0; i < nbins; i++) bin[i] = bin_all[i];
}
// if ave = ONE, only single Nfreq timestep value is needed
// if ave = RUNNING, combine with all previous Nfreq timestep values
// if ave = WINDOW, combine with nwindow most recent Nfreq timestep values
if (ave == ONE) {
stats_total[0] = stats[0];
stats_total[1] = stats[1];
stats_total[2] = stats[2];
stats_total[3] = stats[3];
for (i = 0; i < nbins; i++) bin_total[i] = bin[i];
} else if (ave == RUNNING) {
stats_total[0] += stats[0];
stats_total[1] += stats[1];
stats_total[2] = MIN(stats_total[2],stats[2]);
stats_total[3] = MAX(stats_total[3],stats[3]);
for (i = 0; i < nbins; i++) bin_total[i] += bin[i];
} else if (ave == WINDOW) {
stats_total[0] += stats[0];
if (window_limit) stats_total[0] -= stats_list[iwindow][0];
stats_list[iwindow][0] = stats[0];
stats_total[1] += stats[1];
if (window_limit) stats_total[1] -= stats_list[iwindow][1];
stats_list[iwindow][1] = stats[1];
if (window_limit) m = nwindow;
else m = iwindow+1;
stats_list[iwindow][2] = stats[2];
stats_total[2] = stats_list[0][2];
for (i = 1; i < m; i++)
stats_total[2] = MIN(stats_total[2],stats_list[i][2]);
stats_list[iwindow][3] = stats[3];
stats_total[3] = stats_list[0][3];
for (i = 1; i < m; i++)
stats_total[3] = MAX(stats_total[3],stats_list[i][3]);
for (i = 0; i < nbins; i++) {
bin_total[i] += bin[i];
if (window_limit) bin_total[i] -= bin_list[iwindow][i];
bin_list[iwindow][i] = bin[i];
}
iwindow++;
if (iwindow == nwindow) {
iwindow = 0;
window_limit = 1;
}
}
// output result to file
if (fp && me == 0) {
clearerr(fp);
if (overwrite) fseek(fp,filepos,SEEK_SET);
fprintf(fp,BIGINT_FORMAT " %d %g %g %g %g\n",ntimestep,nbins,
stats_total[0],stats_total[1],stats_total[2],stats_total[3]);
if (stats_total[0] != 0.0)
for (i = 0; i < nbins; i++)
fprintf(fp,"%d %g %g %g\n",
i+1,coord[i],bin_total[i],bin_total[i]/stats_total[0]);
else
for (i = 0; i < nbins; i++)
fprintf(fp,"%d %g %g %g\n",i+1,coord[i],0.0,0.0);
if (ferror(fp))
error->one(FLERR,"Error writing out histogram data");
fflush(fp);
if (overwrite) {
long fileend = ftell(fp);
if (fileend > 0) ftruncate(fileno(fp),fileend);
}
}
}
/* ----------------------------------------------------------------------
return Ith vector value
------------------------------------------------------------------------- */
double FixAveHisto::compute_vector(int i)
{
return stats_total[i];
}
/* ----------------------------------------------------------------------
return I,J array value
------------------------------------------------------------------------- */
double FixAveHisto::compute_array(int i, int j)
{
if (j == 0) return coord[i];
else if (j == 1) return bin_total[i];
else if (stats_total[0] != 0.0) return bin_total[i]/stats_total[0];
return 0.0;
}
/* ----------------------------------------------------------------------
bin a single value
------------------------------------------------------------------------- */
void FixAveHisto::bin_one(double value)
{
stats[2] = MIN(stats[2],value);
stats[3] = MAX(stats[3],value);
if (value < lo) {
if (beyond == IGNORE) {
stats[1] += 1.0;
return;
} else bin[0] += 1.0;
} else if (value > hi) {
if (beyond == IGNORE) {
stats[1] += 1.0;
return;
} else bin[nbins-1] += 1.0;
} else {
int ibin = static_cast<int> ((value-lo)*bininv);
ibin = MIN(ibin,nbins-1);
if (beyond == EXTRA) ibin++;
bin[ibin] += 1.0;
}
stats[0] += 1.0;
}
/* ----------------------------------------------------------------------
bin a vector of values with stride
------------------------------------------------------------------------- */
void FixAveHisto::bin_vector(int n, double *values, int stride)
{
int m = 0;
for (int i = 0; i < n; i++) {
bin_one(values[m]);
m += stride;
}
}
/* ----------------------------------------------------------------------
bin a per-atom vector of values with stride
only bin if atom is in group
------------------------------------------------------------------------- */
void FixAveHisto::bin_atoms(double *values, int stride)
{
int *mask = atom->mask;
int nlocal = atom->nlocal;
int m = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) bin_one(values[m]);
m += stride;
}
}
/* ----------------------------------------------------------------------
parse optional args
------------------------------------------------------------------------- */
void FixAveHisto::options(int iarg, int narg, char **arg)
{
// option defaults
fp = NULL;
ave = ONE;
startstep = 0;
mode = SCALAR;
beyond = IGNORE;
overwrite = 0;
title1 = NULL;
title2 = NULL;
title3 = NULL;
// optional args
while (iarg < narg) {
if (strcmp(arg[iarg],"file") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command");
if (me == 0) {
fp = fopen(arg[iarg+1],"w");
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open fix ave/histo file %s",arg[iarg+1]);
error->one(FLERR,str);
}
}
iarg += 2;
} else if (strcmp(arg[iarg],"ave") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command");
if (strcmp(arg[iarg+1],"one") == 0) ave = ONE;
else if (strcmp(arg[iarg+1],"running") == 0) ave = RUNNING;
else if (strcmp(arg[iarg+1],"window") == 0) ave = WINDOW;
else error->all(FLERR,"Illegal fix ave/histo command");
if (ave == WINDOW) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix ave/histo command");
nwindow = force->inumeric(FLERR,arg[iarg+2]);
if (nwindow <= 0) error->all(FLERR,"Illegal fix ave/histo command");
}
iarg += 2;
if (ave == WINDOW) iarg++;
} else if (strcmp(arg[iarg],"start") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command");
startstep = force->inumeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"mode") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command");
if (strcmp(arg[iarg+1],"scalar") == 0) mode = SCALAR;
else if (strcmp(arg[iarg+1],"vector") == 0) mode = VECTOR;
else error->all(FLERR,"Illegal fix ave/histo command");
iarg += 2;
} else if (strcmp(arg[iarg],"beyond") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command");
if (strcmp(arg[iarg+1],"ignore") == 0) beyond = IGNORE;
else if (strcmp(arg[iarg+1],"end") == 0) beyond = END;
else if (strcmp(arg[iarg+1],"extra") == 0) beyond = EXTRA;
else error->all(FLERR,"Illegal fix ave/histo command");
iarg += 2;
} else if (strcmp(arg[iarg],"overwrite") == 0) {
overwrite = 1;
iarg += 1;
} else if (strcmp(arg[iarg],"title1") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command");
delete [] title1;
int n = strlen(arg[iarg+1]) + 1;
title1 = new char[n];
strcpy(title1,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"title2") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command");
delete [] title2;
int n = strlen(arg[iarg+1]) + 1;
title2 = new char[n];
strcpy(title2,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"title3") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command");
delete [] title3;
int n = strlen(arg[iarg+1]) + 1;
title3 = new char[n];
strcpy(title3,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix ave/histo command");
}
}
/* ----------------------------------------------------------------------
calculate nvalid = next step on which end_of_step does something
can be this timestep if multiple of nfreq and nrepeat = 1
else backup from next multiple of nfreq
startstep is lower bound on nfreq multiple
------------------------------------------------------------------------- */
bigint FixAveHisto::nextvalid()
{
bigint nvalid = (update->ntimestep/nfreq)*nfreq + nfreq;
while (nvalid < startstep) nvalid += nfreq;
if (nvalid-nfreq == update->ntimestep && nrepeat == 1)
nvalid = update->ntimestep;
else
nvalid -= (nrepeat-1)*nevery;
if (nvalid < update->ntimestep) nvalid += nfreq;
return nvalid;
}
diff --git a/src/fix_ave_time.cpp b/src/fix_ave_time.cpp
index 430c6069b..ff47af03a 100644
--- a/src/fix_ave_time.cpp
+++ b/src/fix_ave_time.cpp
@@ -1,1147 +1,1150 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Pieter in 't Veld (SNL)
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "fix_ave_time.h"
#include "update.h"
#include "force.h"
#include "modify.h"
#include "compute.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{COMPUTE,FIX,VARIABLE};
enum{ONE,RUNNING,WINDOW};
enum{SCALAR,VECTOR};
#define INVOKED_SCALAR 1
#define INVOKED_VECTOR 2
#define INVOKED_ARRAY 4
/* ---------------------------------------------------------------------- */
FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ nvalues(0), which(NULL), argindex(NULL), value2index(NULL), offcol(NULL), varlen(NULL), ids(NULL),
+ fp(NULL), offlist(NULL), format(NULL), format_user(NULL), vector(NULL), vector_total(NULL), vector_list(NULL),
+ column(NULL), array(NULL), array_total(NULL), array_list(NULL)
{
if (narg < 7) error->all(FLERR,"Illegal fix ave/time command");
MPI_Comm_rank(world,&me);
nevery = force->inumeric(FLERR,arg[3]);
nrepeat = force->inumeric(FLERR,arg[4]);
nfreq = force->inumeric(FLERR,arg[5]);
global_freq = nfreq;
dynamic_group_allow = 1;
// scan values to count them
// then read options so know mode = SCALAR/VECTOR before re-reading values
nvalues = 0;
int iarg = 6;
while (iarg < narg) {
if ((strncmp(arg[iarg],"c_",2) == 0) ||
(strncmp(arg[iarg],"f_",2) == 0) ||
(strncmp(arg[iarg],"v_",2) == 0)) {
nvalues++;
iarg++;
} else break;
}
if (nvalues == 0) error->all(FLERR,"No values in fix ave/time command");
options(iarg,narg,arg);
// expand args if any have wildcard character "*"
// this can reset nvalues
int expand = 0;
char **earg;
nvalues = input->expand_args(nvalues,&arg[6],mode,earg);
if (earg != &arg[6]) expand = 1;
arg = earg;
// parse values
which = new int[nvalues];
argindex = new int[nvalues];
value2index = new int[nvalues];
offcol = new int[nvalues];
varlen = new int[nvalues];
ids = new char*[nvalues];
for (int i = 0; i < nvalues; i++) {
if (arg[i][0] == 'c') which[i] = COMPUTE;
else if (arg[i][0] == 'f') which[i] = FIX;
else if (arg[i][0] == 'v') which[i] = VARIABLE;
int n = strlen(arg[i]);
char *suffix = new char[n];
strcpy(suffix,&arg[i][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Illegal fix ave/time command");
argindex[i] = atoi(ptr+1);
*ptr = '\0';
} else argindex[i] = 0;
n = strlen(suffix) + 1;
ids[i] = new char[n];
strcpy(ids[i],suffix);
delete [] suffix;
}
// set off columns now that nvalues is finalized
for (int i = 0; i < nvalues; i++) offcol[i] = 0;
for (int i = 0; i < noff; i++) {
if (offlist[i] < 1 || offlist[i] > nvalues)
error->all(FLERR,"Invalid fix ave/time off column");
offcol[offlist[i]-1] = 1;
}
// setup and error check
// for fix inputs, check that fix frequency is acceptable
// set variable_length if any compute is variable length
if (nevery <= 0 || nrepeat <= 0 || nfreq <= 0)
error->all(FLERR,"Illegal fix ave/time command");
if (nfreq % nevery || nrepeat*nevery > nfreq)
error->all(FLERR,"Illegal fix ave/time command");
if (ave != RUNNING && overwrite)
error->all(FLERR,"Illegal fix ave/time command");
for (int i = 0; i < nvalues; i++) {
varlen[i] = 0;
if (which[i] == COMPUTE && mode == SCALAR) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/time does not exist");
if (argindex[i] == 0 && modify->compute[icompute]->scalar_flag == 0)
error->all(FLERR,"Fix ave/time compute does not calculate a scalar");
if (argindex[i] && modify->compute[icompute]->vector_flag == 0)
error->all(FLERR,"Fix ave/time compute does not calculate a vector");
if (argindex[i] && argindex[i] > modify->compute[icompute]->size_vector &&
modify->compute[icompute]->size_vector_variable == 0)
error->all(FLERR,
"Fix ave/time compute vector is accessed out-of-range");
if (argindex[i] && modify->compute[icompute]->size_vector_variable)
varlen[i] = 1;
} else if (which[i] == COMPUTE && mode == VECTOR) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/time does not exist");
if (argindex[i] == 0 && modify->compute[icompute]->vector_flag == 0)
error->all(FLERR,"Fix ave/time compute does not calculate a vector");
if (argindex[i] && modify->compute[icompute]->array_flag == 0)
error->all(FLERR,"Fix ave/time compute does not calculate an array");
if (argindex[i] &&
argindex[i] > modify->compute[icompute]->size_array_cols)
error->all(FLERR,"Fix ave/time compute array is accessed out-of-range");
if (argindex[i] == 0 && modify->compute[icompute]->size_vector_variable)
varlen[i] = 1;
if (argindex[i] && modify->compute[icompute]->size_array_rows_variable)
varlen[i] = 1;
} else if (which[i] == FIX && mode == SCALAR) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/time does not exist");
if (argindex[i] == 0 && modify->fix[ifix]->scalar_flag == 0)
error->all(FLERR,"Fix ave/time fix does not calculate a scalar");
if (argindex[i] && modify->fix[ifix]->vector_flag == 0)
error->all(FLERR,"Fix ave/time fix does not calculate a vector");
if (argindex[i] && modify->fix[ifix]->size_vector_variable)
error->all(FLERR,"Fix ave/time fix vector cannot be variable length");
if (argindex[i] && argindex[i] > modify->fix[ifix]->size_vector)
error->all(FLERR,"Fix ave/time fix vector is accessed out-of-range");
if (nevery % modify->fix[ifix]->global_freq)
error->all(FLERR,
"Fix for fix ave/time not computed at compatible time");
} else if (which[i] == FIX && mode == VECTOR) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/time does not exist");
if (argindex[i] == 0 && modify->fix[ifix]->vector_flag == 0)
error->all(FLERR,"Fix ave/time fix does not calculate a vector");
if (argindex[i] && modify->fix[ifix]->array_flag == 0)
error->all(FLERR,"Fix ave/time fix does not calculate an array");
if (argindex[i] && modify->fix[ifix]->size_array_rows_variable)
error->all(FLERR,"Fix ave/time fix array cannot be variable length");
if (argindex[i] && argindex[i] > modify->fix[ifix]->size_array_cols)
error->all(FLERR,"Fix ave/time fix array is accessed out-of-range");
if (nevery % modify->fix[ifix]->global_freq)
error->all(FLERR,
"Fix for fix ave/time not computed at compatible time");
} else if (which[i] == VARIABLE && mode == SCALAR) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/time does not exist");
if (argindex[i] == 0 && input->variable->equalstyle(ivariable) == 0)
error->all(FLERR,"Fix ave/time variable is not equal-style variable");
if (argindex[i] && input->variable->vectorstyle(ivariable) == 0)
error->all(FLERR,"Fix ave/time variable is not vector-style variable");
} else if (which[i] == VARIABLE && mode == VECTOR) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/time does not exist");
if (argindex[i] == 0 && input->variable->vectorstyle(ivariable) == 0)
error->all(FLERR,"Fix ave/time variable is not vector-style variable");
if (argindex[i])
error->all(FLERR,"Fix ave/time mode vector variable cannot be indexed");
varlen[i] = 1;
}
}
// all_variable_length = 1 if all values are variable length
// any_variable_length = 1 if any values are variable length
all_variable_length = 1;
any_variable_length = 0;
for (int i = 0; i < nvalues; i++) {
if (varlen[i] == 0) all_variable_length = 0;
if (varlen[i]) any_variable_length = 1;
}
// if VECTOR mode, check that all columns are same length
// nrows = # of rows in output array
// if all columns are variable length, just set nrows = 1 for now
column = NULL;
if (mode == VECTOR) {
if (all_variable_length == 0) nrows = column_length(0);
else nrows = 1;
memory->create(column,nrows,"ave/time:column");
}
// enable locking of row count by this fix for computes of variable length
// only if nrepeat > 1 or ave = RUNNING/WINDOW,
// so that locking spans multiple timesteps
if (any_variable_length &&
(nrepeat > 1 || ave == RUNNING || ave == WINDOW)) {
for (int i = 0; i < nvalues; i++)
if (varlen[i] && which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
modify->compute[icompute]->lock_enable();
}
lockforever = 0;
}
// print file comment lines
// for mode = VECTOR, cannot use arg to print
// since array args may have been expanded to multiple vectors
if (fp && me == 0) {
clearerr(fp);
if (title1) fprintf(fp,"%s\n",title1);
else fprintf(fp,"# Time-averaged data for fix %s\n",id);
if (title2) fprintf(fp,"%s\n",title2);
else if (mode == SCALAR) {
fprintf(fp,"# TimeStep");
for (int i = 0; i < nvalues; i++) fprintf(fp," %s",earg[i]);
fprintf(fp,"\n");
} else fprintf(fp,"# TimeStep Number-of-rows\n");
if (title3 && mode == VECTOR) fprintf(fp,"%s\n",title3);
else if (mode == VECTOR) {
fprintf(fp,"# Row");
for (int i = 0; i < nvalues; i++) fprintf(fp," %s",earg[i]);
fprintf(fp,"\n");
}
if (ferror(fp))
error->one(FLERR,"Error writing file header");
filepos = ftell(fp);
}
delete [] title1;
delete [] title2;
delete [] title3;
// if wildcard expansion occurred, free earg memory from expand_args()
// wait to do this until after file comment lines are printed
if (expand) {
for (int i = 0; i < nvalues; i++) delete [] earg[i];
memory->sfree(earg);
}
// allocate memory for averaging
vector = vector_total = NULL;
vector_list = NULL;
array = array_total = NULL;
array_list = NULL;
if (mode == SCALAR) {
vector = new double[nvalues];
vector_total = new double[nvalues];
if (ave == WINDOW)
memory->create(vector_list,nwindow,nvalues,"ave/time:vector_list");
} else allocate_arrays();
// this fix produces either a global scalar or vector or array
// SCALAR mode produces either a scalar or vector
// VECTOR mode produces either a vector or array
// intensive/extensive flags set by compute,fix,variable that produces value
extlist = NULL;
if (mode == SCALAR) {
if (nvalues == 1) {
scalar_flag = 1;
if (which[0] == COMPUTE) {
Compute *compute = modify->compute[modify->find_compute(ids[0])];
if (argindex[0] == 0) extscalar = compute->extscalar;
else if (compute->extvector >= 0) extscalar = compute->extvector;
else extscalar = compute->extlist[argindex[0]-1];
} else if (which[0] == FIX) {
Fix *fix = modify->fix[modify->find_fix(ids[0])];
if (argindex[0] == 0) extscalar = fix->extscalar;
else if (fix->extvector >= 0) extscalar = fix->extvector;
else extscalar = fix->extlist[argindex[0]-1];
} else if (which[0] == VARIABLE) {
extscalar = 0;
}
} else {
vector_flag = 1;
size_vector = nrows = nvalues;
extvector = -1;
extlist = new int[nvalues];
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
Compute *compute = modify->compute[modify->find_compute(ids[i])];
if (argindex[i] == 0) extlist[i] = compute->extscalar;
else if (compute->extvector >= 0) extlist[i] = compute->extvector;
else extlist[i] = compute->extlist[argindex[i]-1];
} else if (which[i] == FIX) {
Fix *fix = modify->fix[modify->find_fix(ids[i])];
if (argindex[i] == 0) extlist[i] = fix->extscalar;
else if (fix->extvector >= 0) extlist[i] = fix->extvector;
else extlist[i] = fix->extlist[argindex[i]-1];
} else if (which[i] == VARIABLE) {
extlist[i] = 0;
}
}
}
} else {
if (nvalues == 1) {
vector_flag = 1;
size_vector = nrows;
if (all_variable_length) size_vector_variable = 1;
if (which[0] == COMPUTE) {
Compute *compute = modify->compute[modify->find_compute(ids[0])];
if (argindex[0] == 0) {
extvector = compute->extvector;
if (extvector == -1) {
extlist = new int[nrows];
for (int i = 0; i < nrows; i++) extlist[i] = compute->extlist[i];
}
} else extvector = compute->extarray;
} else if (which[0] == FIX) {
Fix *fix = modify->fix[modify->find_fix(ids[0])];
if (argindex[0] == 0) {
extvector = fix->extvector;
if (extvector == -1) {
extlist = new int[nrows];
for (int i = 0; i < nrows; i++) extlist[i] = fix->extlist[i];
}
} else extvector = fix->extarray;
} else if (which[0] == VARIABLE) {
extlist = new int[nrows];
for (int i = 0; i < nrows; i++) extlist[i] = 0;
}
} else {
array_flag = 1;
size_array_rows = nrows;
size_array_cols = nvalues;
if (all_variable_length) size_array_rows_variable = 1;
int value;
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
Compute *compute = modify->compute[modify->find_compute(ids[i])];
if (argindex[i] == 0) value = compute->extvector;
else value = compute->extarray;
} else if (which[i] == FIX) {
Fix *fix = modify->fix[modify->find_fix(ids[i])];
if (argindex[i] == 0) value = fix->extvector;
else value = fix->extarray;
} else if (which[i] == VARIABLE) {
value = 0;
}
if (value == -1)
error->all(FLERR,"Fix ave/time cannot set output array "
"intensive/extensive from these inputs");
if (i == 0) extarray = value;
else if (value != extarray)
error->all(FLERR,"Fix ave/time cannot set output array "
"intensive/extensive from these inputs");
}
}
}
// initializations
// set vector_total to zero since it accumulates
// array_total already zeroed in allocate_arrays
irepeat = 0;
iwindow = window_limit = 0;
norm = 0;
if (mode == SCALAR)
for (int i = 0; i < nvalues; i++) vector_total[i] = 0.0;
// nvalid = next step on which end_of_step does something
// add nvalid to all computes that store invocation times
// since don't know a priori which are invoked by this fix
// once in end_of_step() can set timestep for ones actually invoked
nvalid_last = -1;
nvalid = nextvalid();
modify->addstep_compute_all(nvalid);
}
/* ---------------------------------------------------------------------- */
FixAveTime::~FixAveTime()
{
// decrement lock counter in compute chunk/atom, it if still exists
if (any_variable_length &&
(nrepeat > 1 || ave == RUNNING || ave == WINDOW)) {
for (int i = 0; i < nvalues; i++)
if (varlen[i]) {
int icompute = modify->find_compute(ids[i]);
if (icompute >= 0) {
if (ave == RUNNING || ave == WINDOW)
modify->compute[icompute]->unlock(this);
modify->compute[icompute]->lock_disable();
}
}
}
delete [] format_user;
delete [] which;
delete [] argindex;
delete [] value2index;
delete [] offcol;
delete [] varlen;
for (int i = 0; i < nvalues; i++) delete [] ids[i];
delete [] ids;
delete [] extlist;
if (fp && me == 0) fclose(fp);
memory->destroy(column);
delete [] vector;
delete [] vector_total;
memory->destroy(array);
memory->destroy(array_total);
memory->destroy(array_list);
}
/* ---------------------------------------------------------------------- */
int FixAveTime::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixAveTime::init()
{
// set current indices for all computes,fixes,variables
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/time does not exist");
value2index[i] = icompute;
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/time does not exist");
value2index[i] = ifix;
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/time does not exist");
value2index[i] = ivariable;
}
}
// need to reset nvalid if nvalid < ntimestep b/c minimize was performed
if (nvalid < update->ntimestep) {
irepeat = 0;
nvalid = nextvalid();
modify->addstep_compute_all(nvalid);
}
}
/* ----------------------------------------------------------------------
only does something if nvalid = current timestep
------------------------------------------------------------------------- */
void FixAveTime::setup(int vflag)
{
end_of_step();
}
/* ---------------------------------------------------------------------- */
void FixAveTime::end_of_step()
{
// skip if not step which requires doing something
// error check if timestep was reset in an invalid manner
bigint ntimestep = update->ntimestep;
if (ntimestep < nvalid_last || ntimestep > nvalid)
error->all(FLERR,"Invalid timestep reset for fix ave/time");
if (ntimestep != nvalid) return;
nvalid_last = nvalid;
if (mode == SCALAR) invoke_scalar(ntimestep);
else invoke_vector(ntimestep);
}
/* ---------------------------------------------------------------------- */
void FixAveTime::invoke_scalar(bigint ntimestep)
{
int i,m;
double scalar;
// zero if first sample within single Nfreq epoch
// if any input is variable length, initialize current length
// check for exceeding length is done below
if (irepeat == 0) {
if (any_variable_length) {
modify->clearstep_compute();
column_length(1);
modify->addstep_compute(ntimestep+nevery);
modify->addstep_compute(ntimestep+nfreq);
}
for (i = 0; i < nvalues; i++) vector[i] = 0.0;
}
// accumulate results of computes,fixes,variables to local copy
// compute/fix/variable may invoke computes so wrap with clear/add
modify->clearstep_compute();
for (i = 0; i < nvalues; i++) {
m = value2index[i];
// invoke compute if not previously invoked
// insure no out-of-range access to variable-length compute vector
if (which[i] == COMPUTE) {
Compute *compute = modify->compute[m];
if (argindex[i] == 0) {
if (!(compute->invoked_flag & INVOKED_SCALAR)) {
compute->compute_scalar();
compute->invoked_flag |= INVOKED_SCALAR;
}
scalar = compute->scalar;
} else {
if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
if (varlen[i] && compute->size_vector < argindex[i]) scalar = 0.0;
else scalar = compute->vector[argindex[i]-1];
}
// access fix fields, guaranteed to be ready
} else if (which[i] == FIX) {
if (argindex[i] == 0)
scalar = modify->fix[m]->compute_scalar();
else
scalar = modify->fix[m]->compute_vector(argindex[i]-1);
// evaluate equal-style or vector-style variable
// insure no out-of-range access to vector-style variable
} else if (which[i] == VARIABLE) {
if (argindex[i] == 0)
scalar = input->variable->compute_equal(m);
else {
double *varvec;
int nvec = input->variable->compute_vector(m,&varvec);
if (nvec < argindex[i]) scalar = 0.0;
else scalar = varvec[argindex[i]-1];
}
}
// add value to vector or just set directly if offcol is set
if (offcol[i]) vector[i] = scalar;
else vector[i] += scalar;
}
// done if irepeat < nrepeat
// else reset irepeat and nvalid
irepeat++;
if (irepeat < nrepeat) {
nvalid += nevery;
modify->addstep_compute(nvalid);
return;
}
irepeat = 0;
nvalid = ntimestep + nfreq - (nrepeat-1)*nevery;
modify->addstep_compute(nvalid);
// average the final result for the Nfreq timestep
double repeat = nrepeat;
for (i = 0; i < nvalues; i++)
if (offcol[i] == 0) vector[i] /= repeat;
// if ave = ONE, only single Nfreq timestep value is needed
// if ave = RUNNING, combine with all previous Nfreq timestep values
// if ave = WINDOW, combine with nwindow most recent Nfreq timestep values
if (ave == ONE) {
for (i = 0; i < nvalues; i++) vector_total[i] = vector[i];
norm = 1;
} else if (ave == RUNNING) {
for (i = 0; i < nvalues; i++) vector_total[i] += vector[i];
norm++;
} else if (ave == WINDOW) {
for (i = 0; i < nvalues; i++) {
vector_total[i] += vector[i];
if (window_limit) vector_total[i] -= vector_list[iwindow][i];
vector_list[iwindow][i] = vector[i];
}
iwindow++;
if (iwindow == nwindow) {
iwindow = 0;
window_limit = 1;
}
if (window_limit) norm = nwindow;
else norm = iwindow;
}
// insure any columns with offcol set are effectively set to last value
for (i = 0; i < nvalues; i++)
if (offcol[i]) vector_total[i] = norm*vector[i];
// output result to file
if (fp && me == 0) {
clearerr(fp);
if (overwrite) fseek(fp,filepos,SEEK_SET);
fprintf(fp,BIGINT_FORMAT,ntimestep);
for (i = 0; i < nvalues; i++) fprintf(fp,format,vector_total[i]/norm);
fprintf(fp,"\n");
if (ferror(fp))
error->one(FLERR,"Error writing out time averaged data");
fflush(fp);
if (overwrite) {
long fileend = ftell(fp);
if (fileend > 0) ftruncate(fileno(fp),fileend);
}
}
}
/* ---------------------------------------------------------------------- */
void FixAveTime::invoke_vector(bigint ntimestep)
{
int i,j,m;
// first sample within single Nfreq epoch
// zero out arrays that accumulate over many samples, but not across epochs
// invoke setup_chunks() to determine current nchunk
// re-allocate per-chunk arrays if needed
// invoke lock() in two cases:
// if nrepeat > 1: so nchunk cannot change until Nfreq epoch is over,
// will be unlocked on last repeat of this Nfreq
// if ave = RUNNING/WINDOW and not yet locked:
// set forever, will be unlocked in fix destructor
// wrap setup_chunks in clearstep/addstep b/c it may invoke computes
// both nevery and nfreq are future steps,
// since call below to cchunk->ichunk()
// does not re-invoke internal cchunk compute on this same step
if (irepeat == 0) {
if (any_variable_length) {
modify->clearstep_compute();
int nrows_new = column_length(1);
modify->addstep_compute(ntimestep+nevery);
modify->addstep_compute(ntimestep+nfreq);
if (all_variable_length && nrows_new != nrows) {
nrows = nrows_new;
memory->destroy(column);
memory->create(column,nrows,"ave/time:column");
allocate_arrays();
}
bigint ntimestep = update->ntimestep;
int lockforever_flag = 0;
for (i = 0; i < nvalues; i++) {
if (!varlen[i] || which[i] != COMPUTE) continue;
if (nrepeat > 1 && ave == ONE) {
Compute *compute = modify->compute[value2index[i]];
compute->lock(this,ntimestep,ntimestep+(nrepeat-1)*nevery);
} else if ((ave == RUNNING || ave == WINDOW) && !lockforever) {
Compute *compute = modify->compute[value2index[i]];
compute->lock(this,update->ntimestep,-1);
lockforever_flag = 1;
}
}
if (lockforever_flag) lockforever = 1;
}
for (i = 0; i < nrows; i++)
for (j = 0; j < nvalues; j++) array[i][j] = 0.0;
}
// accumulate results of computes,fixes,variables to local copy
// compute/fix/variable may invoke computes so wrap with clear/add
modify->clearstep_compute();
for (j = 0; j < nvalues; j++) {
m = value2index[j];
// invoke compute if not previously invoked
if (which[j] == COMPUTE) {
Compute *compute = modify->compute[m];
if (argindex[j] == 0) {
if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
double *cvector = compute->vector;
for (i = 0; i < nrows; i++)
column[i] = cvector[i];
} else {
if (!(compute->invoked_flag & INVOKED_ARRAY)) {
compute->compute_array();
compute->invoked_flag |= INVOKED_ARRAY;
}
double **carray = compute->array;
int icol = argindex[j]-1;
for (i = 0; i < nrows; i++)
column[i] = carray[i][icol];
}
// access fix fields, guaranteed to be ready
} else if (which[j] == FIX) {
Fix *fix = modify->fix[m];
if (argindex[j] == 0)
for (i = 0; i < nrows; i++)
column[i] = fix->compute_vector(i);
else {
int icol = argindex[j]-1;
for (i = 0; i < nrows; i++)
column[i] = fix->compute_array(i,icol);
}
// evaluate vector-style variable
// insure nvec = nrows, else error
// could be different on this timestep than when column_length(1) set nrows
} else if (which[j] == VARIABLE) {
double *varvec;
int nvec = input->variable->compute_vector(m,&varvec);
if (nvec != nrows)
error->all(FLERR,"Fix ave/time vector-style variable changed length");
for (i = 0; i < nrows; i++)
column[i] = varvec[i];
}
// add columns of values to array or just set directly if offcol is set
if (offcol[j]) {
for (i = 0; i < nrows; i++)
array[i][j] = column[i];
} else {
for (i = 0; i < nrows; i++)
array[i][j] += column[i];
}
}
// done if irepeat < nrepeat
// else reset irepeat and nvalid
irepeat++;
if (irepeat < nrepeat) {
nvalid += nevery;
modify->addstep_compute(nvalid);
return;
}
irepeat = 0;
nvalid = ntimestep+nfreq - (nrepeat-1)*nevery;
modify->addstep_compute(nvalid);
// unlock any variable length computes at end of Nfreq epoch
// do not unlock if ave = RUNNING or WINDOW
if (any_variable_length && nrepeat > 1 && ave == ONE) {
for (i = 0; i < nvalues; i++) {
if (!varlen[i]) continue;
Compute *compute = modify->compute[value2index[i]];
compute->unlock(this);
}
}
// average the final result for the Nfreq timestep
double repeat = nrepeat;
for (i = 0; i < nrows; i++)
for (j = 0; j < nvalues; j++)
if (offcol[j] == 0) array[i][j] /= repeat;
// if ave = ONE, only single Nfreq timestep value is needed
// if ave = RUNNING, combine with all previous Nfreq timestep values
// if ave = WINDOW, combine with nwindow most recent Nfreq timestep values
if (ave == ONE) {
for (i = 0; i < nrows; i++)
for (j = 0; j < nvalues; j++) array_total[i][j] = array[i][j];
norm = 1;
} else if (ave == RUNNING) {
for (i = 0; i < nrows; i++)
for (j = 0; j < nvalues; j++) array_total[i][j] += array[i][j];
norm++;
} else if (ave == WINDOW) {
for (i = 0; i < nrows; i++)
for (j = 0; j < nvalues; j++) {
array_total[i][j] += array[i][j];
if (window_limit) array_total[i][j] -= array_list[iwindow][i][j];
array_list[iwindow][i][j] = array[i][j];
}
iwindow++;
if (iwindow == nwindow) {
iwindow = 0;
window_limit = 1;
}
if (window_limit) norm = nwindow;
else norm = iwindow;
}
// insure any columns with offcol set are effectively set to last value
for (i = 0; i < nrows; i++)
for (j = 0; j < nvalues; j++)
if (offcol[j]) array_total[i][j] = norm*array[i][j];
// output result to file
if (fp && me == 0) {
if (overwrite) fseek(fp,filepos,SEEK_SET);
fprintf(fp,BIGINT_FORMAT " %d\n",ntimestep,nrows);
for (i = 0; i < nrows; i++) {
fprintf(fp,"%d",i+1);
for (j = 0; j < nvalues; j++) fprintf(fp,format,array_total[i][j]/norm);
fprintf(fp,"\n");
}
fflush(fp);
if (overwrite) {
long fileend = ftell(fp);
if (fileend > 0) ftruncate(fileno(fp),fileend);
}
}
}
/* ----------------------------------------------------------------------
return scalar value
------------------------------------------------------------------------- */
int FixAveTime::column_length(int dynamic)
{
int m,length,lengthone;
// determine nrows for static values
if (!dynamic) {
length = 0;
for (int i = 0; i < nvalues; i++) {
if (varlen[i]) continue;
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (argindex[i] == 0)
lengthone = modify->compute[icompute]->size_vector;
else lengthone = modify->compute[icompute]->size_array_rows;
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (argindex[i] == 0) lengthone = modify->fix[ifix]->size_vector;
else lengthone = modify->fix[ifix]->size_array_rows;
} else if (which[i] == VARIABLE) {
// variables are always varlen = 1, so dynamic
}
if (length == 0) length = lengthone;
else if (lengthone != length)
error->all(FLERR,"Fix ave/time columns are inconsistent lengths");
}
}
// determine new nrows for dynamic values
// either all must be the same
// or must match other static values
// don't need to check if not MODE = VECTOR, just invoke lock_length()
if (dynamic) {
length = 0;
for (int i = 0; i < nvalues; i++) {
if (varlen[i] == 0) continue;
m = value2index[i];
if (which[i] == COMPUTE) {
Compute *compute = modify->compute[m];
lengthone = compute->lock_length();
} else if (which[i] == VARIABLE) {
double *varvec;
lengthone = input->variable->compute_vector(m,&varvec);
}
if (mode == SCALAR) continue;
if (all_variable_length) {
if (length == 0) length = lengthone;
else if (lengthone != length)
error->all(FLERR,"Fix ave/time columns are inconsistent lengths");
} else {
if (lengthone != nrows)
error->all(FLERR,"Fix ave/time columns are inconsistent lengths");
}
}
}
return length;
}
/* ----------------------------------------------------------------------
return scalar value
------------------------------------------------------------------------- */
double FixAveTime::compute_scalar()
{
if (norm) return vector_total[0]/norm;
return 0.0;
}
/* ----------------------------------------------------------------------
return Ith vector value
------------------------------------------------------------------------- */
double FixAveTime::compute_vector(int i)
{
if (i >= nrows) return 0.0;
if (norm) {
if (mode == SCALAR) return vector_total[i]/norm;
if (mode == VECTOR) return array_total[i][0]/norm;
}
return 0.0;
}
/* ----------------------------------------------------------------------
return I,J array value
------------------------------------------------------------------------- */
double FixAveTime::compute_array(int i, int j)
{
if (i >= nrows) return 0.0;
if (norm) return array_total[i][j]/norm;
return 0.0;
}
/* ----------------------------------------------------------------------
parse optional args
------------------------------------------------------------------------- */
void FixAveTime::options(int iarg, int narg, char **arg)
{
// option defaults
fp = NULL;
ave = ONE;
startstep = 0;
mode = SCALAR;
noff = 0;
offlist = NULL;
overwrite = 0;
format_user = NULL;
format = (char *) " %g";
title1 = NULL;
title2 = NULL;
title3 = NULL;
// optional args
while (iarg < narg) {
if (strcmp(arg[iarg],"file") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/time command");
if (me == 0) {
fp = fopen(arg[iarg+1],"w");
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open fix ave/time file %s",arg[iarg+1]);
error->one(FLERR,str);
}
}
iarg += 2;
} else if (strcmp(arg[iarg],"ave") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/time command");
if (strcmp(arg[iarg+1],"one") == 0) ave = ONE;
else if (strcmp(arg[iarg+1],"running") == 0) ave = RUNNING;
else if (strcmp(arg[iarg+1],"window") == 0) ave = WINDOW;
else error->all(FLERR,"Illegal fix ave/time command");
if (ave == WINDOW) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix ave/time command");
nwindow = force->inumeric(FLERR,arg[iarg+2]);
if (nwindow <= 0) error->all(FLERR,"Illegal fix ave/time command");
}
iarg += 2;
if (ave == WINDOW) iarg++;
} else if (strcmp(arg[iarg],"start") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/time command");
startstep = force->inumeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"mode") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/time command");
if (strcmp(arg[iarg+1],"scalar") == 0) mode = SCALAR;
else if (strcmp(arg[iarg+1],"vector") == 0) mode = VECTOR;
else error->all(FLERR,"Illegal fix ave/time command");
iarg += 2;
} else if (strcmp(arg[iarg],"off") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/time command");
memory->grow(offlist,noff+1,"ave/time:offlist");
offlist[noff++] = force->inumeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"overwrite") == 0) {
overwrite = 1;
iarg += 1;
} else if (strcmp(arg[iarg],"format") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/time command");
delete [] format_user;
int n = strlen(arg[iarg+1]) + 2;
format_user = new char[n];
sprintf(format_user," %s",arg[iarg+1]);
format = format_user;
iarg += 2;
} else if (strcmp(arg[iarg],"title1") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
delete [] title1;
int n = strlen(arg[iarg+1]) + 1;
title1 = new char[n];
strcpy(title1,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"title2") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
delete [] title2;
int n = strlen(arg[iarg+1]) + 1;
title2 = new char[n];
strcpy(title2,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"title3") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
delete [] title3;
int n = strlen(arg[iarg+1]) + 1;
title3 = new char[n];
strcpy(title3,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix ave/time command");
}
}
/* ----------------------------------------------------------------------
reallocate arrays for mode = VECTOR of size Nrows x Nvalues
------------------------------------------------------------------------- */
void FixAveTime::allocate_arrays()
{
memory->destroy(array);
memory->destroy(array_total);
memory->create(array,nrows,nvalues,"ave/time:array");
memory->create(array_total,nrows,nvalues,"ave/time:array_total");
if (ave == WINDOW) {
memory->destroy(array_list);
memory->create(array_list,nwindow,nrows,nvalues,"ave/time:array_list");
}
// reinitialize regrown array_total since it accumulates
for (int i = 0; i < nrows; i++)
for (int j = 0; j < nvalues; j++) array_total[i][j] = 0.0;
}
/* ----------------------------------------------------------------------
calculate nvalid = next step on which end_of_step does something
can be this timestep if multiple of nfreq and nrepeat = 1
else backup from next multiple of nfreq
startstep is lower bound on nfreq multiple
------------------------------------------------------------------------- */
bigint FixAveTime::nextvalid()
{
bigint nvalid = (update->ntimestep/nfreq)*nfreq + nfreq;
while (nvalid < startstep) nvalid += nfreq;
if (nvalid-nfreq == update->ntimestep && nrepeat == 1)
nvalid = update->ntimestep;
else
nvalid -= (nrepeat-1)*nevery;
if (nvalid < update->ntimestep) nvalid += nfreq;
return nvalid;
}
diff --git a/src/fix_aveforce.cpp b/src/fix_aveforce.cpp
index 09a685cb1..793c2d5c2 100644
--- a/src/fix_aveforce.cpp
+++ b/src/fix_aveforce.cpp
@@ -1,325 +1,326 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include <stdlib.h>
#include "fix_aveforce.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "region.h"
#include "respa.h"
#include "input.h"
#include "variable.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NONE,CONSTANT,EQUAL};
/* ---------------------------------------------------------------------- */
FixAveForce::FixAveForce(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ xstr(NULL), ystr(NULL), zstr(NULL), idregion(NULL)
{
if (narg < 6) error->all(FLERR,"Illegal fix aveforce command");
dynamic_group_allow = 1;
vector_flag = 1;
size_vector = 3;
global_freq = 1;
extvector = 1;
respa_level_support = 1;
ilevel_respa = nlevels_respa = 0;
xstr = ystr = zstr = NULL;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[3][2]);
} else if (strcmp(arg[3],"NULL") == 0) {
xstyle = NONE;
} else {
xvalue = force->numeric(FLERR,arg[3]);
xstyle = CONSTANT;
}
if (strstr(arg[4],"v_") == arg[4]) {
int n = strlen(&arg[4][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[4][2]);
} else if (strcmp(arg[4],"NULL") == 0) {
ystyle = NONE;
} else {
yvalue = force->numeric(FLERR,arg[4]);
ystyle = CONSTANT;
}
if (strstr(arg[5],"v_") == arg[5]) {
int n = strlen(&arg[5][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[5][2]);
} else if (strcmp(arg[5],"NULL") == 0) {
zstyle = NONE;
} else {
zvalue = force->numeric(FLERR,arg[5]);
zstyle = CONSTANT;
}
// optional args
iregion = -1;
idregion = NULL;
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix aveforce command");
iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix aveforce does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix aveforce command");
}
foriginal_all[0] = foriginal_all[1] =
foriginal_all[2] = foriginal_all[3] = 0.0;
}
/* ---------------------------------------------------------------------- */
FixAveForce::~FixAveForce()
{
delete [] xstr;
delete [] ystr;
delete [] zstr;
delete [] idregion;
}
/* ---------------------------------------------------------------------- */
int FixAveForce::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixAveForce::init()
{
// check variables
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0)
error->all(FLERR,"Variable name for fix aveforce does not exist");
if (input->variable->equalstyle(xvar)) xstyle = EQUAL;
else error->all(FLERR,"Variable for fix aveforce is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0)
error->all(FLERR,"Variable name for fix aveforce does not exist");
if (input->variable->equalstyle(yvar)) ystyle = EQUAL;
else error->all(FLERR,"Variable for fix aveforce is invalid style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0)
error->all(FLERR,"Variable name for fix aveforce does not exist");
if (input->variable->equalstyle(zvar)) zstyle = EQUAL;
else error->all(FLERR,"Variable for fix aveforce is invalid style");
}
// set index and check validity of region
if (iregion >= 0) {
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix aveforce does not exist");
}
if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL) varflag = EQUAL;
else varflag = CONSTANT;
if (strstr(update->integrate_style,"respa")) {
nlevels_respa = ((Respa *) update->integrate)->nlevels;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,nlevels_respa-1);
else ilevel_respa = nlevels_respa-1;
}
}
/* ---------------------------------------------------------------------- */
void FixAveForce::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else
for (int ilevel = 0; ilevel < nlevels_respa; ilevel++) {
((Respa *) update->integrate)->copy_flevel_f(ilevel);
post_force_respa(vflag,ilevel,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel);
}
}
/* ---------------------------------------------------------------------- */
void FixAveForce::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixAveForce::post_force(int vflag)
{
// update region if necessary
Region *region = NULL;
if (iregion >= 0) {
region = domain->regions[iregion];
region->prematch();
}
// sum forces on participating atoms
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double foriginal[4];
foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
foriginal[0] += f[i][0];
foriginal[1] += f[i][1];
foriginal[2] += f[i][2];
foriginal[3] += 1.0;
}
// average the force on participating atoms
// add in requested amount, computed via variable evaluation if necessary
// wrap variable evaluation with clear/add
MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world);
int ncount = static_cast<int> (foriginal_all[3]);
if (ncount == 0) return;
if (varflag == EQUAL) {
modify->clearstep_compute();
if (xstyle == EQUAL) xvalue = input->variable->compute_equal(xvar);
if (ystyle == EQUAL) yvalue = input->variable->compute_equal(yvar);
if (zstyle == EQUAL) zvalue = input->variable->compute_equal(zvar);
modify->addstep_compute(update->ntimestep + 1);
}
double fave[3];
fave[0] = foriginal_all[0]/ncount + xvalue;
fave[1] = foriginal_all[1]/ncount + yvalue;
fave[2] = foriginal_all[2]/ncount + zvalue;
// set force of all participating atoms to same value
// only for active dimensions
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
if (xstyle) f[i][0] = fave[0];
if (ystyle) f[i][1] = fave[1];
if (zstyle) f[i][2] = fave[2];
}
}
/* ---------------------------------------------------------------------- */
void FixAveForce::post_force_respa(int vflag, int ilevel, int iloop)
{
// ave + extra force on selected RESPA level
// just ave on all other levels
if (ilevel == ilevel_respa) post_force(vflag);
else {
Region *region = NULL;
if (iregion >= 0) {
region = domain->regions[iregion];
region->prematch();
}
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double foriginal[4];
foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
foriginal[0] += f[i][0];
foriginal[1] += f[i][1];
foriginal[2] += f[i][2];
foriginal[3] += 1.0;
}
MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world);
int ncount = static_cast<int> (foriginal_all[3]);
if (ncount == 0) return;
double fave[3];
fave[0] = foriginal_all[0]/ncount;
fave[1] = foriginal_all[1]/ncount;
fave[2] = foriginal_all[2]/ncount;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
if (xstyle) f[i][0] = fave[0];
if (ystyle) f[i][1] = fave[1];
if (zstyle) f[i][2] = fave[2];
}
}
}
/* ---------------------------------------------------------------------- */
void FixAveForce::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
return components of total force on fix group before force was changed
------------------------------------------------------------------------- */
double FixAveForce::compute_vector(int n)
{
return foriginal_all[n];
}
diff --git a/src/fix_balance.cpp b/src/fix_balance.cpp
index bb72bec6f..18630e436 100644
--- a/src/fix_balance.cpp
+++ b/src/fix_balance.cpp
@@ -1,431 +1,432 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include "fix_balance.h"
#include "balance.h"
#include "update.h"
#include "atom.h"
#include "comm.h"
#include "domain.h"
#include "modify.h"
#include "neighbor.h"
#include "irregular.h"
#include "force.h"
#include "kspace.h"
#include "rcb.h"
#include "error.h"
#include "imbalance_group.h"
#include "imbalance_time.h"
#include "imbalance_neigh.h"
#include "imbalance_store.h"
#include "imbalance_var.h"
#include "fix_store.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{SHIFT,BISECTION};
enum{LAYOUT_UNIFORM,LAYOUT_NONUNIFORM,LAYOUT_TILED}; // several files
/* ---------------------------------------------------------------------- */
FixBalance::FixBalance(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ fp(NULL), nimbalance(0), imbalance(NULL), imb_fix(NULL), balance(NULL), irregular(NULL)
{
if (narg < 6) error->all(FLERR,"Illegal fix balance command");
box_change_domain = 1;
scalar_flag = 1;
extscalar = 0;
vector_flag = 1;
size_vector = 3;
extvector = 0;
global_freq = 1;
// parse arguments
int dimension = domain->dimension;
nevery = force->inumeric(FLERR,arg[3]);
if (nevery < 0) error->all(FLERR,"Illegal fix balance command");
thresh = force->numeric(FLERR,arg[4]);
if (strcmp(arg[5],"shift") == 0) lbstyle = SHIFT;
else if (strcmp(arg[5],"rcb") == 0) lbstyle = BISECTION;
else error->all(FLERR,"Illegal fix balance command");
int iarg = 5;
if (lbstyle == SHIFT) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix balance command");
if (strlen(arg[iarg+1]) > 3) error->all(FLERR,"Illegal fix balance command");
strcpy(bstr,arg[iarg+1]);
nitermax = force->inumeric(FLERR,arg[iarg+2]);
if (nitermax <= 0) error->all(FLERR,"Illegal fix balance command");
stopthresh = force->numeric(FLERR,arg[iarg+3]);
if (stopthresh < 1.0) error->all(FLERR,"Illegal fix balance command");
iarg += 4;
} else if (lbstyle == BISECTION) {
iarg++;
}
// create instance of Balance class. required for processing group flags.
balance = new Balance(lmp);
// process optional keywords
// get max number of imbalance weight flags/classes
nimbalance = 0;
imbalance = NULL;
for (int i=iarg; i < narg; ++i)
if (strcmp(arg[i],"weight") == 0) ++nimbalance;
if (nimbalance) imbalance = new Imbalance*[nimbalance];
outflag = 0;
int outarg = 0;
fp = NULL;
nimbalance = 0;
imb_fix = NULL;
while (iarg < narg) {
if (strcmp(arg[iarg],"out") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix balance command");
outflag = 1;
outarg = iarg+1;
iarg += 2;
} else if (strcmp(arg[iarg],"weight") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix balance command");
Imbalance *imb;
int nopt = 0;
if (strcmp(arg[iarg+1],"group") == 0) {
imb = new ImbalanceGroup(lmp);
nopt = imb->options(narg-iarg,arg+iarg+2);
imbalance[nimbalance] = imb;
} else if (strcmp(arg[iarg+1],"time") == 0) {
imb = new ImbalanceTime(lmp);
nopt = imb->options(narg-iarg,arg+iarg+2);
imbalance[nimbalance] = imb;
} else if (strcmp(arg[iarg+1],"neigh") == 0) {
imb = new ImbalanceNeigh(lmp);
nopt = imb->options(narg-iarg,arg+iarg+2);
imbalance[nimbalance] = imb;
} else if (strcmp(arg[iarg+1],"var") == 0) {
imb = new ImbalanceVar(lmp);
nopt = imb->options(narg-iarg,arg+iarg+2);
imbalance[nimbalance] = imb;
} else if (strcmp(arg[iarg+1],"store") == 0) {
imb = new ImbalanceStore(lmp);
nopt = imb->options(narg-iarg,arg+iarg+2);
imbalance[nimbalance] = imb;
} else {
error->all(FLERR,"Unknown balance weight method");
}
++nimbalance;
iarg += 2+nopt;
} else error->all(FLERR,"Illegal fix balance command");
}
// error check
if (lbstyle == SHIFT) {
int blen = strlen(bstr);
for (int i = 0; i < blen; i++) {
if (bstr[i] != 'x' && bstr[i] != 'y' && bstr[i] != 'z')
error->all(FLERR,"Fix balance shift string is invalid");
if (bstr[i] == 'z' && dimension == 2)
error->all(FLERR,"Fix balance shift string is invalid");
for (int j = i+1; j < blen; j++)
if (bstr[i] == bstr[j])
error->all(FLERR,"Fix balance shift string is invalid");
}
}
if (lbstyle == BISECTION && comm->style == 0)
error->all(FLERR,"Fix balance rcb cannot be used with comm_style brick");
// if SHIFT, initialize balance class with params
if (lbstyle == SHIFT) balance->shift_setup(bstr,nitermax,thresh);
// create instance of Irregular class
irregular = new Irregular(lmp);
// output file
if (outflag && comm->me == 0) {
fp = fopen(arg[outarg],"w");
if (fp == NULL) error->one(FLERR,"Cannot open fix balance output file");
}
// only force reneighboring if nevery > 0
if (nevery) force_reneighbor = 1;
itercount = 0;
pending = 0;
imbfinal = imbprev = 0.0;
}
/* ---------------------------------------------------------------------- */
FixBalance::~FixBalance()
{
for (int i = 0; i < nimbalance; ++i)
delete imbalance[i];
delete[] imbalance;
if (imb_fix && (modify->nfix > 0)) {
modify->delete_fix(imb_fix->id);
imb_fix = NULL;
balance->set_imb_fix(NULL);
}
delete balance;
delete irregular;
if (fp) fclose(fp);
}
/* ---------------------------------------------------------------------- */
int FixBalance::setmask()
{
int mask = 0;
mask |= PRE_EXCHANGE;
mask |= PRE_NEIGHBOR;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixBalance::post_constructor()
{
// add per atom weight property, if weighted balancing is requested
if (nimbalance > 0) {
char *fixargs[6];
char *imb_id = new char[strlen(this->id)+19];
strcpy(imb_id,this->id);
strcat(imb_id,"_IMBALANCE_WEIGHTS");
fixargs[0] = imb_id;
fixargs[1] = (char *) "all";
fixargs[2] = (char *) "STORE";
fixargs[3] = (char *) "peratom";
fixargs[4] = (char *) "1";
fixargs[5] = (char *) "1";
modify->add_fix(6,fixargs);
imb_fix = (FixStore *) modify->fix[modify->nfix-1];
balance->set_imb_fix(imb_fix);
delete[] imb_id;
}
}
/* ---------------------------------------------------------------------- */
void FixBalance::init()
{
if (force->kspace) kspace_flag = 1;
else kspace_flag = 0;
}
/* ---------------------------------------------------------------------- */
void FixBalance::setup(int vflag)
{
// compute final imbalance factor if setup_pre_exchange() invoked balancer
// this is called at end of run setup, before output
pre_neighbor();
}
/* ---------------------------------------------------------------------- */
void FixBalance::setup_pre_exchange()
{
// insure atoms are in current box & update box via shrink-wrap
// has to be be done before rebalance() invokes Irregular::migrate_atoms()
// since it requires atoms be inside simulation box
// even though pbc() will be done again in Verlet::run()
// no exchange() since doesn't matter if atoms are assigned to correct procs
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
domain->reset_box();
if (domain->triclinic) domain->lamda2x(atom->nlocal);
// compute and apply imbalance weights for local atoms
if (nimbalance > 0) {
double * const weight = imb_fix->vstore;
for (int i = 0; i < atom->nlocal; ++i)
weight[i] = 1.0;
for (int n = 0; n < nimbalance; ++n)
imbalance[n]->compute(weight);
}
// compute initial outputs and perform a rebalance if threshhold exceeded
imbfinal = imbprev = imbnow = balance->imbalance_nlocal(maxperproc);
if (imbnow > thresh) rebalance();
// next_reneighbor = next time to force reneighboring
if (nevery) next_reneighbor = (update->ntimestep/nevery)*nevery + nevery;
}
/* ----------------------------------------------------------------------
perform dynamic load balancing
------------------------------------------------------------------------- */
void FixBalance::pre_exchange()
{
// return if not a rebalance timestep
if (nevery && update->ntimestep < next_reneighbor) return;
// insure atoms are in current box & update box via shrink-wrap
// no exchange() since doesn't matter if atoms are assigned to correct procs
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
domain->reset_box();
if (domain->triclinic) domain->lamda2x(atom->nlocal);
// compute and apply imbalance weights for local atoms
if (nimbalance > 0) {
double * const weight = imb_fix->vstore;
for (int i = 0; i < atom->nlocal; ++i)
weight[i] = 1.0;
for (int n = 0; n < nimbalance; ++n)
imbalance[n]->compute(weight);
}
// return if imbalance < threshhold
imbnow = balance->imbalance_nlocal(maxperproc);
if (imbnow <= thresh) {
if (nevery) next_reneighbor = (update->ntimestep/nevery)*nevery + nevery;
return;
}
rebalance();
// next timestep to rebalance
if (nevery) next_reneighbor = (update->ntimestep/nevery)*nevery + nevery;
}
/* ----------------------------------------------------------------------
compute final imbalance factor based on nlocal after comm->exchange()
only do this if rebalancing just occured
------------------------------------------------------------------------- */
void FixBalance::pre_neighbor()
{
if (!pending) return;
imbfinal = balance->imbalance_nlocal(maxperproc);
pending = 0;
}
/* ----------------------------------------------------------------------
perform dynamic load balancing
------------------------------------------------------------------------- */
void FixBalance::rebalance()
{
imbprev = imbnow;
// invoke balancer and reset comm->uniform flag
int *sendproc;
if (lbstyle == SHIFT) {
itercount = balance->shift();
comm->layout = LAYOUT_NONUNIFORM;
} else if (lbstyle == BISECTION) {
sendproc = balance->bisection();
comm->layout = LAYOUT_TILED;
}
// output of new decomposition
if (outflag) balance->dumpout(update->ntimestep,fp);
// reset proc sub-domains
// check and warn if any proc's subbox is smaller than neigh skin
// since may lead to lost atoms in exchange()
if (domain->triclinic) domain->set_lamda_box();
domain->set_local_box();
domain->subbox_too_small_check(neighbor->skin);
// move atoms to new processors via irregular()
// only needed if migrate_check() says an atom moves to far
// else allow caller's comm->exchange() to do it
if (domain->triclinic) domain->x2lamda(atom->nlocal);
if (lbstyle == BISECTION) irregular->migrate_atoms(0,1,sendproc);
else if (irregular->migrate_check()) irregular->migrate_atoms();
if (domain->triclinic) domain->lamda2x(atom->nlocal);
// invoke KSpace setup_grid() to adjust to new proc sub-domains
if (kspace_flag) force->kspace->setup_grid();
// pending triggers pre_neighbor() to compute final imbalance factor
// can only be done after atoms migrate in caller's comm->exchange()
pending = 1;
}
/* ----------------------------------------------------------------------
return imbalance factor after last rebalance
------------------------------------------------------------------------- */
double FixBalance::compute_scalar()
{
return imbfinal;
}
/* ----------------------------------------------------------------------
return stats for last rebalance
------------------------------------------------------------------------- */
double FixBalance::compute_vector(int i)
{
if (i == 0) return (double) maxperproc;
if (i == 1) return (double) itercount;
return imbprev;
}
/* ----------------------------------------------------------------------
return # of bytes of allocated memory
------------------------------------------------------------------------- */
double FixBalance::memory_usage()
{
double bytes = irregular->memory_usage();
if (balance->rcb) bytes += balance->rcb->memory_usage();
return bytes;
}
diff --git a/src/fix_box_relax.cpp b/src/fix_box_relax.cpp
index 8dd0b3344..21bc09b25 100644
--- a/src/fix_box_relax.cpp
+++ b/src/fix_box_relax.cpp
@@ -1,974 +1,975 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Aidan Thompson (SNL)
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "fix_box_relax.h"
#include "atom.h"
#include "domain.h"
#include "update.h"
#include "comm.h"
#include "force.h"
#include "kspace.h"
#include "modify.h"
#include "compute.h"
#include "error.h"
#include "math_extra.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NONE,XYZ,XY,YZ,XZ};
enum{ISO,ANISO,TRICLINIC};
#define MAX_LIFO_DEPTH 2 // 3 box0 arrays in *.h dimensioned to this
/* ---------------------------------------------------------------------- */
FixBoxRelax::FixBoxRelax(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ id_temp(NULL), id_press(NULL), tflag(0), pflag(0)
{
if (narg < 5) error->all(FLERR,"Illegal fix box/relax command");
scalar_flag = 1;
extscalar = 1;
global_freq = 1;
no_change_box = 1;
// default values
pcouple = NONE;
allremap = 1;
vmax = 0.0001;
deviatoric_flag = 0;
nreset_h0 = 0;
p_target[0] = p_target[1] = p_target[2] =
p_target[3] = p_target[4] = p_target[5] = 0.0;
p_flag[0] = p_flag[1] = p_flag[2] =
p_flag[3] = p_flag[4] = p_flag[5] = 0;
// turn on tilt factor scaling, whenever applicable
dimension = domain->dimension;
scaleyz = scalexz = scalexy = 0;
if (domain->yperiodic && domain->xy != 0.0) scalexy = 1;
if (domain->zperiodic && dimension == 3) {
if (domain->yz != 0.0) scaleyz = 1;
if (domain->xz != 0.0) scalexz = 1;
}
// set fixed-point to default = center of cell
fixedpoint[0] = 0.5*(domain->boxlo[0]+domain->boxhi[0]);
fixedpoint[1] = 0.5*(domain->boxlo[1]+domain->boxhi[1]);
fixedpoint[2] = 0.5*(domain->boxlo[2]+domain->boxhi[2]);
// process keywords
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"iso") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
pcouple = XYZ;
p_target[0] = p_target[1] = p_target[2] = force->numeric(FLERR,arg[iarg+1]);
p_flag[0] = p_flag[1] = p_flag[2] = 1;
if (dimension == 2) {
p_target[2] = 0.0;
p_flag[2] = 0;
}
iarg += 2;
} else if (strcmp(arg[iarg],"aniso") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
pcouple = NONE;
p_target[0] = p_target[1] = p_target[2] = force->numeric(FLERR,arg[iarg+1]);
p_flag[0] = p_flag[1] = p_flag[2] = 1;
if (dimension == 2) {
p_target[2] = 0.0;
p_flag[2] = 0;
}
iarg += 2;
} else if (strcmp(arg[iarg],"tri") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
pcouple = NONE;
scalexy = scalexz = scaleyz = 0;
p_target[0] = p_target[1] = p_target[2] = force->numeric(FLERR,arg[iarg+1]);
p_flag[0] = p_flag[1] = p_flag[2] = 1;
p_target[3] = p_target[4] = p_target[5] = 0.0;
p_flag[3] = p_flag[4] = p_flag[5] = 1;
if (dimension == 2) {
p_target[2] = p_target[3] = p_target[4] = 0.0;
p_flag[2] = p_flag[3] = p_flag[4] = 0;
}
iarg += 2;
} else if (strcmp(arg[iarg],"x") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
p_target[0] = force->numeric(FLERR,arg[iarg+1]);
p_flag[0] = 1;
deviatoric_flag = 1;
iarg += 2;
} else if (strcmp(arg[iarg],"y") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
p_target[1] = force->numeric(FLERR,arg[iarg+1]);
p_flag[1] = 1;
deviatoric_flag = 1;
iarg += 2;
} else if (strcmp(arg[iarg],"z") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
p_target[2] = force->numeric(FLERR,arg[iarg+1]);
p_flag[2] = 1;
deviatoric_flag = 1;
iarg += 2;
if (dimension == 2)
error->all(FLERR,"Invalid fix box/relax command for a 2d simulation");
} else if (strcmp(arg[iarg],"yz") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
p_target[3] = force->numeric(FLERR,arg[iarg+1]);
p_flag[3] = 1;
deviatoric_flag = 1;
scaleyz = 0;
iarg += 2;
if (dimension == 2)
error->all(FLERR,"Invalid fix box/relax command for a 2d simulation");
} else if (strcmp(arg[iarg],"xz") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
p_target[4] = force->numeric(FLERR,arg[iarg+1]);
p_flag[4] = 1;
deviatoric_flag = 1;
scalexz = 0;
iarg += 2;
if (dimension == 2)
error->all(FLERR,"Invalid fix box/relax command for a 2d simulation");
} else if (strcmp(arg[iarg],"xy") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
p_target[5] = force->numeric(FLERR,arg[iarg+1]);
p_flag[5] = 1;
deviatoric_flag = 1;
scalexy = 0;
iarg += 2;
} else if (strcmp(arg[iarg],"couple") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
if (strcmp(arg[iarg+1],"xyz") == 0) pcouple = XYZ;
else if (strcmp(arg[iarg+1],"xy") == 0) pcouple = XY;
else if (strcmp(arg[iarg+1],"yz") == 0) pcouple = YZ;
else if (strcmp(arg[iarg+1],"xz") == 0) pcouple = XZ;
else if (strcmp(arg[iarg+1],"none") == 0) pcouple = NONE;
else error->all(FLERR,"Illegal fix box/relax command");
iarg += 2;
} else if (strcmp(arg[iarg],"dilate") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
if (strcmp(arg[iarg+1],"all") == 0) allremap = 1;
else if (strcmp(arg[iarg+1],"partial") == 0) allremap = 0;
else error->all(FLERR,"Illegal fix box/relax command");
iarg += 2;
} else if (strcmp(arg[iarg],"vmax") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
vmax = force->numeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"nreset") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
nreset_h0 = force->inumeric(FLERR,arg[iarg+1]);
if (nreset_h0 < 0) error->all(FLERR,"Illegal fix box/relax command");
iarg += 2;
} else if (strcmp(arg[iarg],"scalexy") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
if (strcmp(arg[iarg+1],"yes") == 0) scalexy = 1;
else if (strcmp(arg[iarg+1],"no") == 0) scalexy = 0;
else error->all(FLERR,"Illegal fix box/relax command");
iarg += 2;
} else if (strcmp(arg[iarg],"scalexz") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
if (strcmp(arg[iarg+1],"yes") == 0) scalexz = 1;
else if (strcmp(arg[iarg+1],"no") == 0) scalexz = 0;
else error->all(FLERR,"Illegal fix box/relax command");
iarg += 2;
} else if (strcmp(arg[iarg],"scaleyz") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix box/relax command");
if (strcmp(arg[iarg+1],"yes") == 0) scaleyz = 1;
else if (strcmp(arg[iarg+1],"no") == 0) scaleyz = 0;
else error->all(FLERR,"Illegal fix box/relax command");
iarg += 2;
} else if (strcmp(arg[iarg],"fixedpoint") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix box/relax command");
fixedpoint[0] = force->numeric(FLERR,arg[iarg+1]);
fixedpoint[1] = force->numeric(FLERR,arg[iarg+2]);
fixedpoint[2] = force->numeric(FLERR,arg[iarg+3]);
iarg += 4;
} else error->all(FLERR,"Illegal fix box/relax command");
}
if (p_flag[0] || p_flag[1] || p_flag[2]) box_change_size = 1;
if (p_flag[3] || p_flag[4] || p_flag[5]) box_change_shape = 1;
if (allremap == 0) restart_pbc = 1;
// error checks
if (dimension == 2 && (p_flag[2] || p_flag[3] || p_flag[4]))
error->all(FLERR,"Invalid fix box/relax command for a 2d simulation");
if (dimension == 2 && (pcouple == YZ || pcouple == XZ))
error->all(FLERR,"Invalid fix box/relax command for a 2d simulation");
if (pcouple == XYZ && (p_flag[0] == 0 || p_flag[1] == 0))
error->all(FLERR,"Invalid fix box/relax command pressure settings");
if (pcouple == XYZ && dimension == 3 && p_flag[2] == 0)
error->all(FLERR,"Invalid fix box/relax command pressure settings");
if (pcouple == XY && (p_flag[0] == 0 || p_flag[1] == 0))
error->all(FLERR,"Invalid fix box/relax command pressure settings");
if (pcouple == YZ && (p_flag[1] == 0 || p_flag[2] == 0))
error->all(FLERR,"Invalid fix box/relax command pressure settings");
if (pcouple == XZ && (p_flag[0] == 0 || p_flag[2] == 0))
error->all(FLERR,"Invalid fix box/relax command pressure settings");
// require periodicity in tensile dimension
if (p_flag[0] && domain->xperiodic == 0)
error->all(FLERR,"Cannot use fix box/relax on a non-periodic dimension");
if (p_flag[1] && domain->yperiodic == 0)
error->all(FLERR,"Cannot use fix box/relax on a non-periodic dimension");
if (p_flag[2] && domain->zperiodic == 0)
error->all(FLERR,"Cannot use fix box/relax on a non-periodic dimension");
// require periodicity in 2nd dim of off-diagonal tilt component
if (p_flag[3] && domain->zperiodic == 0)
error->all(FLERR,
"Cannot use fix box/relax on a 2nd non-periodic dimension");
if (p_flag[4] && domain->zperiodic == 0)
error->all(FLERR,
"Cannot use fix box/relax on a 2nd non-periodic dimension");
if (p_flag[5] && domain->yperiodic == 0)
error->all(FLERR,
"Cannot use fix box/relax on a 2nd non-periodic dimension");
if (scaleyz == 1 && domain->zperiodic == 0)
error->all(FLERR,"Cannot use fix box/relax "
"with tilt factor scaling on a 2nd non-periodic dimension");
if (scalexz == 1 && domain->zperiodic == 0)
error->all(FLERR,"Cannot use fix box/relax "
"with tilt factor scaling on a 2nd non-periodic dimension");
if (scalexy == 1 && domain->yperiodic == 0)
error->all(FLERR,"Cannot use fix box/relax "
"with tilt factor scaling on a 2nd non-periodic dimension");
if (p_flag[3] && scaleyz == 1)
error->all(FLERR,"Cannot use fix box/relax with "
"both relaxation and scaling on a tilt factor");
if (p_flag[4] && scalexz == 1)
error->all(FLERR,"Cannot use fix box/relax with "
"both relaxation and scaling on a tilt factor");
if (p_flag[5] && scalexy == 1)
error->all(FLERR,"Cannot use fix box/relax with "
"both relaxation and scaling on a tilt factor");
if (!domain->triclinic && (p_flag[3] || p_flag[4] || p_flag[5]))
error->all(FLERR,"Can not specify Pxy/Pxz/Pyz in "
"fix box/relax with non-triclinic box");
if (pcouple == XYZ && dimension == 3 &&
(p_target[0] != p_target[1] || p_target[0] != p_target[2]))
error->all(FLERR,"Invalid fix box/relax pressure settings");
if (pcouple == XYZ && dimension == 2 && p_target[0] != p_target[1])
error->all(FLERR,"Invalid fix box/relax pressure settings");
if (pcouple == XY && p_target[0] != p_target[1])
error->all(FLERR,"Invalid fix box/relax pressure settings");
if (pcouple == YZ && p_target[1] != p_target[2])
error->all(FLERR,"Invalid fix box/relax pressure settings");
if (pcouple == XZ && p_target[0] != p_target[2])
error->all(FLERR,"Invalid fix box/relax pressure settings");
if (vmax <= 0.0) error->all(FLERR,"Illegal fix box/relax command");
// pstyle = TRICLINIC if any off-diagonal term is controlled -> 6 dof
// else pstyle = ISO if XYZ coupling or XY coupling in 2d -> 1 dof
// else pstyle = ANISO -> 3 dof
if (p_flag[3] || p_flag[4] || p_flag[5]) pstyle = TRICLINIC;
else if (pcouple == XYZ || (dimension == 2 && pcouple == XY)) pstyle = ISO;
else pstyle = ANISO;
// create a new compute temp style
// id = fix-ID + temp
// compute group = all since pressure is always global (group all)
// and thus its KE/temperature contribution should use group all
int n = strlen(id) + 6;
id_temp = new char[n];
strcpy(id_temp,id);
strcat(id_temp,"_temp");
char **newarg = new char*[3];
newarg[0] = id_temp;
newarg[1] = (char *) "all";
newarg[2] = (char *) "temp";
modify->add_compute(3,newarg);
delete [] newarg;
tflag = 1;
// create a new compute pressure style (virial only)
// id = fix-ID + press, compute group = all
// pass id_temp as 4th arg to pressure constructor
n = strlen(id) + 7;
id_press = new char[n];
strcpy(id_press,id);
strcat(id_press,"_press");
newarg = new char*[5];
newarg[0] = id_press;
newarg[1] = (char *) "all";
newarg[2] = (char *) "pressure";
newarg[3] = id_temp;
newarg[4] = (char *) "virial";
modify->add_compute(5,newarg);
delete [] newarg;
pflag = 1;
dimension = domain->dimension;
nrigid = 0;
rfix = 0;
current_lifo = 0;
}
/* ---------------------------------------------------------------------- */
FixBoxRelax::~FixBoxRelax()
{
delete [] rfix;
// delete temperature and pressure if fix created them
if (tflag) modify->delete_compute(id_temp);
if (pflag) modify->delete_compute(id_press);
delete [] id_temp;
delete [] id_press;
}
/* ---------------------------------------------------------------------- */
int FixBoxRelax::setmask()
{
int mask = 0;
mask |= MIN_ENERGY;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixBoxRelax::init()
{
// set temperature and pressure ptrs
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Temperature ID for fix box/relax does not exist");
temperature = modify->compute[icompute];
icompute = modify->find_compute(id_press);
if (icompute < 0)
error->all(FLERR,"Pressure ID for fix box/relax does not exist");
pressure = modify->compute[icompute];
pv2e = 1.0 / force->nktv2p;
if (force->kspace) kspace_flag = 1;
else kspace_flag = 0;
// detect if any rigid fixes exist so rigid bodies move when box is remapped
// rfix[] = indices to each fix rigid
delete [] rfix;
nrigid = 0;
rfix = NULL;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->rigid_flag) nrigid++;
if (nrigid) {
rfix = new int[nrigid];
nrigid = 0;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->rigid_flag) rfix[nrigid++] = i;
}
// initial box dimensions
xprdinit = domain->xprd;
yprdinit = domain->yprd;
zprdinit = domain->zprd;
if (dimension == 2) zprdinit = 1.0;
vol0 = xprdinit * yprdinit * zprdinit;
h0[0] = domain->h[0];
h0[1] = domain->h[1];
h0[2] = domain->h[2];
h0[3] = domain->h[3];
h0[4] = domain->h[4];
h0[5] = domain->h[5];
// hydrostatic target pressure and deviatoric target stress
compute_press_target();
if (deviatoric_flag) compute_sigma();
}
/* ----------------------------------------------------------------------
compute energy and force due to extra degrees of freedom
------------------------------------------------------------------------- */
double FixBoxRelax::min_energy(double *fextra)
{
double eng,scale,scalex,scaley,scalez,scalevol;
temperature->compute_scalar();
if (pstyle == ISO) pressure->compute_scalar();
else {
temperature->compute_vector();
pressure->compute_vector();
}
couple();
// trigger virial computation on every iteration of minimizer
pressure->addstep(update->ntimestep+1);
// compute energy, forces for each extra degree of freedom
// returned eng = PV must be in units of energy
// returned fextra must likewise be in units of energy
if (pstyle == ISO) {
scale = domain->xprd/xprdinit;
if (dimension == 3) {
eng = pv2e * p_target[0] * (scale*scale*scale-1.0)*vol0;
fextra[0] = pv2e * (p_current[0] - p_target[0])*3.0*scale*scale*vol0;
} else {
eng = pv2e * p_target[0] * (scale*scale-1.0)*vol0;
fextra[0] = pv2e * (p_current[0] - p_target[0])*2.0*scale*vol0;
}
} else {
fextra[0] = fextra[1] = fextra[2] = 0.0;
scalex = scaley = scalez = 1.0;
if (p_flag[0]) scalex = domain->xprd/xprdinit;
if (p_flag[1]) scaley = domain->yprd/yprdinit;
if (p_flag[2]) scalez = domain->zprd/zprdinit;
scalevol = scalex*scaley*scalez;
eng = pv2e * p_hydro * (scalevol-1.0)*vol0;
if (p_flag[0])
fextra[0] = pv2e * (p_current[0] - p_hydro)*scaley*scalez*vol0;
if (p_flag[1])
fextra[1] = pv2e * (p_current[1] - p_hydro)*scalex*scalez*vol0;
if (p_flag[2])
fextra[2] = pv2e * (p_current[2] - p_hydro)*scalex*scaley*vol0;
if (pstyle == TRICLINIC) {
fextra[3] = fextra[4] = fextra[5] = 0.0;
if (p_flag[3])
fextra[3] = pv2e*p_current[3]*scaley*yprdinit*scalex*xprdinit*yprdinit;
if (p_flag[4])
fextra[4] = pv2e*p_current[4]*scalex*xprdinit*scaley*yprdinit*xprdinit;
if (p_flag[5])
fextra[5] = pv2e*p_current[5]*scalex*xprdinit*scalez*zprdinit*xprdinit;
}
if (deviatoric_flag) {
compute_deviatoric();
if (p_flag[0]) fextra[0] -= fdev[0]*xprdinit;
if (p_flag[1]) fextra[1] -= fdev[1]*yprdinit;
if (p_flag[2]) fextra[2] -= fdev[2]*zprdinit;
if (pstyle == TRICLINIC) {
if (p_flag[3]) fextra[3] -= fdev[3]*yprdinit;
if (p_flag[4]) fextra[4] -= fdev[4]*xprdinit;
if (p_flag[5]) fextra[5] -= fdev[5]*xprdinit;
}
eng += compute_strain_energy();
}
}
return eng;
}
/* ----------------------------------------------------------------------
store extra dof values for minimization linesearch starting point
boxlo0,boxhi0 = box dimensions
box values are pushed onto a LIFO stack so nested calls can be made
values are popped by calling min_step(0.0)
------------------------------------------------------------------------- */
void FixBoxRelax::min_store()
{
for (int i = 0; i < 3; i++) {
boxlo0[current_lifo][i] = domain->boxlo[i];
boxhi0[current_lifo][i] = domain->boxhi[i];
}
if (pstyle == TRICLINIC) {
boxtilt0[current_lifo][0] = domain->yz;
boxtilt0[current_lifo][1] = domain->xz;
boxtilt0[current_lifo][2] = domain->xy;
}
}
/* ----------------------------------------------------------------------
clear the LIFO stack for min_store
------------------------------------------------------------------------- */
void FixBoxRelax::min_clearstore()
{
current_lifo = 0;
}
/* ----------------------------------------------------------------------
push the LIFO stack for min_store
------------------------------------------------------------------------- */
void FixBoxRelax::min_pushstore()
{
if (current_lifo >= MAX_LIFO_DEPTH) {
error->all(FLERR,"Attempt to push beyond stack limit in fix box/relax");
return;
}
current_lifo++;
}
/* ----------------------------------------------------------------------
pop the LIFO stack for min_store
------------------------------------------------------------------------- */
void FixBoxRelax::min_popstore()
{
if (current_lifo <= 0) {
error->all(FLERR,"Attempt to pop empty stack in fix box/relax");
return;
}
current_lifo--;
}
/* ----------------------------------------------------------------------
check if time to reset reference state. If so, do so.
------------------------------------------------------------------------- */
int FixBoxRelax::min_reset_ref()
{
int itmp = 0;
// if nreset_h0 > 0, reset reference box
// every nreset_h0 timesteps
// only needed for deviatoric external stress
if (deviatoric_flag && nreset_h0 > 0) {
int delta = update->ntimestep - update->beginstep;
if (delta % nreset_h0 == 0) {
compute_sigma();
itmp = 1;
}
}
return itmp;
}
/* ----------------------------------------------------------------------
change the box dimensions by fraction ds = alpha*hextra
------------------------------------------------------------------------- */
void FixBoxRelax::min_step(double alpha, double *hextra)
{
if (pstyle == ISO) {
ds[0] = ds[1] = ds[2] = alpha*hextra[0];
} else {
ds[0] = ds[1] = ds[2] = 0.0;
if (p_flag[0]) ds[0] = alpha*hextra[0];
if (p_flag[1]) ds[1] = alpha*hextra[1];
if (p_flag[2]) ds[2] = alpha*hextra[2];
if (pstyle == TRICLINIC) {
ds[3] = ds[4] = ds[5] = 0.0;
if (p_flag[3]) ds[3] = alpha*hextra[3];
if (p_flag[4]) ds[4] = alpha*hextra[4];
if (p_flag[5]) ds[5] = alpha*hextra[5];
}
}
remap();
if (kspace_flag) force->kspace->setup();
}
/* ----------------------------------------------------------------------
max allowed step size along hextra
------------------------------------------------------------------------- */
double FixBoxRelax::max_alpha(double *hextra)
{
double alpha = 1.0;
if (pstyle == ISO) alpha = vmax/fabs(hextra[0]);
else {
if (p_flag[0]) alpha = MIN(alpha,vmax/fabs(hextra[0]));
if (p_flag[1]) alpha = MIN(alpha,vmax/fabs(hextra[1]));
if (p_flag[2]) alpha = MIN(alpha,vmax/fabs(hextra[2]));
if (pstyle == TRICLINIC) {
if (p_flag[3]) alpha = MIN(alpha,vmax/fabs(hextra[3]));
if (p_flag[4]) alpha = MIN(alpha,vmax/fabs(hextra[4]));
if (p_flag[5]) alpha = MIN(alpha,vmax/fabs(hextra[5]));
}
}
return alpha;
}
/* ----------------------------------------------------------------------
return number of degrees of freedom added by this fix
------------------------------------------------------------------------- */
int FixBoxRelax::min_dof()
{
if (pstyle == ISO) return 1;
if (pstyle == TRICLINIC) return 6;
return 3;
}
/* ----------------------------------------------------------------------
dilate the box and owned/ghost atoms around center of box
------------------------------------------------------------------------- */
void FixBoxRelax::remap()
{
int i,n;
// rescale simulation box from linesearch starting point
// scale atom coords for all atoms or only for fix group atoms
double **x = atom->x;
int *mask = atom->mask;
n = atom->nlocal + atom->nghost;
// convert pertinent atoms and rigid bodies to lamda coords
if (allremap) domain->x2lamda(n);
else {
for (i = 0; i < n; i++)
if (mask[i] & groupbit)
domain->x2lamda(x[i],x[i]);
}
if (nrigid)
for (i = 0; i < nrigid; i++)
modify->fix[rfix[i]]->deform(0);
// reset global and local box to new size/shape
for (i = 0; i < 3; i++)
if (p_flag[i]) {
double currentBoxLo0 = boxlo0[current_lifo][i];
double currentBoxHi0 = boxhi0[current_lifo][i];
domain->boxlo[i] = currentBoxLo0 + (currentBoxLo0 - fixedpoint[i])/domain->h[i]*ds[i]*h0[i];
domain->boxhi[i] = currentBoxHi0 + (currentBoxHi0 - fixedpoint[i])/domain->h[i]*ds[i]*h0[i];
if (domain->boxlo[i] >= domain->boxhi[i])
error->all(FLERR,"Fix box/relax generated negative box length");
}
// scale tilt factors with cell, if set
if (scaleyz) domain->yz = (domain->boxhi[2] - domain->boxlo[2])*h0[3]/h0[2];
if (scalexz) domain->xz = (domain->boxhi[2] - domain->boxlo[2])*h0[4]/h0[2];
if (scalexy) domain->xy = (domain->boxhi[1] - domain->boxlo[1])*h0[5]/h0[1];
if (pstyle == TRICLINIC) {
if (p_flag[3]) domain->yz = boxtilt0[current_lifo][0]+ds[3]*yprdinit;
if (p_flag[4]) domain->xz = boxtilt0[current_lifo][1]+ds[4]*xprdinit;
if (p_flag[5]) domain->xy = boxtilt0[current_lifo][2]+ds[5]*xprdinit;
}
domain->set_global_box();
domain->set_local_box();
// convert pertinent atoms and rigid bodies back to box coords
if (allremap) domain->lamda2x(n);
else {
for (i = 0; i < n; i++)
if (mask[i] & groupbit)
domain->lamda2x(x[i],x[i]);
}
if (nrigid)
for (i = 0; i < nrigid; i++)
modify->fix[rfix[i]]->deform(1);
}
/* ---------------------------------------------------------------------- */
void FixBoxRelax::couple()
{
double *tensor = pressure->vector;
if (pstyle == ISO)
p_current[0] = p_current[1] = p_current[2] = pressure->scalar;
else if (pcouple == XYZ) {
double ave = 1.0/3.0 * (tensor[0] + tensor[1] + tensor[2]);
p_current[0] = p_current[1] = p_current[2] = ave;
} else if (pcouple == XY) {
double ave = 0.5 * (tensor[0] + tensor[1]);
p_current[0] = p_current[1] = ave;
p_current[2] = tensor[2];
} else if (pcouple == YZ) {
double ave = 0.5 * (tensor[1] + tensor[2]);
p_current[1] = p_current[2] = ave;
p_current[0] = tensor[0];
} else if (pcouple == XZ) {
double ave = 0.5 * (tensor[0] + tensor[2]);
p_current[0] = p_current[2] = ave;
p_current[1] = tensor[1];
} else {
p_current[0] = tensor[0];
p_current[1] = tensor[1];
p_current[2] = tensor[2];
}
// switch order from xy-xz-yz to Voigt
if (pstyle == TRICLINIC) {
p_current[3] = tensor[5];
p_current[4] = tensor[4];
p_current[5] = tensor[3];
}
}
/* ---------------------------------------------------------------------- */
int FixBoxRelax::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"temp") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (tflag) {
modify->delete_compute(id_temp);
tflag = 0;
}
delete [] id_temp;
int n = strlen(arg[1]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[1]);
int icompute = modify->find_compute(arg[1]);
if (icompute < 0)
error->all(FLERR,"Could not find fix_modify temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,
"Fix_modify temperature ID does not compute temperature");
if (temperature->igroup != 0 && comm->me == 0)
error->warning(FLERR,"Temperature for fix modify is not for group all");
// reset id_temp of pressure to new temperature ID
icompute = modify->find_compute(id_press);
if (icompute < 0)
error->all(FLERR,"Pressure ID for fix modify does not exist");
modify->compute[icompute]->reset_extra_compute_fix(id_temp);
return 2;
} else if (strcmp(arg[0],"press") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (pflag) {
modify->delete_compute(id_press);
pflag = 0;
}
delete [] id_press;
int n = strlen(arg[1]) + 1;
id_press = new char[n];
strcpy(id_press,arg[1]);
int icompute = modify->find_compute(arg[1]);
if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID");
pressure = modify->compute[icompute];
if (pressure->pressflag == 0)
error->all(FLERR,"Fix_modify pressure ID does not compute pressure");
return 2;
}
return 0;
}
/* ----------------------------------------------------------------------
compute sigma tensor (needed whenever reference box is reset)
-----------------------------------------------------------------------*/
void FixBoxRelax::compute_sigma()
{
double pdeviatoric[3][3];
double tmp1[3][3],sigma_tensor[3][3],h_invtmp[3][3];
// reset reference box dimensions
xprdinit = domain->xprd;
yprdinit = domain->yprd;
zprdinit = domain->zprd;
if (dimension == 2) zprdinit = 1.0;
vol0 = xprdinit * yprdinit * zprdinit;
h0_inv[0] = domain->h_inv[0];
h0_inv[1] = domain->h_inv[1];
h0_inv[2] = domain->h_inv[2];
h0_inv[3] = domain->h_inv[3];
h0_inv[4] = domain->h_inv[4];
h0_inv[5] = domain->h_inv[5];
h_invtmp[0][0] = h0_inv[0];
h_invtmp[1][1] = h0_inv[1];
h_invtmp[2][2] = h0_inv[2];
h_invtmp[1][2] = h0_inv[3];
h_invtmp[0][2] = h0_inv[4];
h_invtmp[0][1] = h0_inv[5];
h_invtmp[2][1] = 0.0;
h_invtmp[2][0] = 0.0;
h_invtmp[1][0] = 0.0;
// compute target deviatoric stress tensor pdevmod
pdeviatoric[0][0] = pdeviatoric[1][1] = pdeviatoric[2][2] = 0.0;
if (p_flag[0]) pdeviatoric[0][0] = p_target[0] - p_hydro;
if (p_flag[1]) pdeviatoric[1][1] = p_target[1] - p_hydro;
if (p_flag[2]) pdeviatoric[2][2] = p_target[2] - p_hydro;
pdeviatoric[1][2] = pdeviatoric[2][1] = p_target[3];
pdeviatoric[0][2] = pdeviatoric[2][0] = p_target[4];
pdeviatoric[0][1] = pdeviatoric[1][0] = p_target[5];
// Modify to account for off-diagonal terms
// These equations come from the stationarity relation:
// Pdev,sys = Pdev,targ*hinv^t*hdiag
// where:
// Pdev,sys is the system deviatoric stress tensor,
// Pdev,targ = pdeviatoric, effective target deviatoric stress
// hinv^t is the transpose of the inverse h tensor
// hdiag is the diagonal part of the h tensor
pdeviatoric[1][1] -= pdeviatoric[1][2]*h0_inv[3]*h0[1];
pdeviatoric[0][1] -= pdeviatoric[0][2]*h0_inv[3]*h0[1];
pdeviatoric[1][0] = pdeviatoric[0][1];
pdeviatoric[0][0] -= pdeviatoric[0][1]*h0_inv[5]*h0[0] +
pdeviatoric[0][2]*h0_inv[4]*h0[0];
// compute symmetric sigma tensor
MathExtra::times3(h_invtmp,pdeviatoric,tmp1);
MathExtra::times3_transpose(tmp1,h_invtmp,sigma_tensor);
MathExtra::scalar_times3(vol0,sigma_tensor);
sigma[0] = sigma_tensor[0][0];
sigma[1] = sigma_tensor[1][1];
sigma[2] = sigma_tensor[2][2];
sigma[3] = sigma_tensor[1][2];
sigma[4] = sigma_tensor[0][2];
sigma[5] = sigma_tensor[0][1];
}
/* ----------------------------------------------------------------------
compute strain energy
-----------------------------------------------------------------------*/
double FixBoxRelax::compute_strain_energy()
{
// compute strain energy = 0.5*Tr(sigma*h*h^t) in energy units
double* h = domain->h;
double d0,d1,d2;
if (dimension == 3) {
d0 =
sigma[0]*(h[0]*h[0]+h[5]*h[5]+h[4]*h[4]) +
sigma[5]*( h[1]*h[5]+h[3]*h[4]) +
sigma[4]*( h[2]*h[4]);
d1 =
sigma[5]*( h[5]*h[1]+h[4]*h[3]) +
sigma[1]*( h[1]*h[1]+h[3]*h[3]) +
sigma[3]*( h[2]*h[3]);
d2 =
sigma[4]*( h[4]*h[2]) +
sigma[3]*( h[3]*h[2]) +
sigma[2]*( h[2]*h[2]);
} else {
d0 = sigma[0]*(h[0]*h[0]+h[5]*h[5]) + sigma[5]*h[1]*h[5];
d1 = sigma[5]*h[5]*h[1] + sigma[1]*h[1]*h[1];
d2 = 0.0;
}
double energy = 0.5*(d0+d1+d2)*pv2e;
return energy;
}
/* ----------------------------------------------------------------------
compute deviatoric barostat force = h*sigma*h^t
-----------------------------------------------------------------------*/
void FixBoxRelax::compute_deviatoric()
{
double* h = domain->h;
// [ 0 5 4 ] [ 0 5 4 ] [ 0 5 4 ]
// [ 5 1 3 ] = [ - 1 3 ] [ 5 1 3 ]
// [ 4 3 2 ] [ - - 2 ] [ 4 3 2 ]
if (dimension == 3) {
fdev[0] = pv2e*(h[0]*sigma[0]+h[5]*sigma[5]+h[4]*sigma[4]);
fdev[1] = pv2e*(h[1]*sigma[1]+h[3]*sigma[3]);
fdev[2] = pv2e*(h[2]*sigma[2]);
fdev[3] = pv2e*(h[1]*sigma[3]+h[3]*sigma[2]);
fdev[4] = pv2e*(h[0]*sigma[4]+h[5]*sigma[3]+h[4]*sigma[2]);
fdev[5] = pv2e*(h[0]*sigma[5]+h[5]*sigma[1]+h[4]*sigma[3]);
} else {
fdev[0] = pv2e*(h[0]*sigma[0]+h[5]*sigma[5]);
fdev[1] = pv2e*(h[1]*sigma[1]);
fdev[5] = pv2e*(h[0]*sigma[5]+h[5]*sigma[1]);
}
}
/* ----------------------------------------------------------------------
compute hydrostatic target pressure
-----------------------------------------------------------------------*/
void FixBoxRelax::compute_press_target()
{
pflagsum = p_flag[0] + p_flag[1] + p_flag[2];
p_hydro = 0.0;
for (int i = 0; i < 3; i++)
if (p_flag[i]) p_hydro += p_target[i];
if (pflagsum) p_hydro /= pflagsum;
for (int i = 0; i < 3; i++) {
if (p_flag[i] && fabs(p_hydro - p_target[i]) > 1.0e-6) deviatoric_flag = 1;
}
if (pstyle == TRICLINIC) {
for (int i = 3; i < 6; i++)
if (p_flag[i] && fabs(p_target[i]) > 1.0e-6) deviatoric_flag = 1;
}
}
/* ----------------------------------------------------------------------
compute PV and strain energy for access to the user
---------------------------------------------------------------------- */
double FixBoxRelax::compute_scalar()
{
double ftmp[6] = {0.0,0.0,0.0,0.0,0.0,0.0};
if (update->ntimestep == 0) return 0.0;
return min_energy(ftmp);
}
diff --git a/src/fix_controller.cpp b/src/fix_controller.cpp
index 28f287391..ee3e97c94 100644
--- a/src/fix_controller.cpp
+++ b/src/fix_controller.cpp
@@ -1,275 +1,274 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include "fix_controller.h"
#include "force.h"
#include "update.h"
#include "modify.h"
#include "compute.h"
#include "input.h"
#include "variable.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{COMPUTE,FIX,VARIABLE};
#define INVOKED_SCALAR 1
#define INVOKED_VECTOR 2
/* ---------------------------------------------------------------------- */
FixController::FixController(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ pvID(NULL), cvID(NULL)
{
if (narg != 11) error->all(FLERR,"Illegal fix controller command");
vector_flag = 1;
size_vector = 3;
global_freq = 1;
extvector = 0;
nevery = force->inumeric(FLERR,arg[3]);
if (nevery <= 0) error->all(FLERR,"Illegal fix controller command");
alpha = force->numeric(FLERR,arg[4]);
kp = force->numeric(FLERR,arg[5]);
ki = force->numeric(FLERR,arg[6]);
kd = force->numeric(FLERR,arg[7]);
- pvID = cvID = NULL;
-
// process variable arg
int iarg = 8;
if (strncmp(arg[iarg],"c_",2) == 0 ||
strncmp(arg[iarg],"f_",2) == 0 ||
strncmp(arg[iarg],"v_",2) == 0) {
if (arg[iarg][0] == 'c') pvwhich = COMPUTE;
else if (arg[iarg][0] == 'f') pvwhich = FIX;
else if (arg[iarg][0] == 'v') pvwhich = VARIABLE;
int n = strlen(arg[iarg]);
char *suffix = new char[n];
strcpy(suffix,&arg[iarg][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Illegal fix controller command");
pvindex = atoi(ptr+1);
*ptr = '\0';
} else pvindex = 0;
n = strlen(suffix) + 1;
pvID = new char[n];
strcpy(pvID,suffix);
delete [] suffix;
iarg++;
} else error->all(FLERR,"Illegal fix controller command");
// setpoint arg
setpoint = force->numeric(FLERR,arg[iarg]);
iarg++;
// control variable arg
int n = strlen(arg[iarg]) + 1;
cvID = new char[n];
strcpy(cvID,arg[iarg]);
// error check
if (pvwhich == COMPUTE) {
int icompute = modify->find_compute(pvID);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix controller does not exist");
Compute *c = modify->compute[icompute];
int flag = 0;
if (c->scalar_flag && pvindex == 0) flag = 1;
else if (c->vector_flag && pvindex > 0) flag = 1;
if (!flag) error->all(FLERR,"Fix controller compute does not "
"calculate a global scalar or vector");
if (pvindex && pvindex > c->size_vector)
error->all(FLERR,"Fix controller compute vector is "
"accessed out-of-range");
} else if (pvwhich == FIX) {
int ifix = modify->find_fix(pvID);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix controller does not exist");
Fix *f = modify->fix[ifix];
int flag = 0;
if (f->scalar_flag && pvindex == 0) flag = 1;
else if (f->vector_flag && pvindex > 0) flag = 1;
if (!flag) error->all(FLERR,"Fix controller fix does not "
"calculate a global scalar or vector");
if (pvindex && pvindex > f->size_vector)
error->all(FLERR,"Fix controller fix vector is accessed out-of-range");
} else if (pvwhich == FIX) {
int ivariable = input->variable->find(pvID);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix controller does not exist");
if (input->variable->equalstyle(ivariable) == 0)
error->all(FLERR,"Fix controller variable is not equal-style variable");
}
int ivariable = input->variable->find(cvID);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix controller does not exist");
if (input->variable->internalstyle(ivariable) == 0)
error->all(FLERR,"Fix controller variable is not internal-style variable");
control = input->variable->compute_equal(ivariable);
firsttime = 1;
}
/* ---------------------------------------------------------------------- */
FixController::~FixController()
{
delete [] pvID;
delete [] cvID;
}
/* ---------------------------------------------------------------------- */
int FixController::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixController::init()
{
if (pvwhich == COMPUTE) {
int icompute = modify->find_compute(pvID);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix controller does not exist");
pcompute = modify->compute[icompute];
} else if (pvwhich == FIX) {
int ifix = modify->find_fix(pvID);
if (ifix < 0) error->all(FLERR,"Fix ID for fix controller does not exist");
pfix = modify->fix[ifix];
} else if (pvwhich == VARIABLE) {
pvar = input->variable->find(pvID);
if (pvar < 0)
error->all(FLERR,"Variable name for fix controller does not exist");
}
cvar = input->variable->find(cvID);
if (cvar < 0)
error->all(FLERR,"Variable name for fix controller does not exist");
// set sampling time
tau = nevery * update->dt;
}
/* ---------------------------------------------------------------------- */
void FixController::end_of_step()
{
// current value of pv = invocation of compute,fix,variable
// compute/fix/variable may invoke computes so wrap with clear/add
modify->clearstep_compute();
// invoke compute if not previously invoked
- double current;
+ double current = 0.0;
if (pvwhich == COMPUTE) {
if (pvindex == 0) {
if (!(pcompute->invoked_flag & INVOKED_SCALAR)) {
pcompute->compute_scalar();
pcompute->invoked_flag |= INVOKED_SCALAR;
}
current = pcompute->scalar;
} else {
if (!(pcompute->invoked_flag & INVOKED_VECTOR)) {
pcompute->compute_vector();
pcompute->invoked_flag |= INVOKED_VECTOR;
}
current = pcompute->vector[pvindex-1];
}
// access fix field, guaranteed to be ready
} else if (pvwhich == FIX) {
if (pvindex == 0) current = pfix->compute_scalar();
else current = pfix->compute_vector(pvindex-1);
// evaluate equal-style variable
} else if (pvwhich == VARIABLE) {
current = input->variable->compute_equal(pvar);
}
modify->addstep_compute(update->ntimestep + nevery);
// new control var = f(old value, current process var, setpoint)
// cv = cvold -kp*err -ki*sumerr -kd*deltaerr
// note: this deviates from standard notation, which is
// cv = kp*err +ki*sumerr +kd*deltaerr
// the difference is in the sign and the time integral
err = current - setpoint;
if (firsttime) {
firsttime = 0;
deltaerr = sumerr = 0.0;
} else {
deltaerr = err - olderr;
sumerr += err;
}
// 3 terms of PID equation
control += -kp * alpha * tau * err;
control += -ki * alpha * tau * tau * sumerr;
control += -kd * alpha * deltaerr;
olderr = err;
// reset control variable
input->variable->internal_set(cvar,control);
}
/* ---------------------------------------------------------------------- */
void FixController::reset_dt()
{
tau = nevery * update->dt;
}
/* ----------------------------------------------------------------------
return 3 terms of PID controller at last invocation of end_of_step()
------------------------------------------------------------------------- */
double FixController::compute_vector(int n)
{
if (n == 0) return (-kp * alpha * tau * err);
else if (n == 1) return (-ki * alpha * tau * tau * sumerr);
else return (-kd * alpha * deltaerr);
}
diff --git a/src/fix_deform.cpp b/src/fix_deform.cpp
index 7003b4d39..171a90ba3 100644
--- a/src/fix_deform.cpp
+++ b/src/fix_deform.cpp
@@ -1,1000 +1,1002 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Pieter in 't Veld (SNL)
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "fix_deform.h"
#include "atom.h"
#include "update.h"
#include "comm.h"
#include "irregular.h"
#include "domain.h"
#include "lattice.h"
#include "force.h"
#include "modify.h"
#include "math_const.h"
#include "kspace.h"
#include "input.h"
#include "variable.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
using namespace MathConst;
enum{NONE,FINAL,DELTA,SCALE,VEL,ERATE,TRATE,VOLUME,WIGGLE,VARIABLE};
enum{ONE_FROM_ONE,ONE_FROM_TWO,TWO_FROM_ONE};
// same as domain.cpp, fix_nvt_sllod.cpp, compute_temp_deform.cpp
enum{NO_REMAP,X_REMAP,V_REMAP};
/* ---------------------------------------------------------------------- */
-FixDeform::FixDeform(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
+FixDeform::FixDeform(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg),
+rfix(NULL), irregular(NULL), set(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal fix deform command");
no_change_box = 1;
nevery = force->inumeric(FLERR,arg[3]);
if (nevery <= 0) error->all(FLERR,"Illegal fix deform command");
// set defaults
set = new Set[6];
set[0].style = set[1].style = set[2].style =
set[3].style = set[4].style = set[5].style = NONE;
set[0].hstr = set[1].hstr = set[2].hstr =
set[3].hstr = set[4].hstr = set[5].hstr = NULL;
set[0].hratestr = set[1].hratestr = set[2].hratestr =
set[3].hratestr = set[4].hratestr = set[5].hratestr = NULL;
// parse arguments
triclinic = domain->triclinic;
int index;
int iarg = 4;
while (iarg < narg) {
if (strcmp(arg[iarg],"x") == 0 ||
strcmp(arg[iarg],"y") == 0 ||
strcmp(arg[iarg],"z") == 0) {
if (strcmp(arg[iarg],"x") == 0) index = 0;
else if (strcmp(arg[iarg],"y") == 0) index = 1;
else if (strcmp(arg[iarg],"z") == 0) index = 2;
if (iarg+2 > narg) error->all(FLERR,"Illegal fix deform command");
if (strcmp(arg[iarg+1],"final") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = FINAL;
set[index].flo = force->numeric(FLERR,arg[iarg+2]);
set[index].fhi = force->numeric(FLERR,arg[iarg+3]);
iarg += 4;
} else if (strcmp(arg[iarg+1],"delta") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = DELTA;
set[index].dlo = force->numeric(FLERR,arg[iarg+2]);
set[index].dhi = force->numeric(FLERR,arg[iarg+3]);
iarg += 4;
} else if (strcmp(arg[iarg+1],"scale") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = SCALE;
set[index].scale = force->numeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg+1],"vel") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = VEL;
set[index].vel = force->numeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg+1],"erate") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = ERATE;
set[index].rate = force->numeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg+1],"trate") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = TRATE;
set[index].rate = force->numeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg+1],"volume") == 0) {
set[index].style = VOLUME;
iarg += 2;
} else if (strcmp(arg[iarg+1],"wiggle") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = WIGGLE;
set[index].amplitude = force->numeric(FLERR,arg[iarg+2]);
set[index].tperiod = force->numeric(FLERR,arg[iarg+3]);
if (set[index].tperiod <= 0.0)
error->all(FLERR,"Illegal fix deform command");
iarg += 4;
} else if (strcmp(arg[iarg+1],"variable") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = VARIABLE;
if (strstr(arg[iarg+2],"v_") != arg[iarg+2])
error->all(FLERR,"Illegal fix deform command");
if (strstr(arg[iarg+3],"v_") != arg[iarg+3])
error->all(FLERR,"Illegal fix deform command");
delete [] set[index].hstr;
delete [] set[index].hratestr;
int n = strlen(&arg[iarg+2][2]) + 1;
set[index].hstr = new char[n];
strcpy(set[index].hstr,&arg[iarg+2][2]);
n = strlen(&arg[iarg+3][2]) + 1;
set[index].hratestr = new char[n];
strcpy(set[index].hratestr,&arg[iarg+3][2]);
iarg += 4;
} else error->all(FLERR,"Illegal fix deform command");
} else if (strcmp(arg[iarg],"xy") == 0 ||
strcmp(arg[iarg],"xz") == 0 ||
strcmp(arg[iarg],"yz") == 0) {
if (triclinic == 0)
error->all(FLERR,"Fix deform tilt factors require triclinic box");
if (strcmp(arg[iarg],"xy") == 0) index = 5;
else if (strcmp(arg[iarg],"xz") == 0) index = 4;
else if (strcmp(arg[iarg],"yz") == 0) index = 3;
if (iarg+2 > narg) error->all(FLERR,"Illegal fix deform command");
if (strcmp(arg[iarg+1],"final") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = FINAL;
set[index].ftilt = force->numeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg+1],"delta") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = DELTA;
set[index].dtilt = force->numeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg+1],"vel") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = VEL;
set[index].vel = force->numeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg+1],"erate") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = ERATE;
set[index].rate = force->numeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg+1],"trate") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = TRATE;
set[index].rate = force->numeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg+1],"wiggle") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = WIGGLE;
set[index].amplitude = force->numeric(FLERR,arg[iarg+2]);
set[index].tperiod = force->numeric(FLERR,arg[iarg+3]);
if (set[index].tperiod <= 0.0)
error->all(FLERR,"Illegal fix deform command");
iarg += 4;
} else if (strcmp(arg[iarg+1],"variable") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix deform command");
set[index].style = VARIABLE;
if (strstr(arg[iarg+2],"v_") != arg[iarg+2])
error->all(FLERR,"Illegal fix deform command");
if (strstr(arg[iarg+3],"v_") != arg[iarg+3])
error->all(FLERR,"Illegal fix deform command");
delete [] set[index].hstr;
delete [] set[index].hratestr;
int n = strlen(&arg[iarg+2][2]) + 1;
set[index].hstr = new char[n];
strcpy(set[index].hstr,&arg[iarg+2][2]);
n = strlen(&arg[iarg+3][2]) + 1;
set[index].hratestr = new char[n];
strcpy(set[index].hratestr,&arg[iarg+3][2]);
iarg += 4;
} else error->all(FLERR,"Illegal fix deform command");
} else break;
}
// read options from end of input line
// no x remap effectively moves atoms within box, so set restart_pbc
options(narg-iarg,&arg[iarg]);
if (remapflag != X_REMAP) restart_pbc = 1;
// setup dimflags used by other classes to check for volume-change conflicts
for (int i = 0; i < 6; i++)
if (set[i].style == NONE) dimflag[i] = 0;
else dimflag[i] = 1;
if (dimflag[0] || dimflag[1] || dimflag[2]) box_change_size = 1;
if (dimflag[3] || dimflag[4] || dimflag[5]) box_change_shape = 1;
// no tensile deformation on shrink-wrapped dims
// b/c shrink wrap will change box-length
if (set[0].style &&
(domain->boundary[0][0] >= 2 || domain->boundary[0][1] >= 2))
error->all(FLERR,"Cannot use fix deform on a shrink-wrapped boundary");
if (set[1].style &&
(domain->boundary[1][0] >= 2 || domain->boundary[1][1] >= 2))
error->all(FLERR,"Cannot use fix deform on a shrink-wrapped boundary");
if (set[2].style &&
(domain->boundary[2][0] >= 2 || domain->boundary[2][1] >= 2))
error->all(FLERR,"Cannot use fix deform on a shrink-wrapped boundary");
// no tilt deformation on shrink-wrapped 2nd dim
// b/c shrink wrap will change tilt factor in domain::reset_box()
if (set[3].style &&
(domain->boundary[2][0] >= 2 || domain->boundary[2][1] >= 2))
error->all(FLERR,"Cannot use fix deform tilt on a shrink-wrapped 2nd dim");
if (set[4].style &&
(domain->boundary[2][0] >= 2 || domain->boundary[2][1] >= 2))
error->all(FLERR,"Cannot use fix deform tilt on a shrink-wrapped 2nd dim");
if (set[5].style &&
(domain->boundary[1][0] >= 2 || domain->boundary[1][1] >= 2))
error->all(FLERR,"Cannot use fix deform tilt on a shrink-wrapped 2nd dim");
// apply scaling to FINAL,DELTA,VEL,WIGGLE since they have dist/vel units
int flag = 0;
for (int i = 0; i < 6; i++)
if (set[i].style == FINAL || set[i].style == DELTA ||
set[i].style == VEL || set[i].style == WIGGLE) flag = 1;
double xscale,yscale,zscale;
if (flag && scaleflag) {
xscale = domain->lattice->xlattice;
yscale = domain->lattice->ylattice;
zscale = domain->lattice->zlattice;
}
else xscale = yscale = zscale = 1.0;
// for 3,4,5: scaling is in 1st dimension, e.g. x for xz
double map[6];
map[0] = xscale; map[1] = yscale; map[2] = zscale;
map[3] = yscale; map[4] = xscale; map[5] = xscale;
for (int i = 0; i < 3; i++) {
if (set[i].style == FINAL) {
set[i].flo *= map[i];
set[i].fhi *= map[i];
} else if (set[i].style == DELTA) {
set[i].dlo *= map[i];
set[i].dhi *= map[i];
} else if (set[i].style == VEL) {
set[i].vel *= map[i];
} else if (set[i].style == WIGGLE) {
set[i].amplitude *= map[i];
}
}
for (int i = 3; i < 6; i++) {
if (set[i].style == FINAL) set[i].ftilt *= map[i];
else if (set[i].style == DELTA) set[i].dtilt *= map[i];
else if (set[i].style == VEL) set[i].vel *= map[i];
else if (set[i].style == WIGGLE) set[i].amplitude *= map[i];
}
// for VOLUME, setup links to other dims
// fixed, dynamic1, dynamic2
for (int i = 0; i < 3; i++) {
if (set[i].style != VOLUME) continue;
int other1 = (i+1) % 3;
int other2 = (i+2) % 3;
if (set[other1].style == NONE) {
if (set[other2].style == NONE || set[other2].style == VOLUME)
error->all(FLERR,"Fix deform volume setting is invalid");
set[i].substyle = ONE_FROM_ONE;
set[i].fixed = other1;
set[i].dynamic1 = other2;
} else if (set[other2].style == NONE) {
if (set[other1].style == NONE || set[other1].style == VOLUME)
error->all(FLERR,"Fix deform volume setting is invalid");
set[i].substyle = ONE_FROM_ONE;
set[i].fixed = other2;
set[i].dynamic1 = other1;
} else if (set[other1].style == VOLUME) {
if (set[other2].style == NONE || set[other2].style == VOLUME)
error->all(FLERR,"Fix deform volume setting is invalid");
set[i].substyle = TWO_FROM_ONE;
set[i].fixed = other1;
set[i].dynamic1 = other2;
} else if (set[other2].style == VOLUME) {
if (set[other1].style == NONE || set[other1].style == VOLUME)
error->all(FLERR,"Fix deform volume setting is invalid");
set[i].substyle = TWO_FROM_ONE;
set[i].fixed = other2;
set[i].dynamic1 = other1;
} else {
set[i].substyle = ONE_FROM_TWO;
set[i].dynamic1 = other1;
set[i].dynamic2 = other2;
}
}
// set varflag
varflag = 0;
for (int i = 0; i < 6; i++)
if (set[i].style == VARIABLE) varflag = 1;
// set initial values at time fix deform is issued
for (int i = 0; i < 3; i++) {
set[i].lo_initial = domain->boxlo[i];
set[i].hi_initial = domain->boxhi[i];
set[i].vol_initial = domain->xprd * domain->yprd * domain->zprd;
}
for (int i = 3; i < 6; i++) {
if (i == 5) set[i].tilt_initial = domain->xy;
else if (i == 4) set[i].tilt_initial = domain->xz;
else if (i == 3) set[i].tilt_initial = domain->yz;
}
// reneighboring only forced if flips can occur due to shape changes
if (flipflag && (set[3].style || set[4].style || set[5].style))
force_reneighbor = 1;
next_reneighbor = -1;
nrigid = 0;
- rfix = NULL;
flip = 0;
if (force_reneighbor) irregular = new Irregular(lmp);
else irregular = NULL;
TWOPI = 2.0*MY_PI;
}
/* ---------------------------------------------------------------------- */
FixDeform::~FixDeform()
{
- for (int i = 0; i < 6; i++) {
- delete [] set[i].hstr;
- delete [] set[i].hratestr;
+ if(set) {
+ for (int i = 0; i < 6; i++) {
+ delete [] set[i].hstr;
+ delete [] set[i].hratestr;
+ }
}
delete [] set;
delete [] rfix;
delete irregular;
// reset domain's h_rate = 0.0, since this fix may have made it non-zero
double *h_rate = domain->h_rate;
double *h_ratelo = domain->h_ratelo;
h_rate[0] = h_rate[1] = h_rate[2] =
h_rate[3] = h_rate[4] = h_rate[5] = 0.0;
h_ratelo[0] = h_ratelo[1] = h_ratelo[2] = 0.0;
}
/* ---------------------------------------------------------------------- */
int FixDeform::setmask()
{
int mask = 0;
if (force_reneighbor) mask |= PRE_EXCHANGE;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixDeform::init()
{
// error if more than one fix deform
// domain, fix nvt/sllod, compute temp/deform only work on single h_rate
int count = 0;
for (int i = 0; i < modify->nfix; i++)
if (strcmp(modify->fix[i]->style,"deform") == 0) count++;
if (count > 1) error->all(FLERR,"More than one fix deform");
// Kspace setting
if (force->kspace) kspace_flag = 1;
else kspace_flag = 0;
// elapsed time for entire simulation, including multiple runs if defined
double delt = (update->endstep - update->beginstep) * update->dt;
// check variables for VARIABLE style
for (int i = 0; i < 6; i++) {
if (set[i].style != VARIABLE) continue;
set[i].hvar = input->variable->find(set[i].hstr);
if (set[i].hvar < 0)
error->all(FLERR,"Variable name for fix deform does not exist");
if (!input->variable->equalstyle(set[i].hvar))
error->all(FLERR,"Variable for fix deform is invalid style");
set[i].hratevar = input->variable->find(set[i].hratestr);
if (set[i].hratevar < 0)
error->all(FLERR,"Variable name for fix deform does not exist");
if (!input->variable->equalstyle(set[i].hratevar))
error->all(FLERR,"Variable for fix deform is invalid style");
}
// set start/stop values for box size and shape
// if single run, start is current values
// if multiple runs enabled via run start/stop settings,
// start is value when fix deform was issued
// if VARIABLE or NONE, no need to set
for (int i = 0; i < 3; i++) {
if (update->firststep == update->beginstep) {
set[i].lo_start = domain->boxlo[i];
set[i].hi_start = domain->boxhi[i];
set[i].vol_start = domain->xprd * domain->yprd * domain->zprd;
} else {
set[i].lo_start = set[i].lo_initial;
set[i].hi_start = set[i].hi_initial;
set[i].vol_start = set[i].vol_initial;
}
if (set[i].style == FINAL) {
set[i].lo_stop = set[i].flo;
set[i].hi_stop = set[i].fhi;
} else if (set[i].style == DELTA) {
set[i].lo_stop = set[i].lo_start + set[i].dlo;
set[i].hi_stop = set[i].hi_start + set[i].dhi;
} else if (set[i].style == SCALE) {
set[i].lo_stop = 0.5*(set[i].lo_start+set[i].hi_start) -
0.5*set[i].scale*(set[i].hi_start-set[i].lo_start);
set[i].hi_stop = 0.5*(set[i].lo_start+set[i].hi_start) +
0.5*set[i].scale*(set[i].hi_start-set[i].lo_start);
} else if (set[i].style == VEL) {
set[i].lo_stop = set[i].lo_start - 0.5*delt*set[i].vel;
set[i].hi_stop = set[i].hi_start + 0.5*delt*set[i].vel;
} else if (set[i].style == ERATE) {
set[i].lo_stop = set[i].lo_start -
0.5*delt*set[i].rate * (set[i].hi_start-set[i].lo_start);
set[i].hi_stop = set[i].hi_start +
0.5*delt*set[i].rate * (set[i].hi_start-set[i].lo_start);
if (set[i].hi_stop <= set[i].lo_stop)
error->all(FLERR,"Final box dimension due to fix deform is < 0.0");
} else if (set[i].style == TRATE) {
set[i].lo_stop = 0.5*(set[i].lo_start+set[i].hi_start) -
0.5*((set[i].hi_start-set[i].lo_start) * exp(set[i].rate*delt));
set[i].hi_stop = 0.5*(set[i].lo_start+set[i].hi_start) +
0.5*((set[i].hi_start-set[i].lo_start) * exp(set[i].rate*delt));
} else if (set[i].style == WIGGLE) {
set[i].lo_stop = set[i].lo_start -
0.5*set[i].amplitude * sin(TWOPI*delt/set[i].tperiod);
set[i].hi_stop = set[i].hi_start +
0.5*set[i].amplitude * sin(TWOPI*delt/set[i].tperiod);
}
}
for (int i = 3; i < 6; i++) {
if (update->firststep == update->beginstep) {
if (i == 5) set[i].tilt_start = domain->xy;
else if (i == 4) set[i].tilt_start = domain->xz;
else if (i == 3) set[i].tilt_start = domain->yz;
} else set[i].tilt_start = set[i].tilt_initial;
if (set[i].style == FINAL) {
set[i].tilt_stop = set[i].ftilt;
} else if (set[i].style == DELTA) {
set[i].tilt_stop = set[i].tilt_start + set[i].dtilt;
} else if (set[i].style == VEL) {
set[i].tilt_stop = set[i].tilt_start + delt*set[i].vel;
} else if (set[i].style == ERATE) {
if (i == 3) set[i].tilt_stop = set[i].tilt_start +
delt*set[i].rate * (set[2].hi_start-set[2].lo_start);
if (i == 4) set[i].tilt_stop = set[i].tilt_start +
delt*set[i].rate * (set[2].hi_start-set[2].lo_start);
if (i == 5) set[i].tilt_stop = set[i].tilt_start +
delt*set[i].rate * (set[1].hi_start-set[1].lo_start);
} else if (set[i].style == TRATE) {
set[i].tilt_stop = set[i].tilt_start * exp(set[i].rate*delt);
} else if (set[i].style == WIGGLE) {
set[i].tilt_stop = set[i].tilt_start +
set[i].amplitude * sin(TWOPI*delt/set[i].tperiod);
// compute min/max for WIGGLE = extrema tilt factor will ever reach
if (set[i].amplitude >= 0.0) {
if (delt < 0.25*set[i].tperiod) {
set[i].tilt_min = set[i].tilt_start;
set[i].tilt_max = set[i].tilt_start +
set[i].amplitude*sin(TWOPI*delt/set[i].tperiod);
} else if (delt < 0.5*set[i].tperiod) {
set[i].tilt_min = set[i].tilt_start;
set[i].tilt_max = set[i].tilt_start + set[i].amplitude;
} else if (delt < 0.75*set[i].tperiod) {
set[i].tilt_min = set[i].tilt_start -
set[i].amplitude*sin(TWOPI*delt/set[i].tperiod);
set[i].tilt_max = set[i].tilt_start + set[i].amplitude;
} else {
set[i].tilt_min = set[i].tilt_start - set[i].amplitude;
set[i].tilt_max = set[i].tilt_start + set[i].amplitude;
}
} else {
if (delt < 0.25*set[i].tperiod) {
set[i].tilt_min = set[i].tilt_start -
set[i].amplitude*sin(TWOPI*delt/set[i].tperiod);
set[i].tilt_max = set[i].tilt_start;
} else if (delt < 0.5*set[i].tperiod) {
set[i].tilt_min = set[i].tilt_start - set[i].amplitude;
set[i].tilt_max = set[i].tilt_start;
} else if (delt < 0.75*set[i].tperiod) {
set[i].tilt_min = set[i].tilt_start - set[i].amplitude;
set[i].tilt_max = set[i].tilt_start +
set[i].amplitude*sin(TWOPI*delt/set[i].tperiod);
} else {
set[i].tilt_min = set[i].tilt_start - set[i].amplitude;
set[i].tilt_max = set[i].tilt_start + set[i].amplitude;
}
}
}
}
// if using tilt TRATE, then initial tilt must be non-zero
for (int i = 3; i < 6; i++)
if (set[i].style == TRATE && set[i].tilt_start == 0.0)
error->all(FLERR,"Cannot use fix deform trate on a box with zero tilt");
// if yz changes and will cause box flip, then xy cannot be changing
// yz = [3], xy = [5]
// this is b/c the flips would induce continuous changes in xz
// in order to keep the edge vectors of the flipped shape matrix
// an integer combination of the edge vectors of the unflipped shape matrix
// VARIABLE for yz is error, since no way to calculate if box flip occurs
// WIGGLE lo/hi flip test is on min/max oscillation limit, not tilt_stop
// only trigger actual errors if flipflag is set
if (set[3].style && set[5].style) {
int flag = 0;
double lo,hi;
if (flipflag && set[3].style == VARIABLE)
error->all(FLERR,"Fix deform cannot use yz variable with xy");
if (set[3].style == WIGGLE) {
lo = set[3].tilt_min;
hi = set[3].tilt_max;
} else lo = hi = set[3].tilt_stop;
if (flipflag) {
if (lo/(set[1].hi_start-set[1].lo_start) < -0.5 ||
hi/(set[1].hi_start-set[1].lo_start) > 0.5) flag = 1;
if (set[1].style) {
if (lo/(set[1].hi_stop-set[1].lo_stop) < -0.5 ||
hi/(set[1].hi_stop-set[1].lo_stop) > 0.5) flag = 1;
}
if (flag)
error->all(FLERR,"Fix deform is changing yz too much with xy");
}
}
// set domain->h_rate values for use by domain and other fixes/computes
// initialize all rates to 0.0
// cannot set here for TRATE,VOLUME,WIGGLE,VARIABLE since not constant
h_rate = domain->h_rate;
h_ratelo = domain->h_ratelo;
for (int i = 0; i < 3; i++) {
h_rate[i] = h_ratelo[i] = 0.0;
if (set[i].style == FINAL || set[i].style == DELTA ||
set[i].style == SCALE || set[i].style == VEL ||
set[i].style == ERATE) {
double dlo_dt,dhi_dt;
if (delt != 0.0) {
dlo_dt = (set[i].lo_stop - set[i].lo_start) / delt;
dhi_dt = (set[i].hi_stop - set[i].hi_start) / delt;
} else dlo_dt = dhi_dt = 0.0;
h_rate[i] = dhi_dt - dlo_dt;
h_ratelo[i] = dlo_dt;
}
}
for (int i = 3; i < 6; i++) {
h_rate[i] = 0.0;
if (set[i].style == FINAL || set[i].style == DELTA ||
set[i].style == VEL || set[i].style == ERATE) {
if (delt != 0.0)
h_rate[i] = (set[i].tilt_stop - set[i].tilt_start) / delt;
else h_rate[i] = 0.0;
}
}
// detect if any rigid fixes exist so rigid bodies can be rescaled
// rfix[] = indices to each fix rigid
delete [] rfix;
nrigid = 0;
rfix = NULL;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->rigid_flag) nrigid++;
if (nrigid) {
rfix = new int[nrigid];
nrigid = 0;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->rigid_flag) rfix[nrigid++] = i;
}
}
/* ----------------------------------------------------------------------
box flipped on previous step
reset box tilts for flipped config and create new box in domain
image_flip() adjusts image flags due to box shape change induced by flip
remap() puts atoms outside the new box back into the new box
perform irregular on atoms in lamda coords to migrate atoms to new procs
important that image_flip comes before remap, since remap may change
image flags to new values, making eqs in doc of Domain:image_flip incorrect
------------------------------------------------------------------------- */
void FixDeform::pre_exchange()
{
if (flip == 0) return;
domain->yz = set[3].tilt_target = set[3].tilt_flip;
domain->xz = set[4].tilt_target = set[4].tilt_flip;
domain->xy = set[5].tilt_target = set[5].tilt_flip;
domain->set_global_box();
domain->set_local_box();
domain->image_flip(flipxy,flipxz,flipyz);
double **x = atom->x;
imageint *image = atom->image;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) domain->remap(x[i],image[i]);
domain->x2lamda(atom->nlocal);
irregular->migrate_atoms();
domain->lamda2x(atom->nlocal);
flip = 0;
}
/* ---------------------------------------------------------------------- */
void FixDeform::end_of_step()
{
int i;
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
// wrap variable evaluations with clear/add
if (varflag) modify->clearstep_compute();
// set new box size
// for NONE, target is current box size
// for TRATE, set target directly based on current time, also set h_rate
// for WIGGLE, set target directly based on current time, also set h_rate
// for VARIABLE, set target directly via variable eval, also set h_rate
// for others except VOLUME, target is linear value between start and stop
for (i = 0; i < 3; i++) {
if (set[i].style == NONE) {
set[i].lo_target = domain->boxlo[i];
set[i].hi_target = domain->boxhi[i];
} else if (set[i].style == TRATE) {
double delt = (update->ntimestep - update->beginstep) * update->dt;
set[i].lo_target = 0.5*(set[i].lo_start+set[i].hi_start) -
0.5*((set[i].hi_start-set[i].lo_start) * exp(set[i].rate*delt));
set[i].hi_target = 0.5*(set[i].lo_start+set[i].hi_start) +
0.5*((set[i].hi_start-set[i].lo_start) * exp(set[i].rate*delt));
h_rate[i] = set[i].rate * domain->h[i];
h_ratelo[i] = -0.5*h_rate[i];
} else if (set[i].style == WIGGLE) {
double delt = (update->ntimestep - update->beginstep) * update->dt;
set[i].lo_target = set[i].lo_start -
0.5*set[i].amplitude * sin(TWOPI*delt/set[i].tperiod);
set[i].hi_target = set[i].hi_start +
0.5*set[i].amplitude * sin(TWOPI*delt/set[i].tperiod);
h_rate[i] = TWOPI/set[i].tperiod * set[i].amplitude *
cos(TWOPI*delt/set[i].tperiod);
h_ratelo[i] = -0.5*h_rate[i];
} else if (set[i].style == VARIABLE) {
double del = input->variable->compute_equal(set[i].hvar);
set[i].lo_target = set[i].lo_start - 0.5*del;
set[i].hi_target = set[i].hi_start + 0.5*del;
h_rate[i] = input->variable->compute_equal(set[i].hratevar);
h_ratelo[i] = -0.5*h_rate[i];
} else if (set[i].style != VOLUME) {
set[i].lo_target = set[i].lo_start +
delta*(set[i].lo_stop - set[i].lo_start);
set[i].hi_target = set[i].hi_start +
delta*(set[i].hi_stop - set[i].hi_start);
}
}
// set new box size for VOLUME dims that are linked to other dims
// NOTE: still need to set h_rate for these dims
for (int i = 0; i < 3; i++) {
if (set[i].style != VOLUME) continue;
if (set[i].substyle == ONE_FROM_ONE) {
set[i].lo_target = 0.5*(set[i].lo_start+set[i].hi_start) -
0.5*(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].fixed].hi_start-set[set[i].fixed].lo_start));
set[i].hi_target = 0.5*(set[i].lo_start+set[i].hi_start) +
0.5*(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].fixed].hi_start-set[set[i].fixed].lo_start));
} else if (set[i].substyle == ONE_FROM_TWO) {
set[i].lo_target = 0.5*(set[i].lo_start+set[i].hi_start) -
0.5*(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].dynamic2].hi_target -
set[set[i].dynamic2].lo_target));
set[i].hi_target = 0.5*(set[i].lo_start+set[i].hi_start) +
0.5*(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].dynamic2].hi_target -
set[set[i].dynamic2].lo_target));
} else if (set[i].substyle == TWO_FROM_ONE) {
set[i].lo_target = 0.5*(set[i].lo_start+set[i].hi_start) -
0.5*sqrt(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].fixed].hi_start -
set[set[i].fixed].lo_start) *
(set[i].hi_start - set[i].lo_start));
set[i].hi_target = 0.5*(set[i].lo_start+set[i].hi_start) +
0.5*sqrt(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].fixed].hi_start -
set[set[i].fixed].lo_start) *
(set[i].hi_start - set[i].lo_start));
}
}
// for triclinic, set new box shape
// for NONE, target is current tilt
// for TRATE, set target directly based on current time. also set h_rate
// for WIGGLE, set target directly based on current time. also set h_rate
// for VARIABLE, set target directly via variable eval. also set h_rate
// for other styles, target is linear value between start and stop values
if (triclinic) {
double *h = domain->h;
for (i = 3; i < 6; i++) {
if (set[i].style == NONE) {
if (i == 5) set[i].tilt_target = domain->xy;
else if (i == 4) set[i].tilt_target = domain->xz;
else if (i == 3) set[i].tilt_target = domain->yz;
} else if (set[i].style == TRATE) {
double delt = (update->ntimestep - update->beginstep) * update->dt;
set[i].tilt_target = set[i].tilt_start * exp(set[i].rate*delt);
h_rate[i] = set[i].rate * domain->h[i];
} else if (set[i].style == WIGGLE) {
double delt = (update->ntimestep - update->beginstep) * update->dt;
set[i].tilt_target = set[i].tilt_start +
set[i].amplitude * sin(TWOPI*delt/set[i].tperiod);
h_rate[i] = TWOPI/set[i].tperiod * set[i].amplitude *
cos(TWOPI*delt/set[i].tperiod);
} else if (set[i].style == VARIABLE) {
double delta_tilt = input->variable->compute_equal(set[i].hvar);
set[i].tilt_target = set[i].tilt_start + delta_tilt;
h_rate[i] = input->variable->compute_equal(set[i].hratevar);
} else {
set[i].tilt_target = set[i].tilt_start +
delta*(set[i].tilt_stop - set[i].tilt_start);
}
// tilt_target can be large positive or large negative value
// add/subtract box lengths until tilt_target is closest to current value
int idenom;
if (i == 5) idenom = 0;
else if (i == 4) idenom = 0;
else if (i == 3) idenom = 1;
double denom = set[idenom].hi_target - set[idenom].lo_target;
double current = h[i]/h[idenom];
while (set[i].tilt_target/denom - current > 0.0)
set[i].tilt_target -= denom;
while (set[i].tilt_target/denom - current < 0.0)
set[i].tilt_target += denom;
if (fabs(set[i].tilt_target/denom - 1.0 - current) <
fabs(set[i].tilt_target/denom - current))
set[i].tilt_target -= denom;
}
}
if (varflag) modify->addstep_compute(update->ntimestep + nevery);
// if any tilt ratios exceed 0.5, set flip = 1 and compute new tilt values
// do not flip in x or y if non-periodic (can tilt but not flip)
// this is b/c the box length would be changed (dramatically) by flip
// if yz tilt exceeded, adjust C vector by one B vector
// if xz tilt exceeded, adjust C vector by one A vector
// if xy tilt exceeded, adjust B vector by one A vector
// check yz first since it may change xz, then xz check comes after
// flip is performed on next timestep, before reneighboring in pre-exchange()
if (triclinic && flipflag) {
double xprd = set[0].hi_target - set[0].lo_target;
double yprd = set[1].hi_target - set[1].lo_target;
double xprdinv = 1.0 / xprd;
double yprdinv = 1.0 / yprd;
if (set[3].tilt_target*yprdinv < -0.5 ||
set[3].tilt_target*yprdinv > 0.5 ||
set[4].tilt_target*xprdinv < -0.5 ||
set[4].tilt_target*xprdinv > 0.5 ||
set[5].tilt_target*xprdinv < -0.5 ||
set[5].tilt_target*xprdinv > 0.5) {
set[3].tilt_flip = set[3].tilt_target;
set[4].tilt_flip = set[4].tilt_target;
set[5].tilt_flip = set[5].tilt_target;
flipxy = flipxz = flipyz = 0;
if (domain->yperiodic) {
if (set[3].tilt_flip*yprdinv < -0.5) {
set[3].tilt_flip += yprd;
set[4].tilt_flip += set[5].tilt_flip;
flipyz = 1;
} else if (set[3].tilt_flip*yprdinv > 0.5) {
set[3].tilt_flip -= yprd;
set[4].tilt_flip -= set[5].tilt_flip;
flipyz = -1;
}
}
if (domain->xperiodic) {
if (set[4].tilt_flip*xprdinv < -0.5) {
set[4].tilt_flip += xprd;
flipxz = 1;
}
if (set[4].tilt_flip*xprdinv > 0.5) {
set[4].tilt_flip -= xprd;
flipxz = -1;
}
if (set[5].tilt_flip*xprdinv < -0.5) {
set[5].tilt_flip += xprd;
flipxy = 1;
}
if (set[5].tilt_flip*xprdinv > 0.5) {
set[5].tilt_flip -= xprd;
flipxy = -1;
}
}
flip = 0;
if (flipxy || flipxz || flipyz) flip = 1;
if (flip) next_reneighbor = update->ntimestep + 1;
}
}
// convert atoms and rigid bodies to lamda coords
if (remapflag == X_REMAP) {
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
domain->x2lamda(x[i],x[i]);
if (nrigid)
for (i = 0; i < nrigid; i++)
modify->fix[rfix[i]]->deform(0);
}
// reset global and local box to new size/shape
// only if deform fix is controlling the dimension
if (set[0].style) {
domain->boxlo[0] = set[0].lo_target;
domain->boxhi[0] = set[0].hi_target;
}
if (set[1].style) {
domain->boxlo[1] = set[1].lo_target;
domain->boxhi[1] = set[1].hi_target;
}
if (set[2].style) {
domain->boxlo[2] = set[2].lo_target;
domain->boxhi[2] = set[2].hi_target;
}
if (triclinic) {
if (set[3].style) domain->yz = set[3].tilt_target;
if (set[4].style) domain->xz = set[4].tilt_target;
if (set[5].style) domain->xy = set[5].tilt_target;
}
domain->set_global_box();
domain->set_local_box();
// convert atoms and rigid bodies back to box coords
if (remapflag == X_REMAP) {
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
domain->lamda2x(x[i],x[i]);
if (nrigid)
for (i = 0; i < nrigid; i++)
modify->fix[rfix[i]]->deform(1);
}
// redo KSpace coeffs since box has changed
if (kspace_flag) force->kspace->setup();
}
/* ---------------------------------------------------------------------- */
void FixDeform::options(int narg, char **arg)
{
if (narg < 0) error->all(FLERR,"Illegal fix deform command");
remapflag = X_REMAP;
scaleflag = 1;
flipflag = 1;
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"remap") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix deform command");
if (strcmp(arg[iarg+1],"x") == 0) remapflag = X_REMAP;
else if (strcmp(arg[iarg+1],"v") == 0) remapflag = V_REMAP;
else if (strcmp(arg[iarg+1],"none") == 0) remapflag = NO_REMAP;
else error->all(FLERR,"Illegal fix deform command");
iarg += 2;
} else if (strcmp(arg[iarg],"units") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix deform command");
if (strcmp(arg[iarg+1],"box") == 0) scaleflag = 0;
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = 1;
else error->all(FLERR,"Illegal fix deform command");
iarg += 2;
} else if (strcmp(arg[iarg],"flip") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix deform command");
if (strcmp(arg[iarg+1],"yes") == 0) flipflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) flipflag = 0;
else error->all(FLERR,"Illegal fix deform command");
iarg += 2;
} else error->all(FLERR,"Illegal fix deform command");
}
}
/* ----------------------------------------------------------------------
memory usage of Irregular
------------------------------------------------------------------------- */
double FixDeform::memory_usage()
{
double bytes = 0.0;
if (irregular) bytes += irregular->memory_usage();
return bytes;
}
diff --git a/src/fix_enforce2d.cpp b/src/fix_enforce2d.cpp
index f61cc186c..21a99e3c1 100644
--- a/src/fix_enforce2d.cpp
+++ b/src/fix_enforce2d.cpp
@@ -1,166 +1,166 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "fix_enforce2d.h"
#include "atom.h"
#include "update.h"
#include "domain.h"
#include "modify.h"
#include "respa.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixEnforce2D::FixEnforce2D(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ flist(NULL)
{
if (narg != 3) error->all(FLERR,"Illegal fix enforce2d command");
nfixlist = 0;
- flist = NULL;
}
/* ---------------------------------------------------------------------- */
FixEnforce2D::~FixEnforce2D()
{
delete [] flist;
}
/* ---------------------------------------------------------------------- */
int FixEnforce2D::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixEnforce2D::init()
{
if (domain->dimension == 3)
error->all(FLERR,"Cannot use fix enforce2d with 3d simulation");
// list of fixes with enforce2d methods
nfixlist = 0;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->enforce2d_flag) nfixlist++;
if (nfixlist) {
delete [] flist;
flist = new Fix*[nfixlist];
nfixlist = 0;
for (int i = 0; i < modify->nfix; i++) {
if (modify->fix[i]->enforce2d_flag)
flist[nfixlist++] = modify->fix[i];
}
}
}
/* ---------------------------------------------------------------------- */
void FixEnforce2D::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
int nlevels_respa = ((Respa *) update->integrate)->nlevels;
for (int ilevel = 0; ilevel < nlevels_respa; ilevel++) {
((Respa *) update->integrate)->copy_flevel_f(ilevel);
post_force_respa(vflag,ilevel,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel);
}
}
}
/* ---------------------------------------------------------------------- */
void FixEnforce2D::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixEnforce2D::post_force(int vflag)
{
double **v = atom->v;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
v[i][2] = 0.0;
f[i][2] = 0.0;
}
// for systems with omega/angmom/torque, zero x and y components
if (atom->omega_flag) {
double **omega = atom->omega;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
omega[i][0] = 0.0;
omega[i][1] = 0.0;
}
}
if (atom->angmom_flag) {
double **angmom = atom->angmom;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
angmom[i][0] = 0.0;
angmom[i][1] = 0.0;
}
}
if (atom->torque_flag) {
double **torque = atom->torque;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
torque[i][0] = 0.0;
torque[i][1] = 0.0;
}
}
// invoke other fixes that enforce 2d
// fix rigid variants
for (int m = 0; m < nfixlist; m++)
flist[m]->enforce2d();
}
/* ---------------------------------------------------------------------- */
void FixEnforce2D::post_force_respa(int vflag, int ilevel, int iloop)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixEnforce2D::min_post_force(int vflag)
{
post_force(vflag);
}
diff --git a/src/fix_external.cpp b/src/fix_external.cpp
index 16494662f..c7c865cd5 100644
--- a/src/fix_external.cpp
+++ b/src/fix_external.cpp
@@ -1,227 +1,227 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "fix_external.h"
#include "atom.h"
#include "update.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{PF_CALLBACK,PF_ARRAY};
/* ---------------------------------------------------------------------- */
FixExternal::FixExternal(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ fexternal(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal fix external command");
scalar_flag = 1;
global_freq = 1;
extscalar = 1;
if (strcmp(arg[3],"pf/callback") == 0) {
if (narg != 6) error->all(FLERR,"Illegal fix external command");
mode = PF_CALLBACK;
ncall = force->inumeric(FLERR,arg[4]);
napply = force->inumeric(FLERR,arg[5]);
if (ncall <= 0 || napply <= 0)
error->all(FLERR,"Illegal fix external command");
} else if (strcmp(arg[3],"pf/array") == 0) {
if (narg != 5) error->all(FLERR,"Illegal fix external command");
mode = PF_ARRAY;
napply = force->inumeric(FLERR,arg[4]);
if (napply <= 0) error->all(FLERR,"Illegal fix external command");
} else error->all(FLERR,"Illegal fix external command");
callback = NULL;
// perform initial allocation of atom-based array
// register with Atom class
- fexternal = NULL;
grow_arrays(atom->nmax);
atom->add_callback(0);
user_energy = 0.0;
}
/* ---------------------------------------------------------------------- */
FixExternal::~FixExternal()
{
// unregister callbacks to this fix from Atom class
atom->delete_callback(id,0);
memory->destroy(fexternal);
}
/* ---------------------------------------------------------------------- */
int FixExternal::setmask()
{
int mask = 0;
if (mode == PF_CALLBACK || mode == PF_ARRAY) {
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= MIN_POST_FORCE;
}
return mask;
}
/* ---------------------------------------------------------------------- */
void FixExternal::init()
{
if (mode == PF_CALLBACK && callback == NULL)
error->all(FLERR,"Fix external callback function not set");
}
/* ---------------------------------------------------------------------- */
void FixExternal::setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixExternal::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixExternal::post_force(int vflag)
{
bigint ntimestep = update->ntimestep;
// invoke the callback in driver program
// it will fill fexternal with forces
if (mode == PF_CALLBACK && ntimestep % ncall == 0)
(this->callback)(ptr_caller,update->ntimestep,
atom->nlocal,atom->tag,atom->x,fexternal);
// add forces from fexternal to atoms in group
if (ntimestep % napply == 0) {
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
f[i][0] += fexternal[i][0];
f[i][1] += fexternal[i][1];
f[i][2] += fexternal[i][2];
}
}
}
/* ---------------------------------------------------------------------- */
void FixExternal::min_post_force(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixExternal::set_energy(double eng)
{
user_energy = eng;
}
/* ----------------------------------------------------------------------
potential energy of added force
up to user to set it via set_energy()
------------------------------------------------------------------------- */
double FixExternal::compute_scalar()
{
return user_energy;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixExternal::memory_usage()
{
double bytes = 3*atom->nmax * sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
allocate atom-based array
------------------------------------------------------------------------- */
void FixExternal::grow_arrays(int nmax)
{
memory->grow(fexternal,nmax,3,"external:fexternal");
}
/* ----------------------------------------------------------------------
copy values within local atom-based array
------------------------------------------------------------------------- */
void FixExternal::copy_arrays(int i, int j, int delflag)
{
fexternal[j][0] = fexternal[i][0];
fexternal[j][1] = fexternal[i][1];
fexternal[j][2] = fexternal[i][2];
}
/* ----------------------------------------------------------------------
pack values in local atom-based array for exchange with another proc
------------------------------------------------------------------------- */
int FixExternal::pack_exchange(int i, double *buf)
{
buf[0] = fexternal[i][0];
buf[1] = fexternal[i][1];
buf[2] = fexternal[i][2];
return 3;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based array from exchange with another proc
------------------------------------------------------------------------- */
int FixExternal::unpack_exchange(int nlocal, double *buf)
{
fexternal[nlocal][0] = buf[0];
fexternal[nlocal][1] = buf[1];
fexternal[nlocal][2] = buf[2];
return 3;
}
/* ----------------------------------------------------------------------
external caller sets a callback function to invoke in post_force()
------------------------------------------------------------------------- */
void FixExternal::set_callback(FnPtr caller_callback, void *caller_ptr)
{
callback = caller_callback;
ptr_caller = caller_ptr;
}
diff --git a/src/fix_gravity.cpp b/src/fix_gravity.cpp
index 95f899ae8..5582357c0 100644
--- a/src/fix_gravity.cpp
+++ b/src/fix_gravity.cpp
@@ -1,357 +1,358 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fix_gravity.h"
#include "atom.h"
#include "update.h"
#include "domain.h"
#include "respa.h"
#include "modify.h"
#include "input.h"
#include "variable.h"
#include "math_const.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
using namespace MathConst;
enum{CHUTE,SPHERICAL,VECTOR};
enum{CONSTANT,EQUAL};
/* ---------------------------------------------------------------------- */
FixGravity::FixGravity(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ mstr(NULL), vstr(NULL), pstr(NULL), tstr(NULL), xstr(NULL), ystr(NULL), zstr(NULL)
{
if (narg < 5) error->all(FLERR,"Illegal fix gravity command");
dynamic_group_allow = 1;
scalar_flag = 1;
global_freq = 1;
extscalar = 1;
respa_level_support = 1;
ilevel_respa = 0;
mstr = vstr = pstr = tstr = xstr = ystr = zstr = NULL;
mstyle = vstyle = pstyle = tstyle = xstyle = ystyle = zstyle = CONSTANT;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
mstr = new char[n];
strcpy(mstr,&arg[3][2]);
mstyle = EQUAL;
} else {
magnitude = force->numeric(FLERR,arg[3]);
mstyle = CONSTANT;
}
if (strcmp(arg[4],"chute") == 0) {
if (narg != 6) error->all(FLERR,"Illegal fix gravity command");
style = CHUTE;
if (strstr(arg[5],"v_") == arg[5]) {
int n = strlen(&arg[5][2]) + 1;
vstr = new char[n];
strcpy(vstr,&arg[5][2]);
vstyle = EQUAL;
} else {
vert = force->numeric(FLERR,arg[5]);
vstyle = CONSTANT;
}
} else if (strcmp(arg[4],"spherical") == 0) {
if (narg != 7) error->all(FLERR,"Illegal fix gravity command");
style = SPHERICAL;
if (strstr(arg[5],"v_") == arg[5]) {
int n = strlen(&arg[5][2]) + 1;
pstr = new char[n];
strcpy(pstr,&arg[5][2]);
pstyle = EQUAL;
} else {
phi = force->numeric(FLERR,arg[5]);
pstyle = CONSTANT;
}
if (strstr(arg[6],"v_") == arg[6]) {
int n = strlen(&arg[6][2]) + 1;
tstr = new char[n];
strcpy(tstr,&arg[6][2]);
tstyle = EQUAL;
} else {
theta = force->numeric(FLERR,arg[6]);
tstyle = CONSTANT;
}
} else if (strcmp(arg[4],"vector") == 0) {
if (narg != 8) error->all(FLERR,"Illegal fix gravity command");
style = VECTOR;
if (strstr(arg[5],"v_") == arg[5]) {
int n = strlen(&arg[5][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[5][2]);
xstyle = EQUAL;
} else {
xdir = force->numeric(FLERR,arg[5]);
xstyle = CONSTANT;
}
if (strstr(arg[6],"v_") == arg[6]) {
int n = strlen(&arg[6][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[6][2]);
ystyle = EQUAL;
} else {
ydir = force->numeric(FLERR,arg[6]);
ystyle = CONSTANT;
}
if (strstr(arg[7],"v_") == arg[7]) {
int n = strlen(&arg[7][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[7][2]);
zstyle = EQUAL;
} else {
zdir = force->numeric(FLERR,arg[7]);
zstyle = CONSTANT;
}
} else error->all(FLERR,"Illegal fix gravity command");
degree2rad = MY_PI/180.0;
time_origin = update->ntimestep;
eflag = 0;
egrav = 0.0;
}
/* ---------------------------------------------------------------------- */
FixGravity::~FixGravity()
{
delete [] mstr;
delete [] vstr;
delete [] pstr;
delete [] tstr;
delete [] xstr;
delete [] ystr;
delete [] zstr;
}
/* ---------------------------------------------------------------------- */
int FixGravity::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixGravity::init()
{
if (strstr(update->integrate_style,"respa")) {
ilevel_respa = ((Respa *) update->integrate)->nlevels-1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,ilevel_respa);
}
// check variables
if (mstr) {
mvar = input->variable->find(mstr);
if (mvar < 0)
error->all(FLERR,"Variable name for fix gravity does not exist");
if (!input->variable->equalstyle(mvar))
error->all(FLERR,"Variable for fix gravity is invalid style");
}
if (vstr) {
vvar = input->variable->find(vstr);
if (vvar < 0)
error->all(FLERR,"Variable name for fix gravity does not exist");
if (!input->variable->equalstyle(vvar))
error->all(FLERR,"Variable for fix gravity is invalid style");
}
if (pstr) {
pvar = input->variable->find(pstr);
if (pvar < 0)
error->all(FLERR,"Variable name for fix gravity does not exist");
if (!input->variable->equalstyle(pvar))
error->all(FLERR,"Variable for fix gravity is invalid style");
}
if (tstr) {
tvar = input->variable->find(tstr);
if (tvar < 0)
error->all(FLERR,"Variable name for fix gravity does not exist");
if (!input->variable->equalstyle(tvar))
error->all(FLERR,"Variable for fix gravity is invalid style");
}
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0)
error->all(FLERR,"Variable name for fix gravity does not exist");
if (!input->variable->equalstyle(xvar))
error->all(FLERR,"Variable for fix gravity is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0)
error->all(FLERR,"Variable name for fix gravity does not exist");
if (!input->variable->equalstyle(yvar))
error->all(FLERR,"Variable for fix gravity is invalid style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0)
error->all(FLERR,"Variable name for fix gravity does not exist");
if (!input->variable->equalstyle(zvar))
error->all(FLERR,"Variable for fix gravity is invalid style");
}
varflag = CONSTANT;
if (mstyle != CONSTANT || vstyle != CONSTANT || pstyle != CONSTANT ||
tstyle != CONSTANT || xstyle != CONSTANT || ystyle != CONSTANT ||
zstyle != CONSTANT) varflag = EQUAL;
// set gravity components once and for all
if (varflag == CONSTANT) set_acceleration();
}
/* ---------------------------------------------------------------------- */
void FixGravity::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixGravity::post_force(int vflag)
{
// update gravity due to variables
if (varflag != CONSTANT) {
modify->clearstep_compute();
if (mstyle == EQUAL) magnitude = input->variable->compute_equal(mvar);
if (vstyle == EQUAL) vert = input->variable->compute_equal(vvar);
if (pstyle == EQUAL) phi = input->variable->compute_equal(pvar);
if (tstyle == EQUAL) theta = input->variable->compute_equal(tvar);
if (xstyle == EQUAL) xdir = input->variable->compute_equal(xvar);
if (ystyle == EQUAL) ydir = input->variable->compute_equal(yvar);
if (zstyle == EQUAL) zdir = input->variable->compute_equal(zvar);
modify->addstep_compute(update->ntimestep + 1);
set_acceleration();
}
double **x = atom->x;
double **f = atom->f;
double *rmass = atom->rmass;
double *mass = atom->mass;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
double massone;
eflag = 0;
egrav = 0.0;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
massone = rmass[i];
f[i][0] += massone*xacc;
f[i][1] += massone*yacc;
f[i][2] += massone*zacc;
egrav -= massone * (xacc*x[i][0] + yacc*x[i][1] + zacc*x[i][2]);
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
massone = mass[type[i]];
f[i][0] += massone*xacc;
f[i][1] += massone*yacc;
f[i][2] += massone*zacc;
egrav -= massone * (xacc*x[i][0] + yacc*x[i][1] + zacc*x[i][2]);
}
}
}
/* ---------------------------------------------------------------------- */
void FixGravity::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == ilevel_respa) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixGravity::set_acceleration()
{
if (style == CHUTE || style == SPHERICAL) {
if (style == CHUTE) {
phi = 0.0;
theta = 180.0 - vert;
}
if (domain->dimension == 3) {
xgrav = sin(degree2rad * theta) * cos(degree2rad * phi);
ygrav = sin(degree2rad * theta) * sin(degree2rad * phi);
zgrav = cos(degree2rad * theta);
} else {
xgrav = sin(degree2rad * theta);
ygrav = cos(degree2rad * theta);
zgrav = 0.0;
}
} else if (style == VECTOR) {
if (domain->dimension == 3) {
double length = sqrt(xdir*xdir + ydir*ydir + zdir*zdir);
xgrav = xdir/length;
ygrav = ydir/length;
zgrav = zdir/length;
} else {
double length = sqrt(xdir*xdir + ydir*ydir);
xgrav = xdir/length;
ygrav = ydir/length;
zgrav = 0.0;
}
}
xacc = magnitude*xgrav;
yacc = magnitude*ygrav;
zacc = magnitude*zgrav;
}
/* ----------------------------------------------------------------------
potential energy in gravity field
------------------------------------------------------------------------- */
double FixGravity::compute_scalar()
{
// only sum across procs one time
if (eflag == 0) {
MPI_Allreduce(&egrav,&egrav_all,1,MPI_DOUBLE,MPI_SUM,world);
eflag = 1;
}
return egrav_all;
}
diff --git a/src/fix_group.cpp b/src/fix_group.cpp
index ac4a84d63..4ebcdf309 100644
--- a/src/fix_group.cpp
+++ b/src/fix_group.cpp
@@ -1,213 +1,212 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "fix_group.h"
#include "group.h"
#include "update.h"
#include "atom.h"
#include "force.h"
#include "comm.h"
#include "domain.h"
#include "region.h"
#include "modify.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
-FixGroup::FixGroup(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
+FixGroup::FixGroup(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg),
+idregion(NULL), idvar(NULL)
{
// dgroupbit = bitmask of dynamic group
// group ID is last part of fix ID
int n = strlen(id) - strlen("GROUP_") + 1;
char *dgroup = new char[n];
strcpy(dgroup,&id[strlen("GROUP_")]);
gbit = group->bitmask[group->find(dgroup)];
gbitinverse = group->inversemask[group->find(dgroup)];
delete [] dgroup;
// process optional args
regionflag = 0;
- idregion = NULL;
varflag = 0;
- idvar = NULL;
nevery = 1;
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal group command");
if (domain->find_region(arg[iarg+1]) < 0)
error->all(FLERR,"Region ID for group dynamic does not exist");
regionflag = 1;
delete [] idregion;
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"var") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal group command");
if (input->variable->find(arg[iarg+1]) < 0)
error->all(FLERR,"Variable name for group dynamic does not exist");
varflag = 1;
delete [] idvar;
int n = strlen(arg[iarg+1]) + 1;
idvar = new char[n];
strcpy(idvar,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"every") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal group command");
nevery = force->inumeric(FLERR,arg[iarg+1]);
if (nevery <= 0) error->all(FLERR,"Illegal group command");
iarg += 2;
} else error->all(FLERR,"Illegal group command");
}
}
/* ---------------------------------------------------------------------- */
FixGroup::~FixGroup()
{
delete [] idregion;
delete [] idvar;
}
/* ---------------------------------------------------------------------- */
int FixGroup::setmask()
{
int mask = 0;
mask |= POST_INTEGRATE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixGroup::init()
{
// parent group cannot be dynamic
// else order of FixGroup fixes would matter
if (group->dynamic[igroup])
error->all(FLERR,"Group dynamic parent group cannot be dynamic");
// set current indices for region and variable
if (regionflag) {
iregion = domain->find_region(idregion);
if (iregion < 0)
error->all(FLERR,"Region ID for group dynamic does not exist");
region = domain->regions[iregion];
}
if (varflag) {
ivar = input->variable->find(idvar);
if (ivar < 0)
error->all(FLERR,"Variable name for group dynamic does not exist");
if (!input->variable->atomstyle(ivar))
error->all(FLERR,"Variable for group dynamic is invalid style");
}
// warn if any FixGroup is not at tail end of all post_integrate fixes
Fix **fix = modify->fix;
int *fmask = modify->fmask;
int nfix = modify->nfix;
int n = 0;
for (int i = 0; i < nfix; i++) if (POST_INTEGRATE & fmask[i]) n++;
int warn = 0;
for (int i = 0; i < nfix; i++) {
if (POST_INTEGRATE & fmask[i]) {
for (int j = i+1; j < nfix; j++) {
if (POST_INTEGRATE & fmask[j]) {
if (strstr(fix[j]->id,"GROUP_") != fix[j]->id) warn = 1;
}
}
}
}
if (warn && comm->me == 0)
error->warning(FLERR,"One or more dynamic groups may not be "
"updated at correct point in timestep");
}
/* ----------------------------------------------------------------------
assign atoms to group
------------------------------------------------------------------------- */
void FixGroup::setup(int vflag)
{
set_group();
}
/* ---------------------------------------------------------------------- */
void FixGroup::post_integrate()
{
// only assign atoms to group on steps that are multiples of nevery
if (update->ntimestep % nevery == 0) set_group();
}
/* ---------------------------------------------------------------------- */
void FixGroup::set_group()
{
int nlocal = atom->nlocal;
// invoke atom-style variable if defined
double *var = NULL;
if (varflag) {
modify->clearstep_compute();
memory->create(var,nlocal,"fix/group:varvalue");
input->variable->compute_atom(ivar,igroup,var,1,0);
modify->addstep_compute(update->ntimestep + nevery);
}
// update region in case it has a variable dependence or is dynamic
if (regionflag) region->prematch();
// set mask for each atom
// only in group if in parent group, in region, variable is non-zero
// if compute, fix, etc needs updated masks of ghost atoms,
// it must do forward_comm() to update them
double **x = atom->x;
int *mask = atom->mask;
int inflag;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
inflag = 1;
if (regionflag && !region->match(x[i][0],x[i][1],x[i][2])) inflag = 0;
if (varflag && var[i] == 0.0) inflag = 0;
} else inflag = 0;
if (inflag) mask[i] |= gbit;
else mask[i] &= gbitinverse;
}
if (varflag) memory->destroy(var);
}
diff --git a/src/fix_heat.cpp b/src/fix_heat.cpp
index 5da405ae3..d41aa4abe 100644
--- a/src/fix_heat.cpp
+++ b/src/fix_heat.cpp
@@ -1,342 +1,340 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Paul Crozier (SNL)
------------------------------------------------------------------------- */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "fix_heat.h"
#include "atom.h"
#include "domain.h"
#include "region.h"
#include "group.h"
#include "force.h"
#include "update.h"
#include "modify.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{CONSTANT,EQUAL,ATOM};
/* ---------------------------------------------------------------------- */
-FixHeat::FixHeat(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
+FixHeat::FixHeat(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg),
+idregion(NULL), hstr(NULL), vheat(NULL), vscale(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal fix heat command");
scalar_flag = 1;
global_freq = 1;
extscalar = 0;
nevery = force->inumeric(FLERR,arg[3]);
if (nevery <= 0) error->all(FLERR,"Illegal fix heat command");
hstr = NULL;
if (strstr(arg[4],"v_") == arg[4]) {
int n = strlen(&arg[4][2]) + 1;
hstr = new char[n];
strcpy(hstr,&arg[4][2]);
} else {
heat_input = force->numeric(FLERR,arg[4]);
hstyle = CONSTANT;
}
// optional args
iregion = -1;
- idregion = NULL;
-
+
int iarg = 5;
while (iarg < narg) {
if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix heat command");
iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix heat does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix heat command");
}
scale = 1.0;
maxatom = 0;
- vheat = NULL;
- vscale = NULL;
}
/* ---------------------------------------------------------------------- */
FixHeat::~FixHeat()
{
delete [] hstr;
delete [] idregion;
memory->destroy(vheat);
memory->destroy(vscale);
}
/* ---------------------------------------------------------------------- */
int FixHeat::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixHeat::init()
{
// set index and check validity of region
if (iregion >= 0) {
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix heat does not exist");
}
// check variable
if (hstr) {
hvar = input->variable->find(hstr);
if (hvar < 0)
error->all(FLERR,"Variable name for fix heat does not exist");
if (input->variable->equalstyle(hvar)) hstyle = EQUAL;
else if (input->variable->atomstyle(hvar)) hstyle = ATOM;
else error->all(FLERR,"Variable for fix heat is invalid style");
}
// cannot have 0 atoms in group
if (group->count(igroup) == 0)
error->all(FLERR,"Fix heat group has no atoms");
masstotal = group->mass(igroup);
if (masstotal <= 0.0)
error->all(FLERR,"Fix heat group has invalid mass");
}
/* ---------------------------------------------------------------------- */
void FixHeat::end_of_step()
{
int i;
double heat,ke,massone;
double vsub[3],vcm[3];
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
// reallocate per-atom arrays if necessary
if (hstyle == ATOM && atom->nmax > maxatom) {
maxatom = atom->nmax;
memory->destroy(vheat);
memory->destroy(vscale);
memory->create(vheat,maxatom,"heat:vheat");
memory->create(vscale,maxatom,"heat:vscale");
}
// evaluate variable
if (hstyle != CONSTANT) {
modify->clearstep_compute();
if (hstyle == EQUAL) heat_input = input->variable->compute_equal(hvar);
else input->variable->compute_atom(hvar,igroup,vheat,1,0);
modify->addstep_compute(update->ntimestep + nevery);
}
// vcm = center-of-mass velocity of scaled atoms
if (iregion < 0) {
ke = group->ke(igroup)*force->ftm2v;
group->vcm(igroup,masstotal,vcm);
} else {
masstotal = group->mass(igroup,iregion);
if (masstotal == 0.0) error->all(FLERR,"Fix heat group has no atoms");
ke = group->ke(igroup,iregion)*force->ftm2v;
group->vcm(igroup,masstotal,vcm,iregion);
}
double vcmsq = vcm[0]*vcm[0] + vcm[1]*vcm[1] + vcm[2]*vcm[2];
// add heat via scale factor on velocities for CONSTANT and EQUAL cases
// scale = velocity scale factor to accomplish eflux change in energy
// vsub = velocity subtracted from each atom to preserve momentum
// overall KE cannot go negative
Region *region = NULL;
if (iregion >= 0) {
region = domain->regions[iregion];
region->prematch();
}
if (hstyle != ATOM) {
heat = heat_input*nevery*update->dt*force->ftm2v;
double escale =
(ke + heat - 0.5*vcmsq*masstotal)/(ke - 0.5*vcmsq*masstotal);
if (escale < 0.0) error->all(FLERR,"Fix heat kinetic energy went negative");
scale = sqrt(escale);
vsub[0] = (scale-1.0) * vcm[0];
vsub[1] = (scale-1.0) * vcm[1];
vsub[2] = (scale-1.0) * vcm[2];
if (iregion < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
v[i][0] = scale*v[i][0] - vsub[0];
v[i][1] = scale*v[i][1] - vsub[1];
v[i][2] = scale*v[i][2] - vsub[2];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
v[i][0] = scale*v[i][0] - vsub[0];
v[i][1] = scale*v[i][1] - vsub[1];
v[i][2] = scale*v[i][2] - vsub[2];
}
}
// add heat via per-atom scale factor on velocities for ATOM case
// vscale = velocity scale factor to accomplish eflux change in energy
// vsub = velocity subtracted from each atom to preserve momentum
// KE of an atom cannot go negative
} else {
vsub[0] = vsub[1] = vsub[2] = 0.0;
if (iregion < 0) {
for (i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
heat = vheat[i]*nevery*update->dt*force->ftm2v;
vscale[i] =
(ke + heat - 0.5*vcmsq*masstotal)/(ke - 0.5*vcmsq*masstotal);
if (vscale[i] < 0.0)
error->all(FLERR,
"Fix heat kinetic energy of an atom went negative");
scale = sqrt(vscale[i]);
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
vsub[0] += (scale-1.0) * v[i][0]*massone;
vsub[1] += (scale-1.0) * v[i][1]*massone;
vsub[2] += (scale-1.0) * v[i][2]*massone;
}
}
vsub[0] /= masstotal;
vsub[1] /= masstotal;
vsub[2] /= masstotal;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
scale = sqrt(vscale[i]);
v[i][0] = scale*v[i][0] - vsub[0];
v[i][1] = scale*v[i][1] - vsub[1];
v[i][2] = scale*v[i][2] - vsub[2];
}
} else {
for (i = 0; i < nlocal; i++) {
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
heat = vheat[i]*nevery*update->dt*force->ftm2v;
vscale[i] =
(ke + heat - 0.5*vcmsq*masstotal)/(ke - 0.5*vcmsq*masstotal);
if (vscale[i] < 0.0)
error->all(FLERR,
"Fix heat kinetic energy of an atom went negative");
scale = sqrt(vscale[i]);
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
vsub[0] += (scale-1.0) * v[i][0]*massone;
vsub[1] += (scale-1.0) * v[i][1]*massone;
vsub[2] += (scale-1.0) * v[i][2]*massone;
}
}
vsub[0] /= masstotal;
vsub[1] /= masstotal;
vsub[2] /= masstotal;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
scale = sqrt(vscale[i]);
v[i][0] = scale*v[i][0] - vsub[0];
v[i][1] = scale*v[i][1] - vsub[1];
v[i][2] = scale*v[i][2] - vsub[2];
}
}
}
}
/* ---------------------------------------------------------------------- */
double FixHeat::compute_scalar()
{
double average_scale = scale;
if (hstyle == ATOM) {
double scale_sum = 0.0;
int ncount = 0;
int *mask = atom->mask;
double **x = atom->x;
int nlocal = atom->nlocal;
if (iregion < 0) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
scale_sum += sqrt(vscale[i]);
ncount++;
}
}
} else {
Region *region = domain->regions[iregion];
region->prematch();
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
scale_sum += sqrt(vscale[i]);
ncount++;
}
}
}
double scale_sum_all = 0.0;
int ncount_all = 0;
MPI_Allreduce(&scale_sum,&scale_sum_all,1,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&ncount,&ncount_all,1,MPI_INT,MPI_SUM,world);
if (ncount_all == 0) average_scale = 0.0;
else average_scale = scale_sum_all/static_cast<double>(ncount_all);
}
return average_scale;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixHeat::memory_usage()
{
double bytes = 0.0;
if (hstyle == ATOM) bytes = atom->nmax*2 * sizeof(double);
return bytes;
}
diff --git a/src/fix_indent.cpp b/src/fix_indent.cpp
index a6693e98a..331d84ff9 100644
--- a/src/fix_indent.cpp
+++ b/src/fix_indent.cpp
@@ -1,528 +1,529 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Ravi Agrawal (Northwestern U)
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "fix_indent.h"
#include "atom.h"
#include "input.h"
#include "variable.h"
#include "domain.h"
#include "lattice.h"
#include "update.h"
#include "modify.h"
#include "output.h"
#include "respa.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NONE,SPHERE,CYLINDER,PLANE};
enum{INSIDE,OUTSIDE};
/* ---------------------------------------------------------------------- */
FixIndent::FixIndent(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ xstr(NULL), ystr(NULL), zstr(NULL), rstr(NULL), pstr(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal fix indent command");
scalar_flag = 1;
vector_flag = 1;
size_vector = 3;
global_freq = 1;
extscalar = 1;
extvector = 1;
respa_level_support = 1;
ilevel_respa = 0;
k = force->numeric(FLERR,arg[3]);
k3 = k/3.0;
// read options from end of input line
options(narg-4,&arg[4]);
// setup scaling
double xscale,yscale,zscale;
if (scaleflag) {
xscale = domain->lattice->xlattice;
yscale = domain->lattice->ylattice;
zscale = domain->lattice->zlattice;
}
else xscale = yscale = zscale = 1.0;
// apply scaling factors to geometry
if (istyle == SPHERE || istyle == CYLINDER) {
if (!xstr) xvalue *= xscale;
if (!ystr) yvalue *= yscale;
if (!zstr) zvalue *= zscale;
if (!rstr) rvalue *= xscale;
} else if (istyle == PLANE) {
if (cdim == 0 && !pstr) pvalue *= xscale;
else if (cdim == 1 && !pstr) pvalue *= yscale;
else if (cdim == 2 && !pstr) pvalue *= zscale;
} else error->all(FLERR,"Illegal fix indent command");
varflag = 0;
if (xstr || ystr || zstr || rstr || pstr) varflag = 1;
indenter_flag = 0;
indenter[0] = indenter[1] = indenter[2] = indenter[3] = 0.0;
}
/* ---------------------------------------------------------------------- */
FixIndent::~FixIndent()
{
delete [] xstr;
delete [] ystr;
delete [] zstr;
delete [] rstr;
delete [] pstr;
}
/* ---------------------------------------------------------------------- */
int FixIndent::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixIndent::init()
{
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0)
error->all(FLERR,"Variable name for fix indent does not exist");
if (!input->variable->equalstyle(xvar))
error->all(FLERR,"Variable for fix indent is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0)
error->all(FLERR,"Variable name for fix indent does not exist");
if (!input->variable->equalstyle(yvar))
error->all(FLERR,"Variable for fix indent is not equal style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0)
error->all(FLERR,"Variable name for fix indent does not exist");
if (!input->variable->equalstyle(zvar))
error->all(FLERR,"Variable for fix indent is not equal style");
}
if (rstr) {
rvar = input->variable->find(rstr);
if (rvar < 0)
error->all(FLERR,"Variable name for fix indent does not exist");
if (!input->variable->equalstyle(rvar))
error->all(FLERR,"Variable for fix indent is not equal style");
}
if (pstr) {
pvar = input->variable->find(pstr);
if (pvar < 0)
error->all(FLERR,"Variable name for fix indent does not exist");
if (!input->variable->equalstyle(pvar))
error->all(FLERR,"Variable for fix indent is not equal style");
}
if (strstr(update->integrate_style,"respa")) {
ilevel_respa = ((Respa *) update->integrate)->nlevels-1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixIndent::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixIndent::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixIndent::post_force(int vflag)
{
// indenter values, 0 = energy, 1-3 = force components
// wrap variable evaluations with clear/add
if (varflag) modify->clearstep_compute();
indenter_flag = 0;
indenter[0] = indenter[1] = indenter[2] = indenter[3] = 0.0;
// spherical indenter
if (istyle == SPHERE) {
// ctr = current indenter center
// remap into periodic box
double ctr[3];
if (xstr) ctr[0] = input->variable->compute_equal(xvar);
else ctr[0] = xvalue;
if (ystr) ctr[1] = input->variable->compute_equal(yvar);
else ctr[1] = yvalue;
if (zstr) ctr[2] = input->variable->compute_equal(zvar);
else ctr[2] = zvalue;
domain->remap(ctr);
double radius;
if (rstr) radius = input->variable->compute_equal(rvar);
else radius = rvalue;
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double delx,dely,delz,r,dr,fmag,fx,fy,fz;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
delx = x[i][0] - ctr[0];
dely = x[i][1] - ctr[1];
delz = x[i][2] - ctr[2];
domain->minimum_image(delx,dely,delz);
r = sqrt(delx*delx + dely*dely + delz*delz);
if (side == OUTSIDE) {
dr = r - radius;
fmag = k*dr*dr;
} else {
dr = radius - r;
fmag = -k*dr*dr;
}
if (dr >= 0.0) continue;
fx = delx*fmag/r;
fy = dely*fmag/r;
fz = delz*fmag/r;
f[i][0] += fx;
f[i][1] += fy;
f[i][2] += fz;
indenter[0] -= k3 * dr*dr*dr;
indenter[1] -= fx;
indenter[2] -= fy;
indenter[3] -= fz;
}
// cylindrical indenter
} else if (istyle == CYLINDER) {
// ctr = current indenter axis
// remap into periodic box
// 3rd coord is just near box for remap(), since isn't used
double ctr[3];
if (cdim == 0) {
ctr[0] = domain->boxlo[0];
if (ystr) ctr[1] = input->variable->compute_equal(yvar);
else ctr[1] = yvalue;
if (zstr) ctr[2] = input->variable->compute_equal(zvar);
else ctr[2] = zvalue;
} else if (cdim == 1) {
if (xstr) ctr[0] = input->variable->compute_equal(xvar);
else ctr[0] = xvalue;
ctr[1] = domain->boxlo[1];
if (zstr) ctr[2] = input->variable->compute_equal(zvar);
else ctr[2] = zvalue;
} else {
if (xstr) ctr[0] = input->variable->compute_equal(xvar);
else ctr[0] = xvalue;
if (ystr) ctr[1] = input->variable->compute_equal(yvar);
else ctr[1] = yvalue;
ctr[2] = domain->boxlo[2];
}
domain->remap(ctr);
double radius;
if (rstr) radius = input->variable->compute_equal(rvar);
else radius = rvalue;
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double delx,dely,delz,r,dr,fmag,fx,fy,fz;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (cdim == 0) {
delx = 0;
dely = x[i][1] - ctr[1];
delz = x[i][2] - ctr[2];
} else if (cdim == 1) {
delx = x[i][0] - ctr[0];
dely = 0;
delz = x[i][2] - ctr[2];
} else {
delx = x[i][0] - ctr[0];
dely = x[i][1] - ctr[1];
delz = 0;
}
domain->minimum_image(delx,dely,delz);
r = sqrt(delx*delx + dely*dely + delz*delz);
if (side == OUTSIDE) {
dr = r - radius;
fmag = k*dr*dr;
} else {
dr = radius - r;
fmag = -k*dr*dr;
}
if (dr >= 0.0) continue;
fx = delx*fmag/r;
fy = dely*fmag/r;
fz = delz*fmag/r;
f[i][0] += fx;
f[i][1] += fy;
f[i][2] += fz;
indenter[0] -= k3 * dr*dr*dr;
indenter[1] -= fx;
indenter[2] -= fy;
indenter[3] -= fz;
}
// planar indenter
} else {
// plane = current plane position
double plane;
if (pstr) plane = input->variable->compute_equal(pvar);
else plane = pvalue;
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double dr,fatom;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
dr = planeside * (plane - x[i][cdim]);
if (dr >= 0.0) continue;
fatom = -planeside * k*dr*dr;
f[i][cdim] += fatom;
indenter[0] -= k3 * dr*dr*dr;
indenter[cdim+1] -= fatom;
}
}
if (varflag) modify->addstep_compute(update->ntimestep + 1);
}
/* ---------------------------------------------------------------------- */
void FixIndent::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == ilevel_respa) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixIndent::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
energy of indenter interaction
------------------------------------------------------------------------- */
double FixIndent::compute_scalar()
{
// only sum across procs one time
if (indenter_flag == 0) {
MPI_Allreduce(indenter,indenter_all,4,MPI_DOUBLE,MPI_SUM,world);
indenter_flag = 1;
}
return indenter_all[0];
}
/* ----------------------------------------------------------------------
components of force on indenter
------------------------------------------------------------------------- */
double FixIndent::compute_vector(int n)
{
// only sum across procs one time
if (indenter_flag == 0) {
MPI_Allreduce(indenter,indenter_all,4,MPI_DOUBLE,MPI_SUM,world);
indenter_flag = 1;
}
return indenter_all[n+1];
}
/* ----------------------------------------------------------------------
parse optional parameters at end of input line
------------------------------------------------------------------------- */
void FixIndent::options(int narg, char **arg)
{
if (narg < 0) error->all(FLERR,"Illegal fix indent command");
istyle = NONE;
xstr = ystr = zstr = rstr = pstr = NULL;
xvalue = yvalue = zvalue = rvalue = pvalue = 0.0;
scaleflag = 1;
side = OUTSIDE;
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"sphere") == 0) {
if (iarg+5 > narg) error->all(FLERR,"Illegal fix indent command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) {
int n = strlen(&arg[iarg+1][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[iarg+1][2]);
} else xvalue = force->numeric(FLERR,arg[iarg+1]);
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) {
int n = strlen(&arg[iarg+2][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[iarg+2][2]);
} else yvalue = force->numeric(FLERR,arg[iarg+2]);
if (strstr(arg[iarg+3],"v_") == arg[iarg+3]) {
int n = strlen(&arg[iarg+3][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[iarg+3][2]);
} else zvalue = force->numeric(FLERR,arg[iarg+3]);
if (strstr(arg[iarg+4],"v_") == arg[iarg+4]) {
int n = strlen(&arg[iarg+4][2]) + 1;
rstr = new char[n];
strcpy(rstr,&arg[iarg+4][2]);
} else rvalue = force->numeric(FLERR,arg[iarg+4]);
istyle = SPHERE;
iarg += 5;
} else if (strcmp(arg[iarg],"cylinder") == 0) {
if (iarg+5 > narg) error->all(FLERR,"Illegal fix indent command");
if (strcmp(arg[iarg+1],"x") == 0) {
cdim = 0;
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) {
int n = strlen(&arg[iarg+2][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[iarg+2][2]);
} else yvalue = force->numeric(FLERR,arg[iarg+2]);
if (strstr(arg[iarg+3],"v_") == arg[iarg+3]) {
int n = strlen(&arg[iarg+3][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[iarg+3][2]);
} else zvalue = force->numeric(FLERR,arg[iarg+3]);
} else if (strcmp(arg[iarg+1],"y") == 0) {
cdim = 1;
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) {
int n = strlen(&arg[iarg+2][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[iarg+2][2]);
} else xvalue = force->numeric(FLERR,arg[iarg+2]);
if (strstr(arg[iarg+3],"v_") == arg[iarg+3]) {
int n = strlen(&arg[iarg+3][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[iarg+3][2]);
} else zvalue = force->numeric(FLERR,arg[iarg+3]);
} else if (strcmp(arg[iarg+1],"z") == 0) {
cdim = 2;
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) {
int n = strlen(&arg[iarg+2][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[iarg+2][2]);
} else xvalue = force->numeric(FLERR,arg[iarg+2]);
if (strstr(arg[iarg+3],"v_") == arg[iarg+3]) {
int n = strlen(&arg[iarg+3][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[iarg+3][2]);
} else yvalue = force->numeric(FLERR,arg[iarg+3]);
} else error->all(FLERR,"Illegal fix indent command");
if (strstr(arg[iarg+4],"v_") == arg[iarg+4]) {
int n = strlen(&arg[iarg+4][2]) + 1;
rstr = new char[n];
strcpy(rstr,&arg[iarg+4][2]);
} else rvalue = force->numeric(FLERR,arg[iarg+4]);
istyle = CYLINDER;
iarg += 5;
} else if (strcmp(arg[iarg],"plane") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix indent command");
if (strcmp(arg[iarg+1],"x") == 0) cdim = 0;
else if (strcmp(arg[iarg+1],"y") == 0) cdim = 1;
else if (strcmp(arg[iarg+1],"z") == 0) cdim = 2;
else error->all(FLERR,"Illegal fix indent command");
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) {
int n = strlen(&arg[iarg+2][2]) + 1;
pstr = new char[n];
strcpy(pstr,&arg[iarg+2][2]);
} else pvalue = force->numeric(FLERR,arg[iarg+2]);
if (strcmp(arg[iarg+3],"lo") == 0) planeside = -1;
else if (strcmp(arg[iarg+3],"hi") == 0) planeside = 1;
else error->all(FLERR,"Illegal fix indent command");
istyle = PLANE;
iarg += 4;
} else if (strcmp(arg[iarg],"units") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix indent command");
if (strcmp(arg[iarg+1],"box") == 0) scaleflag = 0;
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = 1;
else error->all(FLERR,"Illegal fix indent command");
iarg += 2;
} else if (strcmp(arg[iarg],"side") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix indent command");
if (strcmp(arg[iarg+1],"in") == 0) side = INSIDE;
else if (strcmp(arg[iarg+1],"out") == 0) side = OUTSIDE;
else error->all(FLERR,"Illegal fix indent command");
iarg += 2;
} else error->all(FLERR,"Illegal fix indent command");
}
}
diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp
index ff8d4f184..22f4021b0 100644
--- a/src/fix_langevin.cpp
+++ b/src/fix_langevin.cpp
@@ -1,923 +1,924 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Carolyn Phillips (U Mich), reservoir energy tally
Aidan Thompson (SNL) GJF formulation
------------------------------------------------------------------------- */
#include <mpi.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "fix_langevin.h"
#include "math_extra.h"
#include "atom.h"
#include "atom_vec_ellipsoid.h"
#include "force.h"
#include "update.h"
#include "modify.h"
#include "compute.h"
#include "domain.h"
#include "region.h"
#include "respa.h"
#include "comm.h"
#include "input.h"
#include "variable.h"
#include "random_mars.h"
#include "memory.h"
#include "error.h"
#include "group.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NOBIAS,BIAS};
enum{CONSTANT,EQUAL,ATOM};
#define SINERTIA 0.4 // moment of inertia prefactor for sphere
#define EINERTIA 0.2 // moment of inertia prefactor for ellipsoid
/* ---------------------------------------------------------------------- */
FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ gjfflag(0), gfactor1(NULL), gfactor2(NULL), ratio(NULL), tstr(NULL),
+ flangevin(NULL), tforce(NULL), franprev(NULL), id_temp(NULL), random(NULL)
{
if (narg < 7) error->all(FLERR,"Illegal fix langevin command");
dynamic_group_allow = 1;
scalar_flag = 1;
global_freq = 1;
extscalar = 1;
nevery = 1;
- tstr = NULL;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
tstr = new char[n];
strcpy(tstr,&arg[3][2]);
} else {
t_start = force->numeric(FLERR,arg[3]);
t_target = t_start;
tstyle = CONSTANT;
}
t_stop = force->numeric(FLERR,arg[4]);
t_period = force->numeric(FLERR,arg[5]);
seed = force->inumeric(FLERR,arg[6]);
if (t_period <= 0.0) error->all(FLERR,"Fix langevin period must be > 0.0");
if (seed <= 0) error->all(FLERR,"Illegal fix langevin command");
// initialize Marsaglia RNG with processor-unique seed
random = new RanMars(lmp,seed + comm->me);
// allocate per-type arrays for force prefactors
gfactor1 = new double[atom->ntypes+1];
gfactor2 = new double[atom->ntypes+1];
ratio = new double[atom->ntypes+1];
// optional args
for (int i = 1; i <= atom->ntypes; i++) ratio[i] = 1.0;
ascale = 0.0;
gjfflag = 0;
oflag = 0;
tallyflag = 0;
zeroflag = 0;
int iarg = 7;
while (iarg < narg) {
if (strcmp(arg[iarg],"angmom") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command");
if (strcmp(arg[iarg+1],"no") == 0) ascale = 0.0;
else ascale = force->numeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"gjf") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command");
if (strcmp(arg[iarg+1],"no") == 0) gjfflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) gjfflag = 1;
else error->all(FLERR,"Illegal fix langevin command");
iarg += 2;
} else if (strcmp(arg[iarg],"omega") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command");
if (strcmp(arg[iarg+1],"no") == 0) oflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) oflag = 1;
else error->all(FLERR,"Illegal fix langevin command");
iarg += 2;
} else if (strcmp(arg[iarg],"scale") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix langevin command");
int itype = force->inumeric(FLERR,arg[iarg+1]);
double scale = force->numeric(FLERR,arg[iarg+2]);
if (itype <= 0 || itype > atom->ntypes)
error->all(FLERR,"Illegal fix langevin command");
ratio[itype] = scale;
iarg += 3;
} else if (strcmp(arg[iarg],"tally") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command");
if (strcmp(arg[iarg+1],"no") == 0) tallyflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) tallyflag = 1;
else error->all(FLERR,"Illegal fix langevin command");
iarg += 2;
} else if (strcmp(arg[iarg],"zero") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command");
if (strcmp(arg[iarg+1],"no") == 0) zeroflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) zeroflag = 1;
else error->all(FLERR,"Illegal fix langevin command");
iarg += 2;
} else error->all(FLERR,"Illegal fix langevin command");
}
// set temperature = NULL, user can override via fix_modify if wants bias
id_temp = NULL;
temperature = NULL;
energy = 0.0;
// flangevin is unallocated until first call to setup()
// compute_scalar checks for this and returns 0.0
// if flangevin_allocated is not set
flangevin = NULL;
flangevin_allocated = 0;
franprev = NULL;
tforce = NULL;
maxatom1 = maxatom2 = 0;
// Setup atom-based array for franprev
// register with Atom class
// No need to set peratom_flag
// as this data is for internal use only
if (gjfflag) {
nvalues = 3;
grow_arrays(atom->nmax);
atom->add_callback(0);
// initialize franprev to zero
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
franprev[i][0] = 0.0;
franprev[i][1] = 0.0;
franprev[i][2] = 0.0;
}
}
if (tallyflag && zeroflag && comm->me == 0)
error->warning(FLERR,"Energy tally does not account for 'zero yes'");
}
/* ---------------------------------------------------------------------- */
FixLangevin::~FixLangevin()
{
delete random;
delete [] tstr;
delete [] gfactor1;
delete [] gfactor2;
delete [] ratio;
delete [] id_temp;
memory->destroy(flangevin);
memory->destroy(tforce);
if (gjfflag) {
memory->destroy(franprev);
atom->delete_callback(id,0);
}
}
/* ---------------------------------------------------------------------- */
int FixLangevin::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= POST_FORCE_RESPA;
mask |= END_OF_STEP;
mask |= THERMO_ENERGY;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixLangevin::init()
{
if (oflag && !atom->sphere_flag)
error->all(FLERR,"Fix langevin omega requires atom style sphere");
if (ascale && !atom->ellipsoid_flag)
error->all(FLERR,"Fix langevin angmom requires atom style ellipsoid");
// check variable
if (tstr) {
tvar = input->variable->find(tstr);
if (tvar < 0)
error->all(FLERR,"Variable name for fix langevin does not exist");
if (input->variable->equalstyle(tvar)) tstyle = EQUAL;
else if (input->variable->atomstyle(tvar)) tstyle = ATOM;
else error->all(FLERR,"Variable for fix langevin is invalid style");
}
// if oflag or ascale set, check that all group particles are finite-size
if (oflag) {
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
if (radius[i] == 0.0)
error->one(FLERR,"Fix langevin omega requires extended particles");
}
if (ascale) {
avec = (AtomVecEllipsoid *) atom->style_match("ellipsoid");
if (!avec)
error->all(FLERR,"Fix langevin angmom requires atom style ellipsoid");
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
if (ellipsoid[i] < 0)
error->one(FLERR,"Fix langevin angmom requires extended particles");
}
// set force prefactors
if (!atom->rmass) {
for (int i = 1; i <= atom->ntypes; i++) {
gfactor1[i] = -atom->mass[i] / t_period / force->ftm2v;
gfactor2[i] = sqrt(atom->mass[i]) *
sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) /
force->ftm2v;
gfactor1[i] *= 1.0/ratio[i];
gfactor2[i] *= 1.0/sqrt(ratio[i]);
}
}
if (temperature && temperature->tempbias) tbiasflag = BIAS;
else tbiasflag = NOBIAS;
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
if (gjfflag) gjffac = 1.0/(1.0+update->dt/2.0/t_period);
}
/* ---------------------------------------------------------------------- */
void FixLangevin::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1);
post_force_respa(vflag,nlevels_respa-1,0);
((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1);
}
}
/* ---------------------------------------------------------------------- */
void FixLangevin::post_force(int vflag)
{
double *rmass = atom->rmass;
// enumerate all 2^6 possibilities for template parameters
// this avoids testing them inside inner loop:
// TSTYLEATOM, GJF, TALLY, BIAS, RMASS, ZERO
#ifdef TEMPLATED_FIX_LANGEVIN
if (tstyle == ATOM)
if (gjfflag)
if (tallyflag)
if (tbiasflag == BIAS)
if (rmass)
if (zeroflag) post_force_templated<1,1,1,1,1,1>();
else post_force_templated<1,1,1,1,1,0>();
else
if (zeroflag) post_force_templated<1,1,1,1,0,1>();
else post_force_templated<1,1,1,1,0,0>();
else
if (rmass)
if (zeroflag) post_force_templated<1,1,1,0,1,1>();
else post_force_templated<1,1,1,0,1,0>();
else
if (zeroflag) post_force_templated<1,1,1,0,0,1>();
else post_force_templated<1,1,1,0,0,0>();
else
if (tbiasflag == BIAS)
if (rmass)
if (zeroflag) post_force_templated<1,1,0,1,1,1>();
else post_force_templated<1,1,0,1,1,0>();
else
if (zeroflag) post_force_templated<1,1,0,1,0,1>();
else post_force_templated<1,1,0,1,0,0>();
else
if (rmass)
if (zeroflag) post_force_templated<1,1,0,0,1,1>();
else post_force_templated<1,1,0,0,1,0>();
else
if (zeroflag) post_force_templated<1,1,0,0,0,1>();
else post_force_templated<1,1,0,0,0,0>();
else
if (tallyflag)
if (tbiasflag == BIAS)
if (rmass)
if (zeroflag) post_force_templated<1,0,1,1,1,1>();
else post_force_templated<1,0,1,1,1,0>();
else
if (zeroflag) post_force_templated<1,0,1,1,0,1>();
else post_force_templated<1,0,1,1,0,0>();
else
if (rmass)
if (zeroflag) post_force_templated<1,0,1,0,1,1>();
else post_force_templated<1,0,1,0,1,0>();
else
if (zeroflag) post_force_templated<1,0,1,0,0,1>();
else post_force_templated<1,0,1,0,0,0>();
else
if (tbiasflag == BIAS)
if (rmass)
if (zeroflag) post_force_templated<1,0,0,1,1,1>();
else post_force_templated<1,0,0,1,1,0>();
else
if (zeroflag) post_force_templated<1,0,0,1,0,1>();
else post_force_templated<1,0,0,1,0,0>();
else
if (rmass)
if (zeroflag) post_force_templated<1,0,0,0,1,1>();
else post_force_templated<1,0,0,0,1,0>();
else
if (zeroflag) post_force_templated<1,0,0,0,0,1>();
else post_force_templated<1,0,0,0,0,0>();
else
if (gjfflag)
if (tallyflag)
if (tbiasflag == BIAS)
if (rmass)
if (zeroflag) post_force_templated<0,1,1,1,1,1>();
else post_force_templated<0,1,1,1,1,0>();
else
if (zeroflag) post_force_templated<0,1,1,1,0,1>();
else post_force_templated<0,1,1,1,0,0>();
else
if (rmass)
if (zeroflag) post_force_templated<0,1,1,0,1,1>();
else post_force_templated<0,1,1,0,1,0>();
else
if (zeroflag) post_force_templated<0,1,1,0,0,1>();
else post_force_templated<0,1,1,0,0,0>();
else
if (tbiasflag == BIAS)
if (rmass)
if (zeroflag) post_force_templated<0,1,0,1,1,1>();
else post_force_templated<0,1,0,1,1,0>();
else
if (zeroflag) post_force_templated<0,1,0,1,0,1>();
else post_force_templated<0,1,0,1,0,0>();
else
if (rmass)
if (zeroflag) post_force_templated<0,1,0,0,1,1>();
else post_force_templated<0,1,0,0,1,0>();
else
if (zeroflag) post_force_templated<0,1,0,0,0,1>();
else post_force_templated<0,1,0,0,0,0>();
else
if (tallyflag)
if (tbiasflag == BIAS)
if (rmass)
if (zeroflag) post_force_templated<0,0,1,1,1,1>();
else post_force_templated<0,0,1,1,1,0>();
else
if (zeroflag) post_force_templated<0,0,1,1,0,1>();
else post_force_templated<0,0,1,1,0,0>();
else
if (rmass)
if (zeroflag) post_force_templated<0,0,1,0,1,1>();
else post_force_templated<0,0,1,0,1,0>();
else
if (zeroflag) post_force_templated<0,0,1,0,0,1>();
else post_force_templated<0,0,1,0,0,0>();
else
if (tbiasflag == BIAS)
if (rmass)
if (zeroflag) post_force_templated<0,0,0,1,1,1>();
else post_force_templated<0,0,0,1,1,0>();
else
if (zeroflag) post_force_templated<0,0,0,1,0,1>();
else post_force_templated<0,0,0,1,0,0>();
else
if (rmass)
if (zeroflag) post_force_templated<0,0,0,0,1,1>();
else post_force_templated<0,0,0,0,1,0>();
else
if (zeroflag) post_force_templated<0,0,0,0,0,1>();
else post_force_templated<0,0,0,0,0,0>();
#else
post_force_untemplated(int(tstyle==ATOM), gjfflag, tallyflag,
int(tbiasflag==BIAS), int(rmass!=NULL), zeroflag);
#endif
}
/* ---------------------------------------------------------------------- */
void FixLangevin::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == nlevels_respa-1) post_force(vflag);
}
/* ----------------------------------------------------------------------
modify forces using one of the many Langevin styles
------------------------------------------------------------------------- */
#ifdef TEMPLATED_FIX_LANGEVIN
template < int Tp_TSTYLEATOM, int Tp_GJF, int Tp_TALLY,
int Tp_BIAS, int Tp_RMASS, int Tp_ZERO >
void FixLangevin::post_force_templated()
#else
void FixLangevin::post_force_untemplated
(int Tp_TSTYLEATOM, int Tp_GJF, int Tp_TALLY,
int Tp_BIAS, int Tp_RMASS, int Tp_ZERO)
#endif
{
double gamma1,gamma2;
double **v = atom->v;
double **f = atom->f;
double *rmass = atom->rmass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
// apply damping and thermostat to atoms in group
// for Tp_TSTYLEATOM:
// use per-atom per-coord target temperature
// for Tp_GJF:
// use Gronbech-Jensen/Farago algorithm
// else use regular algorithm
// for Tp_TALLY:
// store drag plus random forces in flangevin[nlocal][3]
// for Tp_BIAS:
// calculate temperature since some computes require temp
// computed on current nlocal atoms to remove bias
// test v = 0 since some computes mask non-participating atoms via v = 0
// and added force has extra term not multiplied by v = 0
// for Tp_RMASS:
// use per-atom masses
// else use per-type masses
// for Tp_ZERO:
// sum random force over all atoms in group
// subtract sum/count from each atom in group
double fdrag[3],fran[3],fsum[3],fsumall[3];
bigint count;
double fswap;
double boltz = force->boltz;
double dt = update->dt;
double mvv2e = force->mvv2e;
double ftm2v = force->ftm2v;
compute_target();
if (Tp_ZERO) {
fsum[0] = fsum[1] = fsum[2] = 0.0;
count = group->count(igroup);
if (count == 0)
error->all(FLERR,"Cannot zero Langevin force of 0 atoms");
}
// reallocate flangevin if necessary
if (Tp_TALLY) {
if (atom->nmax > maxatom1) {
memory->destroy(flangevin);
maxatom1 = atom->nmax;
memory->create(flangevin,maxatom1,3,"langevin:flangevin");
}
flangevin_allocated = 1;
}
if (Tp_BIAS) temperature->compute_scalar();
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
if (Tp_TSTYLEATOM) tsqrt = sqrt(tforce[i]);
if (Tp_RMASS) {
gamma1 = -rmass[i] / t_period / ftm2v;
gamma2 = sqrt(rmass[i]) * sqrt(24.0*boltz/t_period/dt/mvv2e) / ftm2v;
gamma1 *= 1.0/ratio[type[i]];
gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt;
} else {
gamma1 = gfactor1[type[i]];
gamma2 = gfactor2[type[i]] * tsqrt;
}
fran[0] = gamma2*(random->uniform()-0.5);
fran[1] = gamma2*(random->uniform()-0.5);
fran[2] = gamma2*(random->uniform()-0.5);
if (Tp_BIAS) {
temperature->remove_bias(i,v[i]);
fdrag[0] = gamma1*v[i][0];
fdrag[1] = gamma1*v[i][1];
fdrag[2] = gamma1*v[i][2];
if (v[i][0] == 0.0) fran[0] = 0.0;
if (v[i][1] == 0.0) fran[1] = 0.0;
if (v[i][2] == 0.0) fran[2] = 0.0;
temperature->restore_bias(i,v[i]);
} else {
fdrag[0] = gamma1*v[i][0];
fdrag[1] = gamma1*v[i][1];
fdrag[2] = gamma1*v[i][2];
}
if (Tp_GJF) {
fswap = 0.5*(fran[0]+franprev[i][0]);
franprev[i][0] = fran[0];
fran[0] = fswap;
fswap = 0.5*(fran[1]+franprev[i][1]);
franprev[i][1] = fran[1];
fran[1] = fswap;
fswap = 0.5*(fran[2]+franprev[i][2]);
franprev[i][2] = fran[2];
fran[2] = fswap;
fdrag[0] *= gjffac;
fdrag[1] *= gjffac;
fdrag[2] *= gjffac;
fran[0] *= gjffac;
fran[1] *= gjffac;
fran[2] *= gjffac;
f[i][0] *= gjffac;
f[i][1] *= gjffac;
f[i][2] *= gjffac;
}
f[i][0] += fdrag[0] + fran[0];
f[i][1] += fdrag[1] + fran[1];
f[i][2] += fdrag[2] + fran[2];
if (Tp_TALLY) {
flangevin[i][0] = fdrag[0] + fran[0];
flangevin[i][1] = fdrag[1] + fran[1];
flangevin[i][2] = fdrag[2] + fran[2];
}
if (Tp_ZERO) {
fsum[0] += fran[0];
fsum[1] += fran[1];
fsum[2] += fran[2];
}
}
}
// set total force to zero
if (Tp_ZERO) {
MPI_Allreduce(fsum,fsumall,3,MPI_DOUBLE,MPI_SUM,world);
fsumall[0] /= count;
fsumall[1] /= count;
fsumall[2] /= count;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
f[i][0] -= fsumall[0];
f[i][1] -= fsumall[1];
f[i][2] -= fsumall[2];
}
}
}
// thermostat omega and angmom
if (oflag) omega_thermostat();
if (ascale) angmom_thermostat();
}
/* ----------------------------------------------------------------------
set current t_target and t_sqrt
------------------------------------------------------------------------- */
void FixLangevin::compute_target()
{
int *mask = atom->mask;
int nlocal = atom->nlocal;
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
// if variable temp, evaluate variable, wrap with clear/add
// reallocate tforce array if necessary
if (tstyle == CONSTANT) {
t_target = t_start + delta * (t_stop-t_start);
tsqrt = sqrt(t_target);
} else {
modify->clearstep_compute();
if (tstyle == EQUAL) {
t_target = input->variable->compute_equal(tvar);
if (t_target < 0.0)
error->one(FLERR,"Fix langevin variable returned negative temperature");
tsqrt = sqrt(t_target);
} else {
if (atom->nmax > maxatom2) {
maxatom2 = atom->nmax;
memory->destroy(tforce);
memory->create(tforce,maxatom2,"langevin:tforce");
}
input->variable->compute_atom(tvar,igroup,tforce,1,0);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
if (tforce[i] < 0.0)
error->one(FLERR,
"Fix langevin variable returned negative temperature");
}
modify->addstep_compute(update->ntimestep + 1);
}
}
/* ----------------------------------------------------------------------
thermostat rotational dof via omega
------------------------------------------------------------------------- */
void FixLangevin::omega_thermostat()
{
double gamma1,gamma2;
double boltz = force->boltz;
double dt = update->dt;
double mvv2e = force->mvv2e;
double ftm2v = force->ftm2v;
double **torque = atom->torque;
double **omega = atom->omega;
double *radius = atom->radius;
double *rmass = atom->rmass;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
// rescale gamma1/gamma2 by 10/3 & sqrt(10/3) for spherical particles
// does not affect rotational thermosatting
// gives correct rotational diffusivity behavior
double tendivthree = 10.0/3.0;
double tran[3];
double inertiaone;
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && (radius[i] > 0.0)) {
inertiaone = SINERTIA*radius[i]*radius[i]*rmass[i];
if (tstyle == ATOM) tsqrt = sqrt(tforce[i]);
gamma1 = -tendivthree*inertiaone / t_period / ftm2v;
gamma2 = sqrt(inertiaone) * sqrt(80.0*boltz/t_period/dt/mvv2e) / ftm2v;
gamma1 *= 1.0/ratio[type[i]];
gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt;
tran[0] = gamma2*(random->uniform()-0.5);
tran[1] = gamma2*(random->uniform()-0.5);
tran[2] = gamma2*(random->uniform()-0.5);
torque[i][0] += gamma1*omega[i][0] + tran[0];
torque[i][1] += gamma1*omega[i][1] + tran[1];
torque[i][2] += gamma1*omega[i][2] + tran[2];
}
}
}
/* ----------------------------------------------------------------------
thermostat rotational dof via angmom
------------------------------------------------------------------------- */
void FixLangevin::angmom_thermostat()
{
double gamma1,gamma2;
double boltz = force->boltz;
double dt = update->dt;
double mvv2e = force->mvv2e;
double ftm2v = force->ftm2v;
AtomVecEllipsoid::Bonus *bonus = avec->bonus;
double **torque = atom->torque;
double **angmom = atom->angmom;
double *rmass = atom->rmass;
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
// rescale gamma1/gamma2 by ascale for aspherical particles
// does not affect rotational thermosatting
// gives correct rotational diffusivity behavior if (nearly) spherical
// any value will be incorrect for rotational diffusivity if aspherical
double inertia[3],omega[3],tran[3];
double *shape,*quat;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
shape = bonus[ellipsoid[i]].shape;
inertia[0] = EINERTIA*rmass[i] * (shape[1]*shape[1]+shape[2]*shape[2]);
inertia[1] = EINERTIA*rmass[i] * (shape[0]*shape[0]+shape[2]*shape[2]);
inertia[2] = EINERTIA*rmass[i] * (shape[0]*shape[0]+shape[1]*shape[1]);
quat = bonus[ellipsoid[i]].quat;
MathExtra::mq_to_omega(angmom[i],quat,inertia,omega);
if (tstyle == ATOM) tsqrt = sqrt(tforce[i]);
gamma1 = -ascale / t_period / ftm2v;
gamma2 = sqrt(ascale*24.0*boltz/t_period/dt/mvv2e) / ftm2v;
gamma1 *= 1.0/ratio[type[i]];
gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt;
tran[0] = sqrt(inertia[0])*gamma2*(random->uniform()-0.5);
tran[1] = sqrt(inertia[1])*gamma2*(random->uniform()-0.5);
tran[2] = sqrt(inertia[2])*gamma2*(random->uniform()-0.5);
torque[i][0] += inertia[0]*gamma1*omega[0] + tran[0];
torque[i][1] += inertia[1]*gamma1*omega[1] + tran[1];
torque[i][2] += inertia[2]*gamma1*omega[2] + tran[2];
}
}
}
/* ----------------------------------------------------------------------
tally energy transfer to thermal reservoir
------------------------------------------------------------------------- */
void FixLangevin::end_of_step()
{
if (!tallyflag) return;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
energy_onestep = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] +
flangevin[i][2]*v[i][2];
energy += energy_onestep*update->dt;
}
/* ---------------------------------------------------------------------- */
void FixLangevin::reset_target(double t_new)
{
t_target = t_start = t_stop = t_new;
}
/* ---------------------------------------------------------------------- */
void FixLangevin::reset_dt()
{
if (atom->mass) {
for (int i = 1; i <= atom->ntypes; i++) {
gfactor2[i] = sqrt(atom->mass[i]) *
sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) /
force->ftm2v;
gfactor2[i] *= 1.0/sqrt(ratio[i]);
}
}
}
/* ---------------------------------------------------------------------- */
int FixLangevin::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"temp") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
delete [] id_temp;
int n = strlen(arg[1]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[1]);
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Could not find fix_modify temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,
"Fix_modify temperature ID does not compute temperature");
if (temperature->igroup != igroup && comm->me == 0)
error->warning(FLERR,"Group for fix_modify temp != fix group");
return 2;
}
return 0;
}
/* ---------------------------------------------------------------------- */
double FixLangevin::compute_scalar()
{
if (!tallyflag || !flangevin_allocated) return 0.0;
// capture the very first energy transfer to thermal reservoir
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (update->ntimestep == update->beginstep) {
energy_onestep = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] +
flangevin[i][2]*v[i][2];
energy = 0.5*energy_onestep*update->dt;
}
// convert midstep energy back to previous fullstep energy
double energy_me = energy - 0.5*energy_onestep*update->dt;
double energy_all;
MPI_Allreduce(&energy_me,&energy_all,1,MPI_DOUBLE,MPI_SUM,world);
return -energy_all;
}
/* ----------------------------------------------------------------------
extract thermostat properties
------------------------------------------------------------------------- */
void *FixLangevin::extract(const char *str, int &dim)
{
dim = 0;
if (strcmp(str,"t_target") == 0) {
return &t_target;
}
return NULL;
}
/* ----------------------------------------------------------------------
memory usage of tally array
------------------------------------------------------------------------- */
double FixLangevin::memory_usage()
{
double bytes = 0.0;
if (gjfflag) bytes += atom->nmax*3 * sizeof(double);
if (tallyflag) bytes += atom->nmax*3 * sizeof(double);
if (tforce) bytes += atom->nmax * sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
allocate atom-based array for franprev
------------------------------------------------------------------------- */
void FixLangevin::grow_arrays(int nmax)
{
memory->grow(franprev,nmax,3,"fix_langevin:franprev");
}
/* ----------------------------------------------------------------------
copy values within local atom-based array
------------------------------------------------------------------------- */
void FixLangevin::copy_arrays(int i, int j, int delflag)
{
for (int m = 0; m < nvalues; m++)
franprev[j][m] = franprev[i][m];
}
/* ----------------------------------------------------------------------
pack values in local atom-based array for exchange with another proc
------------------------------------------------------------------------- */
int FixLangevin::pack_exchange(int i, double *buf)
{
for (int m = 0; m < nvalues; m++) buf[m] = franprev[i][m];
return nvalues;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based array from exchange with another proc
------------------------------------------------------------------------- */
int FixLangevin::unpack_exchange(int nlocal, double *buf)
{
for (int m = 0; m < nvalues; m++) franprev[nlocal][m] = buf[m];
return nvalues;
}
diff --git a/src/fix_minimize.cpp b/src/fix_minimize.cpp
index 1cd8456f5..cc00cc286 100644
--- a/src/fix_minimize.cpp
+++ b/src/fix_minimize.cpp
@@ -1,234 +1,231 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include "fix_minimize.h"
#include "atom.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixMinimize::FixMinimize(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ nvector(0), peratom(NULL), vectors(NULL)
{
- nvector = 0;
- peratom = NULL;
- vectors = NULL;
-
// register callback to this fix from Atom class
// don't perform initial allocation here, must wait until add_vector()
atom->add_callback(0);
}
/* ---------------------------------------------------------------------- */
FixMinimize::~FixMinimize()
{
// unregister callbacks to this fix from Atom class
atom->delete_callback(id,0);
// delete locally stored data
memory->destroy(peratom);
for (int m = 0; m < nvector; m++) memory->destroy(vectors[m]);
memory->sfree(vectors);
}
/* ---------------------------------------------------------------------- */
int FixMinimize::setmask()
{
return 0;
}
/* ----------------------------------------------------------------------
allocate/initialize memory for a new vector with N elements per atom
------------------------------------------------------------------------- */
void FixMinimize::add_vector(int n)
{
memory->grow(peratom,nvector+1,"minimize:peratom");
peratom[nvector] = n;
vectors = (double **)
memory->srealloc(vectors,(nvector+1)*sizeof(double *),"minimize:vectors");
memory->create(vectors[nvector],atom->nmax*n,"minimize:vector");
int ntotal = n*atom->nlocal;
for (int i = 0; i < ntotal; i++) vectors[nvector][i] = 0.0;
nvector++;
}
/* ----------------------------------------------------------------------
return a pointer to the Mth vector
------------------------------------------------------------------------- */
double *FixMinimize::request_vector(int m)
{
return vectors[m];
}
/* ----------------------------------------------------------------------
store box size at beginning of line search
------------------------------------------------------------------------- */
void FixMinimize::store_box()
{
boxlo[0] = domain->boxlo[0];
boxlo[1] = domain->boxlo[1];
boxlo[2] = domain->boxlo[2];
boxhi[0] = domain->boxhi[0];
boxhi[1] = domain->boxhi[1];
boxhi[2] = domain->boxhi[2];
}
/* ----------------------------------------------------------------------
reset x0 for atoms that moved across PBC via reneighboring in line search
x0 = 1st vector
must do minimum_image using original box stored at beginning of line search
swap & set_global_box() change to original box, then restore current box
------------------------------------------------------------------------- */
void FixMinimize::reset_coords()
{
box_swap();
domain->set_global_box();
double **x = atom->x;
double *x0 = vectors[0];
int nlocal = atom->nlocal;
double dx,dy,dz,dx0,dy0,dz0;
int n = 0;
for (int i = 0; i < nlocal; i++) {
dx = dx0 = x[i][0] - x0[n];
dy = dy0 = x[i][1] - x0[n+1];
dz = dz0 = x[i][2] - x0[n+2];
domain->minimum_image(dx,dy,dz);
if (dx != dx0) x0[n] = x[i][0] - dx;
if (dy != dy0) x0[n+1] = x[i][1] - dy;
if (dz != dz0) x0[n+2] = x[i][2] - dz;
n += 3;
}
box_swap();
domain->set_global_box();
}
/* ----------------------------------------------------------------------
swap current box size with stored box size
------------------------------------------------------------------------- */
void FixMinimize::box_swap()
{
double tmp;
tmp = boxlo[0];
boxlo[0] = domain->boxlo[0];
domain->boxlo[0] = tmp;
tmp = boxlo[1];
boxlo[1] = domain->boxlo[1];
domain->boxlo[1] = tmp;
tmp = boxlo[2];
boxlo[2] = domain->boxlo[2];
domain->boxlo[2] = tmp;
tmp = boxhi[0];
boxhi[0] = domain->boxhi[0];
domain->boxhi[0] = tmp;
tmp = boxhi[1];
boxhi[1] = domain->boxhi[1];
domain->boxhi[1] = tmp;
tmp = boxhi[2];
boxhi[2] = domain->boxhi[2];
domain->boxhi[2] = tmp;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixMinimize::memory_usage()
{
double bytes = 0.0;
for (int m = 0; m < nvector; m++)
bytes += atom->nmax*peratom[m]*sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
allocate local atom-based arrays
------------------------------------------------------------------------- */
void FixMinimize::grow_arrays(int nmax)
{
for (int m = 0; m < nvector; m++)
memory->grow(vectors[m],peratom[m]*nmax,"minimize:vector");
}
/* ----------------------------------------------------------------------
copy values within local atom-based arrays
------------------------------------------------------------------------- */
void FixMinimize::copy_arrays(int i, int j, int delflag)
{
int m,iper,nper,ni,nj;
for (m = 0; m < nvector; m++) {
nper = peratom[m];
ni = nper*i;
nj = nper*j;
for (iper = 0; iper < nper; iper++) vectors[m][nj++] = vectors[m][ni++];
}
}
/* ----------------------------------------------------------------------
pack values in local atom-based arrays for exchange with another proc
------------------------------------------------------------------------- */
int FixMinimize::pack_exchange(int i, double *buf)
{
int m,iper,nper,ni;
int n = 0;
for (m = 0; m < nvector; m++) {
nper = peratom[m];
ni = nper*i;
for (iper = 0; iper < nper; iper++) buf[n++] = vectors[m][ni++];
}
return n;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based arrays from exchange with another proc
------------------------------------------------------------------------- */
int FixMinimize::unpack_exchange(int nlocal, double *buf)
{
int m,iper,nper,ni;
int n = 0;
for (m = 0; m < nvector; m++) {
nper = peratom[m];
ni = nper*nlocal;
for (iper = 0; iper < nper; iper++) vectors[m][ni++] = buf[n++];
}
return n;
}
diff --git a/src/fix_move.cpp b/src/fix_move.cpp
index f5f7b8cad..3c0797738 100644
--- a/src/fix_move.cpp
+++ b/src/fix_move.cpp
@@ -1,1252 +1,1249 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "fix_move.h"
#include "atom.h"
#include "group.h"
#include "update.h"
#include "modify.h"
#include "force.h"
#include "domain.h"
#include "lattice.h"
#include "comm.h"
#include "respa.h"
#include "input.h"
#include "variable.h"
#include "atom_vec_ellipsoid.h"
#include "atom_vec_line.h"
#include "atom_vec_tri.h"
#include "atom_vec_body.h"
#include "math_const.h"
#include "math_extra.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
using namespace MathConst;
enum{LINEAR,WIGGLE,ROTATE,VARIABLE};
enum{EQUAL,ATOM};
#define INERTIA 0.2 // moment of inertia prefactor for ellipsoid
/* ---------------------------------------------------------------------- */
FixMove::FixMove(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ xvarstr(NULL), yvarstr(NULL), zvarstr(NULL), vxvarstr(NULL), vyvarstr(NULL), vzvarstr(NULL),
+ xoriginal(NULL), toriginal(NULL), qoriginal(NULL), displace(NULL), velocity(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal fix move command");
restart_global = 1;
restart_peratom = 1;
peratom_flag = 1;
size_peratom_cols = 3;
peratom_freq = 1;
time_integrate = 1;
create_attribute = 1;
displaceflag = 0;
velocityflag = 0;
maxatom = 0;
// parse args
int iarg;
- xvarstr = yvarstr = zvarstr = NULL;
- vxvarstr = vyvarstr = vzvarstr = NULL;
-
+
if (strcmp(arg[3],"linear") == 0) {
if (narg < 7) error->all(FLERR,"Illegal fix move command");
iarg = 7;
mstyle = LINEAR;
if (strcmp(arg[4],"NULL") == 0) vxflag = 0;
else {
vxflag = 1;
vx = force->numeric(FLERR,arg[4]);
}
if (strcmp(arg[5],"NULL") == 0) vyflag = 0;
else {
vyflag = 1;
vy = force->numeric(FLERR,arg[5]);
}
if (strcmp(arg[6],"NULL") == 0) vzflag = 0;
else {
vzflag = 1;
vz = force->numeric(FLERR,arg[6]);
}
} else if (strcmp(arg[3],"wiggle") == 0) {
if (narg < 8) error->all(FLERR,"Illegal fix move command");
iarg = 8;
mstyle = WIGGLE;
if (strcmp(arg[4],"NULL") == 0) axflag = 0;
else {
axflag = 1;
ax = force->numeric(FLERR,arg[4]);
}
if (strcmp(arg[5],"NULL") == 0) ayflag = 0;
else {
ayflag = 1;
ay = force->numeric(FLERR,arg[5]);
}
if (strcmp(arg[6],"NULL") == 0) azflag = 0;
else {
azflag = 1;
az = force->numeric(FLERR,arg[6]);
}
period = force->numeric(FLERR,arg[7]);
if (period <= 0.0) error->all(FLERR,"Illegal fix move command");
} else if (strcmp(arg[3],"rotate") == 0) {
if (narg < 11) error->all(FLERR,"Illegal fix move command");
iarg = 11;
mstyle = ROTATE;
point[0] = force->numeric(FLERR,arg[4]);
point[1] = force->numeric(FLERR,arg[5]);
point[2] = force->numeric(FLERR,arg[6]);
axis[0] = force->numeric(FLERR,arg[7]);
axis[1] = force->numeric(FLERR,arg[8]);
axis[2] = force->numeric(FLERR,arg[9]);
period = force->numeric(FLERR,arg[10]);
if (period <= 0.0) error->all(FLERR,"Illegal fix move command");
} else if (strcmp(arg[3],"variable") == 0) {
if (narg < 10) error->all(FLERR,"Illegal fix move command");
iarg = 10;
mstyle = VARIABLE;
if (strcmp(arg[4],"NULL") == 0) xvarstr = NULL;
else if (strstr(arg[4],"v_") == arg[4]) {
int n = strlen(&arg[4][2]) + 1;
xvarstr = new char[n];
strcpy(xvarstr,&arg[4][2]);
} else error->all(FLERR,"Illegal fix move command");
if (strcmp(arg[5],"NULL") == 0) yvarstr = NULL;
else if (strstr(arg[5],"v_") == arg[5]) {
int n = strlen(&arg[5][2]) + 1;
yvarstr = new char[n];
strcpy(yvarstr,&arg[5][2]);
} else error->all(FLERR,"Illegal fix move command");
if (strcmp(arg[6],"NULL") == 0) zvarstr = NULL;
else if (strstr(arg[6],"v_") == arg[6]) {
int n = strlen(&arg[6][2]) + 1;
zvarstr = new char[n];
strcpy(zvarstr,&arg[6][2]);
} else error->all(FLERR,"Illegal fix move command");
if (strcmp(arg[7],"NULL") == 0) vxvarstr = NULL;
else if (strstr(arg[7],"v_") == arg[7]) {
int n = strlen(&arg[7][2]) + 1;
vxvarstr = new char[n];
strcpy(vxvarstr,&arg[7][2]);
} else error->all(FLERR,"Illegal fix move command");
if (strcmp(arg[8],"NULL") == 0) vyvarstr = NULL;
else if (strstr(arg[8],"v_") == arg[8]) {
int n = strlen(&arg[8][2]) + 1;
vyvarstr = new char[n];
strcpy(vyvarstr,&arg[8][2]);
} else error->all(FLERR,"Illegal fix move command");
if (strcmp(arg[9],"NULL") == 0) vzvarstr = NULL;
else if (strstr(arg[9],"v_") == arg[9]) {
int n = strlen(&arg[9][2]) + 1;
vzvarstr = new char[n];
strcpy(vzvarstr,&arg[9][2]);
} else error->all(FLERR,"Illegal fix move command");
} else error->all(FLERR,"Illegal fix move command");
// optional args
int scaleflag = 1;
while (iarg < narg) {
if (strcmp(arg[iarg],"units") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix move command");
if (strcmp(arg[iarg+1],"box") == 0) scaleflag = 0;
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = 1;
else error->all(FLERR,"Illegal fix move command");
iarg += 2;
} else error->all(FLERR,"Illegal fix move command");
}
// error checks and warnings
if (domain->dimension == 2) {
if (mstyle == LINEAR && vzflag && vz != 0.0)
error->all(FLERR,"Fix move cannot set linear z motion for 2d problem");
if (mstyle == WIGGLE && azflag && az != 0.0)
error->all(FLERR,"Fix move cannot set wiggle z motion for 2d problem");
if (mstyle == ROTATE && (axis[0] != 0.0 || axis[1] != 0.0))
error->all(FLERR,
"Fix move cannot rotate around non z-axis for 2d problem");
if (mstyle == VARIABLE && (zvarstr || vzvarstr))
error->all(FLERR,
"Fix move cannot define z or vz variable for 2d problem");
}
// setup scaling and apply scaling factors to velocity & amplitude
if ((mstyle == LINEAR || mstyle == WIGGLE || mstyle == ROTATE) &&
scaleflag) {
double xscale = domain->lattice->xlattice;
double yscale = domain->lattice->ylattice;
double zscale = domain->lattice->zlattice;
if (mstyle == LINEAR) {
if (vxflag) vx *= xscale;
if (vyflag) vy *= yscale;
if (vzflag) vz *= zscale;
} else if (mstyle == WIGGLE) {
if (axflag) ax *= xscale;
if (ayflag) ay *= yscale;
if (azflag) az *= zscale;
} else if (mstyle == ROTATE) {
point[0] *= xscale;
point[1] *= yscale;
point[2] *= zscale;
}
}
// set omega_rotate from period
if (mstyle == WIGGLE || mstyle == ROTATE) omega_rotate = MY_2PI / period;
// runit = unit vector along rotation axis
if (mstyle == ROTATE) {
double len = sqrt(axis[0]*axis[0] + axis[1]*axis[1] + axis[2]*axis[2]);
if (len == 0.0)
error->all(FLERR,"Zero length rotation vector with fix move");
runit[0] = axis[0]/len;
runit[1] = axis[1]/len;
runit[2] = axis[2]/len;
}
// set flags for extra attributes particles may store
// relevant extra attributes = omega, angmom, theta, quat
omega_flag = atom->omega_flag;
angmom_flag = atom->angmom_flag;
radius_flag = atom->radius_flag;
ellipsoid_flag = atom->ellipsoid_flag;
line_flag = atom->line_flag;
tri_flag = atom->tri_flag;
body_flag = atom->body_flag;
theta_flag = quat_flag = 0;
if (line_flag) theta_flag = 1;
if (ellipsoid_flag || tri_flag || body_flag) quat_flag = 1;
extra_flag = 0;
if (omega_flag || angmom_flag || theta_flag || quat_flag) extra_flag = 1;
// perform initial allocation of atom-based array
// register with Atom class
- xoriginal = NULL;
- toriginal = NULL;
- qoriginal = NULL;
grow_arrays(atom->nmax);
atom->add_callback(0);
atom->add_callback(1);
displace = velocity = NULL;
// AtomVec pointers to retrieve per-atom storage of extra quantities
avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid");
avec_line = (AtomVecLine *) atom->style_match("line");
avec_tri = (AtomVecTri *) atom->style_match("tri");
avec_body = (AtomVecBody *) atom->style_match("body");
// xoriginal = initial unwrapped positions of atoms
// toriginal = initial theta of lines
// qoriginal = initial quat of extended particles
double **x = atom->x;
imageint *image = atom->image;
int *ellipsoid = atom->ellipsoid;
int *line = atom->line;
int *tri = atom->tri;
int *body = atom->body;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) domain->unmap(x[i],image[i],xoriginal[i]);
else xoriginal[i][0] = xoriginal[i][1] = xoriginal[i][2] = 0.0;
}
if (theta_flag) {
for (int i = 0; i < nlocal; i++) {
if ((mask[i] & groupbit) && line[i] >= 0)
toriginal[i] = avec_line->bonus[line[i]].theta;
else toriginal[i] = 0.0;
}
}
if (quat_flag) {
double *quat;
for (int i = 0; i < nlocal; i++) {
quat = NULL;
if (mask[i] & groupbit) {
if (ellipsoid_flag && ellipsoid[i] >= 0)
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
else if (tri_flag && tri[i] >= 0)
quat = avec_tri->bonus[tri[i]].quat;
else if (body_flag && body[i] >= 0)
quat = avec_body->bonus[body[i]].quat;
}
if (quat) {
qoriginal[i][0] = quat[0];
qoriginal[i][1] = quat[1];
qoriginal[i][2] = quat[2];
qoriginal[i][3] = quat[3];
} else qoriginal[i][0] = qoriginal[i][1] =
qoriginal[i][2] = qoriginal[i][3] = 0.0;
}
}
// nrestart = size of per-atom restart data
// nrestart = 1 + xorig + torig + qorig
nrestart = 4;
if (theta_flag) nrestart++;
if (quat_flag) nrestart += 4;
// time origin for movement = current timestep
time_origin = update->ntimestep;
}
/* ---------------------------------------------------------------------- */
FixMove::~FixMove()
{
// unregister callbacks to this fix from Atom class
atom->delete_callback(id,0);
atom->delete_callback(id,1);
// delete locally stored arrays
memory->destroy(xoriginal);
memory->destroy(toriginal);
memory->destroy(qoriginal);
memory->destroy(displace);
memory->destroy(velocity);
delete [] xvarstr;
delete [] yvarstr;
delete [] zvarstr;
delete [] vxvarstr;
delete [] vyvarstr;
delete [] vzvarstr;
}
/* ---------------------------------------------------------------------- */
int FixMove::setmask()
{
int mask = 0;
mask |= INITIAL_INTEGRATE;
mask |= INITIAL_INTEGRATE_RESPA;
mask |= FINAL_INTEGRATE;
mask |= FINAL_INTEGRATE_RESPA;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixMove::init()
{
dt = update->dt;
dtv = update->dt;
dtf = 0.5 * update->dt * force->ftm2v;
// set indices and style of all variables
displaceflag = velocityflag = 0;
if (mstyle == VARIABLE) {
if (xvarstr) {
xvar = input->variable->find(xvarstr);
if (xvar < 0) error->all(FLERR,
"Variable name for fix move does not exist");
if (input->variable->equalstyle(xvar)) xvarstyle = EQUAL;
else if (input->variable->atomstyle(xvar)) xvarstyle = ATOM;
else error->all(FLERR,"Variable for fix move is invalid style");
}
if (yvarstr) {
yvar = input->variable->find(yvarstr);
if (yvar < 0) error->all(FLERR,
"Variable name for fix move does not exist");
if (input->variable->equalstyle(yvar)) yvarstyle = EQUAL;
else if (input->variable->atomstyle(yvar)) yvarstyle = ATOM;
else error->all(FLERR,"Variable for fix move is invalid style");
}
if (zvarstr) {
zvar = input->variable->find(zvarstr);
if (zvar < 0) error->all(FLERR,
"Variable name for fix move does not exist");
if (input->variable->equalstyle(zvar)) zvarstyle = EQUAL;
else if (input->variable->atomstyle(zvar)) zvarstyle = ATOM;
else error->all(FLERR,"Variable for fix move is invalid style");
}
if (vxvarstr) {
vxvar = input->variable->find(vxvarstr);
if (vxvar < 0) error->all(FLERR,
"Variable name for fix move does not exist");
if (input->variable->equalstyle(vxvar)) vxvarstyle = EQUAL;
else if (input->variable->atomstyle(vxvar)) vxvarstyle = ATOM;
else error->all(FLERR,"Variable for fix move is invalid style");
}
if (vyvarstr) {
vyvar = input->variable->find(vyvarstr);
if (vyvar < 0) error->all(FLERR,
"Variable name for fix move does not exist");
if (input->variable->equalstyle(vyvar)) vyvarstyle = EQUAL;
else if (input->variable->atomstyle(vyvar)) vyvarstyle = ATOM;
else error->all(FLERR,"Variable for fix move is invalid style");
}
if (vzvarstr) {
vzvar = input->variable->find(vzvarstr);
if (vzvar < 0) error->all(FLERR,
"Variable name for fix move does not exist");
if (input->variable->equalstyle(vzvar)) vzvarstyle = EQUAL;
else if (input->variable->atomstyle(vzvar)) vzvarstyle = ATOM;
else error->all(FLERR,"Variable for fix move is invalid style");
}
if (xvarstr && xvarstyle == ATOM) displaceflag = 1;
if (yvarstr && yvarstyle == ATOM) displaceflag = 1;
if (zvarstr && zvarstyle == ATOM) displaceflag = 1;
if (vxvarstr && vxvarstyle == ATOM) velocityflag = 1;
if (vyvarstr && vyvarstyle == ATOM) velocityflag = 1;
if (vzvarstr && vzvarstyle == ATOM) velocityflag = 1;
}
maxatom = atom->nmax;
memory->destroy(displace);
memory->destroy(velocity);
if (displaceflag) memory->create(displace,maxatom,3,"move:displace");
else displace = NULL;
if (velocityflag) memory->create(velocity,maxatom,3,"move:velocity");
else velocity = NULL;
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
}
/* ----------------------------------------------------------------------
set x,v of particles
------------------------------------------------------------------------- */
void FixMove::initial_integrate(int vflag)
{
int flag;
double ddotr,dx,dy,dz;
double dtfm,theta_new;
double xold[3],a[3],b[3],c[3],d[3],disp[3],w[3],ex[3],ey[3],ez[3];
double inertia_ellipsoid[3],qrotate[4];
double *quat,*inertia,*shape;
double delta = (update->ntimestep - time_origin) * dt;
double **x = atom->x;
double **v = atom->v;
double **f = atom->f;
double **omega = atom->omega;
double **angmom = atom->angmom;
double *radius = atom->radius;
double *rmass = atom->rmass;
double *mass = atom->mass;
int *type = atom->type;
int *ellipsoid = atom->ellipsoid;
int *line = atom->line;
int *tri = atom->tri;
int *body = atom->body;
int *mask = atom->mask;
int nlocal = atom->nlocal;
// for linear: X = X0 + V*dt
if (mstyle == LINEAR) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
xold[0] = x[i][0];
xold[1] = x[i][1];
xold[2] = x[i][2];
if (vxflag) {
v[i][0] = vx;
x[i][0] = xoriginal[i][0] + vx*delta;
} else if (rmass) {
dtfm = dtf / rmass[i];
v[i][0] += dtfm * f[i][0];
x[i][0] += dtv * v[i][0];
} else {
dtfm = dtf / mass[type[i]];
v[i][0] += dtfm * f[i][0];
x[i][0] += dtv * v[i][0];
}
if (vyflag) {
v[i][1] = vy;
x[i][1] = xoriginal[i][1] + vy*delta;
} else if (rmass) {
dtfm = dtf / rmass[i];
v[i][1] += dtfm * f[i][1];
x[i][1] += dtv * v[i][1];
} else {
dtfm = dtf / mass[type[i]];
v[i][1] += dtfm * f[i][1];
x[i][1] += dtv * v[i][1];
}
if (vzflag) {
v[i][2] = vz;
x[i][2] = xoriginal[i][2] + vz*delta;
} else if (rmass) {
dtfm = dtf / rmass[i];
v[i][2] += dtfm * f[i][2];
x[i][2] += dtv * v[i][2];
} else {
dtfm = dtf / mass[type[i]];
v[i][2] += dtfm * f[i][2];
x[i][2] += dtv * v[i][2];
}
domain->remap_near(x[i],xold);
}
}
// for wiggle: X = X0 + A sin(w*dt)
} else if (mstyle == WIGGLE) {
double arg = omega_rotate * delta;
double sine = sin(arg);
double cosine = cos(arg);
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
xold[0] = x[i][0];
xold[1] = x[i][1];
xold[2] = x[i][2];
if (axflag) {
v[i][0] = ax*omega_rotate*cosine;
x[i][0] = xoriginal[i][0] + ax*sine;
} else if (rmass) {
dtfm = dtf / rmass[i];
v[i][0] += dtfm * f[i][0];
x[i][0] += dtv * v[i][0];
} else {
dtfm = dtf / mass[type[i]];
v[i][0] += dtfm * f[i][0];
x[i][0] += dtv * v[i][0];
}
if (ayflag) {
v[i][1] = ay*omega_rotate*cosine;
x[i][1] = xoriginal[i][1] + ay*sine;
} else if (rmass) {
dtfm = dtf / rmass[i];
v[i][1] += dtfm * f[i][1];
x[i][1] += dtv * v[i][1];
} else {
dtfm = dtf / mass[type[i]];
v[i][1] += dtfm * f[i][1];
x[i][1] += dtv * v[i][1];
}
if (azflag) {
v[i][2] = az*omega_rotate*cosine;
x[i][2] = xoriginal[i][2] + az*sine;
} else if (rmass) {
dtfm = dtf / rmass[i];
v[i][2] += dtfm * f[i][2];
x[i][2] += dtv * v[i][2];
} else {
dtfm = dtf / mass[type[i]];
v[i][2] += dtfm * f[i][2];
x[i][2] += dtv * v[i][2];
}
domain->remap_near(x[i],xold);
}
}
// for rotate by right-hand rule around omega:
// P = point = vector = point of rotation
// R = vector = axis of rotation
// w = omega of rotation (from period)
// X0 = xoriginal = initial coord of atom
// R0 = runit = unit vector for R
// D = X0 - P = vector from P to X0
// C = (D dot R0) R0 = projection of atom coord onto R line
// A = D - C = vector from R line to X0
// B = R0 cross A = vector perp to A in plane of rotation
// A,B define plane of circular rotation around R line
// X = P + C + A cos(w*dt) + B sin(w*dt)
// V = w R0 cross (A cos(w*dt) + B sin(w*dt))
} else if (mstyle == ROTATE) {
double arg = omega_rotate * delta;
double cosine = cos(arg);
double sine = sin(arg);
double qcosine = cos(0.5*arg);
double qsine = sin(0.5*arg);
qrotate[0] = qcosine;
qrotate[1] = runit[0]*qsine;
qrotate[2] = runit[1]*qsine;
qrotate[3] = runit[2]*qsine;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
xold[0] = x[i][0];
xold[1] = x[i][1];
xold[2] = x[i][2];
d[0] = xoriginal[i][0] - point[0];
d[1] = xoriginal[i][1] - point[1];
d[2] = xoriginal[i][2] - point[2];
ddotr = d[0]*runit[0] + d[1]*runit[1] + d[2]*runit[2];
c[0] = ddotr*runit[0];
c[1] = ddotr*runit[1];
c[2] = ddotr*runit[2];
a[0] = d[0] - c[0];
a[1] = d[1] - c[1];
a[2] = d[2] - c[2];
b[0] = runit[1]*a[2] - runit[2]*a[1];
b[1] = runit[2]*a[0] - runit[0]*a[2];
b[2] = runit[0]*a[1] - runit[1]*a[0];
disp[0] = a[0]*cosine + b[0]*sine;
disp[1] = a[1]*cosine + b[1]*sine;
disp[2] = a[2]*cosine + b[2]*sine;
x[i][0] = point[0] + c[0] + disp[0];
x[i][1] = point[1] + c[1] + disp[1];
x[i][2] = point[2] + c[2] + disp[2];
v[i][0] = omega_rotate * (runit[1]*disp[2] - runit[2]*disp[1]);
v[i][1] = omega_rotate * (runit[2]*disp[0] - runit[0]*disp[2]);
v[i][2] = omega_rotate * (runit[0]*disp[1] - runit[1]*disp[0]);
// set any extra attributes affected by rotation
if (extra_flag) {
// omega for spheres, lines, tris
if (omega_flag) {
flag = 0;
if (radius_flag && radius[i] > 0.0) flag = 1;
if (line_flag && line[i] >= 0.0) flag = 1;
if (tri_flag && tri[i] >= 0.0) flag = 1;
if (flag) {
omega[i][0] = omega_rotate*runit[0];
omega[i][1] = omega_rotate*runit[1];
omega[i][2] = omega_rotate*runit[2];
}
}
// angmom for ellipsoids, tris, and bodies
if (angmom_flag) {
quat = inertia = NULL;
if (ellipsoid_flag && ellipsoid[i] >= 0) {
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
shape = avec_ellipsoid->bonus[ellipsoid[i]].shape;
inertia_ellipsoid[0] =
INERTIA*rmass[i] * (shape[1]*shape[1]+shape[2]*shape[2]);
inertia_ellipsoid[1] =
INERTIA*rmass[i] * (shape[0]*shape[0]+shape[2]*shape[2]);
inertia_ellipsoid[2] =
INERTIA*rmass[i] * (shape[0]*shape[0]+shape[1]*shape[1]);
inertia = inertia_ellipsoid;
} else if (tri_flag && tri[i] >= 0) {
quat = avec_tri->bonus[tri[i]].quat;
inertia = avec_tri->bonus[tri[i]].inertia;
} else if (body_flag && body[i] >= 0) {
quat = avec_body->bonus[body[i]].quat;
inertia = avec_body->bonus[body[i]].inertia;
}
if (quat) {
w[0] = omega_rotate*runit[0];
w[1] = omega_rotate*runit[1];
w[2] = omega_rotate*runit[2];
MathExtra::q_to_exyz(quat,ex,ey,ez);
MathExtra::omega_to_angmom(w,ex,ey,ez,inertia,angmom[i]);
}
}
// theta for lines
if (theta_flag && line[i] >= 0.0) {
theta_new = fmod(toriginal[i]+arg,MY_2PI);
avec_line->bonus[atom->line[i]].theta = theta_new;
}
// quats for ellipsoids, tris, and bodies
if (quat_flag) {
quat = NULL;
if (ellipsoid_flag && ellipsoid[i] >= 0)
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
else if (tri_flag && tri[i] >= 0)
quat = avec_tri->bonus[tri[i]].quat;
else if (body_flag && body[i] >= 0)
quat = avec_body->bonus[body[i]].quat;
if (quat) MathExtra::quatquat(qrotate,qoriginal[i],quat);
}
}
domain->remap_near(x[i],xold);
}
}
// for variable: compute x,v from variables
// NOTE: also allow for changes to extra attributes?
// omega, angmom, theta, quat
// only necessary if prescribed motion involves rotation
} else if (mstyle == VARIABLE) {
// reallocate displace and velocity arrays as necessary
if ((displaceflag || velocityflag) && atom->nmax > maxatom) {
maxatom = atom->nmax;
if (displaceflag) {
memory->destroy(displace);
memory->create(displace,maxatom,3,"move:displace");
}
if (velocityflag) {
memory->destroy(velocity);
memory->create(velocity,maxatom,3,"move:velocity");
}
}
// pre-compute variable values, wrap with clear/add
modify->clearstep_compute();
if (xvarstr) {
if (xvarstyle == EQUAL) dx = input->variable->compute_equal(xvar);
else input->variable->compute_atom(xvar,igroup,&displace[0][0],3,0);
}
if (yvarstr) {
if (yvarstyle == EQUAL) dy = input->variable->compute_equal(yvar);
else input->variable->compute_atom(yvar,igroup,&displace[0][1],3,0);
}
if (zvarstr) {
if (zvarstyle == EQUAL) dz = input->variable->compute_equal(zvar);
else input->variable->compute_atom(zvar,igroup,&displace[0][2],3,0);
}
if (vxvarstr) {
if (vxvarstyle == EQUAL) vx = input->variable->compute_equal(vxvar);
else input->variable->compute_atom(vxvar,igroup,&velocity[0][0],3,0);
}
if (vyvarstr) {
if (vyvarstyle == EQUAL) vy = input->variable->compute_equal(vyvar);
else input->variable->compute_atom(vyvar,igroup,&velocity[0][1],3,0);
}
if (vzvarstr) {
if (vzvarstyle == EQUAL) vz = input->variable->compute_equal(vzvar);
else input->variable->compute_atom(vzvar,igroup,&velocity[0][2],3,0);
}
modify->addstep_compute(update->ntimestep + 1);
// update x,v
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
xold[0] = x[i][0];
xold[1] = x[i][1];
xold[2] = x[i][2];
if (xvarstr && vxvarstr) {
if (vxvarstyle == EQUAL) v[i][0] = vx;
else v[i][0] = velocity[i][0];
if (xvarstyle == EQUAL) x[i][0] = xoriginal[i][0] + dx;
else x[i][0] = xoriginal[i][0] + displace[i][0];
} else if (xvarstr) {
if (xvarstyle == EQUAL) x[i][0] = xoriginal[i][0] + dx;
else x[i][0] = xoriginal[i][0] + displace[i][0];
} else if (vxvarstr) {
if (vxvarstyle == EQUAL) v[i][0] = vx;
else v[i][0] = velocity[i][0];
if (rmass) {
dtfm = dtf / rmass[i];
x[i][0] += dtv * v[i][0];
} else {
dtfm = dtf / mass[type[i]];
x[i][0] += dtv * v[i][0];
}
} else {
if (rmass) {
dtfm = dtf / rmass[i];
v[i][0] += dtfm * f[i][0];
x[i][0] += dtv * v[i][0];
} else {
dtfm = dtf / mass[type[i]];
v[i][0] += dtfm * f[i][0];
x[i][0] += dtv * v[i][0];
}
}
if (yvarstr && vyvarstr) {
if (vyvarstyle == EQUAL) v[i][1] = vy;
else v[i][1] = velocity[i][1];
if (yvarstyle == EQUAL) x[i][1] = xoriginal[i][1] + dy;
else x[i][1] = xoriginal[i][1] + displace[i][1];
} else if (yvarstr) {
if (yvarstyle == EQUAL) x[i][1] = xoriginal[i][1] + dy;
else x[i][1] = xoriginal[i][1] + displace[i][1];
} else if (vyvarstr) {
if (vyvarstyle == EQUAL) v[i][1] = vy;
else v[i][1] = velocity[i][1];
if (rmass) {
dtfm = dtf / rmass[i];
x[i][1] += dtv * v[i][1];
} else {
dtfm = dtf / mass[type[i]];
x[i][1] += dtv * v[i][1];
}
} else {
if (rmass) {
dtfm = dtf / rmass[i];
v[i][1] += dtfm * f[i][1];
x[i][1] += dtv * v[i][1];
} else {
dtfm = dtf / mass[type[i]];
v[i][1] += dtfm * f[i][1];
x[i][1] += dtv * v[i][1];
}
}
if (zvarstr && vzvarstr) {
if (vzvarstyle == EQUAL) v[i][2] = vz;
else v[i][2] = velocity[i][2];
if (zvarstyle == EQUAL) x[i][2] = xoriginal[i][2] + dz;
else x[i][2] = xoriginal[i][2] + displace[i][2];
} else if (zvarstr) {
if (zvarstyle == EQUAL) x[i][2] = xoriginal[i][2] + dz;
else x[i][2] = xoriginal[i][2] + displace[i][2];
} else if (vzvarstr) {
if (vzvarstyle == EQUAL) v[i][2] = vz;
else v[i][2] = velocity[i][2];
if (rmass) {
dtfm = dtf / rmass[i];
x[i][2] += dtv * v[i][2];
} else {
dtfm = dtf / mass[type[i]];
x[i][2] += dtv * v[i][2];
}
} else {
if (rmass) {
dtfm = dtf / rmass[i];
v[i][2] += dtfm * f[i][2];
x[i][2] += dtv * v[i][2];
} else {
dtfm = dtf / mass[type[i]];
v[i][2] += dtfm * f[i][2];
x[i][2] += dtv * v[i][2];
}
}
domain->remap_near(x[i],xold);
}
}
}
}
/* ----------------------------------------------------------------------
final NVE of particles with NULL components
------------------------------------------------------------------------- */
void FixMove::final_integrate()
{
double dtfm;
int xflag = 1;
if (mstyle == LINEAR && vxflag) xflag = 0;
else if (mstyle == WIGGLE && axflag) xflag = 0;
else if (mstyle == ROTATE) xflag = 0;
else if (mstyle == VARIABLE && (xvarstr || vxvarstr)) xflag = 0;
int yflag = 1;
if (mstyle == LINEAR && vyflag) yflag = 0;
else if (mstyle == WIGGLE && ayflag) yflag = 0;
else if (mstyle == ROTATE) yflag = 0;
else if (mstyle == VARIABLE && (yvarstr || vyvarstr)) yflag = 0;
int zflag = 1;
if (mstyle == LINEAR && vzflag) zflag = 0;
else if (mstyle == WIGGLE && azflag) zflag = 0;
else if (mstyle == ROTATE) zflag = 0;
else if (mstyle == VARIABLE && (zvarstr || vzvarstr)) zflag = 0;
double **v = atom->v;
double **f = atom->f;
double *rmass = atom->rmass;
double *mass = atom->mass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
if (xflag) {
if (rmass) {
dtfm = dtf / rmass[i];
v[i][0] += dtfm * f[i][0];
} else {
dtfm = dtf / mass[type[i]];
v[i][0] += dtfm * f[i][0];
}
}
if (yflag) {
if (rmass) {
dtfm = dtf / rmass[i];
v[i][1] += dtfm * f[i][1];
} else {
dtfm = dtf / mass[type[i]];
v[i][1] += dtfm * f[i][1];
}
}
if (zflag) {
if (rmass) {
dtfm = dtf / rmass[i];
v[i][2] += dtfm * f[i][2];
} else {
dtfm = dtf / mass[type[i]];
v[i][2] += dtfm * f[i][2];
}
}
}
}
}
/* ---------------------------------------------------------------------- */
void FixMove::initial_integrate_respa(int vflag, int ilevel, int iloop)
{
// outermost level - update v and x
// all other levels - nothing
if (ilevel == nlevels_respa-1) initial_integrate(vflag);
}
/* ---------------------------------------------------------------------- */
void FixMove::final_integrate_respa(int ilevel, int iloop)
{
if (ilevel == nlevels_respa-1) final_integrate();
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixMove::memory_usage()
{
double bytes = atom->nmax*3 * sizeof(double);
if (theta_flag) bytes += atom->nmax * sizeof(double);
if (quat_flag) bytes += atom->nmax*4 * sizeof(double);
if (displaceflag) bytes += atom->nmax*3 * sizeof(double);
if (velocityflag) bytes += atom->nmax*3 * sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
pack entire state of Fix into one write
------------------------------------------------------------------------- */
void FixMove::write_restart(FILE *fp)
{
int n = 0;
double list[1];
list[n++] = time_origin;
if (comm->me == 0) {
int size = n * sizeof(double);
fwrite(&size,sizeof(int),1,fp);
fwrite(list,sizeof(double),n,fp);
}
}
/* ----------------------------------------------------------------------
use state info from restart file to restart the Fix
------------------------------------------------------------------------- */
void FixMove::restart(char *buf)
{
int n = 0;
double *list = (double *) buf;
time_origin = static_cast<int> (list[n++]);
}
/* ----------------------------------------------------------------------
allocate atom-based array
------------------------------------------------------------------------- */
void FixMove::grow_arrays(int nmax)
{
memory->grow(xoriginal,nmax,3,"move:xoriginal");
if (theta_flag) memory->grow(toriginal,nmax,"move:toriginal");
if (quat_flag) memory->grow(qoriginal,nmax,4,"move:qoriginal");
array_atom = xoriginal;
}
/* ----------------------------------------------------------------------
copy values within local atom-based array
------------------------------------------------------------------------- */
void FixMove::copy_arrays(int i, int j, int delflag)
{
xoriginal[j][0] = xoriginal[i][0];
xoriginal[j][1] = xoriginal[i][1];
xoriginal[j][2] = xoriginal[i][2];
if (theta_flag) toriginal[j] = toriginal[i];
if (quat_flag) {
qoriginal[j][0] = qoriginal[i][0];
qoriginal[j][1] = qoriginal[i][1];
qoriginal[j][2] = qoriginal[i][2];
qoriginal[j][3] = qoriginal[i][3];
}
}
/* ----------------------------------------------------------------------
initialize one atom's array values, called when atom is created
------------------------------------------------------------------------- */
void FixMove::set_arrays(int i)
{
double theta;
double *quat;
double **x = atom->x;
imageint *image = atom->image;
int *ellipsoid = atom->ellipsoid;
int *line = atom->line;
int *tri = atom->tri;
int *body = atom->body;
int *mask = atom->mask;
// particle not in group
if (!(mask[i] & groupbit)) {
xoriginal[i][0] = xoriginal[i][1] = xoriginal[i][2] = 0.0;
return;
}
// current time still equal fix creation time
if (update->ntimestep == time_origin) {
domain->unmap(x[i],image[i],xoriginal[i]);
return;
}
// backup particle to time_origin
if (mstyle == VARIABLE)
error->all(FLERR,"Cannot add atoms to fix move variable");
domain->unmap(x[i],image[i],xoriginal[i]);
double delta = (update->ntimestep - time_origin) * update->dt;
if (mstyle == LINEAR) {
if (vxflag) xoriginal[i][0] -= vx * delta;
if (vyflag) xoriginal[i][1] -= vy * delta;
if (vzflag) xoriginal[i][2] -= vz * delta;
} else if (mstyle == WIGGLE) {
double arg = omega_rotate * delta;
double sine = sin(arg);
if (axflag) xoriginal[i][0] -= ax*sine;
if (ayflag) xoriginal[i][1] -= ay*sine;
if (azflag) xoriginal[i][2] -= az*sine;
} else if (mstyle == ROTATE) {
double a[3],b[3],c[3],d[3],disp[3],ddotr;
double arg = - omega_rotate * delta;
double sine = sin(arg);
double cosine = cos(arg);
d[0] = x[i][0] - point[0];
d[1] = x[i][1] - point[1];
d[2] = x[i][2] - point[2];
ddotr = d[0]*runit[0] + d[1]*runit[1] + d[2]*runit[2];
c[0] = ddotr*runit[0];
c[1] = ddotr*runit[1];
c[2] = ddotr*runit[2];
a[0] = d[0] - c[0];
a[1] = d[1] - c[1];
a[2] = d[2] - c[2];
b[0] = runit[1]*a[2] - runit[2]*a[1];
b[1] = runit[2]*a[0] - runit[0]*a[2];
b[2] = runit[0]*a[1] - runit[1]*a[0];
disp[0] = a[0]*cosine + b[0]*sine;
disp[1] = a[1]*cosine + b[1]*sine;
disp[2] = a[2]*cosine + b[2]*sine;
xoriginal[i][0] = point[0] + c[0] + disp[0];
xoriginal[i][1] = point[1] + c[1] + disp[1];
xoriginal[i][2] = point[2] + c[2] + disp[2];
// set theta and quat extra attributes affected by rotation
if (extra_flag) {
// theta for lines
if (theta_flag && line[i] >= 0.0) {
theta = avec_line->bonus[atom->line[i]].theta;
toriginal[i] = theta - 0.0; // NOTE: edit this line
}
// quats for ellipsoids, tris, and bodies
if (quat_flag) {
quat = NULL;
if (ellipsoid_flag && ellipsoid[i] >= 0)
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
else if (tri_flag && tri[i] >= 0)
quat = avec_tri->bonus[tri[i]].quat;
else if (body_flag && body[i] >= 0)
quat = avec_body->bonus[body[i]].quat;
if (quat) {
// qoriginal = f(quat,-delta); // NOTE: edit this line
}
}
}
}
}
/* ----------------------------------------------------------------------
pack values in local atom-based array for exchange with another proc
------------------------------------------------------------------------- */
int FixMove::pack_exchange(int i, double *buf)
{
int n = 0;
buf[n++] = xoriginal[i][0];
buf[n++] = xoriginal[i][1];
buf[n++] = xoriginal[i][2];
if (theta_flag) buf[n++] = toriginal[i];
if (quat_flag) {
buf[n++] = qoriginal[i][0];
buf[n++] = qoriginal[i][1];
buf[n++] = qoriginal[i][2];
buf[n++] = qoriginal[i][3];
}
return n;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based array from exchange with another proc
------------------------------------------------------------------------- */
int FixMove::unpack_exchange(int nlocal, double *buf)
{
int n = 0;
xoriginal[nlocal][0] = buf[n++];
xoriginal[nlocal][1] = buf[n++];
xoriginal[nlocal][2] = buf[n++];
if (theta_flag) toriginal[nlocal] = buf[n++];
if (quat_flag) {
qoriginal[nlocal][0] = buf[n++];
qoriginal[nlocal][1] = buf[n++];
qoriginal[nlocal][2] = buf[n++];
qoriginal[nlocal][3] = buf[n++];
}
return n;
}
/* ----------------------------------------------------------------------
pack values in local atom-based arrays for restart file
------------------------------------------------------------------------- */
int FixMove::pack_restart(int i, double *buf)
{
int n = 1;
buf[n++] = xoriginal[i][0];
buf[n++] = xoriginal[i][1];
buf[n++] = xoriginal[i][2];
if (theta_flag) buf[n++] = toriginal[i];
if (quat_flag) {
buf[n++] = qoriginal[i][0];
buf[n++] = qoriginal[i][1];
buf[n++] = qoriginal[i][2];
buf[n++] = qoriginal[i][3];
}
buf[0] = n;
return n;
}
/* ----------------------------------------------------------------------
unpack values from atom->extra array to restart the fix
------------------------------------------------------------------------- */
void FixMove::unpack_restart(int nlocal, int nth)
{
double **extra = atom->extra;
// skip to Nth set of extra values
int m = 0;
for (int i = 0; i < nth; i++) m += static_cast<int> (extra[nlocal][m]);
m++;
xoriginal[nlocal][0] = extra[nlocal][m++];
xoriginal[nlocal][1] = extra[nlocal][m++];
xoriginal[nlocal][2] = extra[nlocal][m++];
if (theta_flag) toriginal[nlocal] = extra[nlocal][m++];
if (quat_flag) {
qoriginal[nlocal][0] = extra[nlocal][m++];
qoriginal[nlocal][1] = extra[nlocal][m++];
qoriginal[nlocal][2] = extra[nlocal][m++];
qoriginal[nlocal][3] = extra[nlocal][m++];
}
}
/* ----------------------------------------------------------------------
maxsize of any atom's restart data
------------------------------------------------------------------------- */
int FixMove::maxsize_restart()
{
return nrestart;
}
/* ----------------------------------------------------------------------
size of atom nlocal's restart data
------------------------------------------------------------------------- */
int FixMove::size_restart(int nlocal)
{
return nrestart;
}
/* ---------------------------------------------------------------------- */
void FixMove::reset_dt()
{
error->all(FLERR,"Resetting timestep size is not allowed with fix move");
}
diff --git a/src/fix_nh.cpp b/src/fix_nh.cpp
index 3ce7c4e30..e2ce97db4 100644
--- a/src/fix_nh.cpp
+++ b/src/fix_nh.cpp
@@ -1,2332 +1,2336 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Mark Stevens (SNL), Aidan Thompson (SNL)
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "fix_nh.h"
#include "math_extra.h"
#include "atom.h"
#include "force.h"
#include "group.h"
#include "comm.h"
#include "neighbor.h"
#include "irregular.h"
#include "modify.h"
#include "fix_deform.h"
#include "compute.h"
#include "kspace.h"
#include "update.h"
#include "respa.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
#define DELTAFLIP 0.1
#define TILTMAX 1.5
enum{NOBIAS,BIAS};
enum{NONE,XYZ,XY,YZ,XZ};
enum{ISO,ANISO,TRICLINIC};
/* ----------------------------------------------------------------------
NVT,NPH,NPT integrators for improved Nose-Hoover equations of motion
---------------------------------------------------------------------- */
-FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
+FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg),
+tstat_flag(0), pstat_flag(0),
+rfix(NULL), id_dilate(NULL), irregular(NULL), id_temp(NULL), id_press(NULL),
+tcomputeflag(0), pcomputeflag(0), eta(NULL), eta_dot(NULL), eta_dotdot(NULL),
+eta_mass(NULL), etap(NULL), etap_dot(NULL), etap_dotdot(NULL), etap_mass(NULL), mpchain(0)
{
if (narg < 4) error->all(FLERR,"Illegal fix nvt/npt/nph command");
restart_global = 1;
dynamic_group_allow = 1;
time_integrate = 1;
scalar_flag = 1;
vector_flag = 1;
global_freq = 1;
extscalar = 1;
extvector = 0;
// default values
pcouple = NONE;
drag = 0.0;
allremap = 1;
id_dilate = NULL;
mtchain = mpchain = 3;
nc_tchain = nc_pchain = 1;
mtk_flag = 1;
deviatoric_flag = 0;
nreset_h0 = 0;
eta_mass_flag = 1;
omega_mass_flag = 0;
etap_mass_flag = 0;
flipflag = 1;
dipole_flag = 0;
dlm_flag = 0;
tcomputeflag = 0;
pcomputeflag = 0;
id_temp = NULL;
id_press = NULL;
// turn on tilt factor scaling, whenever applicable
dimension = domain->dimension;
scaleyz = scalexz = scalexy = 0;
if (domain->yperiodic && domain->xy != 0.0) scalexy = 1;
if (domain->zperiodic && dimension == 3) {
if (domain->yz != 0.0) scaleyz = 1;
if (domain->xz != 0.0) scalexz = 1;
}
// set fixed-point to default = center of cell
fixedpoint[0] = 0.5*(domain->boxlo[0]+domain->boxhi[0]);
fixedpoint[1] = 0.5*(domain->boxlo[1]+domain->boxhi[1]);
fixedpoint[2] = 0.5*(domain->boxlo[2]+domain->boxhi[2]);
// used by FixNVTSllod to preserve non-default value
mtchain_default_flag = 1;
tstat_flag = 0;
double t_period = 0.0;
double p_period[6];
for (int i = 0; i < 6; i++) {
p_start[i] = p_stop[i] = p_period[i] = p_target[i] = 0.0;
p_flag[i] = 0;
}
// process keywords
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"temp") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
tstat_flag = 1;
t_start = force->numeric(FLERR,arg[iarg+1]);
t_target = t_start;
t_stop = force->numeric(FLERR,arg[iarg+2]);
t_period = force->numeric(FLERR,arg[iarg+3]);
if (t_start < 0.0 || t_stop <= 0.0)
error->all(FLERR,
"Target temperature for fix nvt/npt/nph cannot be 0.0");
iarg += 4;
} else if (strcmp(arg[iarg],"iso") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
pcouple = XYZ;
p_start[0] = p_start[1] = p_start[2] = force->numeric(FLERR,arg[iarg+1]);
p_stop[0] = p_stop[1] = p_stop[2] = force->numeric(FLERR,arg[iarg+2]);
p_period[0] = p_period[1] = p_period[2] =
force->numeric(FLERR,arg[iarg+3]);
p_flag[0] = p_flag[1] = p_flag[2] = 1;
if (dimension == 2) {
p_start[2] = p_stop[2] = p_period[2] = 0.0;
p_flag[2] = 0;
}
iarg += 4;
} else if (strcmp(arg[iarg],"aniso") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
pcouple = NONE;
p_start[0] = p_start[1] = p_start[2] = force->numeric(FLERR,arg[iarg+1]);
p_stop[0] = p_stop[1] = p_stop[2] = force->numeric(FLERR,arg[iarg+2]);
p_period[0] = p_period[1] = p_period[2] =
force->numeric(FLERR,arg[iarg+3]);
p_flag[0] = p_flag[1] = p_flag[2] = 1;
if (dimension == 2) {
p_start[2] = p_stop[2] = p_period[2] = 0.0;
p_flag[2] = 0;
}
iarg += 4;
} else if (strcmp(arg[iarg],"tri") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
pcouple = NONE;
scalexy = scalexz = scaleyz = 0;
p_start[0] = p_start[1] = p_start[2] = force->numeric(FLERR,arg[iarg+1]);
p_stop[0] = p_stop[1] = p_stop[2] = force->numeric(FLERR,arg[iarg+2]);
p_period[0] = p_period[1] = p_period[2] =
force->numeric(FLERR,arg[iarg+3]);
p_flag[0] = p_flag[1] = p_flag[2] = 1;
p_start[3] = p_start[4] = p_start[5] = 0.0;
p_stop[3] = p_stop[4] = p_stop[5] = 0.0;
p_period[3] = p_period[4] = p_period[5] =
force->numeric(FLERR,arg[iarg+3]);
p_flag[3] = p_flag[4] = p_flag[5] = 1;
if (dimension == 2) {
p_start[2] = p_stop[2] = p_period[2] = 0.0;
p_flag[2] = 0;
p_start[3] = p_stop[3] = p_period[3] = 0.0;
p_flag[3] = 0;
p_start[4] = p_stop[4] = p_period[4] = 0.0;
p_flag[4] = 0;
}
iarg += 4;
} else if (strcmp(arg[iarg],"x") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[0] = force->numeric(FLERR,arg[iarg+1]);
p_stop[0] = force->numeric(FLERR,arg[iarg+2]);
p_period[0] = force->numeric(FLERR,arg[iarg+3]);
p_flag[0] = 1;
deviatoric_flag = 1;
iarg += 4;
} else if (strcmp(arg[iarg],"y") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[1] = force->numeric(FLERR,arg[iarg+1]);
p_stop[1] = force->numeric(FLERR,arg[iarg+2]);
p_period[1] = force->numeric(FLERR,arg[iarg+3]);
p_flag[1] = 1;
deviatoric_flag = 1;
iarg += 4;
} else if (strcmp(arg[iarg],"z") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[2] = force->numeric(FLERR,arg[iarg+1]);
p_stop[2] = force->numeric(FLERR,arg[iarg+2]);
p_period[2] = force->numeric(FLERR,arg[iarg+3]);
p_flag[2] = 1;
deviatoric_flag = 1;
iarg += 4;
if (dimension == 2)
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
} else if (strcmp(arg[iarg],"yz") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[3] = force->numeric(FLERR,arg[iarg+1]);
p_stop[3] = force->numeric(FLERR,arg[iarg+2]);
p_period[3] = force->numeric(FLERR,arg[iarg+3]);
p_flag[3] = 1;
deviatoric_flag = 1;
scaleyz = 0;
iarg += 4;
if (dimension == 2)
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
} else if (strcmp(arg[iarg],"xz") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[4] = force->numeric(FLERR,arg[iarg+1]);
p_stop[4] = force->numeric(FLERR,arg[iarg+2]);
p_period[4] = force->numeric(FLERR,arg[iarg+3]);
p_flag[4] = 1;
deviatoric_flag = 1;
scalexz = 0;
iarg += 4;
if (dimension == 2)
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
} else if (strcmp(arg[iarg],"xy") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[5] = force->numeric(FLERR,arg[iarg+1]);
p_stop[5] = force->numeric(FLERR,arg[iarg+2]);
p_period[5] = force->numeric(FLERR,arg[iarg+3]);
p_flag[5] = 1;
deviatoric_flag = 1;
scalexy = 0;
iarg += 4;
} else if (strcmp(arg[iarg],"couple") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"xyz") == 0) pcouple = XYZ;
else if (strcmp(arg[iarg+1],"xy") == 0) pcouple = XY;
else if (strcmp(arg[iarg+1],"yz") == 0) pcouple = YZ;
else if (strcmp(arg[iarg+1],"xz") == 0) pcouple = XZ;
else if (strcmp(arg[iarg+1],"none") == 0) pcouple = NONE;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"drag") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
drag = force->numeric(FLERR,arg[iarg+1]);
if (drag < 0.0) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"dilate") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"all") == 0) allremap = 1;
else {
allremap = 0;
delete [] id_dilate;
int n = strlen(arg[iarg+1]) + 1;
id_dilate = new char[n];
strcpy(id_dilate,arg[iarg+1]);
int idilate = group->find(id_dilate);
if (idilate == -1)
error->all(FLERR,"Fix nvt/npt/nph dilate group ID does not exist");
}
iarg += 2;
} else if (strcmp(arg[iarg],"tchain") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
mtchain = force->inumeric(FLERR,arg[iarg+1]);
// used by FixNVTSllod to preserve non-default value
mtchain_default_flag = 0;
if (mtchain < 1) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"pchain") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
mpchain = force->inumeric(FLERR,arg[iarg+1]);
if (mpchain < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"mtk") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"yes") == 0) mtk_flag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) mtk_flag = 0;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"tloop") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
nc_tchain = force->inumeric(FLERR,arg[iarg+1]);
if (nc_tchain < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"ploop") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
nc_pchain = force->inumeric(FLERR,arg[iarg+1]);
if (nc_pchain < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"nreset") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
nreset_h0 = force->inumeric(FLERR,arg[iarg+1]);
if (nreset_h0 < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"scalexy") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"yes") == 0) scalexy = 1;
else if (strcmp(arg[iarg+1],"no") == 0) scalexy = 0;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"scalexz") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"yes") == 0) scalexz = 1;
else if (strcmp(arg[iarg+1],"no") == 0) scalexz = 0;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"scaleyz") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"yes") == 0) scaleyz = 1;
else if (strcmp(arg[iarg+1],"no") == 0) scaleyz = 0;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"flip") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"yes") == 0) flipflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) flipflag = 0;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"update") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"dipole") == 0) dipole_flag = 1;
else if (strcmp(arg[iarg+1],"dipole/dlm") == 0) {
dipole_flag = 1;
dlm_flag = 1;
} else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"fixedpoint") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
fixedpoint[0] = force->numeric(FLERR,arg[iarg+1]);
fixedpoint[1] = force->numeric(FLERR,arg[iarg+2]);
fixedpoint[2] = force->numeric(FLERR,arg[iarg+3]);
iarg += 4;
} else error->all(FLERR,"Illegal fix nvt/npt/nph command");
}
// error checks
if (dimension == 2 && (p_flag[2] || p_flag[3] || p_flag[4]))
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
if (dimension == 2 && (pcouple == YZ || pcouple == XZ))
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
if (dimension == 2 && (scalexz == 1 || scaleyz == 1 ))
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
if (pcouple == XYZ && (p_flag[0] == 0 || p_flag[1] == 0))
error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings");
if (pcouple == XYZ && dimension == 3 && p_flag[2] == 0)
error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings");
if (pcouple == XY && (p_flag[0] == 0 || p_flag[1] == 0))
error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings");
if (pcouple == YZ && (p_flag[1] == 0 || p_flag[2] == 0))
error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings");
if (pcouple == XZ && (p_flag[0] == 0 || p_flag[2] == 0))
error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings");
// require periodicity in tensile dimension
if (p_flag[0] && domain->xperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph on a non-periodic dimension");
if (p_flag[1] && domain->yperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph on a non-periodic dimension");
if (p_flag[2] && domain->zperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph on a non-periodic dimension");
// require periodicity in 2nd dim of off-diagonal tilt component
if (p_flag[3] && domain->zperiodic == 0)
error->all(FLERR,
"Cannot use fix nvt/npt/nph on a 2nd non-periodic dimension");
if (p_flag[4] && domain->zperiodic == 0)
error->all(FLERR,
"Cannot use fix nvt/npt/nph on a 2nd non-periodic dimension");
if (p_flag[5] && domain->yperiodic == 0)
error->all(FLERR,
"Cannot use fix nvt/npt/nph on a 2nd non-periodic dimension");
if (scaleyz == 1 && domain->zperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph "
"with yz scaling when z is non-periodic dimension");
if (scalexz == 1 && domain->zperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph "
"with xz scaling when z is non-periodic dimension");
if (scalexy == 1 && domain->yperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph "
"with xy scaling when y is non-periodic dimension");
if (p_flag[3] && scaleyz == 1)
error->all(FLERR,"Cannot use fix nvt/npt/nph with "
"both yz dynamics and yz scaling");
if (p_flag[4] && scalexz == 1)
error->all(FLERR,"Cannot use fix nvt/npt/nph with "
"both xz dynamics and xz scaling");
if (p_flag[5] && scalexy == 1)
error->all(FLERR,"Cannot use fix nvt/npt/nph with "
"both xy dynamics and xy scaling");
if (!domain->triclinic && (p_flag[3] || p_flag[4] || p_flag[5]))
error->all(FLERR,"Can not specify Pxy/Pxz/Pyz in "
"fix nvt/npt/nph with non-triclinic box");
if (pcouple == XYZ && dimension == 3 &&
(p_start[0] != p_start[1] || p_start[0] != p_start[2] ||
p_stop[0] != p_stop[1] || p_stop[0] != p_stop[2] ||
p_period[0] != p_period[1] || p_period[0] != p_period[2]))
error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings");
if (pcouple == XYZ && dimension == 2 &&
(p_start[0] != p_start[1] || p_stop[0] != p_stop[1] ||
p_period[0] != p_period[1]))
error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings");
if (pcouple == XY &&
(p_start[0] != p_start[1] || p_stop[0] != p_stop[1] ||
p_period[0] != p_period[1]))
error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings");
if (pcouple == YZ &&
(p_start[1] != p_start[2] || p_stop[1] != p_stop[2] ||
p_period[1] != p_period[2]))
error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings");
if (pcouple == XZ &&
(p_start[0] != p_start[2] || p_stop[0] != p_stop[2] ||
p_period[0] != p_period[2]))
error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings");
if (dipole_flag) {
if (!atom->sphere_flag)
error->all(FLERR,"Using update dipole flag requires atom style sphere");
if (!atom->mu_flag)
error->all(FLERR,"Using update dipole flag requires atom attribute mu");
}
if ((tstat_flag && t_period <= 0.0) ||
(p_flag[0] && p_period[0] <= 0.0) ||
(p_flag[1] && p_period[1] <= 0.0) ||
(p_flag[2] && p_period[2] <= 0.0) ||
(p_flag[3] && p_period[3] <= 0.0) ||
(p_flag[4] && p_period[4] <= 0.0) ||
(p_flag[5] && p_period[5] <= 0.0))
error->all(FLERR,"Fix nvt/npt/nph damping parameters must be > 0.0");
// set pstat_flag and box change and restart_pbc variables
pre_exchange_flag = 0;
pstat_flag = 0;
pstyle = ISO;
for (int i = 0; i < 6; i++)
if (p_flag[i]) pstat_flag = 1;
if (pstat_flag) {
if (p_flag[0] || p_flag[1] || p_flag[2]) box_change_size = 1;
if (p_flag[3] || p_flag[4] || p_flag[5]) box_change_shape = 1;
no_change_box = 1;
if (allremap == 0) restart_pbc = 1;
// pstyle = TRICLINIC if any off-diagonal term is controlled -> 6 dof
// else pstyle = ISO if XYZ coupling or XY coupling in 2d -> 1 dof
// else pstyle = ANISO -> 3 dof
if (p_flag[3] || p_flag[4] || p_flag[5]) pstyle = TRICLINIC;
else if (pcouple == XYZ || (dimension == 2 && pcouple == XY)) pstyle = ISO;
else pstyle = ANISO;
// pre_exchange only required if flips can occur due to shape changes
if (flipflag && (p_flag[3] || p_flag[4] || p_flag[5])) pre_exchange_flag = 1;
if (flipflag && (domain->yz != 0.0 || domain->xz != 0.0 || domain->xy != 0.0))
pre_exchange_flag = 1;
}
// convert input periods to frequencies
t_freq = 0.0;
p_freq[0] = p_freq[1] = p_freq[2] = p_freq[3] = p_freq[4] = p_freq[5] = 0.0;
if (tstat_flag) t_freq = 1.0 / t_period;
if (p_flag[0]) p_freq[0] = 1.0 / p_period[0];
if (p_flag[1]) p_freq[1] = 1.0 / p_period[1];
if (p_flag[2]) p_freq[2] = 1.0 / p_period[2];
if (p_flag[3]) p_freq[3] = 1.0 / p_period[3];
if (p_flag[4]) p_freq[4] = 1.0 / p_period[4];
if (p_flag[5]) p_freq[5] = 1.0 / p_period[5];
// Nose/Hoover temp and pressure init
size_vector = 0;
if (tstat_flag) {
int ich;
eta = new double[mtchain];
// add one extra dummy thermostat, set to zero
eta_dot = new double[mtchain+1];
eta_dot[mtchain] = 0.0;
eta_dotdot = new double[mtchain];
for (ich = 0; ich < mtchain; ich++) {
eta[ich] = eta_dot[ich] = eta_dotdot[ich] = 0.0;
}
eta_mass = new double[mtchain];
size_vector += 2*2*mtchain;
}
if (pstat_flag) {
omega[0] = omega[1] = omega[2] = 0.0;
omega_dot[0] = omega_dot[1] = omega_dot[2] = 0.0;
omega_mass[0] = omega_mass[1] = omega_mass[2] = 0.0;
omega[3] = omega[4] = omega[5] = 0.0;
omega_dot[3] = omega_dot[4] = omega_dot[5] = 0.0;
omega_mass[3] = omega_mass[4] = omega_mass[5] = 0.0;
if (pstyle == ISO) size_vector += 2*2*1;
else if (pstyle == ANISO) size_vector += 2*2*3;
else if (pstyle == TRICLINIC) size_vector += 2*2*6;
if (mpchain) {
int ich;
etap = new double[mpchain];
// add one extra dummy thermostat, set to zero
etap_dot = new double[mpchain+1];
etap_dot[mpchain] = 0.0;
etap_dotdot = new double[mpchain];
for (ich = 0; ich < mpchain; ich++) {
etap[ich] = etap_dot[ich] =
etap_dotdot[ich] = 0.0;
}
etap_mass = new double[mpchain];
size_vector += 2*2*mpchain;
}
if (deviatoric_flag) size_vector += 1;
}
nrigid = 0;
rfix = NULL;
if (pre_exchange_flag) irregular = new Irregular(lmp);
else irregular = NULL;
// initialize vol0,t0 to zero to signal uninitialized
// values then assigned in init(), if necessary
vol0 = t0 = 0.0;
}
/* ---------------------------------------------------------------------- */
FixNH::~FixNH()
{
if (copymode) return;
delete [] id_dilate;
delete [] rfix;
delete irregular;
// delete temperature and pressure if fix created them
if (tcomputeflag) modify->delete_compute(id_temp);
delete [] id_temp;
if (tstat_flag) {
delete [] eta;
delete [] eta_dot;
delete [] eta_dotdot;
delete [] eta_mass;
}
if (pstat_flag) {
if (pcomputeflag) modify->delete_compute(id_press);
delete [] id_press;
if (mpchain) {
delete [] etap;
delete [] etap_dot;
delete [] etap_dotdot;
delete [] etap_mass;
}
}
}
/* ---------------------------------------------------------------------- */
int FixNH::setmask()
{
int mask = 0;
mask |= INITIAL_INTEGRATE;
mask |= FINAL_INTEGRATE;
mask |= THERMO_ENERGY;
mask |= INITIAL_INTEGRATE_RESPA;
mask |= FINAL_INTEGRATE_RESPA;
if (pre_exchange_flag) mask |= PRE_EXCHANGE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixNH::init()
{
// recheck that dilate group has not been deleted
if (allremap == 0) {
int idilate = group->find(id_dilate);
if (idilate == -1)
error->all(FLERR,"Fix nvt/npt/nph dilate group ID does not exist");
dilate_group_bit = group->bitmask[idilate];
}
// ensure no conflict with fix deform
if (pstat_flag)
for (int i = 0; i < modify->nfix; i++)
if (strcmp(modify->fix[i]->style,"deform") == 0) {
int *dimflag = ((FixDeform *) modify->fix[i])->dimflag;
if ((p_flag[0] && dimflag[0]) || (p_flag[1] && dimflag[1]) ||
(p_flag[2] && dimflag[2]) || (p_flag[3] && dimflag[3]) ||
(p_flag[4] && dimflag[4]) || (p_flag[5] && dimflag[5]))
error->all(FLERR,"Cannot use fix npt and fix deform on "
"same component of stress tensor");
}
// set temperature and pressure ptrs
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Temperature ID for fix nvt/npt does not exist");
temperature = modify->compute[icompute];
if (temperature->tempbias) which = BIAS;
else which = NOBIAS;
if (pstat_flag) {
icompute = modify->find_compute(id_press);
if (icompute < 0)
error->all(FLERR,"Pressure ID for fix npt/nph does not exist");
pressure = modify->compute[icompute];
}
// set timesteps and frequencies
dtv = update->dt;
dtf = 0.5 * update->dt * force->ftm2v;
dthalf = 0.5 * update->dt;
dt4 = 0.25 * update->dt;
dt8 = 0.125 * update->dt;
dto = dthalf;
p_freq_max = 0.0;
if (pstat_flag) {
p_freq_max = MAX(p_freq[0],p_freq[1]);
p_freq_max = MAX(p_freq_max,p_freq[2]);
if (pstyle == TRICLINIC) {
p_freq_max = MAX(p_freq_max,p_freq[3]);
p_freq_max = MAX(p_freq_max,p_freq[4]);
p_freq_max = MAX(p_freq_max,p_freq[5]);
}
pdrag_factor = 1.0 - (update->dt * p_freq_max * drag / nc_pchain);
}
if (tstat_flag)
tdrag_factor = 1.0 - (update->dt * t_freq * drag / nc_tchain);
// tally the number of dimensions that are barostatted
// set initial volume and reference cell, if not already done
if (pstat_flag) {
pdim = p_flag[0] + p_flag[1] + p_flag[2];
if (vol0 == 0.0) {
if (dimension == 3) vol0 = domain->xprd * domain->yprd * domain->zprd;
else vol0 = domain->xprd * domain->yprd;
h0_inv[0] = domain->h_inv[0];
h0_inv[1] = domain->h_inv[1];
h0_inv[2] = domain->h_inv[2];
h0_inv[3] = domain->h_inv[3];
h0_inv[4] = domain->h_inv[4];
h0_inv[5] = domain->h_inv[5];
}
}
boltz = force->boltz;
nktv2p = force->nktv2p;
if (force->kspace) kspace_flag = 1;
else kspace_flag = 0;
if (strstr(update->integrate_style,"respa")) {
nlevels_respa = ((Respa *) update->integrate)->nlevels;
step_respa = ((Respa *) update->integrate)->step;
dto = 0.5*step_respa[0];
}
// detect if any rigid fixes exist so rigid bodies move when box is remapped
// rfix[] = indices to each fix rigid
delete [] rfix;
nrigid = 0;
rfix = NULL;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->rigid_flag) nrigid++;
if (nrigid) {
rfix = new int[nrigid];
nrigid = 0;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->rigid_flag) rfix[nrigid++] = i;
}
}
/* ----------------------------------------------------------------------
compute T,P before integrator starts
------------------------------------------------------------------------- */
void FixNH::setup(int vflag)
{
// tdof needed by compute_temp_target()
t_current = temperature->compute_scalar();
tdof = temperature->dof;
// t_target is needed by NVT and NPT in compute_scalar()
// If no thermostat or using fix nphug,
// t_target must be defined by other means.
if (tstat_flag && strstr(style,"nphug") == NULL) {
compute_temp_target();
} else if (pstat_flag) {
// t0 = reference temperature for masses
// cannot be done in init() b/c temperature cannot be called there
// is b/c Modify::init() inits computes after fixes due to dof dependence
// guesstimate a unit-dependent t0 if actual T = 0.0
// if it was read in from a restart file, leave it be
if (t0 == 0.0) {
t0 = temperature->compute_scalar();
if (t0 == 0.0) {
if (strcmp(update->unit_style,"lj") == 0) t0 = 1.0;
else t0 = 300.0;
}
}
t_target = t0;
}
if (pstat_flag) compute_press_target();
if (pstat_flag) {
if (pstyle == ISO) pressure->compute_scalar();
else pressure->compute_vector();
couple();
pressure->addstep(update->ntimestep+1);
}
// masses and initial forces on thermostat variables
if (tstat_flag) {
eta_mass[0] = tdof * boltz * t_target / (t_freq*t_freq);
for (int ich = 1; ich < mtchain; ich++)
eta_mass[ich] = boltz * t_target / (t_freq*t_freq);
for (int ich = 1; ich < mtchain; ich++) {
eta_dotdot[ich] = (eta_mass[ich-1]*eta_dot[ich-1]*eta_dot[ich-1] -
boltz * t_target) / eta_mass[ich];
}
}
// masses and initial forces on barostat variables
if (pstat_flag) {
double kt = boltz * t_target;
double nkt = atom->natoms * kt;
for (int i = 0; i < 3; i++)
if (p_flag[i])
omega_mass[i] = nkt/(p_freq[i]*p_freq[i]);
if (pstyle == TRICLINIC) {
for (int i = 3; i < 6; i++)
if (p_flag[i]) omega_mass[i] = nkt/(p_freq[i]*p_freq[i]);
}
// masses and initial forces on barostat thermostat variables
if (mpchain) {
etap_mass[0] = boltz * t_target / (p_freq_max*p_freq_max);
for (int ich = 1; ich < mpchain; ich++)
etap_mass[ich] = boltz * t_target / (p_freq_max*p_freq_max);
for (int ich = 1; ich < mpchain; ich++)
etap_dotdot[ich] =
(etap_mass[ich-1]*etap_dot[ich-1]*etap_dot[ich-1] -
boltz * t_target) / etap_mass[ich];
}
}
}
/* ----------------------------------------------------------------------
1st half of Verlet update
------------------------------------------------------------------------- */
void FixNH::initial_integrate(int vflag)
{
// update eta_press_dot
if (pstat_flag && mpchain) nhc_press_integrate();
// update eta_dot
if (tstat_flag) {
compute_temp_target();
nhc_temp_integrate();
}
// need to recompute pressure to account for change in KE
// t_current is up-to-date, but compute_temperature is not
// compute appropriately coupled elements of mvv_current
if (pstat_flag) {
if (pstyle == ISO) {
temperature->compute_scalar();
pressure->compute_scalar();
} else {
temperature->compute_vector();
pressure->compute_vector();
}
couple();
pressure->addstep(update->ntimestep+1);
}
if (pstat_flag) {
compute_press_target();
nh_omega_dot();
nh_v_press();
}
nve_v();
// remap simulation box by 1/2 step
if (pstat_flag) remap();
nve_x();
// remap simulation box by 1/2 step
// redo KSpace coeffs since volume has changed
if (pstat_flag) {
remap();
if (kspace_flag) force->kspace->setup();
}
}
/* ----------------------------------------------------------------------
2nd half of Verlet update
------------------------------------------------------------------------- */
void FixNH::final_integrate()
{
nve_v();
// re-compute temp before nh_v_press()
// only needed for temperature computes with BIAS on reneighboring steps:
// b/c some biases store per-atom values (e.g. temp/profile)
// per-atom values are invalid if reneigh/comm occurred
// since temp->compute() in initial_integrate()
if (which == BIAS && neighbor->ago == 0)
t_current = temperature->compute_scalar();
if (pstat_flag) nh_v_press();
// compute new T,P after velocities rescaled by nh_v_press()
// compute appropriately coupled elements of mvv_current
t_current = temperature->compute_scalar();
tdof = temperature->dof;
if (pstat_flag) {
if (pstyle == ISO) pressure->compute_scalar();
else pressure->compute_vector();
couple();
pressure->addstep(update->ntimestep+1);
}
if (pstat_flag) nh_omega_dot();
// update eta_dot
// update eta_press_dot
if (tstat_flag) nhc_temp_integrate();
if (pstat_flag && mpchain) nhc_press_integrate();
}
/* ---------------------------------------------------------------------- */
void FixNH::initial_integrate_respa(int vflag, int ilevel, int iloop)
{
// set timesteps by level
dtv = step_respa[ilevel];
dtf = 0.5 * step_respa[ilevel] * force->ftm2v;
dthalf = 0.5 * step_respa[ilevel];
// outermost level - update eta_dot and omega_dot, apply to v
// all other levels - NVE update of v
// x,v updates only performed for atoms in group
if (ilevel == nlevels_respa-1) {
// update eta_press_dot
if (pstat_flag && mpchain) nhc_press_integrate();
// update eta_dot
if (tstat_flag) {
compute_temp_target();
nhc_temp_integrate();
}
// recompute pressure to account for change in KE
// t_current is up-to-date, but compute_temperature is not
// compute appropriately coupled elements of mvv_current
if (pstat_flag) {
if (pstyle == ISO) {
temperature->compute_scalar();
pressure->compute_scalar();
} else {
temperature->compute_vector();
pressure->compute_vector();
}
couple();
pressure->addstep(update->ntimestep+1);
}
if (pstat_flag) {
compute_press_target();
nh_omega_dot();
nh_v_press();
}
nve_v();
} else nve_v();
// innermost level - also update x only for atoms in group
// if barostat, perform 1/2 step remap before and after
if (ilevel == 0) {
if (pstat_flag) remap();
nve_x();
if (pstat_flag) remap();
}
// if barostat, redo KSpace coeffs at outermost level,
// since volume has changed
if (ilevel == nlevels_respa-1 && kspace_flag && pstat_flag)
force->kspace->setup();
}
/* ---------------------------------------------------------------------- */
void FixNH::final_integrate_respa(int ilevel, int iloop)
{
// set timesteps by level
dtf = 0.5 * step_respa[ilevel] * force->ftm2v;
dthalf = 0.5 * step_respa[ilevel];
// outermost level - update eta_dot and omega_dot, apply via final_integrate
// all other levels - NVE update of v
if (ilevel == nlevels_respa-1) final_integrate();
else nve_v();
}
/* ---------------------------------------------------------------------- */
void FixNH::couple()
{
double *tensor = pressure->vector;
if (pstyle == ISO)
p_current[0] = p_current[1] = p_current[2] = pressure->scalar;
else if (pcouple == XYZ) {
double ave = 1.0/3.0 * (tensor[0] + tensor[1] + tensor[2]);
p_current[0] = p_current[1] = p_current[2] = ave;
} else if (pcouple == XY) {
double ave = 0.5 * (tensor[0] + tensor[1]);
p_current[0] = p_current[1] = ave;
p_current[2] = tensor[2];
} else if (pcouple == YZ) {
double ave = 0.5 * (tensor[1] + tensor[2]);
p_current[1] = p_current[2] = ave;
p_current[0] = tensor[0];
} else if (pcouple == XZ) {
double ave = 0.5 * (tensor[0] + tensor[2]);
p_current[0] = p_current[2] = ave;
p_current[1] = tensor[1];
} else {
p_current[0] = tensor[0];
p_current[1] = tensor[1];
p_current[2] = tensor[2];
}
if (!ISFINITE(p_current[0]) || !ISFINITE(p_current[1]) || !ISFINITE(p_current[2]))
error->all(FLERR,"Non-numeric pressure - simulation unstable");
// switch order from xy-xz-yz to Voigt
if (pstyle == TRICLINIC) {
p_current[3] = tensor[5];
p_current[4] = tensor[4];
p_current[5] = tensor[3];
if (!ISFINITE(p_current[3]) || !ISFINITE(p_current[4]) || !ISFINITE(p_current[5]))
error->all(FLERR,"Non-numeric pressure - simulation unstable");
}
}
/* ----------------------------------------------------------------------
change box size
remap all atoms or dilate group atoms depending on allremap flag
if rigid bodies exist, scale rigid body centers-of-mass
------------------------------------------------------------------------- */
void FixNH::remap()
{
int i;
double oldlo,oldhi;
double expfac;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *h = domain->h;
// omega is not used, except for book-keeping
for (int i = 0; i < 6; i++) omega[i] += dto*omega_dot[i];
// convert pertinent atoms and rigid bodies to lamda coords
if (allremap) domain->x2lamda(nlocal);
else {
for (i = 0; i < nlocal; i++)
if (mask[i] & dilate_group_bit)
domain->x2lamda(x[i],x[i]);
}
if (nrigid)
for (i = 0; i < nrigid; i++)
modify->fix[rfix[i]]->deform(0);
// reset global and local box to new size/shape
// this operation corresponds to applying the
// translate and scale operations
// corresponding to the solution of the following ODE:
//
// h_dot = omega_dot * h
//
// where h_dot, omega_dot and h are all upper-triangular
// 3x3 tensors. In Voigt notation, the elements of the
// RHS product tensor are:
// h_dot = [0*0, 1*1, 2*2, 1*3+3*2, 0*4+5*3+4*2, 0*5+5*1]
//
// Ordering of operations preserves time symmetry.
double dto2 = dto/2.0;
double dto4 = dto/4.0;
double dto8 = dto/8.0;
// off-diagonal components, first half
if (pstyle == TRICLINIC) {
if (p_flag[4]) {
expfac = exp(dto8*omega_dot[0]);
h[4] *= expfac;
h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]);
h[4] *= expfac;
}
if (p_flag[3]) {
expfac = exp(dto4*omega_dot[1]);
h[3] *= expfac;
h[3] += dto2*(omega_dot[3]*h[2]);
h[3] *= expfac;
}
if (p_flag[5]) {
expfac = exp(dto4*omega_dot[0]);
h[5] *= expfac;
h[5] += dto2*(omega_dot[5]*h[1]);
h[5] *= expfac;
}
if (p_flag[4]) {
expfac = exp(dto8*omega_dot[0]);
h[4] *= expfac;
h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]);
h[4] *= expfac;
}
}
// scale diagonal components
// scale tilt factors with cell, if set
if (p_flag[0]) {
oldlo = domain->boxlo[0];
oldhi = domain->boxhi[0];
expfac = exp(dto*omega_dot[0]);
domain->boxlo[0] = (oldlo-fixedpoint[0])*expfac + fixedpoint[0];
domain->boxhi[0] = (oldhi-fixedpoint[0])*expfac + fixedpoint[0];
}
if (p_flag[1]) {
oldlo = domain->boxlo[1];
oldhi = domain->boxhi[1];
expfac = exp(dto*omega_dot[1]);
domain->boxlo[1] = (oldlo-fixedpoint[1])*expfac + fixedpoint[1];
domain->boxhi[1] = (oldhi-fixedpoint[1])*expfac + fixedpoint[1];
if (scalexy) h[5] *= expfac;
}
if (p_flag[2]) {
oldlo = domain->boxlo[2];
oldhi = domain->boxhi[2];
expfac = exp(dto*omega_dot[2]);
domain->boxlo[2] = (oldlo-fixedpoint[2])*expfac + fixedpoint[2];
domain->boxhi[2] = (oldhi-fixedpoint[2])*expfac + fixedpoint[2];
if (scalexz) h[4] *= expfac;
if (scaleyz) h[3] *= expfac;
}
// off-diagonal components, second half
if (pstyle == TRICLINIC) {
if (p_flag[4]) {
expfac = exp(dto8*omega_dot[0]);
h[4] *= expfac;
h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]);
h[4] *= expfac;
}
if (p_flag[3]) {
expfac = exp(dto4*omega_dot[1]);
h[3] *= expfac;
h[3] += dto2*(omega_dot[3]*h[2]);
h[3] *= expfac;
}
if (p_flag[5]) {
expfac = exp(dto4*omega_dot[0]);
h[5] *= expfac;
h[5] += dto2*(omega_dot[5]*h[1]);
h[5] *= expfac;
}
if (p_flag[4]) {
expfac = exp(dto8*omega_dot[0]);
h[4] *= expfac;
h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]);
h[4] *= expfac;
}
}
domain->yz = h[3];
domain->xz = h[4];
domain->xy = h[5];
// tilt factor to cell length ratio can not exceed TILTMAX in one step
if (domain->yz < -TILTMAX*domain->yprd ||
domain->yz > TILTMAX*domain->yprd ||
domain->xz < -TILTMAX*domain->xprd ||
domain->xz > TILTMAX*domain->xprd ||
domain->xy < -TILTMAX*domain->xprd ||
domain->xy > TILTMAX*domain->xprd)
error->all(FLERR,"Fix npt/nph has tilted box too far in one step - "
"periodic cell is too far from equilibrium state");
domain->set_global_box();
domain->set_local_box();
// convert pertinent atoms and rigid bodies back to box coords
if (allremap) domain->lamda2x(nlocal);
else {
for (i = 0; i < nlocal; i++)
if (mask[i] & dilate_group_bit)
domain->lamda2x(x[i],x[i]);
}
if (nrigid)
for (i = 0; i < nrigid; i++)
modify->fix[rfix[i]]->deform(1);
}
/* ----------------------------------------------------------------------
pack entire state of Fix into one write
------------------------------------------------------------------------- */
void FixNH::write_restart(FILE *fp)
{
int nsize = size_restart_global();
double *list;
memory->create(list,nsize,"nh:list");
pack_restart_data(list);
if (comm->me == 0) {
int size = nsize * sizeof(double);
fwrite(&size,sizeof(int),1,fp);
fwrite(list,sizeof(double),nsize,fp);
}
memory->destroy(list);
}
/* ----------------------------------------------------------------------
calculate the number of data to be packed
------------------------------------------------------------------------- */
int FixNH::size_restart_global()
{
int nsize = 2;
if (tstat_flag) nsize += 1 + 2*mtchain;
if (pstat_flag) {
nsize += 16 + 2*mpchain;
if (deviatoric_flag) nsize += 6;
}
return nsize;
}
/* ----------------------------------------------------------------------
pack restart data
------------------------------------------------------------------------- */
int FixNH::pack_restart_data(double *list)
{
int n = 0;
list[n++] = tstat_flag;
if (tstat_flag) {
list[n++] = mtchain;
for (int ich = 0; ich < mtchain; ich++)
list[n++] = eta[ich];
for (int ich = 0; ich < mtchain; ich++)
list[n++] = eta_dot[ich];
}
list[n++] = pstat_flag;
if (pstat_flag) {
list[n++] = omega[0];
list[n++] = omega[1];
list[n++] = omega[2];
list[n++] = omega[3];
list[n++] = omega[4];
list[n++] = omega[5];
list[n++] = omega_dot[0];
list[n++] = omega_dot[1];
list[n++] = omega_dot[2];
list[n++] = omega_dot[3];
list[n++] = omega_dot[4];
list[n++] = omega_dot[5];
list[n++] = vol0;
list[n++] = t0;
list[n++] = mpchain;
if (mpchain) {
for (int ich = 0; ich < mpchain; ich++)
list[n++] = etap[ich];
for (int ich = 0; ich < mpchain; ich++)
list[n++] = etap_dot[ich];
}
list[n++] = deviatoric_flag;
if (deviatoric_flag) {
list[n++] = h0_inv[0];
list[n++] = h0_inv[1];
list[n++] = h0_inv[2];
list[n++] = h0_inv[3];
list[n++] = h0_inv[4];
list[n++] = h0_inv[5];
}
}
return n;
}
/* ----------------------------------------------------------------------
use state info from restart file to restart the Fix
------------------------------------------------------------------------- */
void FixNH::restart(char *buf)
{
int n = 0;
double *list = (double *) buf;
int flag = static_cast<int> (list[n++]);
if (flag) {
int m = static_cast<int> (list[n++]);
if (tstat_flag && m == mtchain) {
for (int ich = 0; ich < mtchain; ich++)
eta[ich] = list[n++];
for (int ich = 0; ich < mtchain; ich++)
eta_dot[ich] = list[n++];
} else n += 2*m;
}
flag = static_cast<int> (list[n++]);
if (flag) {
omega[0] = list[n++];
omega[1] = list[n++];
omega[2] = list[n++];
omega[3] = list[n++];
omega[4] = list[n++];
omega[5] = list[n++];
omega_dot[0] = list[n++];
omega_dot[1] = list[n++];
omega_dot[2] = list[n++];
omega_dot[3] = list[n++];
omega_dot[4] = list[n++];
omega_dot[5] = list[n++];
vol0 = list[n++];
t0 = list[n++];
int m = static_cast<int> (list[n++]);
if (pstat_flag && m == mpchain) {
for (int ich = 0; ich < mpchain; ich++)
etap[ich] = list[n++];
for (int ich = 0; ich < mpchain; ich++)
etap_dot[ich] = list[n++];
} else n+=2*m;
flag = static_cast<int> (list[n++]);
if (flag) {
h0_inv[0] = list[n++];
h0_inv[1] = list[n++];
h0_inv[2] = list[n++];
h0_inv[3] = list[n++];
h0_inv[4] = list[n++];
h0_inv[5] = list[n++];
}
}
}
/* ---------------------------------------------------------------------- */
int FixNH::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"temp") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (tcomputeflag) {
modify->delete_compute(id_temp);
tcomputeflag = 0;
}
delete [] id_temp;
int n = strlen(arg[1]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[1]);
int icompute = modify->find_compute(arg[1]);
if (icompute < 0)
error->all(FLERR,"Could not find fix_modify temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,
"Fix_modify temperature ID does not compute temperature");
if (temperature->igroup != 0 && comm->me == 0)
error->warning(FLERR,"Temperature for fix modify is not for group all");
// reset id_temp of pressure to new temperature ID
if (pstat_flag) {
icompute = modify->find_compute(id_press);
if (icompute < 0)
error->all(FLERR,"Pressure ID for fix modify does not exist");
modify->compute[icompute]->reset_extra_compute_fix(id_temp);
}
return 2;
} else if (strcmp(arg[0],"press") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (!pstat_flag) error->all(FLERR,"Illegal fix_modify command");
if (pcomputeflag) {
modify->delete_compute(id_press);
pcomputeflag = 0;
}
delete [] id_press;
int n = strlen(arg[1]) + 1;
id_press = new char[n];
strcpy(id_press,arg[1]);
int icompute = modify->find_compute(arg[1]);
if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID");
pressure = modify->compute[icompute];
if (pressure->pressflag == 0)
error->all(FLERR,"Fix_modify pressure ID does not compute pressure");
return 2;
}
return 0;
}
/* ---------------------------------------------------------------------- */
double FixNH::compute_scalar()
{
int i;
double volume;
double energy;
double kt = boltz * t_target;
double lkt_press = kt;
int ich;
if (dimension == 3) volume = domain->xprd * domain->yprd * domain->zprd;
else volume = domain->xprd * domain->yprd;
energy = 0.0;
// thermostat chain energy is equivalent to Eq. (2) in
// Martyna, Tuckerman, Tobias, Klein, Mol Phys, 87, 1117
// Sum(0.5*p_eta_k^2/Q_k,k=1,M) + L*k*T*eta_1 + Sum(k*T*eta_k,k=2,M),
// where L = tdof
// M = mtchain
// p_eta_k = Q_k*eta_dot[k-1]
// Q_1 = L*k*T/t_freq^2
// Q_k = k*T/t_freq^2, k > 1
if (tstat_flag) {
energy += ke_target * eta[0] + 0.5*eta_mass[0]*eta_dot[0]*eta_dot[0];
for (ich = 1; ich < mtchain; ich++)
energy += kt * eta[ich] + 0.5*eta_mass[ich]*eta_dot[ich]*eta_dot[ich];
}
// barostat energy is equivalent to Eq. (8) in
// Martyna, Tuckerman, Tobias, Klein, Mol Phys, 87, 1117
// Sum(0.5*p_omega^2/W + P*V),
// where N = natoms
// p_omega = W*omega_dot
// W = N*k*T/p_freq^2
// sum is over barostatted dimensions
if (pstat_flag) {
for (i = 0; i < 3; i++)
if (p_flag[i])
energy += 0.5*omega_dot[i]*omega_dot[i]*omega_mass[i] +
p_hydro*(volume-vol0) / (pdim*nktv2p);
if (pstyle == TRICLINIC) {
for (i = 3; i < 6; i++)
if (p_flag[i])
energy += 0.5*omega_dot[i]*omega_dot[i]*omega_mass[i];
}
// extra contributions from thermostat chain for barostat
if (mpchain) {
energy += lkt_press * etap[0] + 0.5*etap_mass[0]*etap_dot[0]*etap_dot[0];
for (ich = 1; ich < mpchain; ich++)
energy += kt * etap[ich] +
0.5*etap_mass[ich]*etap_dot[ich]*etap_dot[ich];
}
// extra contribution from strain energy
if (deviatoric_flag) energy += compute_strain_energy();
}
return energy;
}
/* ----------------------------------------------------------------------
return a single element of the following vectors, in this order:
eta[tchain], eta_dot[tchain], omega[ndof], omega_dot[ndof]
etap[pchain], etap_dot[pchain], PE_eta[tchain], KE_eta_dot[tchain]
PE_omega[ndof], KE_omega_dot[ndof], PE_etap[pchain], KE_etap_dot[pchain]
PE_strain[1]
if no thermostat exists, related quantities are omitted from the list
if no barostat exists, related quantities are omitted from the list
ndof = 1,3,6 degrees of freedom for pstyle = ISO,ANISO,TRI
------------------------------------------------------------------------- */
double FixNH::compute_vector(int n)
{
int ilen;
if (tstat_flag) {
ilen = mtchain;
if (n < ilen) return eta[n];
n -= ilen;
ilen = mtchain;
if (n < ilen) return eta_dot[n];
n -= ilen;
}
if (pstat_flag) {
if (pstyle == ISO) {
ilen = 1;
if (n < ilen) return omega[n];
n -= ilen;
} else if (pstyle == ANISO) {
ilen = 3;
if (n < ilen) return omega[n];
n -= ilen;
} else {
ilen = 6;
if (n < ilen) return omega[n];
n -= ilen;
}
if (pstyle == ISO) {
ilen = 1;
if (n < ilen) return omega_dot[n];
n -= ilen;
} else if (pstyle == ANISO) {
ilen = 3;
if (n < ilen) return omega_dot[n];
n -= ilen;
} else {
ilen = 6;
if (n < ilen) return omega_dot[n];
n -= ilen;
}
if (mpchain) {
ilen = mpchain;
if (n < ilen) return etap[n];
n -= ilen;
ilen = mpchain;
if (n < ilen) return etap_dot[n];
n -= ilen;
}
}
double volume;
double kt = boltz * t_target;
double lkt_press = kt;
int ich;
if (dimension == 3) volume = domain->xprd * domain->yprd * domain->zprd;
else volume = domain->xprd * domain->yprd;
if (tstat_flag) {
ilen = mtchain;
if (n < ilen) {
ich = n;
if (ich == 0)
return ke_target * eta[0];
else
return kt * eta[ich];
}
n -= ilen;
ilen = mtchain;
if (n < ilen) {
ich = n;
if (ich == 0)
return 0.5*eta_mass[0]*eta_dot[0]*eta_dot[0];
else
return 0.5*eta_mass[ich]*eta_dot[ich]*eta_dot[ich];
}
n -= ilen;
}
if (pstat_flag) {
if (pstyle == ISO) {
ilen = 1;
if (n < ilen)
return p_hydro*(volume-vol0) / nktv2p;
n -= ilen;
} else if (pstyle == ANISO) {
ilen = 3;
if (n < ilen) {
if (p_flag[n])
return p_hydro*(volume-vol0) / (pdim*nktv2p);
else
return 0.0;
}
n -= ilen;
} else {
ilen = 6;
if (n < ilen) {
if (n > 2) return 0.0;
else if (p_flag[n])
return p_hydro*(volume-vol0) / (pdim*nktv2p);
else
return 0.0;
}
n -= ilen;
}
if (pstyle == ISO) {
ilen = 1;
if (n < ilen)
return pdim*0.5*omega_dot[n]*omega_dot[n]*omega_mass[n];
n -= ilen;
} else if (pstyle == ANISO) {
ilen = 3;
if (n < ilen) {
if (p_flag[n])
return 0.5*omega_dot[n]*omega_dot[n]*omega_mass[n];
else return 0.0;
}
n -= ilen;
} else {
ilen = 6;
if (n < ilen) {
if (p_flag[n])
return 0.5*omega_dot[n]*omega_dot[n]*omega_mass[n];
else return 0.0;
}
n -= ilen;
}
if (mpchain) {
ilen = mpchain;
if (n < ilen) {
ich = n;
if (ich == 0) return lkt_press * etap[0];
else return kt * etap[ich];
}
n -= ilen;
ilen = mpchain;
if (n < ilen) {
ich = n;
if (ich == 0)
return 0.5*etap_mass[0]*etap_dot[0]*etap_dot[0];
else
return 0.5*etap_mass[ich]*etap_dot[ich]*etap_dot[ich];
}
n -= ilen;
}
if (deviatoric_flag) {
ilen = 1;
if (n < ilen)
return compute_strain_energy();
n -= ilen;
}
}
return 0.0;
}
/* ---------------------------------------------------------------------- */
void FixNH::reset_target(double t_new)
{
t_target = t_start = t_stop = t_new;
}
/* ---------------------------------------------------------------------- */
void FixNH::reset_dt()
{
dtv = update->dt;
dtf = 0.5 * update->dt * force->ftm2v;
dthalf = 0.5 * update->dt;
dt4 = 0.25 * update->dt;
dt8 = 0.125 * update->dt;
dto = dthalf;
// If using respa, then remap is performed in innermost level
if (strstr(update->integrate_style,"respa"))
dto = 0.5*step_respa[0];
if (pstat_flag)
pdrag_factor = 1.0 - (update->dt * p_freq_max * drag / nc_pchain);
if (tstat_flag)
tdrag_factor = 1.0 - (update->dt * t_freq * drag / nc_tchain);
}
/* ----------------------------------------------------------------------
extract thermostat properties
------------------------------------------------------------------------- */
void *FixNH::extract(const char *str, int &dim)
{
dim=0;
if (strcmp(str,"t_target") == 0) {
return &t_target;
} else if (strcmp(str,"mtchain") == 0) {
return &mtchain;
}
dim=1;
if (strcmp(str,"eta") == 0) {
return &eta;
}
return NULL;
}
/* ----------------------------------------------------------------------
perform half-step update of chain thermostat variables
------------------------------------------------------------------------- */
void FixNH::nhc_temp_integrate()
{
int ich;
double expfac;
double kecurrent = tdof * boltz * t_current;
// Update masses, to preserve initial freq, if flag set
if (eta_mass_flag) {
eta_mass[0] = tdof * boltz * t_target / (t_freq*t_freq);
for (int ich = 1; ich < mtchain; ich++)
eta_mass[ich] = boltz * t_target / (t_freq*t_freq);
}
if (eta_mass[0] > 0.0)
eta_dotdot[0] = (kecurrent - ke_target)/eta_mass[0];
else eta_dotdot[0] = 0.0;
double ncfac = 1.0/nc_tchain;
for (int iloop = 0; iloop < nc_tchain; iloop++) {
for (ich = mtchain-1; ich > 0; ich--) {
expfac = exp(-ncfac*dt8*eta_dot[ich+1]);
eta_dot[ich] *= expfac;
eta_dot[ich] += eta_dotdot[ich] * ncfac*dt4;
eta_dot[ich] *= tdrag_factor;
eta_dot[ich] *= expfac;
}
expfac = exp(-ncfac*dt8*eta_dot[1]);
eta_dot[0] *= expfac;
eta_dot[0] += eta_dotdot[0] * ncfac*dt4;
eta_dot[0] *= tdrag_factor;
eta_dot[0] *= expfac;
factor_eta = exp(-ncfac*dthalf*eta_dot[0]);
nh_v_temp();
// rescale temperature due to velocity scaling
// should not be necessary to explicitly recompute the temperature
t_current *= factor_eta*factor_eta;
kecurrent = tdof * boltz * t_current;
if (eta_mass[0] > 0.0)
eta_dotdot[0] = (kecurrent - ke_target)/eta_mass[0];
else eta_dotdot[0] = 0.0;
for (ich = 0; ich < mtchain; ich++)
eta[ich] += ncfac*dthalf*eta_dot[ich];
eta_dot[0] *= expfac;
eta_dot[0] += eta_dotdot[0] * ncfac*dt4;
eta_dot[0] *= expfac;
for (ich = 1; ich < mtchain; ich++) {
expfac = exp(-ncfac*dt8*eta_dot[ich+1]);
eta_dot[ich] *= expfac;
eta_dotdot[ich] = (eta_mass[ich-1]*eta_dot[ich-1]*eta_dot[ich-1]
- boltz * t_target)/eta_mass[ich];
eta_dot[ich] += eta_dotdot[ich] * ncfac*dt4;
eta_dot[ich] *= expfac;
}
}
}
/* ----------------------------------------------------------------------
perform half-step update of chain thermostat variables for barostat
scale barostat velocities
------------------------------------------------------------------------- */
void FixNH::nhc_press_integrate()
{
int ich,i;
double expfac,factor_etap,kecurrent;
double kt = boltz * t_target;
double lkt_press = kt;
// Update masses, to preserve initial freq, if flag set
if (omega_mass_flag) {
double nkt = atom->natoms * kt;
for (int i = 0; i < 3; i++)
if (p_flag[i])
omega_mass[i] = nkt/(p_freq[i]*p_freq[i]);
if (pstyle == TRICLINIC) {
for (int i = 3; i < 6; i++)
if (p_flag[i]) omega_mass[i] = nkt/(p_freq[i]*p_freq[i]);
}
}
if (etap_mass_flag) {
if (mpchain) {
etap_mass[0] = boltz * t_target / (p_freq_max*p_freq_max);
for (int ich = 1; ich < mpchain; ich++)
etap_mass[ich] = boltz * t_target / (p_freq_max*p_freq_max);
for (int ich = 1; ich < mpchain; ich++)
etap_dotdot[ich] =
(etap_mass[ich-1]*etap_dot[ich-1]*etap_dot[ich-1] -
boltz * t_target) / etap_mass[ich];
}
}
kecurrent = 0.0;
for (i = 0; i < 3; i++)
if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i];
if (pstyle == TRICLINIC) {
for (i = 3; i < 6; i++)
if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i];
}
etap_dotdot[0] = (kecurrent - lkt_press)/etap_mass[0];
double ncfac = 1.0/nc_pchain;
for (int iloop = 0; iloop < nc_pchain; iloop++) {
for (ich = mpchain-1; ich > 0; ich--) {
expfac = exp(-ncfac*dt8*etap_dot[ich+1]);
etap_dot[ich] *= expfac;
etap_dot[ich] += etap_dotdot[ich] * ncfac*dt4;
etap_dot[ich] *= pdrag_factor;
etap_dot[ich] *= expfac;
}
expfac = exp(-ncfac*dt8*etap_dot[1]);
etap_dot[0] *= expfac;
etap_dot[0] += etap_dotdot[0] * ncfac*dt4;
etap_dot[0] *= pdrag_factor;
etap_dot[0] *= expfac;
for (ich = 0; ich < mpchain; ich++)
etap[ich] += ncfac*dthalf*etap_dot[ich];
factor_etap = exp(-ncfac*dthalf*etap_dot[0]);
for (i = 0; i < 3; i++)
if (p_flag[i]) omega_dot[i] *= factor_etap;
if (pstyle == TRICLINIC) {
for (i = 3; i < 6; i++)
if (p_flag[i]) omega_dot[i] *= factor_etap;
}
kecurrent = 0.0;
for (i = 0; i < 3; i++)
if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i];
if (pstyle == TRICLINIC) {
for (i = 3; i < 6; i++)
if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i];
}
etap_dotdot[0] = (kecurrent - lkt_press)/etap_mass[0];
etap_dot[0] *= expfac;
etap_dot[0] += etap_dotdot[0] * ncfac*dt4;
etap_dot[0] *= expfac;
for (ich = 1; ich < mpchain; ich++) {
expfac = exp(-ncfac*dt8*etap_dot[ich+1]);
etap_dot[ich] *= expfac;
etap_dotdot[ich] =
(etap_mass[ich-1]*etap_dot[ich-1]*etap_dot[ich-1] - boltz*t_target) /
etap_mass[ich];
etap_dot[ich] += etap_dotdot[ich] * ncfac*dt4;
etap_dot[ich] *= expfac;
}
}
}
/* ----------------------------------------------------------------------
perform half-step barostat scaling of velocities
-----------------------------------------------------------------------*/
void FixNH::nh_v_press()
{
double factor[3];
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
factor[0] = exp(-dt4*(omega_dot[0]+mtk_term2));
factor[1] = exp(-dt4*(omega_dot[1]+mtk_term2));
factor[2] = exp(-dt4*(omega_dot[2]+mtk_term2));
if (which == NOBIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
v[i][0] *= factor[0];
v[i][1] *= factor[1];
v[i][2] *= factor[2];
if (pstyle == TRICLINIC) {
v[i][0] += -dthalf*(v[i][1]*omega_dot[5] + v[i][2]*omega_dot[4]);
v[i][1] += -dthalf*v[i][2]*omega_dot[3];
}
v[i][0] *= factor[0];
v[i][1] *= factor[1];
v[i][2] *= factor[2];
}
}
} else if (which == BIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
temperature->remove_bias(i,v[i]);
v[i][0] *= factor[0];
v[i][1] *= factor[1];
v[i][2] *= factor[2];
if (pstyle == TRICLINIC) {
v[i][0] += -dthalf*(v[i][1]*omega_dot[5] + v[i][2]*omega_dot[4]);
v[i][1] += -dthalf*v[i][2]*omega_dot[3];
}
v[i][0] *= factor[0];
v[i][1] *= factor[1];
v[i][2] *= factor[2];
temperature->restore_bias(i,v[i]);
}
}
}
}
/* ----------------------------------------------------------------------
perform half-step update of velocities
-----------------------------------------------------------------------*/
void FixNH::nve_v()
{
double dtfm;
double **v = atom->v;
double **f = atom->f;
double *rmass = atom->rmass;
double *mass = atom->mass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
if (rmass) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
dtfm = dtf / rmass[i];
v[i][0] += dtfm*f[i][0];
v[i][1] += dtfm*f[i][1];
v[i][2] += dtfm*f[i][2];
}
}
} else {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
dtfm = dtf / mass[type[i]];
v[i][0] += dtfm*f[i][0];
v[i][1] += dtfm*f[i][1];
v[i][2] += dtfm*f[i][2];
}
}
}
}
/* ----------------------------------------------------------------------
perform full-step update of positions
-----------------------------------------------------------------------*/
void FixNH::nve_x()
{
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
// x update by full step only for atoms in group
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
x[i][0] += dtv * v[i][0];
x[i][1] += dtv * v[i][1];
x[i][2] += dtv * v[i][2];
}
}
}
/* ----------------------------------------------------------------------
perform half-step thermostat scaling of velocities
-----------------------------------------------------------------------*/
void FixNH::nh_v_temp()
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
if (which == NOBIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
v[i][0] *= factor_eta;
v[i][1] *= factor_eta;
v[i][2] *= factor_eta;
}
}
} else if (which == BIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
temperature->remove_bias(i,v[i]);
v[i][0] *= factor_eta;
v[i][1] *= factor_eta;
v[i][2] *= factor_eta;
temperature->restore_bias(i,v[i]);
}
}
}
}
/* ----------------------------------------------------------------------
compute sigma tensor
needed whenever p_target or h0_inv changes
-----------------------------------------------------------------------*/
void FixNH::compute_sigma()
{
// if nreset_h0 > 0, reset vol0 and h0_inv
// every nreset_h0 timesteps
if (nreset_h0 > 0) {
int delta = update->ntimestep - update->beginstep;
if (delta % nreset_h0 == 0) {
if (dimension == 3) vol0 = domain->xprd * domain->yprd * domain->zprd;
else vol0 = domain->xprd * domain->yprd;
h0_inv[0] = domain->h_inv[0];
h0_inv[1] = domain->h_inv[1];
h0_inv[2] = domain->h_inv[2];
h0_inv[3] = domain->h_inv[3];
h0_inv[4] = domain->h_inv[4];
h0_inv[5] = domain->h_inv[5];
}
}
// generate upper-triangular half of
// sigma = vol0*h0inv*(p_target-p_hydro)*h0inv^t
// units of sigma are are PV/L^2 e.g. atm.A
//
// [ 0 5 4 ] [ 0 5 4 ] [ 0 5 4 ] [ 0 - - ]
// [ 5 1 3 ] = [ - 1 3 ] [ 5 1 3 ] [ 5 1 - ]
// [ 4 3 2 ] [ - - 2 ] [ 4 3 2 ] [ 4 3 2 ]
sigma[0] =
vol0*(h0_inv[0]*((p_target[0]-p_hydro)*h0_inv[0] +
p_target[5]*h0_inv[5]+p_target[4]*h0_inv[4]) +
h0_inv[5]*(p_target[5]*h0_inv[0] +
(p_target[1]-p_hydro)*h0_inv[5]+p_target[3]*h0_inv[4]) +
h0_inv[4]*(p_target[4]*h0_inv[0]+p_target[3]*h0_inv[5] +
(p_target[2]-p_hydro)*h0_inv[4]));
sigma[1] =
vol0*(h0_inv[1]*((p_target[1]-p_hydro)*h0_inv[1] +
p_target[3]*h0_inv[3]) +
h0_inv[3]*(p_target[3]*h0_inv[1] +
(p_target[2]-p_hydro)*h0_inv[3]));
sigma[2] =
vol0*(h0_inv[2]*((p_target[2]-p_hydro)*h0_inv[2]));
sigma[3] =
vol0*(h0_inv[1]*(p_target[3]*h0_inv[2]) +
h0_inv[3]*((p_target[2]-p_hydro)*h0_inv[2]));
sigma[4] =
vol0*(h0_inv[0]*(p_target[4]*h0_inv[2]) +
h0_inv[5]*(p_target[3]*h0_inv[2]) +
h0_inv[4]*((p_target[2]-p_hydro)*h0_inv[2]));
sigma[5] =
vol0*(h0_inv[0]*(p_target[5]*h0_inv[1]+p_target[4]*h0_inv[3]) +
h0_inv[5]*((p_target[1]-p_hydro)*h0_inv[1]+p_target[3]*h0_inv[3]) +
h0_inv[4]*(p_target[3]*h0_inv[1]+(p_target[2]-p_hydro)*h0_inv[3]));
}
/* ----------------------------------------------------------------------
compute strain energy
-----------------------------------------------------------------------*/
double FixNH::compute_strain_energy()
{
// compute strain energy = 0.5*Tr(sigma*h*h^t) in energy units
double* h = domain->h;
double d0,d1,d2;
d0 =
sigma[0]*(h[0]*h[0]+h[5]*h[5]+h[4]*h[4]) +
sigma[5]*( h[1]*h[5]+h[3]*h[4]) +
sigma[4]*( h[2]*h[4]);
d1 =
sigma[5]*( h[5]*h[1]+h[4]*h[3]) +
sigma[1]*( h[1]*h[1]+h[3]*h[3]) +
sigma[3]*( h[2]*h[3]);
d2 =
sigma[4]*( h[4]*h[2]) +
sigma[3]*( h[3]*h[2]) +
sigma[2]*( h[2]*h[2]);
double energy = 0.5*(d0+d1+d2)/nktv2p;
return energy;
}
/* ----------------------------------------------------------------------
compute deviatoric barostat force = h*sigma*h^t
-----------------------------------------------------------------------*/
void FixNH::compute_deviatoric()
{
// generate upper-triangular part of h*sigma*h^t
// units of fdev are are PV, e.g. atm*A^3
// [ 0 5 4 ] [ 0 5 4 ] [ 0 5 4 ] [ 0 - - ]
// [ 5 1 3 ] = [ - 1 3 ] [ 5 1 3 ] [ 5 1 - ]
// [ 4 3 2 ] [ - - 2 ] [ 4 3 2 ] [ 4 3 2 ]
double* h = domain->h;
fdev[0] =
h[0]*(sigma[0]*h[0]+sigma[5]*h[5]+sigma[4]*h[4]) +
h[5]*(sigma[5]*h[0]+sigma[1]*h[5]+sigma[3]*h[4]) +
h[4]*(sigma[4]*h[0]+sigma[3]*h[5]+sigma[2]*h[4]);
fdev[1] =
h[1]*( sigma[1]*h[1]+sigma[3]*h[3]) +
h[3]*( sigma[3]*h[1]+sigma[2]*h[3]);
fdev[2] =
h[2]*( sigma[2]*h[2]);
fdev[3] =
h[1]*( sigma[3]*h[2]) +
h[3]*( sigma[2]*h[2]);
fdev[4] =
h[0]*( sigma[4]*h[2]) +
h[5]*( sigma[3]*h[2]) +
h[4]*( sigma[2]*h[2]);
fdev[5] =
h[0]*( sigma[5]*h[1]+sigma[4]*h[3]) +
h[5]*( sigma[1]*h[1]+sigma[3]*h[3]) +
h[4]*( sigma[3]*h[1]+sigma[2]*h[3]);
}
/* ----------------------------------------------------------------------
compute target temperature and kinetic energy
-----------------------------------------------------------------------*/
void FixNH::compute_temp_target()
{
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
t_target = t_start + delta * (t_stop-t_start);
ke_target = tdof * boltz * t_target;
}
/* ----------------------------------------------------------------------
compute hydrostatic target pressure
-----------------------------------------------------------------------*/
void FixNH::compute_press_target()
{
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
p_hydro = 0.0;
for (int i = 0; i < 3; i++)
if (p_flag[i]) {
p_target[i] = p_start[i] + delta * (p_stop[i]-p_start[i]);
p_hydro += p_target[i];
}
if (pdim > 0) p_hydro /= pdim;
if (pstyle == TRICLINIC)
for (int i = 3; i < 6; i++)
p_target[i] = p_start[i] + delta * (p_stop[i]-p_start[i]);
// if deviatoric, recompute sigma each time p_target changes
if (deviatoric_flag) compute_sigma();
}
/* ----------------------------------------------------------------------
update omega_dot, omega
-----------------------------------------------------------------------*/
void FixNH::nh_omega_dot()
{
double f_omega,volume;
if (dimension == 3) volume = domain->xprd*domain->yprd*domain->zprd;
else volume = domain->xprd*domain->yprd;
if (deviatoric_flag) compute_deviatoric();
mtk_term1 = 0.0;
if (mtk_flag) {
if (pstyle == ISO) {
mtk_term1 = tdof * boltz * t_current;
mtk_term1 /= pdim * atom->natoms;
} else {
double *mvv_current = temperature->vector;
for (int i = 0; i < 3; i++)
if (p_flag[i])
mtk_term1 += mvv_current[i];
mtk_term1 /= pdim * atom->natoms;
}
}
for (int i = 0; i < 3; i++)
if (p_flag[i]) {
f_omega = (p_current[i]-p_hydro)*volume /
(omega_mass[i] * nktv2p) + mtk_term1 / omega_mass[i];
if (deviatoric_flag) f_omega -= fdev[i]/(omega_mass[i] * nktv2p);
omega_dot[i] += f_omega*dthalf;
omega_dot[i] *= pdrag_factor;
}
mtk_term2 = 0.0;
if (mtk_flag) {
for (int i = 0; i < 3; i++)
if (p_flag[i])
mtk_term2 += omega_dot[i];
if (pdim > 0) mtk_term2 /= pdim * atom->natoms;
}
if (pstyle == TRICLINIC) {
for (int i = 3; i < 6; i++) {
if (p_flag[i]) {
f_omega = p_current[i]*volume/(omega_mass[i] * nktv2p);
if (deviatoric_flag)
f_omega -= fdev[i]/(omega_mass[i] * nktv2p);
omega_dot[i] += f_omega*dthalf;
omega_dot[i] *= pdrag_factor;
}
}
}
}
/* ----------------------------------------------------------------------
if any tilt ratios exceed limits, set flip = 1 and compute new tilt values
do not flip in x or y if non-periodic (can tilt but not flip)
this is b/c the box length would be changed (dramatically) by flip
if yz tilt exceeded, adjust C vector by one B vector
if xz tilt exceeded, adjust C vector by one A vector
if xy tilt exceeded, adjust B vector by one A vector
check yz first since it may change xz, then xz check comes after
if any flip occurs, create new box in domain
image_flip() adjusts image flags due to box shape change induced by flip
remap() puts atoms outside the new box back into the new box
perform irregular on atoms in lamda coords to migrate atoms to new procs
important that image_flip comes before remap, since remap may change
image flags to new values, making eqs in doc of Domain:image_flip incorrect
------------------------------------------------------------------------- */
void FixNH::pre_exchange()
{
double xprd = domain->xprd;
double yprd = domain->yprd;
// flip is only triggered when tilt exceeds 0.5 by DELTAFLIP
// this avoids immediate re-flipping due to tilt oscillations
double xtiltmax = (0.5+DELTAFLIP)*xprd;
double ytiltmax = (0.5+DELTAFLIP)*yprd;
int flipxy,flipxz,flipyz;
flipxy = flipxz = flipyz = 0;
if (domain->yperiodic) {
if (domain->yz < -ytiltmax) {
domain->yz += yprd;
domain->xz += domain->xy;
flipyz = 1;
} else if (domain->yz >= ytiltmax) {
domain->yz -= yprd;
domain->xz -= domain->xy;
flipyz = -1;
}
}
if (domain->xperiodic) {
if (domain->xz < -xtiltmax) {
domain->xz += xprd;
flipxz = 1;
} else if (domain->xz >= xtiltmax) {
domain->xz -= xprd;
flipxz = -1;
}
if (domain->xy < -xtiltmax) {
domain->xy += xprd;
flipxy = 1;
} else if (domain->xy >= xtiltmax) {
domain->xy -= xprd;
flipxy = -1;
}
}
int flip = 0;
if (flipxy || flipxz || flipyz) flip = 1;
if (flip) {
domain->set_global_box();
domain->set_local_box();
domain->image_flip(flipxy,flipxz,flipyz);
double **x = atom->x;
imageint *image = atom->image;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) domain->remap(x[i],image[i]);
domain->x2lamda(atom->nlocal);
irregular->migrate_atoms();
domain->lamda2x(atom->nlocal);
}
}
/* ----------------------------------------------------------------------
memory usage of Irregular
------------------------------------------------------------------------- */
double FixNH::memory_usage()
{
double bytes = 0.0;
if (irregular) bytes += irregular->memory_usage();
return bytes;
}
diff --git a/src/fix_press_berendsen.cpp b/src/fix_press_berendsen.cpp
index 58dd0dae9..04e2b3d39 100644
--- a/src/fix_press_berendsen.cpp
+++ b/src/fix_press_berendsen.cpp
@@ -1,521 +1,522 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "fix_press_berendsen.h"
#include "atom.h"
#include "force.h"
#include "comm.h"
#include "modify.h"
#include "fix_deform.h"
#include "compute.h"
#include "kspace.h"
#include "update.h"
#include "respa.h"
#include "domain.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NOBIAS,BIAS};
enum{NONE,XYZ,XY,YZ,XZ};
enum{ISO,ANISO};
/* ---------------------------------------------------------------------- */
FixPressBerendsen::FixPressBerendsen(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ id_temp(NULL), id_press(NULL), tflag(0), pflag(0)
{
if (narg < 5) error->all(FLERR,"Illegal fix press/berendsen command");
box_change_size = 1;
// Berendsen barostat applied every step
nevery = 1;
// default values
pcouple = NONE;
bulkmodulus = 10.0;
allremap = 1;
for (int i = 0; i < 3; i++) {
p_start[i] = p_stop[i] = p_period[i] = 0.0;
p_flag[i] = 0;
p_period[i] = 0.0;
}
// process keywords
dimension = domain->dimension;
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"iso") == 0) {
if (iarg+4 > narg)
error->all(FLERR,"Illegal fix press/berendsen command");
pcouple = XYZ;
p_start[0] = p_start[1] = p_start[2] = force->numeric(FLERR,arg[iarg+1]);
p_stop[0] = p_stop[1] = p_stop[2] = force->numeric(FLERR,arg[iarg+2]);
p_period[0] = p_period[1] = p_period[2] = force->numeric(FLERR,arg[iarg+3]);
p_flag[0] = p_flag[1] = p_flag[2] = 1;
if (dimension == 2) {
p_start[2] = p_stop[2] = p_period[2] = 0.0;
p_flag[2] = 0;
}
iarg += 4;
} else if (strcmp(arg[iarg],"aniso") == 0) {
if (iarg+4 > narg)
error->all(FLERR,"Illegal fix press/berendsen command");
pcouple = NONE;
p_start[0] = p_start[1] = p_start[2] = force->numeric(FLERR,arg[iarg+1]);
p_stop[0] = p_stop[1] = p_stop[2] = force->numeric(FLERR,arg[iarg+2]);
p_period[0] = p_period[1] = p_period[2] = force->numeric(FLERR,arg[iarg+3]);
p_flag[0] = p_flag[1] = p_flag[2] = 1;
if (dimension == 2) {
p_start[2] = p_stop[2] = p_period[2] = 0.0;
p_flag[2] = 0;
}
iarg += 4;
} else if (strcmp(arg[iarg],"x") == 0) {
if (iarg+4 > narg)
error->all(FLERR,"Illegal fix press/berendsen command");
p_start[0] = force->numeric(FLERR,arg[iarg+1]);
p_stop[0] = force->numeric(FLERR,arg[iarg+2]);
p_period[0] = force->numeric(FLERR,arg[iarg+3]);
p_flag[0] = 1;
iarg += 4;
} else if (strcmp(arg[iarg],"y") == 0) {
if (iarg+4 > narg)
error->all(FLERR,"Illegal fix press/berendsen command");
p_start[1] = force->numeric(FLERR,arg[iarg+1]);
p_stop[1] = force->numeric(FLERR,arg[iarg+2]);
p_period[1] = force->numeric(FLERR,arg[iarg+3]);
p_flag[1] = 1;
iarg += 4;
} else if (strcmp(arg[iarg],"z") == 0) {
if (iarg+4 > narg)
error->all(FLERR,"Illegal fix press/berendsen command");
p_start[2] = force->numeric(FLERR,arg[iarg+1]);
p_stop[2] = force->numeric(FLERR,arg[iarg+2]);
p_period[2] = force->numeric(FLERR,arg[iarg+3]);
p_flag[2] = 1;
iarg += 4;
if (dimension == 2)
error->all(FLERR,"Invalid fix press/berendsen for a 2d simulation");
} else if (strcmp(arg[iarg],"couple") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal fix press/berendsen command");
if (strcmp(arg[iarg+1],"xyz") == 0) pcouple = XYZ;
else if (strcmp(arg[iarg+1],"xy") == 0) pcouple = XY;
else if (strcmp(arg[iarg+1],"yz") == 0) pcouple = YZ;
else if (strcmp(arg[iarg+1],"xz") == 0) pcouple = XZ;
else if (strcmp(arg[iarg+1],"none") == 0) pcouple = NONE;
else error->all(FLERR,"Illegal fix press/berendsen command");
iarg += 2;
} else if (strcmp(arg[iarg],"modulus") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal fix press/berendsen command");
bulkmodulus = force->numeric(FLERR,arg[iarg+1]);
if (bulkmodulus <= 0.0)
error->all(FLERR,"Illegal fix press/berendsen command");
iarg += 2;
} else if (strcmp(arg[iarg],"dilate") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal fix press/berendsen command");
if (strcmp(arg[iarg+1],"all") == 0) allremap = 1;
else if (strcmp(arg[iarg+1],"partial") == 0) allremap = 0;
else error->all(FLERR,"Illegal fix press/berendsen command");
iarg += 2;
} else error->all(FLERR,"Illegal fix press/berendsen command");
}
if (allremap == 0) restart_pbc = 1;
// error checks
if (dimension == 2 && p_flag[2])
error->all(FLERR,"Invalid fix press/berendsen for a 2d simulation");
if (dimension == 2 && (pcouple == YZ || pcouple == XZ))
error->all(FLERR,"Invalid fix press/berendsen for a 2d simulation");
if (pcouple == XYZ && (p_flag[0] == 0 || p_flag[1] == 0))
error->all(FLERR,"Invalid fix press/berendsen pressure settings");
if (pcouple == XYZ && dimension == 3 && p_flag[2] == 0)
error->all(FLERR,"Invalid fix press/berendsen pressure settings");
if (pcouple == XY && (p_flag[0] == 0 || p_flag[1] == 0))
error->all(FLERR,"Invalid fix press/berendsen pressure settings");
if (pcouple == YZ && (p_flag[1] == 0 || p_flag[2] == 0))
error->all(FLERR,"Invalid fix press/berendsen pressure settings");
if (pcouple == XZ && (p_flag[0] == 0 || p_flag[2] == 0))
error->all(FLERR,"Invalid fix press/berendsen pressure settings");
if (p_flag[0] && domain->xperiodic == 0)
error->all(FLERR,
"Cannot use fix press/berendsen on a non-periodic dimension");
if (p_flag[1] && domain->yperiodic == 0)
error->all(FLERR,
"Cannot use fix press/berendsen on a non-periodic dimension");
if (p_flag[2] && domain->zperiodic == 0)
error->all(FLERR,
"Cannot use fix press/berendsen on a non-periodic dimension");
if (pcouple == XYZ && dimension == 3 &&
(p_start[0] != p_start[1] || p_start[0] != p_start[2] ||
p_stop[0] != p_stop[1] || p_stop[0] != p_stop[2] ||
p_period[0] != p_period[1] || p_period[0] != p_period[2]))
error->all(FLERR,"Invalid fix press/berendsen pressure settings");
if (pcouple == XYZ && dimension == 2 &&
(p_start[0] != p_start[1] || p_stop[0] != p_stop[1] ||
p_period[0] != p_period[1]))
error->all(FLERR,"Invalid fix press/berendsen pressure settings");
if (pcouple == XY &&
(p_start[0] != p_start[1] || p_stop[0] != p_stop[1] ||
p_period[0] != p_period[1]))
error->all(FLERR,"Invalid fix press/berendsen pressure settings");
if (pcouple == YZ &&
(p_start[1] != p_start[2] || p_stop[1] != p_stop[2] ||
p_period[1] != p_period[2]))
error->all(FLERR,"Invalid fix press/berendsen pressure settings");
if (pcouple == XZ &&
(p_start[0] != p_start[2] || p_stop[0] != p_stop[2] ||
p_period[0] != p_period[2]))
error->all(FLERR,"Invalid fix press/berendsen pressure settings");
if ((p_flag[0] && p_period[0] <= 0.0) ||
(p_flag[1] && p_period[1] <= 0.0) ||
(p_flag[2] && p_period[2] <= 0.0))
error->all(FLERR,"Fix press/berendsen damping parameters must be > 0.0");
// pstyle = ISO if XYZ coupling or XY coupling in 2d -> 1 dof
// else pstyle = ANISO -> 3 dof
if (pcouple == XYZ || (dimension == 2 && pcouple == XY)) pstyle = ISO;
else pstyle = ANISO;
// create a new compute temp style
// id = fix-ID + temp
// compute group = all since pressure is always global (group all)
// and thus its KE/temperature contribution should use group all
int n = strlen(id) + 6;
id_temp = new char[n];
strcpy(id_temp,id);
strcat(id_temp,"_temp");
char **newarg = new char*[3];
newarg[0] = id_temp;
newarg[1] = (char *) "all";
newarg[2] = (char *) "temp";
modify->add_compute(3,newarg);
delete [] newarg;
tflag = 1;
// create a new compute pressure style
// id = fix-ID + press, compute group = all
// pass id_temp as 4th arg to pressure constructor
n = strlen(id) + 7;
id_press = new char[n];
strcpy(id_press,id);
strcat(id_press,"_press");
newarg = new char*[4];
newarg[0] = id_press;
newarg[1] = (char *) "all";
newarg[2] = (char *) "pressure";
newarg[3] = id_temp;
modify->add_compute(4,newarg);
delete [] newarg;
pflag = 1;
nrigid = 0;
rfix = NULL;
}
/* ---------------------------------------------------------------------- */
FixPressBerendsen::~FixPressBerendsen()
{
delete [] rfix;
// delete temperature and pressure if fix created them
if (tflag) modify->delete_compute(id_temp);
if (pflag) modify->delete_compute(id_press);
delete [] id_temp;
delete [] id_press;
}
/* ---------------------------------------------------------------------- */
int FixPressBerendsen::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixPressBerendsen::init()
{
if (domain->triclinic)
error->all(FLERR,"Cannot use fix press/berendsen with triclinic box");
// insure no conflict with fix deform
for (int i = 0; i < modify->nfix; i++)
if (strcmp(modify->fix[i]->style,"deform") == 0) {
int *dimflag = ((FixDeform *) modify->fix[i])->dimflag;
if ((p_flag[0] && dimflag[0]) || (p_flag[1] && dimflag[1]) ||
(p_flag[2] && dimflag[2]))
error->all(FLERR,"Cannot use fix press/berendsen and "
"fix deform on same component of stress tensor");
}
// set temperature and pressure ptrs
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Temperature ID for fix press/berendsen does not exist");
temperature = modify->compute[icompute];
if (temperature->tempbias) which = BIAS;
else which = NOBIAS;
icompute = modify->find_compute(id_press);
if (icompute < 0)
error->all(FLERR,"Pressure ID for fix press/berendsen does not exist");
pressure = modify->compute[icompute];
// Kspace setting
if (force->kspace) kspace_flag = 1;
else kspace_flag = 0;
// detect if any rigid fixes exist so rigid bodies move when box is remapped
// rfix[] = indices to each fix rigid
delete [] rfix;
nrigid = 0;
rfix = NULL;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->rigid_flag) nrigid++;
if (nrigid) {
rfix = new int[nrigid];
nrigid = 0;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->rigid_flag) rfix[nrigid++] = i;
}
}
/* ----------------------------------------------------------------------
compute T,P before integrator starts
------------------------------------------------------------------------- */
void FixPressBerendsen::setup(int vflag)
{
// trigger virial computation on next timestep
pressure->addstep(update->ntimestep+1);
}
/* ---------------------------------------------------------------------- */
void FixPressBerendsen::end_of_step()
{
// compute new T,P
if (pstyle == ISO) {
temperature->compute_scalar();
pressure->compute_scalar();
} else {
temperature->compute_vector();
pressure->compute_vector();
}
couple();
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
for (int i = 0; i < 3; i++) {
if (p_flag[i]) {
p_target[i] = p_start[i] + delta * (p_stop[i]-p_start[i]);
dilation[i] =
pow(1.0 - update->dt/p_period[i] *
(p_target[i]-p_current[i])/bulkmodulus,1.0/3.0);
}
}
// remap simulation box and atoms
// redo KSpace coeffs since volume has changed
remap();
if (kspace_flag) force->kspace->setup();
// trigger virial computation on next timestep
pressure->addstep(update->ntimestep+1);
}
/* ---------------------------------------------------------------------- */
void FixPressBerendsen::couple()
{
double *tensor = pressure->vector;
if (pstyle == ISO)
p_current[0] = p_current[1] = p_current[2] = pressure->scalar;
else if (pcouple == XYZ) {
double ave = 1.0/3.0 * (tensor[0] + tensor[1] + tensor[2]);
p_current[0] = p_current[1] = p_current[2] = ave;
} else if (pcouple == XY) {
double ave = 0.5 * (tensor[0] + tensor[1]);
p_current[0] = p_current[1] = ave;
p_current[2] = tensor[2];
} else if (pcouple == YZ) {
double ave = 0.5 * (tensor[1] + tensor[2]);
p_current[1] = p_current[2] = ave;
p_current[0] = tensor[0];
} else if (pcouple == XZ) {
double ave = 0.5 * (tensor[0] + tensor[2]);
p_current[0] = p_current[2] = ave;
p_current[1] = tensor[1];
} else {
p_current[0] = tensor[0];
p_current[1] = tensor[1];
p_current[2] = tensor[2];
}
}
/* ----------------------------------------------------------------------
change box size
remap all atoms or fix group atoms depending on allremap flag
if rigid bodies exist, scale rigid body centers-of-mass
------------------------------------------------------------------------- */
void FixPressBerendsen::remap()
{
int i;
double oldlo,oldhi,ctr;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
// convert pertinent atoms and rigid bodies to lamda coords
if (allremap) domain->x2lamda(nlocal);
else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
domain->x2lamda(x[i],x[i]);
}
if (nrigid)
for (i = 0; i < nrigid; i++)
modify->fix[rfix[i]]->deform(0);
// reset global and local box to new size/shape
for (i = 0; i < 3; i++) {
if (p_flag[i]) {
oldlo = domain->boxlo[i];
oldhi = domain->boxhi[i];
ctr = 0.5 * (oldlo + oldhi);
domain->boxlo[i] = (oldlo-ctr)*dilation[i] + ctr;
domain->boxhi[i] = (oldhi-ctr)*dilation[i] + ctr;
}
}
domain->set_global_box();
domain->set_local_box();
// convert pertinent atoms and rigid bodies back to box coords
if (allremap) domain->lamda2x(nlocal);
else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
domain->lamda2x(x[i],x[i]);
}
if (nrigid)
for (i = 0; i < nrigid; i++)
modify->fix[rfix[i]]->deform(1);
}
/* ---------------------------------------------------------------------- */
int FixPressBerendsen::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"temp") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (tflag) {
modify->delete_compute(id_temp);
tflag = 0;
}
delete [] id_temp;
int n = strlen(arg[1]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[1]);
int icompute = modify->find_compute(arg[1]);
if (icompute < 0) error->all(FLERR,"Could not find fix_modify temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,"Fix_modify temperature ID does not compute temperature");
if (temperature->igroup != 0 && comm->me == 0)
error->warning(FLERR,"Temperature for NPT is not for group all");
// reset id_temp of pressure to new temperature ID
icompute = modify->find_compute(id_press);
if (icompute < 0)
error->all(FLERR,"Pressure ID for fix press/berendsen does not exist");
modify->compute[icompute]->reset_extra_compute_fix(id_temp);
return 2;
} else if (strcmp(arg[0],"press") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (pflag) {
modify->delete_compute(id_press);
pflag = 0;
}
delete [] id_press;
int n = strlen(arg[1]) + 1;
id_press = new char[n];
strcpy(id_press,arg[1]);
int icompute = modify->find_compute(arg[1]);
if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID");
pressure = modify->compute[icompute];
if (pressure->pressflag == 0)
error->all(FLERR,"Fix_modify pressure ID does not compute pressure");
return 2;
}
return 0;
}
diff --git a/src/fix_print.cpp b/src/fix_print.cpp
index 4ed162886..b553a94e3 100644
--- a/src/fix_print.cpp
+++ b/src/fix_print.cpp
@@ -1,144 +1,145 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include "fix_print.h"
#include "update.h"
#include "input.h"
#include "modify.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixPrint::FixPrint(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ fp(NULL), string(NULL), copy(NULL), work(NULL)
{
if (narg < 5) error->all(FLERR,"Illegal fix print command");
nevery = force->inumeric(FLERR,arg[3]);
if (nevery <= 0) error->all(FLERR,"Illegal fix print command");
MPI_Comm_rank(world,&me);
int n = strlen(arg[4]) + 1;
string = new char[n];
strcpy(string,arg[4]);
copy = (char *) memory->smalloc(n*sizeof(char),"fix/print:copy");
work = (char *) memory->smalloc(n*sizeof(char),"fix/print:work");
maxcopy = maxwork = n;
// parse optional args
fp = NULL;
screenflag = 1;
char *title = NULL;
int iarg = 5;
while (iarg < narg) {
if (strcmp(arg[iarg],"file") == 0 || strcmp(arg[iarg],"append") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix print command");
if (me == 0) {
if (strcmp(arg[iarg],"file") == 0) fp = fopen(arg[iarg+1],"w");
else fp = fopen(arg[iarg+1],"a");
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open fix print file %s",arg[iarg+1]);
error->one(FLERR,str);
}
}
iarg += 2;
} else if (strcmp(arg[iarg],"screen") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix print command");
if (strcmp(arg[iarg+1],"yes") == 0) screenflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) screenflag = 0;
else error->all(FLERR,"Illegal fix print command");
iarg += 2;
} else if (strcmp(arg[iarg],"title") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix print command");
delete [] title;
int n = strlen(arg[iarg+1]) + 1;
title = new char[n];
strcpy(title,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix print command");
}
// print file comment line
if (fp && me == 0) {
if (title) fprintf(fp,"%s\n",title);
else fprintf(fp,"# Fix print output for fix %s\n",id);
}
delete [] title;
// add nfirst to all computes that store invocation times
// since don't know a priori which are invoked via variables by this fix
// once in end_of_step() can set timestep for ones actually invoked
const bigint nfirst = (update->ntimestep/nevery)*nevery + nevery;
modify->addstep_compute_all(nfirst);
}
/* ---------------------------------------------------------------------- */
FixPrint::~FixPrint()
{
delete [] string;
memory->sfree(copy);
memory->sfree(work);
if (fp && me == 0) fclose(fp);
}
/* ---------------------------------------------------------------------- */
int FixPrint::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixPrint::end_of_step()
{
// make a copy of string to work on
// substitute for $ variables (no printing)
// append a newline and print final copy
// variable evaluation may invoke computes so wrap with clear/add
modify->clearstep_compute();
strcpy(copy,string);
input->substitute(copy,work,maxcopy,maxwork,0);
modify->addstep_compute(update->ntimestep + nevery);
if (me == 0) {
if (screenflag && screen) fprintf(screen,"%s\n",copy);
if (screenflag && logfile) fprintf(logfile,"%s\n",copy);
if (fp) {
fprintf(fp,"%s\n",copy);
fflush(fp);
}
}
}
diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp
index 2730390ad..b83aadc95 100644
--- a/src/fix_property_atom.cpp
+++ b/src/fix_property_atom.cpp
@@ -1,648 +1,649 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include "fix_property_atom.h"
#include "atom.h"
#include "comm.h"
#include "memory.h"
#include "error.h"
#include "update.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{MOLECULE,CHARGE,RMASS,INTEGER,DOUBLE};
/* ---------------------------------------------------------------------- */
FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ nvalue(0), style(NULL), index(NULL), astyle(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal fix property/atom command");
restart_peratom = 1;
wd_section = 1;
int iarg = 3;
nvalue = narg-iarg;
style = new int[nvalue];
index = new int[nvalue];
molecule_flag = 0;
q_flag = 0;
rmass_flag = 0;
nvalue = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"mol") == 0) {
if (atom->molecule_flag)
error->all(FLERR,"Fix property/atom mol when atom_style "
"already has molecule attribute");
if (molecule_flag)
error->all(FLERR,"Fix property/atom cannot specify mol twice");
style[nvalue] = MOLECULE;
atom->molecule_flag = molecule_flag = 1;
nvalue++;
} else if (strcmp(arg[iarg],"q") == 0) {
if (atom->q_flag)
error->all(FLERR,"Fix property/atom q when atom_style "
"already has charge attribute");
if (q_flag)
error->all(FLERR,"Fix property/atom cannot specify q twice");
style[nvalue] = CHARGE;
atom->q_flag = q_flag = 1;
nvalue++;
} else if (strcmp(arg[iarg],"rmass") == 0) {
if (atom->rmass_flag)
error->all(FLERR,"Fix property/atom rmass when atom_style "
"already has rmass attribute");
if (rmass_flag)
error->all(FLERR,"Fix property/atom cannot specify rmass twice");
style[nvalue] = RMASS;
atom->rmass_flag = rmass_flag = 1;
nvalue++;
} else if (strstr(arg[iarg],"i_") == arg[iarg]) {
style[nvalue] = INTEGER;
int tmp;
index[nvalue] = atom->find_custom(&arg[iarg][2],tmp);
if (index[nvalue] >= 0)
error->all(FLERR,"Fix property/atom vector name already exists");
index[nvalue] = atom->add_custom(&arg[iarg][2],0);
nvalue++;
} else if (strstr(arg[iarg],"d_") == arg[iarg]) {
style[nvalue] = DOUBLE;
int tmp;
index[nvalue] = atom->find_custom(&arg[iarg][2],tmp);
if (index[nvalue] >= 0)
error->all(FLERR,"Fix property/atom vector name already exists");
index[nvalue] = atom->add_custom(&arg[iarg][2],1);
nvalue++;
} else break;
iarg++;
}
// optional args
border = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"ghost") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix property/atom command");
if (strcmp(arg[iarg+1],"no") == 0) border = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) border = 1;
else error->all(FLERR,"Illegal fix property/atom command");
iarg += 2;
} else error->all(FLERR,"Illegal fix property/atom command");
}
if (border) comm_border = nvalue;
// warn if mol or charge keyword used without ghost yes
if (border == 0) {
int flag = 0;
for (int i = 0; i < nvalue; i++)
if (style[i] == MOLECULE
|| style[i] == CHARGE
|| style[i] == RMASS) flag = 1;
if (flag && comm->me == 0)
error->warning(FLERR,"Fix property/atom mol or charge or rmass "
"w/out ghost communication");
}
// store current atom style
int n = strlen(atom->atom_style) + 1;
astyle = new char[n];
strcpy(astyle,atom->atom_style);
// perform initial allocation of atom-based array
// register with Atom class
nmax_old = 0;
grow_arrays(atom->nmax);
atom->add_callback(0);
atom->add_callback(1);
if (border) atom->add_callback(2);
}
/* ---------------------------------------------------------------------- */
FixPropertyAtom::~FixPropertyAtom()
{
// unregister callbacks to this fix from Atom class
atom->delete_callback(id,0);
atom->delete_callback(id,1);
if (border) atom->delete_callback(id,2);
// deallocate per-atom vectors in Atom class
// set ptrs to NULL, so they no longer exist for Atom class
for (int m = 0; m < nvalue; m++) {
if (style[m] == MOLECULE) {
atom->molecule_flag = 0;
memory->destroy(atom->molecule);
atom->molecule = NULL;
} else if (style[m] == CHARGE) {
atom->q_flag = 0;
memory->destroy(atom->q);
atom->q = NULL;
} else if (style[m] == RMASS) {
atom->rmass_flag = 0;
memory->destroy(atom->rmass);
atom->rmass = NULL;
} else if (style[m] == INTEGER) {
atom->remove_custom(0,index[m]);
} else if (style[m] == DOUBLE) {
atom->remove_custom(1,index[m]);
}
}
delete [] style;
delete [] index;
delete [] astyle;
}
/* ---------------------------------------------------------------------- */
int FixPropertyAtom::setmask()
{
int mask = 0;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixPropertyAtom::init()
{
// error if atom style has changed since fix was defined
// don't allow this b/c user could change to style that defines molecule,q
if (strcmp(astyle,atom->atom_style) != 0)
error->all(FLERR,"Atom style was redefined after using fix property/atom");
}
/* ----------------------------------------------------------------------
unpack N lines in buf from section of data file labeled by keyword
id_offset is applied to first atomID field if multiple data files are read
------------------------------------------------------------------------- */
void FixPropertyAtom::read_data_section(char *keyword, int n, char *buf,
tagint id_offset)
{
int j,m;
tagint itag;
char *next;
int mapflag = 0;
if (atom->map_style == 0) {
mapflag = 1;
atom->map_init();
atom->map_set();
}
next = strchr(buf,'\n');
*next = '\0';
int nwords = atom->count_words(buf);
*next = '\n';
if (nwords != nvalue+1) {
char str[128];
sprintf(str,"Incorrect %s format in data file",keyword);
error->all(FLERR,str);
}
char **values = new char*[nwords];
// loop over lines of atom info
// tokenize the line into values
// if I own atom tag, unpack its values
tagint map_tag_max = atom->map_tag_max;
for (int i = 0; i < n; i++) {
next = strchr(buf,'\n');
values[0] = strtok(buf," \t\n\r\f");
if (values[0] == NULL) {
char str[128];
sprintf(str,"Too few lines in %s section of data file",keyword);
error->one(FLERR,str);
}
int format_ok = 1;
for (j = 1; j < nwords; j++) {
values[j] = strtok(NULL," \t\n\r\f");
if (values[j] == NULL) format_ok = 0;
}
if (!format_ok) {
char str[128];
sprintf(str,"Incorrect %s format in data file",keyword);
error->all(FLERR,str);
}
itag = ATOTAGINT(values[0]) + id_offset;
if (itag <= 0 || itag > map_tag_max) {
char str[128];
sprintf(str,"Invalid atom ID in %s section of data file",keyword);
error->one(FLERR,str);
}
// assign words in line to per-atom vectors
if ((m = atom->map(itag)) >= 0) {
for (j = 0; j < nvalue; j++) {
if (style[j] == MOLECULE) atom->molecule[m] = ATOTAGINT(values[j+1]);
else if (style[j] == CHARGE) atom->q[m] = atof(values[j+1]);
else if (style[j] == RMASS) atom->rmass[m] = atof(values[j+1]);
else if (style[j] == INTEGER)
atom->ivector[index[j]][m] = atoi(values[j+1]);
else if (style[j] == DOUBLE)
atom->dvector[index[j]][m] = atof(values[j+1]);
}
}
buf = next + 1;
}
delete [] values;
if (mapflag) {
atom->map_delete();
atom->map_style = 0;
}
}
/* ----------------------------------------------------------------------
return # of lines in section of data file labeled by keyword
------------------------------------------------------------------------- */
bigint FixPropertyAtom::read_data_skip_lines(char *keyword)
{
return atom->natoms;
}
/* ----------------------------------------------------------------------
return size I own for Mth data section
# of data sections = 1 for this fix
nx = # of local atoms
ny = columns = tag + nvalues
------------------------------------------------------------------------- */
void FixPropertyAtom::write_data_section_size(int mth, int &nx, int &ny)
{
nx = atom->nlocal;
ny = nvalue + 1;
}
/* ----------------------------------------------------------------------
pack values for Mth data section into 2d buf
buf allocated by caller as Nlocal by Nvalues+1
------------------------------------------------------------------------- */
void FixPropertyAtom::write_data_section_pack(int mth, double **buf)
{
int i;
// 1st column = atom tag
// rest of columns = per-atom values
tagint *tag = atom->tag;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++) buf[i][0] = ubuf(tag[i]).d;
for (int m = 0; m < nvalue; m++) {
int mp1 = m+1;
if (style[m] == MOLECULE) {
tagint *molecule = atom->molecule;
for (i = 0; i < nlocal; i++) buf[i][mp1] = ubuf(molecule[i]).d;
} else if (style[m] == CHARGE) {
double *q = atom->q;
for (i = 0; i < nlocal; i++) buf[i][mp1] = q[i];
} else if (style[m] == RMASS) {
double *rmass = atom->rmass;
for (i = 0; i < nlocal; i++) buf[i][mp1] = rmass[i];
} else if (style[m] == INTEGER) {
int *ivec = atom->ivector[index[m]];
for (i = 0; i < nlocal; i++) buf[i][mp1] = ubuf(ivec[i]).d;
} else if (style[m] == DOUBLE) {
double *dvec = atom->dvector[index[m]];
for (i = 0; i < nlocal; i++) buf[i][mp1] = dvec[i];
}
}
}
/* ----------------------------------------------------------------------
write section keyword for Mth data section to file
use Molecules or Charges if that is only field, else use fix ID
only called by proc 0
------------------------------------------------------------------------- */
void FixPropertyAtom::write_data_section_keyword(int mth, FILE *fp)
{
if (nvalue == 1 && style[0] == MOLECULE) fprintf(fp,"\nMolecules\n\n");
else if (nvalue == 1 && style[0] == CHARGE) fprintf(fp,"\nCharges\n\n");
else fprintf(fp,"\n%s\n\n",id);
}
/* ----------------------------------------------------------------------
write N lines from buf to file
convert buf fields to int or double depending on styles
index can be used to prepend global numbering
only called by proc 0
------------------------------------------------------------------------- */
void FixPropertyAtom::write_data_section(int mth, FILE *fp,
int n, double **buf, int index)
{
int m;
for (int i = 0; i < n; i++) {
fprintf(fp,TAGINT_FORMAT,(tagint) ubuf(buf[i][0]).i);
for (m = 0; m < nvalue; m++) {
if (style[m] == MOLECULE)
fprintf(fp," " TAGINT_FORMAT,(tagint) ubuf(buf[i][m+1]).i);
else if (style[m] == INTEGER)
fprintf(fp," %d",(int) ubuf(buf[i][m+1]).i);
else fprintf(fp," %g",buf[i][m+1]);
}
fprintf(fp,"\n");
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixPropertyAtom::memory_usage()
{
double bytes = 0.0;
for (int m = 0; m < nvalue; m++) {
if (style[m] == MOLECULE) bytes = atom->nmax * sizeof(tagint);
else if (style[m] == CHARGE) bytes = atom->nmax * sizeof(double);
else if (style[m] == RMASS) bytes = atom->nmax * sizeof(double);
else if (style[m] == INTEGER) bytes = atom->nmax * sizeof(int);
else if (style[m] == DOUBLE) bytes = atom->nmax * sizeof(double);
}
return bytes;
}
/* ----------------------------------------------------------------------
allocate atom-based arrays
initialize new values to 0,
since AtomVec class won't do it as atoms are added,
e.g. in create_atom() or data_atom()
------------------------------------------------------------------------- */
void FixPropertyAtom::grow_arrays(int nmax)
{
for (int m = 0; m < nvalue; m++) {
if (style[m] == MOLECULE) {
memory->grow(atom->molecule,nmax,"atom:molecule");
size_t nbytes = (nmax-nmax_old) * sizeof(tagint);
memset(&atom->molecule[nmax_old],0,nbytes);
} else if (style[m] == CHARGE) {
memory->grow(atom->q,nmax,"atom:q");
size_t nbytes = (nmax-nmax_old) * sizeof(double);
memset(&atom->q[nmax_old],0,nbytes);
} else if (style[m] == RMASS) {
memory->grow(atom->rmass,nmax,"atom:rmass");
size_t nbytes = (nmax-nmax_old) * sizeof(double);
memset(&atom->rmass[nmax_old],0,nbytes);
} else if (style[m] == INTEGER) {
memory->grow(atom->ivector[index[m]],nmax,"atom:ivector");
size_t nbytes = (nmax-nmax_old) * sizeof(int);
memset(&atom->ivector[index[m]][nmax_old],0,nbytes);
} else if (style[m] == DOUBLE) {
memory->grow(atom->dvector[index[m]],nmax,"atom:dvector");
size_t nbytes = (nmax-nmax_old) * sizeof(double);
memset(&atom->dvector[index[m]][nmax_old],0,nbytes);
}
}
nmax_old = nmax;
}
/* ----------------------------------------------------------------------
copy values within local atom-based arrays
------------------------------------------------------------------------- */
void FixPropertyAtom::copy_arrays(int i, int j, int delflag)
{
for (int m = 0; m < nvalue; m++) {
if (style[m] == MOLECULE)
atom->molecule[j] = atom->molecule[i];
else if (style[m] == CHARGE)
atom->q[j] = atom->q[i];
else if (style[m] == RMASS)
atom->rmass[j] = atom->rmass[i];
else if (style[m] == INTEGER)
atom->ivector[index[m]][j] = atom->ivector[index[m]][i];
else if (style[m] == DOUBLE)
atom->dvector[index[m]][j] = atom->dvector[index[m]][i];
}
}
/* ----------------------------------------------------------------------
pack values for border communication at re-neighboring
------------------------------------------------------------------------- */
int FixPropertyAtom::pack_border(int n, int *list, double *buf)
{
int i,j,k;
int m = 0;
for (k = 0; k < nvalue; k++) {
if (style[k] == MOLECULE) {
tagint *molecule = atom->molecule;
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = ubuf(molecule[j]).d;
}
} else if (style[k] == CHARGE) {
double *q = atom->q;
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = q[j];
}
} else if (style[k] == RMASS) {
double *rmass = atom->rmass;
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = rmass[j];
}
} else if (style[k] == INTEGER) {
int *ivector = atom->ivector[index[k]];
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = ubuf(ivector[j]).d;
}
} else if (style[k] == DOUBLE) {
double *dvector = atom->dvector[index[k]];
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = dvector[j];
}
}
}
return m;
}
/* ----------------------------------------------------------------------
unpack values for border communication at re-neighboring
------------------------------------------------------------------------- */
int FixPropertyAtom::unpack_border(int n, int first, double *buf)
{
int i,k,last;
int m = 0;
for (k = 0; k < nvalue; k++) {
if (style[k] == MOLECULE) {
tagint *molecule = atom->molecule;
last = first + n;
for (i = first; i < last; i++)
molecule[i] = (tagint) ubuf(buf[m++]).i;
} else if (style[k] == CHARGE) {
double *q = atom->q;
last = first + n;
for (i = first; i < last; i++)
q[i] = buf[m++];
} else if (style[k] == RMASS) {
double *rmass = atom->rmass;
last = first + n;
for (i = first; i < last; i++)
rmass[i] = buf[m++];
} else if (style[k] == INTEGER) {
int *ivector = atom->ivector[index[k]];
last = first + n;
for (i = first; i < last; i++)
ivector[i] = (int) ubuf(buf[m++]).i;
} else if (style[k] == DOUBLE) {
double *dvector = atom->dvector[index[k]];
last = first + n;
for (i = first; i < last; i++)
dvector[i] = buf[m++];
}
}
return m;
}
/* ----------------------------------------------------------------------
pack values in local atom-based array for exchange with another proc
------------------------------------------------------------------------- */
int FixPropertyAtom::pack_exchange(int i, double *buf)
{
for (int m = 0; m < nvalue; m++) {
if (style[m] == MOLECULE) buf[m] = ubuf(atom->molecule[i]).d;
else if (style[m] == CHARGE) buf[m] = atom->q[i];
else if (style[m] == RMASS) buf[m] = atom->rmass[i];
else if (style[m] == INTEGER) buf[m] = ubuf(atom->ivector[index[m]][i]).d;
else if (style[m] == DOUBLE) buf[m] = atom->dvector[index[m]][i];
}
return nvalue;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based array from exchange with another proc
------------------------------------------------------------------------- */
int FixPropertyAtom::unpack_exchange(int nlocal, double *buf)
{
for (int m = 0; m < nvalue; m++) {
if (style[m] == MOLECULE)
atom->molecule[nlocal] = (tagint) ubuf(buf[m]).i;
else if (style[m] == CHARGE)
atom->q[nlocal] = buf[m];
else if (style[m] == RMASS)
atom->rmass[nlocal] = buf[m];
else if (style[m] == INTEGER)
atom->ivector[index[m]][nlocal] = (int) ubuf(buf[m]).i;
else if (style[m] == DOUBLE)
atom->dvector[index[m]][nlocal] = buf[m];
}
return nvalue;
}
/* ----------------------------------------------------------------------
pack values in local atom-based arrays for restart file
------------------------------------------------------------------------- */
int FixPropertyAtom::pack_restart(int i, double *buf)
{
buf[0] = nvalue+1;
int m = 1;
for (int j = 0; j < nvalue; j++) {
if (style[j] == MOLECULE) buf[m++] = ubuf(atom->molecule[i]).d;
else if (style[j] == CHARGE) buf[m++] = atom->q[i];
else if (style[j] == RMASS) buf[m++] = atom->rmass[i];
else if (style[j] == INTEGER) buf[m++] = ubuf(atom->ivector[index[j]][i]).d;
else if (style[j] == DOUBLE) buf[m++] = atom->dvector[index[j]][i];
}
return nvalue+1;
}
/* ----------------------------------------------------------------------
unpack values from atom->extra array to restart the fix
------------------------------------------------------------------------- */
void FixPropertyAtom::unpack_restart(int nlocal, int nth)
{
double **extra = atom->extra;
// skip to Nth set of extra values
int m = 0;
for (int i = 0; i < nth; i++) m += static_cast<int> (extra[nlocal][m]);
m++;
for (int i = 0; i < nvalue; i++) {
if (style[i] == MOLECULE)
atom->molecule[nlocal] = (tagint) ubuf(extra[nlocal][m++]).i;
else if (style[i] == CHARGE)
atom->q[nlocal] = extra[nlocal][m++];
else if (style[i] == RMASS)
atom->rmass[nlocal] = extra[nlocal][m++];
else if (style[i] == INTEGER)
atom->ivector[index[i]][nlocal] = (int) ubuf(extra[nlocal][m++]).i;
else if (style[i] == DOUBLE)
atom->dvector[index[i]][nlocal] = extra[nlocal][m++];
}
}
/* ----------------------------------------------------------------------
maxsize of any atom's restart data
------------------------------------------------------------------------- */
int FixPropertyAtom::maxsize_restart()
{
return nvalue+1;
}
/* ----------------------------------------------------------------------
size of atom nlocal's restart data
------------------------------------------------------------------------- */
int FixPropertyAtom::size_restart(int nlocal)
{
return nvalue+1;
}
diff --git a/src/fix_read_restart.cpp b/src/fix_read_restart.cpp
index 3d49db719..f174e8160 100644
--- a/src/fix_read_restart.cpp
+++ b/src/fix_read_restart.cpp
@@ -1,126 +1,125 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include "fix_read_restart.h"
#include "atom.h"
#include "memory.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixReadRestart::FixReadRestart(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ count(NULL), extra(NULL)
{
nextra = force->inumeric(FLERR,arg[3]);
int nfix = force->inumeric(FLERR,arg[4]);
// perform initial allocation of atom-based array
// register with Atom class
- count = NULL;
- extra = NULL;
grow_arrays(atom->nmax);
atom->add_callback(0);
// extra = copy of atom->extra
double **atom_extra = atom->extra;
int nlocal = atom->nlocal;
int i,j,m;
for (i = 0; i < nlocal; i++) {
m = 0;
for (j = 0; j < nfix; j++) m += static_cast<int> (atom_extra[i][m]);
count[i] = m;
for (j = 0; j < m; j++) extra[i][j] = atom_extra[i][j];
}
}
/* ---------------------------------------------------------------------- */
FixReadRestart::~FixReadRestart()
{
// unregister callback to this fix from Atom class
atom->delete_callback(id,0);
// delete locally stored arrays
memory->destroy(count);
memory->destroy(extra);
}
/* ---------------------------------------------------------------------- */
int FixReadRestart::setmask()
{
int mask = 0;
return mask;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixReadRestart::memory_usage()
{
double bytes = atom->nmax*nextra * sizeof(double);
bytes += atom->nmax * sizeof(int);
return bytes;
}
/* ----------------------------------------------------------------------
allocate atom-based array
------------------------------------------------------------------------- */
void FixReadRestart::grow_arrays(int nmax)
{
memory->grow(count,nmax,"read_restart:count");
memory->grow(extra,nmax,nextra,"read_restart:extra");
}
/* ----------------------------------------------------------------------
copy values within local atom-based array
------------------------------------------------------------------------- */
void FixReadRestart::copy_arrays(int i, int j, int delflag)
{
count[j] = count[i];
for (int m = 0; m < count[i]; m++) extra[j][m] = extra[i][m];
}
/* ----------------------------------------------------------------------
pack values in local atom-based array for exchange with another proc
------------------------------------------------------------------------- */
int FixReadRestart::pack_exchange(int i, double *buf)
{
buf[0] = count[i];
for (int m = 0; m < count[i]; m++) buf[m+1] = extra[i][m];
return count[i]+1;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based array from exchange with another proc
------------------------------------------------------------------------- */
int FixReadRestart::unpack_exchange(int nlocal, double *buf)
{
count[nlocal] = static_cast<int> (buf[0]);
for (int m = 0; m < count[nlocal]; m++) extra[nlocal][m] = buf[m+1];
return count[nlocal]+1;
}
diff --git a/src/fix_respa.cpp b/src/fix_respa.cpp
index 2902ae8a1..0b6febd7b 100644
--- a/src/fix_respa.cpp
+++ b/src/fix_respa.cpp
@@ -1,153 +1,154 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include "fix_respa.h"
#include "atom.h"
#include "force.h"
#include "memory.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixRespa::FixRespa(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ store_torque(0), f_level(NULL), t_level(NULL)
{
// nlevels = # of rRESPA levels
nlevels = force->inumeric(FLERR,arg[3]);
// optional arguments
store_torque = 0;
for (int iarg=4; iarg < narg; ++iarg) {
if (strcmp(arg[iarg],"torque") == 0)
store_torque = 1;
}
// perform initial allocation of atom-based arrays
// register with Atom class
f_level = NULL;
t_level = NULL;
grow_arrays(atom->nmax);
atom->add_callback(0);
}
/* ---------------------------------------------------------------------- */
FixRespa::~FixRespa()
{
// unregister callbacks to this fix from Atom class
atom->delete_callback(id,0);
// delete locally stored arrays
memory->destroy(f_level);
if (store_torque) memory->destroy(t_level);
}
/* ---------------------------------------------------------------------- */
int FixRespa::setmask()
{
return 0;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixRespa::memory_usage()
{
double bytes = atom->nmax*nlevels*3 * sizeof(double);
if (store_torque) bytes += atom->nmax*nlevels*3 * sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
allocate local atom-based arrays
------------------------------------------------------------------------- */
void FixRespa::grow_arrays(int nmax)
{
memory->grow(f_level,nmax,nlevels,3,"fix_respa:f_level");
if (store_torque) memory->grow(t_level,nmax,nlevels,3,"fix_respa:t_level");
}
/* ----------------------------------------------------------------------
copy values within local atom-based arrays
------------------------------------------------------------------------- */
void FixRespa::copy_arrays(int i, int j, int delflag)
{
for (int k = 0; k < nlevels; k++) {
f_level[j][k][0] = f_level[i][k][0];
f_level[j][k][1] = f_level[i][k][1];
f_level[j][k][2] = f_level[i][k][2];
}
if (store_torque) {
for (int k = 0; k < nlevels; k++) {
t_level[j][k][0] = t_level[i][k][0];
t_level[j][k][1] = t_level[i][k][1];
t_level[j][k][2] = t_level[i][k][2];
}
}
}
/* ----------------------------------------------------------------------
pack values in local atom-based arrays for exchange with another proc
------------------------------------------------------------------------- */
int FixRespa::pack_exchange(int i, double *buf)
{
int m = 0;
for (int k = 0; k < nlevels; k++) {
buf[m++] = f_level[i][k][0];
buf[m++] = f_level[i][k][1];
buf[m++] = f_level[i][k][2];
}
if (store_torque) {
for (int k = 0; k < nlevels; k++) {
buf[m++] = t_level[i][k][0];
buf[m++] = t_level[i][k][1];
buf[m++] = t_level[i][k][2];
}
}
return m;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based arrays from exchange with another proc
------------------------------------------------------------------------- */
int FixRespa::unpack_exchange(int nlocal, double *buf)
{
int m = 0;
for (int k = 0; k < nlevels; k++) {
f_level[nlocal][k][0] = buf[m++];
f_level[nlocal][k][1] = buf[m++];
f_level[nlocal][k][2] = buf[m++];
}
if (store_torque) {
for (int k = 0; k < nlevels; k++) {
t_level[nlocal][k][0] = buf[m++];
t_level[nlocal][k][1] = buf[m++];
t_level[nlocal][k][2] = buf[m++];
}
}
return m;
}
diff --git a/src/fix_restrain.cpp b/src/fix_restrain.cpp
index a92352e56..067f1014d 100644
--- a/src/fix_restrain.cpp
+++ b/src/fix_restrain.cpp
@@ -1,630 +1,627 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Craig Tenney (University of Notre Dame)
support for bond and angle restraints by Andres Jaramillo-Botero (Caltech)
------------------------------------------------------------------------- */
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "fix_restrain.h"
#include "atom.h"
#include "force.h"
#include "update.h"
#include "domain.h"
#include "comm.h"
#include "respa.h"
#include "input.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
using namespace MathConst;
enum{BOND,ANGLE,DIHEDRAL};
#define TOLERANCE 0.05
#define SMALL 0.001
#define DELTA 1
/* ---------------------------------------------------------------------- */
FixRestrain::FixRestrain(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ rstyle(NULL), ids(NULL), kstart(NULL), kstop(NULL), target(NULL), cos_target(NULL), sin_target(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal fix restrain command");
scalar_flag = 1;
global_freq = 1;
extscalar = 1;
respa_level_support = 1;
ilevel_respa = 0;
// parse args
nrestrain = maxrestrain = 0;
- rstyle = NULL;
- ids = NULL;
- kstart = kstop = NULL;
- target = cos_target = sin_target = NULL;
-
+
int iarg = 3;
while (iarg < narg) {
if (nrestrain == maxrestrain) {
maxrestrain += DELTA;
memory->grow(rstyle,maxrestrain,"restrain:rstyle");
memory->grow(ids,maxrestrain,4,"restrain:ids");
memory->grow(kstart,maxrestrain,"restrain:kstart");
memory->grow(kstop,maxrestrain,"restrain:kstop");
memory->grow(target,maxrestrain,"restrain:target");
memory->grow(cos_target,maxrestrain,"restrain:cos_target");
memory->grow(sin_target,maxrestrain,"restrain:sin_target");
}
if (strcmp(arg[iarg],"bond") == 0) {
if (iarg+6 > narg) error->all(FLERR,"Illegal fix restrain command");
rstyle[nrestrain] = BOND;
ids[nrestrain][0] = force->inumeric(FLERR,arg[iarg+1]);
ids[nrestrain][1] = force->inumeric(FLERR,arg[iarg+2]);
kstart[nrestrain] = force->numeric(FLERR,arg[iarg+3]);
kstop[nrestrain] = force->numeric(FLERR,arg[iarg+4]);
target[nrestrain] = force->numeric(FLERR,arg[iarg+5]);
iarg += 6;
} else if (strcmp(arg[iarg],"angle") == 0) {
if (iarg+7 > narg) error->all(FLERR,"Illegal fix restrain command");
rstyle[nrestrain] = ANGLE;
ids[nrestrain][0] = force->inumeric(FLERR,arg[iarg+1]);
ids[nrestrain][1] = force->inumeric(FLERR,arg[iarg+2]);
ids[nrestrain][2] = force->inumeric(FLERR,arg[iarg+3]);
kstart[nrestrain] = force->numeric(FLERR,arg[iarg+4]);
kstop[nrestrain] = force->numeric(FLERR,arg[iarg+5]);
target[nrestrain] = force->numeric(FLERR,arg[iarg+6]);
target[nrestrain] *= MY_PI / 180.0;
iarg += 7;
} else if (strcmp(arg[iarg],"dihedral") == 0) {
if (iarg+8 > narg) error->all(FLERR,"Illegal fix restrain command");
rstyle[nrestrain] = DIHEDRAL;
ids[nrestrain][0] = force->inumeric(FLERR,arg[iarg+1]);
ids[nrestrain][1] = force->inumeric(FLERR,arg[iarg+2]);
ids[nrestrain][2] = force->inumeric(FLERR,arg[iarg+3]);
ids[nrestrain][3] = force->inumeric(FLERR,arg[iarg+4]);
kstart[nrestrain] = force->numeric(FLERR,arg[iarg+5]);
kstop[nrestrain] = force->numeric(FLERR,arg[iarg+6]);
target[nrestrain] = force->numeric(FLERR,arg[iarg+7]);
target[nrestrain] *= MY_PI / 180.0;
cos_target[nrestrain] = cos(target[nrestrain]);
sin_target[nrestrain] = sin(target[nrestrain]);
iarg += 8;
} else error->all(FLERR,"Illegal fix restrain command");
nrestrain++;
}
// require atom map to lookup atom IDs
if (atom->map_style == 0)
error->all(FLERR,"Fix restrain requires an atom map, see atom_modify");
}
/* ---------------------------------------------------------------------- */
FixRestrain::~FixRestrain()
{
memory->destroy(rstyle);
memory->destroy(ids);
memory->destroy(kstart);
memory->destroy(kstop);
memory->destroy(target);
memory->destroy(cos_target);
memory->destroy(sin_target);
}
/* ---------------------------------------------------------------------- */
int FixRestrain::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixRestrain::init()
{
if (strstr(update->integrate_style,"respa")) {
ilevel_respa = ((Respa *) update->integrate)->nlevels-1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixRestrain::setup(int vflag)
{
if (strcmp(update->integrate_style,"verlet") == 0)
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixRestrain::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixRestrain::post_force(int vflag)
{
energy = 0.0;
for (int m = 0; m < nrestrain; m++)
if (rstyle[m] == BOND) restrain_bond(m);
else if (rstyle[m] == ANGLE) restrain_angle(m);
else if (rstyle[m] == DIHEDRAL) restrain_dihedral(m);
}
/* ---------------------------------------------------------------------- */
void FixRestrain::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == ilevel_respa) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixRestrain::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
apply harmonic bond restraints
---------------------------------------------------------------------- */
void FixRestrain::restrain_bond(int m)
{
int i1,i2;
double delx,dely,delz,fbond;
double rsq,r,dr,rk;
double **x = atom->x;
double **f = atom->f;
int nlocal = atom->nlocal;
int newton_bond = force->newton_bond;
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
double k = kstart[m] + delta * (kstop[m] - kstart[m]);
i1 = atom->map(ids[m][0]);
i2 = atom->map(ids[m][1]);
// newton_bond on: only processor owning i2 computes restraint
// newton_bond off: only processors owning either of i1,i2 computes restraint
if (newton_bond) {
if (i2 == -1 || i2 >= nlocal) return;
if (i1 == -1) {
char str[128];
sprintf(str,
"Restrain atoms %d %d missing on proc %d at step " BIGINT_FORMAT,
ids[m][0],ids[m][1],
comm->me,update->ntimestep);
error->one(FLERR,str);
}
} else {
if ((i1 == -1 || i1 >= nlocal) && (i2 == -1 || i2 >= nlocal)) return;
if (i1 == -1 || i2 == -1) {
char str[128];
sprintf(str,
"Restrain atoms %d %d missing on proc %d at step " BIGINT_FORMAT,
ids[m][0],ids[m][1],
comm->me,update->ntimestep);
error->one(FLERR,str);
}
}
delx = x[i1][0] - x[i2][0];
dely = x[i1][1] - x[i2][1];
delz = x[i1][2] - x[i2][2];
domain->minimum_image(delx,dely,delz);
rsq = delx*delx + dely*dely + delz*delz;
r = sqrt(rsq);
dr = r - target[m];
rk = k * dr;
// force & energy
if (r > 0.0) fbond = -2.0*rk/r;
else fbond = 0.0;
energy = rk*dr;
// apply force to each of 2 atoms
if (newton_bond || i1 < nlocal) {
f[i1][0] += delx*fbond;
f[i1][1] += dely*fbond;
f[i1][2] += delz*fbond;
}
if (newton_bond || i2 < nlocal) {
f[i2][0] -= delx*fbond;
f[i2][1] -= dely*fbond;
f[i2][2] -= delz*fbond;
}
}
/* ----------------------------------------------------------------------
apply harmonic angle restraints
---------------------------------------------------------------------- */
void FixRestrain::restrain_angle(int m)
{
int i1,i2,i3;
double delx1,dely1,delz1,delx2,dely2,delz2;
double f1[3],f3[3];
double dtheta,tk;
double rsq1,rsq2,r1,r2,c,s,a,a11,a12,a22;
double **x = atom->x;
double **f = atom->f;
int nlocal = atom->nlocal;
int newton_bond = force->newton_bond;
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
double k = kstart[m] + delta * (kstop[m] - kstart[m]);
i1 = atom->map(ids[m][0]);
i2 = atom->map(ids[m][1]);
i3 = atom->map(ids[m][2]);
// newton_bond on: only processor owning i2 computes restraint
// newton_bond off: only processors owning any of i1-i3 computes restraint
if (newton_bond) {
if (i2 == -1 || i2 >= nlocal) return;
if (i1 == -1 || i3 == -1) {
char str[128];
sprintf(str,
"Restrain atoms %d %d %d missing on proc %d at step "
BIGINT_FORMAT,
ids[m][0],ids[m][1],ids[m][2],
comm->me,update->ntimestep);
error->one(FLERR,str);
}
} else {
if ((i1 == -1 || i1 >= nlocal) && (i2 == -1 || i2 >= nlocal) &&
(i3 == -1 || i3 >= nlocal)) return;
if (i1 == -1 || i2 == -1 || i3 == -1) {
char str[128];
sprintf(str,
"Restrain atoms %d %d %d missing on proc %d at step "
BIGINT_FORMAT,
ids[m][0],ids[m][1],ids[m][2],
comm->me,update->ntimestep);
error->one(FLERR,str);
}
}
// 1st bond
delx1 = x[i1][0] - x[i2][0];
dely1 = x[i1][1] - x[i2][1];
delz1 = x[i1][2] - x[i2][2];
domain->minimum_image(delx1,dely1,delz1);
rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1;
r1 = sqrt(rsq1);
// 2nd bond
delx2 = x[i3][0] - x[i2][0];
dely2 = x[i3][1] - x[i2][1];
delz2 = x[i3][2] - x[i2][2];
domain->minimum_image(delx2,dely2,delz2);
rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2;
r2 = sqrt(rsq2);
// angle (cos and sin)
c = delx1*delx2 + dely1*dely2 + delz1*delz2;
c /= r1*r2;
if (c > 1.0) c = 1.0;
if (c < -1.0) c = -1.0;
s = sqrt(1.0 - c*c);
if (s < SMALL) s = SMALL;
s = 1.0/s;
// force & energy
dtheta = acos(c) - target[m];
tk = k * dtheta;
energy = tk*dtheta;
a = -2.0 * tk * s;
a11 = a*c / rsq1;
a12 = -a / (r1*r2);
a22 = a*c / rsq2;
f1[0] = a11*delx1 + a12*delx2;
f1[1] = a11*dely1 + a12*dely2;
f1[2] = a11*delz1 + a12*delz2;
f3[0] = a22*delx2 + a12*delx1;
f3[1] = a22*dely2 + a12*dely1;
f3[2] = a22*delz2 + a12*delz1;
// apply force to each of 3 atoms
if (newton_bond || i1 < nlocal) {
f[i1][0] += f1[0];
f[i1][1] += f1[1];
f[i1][2] += f1[2];
}
if (newton_bond || i2 < nlocal) {
f[i2][0] -= f1[0] + f3[0];
f[i2][1] -= f1[1] + f3[1];
f[i2][2] -= f1[2] + f3[2];
}
if (newton_bond || i3 < nlocal) {
f[i3][0] += f3[0];
f[i3][1] += f3[1];
f[i3][2] += f3[2];
}
}
/* ----------------------------------------------------------------------
apply dihedral restraints
adopted from dihedral_charmm
---------------------------------------------------------------------- */
void FixRestrain::restrain_dihedral(int m)
{
int i1,i2,i3,i4,i,mult;
double vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z,vb2xm,vb2ym,vb2zm;
double f1[3],f2[3],f3[3],f4[3];
double ax,ay,az,bx,by,bz,rasq,rbsq,rgsq,rg,rginv,ra2inv,rb2inv,rabinv;
double df,df1,ddf1,fg,hg,fga,hgb,gaa,gbb;
double dtfx,dtfy,dtfz,dtgx,dtgy,dtgz,dthx,dthy,dthz;
double c,s,p,sx2,sy2,sz2;
double **x = atom->x;
double **f = atom->f;
int nlocal = atom->nlocal;
int newton_bond = force->newton_bond;
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
double k = kstart[m] + delta * (kstop[m] - kstart[m]);
i1 = atom->map(ids[m][0]);
i2 = atom->map(ids[m][1]);
i3 = atom->map(ids[m][2]);
i4 = atom->map(ids[m][3]);
// newton_bond on: only processor owning i2 computes restraint
// newton_bond off: only processors owning any of i1-i4 computes restraint
if (newton_bond) {
if (i2 == -1 || i2 >= nlocal) return;
if (i1 == -1 || i3 == -1 || i4 == -1) {
char str[128];
sprintf(str,
"Restrain atoms %d %d %d %d missing on proc %d at step "
BIGINT_FORMAT,
ids[m][0],ids[m][1],ids[m][2],ids[m][3],
comm->me,update->ntimestep);
error->one(FLERR,str);
}
} else {
if ((i1 == -1 || i1 >= nlocal) && (i2 == -1 || i2 >= nlocal) &&
(i3 == -1 || i3 >= nlocal) && (i4 == -1 || i3 >= nlocal)) return;
if (i1 == -1 || i2 == -1 || i3 == -1 || i4 == -1) {
char str[128];
sprintf(str,
"Restrain atoms %d %d %d %d missing on proc %d at step "
BIGINT_FORMAT,
ids[m][0],ids[m][1],ids[m][2],ids[m][3],
comm->me,update->ntimestep);
error->one(FLERR,str);
}
}
// 1st bond
vb1x = x[i1][0] - x[i2][0];
vb1y = x[i1][1] - x[i2][1];
vb1z = x[i1][2] - x[i2][2];
domain->minimum_image(vb1x,vb1y,vb1z);
// 2nd bond
vb2x = x[i3][0] - x[i2][0];
vb2y = x[i3][1] - x[i2][1];
vb2z = x[i3][2] - x[i2][2];
domain->minimum_image(vb2x,vb2y,vb2z);
vb2xm = -vb2x;
vb2ym = -vb2y;
vb2zm = -vb2z;
domain->minimum_image(vb2xm,vb2ym,vb2zm);
// 3rd bond
vb3x = x[i4][0] - x[i3][0];
vb3y = x[i4][1] - x[i3][1];
vb3z = x[i4][2] - x[i3][2];
domain->minimum_image(vb3x,vb3y,vb3z);
ax = vb1y*vb2zm - vb1z*vb2ym;
ay = vb1z*vb2xm - vb1x*vb2zm;
az = vb1x*vb2ym - vb1y*vb2xm;
bx = vb3y*vb2zm - vb3z*vb2ym;
by = vb3z*vb2xm - vb3x*vb2zm;
bz = vb3x*vb2ym - vb3y*vb2xm;
rasq = ax*ax + ay*ay + az*az;
rbsq = bx*bx + by*by + bz*bz;
rgsq = vb2xm*vb2xm + vb2ym*vb2ym + vb2zm*vb2zm;
rg = sqrt(rgsq);
rginv = ra2inv = rb2inv = 0.0;
if (rg > 0) rginv = 1.0/rg;
if (rasq > 0) ra2inv = 1.0/rasq;
if (rbsq > 0) rb2inv = 1.0/rbsq;
rabinv = sqrt(ra2inv*rb2inv);
c = (ax*bx + ay*by + az*bz)*rabinv;
s = rg*rabinv*(ax*vb3x + ay*vb3y + az*vb3z);
// error check
if (c > 1.0 + TOLERANCE || c < (-1.0 - TOLERANCE)) {
int me;
MPI_Comm_rank(world,&me);
if (screen) {
char str[128];
sprintf(str,"Restrain problem: %d " BIGINT_FORMAT " "
TAGINT_FORMAT " " TAGINT_FORMAT " "
TAGINT_FORMAT " " TAGINT_FORMAT,
me,update->ntimestep,
atom->tag[i1],atom->tag[i2],atom->tag[i3],atom->tag[i4]);
error->warning(FLERR,str);
fprintf(screen," 1st atom: %d %g %g %g\n",
me,x[i1][0],x[i1][1],x[i1][2]);
fprintf(screen," 2nd atom: %d %g %g %g\n",
me,x[i2][0],x[i2][1],x[i2][2]);
fprintf(screen," 3rd atom: %d %g %g %g\n",
me,x[i3][0],x[i3][1],x[i3][2]);
fprintf(screen," 4th atom: %d %g %g %g\n",
me,x[i4][0],x[i4][1],x[i4][2]);
}
}
if (c > 1.0) c = 1.0;
if (c < -1.0) c = -1.0;
mult = 1; // multiplicity
p = 1.0;
df1 = 0.0;
for (i = 0; i < mult; i++) {
ddf1 = p*c - df1*s;
df1 = p*s + df1*c;
p = ddf1;
}
p = p*cos_target[m] + df1*sin_target[m];
df1 = df1*cos_target[m] - ddf1*sin_target[m];
df1 *= -mult;
p += 1.0;
energy = k * p;
fg = vb1x*vb2xm + vb1y*vb2ym + vb1z*vb2zm;
hg = vb3x*vb2xm + vb3y*vb2ym + vb3z*vb2zm;
fga = fg*ra2inv*rginv;
hgb = hg*rb2inv*rginv;
gaa = -ra2inv*rg;
gbb = rb2inv*rg;
dtfx = gaa*ax;
dtfy = gaa*ay;
dtfz = gaa*az;
dtgx = fga*ax - hgb*bx;
dtgy = fga*ay - hgb*by;
dtgz = fga*az - hgb*bz;
dthx = gbb*bx;
dthy = gbb*by;
dthz = gbb*bz;
df = -k * df1;
sx2 = df*dtgx;
sy2 = df*dtgy;
sz2 = df*dtgz;
f1[0] = df*dtfx;
f1[1] = df*dtfy;
f1[2] = df*dtfz;
f2[0] = sx2 - f1[0];
f2[1] = sy2 - f1[1];
f2[2] = sz2 - f1[2];
f4[0] = df*dthx;
f4[1] = df*dthy;
f4[2] = df*dthz;
f3[0] = -sx2 - f4[0];
f3[1] = -sy2 - f4[1];
f3[2] = -sz2 - f4[2];
// apply force to each of 4 atoms
if (newton_bond || i1 < nlocal) {
f[i1][0] += f1[0];
f[i1][1] += f1[1];
f[i1][2] += f1[2];
}
if (newton_bond || i2 < nlocal) {
f[i2][0] += f2[0];
f[i2][1] += f2[1];
f[i2][2] += f2[2];
}
if (newton_bond || i3 < nlocal) {
f[i3][0] += f3[0];
f[i3][1] += f3[1];
f[i3][2] += f3[2];
}
if (newton_bond || i4 < nlocal) {
f[i4][0] += f4[0];
f[i4][1] += f4[1];
f[i4][2] += f4[2];
}
}
/* ----------------------------------------------------------------------
potential energy of added force
------------------------------------------------------------------------- */
double FixRestrain::compute_scalar()
{
MPI_Allreduce(&energy,&energy_all,1,MPI_DOUBLE,MPI_SUM,world);
return energy_all;
}
diff --git a/src/fix_setforce.cpp b/src/fix_setforce.cpp
index 08f177ae8..99176bb37 100644
--- a/src/fix_setforce.cpp
+++ b/src/fix_setforce.cpp
@@ -1,353 +1,354 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include "fix_setforce.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "region.h"
#include "respa.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NONE,CONSTANT,EQUAL,ATOM};
/* ---------------------------------------------------------------------- */
FixSetForce::FixSetForce(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ xstr(NULL), ystr(NULL), zstr(NULL), idregion(NULL), sforce(NULL)
{
if (narg < 6) error->all(FLERR,"Illegal fix setforce command");
dynamic_group_allow = 1;
vector_flag = 1;
size_vector = 3;
global_freq = 1;
extvector = 1;
respa_level_support = 1;
ilevel_respa = nlevels_respa = 0;
xstr = ystr = zstr = NULL;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[3][2]);
} else if (strcmp(arg[3],"NULL") == 0) {
xstyle = NONE;
} else {
xvalue = force->numeric(FLERR,arg[3]);
xstyle = CONSTANT;
}
if (strstr(arg[4],"v_") == arg[4]) {
int n = strlen(&arg[4][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[4][2]);
} else if (strcmp(arg[4],"NULL") == 0) {
ystyle = NONE;
} else {
yvalue = force->numeric(FLERR,arg[4]);
ystyle = CONSTANT;
}
if (strstr(arg[5],"v_") == arg[5]) {
int n = strlen(&arg[5][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[5][2]);
} else if (strcmp(arg[5],"NULL") == 0) {
zstyle = NONE;
} else {
zvalue = force->numeric(FLERR,arg[5]);
zstyle = CONSTANT;
}
// optional args
iregion = -1;
idregion = NULL;
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix setforce command");
iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix setforce does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix setforce command");
}
force_flag = 0;
foriginal[0] = foriginal[1] = foriginal[2] = 0.0;
maxatom = 1;
memory->create(sforce,maxatom,3,"setforce:sforce");
}
/* ---------------------------------------------------------------------- */
FixSetForce::~FixSetForce()
{
if (copymode) return;
delete [] xstr;
delete [] ystr;
delete [] zstr;
delete [] idregion;
memory->destroy(sforce);
}
/* ---------------------------------------------------------------------- */
int FixSetForce::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixSetForce::init()
{
// check variables
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0)
error->all(FLERR,"Variable name for fix setforce does not exist");
if (input->variable->equalstyle(xvar)) xstyle = EQUAL;
else if (input->variable->atomstyle(xvar)) xstyle = ATOM;
else error->all(FLERR,"Variable for fix setforce is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0)
error->all(FLERR,"Variable name for fix setforce does not exist");
if (input->variable->equalstyle(yvar)) ystyle = EQUAL;
else if (input->variable->atomstyle(yvar)) ystyle = ATOM;
else error->all(FLERR,"Variable for fix setforce is invalid style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0)
error->all(FLERR,"Variable name for fix setforce does not exist");
if (input->variable->equalstyle(zvar)) zstyle = EQUAL;
else if (input->variable->atomstyle(zvar)) zstyle = ATOM;
else error->all(FLERR,"Variable for fix setforce is invalid style");
}
// set index and check validity of region
if (iregion >= 0) {
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix setforce does not exist");
}
if (xstyle == ATOM || ystyle == ATOM || zstyle == ATOM)
varflag = ATOM;
else if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL)
varflag = EQUAL;
else varflag = CONSTANT;
if (strstr(update->integrate_style,"respa")) {
nlevels_respa = ((Respa *) update->integrate)->nlevels;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,nlevels_respa-1);
else ilevel_respa = nlevels_respa-1;
}
// cannot use non-zero forces for a minimization since no energy is integrated
// use fix addforce instead
int flag = 0;
if (update->whichflag == 2) {
if (xstyle == EQUAL || xstyle == ATOM) flag = 1;
if (ystyle == EQUAL || ystyle == ATOM) flag = 1;
if (zstyle == EQUAL || zstyle == ATOM) flag = 1;
if (xstyle == CONSTANT && xvalue != 0.0) flag = 1;
if (ystyle == CONSTANT && yvalue != 0.0) flag = 1;
if (zstyle == CONSTANT && zvalue != 0.0) flag = 1;
}
if (flag)
error->all(FLERR,"Cannot use non-zero forces in an energy minimization");
}
/* ---------------------------------------------------------------------- */
void FixSetForce::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else
for (int ilevel = 0; ilevel < nlevels_respa; ilevel++) {
((Respa *) update->integrate)->copy_flevel_f(ilevel);
post_force_respa(vflag,ilevel,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel);
}
}
/* ---------------------------------------------------------------------- */
void FixSetForce::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixSetForce::post_force(int vflag)
{
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
// update region if necessary
Region *region = NULL;
if (iregion >= 0) {
region = domain->regions[iregion];
region->prematch();
}
// reallocate sforce array if necessary
if (varflag == ATOM && atom->nmax > maxatom) {
maxatom = atom->nmax;
memory->destroy(sforce);
memory->create(sforce,maxatom,3,"setforce:sforce");
}
foriginal[0] = foriginal[1] = foriginal[2] = 0.0;
force_flag = 0;
if (varflag == CONSTANT) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
foriginal[0] += f[i][0];
foriginal[1] += f[i][1];
foriginal[2] += f[i][2];
if (xstyle) f[i][0] = xvalue;
if (ystyle) f[i][1] = yvalue;
if (zstyle) f[i][2] = zvalue;
}
// variable force, wrap with clear/add
} else {
modify->clearstep_compute();
if (xstyle == EQUAL) xvalue = input->variable->compute_equal(xvar);
else if (xstyle == ATOM)
input->variable->compute_atom(xvar,igroup,&sforce[0][0],3,0);
if (ystyle == EQUAL) yvalue = input->variable->compute_equal(yvar);
else if (ystyle == ATOM)
input->variable->compute_atom(yvar,igroup,&sforce[0][1],3,0);
if (zstyle == EQUAL) zvalue = input->variable->compute_equal(zvar);
else if (zstyle == ATOM)
input->variable->compute_atom(zvar,igroup,&sforce[0][2],3,0);
modify->addstep_compute(update->ntimestep + 1);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
foriginal[0] += f[i][0];
foriginal[1] += f[i][1];
foriginal[2] += f[i][2];
if (xstyle == ATOM) f[i][0] = sforce[i][0];
else if (xstyle) f[i][0] = xvalue;
if (ystyle == ATOM) f[i][1] = sforce[i][1];
else if (ystyle) f[i][1] = yvalue;
if (zstyle == ATOM) f[i][2] = sforce[i][2];
else if (zstyle) f[i][2] = zvalue;
}
}
}
/* ---------------------------------------------------------------------- */
void FixSetForce::post_force_respa(int vflag, int ilevel, int iloop)
{
// set force to desired value on requested level, 0.0 on other levels
if (ilevel == ilevel_respa) post_force(vflag);
else {
Region *region = NULL;
if (iregion >= 0) {
region = domain->regions[iregion];
region->prematch();
}
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
if (xstyle) f[i][0] = 0.0;
if (ystyle) f[i][1] = 0.0;
if (zstyle) f[i][2] = 0.0;
}
}
}
/* ---------------------------------------------------------------------- */
void FixSetForce::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
return components of total force on fix group before force was changed
------------------------------------------------------------------------- */
double FixSetForce::compute_vector(int n)
{
// only sum across procs one time
if (force_flag == 0) {
MPI_Allreduce(foriginal,foriginal_all,3,MPI_DOUBLE,MPI_SUM,world);
force_flag = 1;
}
return foriginal_all[n];
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixSetForce::memory_usage()
{
double bytes = 0.0;
if (varflag == ATOM) bytes = maxatom*3 * sizeof(double);
return bytes;
}
diff --git a/src/fix_shear_history.cpp b/src/fix_shear_history.cpp
index 7538d57f1..2577c16be 100644
--- a/src/fix_shear_history.cpp
+++ b/src/fix_shear_history.cpp
@@ -1,758 +1,754 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include <stdio.h>
#include "fix_shear_history.h"
#include "atom.h"
#include "comm.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "force.h"
#include "pair.h"
#include "update.h"
#include "modify.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NPARTNER,PERPARTNER};
/* ---------------------------------------------------------------------- */
FixShearHistory::FixShearHistory(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ npartner(NULL), partner(NULL), shearpartner(NULL), ipage(NULL), dpage(NULL)
{
if (narg != 4) error->all(FLERR,"Illegal fix SHEAR_HISTORY commmand");
restart_peratom = 1;
create_attribute = 1;
newton_pair = force->newton_pair;
dnum = force->inumeric(FLERR,arg[3]);
dnumbytes = dnum * sizeof(double);
onesided = 0;
if (strcmp(id,"LINE_SHEAR_HISTORY") == 0) onesided = 1;
if (strcmp(id,"TRI_SHEAR_HISTORY") == 0) onesided = 1;
if (newton_pair) comm_reverse = 1; // just for single npartner value
// variable-size history communicated via
// reverse_comm_fix_variable()
// perform initial allocation of atom-based arrays
// register with atom class
- npartner = NULL;
- partner = NULL;
- shearpartner = NULL;
grow_arrays(atom->nmax);
atom->add_callback(0);
atom->add_callback(1);
- ipage = NULL;
- dpage = NULL;
pgsize = oneatom = 0;
// initialize npartner to 0 so neighbor list creation is OK the 1st time
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) npartner[i] = 0;
maxtouch = 0;
nlocal_neigh = nall_neigh = 0;
}
/* ---------------------------------------------------------------------- */
FixShearHistory::~FixShearHistory()
{
// unregister this fix so atom class doesn't invoke it any more
atom->delete_callback(id,0);
atom->delete_callback(id,1);
// delete locally stored arrays
memory->destroy(npartner);
memory->sfree(partner);
memory->sfree(shearpartner);
delete [] ipage;
delete [] dpage;
}
/* ---------------------------------------------------------------------- */
int FixShearHistory::setmask()
{
int mask = 0;
mask |= PRE_EXCHANGE;
mask |= MIN_PRE_EXCHANGE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixShearHistory::init()
{
if (atom->tag_enable == 0)
error->all(FLERR,"Granular shear history requires atoms have IDs");
allocate_pages();
}
/* ----------------------------------------------------------------------
create pages if first time or if neighbor pgsize/oneatom has changed
note that latter could cause shear history info to be discarded
------------------------------------------------------------------------- */
void FixShearHistory::allocate_pages()
{
int create = 0;
if (ipage == NULL) create = 1;
if (pgsize != neighbor->pgsize) create = 1;
if (oneatom != neighbor->oneatom) create = 1;
if (create) {
delete [] ipage;
delete [] dpage;
pgsize = neighbor->pgsize;
oneatom = neighbor->oneatom;
int nmypage = comm->nthreads;
ipage = new MyPage<tagint>[nmypage];
dpage = new MyPage<double>[nmypage];
for (int i = 0; i < nmypage; i++) {
ipage[i].init(oneatom,pgsize);
dpage[i].init(dnum*oneatom,dnum*pgsize);
}
}
}
/* ----------------------------------------------------------------------
copy shear partner info from neighbor lists to atom arrays
should be called whenever neighbor list stores current history info
and need to store the info with owned atoms
e.g. so atoms can migrate to new procs or between runs
when atoms may be added or deleted (neighbor list becomes out-of-date)
the next granular neigh list build will put this info back into neigh list
called during run before atom exchanges, including for restart files
called at end of run via post_run()
do not call during setup of run (setup_pre_exchange)
b/c there is no guarantee of a current neigh list (even on continued run)
if run command does a 2nd run with pre = no, then no neigh list
will be built, but old neigh list will still have the info
onesided and newton on and newton off versions
------------------------------------------------------------------------- */
void FixShearHistory::pre_exchange()
{
if (onesided) pre_exchange_onesided();
else if (newton_pair) pre_exchange_newton();
else pre_exchange_no_newton();
}
/* ----------------------------------------------------------------------
onesided version for sphere contact with line/tri particles
neighbor list has I = sphere, J = line/tri
only store history info with spheres
------------------------------------------------------------------------- */
void FixShearHistory::pre_exchange_onesided()
{
int i,j,ii,jj,m,n,inum,jnum;
int *ilist,*jlist,*numneigh,**firstneigh;
int *touch,**firsttouch;
double *shear,*allshear,**firstshear;
// NOTE: all operations until very end are with nlocal_neigh <= current nlocal
// b/c previous neigh list was built with nlocal_neigh
// nlocal can be larger if other fixes added atoms at this pre_exchange()
// zero npartner for owned atoms
// clear 2 page data structures
for (i = 0; i < nlocal_neigh; i++) npartner[i] = 0;
ipage->reset();
dpage->reset();
// 1st loop over neighbor list, I = sphere, J = tri
// only calculate npartner for owned spheres
tagint *tag = atom->tag;
NeighList *list = pair->list;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
firsttouch = list->listgranhistory->firstneigh;
firstshear = list->listgranhistory->firstdouble;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
jlist = firstneigh[i];
jnum = numneigh[i];
touch = firsttouch[i];
for (jj = 0; jj < jnum; jj++)
if (touch[jj]) npartner[i]++;
}
// get page chunks to store atom IDs and shear history for owned atoms
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
n = npartner[i];
partner[i] = ipage->get(n);
shearpartner[i] = dpage->get(dnum*n);
if (partner[i] == NULL || shearpartner[i] == NULL)
error->one(FLERR,"Shear history overflow, boost neigh_modify one");
}
// 2nd loop over neighbor list, I = sphere, J = tri
// store atom IDs and shear history for owned spheres
// re-zero npartner to use as counter
for (i = 0; i < nlocal_neigh; i++) npartner[i] = 0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
jlist = firstneigh[i];
allshear = firstshear[i];
jnum = numneigh[i];
touch = firsttouch[i];
for (jj = 0; jj < jnum; jj++) {
if (touch[jj]) {
shear = &allshear[dnum*jj];
j = jlist[jj];
j &= NEIGHMASK;
m = npartner[i]++;
partner[i][m] = tag[j];
memcpy(&shearpartner[i][dnum*m],shear,dnumbytes);
}
}
}
// set maxtouch = max # of partners of any owned atom
// bump up comm->maxexchange_fix if necessary
maxtouch = 0;
for (i = 0; i < nlocal_neigh; i++) maxtouch = MAX(maxtouch,npartner[i]);
comm->maxexchange_fix = MAX(comm->maxexchange_fix,(dnum+1)*maxtouch+1);
// zero npartner values from previous nlocal_neigh to current nlocal
int nlocal = atom->nlocal;
for (i = nlocal_neigh; i < nlocal; i++) npartner[i] = 0;
}
/* ----------------------------------------------------------------------
newton on version, for sphere/sphere contacts
performs reverse comm to acquire shear partner info from ghost atoms
------------------------------------------------------------------------- */
void FixShearHistory::pre_exchange_newton()
{
int i,j,ii,jj,m,n,inum,jnum;
int *ilist,*jlist,*numneigh,**firstneigh;
int *touch,**firsttouch;
double *shear,*shearj,*allshear,**firstshear;
// NOTE: all operations until very end are with
// nlocal_neigh <= current nlocal and nall_neigh
// b/c previous neigh list was built with nlocal_neigh,nghost_neigh
// nlocal can be larger if other fixes added atoms at this pre_exchange()
// zero npartner for owned+ghost atoms
// clear 2 page data structures
for (i = 0; i < nall_neigh; i++) npartner[i] = 0;
ipage->reset();
dpage->reset();
// 1st loop over neighbor list
// calculate npartner for owned+ghost atoms
tagint *tag = atom->tag;
NeighList *list = pair->list;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
firsttouch = list->listgranhistory->firstneigh;
firstshear = list->listgranhistory->firstdouble;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
jlist = firstneigh[i];
jnum = numneigh[i];
touch = firsttouch[i];
for (jj = 0; jj < jnum; jj++) {
if (touch[jj]) {
npartner[i]++;
j = jlist[jj];
j &= NEIGHMASK;
npartner[j]++;
}
}
}
// perform reverse comm to augment owned npartner counts with ghost counts
commflag = NPARTNER;
comm->reverse_comm_fix(this,0);
// get page chunks to store atom IDs and shear history for owned+ghost atoms
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
n = npartner[i];
partner[i] = ipage->get(n);
shearpartner[i] = dpage->get(dnum*n);
if (partner[i] == NULL || shearpartner[i] == NULL) {
error->one(FLERR,"Shear history overflow, boost neigh_modify one");
}
}
for (i = nlocal_neigh; i < nall_neigh; i++) {
n = npartner[i];
partner[i] = ipage->get(n);
shearpartner[i] = dpage->get(dnum*n);
if (partner[i] == NULL || shearpartner[i] == NULL) {
error->one(FLERR,"Shear history overflow, boost neigh_modify one");
}
}
// 2nd loop over neighbor list
// store atom IDs and shear history for owned+ghost atoms
// re-zero npartner to use as counter
for (i = 0; i < nall_neigh; i++) npartner[i] = 0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
jlist = firstneigh[i];
allshear = firstshear[i];
jnum = numneigh[i];
touch = firsttouch[i];
for (jj = 0; jj < jnum; jj++) {
if (touch[jj]) {
shear = &allshear[dnum*jj];
j = jlist[jj];
j &= NEIGHMASK;
m = npartner[i]++;
partner[i][m] = tag[j];
memcpy(&shearpartner[i][dnum*m],shear,dnumbytes);
m = npartner[j]++;
partner[j][m] = tag[i];
shearj = &shearpartner[j][dnum*m];
for (n = 0; n < dnum; n++) shearj[n] = -shear[n];
}
}
}
// perform reverse comm to augment
// owned atom partner/shearpartner with ghost info
// use variable variant b/c size of packed data can be arbitrarily large
// if many touching neighbors for large particle
commflag = PERPARTNER;
comm->reverse_comm_fix_variable(this);
// set maxtouch = max # of partners of any owned atom
// bump up comm->maxexchange_fix if necessary
maxtouch = 0;
for (i = 0; i < nlocal_neigh; i++) maxtouch = MAX(maxtouch,npartner[i]);
comm->maxexchange_fix = MAX(comm->maxexchange_fix,4*maxtouch+1);
// zero npartner values from previous nlocal_neigh to current nlocal
int nlocal = atom->nlocal;
for (i = nlocal_neigh; i < nlocal; i++) npartner[i] = 0;
}
/* ----------------------------------------------------------------------
newton off version, for sphere/sphere contacts
newton OFF works with smaller vectors that don't include ghost info
------------------------------------------------------------------------- */
void FixShearHistory::pre_exchange_no_newton()
{
int i,j,ii,jj,m,n,inum,jnum;
int *ilist,*jlist,*numneigh,**firstneigh;
int *touch,**firsttouch;
double *shear,*shearj,*allshear,**firstshear;
// NOTE: all operations until very end are with nlocal_neigh <= current nlocal
// b/c previous neigh list was built with nlocal_neigh
// nlocal can be larger if other fixes added atoms at this pre_exchange()
// zero npartner for owned atoms
// clear 2 page data structures
for (i = 0; i < nlocal_neigh; i++) npartner[i] = 0;
ipage->reset();
dpage->reset();
// 1st loop over neighbor list
// calculate npartner for owned atoms
tagint *tag = atom->tag;
NeighList *list = pair->list;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
firsttouch = list->listgranhistory->firstneigh;
firstshear = list->listgranhistory->firstdouble;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
jlist = firstneigh[i];
jnum = numneigh[i];
touch = firsttouch[i];
for (jj = 0; jj < jnum; jj++) {
if (touch[jj]) {
npartner[i]++;
j = jlist[jj];
j &= NEIGHMASK;
if (j < nlocal_neigh) npartner[j]++;
}
}
}
// get page chunks to store atom IDs and shear history for owned atoms
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
n = npartner[i];
partner[i] = ipage->get(n);
shearpartner[i] = dpage->get(dnum*n);
if (partner[i] == NULL || shearpartner[i] == NULL)
error->one(FLERR,"Shear history overflow, boost neigh_modify one");
}
// 2nd loop over neighbor list
// store atom IDs and shear history for owned atoms
// re-zero npartner to use as counter
for (i = 0; i < nlocal_neigh; i++) npartner[i] = 0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
jlist = firstneigh[i];
allshear = firstshear[i];
jnum = numneigh[i];
touch = firsttouch[i];
for (jj = 0; jj < jnum; jj++) {
if (touch[jj]) {
shear = &allshear[dnum*jj];
j = jlist[jj];
j &= NEIGHMASK;
m = npartner[i]++;
partner[i][m] = tag[j];
memcpy(&shearpartner[i][dnum*m],shear,dnumbytes);
if (j < nlocal_neigh) {
m = npartner[j]++;
partner[j][m] = tag[i];
shearj = &shearpartner[j][dnum*m];
for (n = 0; n < dnum; n++) shearj[n] = -shear[n];
}
}
}
}
// set maxtouch = max # of partners of any owned atom
// bump up comm->maxexchange_fix if necessary
maxtouch = 0;
for (i = 0; i < nlocal_neigh; i++) maxtouch = MAX(maxtouch,npartner[i]);
comm->maxexchange_fix = MAX(comm->maxexchange_fix,(dnum+1)*maxtouch+1);
// zero npartner values from previous nlocal_neigh to current nlocal
int nlocal = atom->nlocal;
for (i = nlocal_neigh; i < nlocal; i++) npartner[i] = 0;
}
/* ---------------------------------------------------------------------- */
void FixShearHistory::min_pre_exchange()
{
pre_exchange();
}
/* ---------------------------------------------------------------------- */
void FixShearHistory::post_run()
{
pre_exchange();
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixShearHistory::memory_usage()
{
int nmax = atom->nmax;
double bytes = nmax * sizeof(int);
bytes += nmax * sizeof(int *);
bytes += nmax * sizeof(double *);
int nmypage = comm->nthreads;
for (int i = 0; i < nmypage; i++) {
bytes += ipage[i].size();
bytes += dpage[i].size();
}
return bytes;
}
/* ----------------------------------------------------------------------
allocate local atom-based arrays
------------------------------------------------------------------------- */
void FixShearHistory::grow_arrays(int nmax)
{
memory->grow(npartner,nmax,"shear_history:npartner");
partner = (tagint **) memory->srealloc(partner,nmax*sizeof(tagint *),
"shear_history:partner");
shearpartner = (double **) memory->srealloc(shearpartner,
nmax*sizeof(double *),
"shear_history:shearpartner");
}
/* ----------------------------------------------------------------------
copy values within local atom-based arrays
------------------------------------------------------------------------- */
void FixShearHistory::copy_arrays(int i, int j, int delflag)
{
// just copy pointers for partner and shearpartner
// b/c can't overwrite chunk allocation inside ipage,dpage
// incoming atoms in unpack_exchange just grab new chunks
// so are orphaning chunks for migrating atoms
// OK, b/c will reset ipage,dpage on next reneighboring
npartner[j] = npartner[i];
partner[j] = partner[i];
shearpartner[j] = shearpartner[i];
}
/* ----------------------------------------------------------------------
initialize one atom's array values, called when atom is created
------------------------------------------------------------------------- */
void FixShearHistory::set_arrays(int i)
{
npartner[i] = 0;
}
/* ----------------------------------------------------------------------
only called by Comm::reverse_comm_fix_variable for PERPARTNER mode
------------------------------------------------------------------------- */
int FixShearHistory::pack_reverse_comm_size(int n, int first)
{
int i,last;
int m = 0;
last = first + n;
for (i = first; i < last; i++)
m += 1 + 4*npartner[i];
return m;
}
/* ----------------------------------------------------------------------
two modes: NPARTNER and PERPARTNER
------------------------------------------------------------------------- */
int FixShearHistory::pack_reverse_comm(int n, int first, double *buf)
{
int i,k,last;
int m = 0;
last = first + n;
if (commflag == NPARTNER) {
for (i = first; i < last; i++) {
buf[m++] = npartner[i];
}
} else if (commflag == PERPARTNER) {
for (i = first; i < last; i++) {
buf[m++] = npartner[i];
for (k = 0; k < npartner[i]; k++) {
buf[m++] = partner[i][k];
memcpy(&buf[m],&shearpartner[i][dnum*k],dnumbytes);
m += dnum;
}
}
}
return m;
}
/* ----------------------------------------------------------------------
two modes: NPARTNER and PERPARTNER
------------------------------------------------------------------------- */
void FixShearHistory::unpack_reverse_comm(int n, int *list, double *buf)
{
int i,j,k,kk,ncount;
int m = 0;
if (commflag == NPARTNER) {
for (i = 0; i < n; i++) {
j = list[i];
npartner[j] += static_cast<int> (buf[m++]);
}
} else if (commflag == PERPARTNER) {
for (i = 0; i < n; i++) {
j = list[i];
ncount = static_cast<int> (buf[m++]);
for (k = 0; k < ncount; k++) {
kk = npartner[j]++;
partner[j][kk] = static_cast<tagint> (buf[m++]);
memcpy(&shearpartner[j][dnum*kk],&buf[m],dnumbytes);
m += dnum;
}
}
}
}
/* ----------------------------------------------------------------------
pack values in local atom-based arrays for exchange with another proc
------------------------------------------------------------------------- */
int FixShearHistory::pack_exchange(int i, double *buf)
{
// NOTE: how do I know comm buf is big enough if extreme # of touching neighs
// Comm::BUFEXTRA may need to be increased
int m = 0;
buf[m++] = npartner[i];
for (int n = 0; n < npartner[i]; n++) {
buf[m++] = partner[i][n];
memcpy(&buf[m],&shearpartner[i][dnum*n],dnumbytes);
m += dnum;
}
return m;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based arrays from exchange with another proc
------------------------------------------------------------------------- */
int FixShearHistory::unpack_exchange(int nlocal, double *buf)
{
// allocate new chunks from ipage,dpage for incoming values
int m = 0;
npartner[nlocal] = static_cast<int> (buf[m++]);
maxtouch = MAX(maxtouch,npartner[nlocal]);
partner[nlocal] = ipage->get(npartner[nlocal]);
shearpartner[nlocal] = dpage->get(dnum*npartner[nlocal]);
for (int n = 0; n < npartner[nlocal]; n++) {
partner[nlocal][n] = static_cast<tagint> (buf[m++]);
memcpy(&shearpartner[nlocal][dnum*n],&buf[m],dnumbytes);
m += dnum;
}
return m;
}
/* ----------------------------------------------------------------------
pack values in local atom-based arrays for restart file
------------------------------------------------------------------------- */
int FixShearHistory::pack_restart(int i, double *buf)
{
int m = 0;
buf[m++] = 4*npartner[i] + 2;
buf[m++] = npartner[i];
for (int n = 0; n < npartner[i]; n++) {
buf[m++] = partner[i][n];
memcpy(&buf[m],&shearpartner[i][dnum*n],dnumbytes);
m += dnum;
}
return m;
}
/* ----------------------------------------------------------------------
unpack values from atom->extra array to restart the fix
------------------------------------------------------------------------- */
void FixShearHistory::unpack_restart(int nlocal, int nth)
{
// ipage = NULL if being called from granular pair style init()
if (ipage == NULL) allocate_pages();
// skip to Nth set of extra values
double **extra = atom->extra;
int m = 0;
for (int i = 0; i < nth; i++) m += static_cast<int> (extra[nlocal][m]);
m++;
// allocate new chunks from ipage,dpage for incoming values
npartner[nlocal] = static_cast<int> (extra[nlocal][m++]);
maxtouch = MAX(maxtouch,npartner[nlocal]);
partner[nlocal] = ipage->get(npartner[nlocal]);
shearpartner[nlocal] = dpage->get(dnum*npartner[nlocal]);
for (int n = 0; n < npartner[nlocal]; n++) {
partner[nlocal][n] = static_cast<tagint> (extra[nlocal][m++]);
memcpy(&shearpartner[nlocal][dnum*n],&extra[nlocal][m],dnumbytes);
m += dnum;
}
}
/* ----------------------------------------------------------------------
maxsize of any atom's restart data
------------------------------------------------------------------------- */
int FixShearHistory::maxsize_restart()
{
// maxtouch_all = max # of touching partners across all procs
int maxtouch_all;
MPI_Allreduce(&maxtouch,&maxtouch_all,1,MPI_INT,MPI_MAX,world);
return (dnum+1)*maxtouch_all + 2;
}
/* ----------------------------------------------------------------------
size of atom nlocal's restart data
------------------------------------------------------------------------- */
int FixShearHistory::size_restart(int nlocal)
{
return (dnum+1)*npartner[nlocal] + 2;
}
diff --git a/src/fix_spring.cpp b/src/fix_spring.cpp
index 5b96e1e95..9c6bd4084 100644
--- a/src/fix_spring.cpp
+++ b/src/fix_spring.cpp
@@ -1,367 +1,366 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Paul Crozier (SNL)
------------------------------------------------------------------------- */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "fix_spring.h"
#include "atom.h"
#include "update.h"
#include "respa.h"
#include "domain.h"
#include "force.h"
#include "group.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
#define SMALL 1.0e-10
enum{TETHER,COUPLE};
/* ---------------------------------------------------------------------- */
FixSpring::FixSpring(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ group2(NULL)
{
if (narg < 9) error->all(FLERR,"Illegal fix spring command");
scalar_flag = 1;
vector_flag = 1;
size_vector = 4;
global_freq = 1;
extscalar = 1;
extvector = 1;
dynamic_group_allow = 1;
respa_level_support = 1;
ilevel_respa = 0;
- group2 = NULL;
-
if (strcmp(arg[3],"tether") == 0) {
if (narg != 9) error->all(FLERR,"Illegal fix spring command");
styleflag = TETHER;
k_spring = force->numeric(FLERR,arg[4]);
xflag = yflag = zflag = 1;
if (strcmp(arg[5],"NULL") == 0) xflag = 0;
else xc = force->numeric(FLERR,arg[5]);
if (strcmp(arg[6],"NULL") == 0) yflag = 0;
else yc = force->numeric(FLERR,arg[6]);
if (strcmp(arg[7],"NULL") == 0) zflag = 0;
else zc = force->numeric(FLERR,arg[7]);
r0 = force->numeric(FLERR,arg[8]);
if (r0 < 0) error->all(FLERR,"R0 < 0 for fix spring command");
} else if (strcmp(arg[3],"couple") == 0) {
if (narg != 10) error->all(FLERR,"Illegal fix spring command");
styleflag = COUPLE;
int n = strlen(arg[4]) + 1;
group2 = new char[n];
strcpy(group2,arg[4]);
igroup2 = group->find(arg[4]);
if (igroup2 == -1)
error->all(FLERR,"Fix spring couple group ID does not exist");
if (igroup2 == igroup)
error->all(FLERR,"Two groups cannot be the same in fix spring couple");
group2bit = group->bitmask[igroup2];
k_spring = force->numeric(FLERR,arg[5]);
xflag = yflag = zflag = 1;
if (strcmp(arg[6],"NULL") == 0) xflag = 0;
else xc = force->numeric(FLERR,arg[6]);
if (strcmp(arg[7],"NULL") == 0) yflag = 0;
else yc = force->numeric(FLERR,arg[7]);
if (strcmp(arg[8],"NULL") == 0) zflag = 0;
else zc = force->numeric(FLERR,arg[8]);
r0 = force->numeric(FLERR,arg[9]);
if (r0 < 0) error->all(FLERR,"R0 < 0 for fix spring command");
} else error->all(FLERR,"Illegal fix spring command");
ftotal[0] = ftotal[1] = ftotal[2] = ftotal[3] = 0.0;
}
/* ---------------------------------------------------------------------- */
FixSpring::~FixSpring()
{
delete [] group2;
}
/* ---------------------------------------------------------------------- */
int FixSpring::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixSpring::init()
{
// recheck that group 2 has not been deleted
if (group2) {
igroup2 = group->find(group2);
if (igroup2 == -1)
error->all(FLERR,"Fix spring couple group ID does not exist");
group2bit = group->bitmask[igroup2];
}
masstotal = group->mass(igroup);
if (styleflag == COUPLE) masstotal2 = group->mass(igroup2);
if (strstr(update->integrate_style,"respa")) {
ilevel_respa = ((Respa *) update->integrate)->nlevels-1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixSpring::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixSpring::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixSpring::post_force(int vflag)
{
if (styleflag == TETHER) spring_tether();
else spring_couple();
}
/* ---------------------------------------------------------------------- */
void FixSpring::spring_tether()
{
double xcm[3];
if (group->dynamic[igroup])
masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
// fx,fy,fz = components of k * (r-r0) / masstotal
double dx,dy,dz,fx,fy,fz,r,dr;
dx = xcm[0] - xc;
dy = xcm[1] - yc;
dz = xcm[2] - zc;
if (!xflag) dx = 0.0;
if (!yflag) dy = 0.0;
if (!zflag) dz = 0.0;
r = sqrt(dx*dx + dy*dy + dz*dz);
r = MAX(r,SMALL);
dr = r - r0;
fx = k_spring*dx*dr/r;
fy = k_spring*dy*dr/r;
fz = k_spring*dz*dr/r;
ftotal[0] = -fx;
ftotal[1] = -fy;
ftotal[2] = -fz;
ftotal[3] = sqrt(fx*fx + fy*fy + fz*fz);
if (dr < 0.0) ftotal[3] = -ftotal[3];
espring = 0.5*k_spring * dr*dr;
if (masstotal > 0.0) {
fx /= masstotal;
fy /= masstotal;
fz /= masstotal;
}
// apply restoring force to atoms in group
double **f = atom->f;
int *mask = atom->mask;
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double massone;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
massone = rmass[i];
f[i][0] -= fx*massone;
f[i][1] -= fy*massone;
f[i][2] -= fz*massone;
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
massone = mass[type[i]];
f[i][0] -= fx*massone;
f[i][1] -= fy*massone;
f[i][2] -= fz*massone;
}
}
}
/* ---------------------------------------------------------------------- */
void FixSpring::spring_couple()
{
double xcm[3],xcm2[3];
if (group->dynamic[igroup])
masstotal = group->mass(igroup);
if (group->dynamic[igroup2])
masstotal2 = group->mass(igroup2);
group->xcm(igroup,masstotal,xcm);
group->xcm(igroup2,masstotal2,xcm2);
// fx,fy,fz = components of k * (r-r0) / masstotal
// fx2,fy2,fz2 = components of k * (r-r0) / masstotal2
double dx,dy,dz,fx,fy,fz,fx2,fy2,fz2,r,dr;
dx = xcm2[0] - xcm[0] - xc;
dy = xcm2[1] - xcm[1] - yc;
dz = xcm2[2] - xcm[2] - zc;
if (!xflag) dx = 0.0;
if (!yflag) dy = 0.0;
if (!zflag) dz = 0.0;
r = sqrt(dx*dx + dy*dy + dz*dz);
r = MAX(r,SMALL);
dr = r - r0;
fx = k_spring*dx*dr/r;
fy = k_spring*dy*dr/r;
fz = k_spring*dz*dr/r;
ftotal[0] = fx;
ftotal[1] = fy;
ftotal[2] = fz;
ftotal[3] = sqrt(fx*fx + fy*fy + fz*fz);
if (dr < 0.0) ftotal[3] = -ftotal[3];
espring = 0.5*k_spring * dr*dr;
if (masstotal2 > 0.0) {
fx2 = fx/masstotal2;
fy2 = fy/masstotal2;
fz2 = fz/masstotal2;
} else fx2 = fy2 = fz2 = 0.0;
if (masstotal > 0.0) {
fx /= masstotal;
fy /= masstotal;
fz /= masstotal;
} else fx = fy = fz = 0.0;
// apply restoring force to atoms in group
// f = -k*(r-r0)*mass/masstotal
double **f = atom->f;
int *mask = atom->mask;
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double massone;
if (rmass) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
massone = rmass[i];
f[i][0] += fx*massone;
f[i][1] += fy*massone;
f[i][2] += fz*massone;
}
if (mask[i] & group2bit) {
massone = rmass[i];
f[i][0] -= fx2*massone;
f[i][1] -= fy2*massone;
f[i][2] -= fz2*massone;
}
}
} else {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
massone = mass[type[i]];
f[i][0] += fx*massone;
f[i][1] += fy*massone;
f[i][2] += fz*massone;
}
if (mask[i] & group2bit) {
massone = mass[type[i]];
f[i][0] -= fx2*massone;
f[i][1] -= fy2*massone;
f[i][2] -= fz2*massone;
}
}
}
}
/* ---------------------------------------------------------------------- */
void FixSpring::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == ilevel_respa) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixSpring::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
energy of stretched spring
------------------------------------------------------------------------- */
double FixSpring::compute_scalar()
{
return espring;
}
/* ----------------------------------------------------------------------
return components of total spring force on fix group
------------------------------------------------------------------------- */
double FixSpring::compute_vector(int n)
{
return ftotal[n];
}
diff --git a/src/fix_spring_chunk.cpp b/src/fix_spring_chunk.cpp
index 16b3d7939..773e03238 100644
--- a/src/fix_spring_chunk.cpp
+++ b/src/fix_spring_chunk.cpp
@@ -1,253 +1,253 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "fix_spring_chunk.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "respa.h"
#include "domain.h"
#include "modify.h"
#include "compute_chunk_atom.h"
#include "compute_com_chunk.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
#define SMALL 1.0e-10
/* ---------------------------------------------------------------------- */
FixSpringChunk::FixSpringChunk(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ idchunk(NULL), idcom(NULL), com0(NULL), fcom(NULL)
{
if (narg != 6) error->all(FLERR,"Illegal fix spring/chunk command");
scalar_flag = 1;
global_freq = 1;
extscalar = 1;
respa_level_support = 1;
ilevel_respa = 0;
k_spring = force->numeric(FLERR,arg[3]);
int n = strlen(arg[4]) + 1;
idchunk = new char[n];
strcpy(idchunk,arg[4]);
n = strlen(arg[5]) + 1;
idcom = new char[n];
strcpy(idcom,arg[5]);
esprings = 0.0;
- com0 = fcom = NULL;
nchunk = 0;
}
/* ---------------------------------------------------------------------- */
FixSpringChunk::~FixSpringChunk()
{
memory->destroy(com0);
memory->destroy(fcom);
// decrement lock counter in compute chunk/atom, it if still exists
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
cchunk->unlock(this);
cchunk->lockcount--;
}
delete [] idchunk;
delete [] idcom;
}
/* ---------------------------------------------------------------------- */
int FixSpringChunk::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixSpringChunk::init()
{
// current indices for idchunk and idcom
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for fix spring/chunk");
cchunk = (ComputeChunkAtom *) modify->compute[icompute];
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Fix spring/chunk does not use chunk/atom compute");
icompute = modify->find_compute(idcom);
if (icompute < 0)
error->all(FLERR,"Com/chunk compute does not exist for fix spring/chunk");
ccom = (ComputeCOMChunk *) modify->compute[icompute];
if (strcmp(ccom->style,"com/chunk") != 0)
error->all(FLERR,"Fix spring/chunk does not use com/chunk compute");
// check that idchunk is consistent with ccom->idchunk
if (strcmp(idchunk,ccom->idchunk) != 0)
error->all(FLERR,"Fix spring chunk chunkID not same as comID chunkID");
if (strstr(update->integrate_style,"respa")) {
ilevel_respa = ((Respa *) update->integrate)->nlevels-1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixSpringChunk::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixSpringChunk::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixSpringChunk::post_force(int vflag)
{
int i,m;
double dx,dy,dz,r;
// check if first time cchunk will be queried via ccom
// if so, lock idchunk for as long as this fix is in place
// will be unlocked in destructor
// necessary b/c this fix stores original COM
if (com0 == NULL) cchunk->lock(this,update->ntimestep,-1);
// calculate current centers of mass for each chunk
// extract pointers from idchunk and idcom
ccom->compute_array();
nchunk = cchunk->nchunk;
int *ichunk = cchunk->ichunk;
double *masstotal = ccom->masstotal;
double **com = ccom->array;
// check if first time cchunk was queried via ccom
// if so, allocate com0,fcom and store initial COM
if (com0 == NULL) {
memory->create(com0,nchunk,3,"spring/chunk:com0");
memory->create(fcom,nchunk,3,"spring/chunk:fcom");
for (m = 0; m < nchunk; m++) {
com0[m][0] = com[m][0];
com0[m][1] = com[m][1];
com0[m][2] = com[m][2];
}
}
// calculate fcom = force on each COM, divided by masstotal
esprings = 0.0;
for (m = 0; m < nchunk; m++) {
dx = com[m][0] - com0[m][0];
dy = com[m][1] - com0[m][1];
dz = com[m][2] - com0[m][2];
r = sqrt(dx*dx + dy*dy + dz*dz);
r = MAX(r,SMALL);
if (masstotal[m]) {
fcom[m][0] = k_spring*dx/r / masstotal[m];
fcom[m][1] = k_spring*dy/r / masstotal[m];
fcom[m][2] = k_spring*dz/r / masstotal[m];
esprings += 0.5*k_spring*r*r;
}
}
// apply restoring force to atoms in each chunk
double **f = atom->f;
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double massone;
if (rmass) {
for (i = 0; i < nlocal; i++) {
m = ichunk[i]-1;
if (m < 0) continue;
massone = rmass[i];
f[i][0] -= fcom[m][0]*massone;
f[i][1] -= fcom[m][1]*massone;
f[i][2] -= fcom[m][2]*massone;
}
} else {
for (i = 0; i < nlocal; i++) {
m = ichunk[i]-1;
if (m < 0) continue;
massone = mass[type[i]];
f[i][0] -= fcom[m][0]*massone;
f[i][1] -= fcom[m][1]*massone;
f[i][2] -= fcom[m][2]*massone;
}
}
}
/* ---------------------------------------------------------------------- */
void FixSpringChunk::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == ilevel_respa) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixSpringChunk::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
energy of stretched spring
------------------------------------------------------------------------- */
double FixSpringChunk::compute_scalar()
{
return esprings;
}
diff --git a/src/fix_spring_self.cpp b/src/fix_spring_self.cpp
index 9517cf0c3..b6d5e3c83 100644
--- a/src/fix_spring_self.cpp
+++ b/src/fix_spring_self.cpp
@@ -1,308 +1,309 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Naveen Michaud-Agrawal (Johns Hopkins University)
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include "fix_spring_self.h"
#include "atom.h"
#include "update.h"
#include "domain.h"
#include "respa.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixSpringSelf::FixSpringSelf(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ xoriginal(NULL)
{
if ((narg < 4) || (narg > 5))
error->all(FLERR,"Illegal fix spring/self command");
restart_peratom = 1;
scalar_flag = 1;
global_freq = 1;
extscalar = 1;
respa_level_support = 1;
k = force->numeric(FLERR,arg[3]);
if (k <= 0.0) error->all(FLERR,"Illegal fix spring/self command");
xflag = yflag = zflag = 1;
if (narg == 5) {
if (strcmp(arg[4],"xyz") == 0) {
xflag = yflag = zflag = 1;
} else if (strcmp(arg[4],"xy") == 0) {
zflag = 0;
} else if (strcmp(arg[4],"xz") == 0) {
yflag = 0;
} else if (strcmp(arg[4],"yz") == 0) {
xflag = 0;
} else if (strcmp(arg[4],"x") == 0) {
yflag = zflag = 0;
} else if (strcmp(arg[4],"y") == 0) {
xflag = zflag = 0;
} else if (strcmp(arg[4],"z") == 0) {
xflag = yflag = 0;
} else error->all(FLERR,"Illegal fix spring/self command");
}
// perform initial allocation of atom-based array
// register with Atom class
xoriginal = NULL;
grow_arrays(atom->nmax);
atom->add_callback(0);
atom->add_callback(1);
// xoriginal = initial unwrapped positions of atoms
double **x = atom->x;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) domain->unmap(x[i],image[i],xoriginal[i]);
else xoriginal[i][0] = xoriginal[i][1] = xoriginal[i][2] = 0.0;
}
espring = 0.0;
}
/* ---------------------------------------------------------------------- */
FixSpringSelf::~FixSpringSelf()
{
// unregister callbacks to this fix from Atom class
atom->delete_callback(id,0);
atom->delete_callback(id,1);
// delete locally stored array
memory->destroy(xoriginal);
}
/* ---------------------------------------------------------------------- */
int FixSpringSelf::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixSpringSelf::init()
{
if (strstr(update->integrate_style,"respa")) {
ilevel_respa = ((Respa *) update->integrate)->nlevels-1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixSpringSelf::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixSpringSelf::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixSpringSelf::post_force(int vflag)
{
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
double dx,dy,dz;
double unwrap[3];
espring = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - xoriginal[i][0];
dy = unwrap[1] - xoriginal[i][1];
dz = unwrap[2] - xoriginal[i][2];
if (!xflag) dx = 0.0;
if (!yflag) dy = 0.0;
if (!zflag) dz = 0.0;
f[i][0] -= k*dx;
f[i][1] -= k*dy;
f[i][2] -= k*dz;
espring += k * (dx*dx + dy*dy + dz*dz);
}
espring *= 0.5;
}
/* ---------------------------------------------------------------------- */
void FixSpringSelf::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == ilevel_respa) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixSpringSelf::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
energy of stretched springs
------------------------------------------------------------------------- */
double FixSpringSelf::compute_scalar()
{
double all;
MPI_Allreduce(&espring,&all,1,MPI_DOUBLE,MPI_SUM,world);
return all;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixSpringSelf::memory_usage()
{
double bytes = atom->nmax*3 * sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
allocate atom-based array
------------------------------------------------------------------------- */
void FixSpringSelf::grow_arrays(int nmax)
{
memory->grow(xoriginal,nmax,3,"fix_spring/self:xoriginal");
}
/* ----------------------------------------------------------------------
copy values within local atom-based array
------------------------------------------------------------------------- */
void FixSpringSelf::copy_arrays(int i, int j, int delflag)
{
xoriginal[j][0] = xoriginal[i][0];
xoriginal[j][1] = xoriginal[i][1];
xoriginal[j][2] = xoriginal[i][2];
}
/* ----------------------------------------------------------------------
pack values in local atom-based array for exchange with another proc
------------------------------------------------------------------------- */
int FixSpringSelf::pack_exchange(int i, double *buf)
{
buf[0] = xoriginal[i][0];
buf[1] = xoriginal[i][1];
buf[2] = xoriginal[i][2];
return 3;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based array from exchange with another proc
------------------------------------------------------------------------- */
int FixSpringSelf::unpack_exchange(int nlocal, double *buf)
{
xoriginal[nlocal][0] = buf[0];
xoriginal[nlocal][1] = buf[1];
xoriginal[nlocal][2] = buf[2];
return 3;
}
/* ----------------------------------------------------------------------
pack values in local atom-based arrays for restart file
------------------------------------------------------------------------- */
int FixSpringSelf::pack_restart(int i, double *buf)
{
buf[0] = 4;
buf[1] = xoriginal[i][0];
buf[2] = xoriginal[i][1];
buf[3] = xoriginal[i][2];
return 4;
}
/* ----------------------------------------------------------------------
unpack values from atom->extra array to restart the fix
------------------------------------------------------------------------- */
void FixSpringSelf::unpack_restart(int nlocal, int nth)
{
double **extra = atom->extra;
// skip to Nth set of extra values
int m = 0;
for (int i = 0; i < nth; i++) m += static_cast<int> (extra[nlocal][m]);
m++;
xoriginal[nlocal][0] = extra[nlocal][m++];
xoriginal[nlocal][1] = extra[nlocal][m++];
xoriginal[nlocal][2] = extra[nlocal][m++];
}
/* ----------------------------------------------------------------------
maxsize of any atom's restart data
------------------------------------------------------------------------- */
int FixSpringSelf::maxsize_restart()
{
return 4;
}
/* ----------------------------------------------------------------------
size of atom nlocal's restart data
------------------------------------------------------------------------- */
int FixSpringSelf::size_restart(int nlocal)
{
return 4;
}
diff --git a/src/fix_store.cpp b/src/fix_store.cpp
index cf2553ed0..abfceda26 100644
--- a/src/fix_store.cpp
+++ b/src/fix_store.cpp
@@ -1,326 +1,327 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include "fix_store.h"
#include "atom.h"
#include "comm.h"
#include "force.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{UNKNOWN,GLOBAL,PERATOM};
/* ---------------------------------------------------------------------- */
-FixStore::FixStore(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
+FixStore::FixStore(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg),
+vstore(NULL), astore(NULL), rbuf(NULL)
{
if (narg != 6) error->all(FLERR,"Illegal fix store command");
// 4th arg determines GLOBAL vs PERATOM values
// syntax: id group style global nrow ncol
// Nrow by Ncol array of global values
// Ncol = 1 is vector, Ncol > 1 is array
// syntax: id group style peratom 0/1 nvalues
// 0/1 flag = not-store or store peratom values in restart file
// nvalues = # of peratom values, N = 1 is vector, N > 1 is array
nvalues = vecflag = 0;
flavor = UNKNOWN;
if (strcmp(arg[3],"global") == 0) flavor = GLOBAL;
else if (strcmp(arg[3],"peratom") == 0) flavor = PERATOM;
else error->all(FLERR,"Illegal fix store command");
// GLOBAL values are always written to restart file
// PERATOM restart_peratom is set by caller
if (flavor == GLOBAL) {
restart_global = 1;
nrow = force->inumeric(FLERR,arg[4]);
ncol = force->inumeric(FLERR,arg[5]);
if (nrow <= 0 || ncol <= 0)
error->all(FLERR,"Illegal fix store command");
vecflag = 0;
if (ncol == 1) vecflag = 1;
}
if (flavor == PERATOM) {
restart_peratom = force->inumeric(FLERR,arg[4]);
nvalues = force->inumeric(FLERR,arg[5]);
if (restart_peratom < 0 or restart_peratom > 1 || nvalues <= 0)
error->all(FLERR,"Illegal fix store command");
vecflag = 0;
if (nvalues == 1) vecflag = 1;
}
vstore = NULL;
astore = NULL;
// allocate vector or array and restart buffer rbuf
// for PERATOM, register with Atom class
if (flavor == GLOBAL) {
if (vecflag) memory->create(vstore,nrow,"fix/store:vstore");
else memory->create(astore,nrow,ncol,"fix/store:astore");
memory->create(rbuf,nrow*ncol+2,"fix/store:rbuf");
}
if (flavor == PERATOM) {
grow_arrays(atom->nmax);
atom->add_callback(0);
if (restart_peratom) atom->add_callback(1);
rbuf = NULL;
}
// zero the storage
// PERATOM may be comm->exchanged before filled by caller
if (flavor == GLOBAL) {
if (vecflag)
for (int i = 0; i < nrow; i++) vstore[i] = 0.0;
else
for (int i = 0; i < nrow; i++)
for (int j = 0; j < ncol; j++)
astore[i][j] = 0.0;
}
if (flavor == PERATOM) {
int nlocal = atom->nlocal;
if (vecflag)
for (int i = 0; i < nlocal; i++) vstore[i] = 0.0;
else
for (int i = 0; i < nlocal; i++)
for (int j = 0; j < nvalues; j++)
astore[i][j] = 0.0;
}
}
/* ---------------------------------------------------------------------- */
FixStore::~FixStore()
{
// unregister callbacks to this fix from Atom class
if (flavor == PERATOM) {
atom->delete_callback(id,0);
if (restart_peratom) atom->delete_callback(id,1);
}
memory->destroy(vstore);
memory->destroy(astore);
memory->destroy(rbuf);
}
/* ---------------------------------------------------------------------- */
int FixStore::setmask()
{
int mask = 0;
return mask;
}
/* ----------------------------------------------------------------------
reset size of global vector/array
invoked by caller if size is unknown at time this fix is instantiated
caller will do subsequent initialization
------------------------------------------------------------------------- */
void FixStore::reset_global(int nrow_caller, int ncol_caller)
{
memory->destroy(vstore);
memory->destroy(astore);
memory->destroy(rbuf);
vstore = NULL;
astore = NULL;
vecflag = 0;
if (ncol_caller == 1) vecflag = 1;
nrow = nrow_caller;
ncol = ncol_caller;
if (vecflag) memory->create(vstore,nrow,"fix/store:vstore");
else memory->create(astore,nrow,ncol,"fix/store:astore");
memory->create(rbuf,nrow*ncol+2,"fix/store:rbuf");
}
/* ----------------------------------------------------------------------
write global array to restart file
------------------------------------------------------------------------- */
void FixStore::write_restart(FILE *fp)
{
// fill rbuf with size and vec/array values
rbuf[0] = nrow;
rbuf[1] = ncol;
if (vecflag) memcpy(&rbuf[2],vstore,nrow*sizeof(double));
else memcpy(&rbuf[2],&astore[0][0],nrow*ncol*sizeof(double));
int n = nrow*ncol + 2;
if (comm->me == 0) {
int size = n * sizeof(double);
fwrite(&size,sizeof(int),1,fp);
fwrite(rbuf,sizeof(double),n,fp);
}
}
/* ----------------------------------------------------------------------
use global array from restart file to restart the Fix
------------------------------------------------------------------------- */
void FixStore::restart(char *buf)
{
// first 2 values in buf are vec/array sizes
double *dbuf = (double *) buf;
int nrow_restart = dbuf[0];
int ncol_restart = dbuf[1];
// if size of vec/array has changed,
// means the restart file is setting size of vec or array and doing init
// because caller did not know size at time this fix was instantiated
// reallocate vstore or astore accordingly
if (nrow != nrow_restart || ncol != ncol_restart) {
memory->destroy(vstore);
memory->destroy(astore);
memory->destroy(rbuf);
vstore = NULL;
astore = NULL;
vecflag = 0;
if (ncol_restart == 1) vecflag = 1;
nrow = nrow_restart;
ncol = ncol_restart;
if (vecflag) memory->create(vstore,nrow,"fix/store:vstore");
else memory->create(astore,nrow,ncol,"fix/store:astore");
memory->create(rbuf,nrow*ncol+2,"fix/store:rbuf");
}
int n = nrow*ncol;
if (vecflag) memcpy(vstore,&dbuf[2],n*sizeof(double));
else memcpy(&astore[0][0],&dbuf[2],n*sizeof(double));
}
/* ----------------------------------------------------------------------
allocate atom-based array
------------------------------------------------------------------------- */
void FixStore::grow_arrays(int nmax)
{
if (vecflag) memory->grow(vstore,nmax,"store:vstore");
else memory->grow(astore,nmax,nvalues,"store:astore");
}
/* ----------------------------------------------------------------------
copy values within local atom-based array
------------------------------------------------------------------------- */
void FixStore::copy_arrays(int i, int j, int delflag)
{
if (vecflag) vstore[j] = vstore[i];
else
for (int m = 0; m < nvalues; m++)
astore[j][m] = astore[i][m];
}
/* ----------------------------------------------------------------------
pack values in local atom-based array for exchange with another proc
------------------------------------------------------------------------- */
int FixStore::pack_exchange(int i, double *buf)
{
if (vecflag) buf[0] = vstore[i];
else
for (int m = 0; m < nvalues; m++)
buf[m] = astore[i][m];
return nvalues;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based array from exchange with another proc
------------------------------------------------------------------------- */
int FixStore::unpack_exchange(int nlocal, double *buf)
{
if (vecflag) vstore[nlocal] = buf[0];
else
for (int m = 0; m < nvalues; m++)
astore[nlocal][m] = buf[m];
return nvalues;
}
/* ----------------------------------------------------------------------
pack values in local atom-based arrays for restart file
------------------------------------------------------------------------- */
int FixStore::pack_restart(int i, double *buf)
{
buf[0] = nvalues+1;
if (vecflag) buf[1] = vstore[i];
else
for (int m = 0; m < nvalues; m++)
buf[m+1] = astore[i][m];
return nvalues+1;
}
/* ----------------------------------------------------------------------
unpack values from atom->extra array to restart the fix
------------------------------------------------------------------------- */
void FixStore::unpack_restart(int nlocal, int nth)
{
double **extra = atom->extra;
// skip to Nth set of extra values
int m = 0;
for (int i = 0; i < nth; i++) m += static_cast<int> (extra[nlocal][m]);
m++;
if (vecflag) vstore[nlocal] = extra[nlocal][m];
else
for (int i = 0; i < nvalues; i++)
astore[nlocal][i] = extra[nlocal][m++];
}
/* ----------------------------------------------------------------------
maxsize of any atom's restart data
------------------------------------------------------------------------- */
int FixStore::maxsize_restart()
{
return nvalues+1;
}
/* ----------------------------------------------------------------------
size of atom nlocal's restart data
------------------------------------------------------------------------- */
int FixStore::size_restart(int nlocal)
{
return nvalues+1;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixStore::memory_usage()
{
double bytes = 0.0;
if (flavor == GLOBAL) bytes += nrow*ncol * sizeof(double);
if (flavor == PERATOM) bytes += atom->nmax*nvalues * sizeof(double);
return bytes;
}
diff --git a/src/fix_store_force.cpp b/src/fix_store_force.cpp
index f08520928..cfeace532 100644
--- a/src/fix_store_force.cpp
+++ b/src/fix_store_force.cpp
@@ -1,140 +1,141 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "fix_store_force.h"
#include "atom.h"
#include "update.h"
#include "group.h"
#include "respa.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixStoreForce::FixStoreForce(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ foriginal(NULL)
{
if (narg < 3) error->all(FLERR,"Illegal fix store/coord command");
peratom_flag = 1;
size_peratom_cols = 3;
peratom_freq = 1;
nmax = atom->nmax;
memory->create(foriginal,nmax,3,"store/force:foriginal");
array_atom = foriginal;
// zero the array since dump may access it on timestep 0
// zero the array since a variable may access it before first run
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
foriginal[i][0] = foriginal[i][1] = foriginal[i][2] = 0.0;
}
/* ---------------------------------------------------------------------- */
FixStoreForce::~FixStoreForce()
{
memory->destroy(foriginal);
}
/* ---------------------------------------------------------------------- */
int FixStoreForce::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixStoreForce::init()
{
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
}
/* ---------------------------------------------------------------------- */
void FixStoreForce::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1);
post_force_respa(vflag,nlevels_respa-1,0);
((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1);
}
}
/* ---------------------------------------------------------------------- */
void FixStoreForce::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixStoreForce::post_force(int vflag)
{
if (atom->nmax > nmax) {
nmax = atom->nmax;
memory->destroy(foriginal);
memory->create(foriginal,nmax,3,"store/force:foriginal");
array_atom = foriginal;
}
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
foriginal[i][0] = f[i][0];
foriginal[i][1] = f[i][1];
foriginal[i][2] = f[i][2];
} else foriginal[i][0] = foriginal[i][1] = foriginal[i][2] = 0.0;
}
/* ---------------------------------------------------------------------- */
void FixStoreForce::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == nlevels_respa-1) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixStoreForce::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixStoreForce::memory_usage()
{
double bytes = atom->nmax*3 * sizeof(double);
return bytes;
}
diff --git a/src/fix_store_state.cpp b/src/fix_store_state.cpp
index 1c253384e..e6f3b59d8 100644
--- a/src/fix_store_state.cpp
+++ b/src/fix_store_state.cpp
@@ -1,1508 +1,1510 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include "fix_store_state.h"
#include "atom.h"
#include "domain.h"
#include "update.h"
#include "group.h"
#include "modify.h"
#include "compute.h"
#include "fix.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{KEYWORD,COMPUTE,FIX,VARIABLE,DNAME,INAME};
#define INVOKED_PERATOM 8
/* ---------------------------------------------------------------------- */
FixStoreState::FixStoreState(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ nvalues(0), which(NULL), argindex(NULL), value2index(NULL), ids(NULL), values(NULL),
+ vbuf(NULL), pack_choice(NULL)
{
if (narg < 5) error->all(FLERR,"Illegal fix store/state command");
restart_peratom = 1;
peratom_freq = 1;
nevery = force->inumeric(FLERR,arg[3]);
if (nevery < 0) error->all(FLERR,"Illegal fix store/state command");
// parse values until one isn't recognized
// customize a new keyword by adding to if statement
pack_choice = new FnPtrPack[narg-4];
which = new int[narg-4];
argindex = new int[narg-4];
ids = new char*[narg-4];
value2index = new int[narg-4];
nvalues = 0;
cfv_any = 0;
int iarg = 4;
while (iarg < narg) {
which[nvalues] = KEYWORD;
ids[nvalues] = NULL;
if (strcmp(arg[iarg],"id") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_id;
} else if (strcmp(arg[iarg],"mol") == 0) {
if (!atom->molecule_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_molecule;
} else if (strcmp(arg[iarg],"type") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_type;
} else if (strcmp(arg[iarg],"mass") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_mass;
} else if (strcmp(arg[iarg],"x") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_x;
} else if (strcmp(arg[iarg],"y") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_y;
} else if (strcmp(arg[iarg],"z") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_z;
} else if (strcmp(arg[iarg],"xs") == 0) {
if (domain->triclinic)
pack_choice[nvalues++] = &FixStoreState::pack_xs_triclinic;
else pack_choice[nvalues++] = &FixStoreState::pack_xs;
} else if (strcmp(arg[iarg],"ys") == 0) {
if (domain->triclinic)
pack_choice[nvalues++] = &FixStoreState::pack_ys_triclinic;
else pack_choice[nvalues++] = &FixStoreState::pack_ys;
} else if (strcmp(arg[iarg],"zs") == 0) {
if (domain->triclinic)
pack_choice[nvalues++] = &FixStoreState::pack_zs_triclinic;
else pack_choice[nvalues++] = &FixStoreState::pack_zs;
} else if (strcmp(arg[iarg],"xu") == 0) {
if (domain->triclinic)
pack_choice[nvalues++] = &FixStoreState::pack_xu_triclinic;
else pack_choice[nvalues++] = &FixStoreState::pack_xu;
} else if (strcmp(arg[iarg],"yu") == 0) {
if (domain->triclinic)
pack_choice[nvalues++] = &FixStoreState::pack_yu_triclinic;
else pack_choice[nvalues++] = &FixStoreState::pack_yu;
} else if (strcmp(arg[iarg],"zu") == 0) {
if (domain->triclinic)
pack_choice[nvalues++] = &FixStoreState::pack_zu_triclinic;
else pack_choice[nvalues++] = &FixStoreState::pack_zu;
} else if (strcmp(arg[iarg],"xsu") == 0) {
if (domain->triclinic)
pack_choice[nvalues++] = &FixStoreState::pack_xsu_triclinic;
else pack_choice[nvalues++] = &FixStoreState::pack_xsu;
} else if (strcmp(arg[iarg],"ysu") == 0) {
if (domain->triclinic)
pack_choice[nvalues++] = &FixStoreState::pack_ysu_triclinic;
else pack_choice[nvalues++] = &FixStoreState::pack_ysu;
} else if (strcmp(arg[iarg],"zsu") == 0) {
if (domain->triclinic)
pack_choice[nvalues++] = &FixStoreState::pack_zsu_triclinic;
else pack_choice[nvalues++] = &FixStoreState::pack_zsu;
} else if (strcmp(arg[iarg],"ix") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_ix;
} else if (strcmp(arg[iarg],"iy") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_iy;
} else if (strcmp(arg[iarg],"iz") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_iz;
} else if (strcmp(arg[iarg],"vx") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_vx;
} else if (strcmp(arg[iarg],"vy") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_vy;
} else if (strcmp(arg[iarg],"vz") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_vz;
} else if (strcmp(arg[iarg],"fx") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_fx;
} else if (strcmp(arg[iarg],"fy") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_fy;
} else if (strcmp(arg[iarg],"fz") == 0) {
pack_choice[nvalues++] = &FixStoreState::pack_fz;
} else if (strcmp(arg[iarg],"q") == 0) {
if (!atom->q_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_q;
} else if (strcmp(arg[iarg],"mux") == 0) {
if (!atom->mu_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_mux;
} else if (strcmp(arg[iarg],"muy") == 0) {
if (!atom->mu_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_muy;
} else if (strcmp(arg[iarg],"muz") == 0) {
if (!atom->mu_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_muz;
} else if (strcmp(arg[iarg],"mu") == 0) {
if (!atom->mu_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_mu;
} else if (strcmp(arg[iarg],"radius") == 0) {
if (!atom->radius_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_radius;
} else if (strcmp(arg[iarg],"diameter") == 0) {
if (!atom->radius_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_diameter;
} else if (strcmp(arg[iarg],"omegax") == 0) {
if (!atom->omega_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_omegax;
} else if (strcmp(arg[iarg],"omegay") == 0) {
if (!atom->omega_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_omegay;
} else if (strcmp(arg[iarg],"omegaz") == 0) {
if (!atom->omega_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_omegaz;
} else if (strcmp(arg[iarg],"angmomx") == 0) {
if (!atom->angmom_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_angmomx;
} else if (strcmp(arg[iarg],"angmomy") == 0) {
if (!atom->angmom_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_angmomy;
} else if (strcmp(arg[iarg],"angmomz") == 0) {
if (!atom->angmom_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_angmomz;
} else if (strcmp(arg[iarg],"tqx") == 0) {
if (!atom->torque_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_tqx;
} else if (strcmp(arg[iarg],"tqy") == 0) {
if (!atom->torque_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_tqy;
} else if (strcmp(arg[iarg],"tqz") == 0) {
if (!atom->torque_flag)
error->all(FLERR,
"Fix store/state for atom property that isn't allocated");
pack_choice[nvalues++] = &FixStoreState::pack_tqz;
} else if (strncmp(arg[iarg],"c_",2) == 0 ||
strncmp(arg[iarg],"d_",2) == 0 ||
strncmp(arg[iarg],"f_",2) == 0 ||
strncmp(arg[iarg],"i_",2) == 0 ||
strncmp(arg[iarg],"v_",2) == 0) {
cfv_any = 1;
if (arg[iarg][0] == 'c') which[nvalues] = COMPUTE;
else if (arg[iarg][0] == 'd') which[nvalues] = DNAME;
else if (arg[iarg][0] == 'f') which[nvalues] = FIX;
else if (arg[iarg][0] == 'i') which[nvalues] = INAME;
else if (arg[iarg][0] == 'v') which[nvalues] = VARIABLE;
int n = strlen(arg[iarg]);
char *suffix = new char[n];
strcpy(suffix,&arg[iarg][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Illegal fix store/state command");
argindex[nvalues] = atoi(ptr+1);
*ptr = '\0';
} else argindex[nvalues] = 0;
n = strlen(suffix) + 1;
ids[nvalues] = new char[n];
strcpy(ids[nvalues],suffix);
nvalues++;
delete [] suffix;
} else break;
iarg++;
}
// optional args
comflag = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"com") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix store/state command");
if (strcmp(arg[iarg+1],"no") == 0) comflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) comflag = 1;
else error->all(FLERR,"Illegal fix store/state command");
iarg += 2;
} else error->all(FLERR,"Illegal fix store/state command");
}
// error check
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix store/state does not exist");
if (modify->compute[icompute]->peratom_flag == 0)
error->all(FLERR,"Fix store/state compute "
"does not calculate per-atom values");
if (argindex[i] == 0 &&
modify->compute[icompute]->size_peratom_cols != 0)
error->all(FLERR,"Fix store/state compute does not "
"calculate a per-atom vector");
if (argindex[i] && modify->compute[icompute]->size_peratom_cols == 0)
error->all(FLERR,
"Fix store/state compute does not "
"calculate a per-atom array");
if (argindex[i] &&
argindex[i] > modify->compute[icompute]->size_peratom_cols)
error->all(FLERR,
"Fix store/state compute array is accessed out-of-range");
} else if (which[i] == INAME) {
int icustom,iflag;
icustom = atom->find_custom(ids[i],iflag);
if ((icustom < 0) || (iflag != 0))
error->all(FLERR,
"Custom integer vector for fix store/state does not exist");
} else if (which[i] == DNAME) {
int icustom,iflag;
icustom = atom->find_custom(ids[i],iflag);
if ((icustom < 0) || (iflag != 1))
error->all(FLERR,
"Custom floating point vector for fix store/state does not exist");
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,
"Fix ID for fix store/state does not exist");
if (modify->fix[ifix]->peratom_flag == 0)
error->all(FLERR,
"Fix store/state fix does not calculate per-atom values");
if (argindex[i] == 0 && modify->fix[ifix]->size_peratom_cols != 0)
error->all(FLERR,
"Fix store/state fix does not calculate a per-atom vector");
if (argindex[i] && modify->fix[ifix]->size_peratom_cols == 0)
error->all(FLERR,
"Fix store/state fix does not calculate a per-atom array");
if (argindex[i] && argindex[i] > modify->fix[ifix]->size_peratom_cols)
error->all(FLERR,
"Fix store/state fix array is accessed out-of-range");
if (nevery % modify->fix[ifix]->peratom_freq)
error->all(FLERR,
"Fix for fix store/state not computed at compatible time");
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix store/state does not exist");
if (input->variable->atomstyle(ivariable) == 0)
error->all(FLERR,"Fix store/state variable is not atom-style variable");
}
}
// this fix produces either a per-atom vector or array
peratom_flag = 1;
if (nvalues == 1) size_peratom_cols = 0;
else size_peratom_cols = nvalues;
// perform initial allocation of atom-based array
// register with Atom class
values = NULL;
grow_arrays(atom->nmax);
atom->add_callback(0);
atom->add_callback(1);
// zero the array since dump may access it on timestep 0
// zero the array since a variable may access it before first run
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
for (int m = 0; m < nvalues; m++)
values[i][m] = 0.0;
// store current values for keywords but not for compute, fix, variable
kflag = 1;
cfv_flag = 0;
end_of_step();
firstflag = 1;
}
/* ---------------------------------------------------------------------- */
FixStoreState::~FixStoreState()
{
// unregister callbacks to this fix from Atom class
atom->delete_callback(id,0);
atom->delete_callback(id,1);
delete [] which;
delete [] argindex;
for (int m = 0; m < nvalues; m++) delete [] ids[m];
delete [] ids;
delete [] value2index;
delete [] pack_choice;
memory->destroy(values);
}
/* ---------------------------------------------------------------------- */
int FixStoreState::setmask()
{
int mask = 0;
if (nevery) mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixStoreState::init()
{
// set indices and check validity of all computes,fixes,variables
// no error check if end_of_step() will not be called
if (!firstflag && nevery == 0) return;
for (int m = 0; m < nvalues; m++) {
if (which[m] == COMPUTE) {
int icompute = modify->find_compute(ids[m]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix store/state does not exist");
value2index[m] = icompute;
} else if (which[m] == INAME) {
int icustom,iflag;
icustom = atom->find_custom(ids[m],iflag);
if ((icustom < 0) || (iflag != 0))
error->all(FLERR,
"Custom integer vector for fix store/state does not exist");
value2index[m] = icustom;
} else if (which[m] == DNAME) {
int icustom,iflag;
icustom = atom->find_custom(ids[m],iflag);
if ((icustom < 0) || (iflag != 1))
error->all(FLERR,
"Custom floating point vector for fix store/state does not exist");
value2index[m] = icustom;
} else if (which[m] == FIX) {
int ifix = modify->find_fix(ids[m]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix store/state does not exist");
value2index[m] = ifix;
} else if (which[m] == VARIABLE) {
int ivariable = input->variable->find(ids[m]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix store/state does not exist");
value2index[m] = ivariable;
}
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::setup(int vflag)
{
// if first invocation, store current values for compute, fix, variable
if (firstflag) {
kflag = 0;
cfv_flag = 1;
end_of_step();
firstflag = 0;
kflag = cfv_flag = 1;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::end_of_step()
{
int i,j,n;
// compute com if comflag set
if (comflag) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,cm);
}
// if any compute/fix/variable and nevery, wrap with clear/add
if (cfv_any && nevery) modify->clearstep_compute();
// fill vector or array with per-atom values
if (values) vbuf = &values[0][0];
else vbuf = NULL;
for (int m = 0; m < nvalues; m++) {
if (which[m] == KEYWORD && kflag) (this->*pack_choice[m])(m);
else if (cfv_flag) {
n = value2index[m];
j = argindex[m];
int *mask = atom->mask;
int nlocal = atom->nlocal;
// invoke compute if not previously invoked
if (which[m] == COMPUTE) {
Compute *compute = modify->compute[n];
if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
if (j == 0) {
double *compute_vector = compute->vector_atom;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) values[i][m] = compute_vector[i];
} else {
int jm1 = j - 1;
double **compute_array = compute->array_atom;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) values[i][m] = compute_array[i][jm1];
}
// access fix fields, guaranteed to be ready
} else if (which[m] == FIX) {
if (j == 0) {
double *fix_vector = modify->fix[n]->vector_atom;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) values[i][m] = fix_vector[i];
} else {
int jm1 = j - 1;
double **fix_array = modify->fix[n]->array_atom;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) values[i][m] = fix_array[i][jm1];
}
// access custom atom property fields
} else if (which[m] == INAME) {
int *ivector = atom->ivector[n];
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) values[i][m] = ivector[i];
} else if (which[m] == DNAME) {
double *dvector = atom->dvector[n];
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) values[i][m] = dvector[i];
// evaluate atom-style variable
} else if (which[m] == VARIABLE) {
input->variable->compute_atom(n,igroup,&values[0][m],nvalues,0);
}
}
}
// if any compute/fix/variable and nevery, wrap with clear/add
if (cfv_any && nevery) {
const bigint nextstep = (update->ntimestep/nevery)*nevery + nevery;
modify->addstep_compute(nextstep);
}
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixStoreState::memory_usage()
{
double bytes = atom->nmax*nvalues * sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
allocate atom-based array
------------------------------------------------------------------------- */
void FixStoreState::grow_arrays(int nmax)
{
memory->grow(values,nmax,nvalues,"store/state:values");
if (nvalues == 1) {
if (nmax) vector_atom = &values[0][0];
else vector_atom = NULL;
} else array_atom = values;
}
/* ----------------------------------------------------------------------
copy values within local atom-based array
------------------------------------------------------------------------- */
void FixStoreState::copy_arrays(int i, int j, int delflag)
{
for (int m = 0; m < nvalues; m++) values[j][m] = values[i][m];
}
/* ----------------------------------------------------------------------
pack values in local atom-based array for exchange with another proc
------------------------------------------------------------------------- */
int FixStoreState::pack_exchange(int i, double *buf)
{
for (int m = 0; m < nvalues; m++) buf[m] = values[i][m];
return nvalues;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based array from exchange with another proc
------------------------------------------------------------------------- */
int FixStoreState::unpack_exchange(int nlocal, double *buf)
{
for (int m = 0; m < nvalues; m++) values[nlocal][m] = buf[m];
return nvalues;
}
/* ----------------------------------------------------------------------
pack values in local atom-based arrays for restart file
------------------------------------------------------------------------- */
int FixStoreState::pack_restart(int i, double *buf)
{
buf[0] = nvalues+1;
for (int m = 0; m < nvalues; m++) buf[m+1] = values[i][m];
return nvalues+1;
}
/* ----------------------------------------------------------------------
unpack values from atom->extra array to restart the fix
------------------------------------------------------------------------- */
void FixStoreState::unpack_restart(int nlocal, int nth)
{
double **extra = atom->extra;
// skip to Nth set of extra values
int m = 0;
for (int i = 0; i < nth; i++) m += static_cast<int> (extra[nlocal][m]);
m++;
for (int i = 0; i < nvalues; i++) values[nlocal][i] = extra[nlocal][m++];
}
/* ----------------------------------------------------------------------
maxsize of any atom's restart data
------------------------------------------------------------------------- */
int FixStoreState::maxsize_restart()
{
return nvalues+1;
}
/* ----------------------------------------------------------------------
size of atom nlocal's restart data
------------------------------------------------------------------------- */
int FixStoreState::size_restart(int nlocal)
{
return nvalues+1;
}
/* ----------------------------------------------------------------------
one method for every keyword fix store/state can archive
the atom property is packed into buf starting at n with stride nvalues
customize a new keyword by adding a method
------------------------------------------------------------------------- */
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_id(int n)
{
tagint *tag = atom->tag;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = tag[i];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_molecule(int n)
{
tagint *molecule = atom->molecule;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = molecule[i];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_type(int n)
{
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = type[i];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_mass(int n)
{
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (rmass) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = rmass[i];
else vbuf[n] = 0.0;
n += nvalues;
}
} else {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = mass[type[i]];
else vbuf[n] = 0.0;
n += nvalues;
}
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_x(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = x[i][0];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_y(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = x[i][1];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_z(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = x[i][2];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_xs(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double boxxlo = domain->boxlo[0];
double invxprd = 1.0/domain->xprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = (x[i][0] - boxxlo) * invxprd;
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_ys(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double boxylo = domain->boxlo[1];
double invyprd = 1.0/domain->yprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = (x[i][1] - boxylo) * invyprd;
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_zs(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double boxzlo = domain->boxlo[2];
double invzprd = 1.0/domain->zprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = (x[i][2] - boxzlo) * invzprd;
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_xs_triclinic(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
vbuf[n] = h_inv[0]*(x[i][0]-boxlo[0]) +
h_inv[5]*(x[i][1]-boxlo[1]) + h_inv[4]*(x[i][2]-boxlo[2]);
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_ys_triclinic(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
vbuf[n] = h_inv[1]*(x[i][1]-boxlo[1]) + h_inv[3]*(x[i][2]-boxlo[2]);
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_zs_triclinic(int n)
{
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
vbuf[n] = h_inv[2]*(x[i][2]-boxlo[2]);
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_xu(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double xprd = domain->xprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
vbuf[n] = x[i][0] + ((image[i] & IMGMASK) - IMGMAX) * xprd;
if (comflag) vbuf[n] -= cm[0];
} else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_yu(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double yprd = domain->yprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
vbuf[n] = x[i][1] + ((image[i] >> IMGBITS & IMGMASK) - IMGMAX) * yprd;
if (comflag) vbuf[n] -= cm[1];
} else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_zu(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double zprd = domain->zprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
vbuf[n] = x[i][2] + ((image[i] >> IMG2BITS) - IMGMAX) * zprd;
if (comflag) vbuf[n] -= cm[2];
} else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_xu_triclinic(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *h = domain->h;
int xbox,ybox,zbox;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
vbuf[n] = x[i][0] + h[0]*xbox + h[5]*ybox + h[4]*zbox;
if (comflag) vbuf[n] -= cm[0];
} else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_yu_triclinic(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *h = domain->h;
int ybox,zbox;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
vbuf[n] = x[i][1] + h[1]*ybox + h[3]*zbox;
if (comflag) vbuf[n] -= cm[1];
} else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_zu_triclinic(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *h = domain->h;
int zbox;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
zbox = (image[i] >> IMG2BITS) - IMGMAX;
vbuf[n] = x[i][2] + h[2]*zbox;
if (comflag) vbuf[n] -= cm[2];
} else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_xsu(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double boxxlo = domain->boxlo[0];
double invxprd = 1.0/domain->xprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
vbuf[n] = (x[i][0]-boxxlo)*invxprd + ((image[i] & IMGMASK) - IMGMAX);
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_ysu(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double boxylo = domain->boxlo[1];
double invyprd = 1.0/domain->yprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
vbuf[n] = (x[i][1]-boxylo)*invyprd + (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_zsu(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double boxzlo = domain->boxlo[2];
double invzprd = 1.0/domain->zprd;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
vbuf[n] = (x[i][2]-boxzlo)*invzprd + (image[i] >> IMG2BITS) - IMGMAX;
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_xsu_triclinic(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
vbuf[n] = h_inv[0]*(x[i][0]-boxlo[0]) + h_inv[5]*(x[i][1]-boxlo[1]) +
h_inv[4]*(x[i][2]-boxlo[2]) + (image[i] & IMGMASK) - IMGMAX;
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_ysu_triclinic(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
vbuf[n] = h_inv[1]*(x[i][1]-boxlo[1]) + h_inv[3]*(x[i][2]-boxlo[2]) +
(image[i] >> IMGBITS & IMGMASK) - IMGMAX;
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_zsu_triclinic(int n)
{
double **x = atom->x;
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit)
vbuf[n] = h_inv[2]*(x[i][2]-boxlo[2]) + (image[i] >> IMG2BITS) - IMGMAX;
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_ix(int n)
{
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = (image[i] & IMGMASK) - IMGMAX;
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_iy(int n)
{
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_iz(int n)
{
imageint *image = atom->image;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = (image[i] >> IMG2BITS) - IMGMAX;
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_vx(int n)
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = v[i][0];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_vy(int n)
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = v[i][1];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_vz(int n)
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = v[i][2];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_fx(int n)
{
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = f[i][0];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_fy(int n)
{
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = f[i][1];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_fz(int n)
{
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = f[i][2];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_q(int n)
{
double *q = atom->q;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = q[i];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_mux(int n)
{
double **mu = atom->mu;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = mu[i][0];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_muy(int n)
{
double **mu = atom->mu;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = mu[i][1];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_muz(int n)
{
double **mu = atom->mu;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = mu[i][2];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_mu(int n)
{
double **mu = atom->mu;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = mu[i][3];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_radius(int n)
{
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = radius[i];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_diameter(int n)
{
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = 2.0*radius[i];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_omegax(int n)
{
double **omega = atom->omega;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = omega[i][0];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_omegay(int n)
{
double **omega = atom->omega;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = omega[i][1];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_omegaz(int n)
{
double **omega = atom->omega;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = omega[i][2];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_angmomx(int n)
{
double **angmom = atom->angmom;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = angmom[i][0];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_angmomy(int n)
{
double **angmom = atom->angmom;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = angmom[i][1];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_angmomz(int n)
{
double **angmom = atom->angmom;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = angmom[i][2];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_tqx(int n)
{
double **torque = atom->torque;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = torque[i][0];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_tqy(int n)
{
double **torque = atom->torque;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = torque[i][1];
else vbuf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void FixStoreState::pack_tqz(int n)
{
double **torque = atom->torque;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) vbuf[n] = torque[i][2];
else vbuf[n] = 0.0;
n += nvalues;
}
}
diff --git a/src/fix_temp_berendsen.cpp b/src/fix_temp_berendsen.cpp
index bb86eb486..aff9a4497 100644
--- a/src/fix_temp_berendsen.cpp
+++ b/src/fix_temp_berendsen.cpp
@@ -1,255 +1,256 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "fix_temp_berendsen.h"
#include "atom.h"
#include "force.h"
#include "comm.h"
#include "input.h"
#include "variable.h"
#include "group.h"
#include "update.h"
#include "modify.h"
#include "compute.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NOBIAS,BIAS};
enum{CONSTANT,EQUAL};
/* ---------------------------------------------------------------------- */
FixTempBerendsen::FixTempBerendsen(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ tstr(NULL), id_temp(NULL), tflag(0)
{
if (narg != 6) error->all(FLERR,"Illegal fix temp/berendsen command");
// Berendsen thermostat should be applied every step
dynamic_group_allow = 1;
nevery = 1;
scalar_flag = 1;
global_freq = nevery;
extscalar = 1;
tstr = NULL;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
tstr = new char[n];
strcpy(tstr,&arg[3][2]);
tstyle = EQUAL;
} else {
t_start = force->numeric(FLERR,arg[3]);
t_target = t_start;
tstyle = CONSTANT;
}
t_stop = force->numeric(FLERR,arg[4]);
t_period = force->numeric(FLERR,arg[5]);
// error checks
if (t_period <= 0.0)
error->all(FLERR,"Fix temp/berendsen period must be > 0.0");
// create a new compute temp style
// id = fix-ID + temp, compute group = fix group
int n = strlen(id) + 6;
id_temp = new char[n];
strcpy(id_temp,id);
strcat(id_temp,"_temp");
char **newarg = new char*[3];
newarg[0] = id_temp;
newarg[1] = group->names[igroup];
newarg[2] = (char *) "temp";
modify->add_compute(3,newarg);
delete [] newarg;
tflag = 1;
energy = 0;
}
/* ---------------------------------------------------------------------- */
FixTempBerendsen::~FixTempBerendsen()
{
delete [] tstr;
// delete temperature if fix created it
if (tflag) modify->delete_compute(id_temp);
delete [] id_temp;
}
/* ---------------------------------------------------------------------- */
int FixTempBerendsen::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
mask |= THERMO_ENERGY;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixTempBerendsen::init()
{
// check variable
if (tstr) {
tvar = input->variable->find(tstr);
if (tvar < 0)
error->all(FLERR,"Variable name for fix temp/berendsen does not exist");
if (input->variable->equalstyle(tvar)) tstyle = EQUAL;
else error->all(FLERR,"Variable for fix temp/berendsen is invalid style");
}
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Temperature ID for fix temp/berendsen does not exist");
temperature = modify->compute[icompute];
if (temperature->tempbias) which = BIAS;
else which = NOBIAS;
}
/* ---------------------------------------------------------------------- */
void FixTempBerendsen::end_of_step()
{
double t_current = temperature->compute_scalar();
double tdof = temperature->dof;
// there is nothing to do, if there are no degrees of freedom
if (tdof < 1) return;
if (t_current == 0.0)
error->all(FLERR,
"Computed temperature for fix temp/berendsen cannot be 0.0");
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
// set current t_target
// if variable temp, evaluate variable, wrap with clear/add
if (tstyle == CONSTANT)
t_target = t_start + delta * (t_stop-t_start);
else {
modify->clearstep_compute();
t_target = input->variable->compute_equal(tvar);
if (t_target < 0.0)
error->one(FLERR,
"Fix temp/berendsen variable returned negative temperature");
modify->addstep_compute(update->ntimestep + nevery);
}
// rescale velocities by lamda
// for BIAS:
// temperature is current, so do not need to re-compute
// OK to not test returned v = 0, since lamda is multiplied by v
double lamda = sqrt(1.0 + update->dt/t_period*(t_target/t_current - 1.0));
double efactor = 0.5 * force->boltz * tdof;
energy += t_current * (1.0-lamda*lamda) * efactor;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (which == NOBIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
v[i][0] *= lamda;
v[i][1] *= lamda;
v[i][2] *= lamda;
}
}
} else {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
temperature->remove_bias(i,v[i]);
v[i][0] *= lamda;
v[i][1] *= lamda;
v[i][2] *= lamda;
temperature->restore_bias(i,v[i]);
}
}
}
}
/* ---------------------------------------------------------------------- */
int FixTempBerendsen::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"temp") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (tflag) {
modify->delete_compute(id_temp);
tflag = 0;
}
delete [] id_temp;
int n = strlen(arg[1]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[1]);
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Could not find fix_modify temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,
"Fix_modify temperature ID does not compute temperature");
if (temperature->igroup != igroup && comm->me == 0)
error->warning(FLERR,"Group for fix_modify temp != fix group");
return 2;
}
return 0;
}
/* ---------------------------------------------------------------------- */
void FixTempBerendsen::reset_target(double t_new)
{
t_target = t_start = t_stop = t_new;
}
/* ---------------------------------------------------------------------- */
double FixTempBerendsen::compute_scalar()
{
return energy;
}
/* ----------------------------------------------------------------------
extract thermostat properties
------------------------------------------------------------------------- */
void *FixTempBerendsen::extract(const char *str, int &dim)
{
dim=0;
if (strcmp(str,"t_target") == 0) {
return &t_target;
}
return NULL;
}
diff --git a/src/fix_temp_csld.cpp b/src/fix_temp_csld.cpp
index e89f26ec6..f24314ac8 100644
--- a/src/fix_temp_csld.cpp
+++ b/src/fix_temp_csld.cpp
@@ -1,311 +1,312 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Axel Kohlmeyer (Temple U)
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "fix_temp_csld.h"
#include "atom.h"
#include "force.h"
#include "memory.h"
#include "comm.h"
#include "input.h"
#include "variable.h"
#include "group.h"
#include "update.h"
#include "modify.h"
#include "compute.h"
#include "random_mars.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NOBIAS,BIAS};
enum{CONSTANT,EQUAL};
/* ---------------------------------------------------------------------- */
FixTempCSLD::FixTempCSLD(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ vhold(NULL), tstr(NULL), id_temp(NULL), random(NULL)
{
if (narg != 7) error->all(FLERR,"Illegal fix temp/csld command");
// CSLD thermostat should be applied every step
nevery = 1;
scalar_flag = 1;
global_freq = nevery;
dynamic_group_allow = 1;
extscalar = 1;
tstr = NULL;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
tstr = new char[n];
strcpy(tstr,&arg[3][2]);
tstyle = EQUAL;
} else {
t_start = force->numeric(FLERR,arg[3]);
t_target = t_start;
tstyle = CONSTANT;
}
t_stop = force->numeric(FLERR,arg[4]);
t_period = force->numeric(FLERR,arg[5]);
int seed = force->inumeric(FLERR,arg[6]);
// error checks
if (t_period <= 0.0) error->all(FLERR,"Illegal fix temp/csld command");
if (seed <= 0) error->all(FLERR,"Illegal fix temp/csld command");
random = new RanMars(lmp,seed + comm->me);
// create a new compute temp style
// id = fix-ID + temp, compute group = fix group
int n = strlen(id) + 6;
id_temp = new char[n];
strcpy(id_temp,id);
strcat(id_temp,"_temp");
char **newarg = new char*[3];
newarg[0] = id_temp;
newarg[1] = group->names[igroup];
newarg[2] = (char *) "temp";
modify->add_compute(3,newarg);
delete [] newarg;
tflag = 1;
vhold = NULL;
nmax = -1;
energy = 0.0;
}
/* ---------------------------------------------------------------------- */
FixTempCSLD::~FixTempCSLD()
{
delete [] tstr;
// delete temperature if fix created it
if (tflag) modify->delete_compute(id_temp);
delete [] id_temp;
delete random;
memory->destroy(vhold);
vhold = NULL;
nmax = -1;
}
/* ---------------------------------------------------------------------- */
int FixTempCSLD::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
mask |= THERMO_ENERGY;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixTempCSLD::init()
{
// we cannot handle constraints via rattle or shake correctly.
int has_shake = 0;
for (int i = 0; i < modify->nfix; i++)
if ((strcmp(modify->fix[i]->style,"shake") == 0)
|| (strcmp(modify->fix[i]->style,"rattle") == 0)) ++has_shake;
if (has_shake > 0)
error->all(FLERR,"Fix temp/csld is not compatible with fix rattle or fix shake");
// check variable
if (tstr) {
tvar = input->variable->find(tstr);
if (tvar < 0)
error->all(FLERR,"Variable name for fix temp/csld does not exist");
if (input->variable->equalstyle(tvar)) tstyle = EQUAL;
else error->all(FLERR,"Variable for fix temp/csld is invalid style");
}
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Temperature ID for fix temp/csld does not exist");
temperature = modify->compute[icompute];
if (temperature->tempbias) which = BIAS;
else which = NOBIAS;
}
/* ---------------------------------------------------------------------- */
void FixTempCSLD::end_of_step()
{
// set current t_target
// if variable temp, evaluate variable, wrap with clear/add
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
if (tstyle == CONSTANT)
t_target = t_start + delta * (t_stop-t_start);
else {
modify->clearstep_compute();
t_target = input->variable->compute_equal(tvar);
if (t_target < 0.0)
error->one(FLERR,
"Fix temp/csld variable returned negative temperature");
modify->addstep_compute(update->ntimestep + nevery);
}
double t_current = temperature->compute_scalar();
double ekin_old = t_current * 0.5 * temperature->dof * force->boltz;
// there is nothing to do, if there are no degrees of freedom
if (temperature->dof < 1) return;
double * const * const v = atom->v;
const int * const mask = atom->mask;
const int * const type = atom->type;
const int nlocal = atom->nlocal;
// adjust holding space, if needed and copy existing velocities
if (nmax < atom->nlocal) {
nmax = atom->nlocal + 1;
memory->destroy(vhold);
memory->create(vhold,nmax,3,"csld:vhold");
}
// The CSLD thermostat is a linear combination of old and new velocities,
// where the new ones are randomly chosen from a gaussian distribution.
// see Bussi and Parrinello, Phys. Rev. E (2007).
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
double m;
if (atom->rmass_flag) m = atom->rmass[i];
else m = atom->mass[type[i]];
const double factor = 1.0/sqrt(m);
const double vx = random->gaussian() * factor;
vhold[i][0] = v[i][0];
v[i][0] = vx;
const double vy = random->gaussian() * factor;
vhold[i][1] = v[i][1];
v[i][1] = vy;
const double vz = random->gaussian() * factor;
vhold[i][2] = v[i][2];
v[i][2] = vz;
}
}
// mixing factors
const double c1 = exp(-update->dt/t_period);
const double c2 = sqrt((1.0-c1*c1)*t_target/temperature->compute_scalar());
if (which == NOBIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
v[i][0] = vhold[i][0]*c1 + v[i][0]*c2;
v[i][1] = vhold[i][1]*c1 + v[i][1]*c2;
v[i][2] = vhold[i][2]*c1 + v[i][2]*c2;
}
}
} else {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
temperature->remove_bias(i,vhold[i]);
v[i][0] = vhold[i][0]*c1 + v[i][0]*c2;
v[i][1] = vhold[i][1]*c1 + v[i][1]*c2;
v[i][2] = vhold[i][2]*c1 + v[i][2]*c2;
temperature->restore_bias(i,v[i]);
}
}
}
// tally the kinetic energy transferred between heat bath and system
t_current = temperature->compute_scalar();
energy += ekin_old - t_current * 0.5 * temperature->dof * force->boltz;
}
/* ---------------------------------------------------------------------- */
int FixTempCSLD::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"temp") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (tflag) {
modify->delete_compute(id_temp);
tflag = 0;
}
delete [] id_temp;
int n = strlen(arg[1]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[1]);
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Could not find fix_modify temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,
"Fix_modify temperature ID does not compute temperature");
if (temperature->igroup != igroup && comm->me == 0)
error->warning(FLERR,"Group for fix_modify temp != fix group");
return 2;
}
return 0;
}
/* ---------------------------------------------------------------------- */
void FixTempCSLD::reset_target(double t_new)
{
t_target = t_start = t_stop = t_new;
}
/* ---------------------------------------------------------------------- */
double FixTempCSLD::compute_scalar()
{
return energy;
}
/* ----------------------------------------------------------------------
extract thermostat properties
------------------------------------------------------------------------- */
void *FixTempCSLD::extract(const char *str, int &dim)
{
dim=0;
if (strcmp(str,"t_target") == 0) {
return &t_target;
}
return NULL;
}
diff --git a/src/fix_temp_csvr.cpp b/src/fix_temp_csvr.cpp
index 81f87d4ca..3ef99ccd8 100644
--- a/src/fix_temp_csvr.cpp
+++ b/src/fix_temp_csvr.cpp
@@ -1,343 +1,344 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Axel Kohlmeyer (Temple U)
Based on code by Paolo Raiteri (Curtin U) and Giovanni Bussi (SISSA)
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "fix_temp_csvr.h"
#include "atom.h"
#include "force.h"
#include "memory.h"
#include "comm.h"
#include "input.h"
#include "variable.h"
#include "group.h"
#include "update.h"
#include "modify.h"
#include "compute.h"
#include "random_mars.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NOBIAS,BIAS};
enum{CONSTANT,EQUAL};
double FixTempCSVR::gamdev(const int ia)
{
int j;
double am,e,s,v1,v2,x,y;
if (ia < 1) return 0.0;
if (ia < 6) {
x=1.0;
for (j=1; j<=ia; j++)
x *= random->uniform();
x = -log(x);
} else {
restart:
do {
do {
do {
v1 = random->uniform();
v2 = 2.0*random->uniform() - 1.0;
} while (v1*v1 + v2*v2 > 1.0);
y=v2/v1;
am=ia-1;
s=sqrt(2.0*am+1.0);
x=s*y+am;
} while (x <= 0.0);
if (am*log(x/am)-s*y < -700 || v1<0.00001) {
goto restart;
}
e=(1.0+y*y)*exp(am*log(x/am)-s*y);
} while (random->uniform() > e);
}
return x;
}
/* -------------------------------------------------------------------
returns the sum of n independent gaussian noises squared
(i.e. equivalent to summing the square of the return values of nn
calls to gasdev)
---------------------------------------------------------------------- */
double FixTempCSVR::sumnoises(int nn) {
if (nn == 0) {
return 0.0;
} else if (nn == 1) {
const double rr = random->gaussian();
return rr*rr;
} else if (nn % 2 == 0) {
return 2.0 * gamdev(nn / 2);
} else {
const double rr = random->gaussian();
return 2.0 * gamdev((nn-1) / 2) + rr*rr;
}
}
/* -------------------------------------------------------------------
returns the scaling factor for velocities to thermalize
the system so it samples the canonical ensemble
---------------------------------------------------------------------- */
double FixTempCSVR::resamplekin(double ekin_old, double ekin_new){
const double tdof = temperature->dof;
const double c1 = exp(-update->dt/t_period);
const double c2 = (1.0-c1)*ekin_new/ekin_old/tdof;
const double r1 = random->gaussian();
const double r2 = sumnoises(tdof - 1);
const double scale = c1 + c2*(r1*r1+r2) + 2.0*r1*sqrt(c1*c2);
return sqrt(scale);
}
/* ---------------------------------------------------------------------- */
FixTempCSVR::FixTempCSVR(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ tstr(NULL), id_temp(NULL), random(NULL)
{
if (narg != 7) error->all(FLERR,"Illegal fix temp/csvr command");
// CSVR thermostat should be applied every step
nevery = 1;
scalar_flag = 1;
global_freq = nevery;
dynamic_group_allow = 1;
extscalar = 1;
tstr = NULL;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
tstr = new char[n];
strcpy(tstr,&arg[3][2]);
tstyle = EQUAL;
} else {
t_start = force->numeric(FLERR,arg[3]);
t_target = t_start;
tstyle = CONSTANT;
}
t_stop = force->numeric(FLERR,arg[4]);
t_period = force->numeric(FLERR,arg[5]);
int seed = force->inumeric(FLERR,arg[6]);
// error checks
if (t_period <= 0.0) error->all(FLERR,"Illegal fix temp/csvr command");
if (seed <= 0) error->all(FLERR,"Illegal fix temp/csvr command");
random = new RanMars(lmp,seed + comm->me);
// create a new compute temp style
// id = fix-ID + temp, compute group = fix group
int n = strlen(id) + 6;
id_temp = new char[n];
strcpy(id_temp,id);
strcat(id_temp,"_temp");
char **newarg = new char*[3];
newarg[0] = id_temp;
newarg[1] = group->names[igroup];
newarg[2] = (char *) "temp";
modify->add_compute(3,newarg);
delete [] newarg;
tflag = 1;
nmax = -1;
energy = 0.0;
}
/* ---------------------------------------------------------------------- */
FixTempCSVR::~FixTempCSVR()
{
delete [] tstr;
// delete temperature if fix created it
if (tflag) modify->delete_compute(id_temp);
delete [] id_temp;
delete random;
nmax = -1;
}
/* ---------------------------------------------------------------------- */
int FixTempCSVR::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
mask |= THERMO_ENERGY;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixTempCSVR::init()
{
// check variable
if (tstr) {
tvar = input->variable->find(tstr);
if (tvar < 0)
error->all(FLERR,"Variable name for fix temp/csvr does not exist");
if (input->variable->equalstyle(tvar)) tstyle = EQUAL;
else error->all(FLERR,"Variable for fix temp/csvr is invalid style");
}
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Temperature ID for fix temp/csvr does not exist");
temperature = modify->compute[icompute];
if (temperature->tempbias) which = BIAS;
else which = NOBIAS;
}
/* ---------------------------------------------------------------------- */
void FixTempCSVR::end_of_step()
{
// set current t_target
// if variable temp, evaluate variable, wrap with clear/add
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
if (tstyle == CONSTANT)
t_target = t_start + delta * (t_stop-t_start);
else {
modify->clearstep_compute();
t_target = input->variable->compute_equal(tvar);
if (t_target < 0.0)
error->one(FLERR,
"Fix temp/csvr variable returned negative temperature");
modify->addstep_compute(update->ntimestep + nevery);
}
const double t_current = temperature->compute_scalar();
const double efactor = 0.5 * temperature->dof * force->boltz;
const double ekin_old = t_current * efactor;
const double ekin_new = t_target * efactor;
// there is nothing to do, if there are no degrees of freedom
if (temperature->dof < 1) return;
// compute velocity scaling factor on root node and broadcast
double lamda;
if (comm->me == 0) {
lamda = resamplekin(ekin_old, ekin_new);
}
MPI_Bcast(&lamda,1,MPI_DOUBLE,0,world);
double * const * const v = atom->v;
const int * const mask = atom->mask;
const int nlocal = atom->nlocal;
if (which == NOBIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
v[i][0] *= lamda;
v[i][1] *= lamda;
v[i][2] *= lamda;
}
}
} else {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
temperature->remove_bias(i,v[i]);
v[i][0] *= lamda;
v[i][1] *= lamda;
v[i][2] *= lamda;
temperature->restore_bias(i,v[i]);
}
}
}
// tally the kinetic energy transferred between heat bath and system
energy += ekin_old * (1.0 - lamda*lamda);
}
/* ---------------------------------------------------------------------- */
int FixTempCSVR::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"temp") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (tflag) {
modify->delete_compute(id_temp);
tflag = 0;
}
delete [] id_temp;
int n = strlen(arg[1]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[1]);
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Could not find fix_modify temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,
"Fix_modify temperature ID does not compute temperature");
if (temperature->igroup != igroup && comm->me == 0)
error->warning(FLERR,"Group for fix_modify temp != fix group");
return 2;
}
return 0;
}
/* ---------------------------------------------------------------------- */
void FixTempCSVR::reset_target(double t_new)
{
t_target = t_start = t_stop = t_new;
}
/* ---------------------------------------------------------------------- */
double FixTempCSVR::compute_scalar()
{
return energy;
}
/* ----------------------------------------------------------------------
extract thermostat properties
------------------------------------------------------------------------- */
void *FixTempCSVR::extract(const char *str, int &dim)
{
dim=0;
if (strcmp(str,"t_target") == 0) {
return &t_target;
}
return NULL;
}
diff --git a/src/fix_temp_rescale.cpp b/src/fix_temp_rescale.cpp
index 5e6036214..8af39df51 100644
--- a/src/fix_temp_rescale.cpp
+++ b/src/fix_temp_rescale.cpp
@@ -1,256 +1,257 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "fix_temp_rescale.h"
#include "atom.h"
#include "force.h"
#include "group.h"
#include "update.h"
#include "domain.h"
#include "region.h"
#include "comm.h"
#include "input.h"
#include "variable.h"
#include "modify.h"
#include "compute.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NOBIAS,BIAS};
enum{CONSTANT,EQUAL};
/* ---------------------------------------------------------------------- */
FixTempRescale::FixTempRescale(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ tstr(NULL), id_temp(NULL), tflag(0)
{
if (narg < 8) error->all(FLERR,"Illegal fix temp/rescale command");
nevery = force->inumeric(FLERR,arg[3]);
if (nevery <= 0) error->all(FLERR,"Illegal fix temp/rescale command");
scalar_flag = 1;
global_freq = nevery;
extscalar = 1;
tstr = NULL;
if (strstr(arg[4],"v_") == arg[4]) {
int n = strlen(&arg[4][2]) + 1;
tstr = new char[n];
strcpy(tstr,&arg[4][2]);
tstyle = EQUAL;
} else {
t_start = force->numeric(FLERR,arg[4]);
t_target = t_start;
tstyle = CONSTANT;
}
t_stop = force->numeric(FLERR,arg[5]);
t_window = force->numeric(FLERR,arg[6]);
fraction = force->numeric(FLERR,arg[7]);
// create a new compute temp
// id = fix-ID + temp, compute group = fix group
int n = strlen(id) + 6;
id_temp = new char[n];
strcpy(id_temp,id);
strcat(id_temp,"_temp");
char **newarg = new char*[6];
newarg[0] = id_temp;
newarg[1] = group->names[igroup];
newarg[2] = (char *) "temp";
modify->add_compute(3,newarg);
delete [] newarg;
tflag = 1;
energy = 0.0;
}
/* ---------------------------------------------------------------------- */
FixTempRescale::~FixTempRescale()
{
delete [] tstr;
// delete temperature if fix created it
if (tflag) modify->delete_compute(id_temp);
delete [] id_temp;
}
/* ---------------------------------------------------------------------- */
int FixTempRescale::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
mask |= THERMO_ENERGY;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixTempRescale::init()
{
// check variable
if (tstr) {
tvar = input->variable->find(tstr);
if (tvar < 0)
error->all(FLERR,"Variable name for fix temp/rescale does not exist");
if (input->variable->equalstyle(tvar)) tstyle = EQUAL;
else error->all(FLERR,"Variable for fix temp/rescale is invalid style");
}
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Temperature ID for fix temp/rescale does not exist");
temperature = modify->compute[icompute];
if (temperature->tempbias) which = BIAS;
else which = NOBIAS;
}
/* ---------------------------------------------------------------------- */
void FixTempRescale::end_of_step()
{
double t_current = temperature->compute_scalar();
// there is nothing to do, if there are no degrees of freedom
if (temperature->dof < 1) return;
// protect against division by zero.
if (t_current == 0.0)
error->all(FLERR,"Computed temperature for fix temp/rescale cannot be 0.0");
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
// set current t_target
// if variable temp, evaluate variable, wrap with clear/add
if (tstyle == CONSTANT)
t_target = t_start + delta * (t_stop-t_start);
else {
modify->clearstep_compute();
t_target = input->variable->compute_equal(tvar);
if (t_target < 0.0)
error->one(FLERR,
"Fix temp/rescale variable returned negative temperature");
modify->addstep_compute(update->ntimestep + nevery);
}
// rescale velocity of appropriate atoms if outside window
// for BIAS:
// temperature is current, so do not need to re-compute
// OK to not test returned v = 0, since factor is multiplied by v
if (fabs(t_current-t_target) > t_window) {
t_target = t_current - fraction*(t_current-t_target);
double factor = sqrt(t_target/t_current);
double efactor = 0.5 * force->boltz * temperature->dof;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
energy += (t_current-t_target) * efactor;
if (which == NOBIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
v[i][0] *= factor;
v[i][1] *= factor;
v[i][2] *= factor;
}
}
} else {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
temperature->remove_bias(i,v[i]);
v[i][0] *= factor;
v[i][1] *= factor;
v[i][2] *= factor;
temperature->restore_bias(i,v[i]);
}
}
}
}
}
/* ---------------------------------------------------------------------- */
int FixTempRescale::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"temp") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (tflag) {
modify->delete_compute(id_temp);
tflag = 0;
}
delete [] id_temp;
int n = strlen(arg[1]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[1]);
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Could not find fix_modify temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,
"Fix_modify temperature ID does not compute temperature");
if (temperature->igroup != igroup && comm->me == 0)
error->warning(FLERR,"Group for fix_modify temp != fix group");
return 2;
}
return 0;
}
/* ---------------------------------------------------------------------- */
void FixTempRescale::reset_target(double t_new)
{
t_target = t_start = t_stop = t_new;
}
/* ---------------------------------------------------------------------- */
double FixTempRescale::compute_scalar()
{
return energy;
}
/* ----------------------------------------------------------------------
extract thermostat properties
------------------------------------------------------------------------- */
void *FixTempRescale::extract(const char *str, int &dim)
{
if (strcmp(str,"t_target") == 0) {
dim = 0;
return &t_target;
}
return NULL;
}
diff --git a/src/fix_tmd.cpp b/src/fix_tmd.cpp
index d32668536..a94fbdcad 100644
--- a/src/fix_tmd.cpp
+++ b/src/fix_tmd.cpp
@@ -1,547 +1,546 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Paul Crozier (SNL)
Christian Burisch (Bochum Univeristy, Germany)
------------------------------------------------------------------------- */
#include <mpi.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "fix_tmd.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "group.h"
#include "respa.h"
#include "force.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
#define CHUNK 1000
#define MAXLINE 256
/* ---------------------------------------------------------------------- */
-FixTMD::FixTMD(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
+FixTMD::FixTMD(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg),
+nfileevery(0), fp(NULL), xf(NULL), xold(NULL)
{
if (narg < 6) error->all(FLERR,"Illegal fix tmd command");
rho_stop = force->numeric(FLERR,arg[3]);
nfileevery = force->inumeric(FLERR,arg[5]);
if (rho_stop < 0 || nfileevery < 0)
error->all(FLERR,"Illegal fix tmd command");
if (nfileevery && narg != 7) error->all(FLERR,"Illegal fix tmd command");
MPI_Comm_rank(world,&me);
// perform initial allocation of atom-based arrays
// register with Atom class
- xf = NULL;
- xold = NULL;
grow_arrays(atom->nmax);
atom->add_callback(0);
// make sure an atom map exists before reading in target coordinates
if (atom->map_style == 0)
error->all(FLERR,"Cannot use fix TMD unless atom map exists");
// read from arg[4] and store coordinates of final target in xf
readfile(arg[4]);
// open arg[6] statistics file and write header
if (nfileevery) {
if (narg != 7) error->all(FLERR,"Illegal fix tmd command");
if (me == 0) {
fp = fopen(arg[6],"w");
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open fix tmd file %s",arg[6]);
error->one(FLERR,str);
}
fprintf(fp,"%s %s\n","# Step rho_target rho_old gamma_back",
"gamma_forward lambda work_lambda work_analytical");
}
}
masstotal = group->mass(igroup);
if (masstotal == 0.0)
error->all(FLERR,"Cannot use fix TMD on massless group");
// rho_start = initial rho
// xold = initial x or 0.0 if not in group
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double **x = atom->x;
double *mass = atom->mass;
int nlocal = atom->nlocal;
double dx,dy,dz;
rho_start = 0.0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
domain->unmap(x[i],image[i],xold[i]);
dx = xold[i][0] - xf[i][0];
dy = xold[i][1] - xf[i][1];
dz = xold[i][2] - xf[i][2];
rho_start += mass[type[i]]*(dx*dx + dy*dy + dz*dz);
} else xold[i][0] = xold[i][1] = xold[i][2] = 0.0;
}
double rho_start_total;
MPI_Allreduce(&rho_start,&rho_start_total,1,MPI_DOUBLE,MPI_SUM,world);
rho_start = sqrt(rho_start_total/masstotal);
rho_old = rho_start;
work_lambda = 0.0;
work_analytical = 0.0;
previous_stat = 0;
}
/* ---------------------------------------------------------------------- */
FixTMD::~FixTMD()
{
if (nfileevery && me == 0) fclose(fp);
// unregister callbacks to this fix from Atom class
atom->delete_callback(id,0);
// delete locally stored arrays
memory->destroy(xf);
memory->destroy(xold);
}
/* ---------------------------------------------------------------------- */
int FixTMD::setmask()
{
int mask = 0;
mask |= INITIAL_INTEGRATE;
mask |= INITIAL_INTEGRATE_RESPA;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixTMD::init()
{
// check that no integrator fix comes after a TMD fix
int flag = 0;
for (int i = 0; i < modify->nfix; i++) {
if (strcmp(modify->fix[i]->style,"tmd") == 0) flag = 1;
if (flag && modify->fix[i]->time_integrate) flag = 2;
}
if (flag == 2) error->all(FLERR,"Fix tmd must come after integration fixes");
// timesteps
dtv = update->dt;
dtf = update->dt * force->ftm2v;
if (strstr(update->integrate_style,"respa"))
step_respa = ((Respa *) update->integrate)->step;
}
/* ---------------------------------------------------------------------- */
void FixTMD::initial_integrate(int vflag)
{
double a,b,c,d,e;
double dx,dy,dz,dxkt,dykt,dzkt;
double dxold,dyold,dzold,xback,yback,zback;
double gamma_forward,gamma_back,gamma_max,lambda;
double kt,fr,kttotal,frtotal,dtfm;
double unwrap[3];
double **x = atom->x;
double **v = atom->v;
double **f = atom->f;
double *mass = atom->mass;
imageint *image = atom->image;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
double rho_target = rho_start + delta * (rho_stop - rho_start);
// compute the Lagrange multiplier
a = b = e = 0.0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
dxold = xold[i][0] - xf[i][0];
dyold = xold[i][1] - xf[i][1];
dzold = xold[i][2] - xf[i][2];
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - xf[i][0];
dy = unwrap[1] - xf[i][1];
dz = unwrap[2] - xf[i][2];
a += mass[type[i]]*(dxold*dxold + dyold*dyold + dzold*dzold);
b += mass[type[i]]*(dx *dxold + dy *dyold + dz *dzold);
e += mass[type[i]]*(dx *dx + dy *dy + dz *dz);
}
}
double abe[3],abetotal[3];
abe[0] = a; abe[1] = b; abe[2] = e;
MPI_Allreduce(abe,abetotal,3,MPI_DOUBLE,MPI_SUM,world);
a = abetotal[0]/masstotal;
b = 2.0*abetotal[1]/masstotal;
e = abetotal[2]/masstotal;
c = e - rho_old*rho_old;
d = b*b - 4*a*c;
if (d < 0) d = 0;
if (b >= 0) gamma_max = (-b - sqrt(d))/(2*a);
else gamma_max = (-b + sqrt(d))/(2*a);
gamma_back = c/(a*gamma_max);
if (a == 0.0) gamma_back = 0;
c = e - rho_target*rho_target;
d = b*b - 4*a*c;
if (d < 0) d = 0;
if (b >= 0) gamma_max = (-b - sqrt(d))/(2*a);
else gamma_max = (-b + sqrt(d))/(2*a);
gamma_forward = c/(a*gamma_max);
if (a == 0.0) gamma_forward = 0;
fr = kt = 0.0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
dxold = xold[i][0] - xf[i][0];
dyold = xold[i][1] - xf[i][1];
dzold = xold[i][2] - xf[i][2];
domain->unmap(x[i],image[i],unwrap);
xback = unwrap[0] + gamma_back*dxold;
yback = unwrap[1] + gamma_back*dyold;
zback = unwrap[2] + gamma_back*dzold;
dxkt = xback - xold[i][0];
dykt = yback - xold[i][1];
dzkt = zback - xold[i][2];
kt += mass[type[i]]*(dxkt*dxkt + dykt*dykt + dzkt*dzkt);
fr += f[i][0]*dxold + f[i][1]*dyold + f[i][2]*dzold;
}
}
double r[2],rtotal[2];
r[0] = fr; r[1] = kt;
MPI_Allreduce(r,rtotal,2,MPI_DOUBLE,MPI_SUM,world);
frtotal = rtotal[0];
kttotal = rtotal[1];
// stat write of mean constraint force based on previous time step constraint
if (nfileevery && me == 0) {
work_analytical +=
(-frtotal - kttotal/dtv/dtf)*(rho_target - rho_old)/rho_old;
lambda = gamma_back*rho_old*masstotal/dtv/dtf;
work_lambda += lambda*(rho_target - rho_old);
if (!(update->ntimestep % nfileevery) &&
(previous_stat != update->ntimestep)) {
fprintf(fp,
BIGINT_FORMAT " %g %g %g %g %g %g %g\n",
update->ntimestep,rho_target,rho_old,
gamma_back,gamma_forward,lambda,work_lambda,work_analytical);
fflush(fp);
previous_stat = update->ntimestep;
}
}
rho_old = rho_target;
// apply the constraint and save constrained positions for next step
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
dtfm = dtf / mass[type[i]];
dxold = xold[i][0] - xf[i][0];
x[i][0] += gamma_forward*dxold;
v[i][0] += gamma_forward*dxold/dtv;
f[i][0] += gamma_forward*dxold/dtv/dtfm;
dyold = xold[i][1] - xf[i][1];
x[i][1] += gamma_forward*dyold;
v[i][1] += gamma_forward*dyold/dtv;
f[i][1] += gamma_forward*dyold/dtv/dtfm;
dzold = xold[i][2] - xf[i][2];
x[i][2] += gamma_forward*dzold;
v[i][2] += gamma_forward*dzold/dtv;
f[i][2] += gamma_forward*dzold/dtv/dtfm;
domain->unmap(x[i],image[i],xold[i]);
}
}
}
/* ---------------------------------------------------------------------- */
void FixTMD::initial_integrate_respa(int vflag, int ilevel, int flag)
{
if (flag) return; // only used by NPT,NPH
dtv = step_respa[ilevel];
dtf = step_respa[ilevel] * force->ftm2v;
if (ilevel == 0) initial_integrate(vflag);
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixTMD::memory_usage()
{
double bytes = 2*atom->nmax*3 * sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
allocate atom-based arrays
------------------------------------------------------------------------- */
void FixTMD::grow_arrays(int nmax)
{
memory->grow(xf,nmax,3,"fix_tmd:xf");
memory->grow(xold,nmax,3,"fix_tmd:xold");
}
/* ----------------------------------------------------------------------
copy values within local atom-based arrays
------------------------------------------------------------------------- */
void FixTMD::copy_arrays(int i, int j, int delflag)
{
xf[j][0] = xf[i][0];
xf[j][1] = xf[i][1];
xf[j][2] = xf[i][2];
xold[j][0] = xold[i][0];
xold[j][1] = xold[i][1];
xold[j][2] = xold[i][2];
}
/* ----------------------------------------------------------------------
pack values in local atom-based arrays for exchange with another proc
------------------------------------------------------------------------- */
int FixTMD::pack_exchange(int i, double *buf)
{
buf[0] = xf[i][0];
buf[1] = xf[i][1];
buf[2] = xf[i][2];
buf[3] = xold[i][0];
buf[4] = xold[i][1];
buf[5] = xold[i][2];
return 6;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based arrays from exchange with another proc
------------------------------------------------------------------------- */
int FixTMD::unpack_exchange(int nlocal, double *buf)
{
xf[nlocal][0] = buf[0];
xf[nlocal][1] = buf[1];
xf[nlocal][2] = buf[2];
xold[nlocal][0] = buf[3];
xold[nlocal][1] = buf[4];
xold[nlocal][2] = buf[5];
return 6;
}
/* ----------------------------------------------------------------------
read target coordinates from file, store with appropriate atom
------------------------------------------------------------------------- */
void FixTMD::readfile(char *file)
{
if (me == 0) {
if (screen) fprintf(screen,"Reading TMD target file %s ...\n",file);
open(file);
}
int *mask = atom->mask;
int nlocal = atom->nlocal;
char *buffer = new char[CHUNK*MAXLINE];
char *next,*bufptr;
int i,m,nlines,imageflag,ix,iy,iz;
tagint itag;
double x,y,z,xprd,yprd,zprd;
int firstline = 1;
int ncount = 0;
char *eof = NULL;
xprd = yprd = zprd = -1.0;
while (!eof) {
if (me == 0) {
m = 0;
for (nlines = 0; nlines < CHUNK; nlines++) {
eof = fgets(&buffer[m],MAXLINE,fp);
if (eof == NULL) break;
m += strlen(&buffer[m]);
}
if (buffer[m-1] != '\n') strcpy(&buffer[m++],"\n");
m++;
}
MPI_Bcast(&eof,1,MPI_INT,0,world);
MPI_Bcast(&nlines,1,MPI_INT,0,world);
MPI_Bcast(&m,1,MPI_INT,0,world);
MPI_Bcast(buffer,m,MPI_CHAR,0,world);
bufptr = buffer;
for (i = 0; i < nlines; i++) {
next = strchr(bufptr,'\n');
*next = '\0';
if (firstline) {
if (strstr(bufptr,"xlo xhi")) {
double lo,hi;
sscanf(bufptr,"%lg %lg",&lo,&hi);
xprd = hi - lo;
bufptr = next + 1;
continue;
} else if (strstr(bufptr,"ylo yhi")) {
double lo,hi;
sscanf(bufptr,"%lg %lg",&lo,&hi);
yprd = hi - lo;
bufptr = next + 1;
continue;
} else if (strstr(bufptr,"zlo zhi")) {
double lo,hi;
sscanf(bufptr,"%lg %lg",&lo,&hi);
zprd = hi - lo;
bufptr = next + 1;
continue;
} else if (atom->count_words(bufptr) == 4) {
if (xprd >= 0.0 || yprd >= 0.0 || zprd >= 0.0)
error->all(FLERR,"Incorrect format in TMD target file");
imageflag = 0;
firstline = 0;
} else if (atom->count_words(bufptr) == 7) {
if (xprd < 0.0 || yprd < 0.0 || zprd < 0.0)
error->all(FLERR,"Incorrect format in TMD target file");
imageflag = 1;
firstline = 0;
} else error->all(FLERR,"Incorrect format in TMD target file");
}
if (imageflag)
sscanf(bufptr,TAGINT_FORMAT " %lg %lg %lg %d %d %d",
&itag,&x,&y,&z,&ix,&iy,&iz);
else
sscanf(bufptr,TAGINT_FORMAT " %lg %lg %lg",&itag,&x,&y,&z);
m = atom->map(itag);
if (m >= 0 && m < nlocal && mask[m] & groupbit) {
if (imageflag) {
xf[m][0] = x + ix*xprd;
xf[m][1] = y + iy*yprd;
xf[m][2] = z + iz*zprd;
} else {
xf[m][0] = x;
xf[m][1] = y;
xf[m][2] = z;
}
ncount++;
}
bufptr = next + 1;
}
}
// clean up
delete [] buffer;
if (me == 0) {
if (compressed) pclose(fp);
else fclose(fp);
}
// check that all atoms in group were listed in target file
// set xf = 0.0 for atoms not in group
int gcount = 0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) gcount++;
else xf[i][0] = xf[i][1] = xf[i][2] = 0.0;
int flag = 0;
if (gcount != ncount) flag = 1;
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall) error->all(FLERR,"TMD target file did not list all group atoms");
}
/* ----------------------------------------------------------------------
proc 0 opens TMD data file
test if gzipped
------------------------------------------------------------------------- */
void FixTMD::open(char *file)
{
compressed = 0;
char *suffix = file + strlen(file) - 3;
if (suffix > file && strcmp(suffix,".gz") == 0) compressed = 1;
if (!compressed) fp = fopen(file,"r");
else {
#ifdef LAMMPS_GZIP
char gunzip[128];
sprintf(gunzip,"gzip -c -d %s",file);
#ifdef _WIN32
fp = _popen(gunzip,"rb");
#else
fp = popen(gunzip,"r");
#endif
#else
error->one(FLERR,"Cannot open gzipped file");
#endif
}
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open file %s",file);
error->one(FLERR,str);
}
}
/* ---------------------------------------------------------------------- */
void FixTMD::reset_dt()
{
dtv = update->dt;
dtf = update->dt * force->ftm2v;
}
diff --git a/src/fix_vector.cpp b/src/fix_vector.cpp
index d4bd3087d..07841d5ba 100644
--- a/src/fix_vector.cpp
+++ b/src/fix_vector.cpp
@@ -1,337 +1,339 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <string.h>
#include "fix_vector.h"
#include "update.h"
#include "force.h"
#include "modify.h"
#include "compute.h"
#include "group.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{COMPUTE,FIX,VARIABLE};
enum{ONE,RUNNING,WINDOW};
enum{SCALAR,VECTOR};
#define INVOKED_SCALAR 1
#define INVOKED_VECTOR 2
#define INVOKED_ARRAY 4
/* ---------------------------------------------------------------------- */
FixVector::FixVector(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ nvalues(0), which(NULL), argindex(NULL), value2index(NULL), ids(NULL), vector(NULL), array(NULL)
{
if (narg < 5) error->all(FLERR,"Illegal fix vector command");
nevery = force->inumeric(FLERR,arg[3]);
if (nevery <= 0) error->all(FLERR,"Illegal fix vector command");
nvalues = narg-4;
which = new int[nvalues];
argindex = new int[nvalues];
value2index = new int[nvalues];
ids = new char*[nvalues];
nvalues = 0;
for (int iarg = 4; iarg < narg; iarg++) {
if (arg[iarg][0] == 'c') which[nvalues] = COMPUTE;
else if (arg[iarg][0] == 'f') which[nvalues] = FIX;
else if (arg[iarg][0] == 'v') which[nvalues] = VARIABLE;
else error->all(FLERR,"Illegal fix vector command");
int n = strlen(arg[iarg]);
char *suffix = new char[n];
strcpy(suffix,&arg[iarg][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Illegal fix vector command");
argindex[nvalues] = atoi(ptr+1);
*ptr = '\0';
} else argindex[nvalues] = 0;
n = strlen(suffix) + 1;
ids[nvalues] = new char[n];
strcpy(ids[nvalues],suffix);
delete [] suffix;
nvalues++;
}
// setup and error check
// for fix inputs, check that fix frequency is acceptable
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix vector does not exist");
if (argindex[i] == 0 && modify->compute[icompute]->scalar_flag == 0)
error->all(FLERR,"Fix vector compute does not calculate a scalar");
if (argindex[i] && modify->compute[icompute]->vector_flag == 0)
error->all(FLERR,"Fix vector compute does not calculate a vector");
if (argindex[i] && argindex[i] > modify->compute[icompute]->size_vector)
error->all(FLERR,
"Fix vector compute vector is accessed out-of-range");
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix vector does not exist");
if (argindex[i] == 0 && modify->fix[ifix]->scalar_flag == 0)
error->all(FLERR,"Fix vector fix does not calculate a scalar");
if (argindex[i] && modify->fix[ifix]->vector_flag == 0)
error->all(FLERR,"Fix vector fix does not calculate a vector");
if (argindex[i] && argindex[i] > modify->fix[ifix]->size_vector)
error->all(FLERR,"Fix vector fix vector is accessed out-of-range");
if (nevery % modify->fix[ifix]->global_freq)
error->all(FLERR,
"Fix for fix vector not computed at compatible time");
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix vector does not exist");
if (argindex[i] == 0 && input->variable->equalstyle(ivariable) == 0)
error->all(FLERR,"Fix vector variable is not equal-style variable");
if (argindex[i] && input->variable->vectorstyle(ivariable) == 0)
error->all(FLERR,"Fix vector variable is not vector-style variable");
}
}
// this fix produces either a global vector or array
// intensive/extensive flags set by compute,fix,variable that produces value
int value,finalvalue;
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
Compute *compute = modify->compute[modify->find_compute(ids[i])];
if (argindex[0] == 0) value = compute->extscalar;
else if (compute->extvector >= 0) value = compute->extvector;
else value = compute->extlist[argindex[0]-1];
} else if (which[i] == FIX) {
Fix *fix = modify->fix[modify->find_fix(ids[i])];
if (argindex[i] == 0) value = fix->extvector;
else value = fix->extarray;
} else if (which[i] == VARIABLE) value = 0;
if (i == 0) finalvalue = value;
else if (value != finalvalue)
error->all(FLERR,"Fix vector cannot set output array "
"intensive/extensive from these inputs");
}
if (nvalues == 1) {
vector_flag = 1;
extvector = finalvalue;
} else {
array_flag = 1;
size_array_cols = nvalues;
extarray = finalvalue;
}
global_freq = nevery;
time_depend = 1;
// ncount = current size of vector or array
vector = NULL;
array = NULL;
ncount = ncountmax = 0;
if (nvalues == 1) size_vector = 0;
else size_array_rows = 0;
// nextstep = next step on which end_of_step does something
// add nextstep to all computes that store invocation times
// since don't know a priori which are invoked by this fix
// once in end_of_step() can set timestep for ones actually invoked
nextstep = (update->ntimestep/nevery)*nevery;
if (nextstep < update->ntimestep) nextstep += nevery;
modify->addstep_compute_all(nextstep);
// initialstep = first step the vector/array will store values for
initialstep = nextstep;
}
/* ---------------------------------------------------------------------- */
FixVector::~FixVector()
{
delete [] which;
delete [] argindex;
delete [] value2index;
for (int i = 0; i < nvalues; i++) delete [] ids[i];
delete [] ids;
memory->destroy(vector);
memory->destroy(array);
}
/* ---------------------------------------------------------------------- */
int FixVector::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixVector::init()
{
// set current indices for all computes,fixes,variables
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix vector does not exist");
value2index[i] = icompute;
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix vector does not exist");
value2index[i] = ifix;
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix vector does not exist");
value2index[i] = ivariable;
}
}
// reallocate vector or array for accumulated size at end of run
// use endstep to allow for subsequent runs with "pre no"
// nsize = # of entries from initialstep to finalstep
bigint finalstep = update->endstep/nevery * nevery;
if (finalstep > update->endstep) finalstep -= nevery;
ncountmax = (finalstep-initialstep)/nevery + 1;
if (nvalues == 1) memory->grow(vector,ncountmax,"vector:vector");
else memory->grow(array,ncountmax,nvalues,"vector:array");
}
/* ----------------------------------------------------------------------
only does something if nvalid = current timestep
------------------------------------------------------------------------- */
void FixVector::setup(int vflag)
{
end_of_step();
}
/* ---------------------------------------------------------------------- */
void FixVector::end_of_step()
{
// skip if not step which requires doing something
if (update->ntimestep != nextstep) return;
if (ncount == ncountmax)
error->all(FLERR,"Overflow of allocated fix vector storage");
// accumulate results of computes,fixes,variables to local copy
// compute/fix/variable may invoke computes so wrap with clear/add
double *result;
if (nvalues == 1) result = &vector[ncount];
else result = array[ncount];
modify->clearstep_compute();
for (int i = 0; i < nvalues; i++) {
int m = value2index[i];
// invoke compute if not previously invoked
if (which[i] == COMPUTE) {
Compute *compute = modify->compute[m];
if (argindex[i] == 0) {
if (!(compute->invoked_flag & INVOKED_SCALAR)) {
compute->compute_scalar();
compute->invoked_flag |= INVOKED_SCALAR;
}
result[i] = compute->scalar;
} else {
if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
result[i] = compute->vector[argindex[i]-1];
}
// access fix fields, guaranteed to be ready
} else if (which[i] == FIX) {
if (argindex[i] == 0)
result[i] = modify->fix[m]->compute_scalar();
else
result[i] = modify->fix[m]->compute_vector(argindex[i]-1);
// evaluate equal-style or vector-style variable
- } else if (which[i] == VARIABLE)
- if (argindex[i] == 0)
+ } else if (which[i] == VARIABLE) {
+ if (argindex[i] == 0)
result[i] = input->variable->compute_equal(m);
else {
double *varvec;
int nvec = input->variable->compute_vector(m,&varvec);
int index = argindex[i];
if (nvec < index) result[i] = 0.0;
else result[i] = varvec[index-1];
}
+ }
}
// trigger computes on next needed step
nextstep += nevery;
modify->addstep_compute(nextstep);
// update size of vector or array
ncount++;
if (nvalues == 1) size_vector++;
else size_array_rows++;
}
/* ----------------------------------------------------------------------
return Ith vector value
------------------------------------------------------------------------- */
double FixVector::compute_vector(int i)
{
return vector[i];
}
/* ----------------------------------------------------------------------
return I,J array value
------------------------------------------------------------------------- */
double FixVector::compute_array(int i, int j)
{
return array[i][j];
}
diff --git a/src/fix_viscous.cpp b/src/fix_viscous.cpp
index 9c82b34d8..911fcf84e 100644
--- a/src/fix_viscous.cpp
+++ b/src/fix_viscous.cpp
@@ -1,144 +1,145 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "fix_viscous.h"
#include "atom.h"
#include "update.h"
#include "respa.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixViscous::FixViscous(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ gamma(NULL)
{
if (narg < 4) error->all(FLERR,"Illegal fix viscous command");
double gamma_one = force->numeric(FLERR,arg[3]);
gamma = new double[atom->ntypes+1];
for (int i = 1; i <= atom->ntypes; i++) gamma[i] = gamma_one;
// optional args
int iarg = 4;
while (iarg < narg) {
if (strcmp(arg[iarg],"scale") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix viscous command");
int itype = force->inumeric(FLERR,arg[iarg+1]);
double scale = force->numeric(FLERR,arg[iarg+2]);
if (itype <= 0 || itype > atom->ntypes)
error->all(FLERR,"Illegal fix viscous command");
gamma[itype] = gamma_one * scale;
iarg += 3;
} else error->all(FLERR,"Illegal fix viscous command");
}
respa_level_support = 1;
ilevel_respa = 0;
}
/* ---------------------------------------------------------------------- */
FixViscous::~FixViscous()
{
delete [] gamma;
}
/* ---------------------------------------------------------------------- */
int FixViscous::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixViscous::init()
{
int max_respa = 0;
if (strstr(update->integrate_style,"respa")) {
ilevel_respa = max_respa = ((Respa *) update->integrate)->nlevels-1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,max_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixViscous::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixViscous::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixViscous::post_force(int vflag)
{
// apply drag force to atoms in group
// direction is opposed to velocity vector
// magnitude depends on atom type
double **v = atom->v;
double **f = atom->f;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
double drag;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
drag = gamma[type[i]];
f[i][0] -= drag*v[i][0];
f[i][1] -= drag*v[i][1];
f[i][2] -= drag*v[i][2];
}
}
/* ---------------------------------------------------------------------- */
void FixViscous::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == ilevel_respa) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixViscous::min_post_force(int vflag)
{
post_force(vflag);
}
diff --git a/src/fix_wall.cpp b/src/fix_wall.cpp
index 83d34c306..503b87f4a 100644
--- a/src/fix_wall.cpp
+++ b/src/fix_wall.cpp
@@ -1,378 +1,378 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "fix_wall.h"
#include "atom.h"
#include "input.h"
#include "variable.h"
#include "domain.h"
#include "lattice.h"
#include "update.h"
#include "modify.h"
#include "respa.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{XLO=0,XHI=1,YLO=2,YHI=3,ZLO=4,ZHI=5};
enum{NONE=0,EDGE,CONSTANT,VARIABLE};
/* ---------------------------------------------------------------------- */
FixWall::FixWall(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ nwall(0)
{
scalar_flag = 1;
vector_flag = 1;
global_freq = 1;
extscalar = 1;
extvector = 1;
respa_level_support = 1;
ilevel_respa = 0;
// parse args
- nwall = 0;
int scaleflag = 1;
fldflag = 0;
int pbcflag = 0;
for (int i = 0; i < 6; i++) xstr[i] = estr[i] = sstr[i] = NULL;
int iarg = 3;
while (iarg < narg) {
if ((strcmp(arg[iarg],"xlo") == 0) || (strcmp(arg[iarg],"xhi") == 0) ||
(strcmp(arg[iarg],"ylo") == 0) || (strcmp(arg[iarg],"yhi") == 0) ||
(strcmp(arg[iarg],"zlo") == 0) || (strcmp(arg[iarg],"zhi") == 0)) {
if (iarg+5 > narg) error->all(FLERR,"Illegal fix wall command");
int newwall;
if (strcmp(arg[iarg],"xlo") == 0) newwall = XLO;
else if (strcmp(arg[iarg],"xhi") == 0) newwall = XHI;
else if (strcmp(arg[iarg],"ylo") == 0) newwall = YLO;
else if (strcmp(arg[iarg],"yhi") == 0) newwall = YHI;
else if (strcmp(arg[iarg],"zlo") == 0) newwall = ZLO;
else if (strcmp(arg[iarg],"zhi") == 0) newwall = ZHI;
for (int m = 0; (m < nwall) && (m < 6); m++)
if (newwall == wallwhich[m])
error->all(FLERR,"Wall defined twice in fix wall command");
wallwhich[nwall] = newwall;
if (strcmp(arg[iarg+1],"EDGE") == 0) {
xstyle[nwall] = EDGE;
int dim = wallwhich[nwall] / 2;
int side = wallwhich[nwall] % 2;
if (side == 0) coord0[nwall] = domain->boxlo[dim];
else coord0[nwall] = domain->boxhi[dim];
} else if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) {
xstyle[nwall] = VARIABLE;
int n = strlen(&arg[iarg+1][2]) + 1;
xstr[nwall] = new char[n];
strcpy(xstr[nwall],&arg[iarg+1][2]);
} else {
xstyle[nwall] = CONSTANT;
coord0[nwall] = force->numeric(FLERR,arg[iarg+1]);
}
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) {
int n = strlen(&arg[iarg+2][2]) + 1;
estr[nwall] = new char[n];
strcpy(estr[nwall],&arg[iarg+2][2]);
estyle[nwall] = VARIABLE;
} else {
epsilon[nwall] = force->numeric(FLERR,arg[iarg+2]);
estyle[nwall] = CONSTANT;
}
if (strstr(arg[iarg+3],"v_") == arg[iarg+3]) {
int n = strlen(&arg[iarg+3][2]) + 1;
sstr[nwall] = new char[n];
strcpy(sstr[nwall],&arg[iarg+3][2]);
sstyle[nwall] = VARIABLE;
} else {
sigma[nwall] = force->numeric(FLERR,arg[iarg+3]);
sstyle[nwall] = CONSTANT;
}
cutoff[nwall] = force->numeric(FLERR,arg[iarg+4]);
nwall++;
iarg += 5;
} else if (strcmp(arg[iarg],"units") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix wall command");
if (strcmp(arg[iarg+1],"box") == 0) scaleflag = 0;
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = 1;
else error->all(FLERR,"Illegal fix wall command");
iarg += 2;
} else if (strcmp(arg[iarg],"fld") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix wall command");
if (strcmp(arg[iarg+1],"no") == 0) fldflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) fldflag = 1;
else error->all(FLERR,"Illegal fix wall command");
iarg += 2;
} else if (strcmp(arg[iarg],"pbc") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix wall command");
if (strcmp(arg[iarg+1],"yes") == 0) pbcflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) pbcflag = 0;
else error->all(FLERR,"Illegal fix wall command");
iarg += 2;
} else error->all(FLERR,"Illegal fix wall command");
}
size_vector = nwall;
// error checks
if (nwall == 0) error->all(FLERR,"Illegal fix wall command");
for (int m = 0; m < nwall; m++)
if (cutoff[m] <= 0.0)
error->all(FLERR,"Fix wall cutoff <= 0.0");
for (int m = 0; m < nwall; m++)
if ((wallwhich[m] == ZLO || wallwhich[m] == ZHI) && domain->dimension == 2)
error->all(FLERR,"Cannot use fix wall zlo/zhi for a 2d simulation");
if (!pbcflag) {
for (int m = 0; m < nwall; m++) {
if ((wallwhich[m] == XLO || wallwhich[m] == XHI) && domain->xperiodic)
error->all(FLERR,"Cannot use fix wall in periodic dimension");
if ((wallwhich[m] == YLO || wallwhich[m] == YHI) && domain->yperiodic)
error->all(FLERR,"Cannot use fix wall in periodic dimension");
if ((wallwhich[m] == ZLO || wallwhich[m] == ZHI) && domain->zperiodic)
error->all(FLERR,"Cannot use fix wall in periodic dimension");
}
}
// scale factors for wall position for CONSTANT and VARIABLE walls
int flag = 0;
for (int m = 0; m < nwall; m++)
if (xstyle[m] != EDGE) flag = 1;
if (flag) {
if (scaleflag) {
xscale = domain->lattice->xlattice;
yscale = domain->lattice->ylattice;
zscale = domain->lattice->zlattice;
}
else xscale = yscale = zscale = 1.0;
for (int m = 0; m < nwall; m++) {
if (xstyle[m] != CONSTANT) continue;
if (wallwhich[m] < YLO) coord0[m] *= xscale;
else if (wallwhich[m] < ZLO) coord0[m] *= yscale;
else coord0[m] *= zscale;
}
}
// set xflag if any wall positions are variable
// set varflag if any wall positions or parameters are variable
// set wstyle to VARIABLE if either epsilon or sigma is a variable
varflag = xflag = 0;
for (int m = 0; m < nwall; m++) {
if (xstyle[m] == VARIABLE) xflag = 1;
if (xflag || estyle[m] == VARIABLE || sstyle[m] == VARIABLE) varflag = 1;
if (estyle[m] == VARIABLE || sstyle[m] == VARIABLE) wstyle[m] = VARIABLE;
else wstyle[m] = CONSTANT;
}
eflag = 0;
for (int m = 0; m <= nwall; m++) ewall[m] = 0.0;
}
/* ---------------------------------------------------------------------- */
FixWall::~FixWall()
{
for (int m = 0; m < nwall; m++) {
delete [] xstr[m];
delete [] estr[m];
delete [] sstr[m];
}
}
/* ---------------------------------------------------------------------- */
int FixWall::setmask()
{
int mask = 0;
// FLD implicit needs to invoke wall forces before pair style
if (fldflag) mask |= PRE_FORCE;
else mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixWall::init()
{
for (int m = 0; m < nwall; m++) {
if (xstyle[m] == VARIABLE) {
xindex[m] = input->variable->find(xstr[m]);
if (xindex[m] < 0)
error->all(FLERR,"Variable name for fix wall does not exist");
if (!input->variable->equalstyle(xindex[m]))
error->all(FLERR,"Variable for fix wall is invalid style");
}
if (estyle[m] == VARIABLE) {
eindex[m] = input->variable->find(estr[m]);
if (eindex[m] < 0)
error->all(FLERR,"Variable name for fix wall does not exist");
if (!input->variable->equalstyle(eindex[m]))
error->all(FLERR,"Variable for fix wall is invalid style");
}
if (sstyle[m] == VARIABLE) {
sindex[m] = input->variable->find(sstr[m]);
if (sindex[m] < 0)
error->all(FLERR,"Variable name for fix wall does not exist");
if (!input->variable->equalstyle(sindex[m]))
error->all(FLERR,"Variable for fix wall is invalid style");
}
}
// setup coefficients
for (int m = 0; m < nwall; m++) precompute(m);
if (strstr(update->integrate_style,"respa")) {
ilevel_respa = ((Respa *) update->integrate)->nlevels-1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixWall::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet")) {
if (!fldflag) post_force(vflag);
} else {
((Respa *) update->integrate)->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixWall::min_setup(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
only called if fldflag set, in place of post_force
------------------------------------------------------------------------- */
void FixWall::pre_force(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixWall::post_force(int vflag)
{
eflag = 0;
for (int m = 0; m <= nwall; m++) ewall[m] = 0.0;
// coord = current position of wall
// evaluate variables if necessary, wrap with clear/add
// for epsilon/sigma variables need to re-invoke precompute()
if (varflag) modify->clearstep_compute();
double coord;
for (int m = 0; m < nwall; m++) {
if (xstyle[m] == VARIABLE) {
coord = input->variable->compute_equal(xindex[m]);
if (wallwhich[m] < YLO) coord *= xscale;
else if (wallwhich[m] < ZLO) coord *= yscale;
else coord *= zscale;
} else coord = coord0[m];
if (wstyle[m] == VARIABLE) {
if (estyle[m] == VARIABLE) {
epsilon[m] = input->variable->compute_equal(eindex[m]);
if (epsilon[m] < 0.0)
error->all(FLERR,"Variable evaluation in fix wall gave bad value");
}
if (sstyle[m] == VARIABLE) {
sigma[m] = input->variable->compute_equal(sindex[m]);
if (sigma[m] < 0.0)
error->all(FLERR,"Variable evaluation in fix wall gave bad value");
}
precompute(m);
}
wall_particle(m,wallwhich[m],coord);
}
if (varflag) modify->addstep_compute(update->ntimestep + 1);
}
/* ---------------------------------------------------------------------- */
void FixWall::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == ilevel_respa) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixWall::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
energy of wall interaction
------------------------------------------------------------------------- */
double FixWall::compute_scalar()
{
// only sum across procs one time
if (eflag == 0) {
MPI_Allreduce(ewall,ewall_all,nwall+1,MPI_DOUBLE,MPI_SUM,world);
eflag = 1;
}
return ewall_all[0];
}
/* ----------------------------------------------------------------------
components of force on wall
------------------------------------------------------------------------- */
double FixWall::compute_vector(int n)
{
// only sum across procs one time
if (eflag == 0) {
MPI_Allreduce(ewall,ewall_all,nwall+1,MPI_DOUBLE,MPI_SUM,world);
eflag = 1;
}
return ewall_all[n+1];
}
diff --git a/src/fix_wall_reflect.cpp b/src/fix_wall_reflect.cpp
index b5c70037b..dba7cf703 100644
--- a/src/fix_wall_reflect.cpp
+++ b/src/fix_wall_reflect.cpp
@@ -1,228 +1,229 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <stdlib.h>
#include <string.h>
#include "fix_wall_reflect.h"
#include "atom.h"
#include "comm.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "lattice.h"
#include "input.h"
#include "variable.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{XLO=0,XHI=1,YLO=2,YHI=3,ZLO=4,ZHI=5};
enum{NONE=0,EDGE,CONSTANT,VARIABLE};
/* ---------------------------------------------------------------------- */
FixWallReflect::FixWallReflect(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ nwall(0)
{
if (narg < 4) error->all(FLERR,"Illegal fix wall/reflect command");
// parse args
nwall = 0;
int scaleflag = 1;
int iarg = 3;
while (iarg < narg) {
if ((strcmp(arg[iarg],"xlo") == 0) || (strcmp(arg[iarg],"xhi") == 0) ||
(strcmp(arg[iarg],"ylo") == 0) || (strcmp(arg[iarg],"yhi") == 0) ||
(strcmp(arg[iarg],"zlo") == 0) || (strcmp(arg[iarg],"zhi") == 0)) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix wall/reflect command");
int newwall;
if (strcmp(arg[iarg],"xlo") == 0) newwall = XLO;
else if (strcmp(arg[iarg],"xhi") == 0) newwall = XHI;
else if (strcmp(arg[iarg],"ylo") == 0) newwall = YLO;
else if (strcmp(arg[iarg],"yhi") == 0) newwall = YHI;
else if (strcmp(arg[iarg],"zlo") == 0) newwall = ZLO;
else if (strcmp(arg[iarg],"zhi") == 0) newwall = ZHI;
for (int m = 0; (m < nwall) && (m < 6); m++)
if (newwall == wallwhich[m])
error->all(FLERR,"Wall defined twice in fix wall/reflect command");
wallwhich[nwall] = newwall;
if (strcmp(arg[iarg+1],"EDGE") == 0) {
wallstyle[nwall] = EDGE;
int dim = wallwhich[nwall] / 2;
int side = wallwhich[nwall] % 2;
if (side == 0) coord0[nwall] = domain->boxlo[dim];
else coord0[nwall] = domain->boxhi[dim];
} else if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) {
wallstyle[nwall] = VARIABLE;
int n = strlen(&arg[iarg+1][2]) + 1;
varstr[nwall] = new char[n];
strcpy(varstr[nwall],&arg[iarg+1][2]);
} else {
wallstyle[nwall] = CONSTANT;
coord0[nwall] = force->numeric(FLERR,arg[iarg+1]);
}
nwall++;
iarg += 2;
} else if (strcmp(arg[iarg],"units") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal wall/reflect command");
if (strcmp(arg[iarg+1],"box") == 0) scaleflag = 0;
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = 1;
else error->all(FLERR,"Illegal fix wall/reflect command");
iarg += 2;
} else error->all(FLERR,"Illegal fix wall/reflect command");
}
// error check
if (nwall == 0) error->all(FLERR,"Illegal fix wall command");
for (int m = 0; m < nwall; m++) {
if ((wallwhich[m] == XLO || wallwhich[m] == XHI) && domain->xperiodic)
error->all(FLERR,"Cannot use fix wall/reflect in periodic dimension");
if ((wallwhich[m] == YLO || wallwhich[m] == YHI) && domain->yperiodic)
error->all(FLERR,"Cannot use fix wall/reflect in periodic dimension");
if ((wallwhich[m] == ZLO || wallwhich[m] == ZHI) && domain->zperiodic)
error->all(FLERR,"Cannot use fix wall/reflect in periodic dimension");
}
for (int m = 0; m < nwall; m++)
if ((wallwhich[m] == ZLO || wallwhich[m] == ZHI) && domain->dimension == 2)
error->all(FLERR,
"Cannot use fix wall/reflect zlo/zhi for a 2d simulation");
// scale factors for CONSTANT and VARIABLE walls
int flag = 0;
for (int m = 0; m < nwall; m++)
if (wallstyle[m] != EDGE) flag = 1;
if (flag) {
if (scaleflag) {
xscale = domain->lattice->xlattice;
yscale = domain->lattice->ylattice;
zscale = domain->lattice->zlattice;
}
else xscale = yscale = zscale = 1.0;
for (int m = 0; m < nwall; m++) {
if (wallstyle[m] != CONSTANT) continue;
if (wallwhich[m] < YLO) coord0[m] *= xscale;
else if (wallwhich[m] < ZLO) coord0[m] *= yscale;
else coord0[m] *= zscale;
}
}
// set varflag if any wall positions are variable
varflag = 0;
for (int m = 0; m < nwall; m++)
if (wallstyle[m] == VARIABLE) varflag = 1;
}
/* ---------------------------------------------------------------------- */
FixWallReflect::~FixWallReflect()
{
if (copymode) return;
for (int m = 0; m < nwall; m++)
if (wallstyle[m] == VARIABLE) delete [] varstr[m];
}
/* ---------------------------------------------------------------------- */
int FixWallReflect::setmask()
{
int mask = 0;
mask |= POST_INTEGRATE;
mask |= POST_INTEGRATE_RESPA;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixWallReflect::init()
{
for (int m = 0; m < nwall; m++) {
if (wallstyle[m] != VARIABLE) continue;
varindex[m] = input->variable->find(varstr[m]);
if (varindex[m] < 0)
error->all(FLERR,"Variable name for fix wall/reflect does not exist");
if (!input->variable->equalstyle(varindex[m]))
error->all(FLERR,"Variable for fix wall/reflect is invalid style");
}
int nrigid = 0;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->rigid_flag) nrigid++;
if (nrigid && comm->me == 0)
error->warning(FLERR,"Should not allow rigid bodies to bounce off "
"relecting walls");
}
/* ---------------------------------------------------------------------- */
void FixWallReflect::post_integrate()
{
int i,dim,side;
double coord;
// coord = current position of wall
// evaluate variable if necessary, wrap with clear/add
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (varflag) modify->clearstep_compute();
for (int m = 0; m < nwall; m++) {
if (wallstyle[m] == VARIABLE) {
coord = input->variable->compute_equal(varindex[m]);
if (wallwhich[m] < YLO) coord *= xscale;
else if (wallwhich[m] < ZLO) coord *= yscale;
else coord *= zscale;
} else coord = coord0[m];
dim = wallwhich[m] / 2;
side = wallwhich[m] % 2;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (side == 0) {
if (x[i][dim] < coord) {
x[i][dim] = coord + (coord - x[i][dim]);
v[i][dim] = -v[i][dim];
}
} else {
if (x[i][dim] > coord) {
x[i][dim] = coord - (x[i][dim] - coord);
v[i][dim] = -v[i][dim];
}
}
}
}
if (varflag) modify->addstep_compute(update->ntimestep + 1);
}
diff --git a/src/fix_wall_region.cpp b/src/fix_wall_region.cpp
index 824f92eb8..f543c1217 100644
--- a/src/fix_wall_region.cpp
+++ b/src/fix_wall_region.cpp
@@ -1,367 +1,368 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "fix_wall_region.h"
#include "atom.h"
#include "atom_vec.h"
#include "domain.h"
#include "region.h"
#include "force.h"
#include "lattice.h"
#include "update.h"
#include "output.h"
#include "respa.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{LJ93,LJ126,COLLOID,HARMONIC};
/* ---------------------------------------------------------------------- */
FixWallRegion::FixWallRegion(LAMMPS *lmp, int narg, char **arg) :
- Fix(lmp, narg, arg)
+ Fix(lmp, narg, arg),
+ idregion(NULL)
{
if (narg != 8) error->all(FLERR,"Illegal fix wall/region command");
scalar_flag = 1;
vector_flag = 1;
size_vector = 3;
global_freq = 1;
extscalar = 1;
extvector = 1;
respa_level_support = 1;
ilevel_respa = 0;
// parse args
iregion = domain->find_region(arg[3]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix wall/region does not exist");
int n = strlen(arg[3]) + 1;
idregion = new char[n];
strcpy(idregion,arg[3]);
if (strcmp(arg[4],"lj93") == 0) style = LJ93;
else if (strcmp(arg[4],"lj126") == 0) style = LJ126;
else if (strcmp(arg[4],"colloid") == 0) style = COLLOID;
else if (strcmp(arg[4],"harmonic") == 0) style = HARMONIC;
else error->all(FLERR,"Illegal fix wall/region command");
epsilon = force->numeric(FLERR,arg[5]);
sigma = force->numeric(FLERR,arg[6]);
cutoff = force->numeric(FLERR,arg[7]);
if (cutoff <= 0.0) error->all(FLERR,"Fix wall/region cutoff <= 0.0");
eflag = 0;
ewall[0] = ewall[1] = ewall[2] = ewall[3] = 0.0;
}
/* ---------------------------------------------------------------------- */
FixWallRegion::~FixWallRegion()
{
delete [] idregion;
}
/* ---------------------------------------------------------------------- */
int FixWallRegion::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::init()
{
// set index and check validity of region
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix wall/region does not exist");
// error checks for style COLLOID
// insure all particles in group are extended particles
if (style == COLLOID) {
if (!atom->sphere_flag)
error->all(FLERR,"Fix wall/region colloid requires atom style sphere");
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int flag = 0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
if (radius[i] == 0.0) flag = 1;
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall)
error->all(FLERR,"Fix wall/region colloid requires extended particles");
}
// setup coefficients for each style
if (style == LJ93) {
coeff1 = 6.0/5.0 * epsilon * pow(sigma,9.0);
coeff2 = 3.0 * epsilon * pow(sigma,3.0);
coeff3 = 2.0/15.0 * epsilon * pow(sigma,9.0);
coeff4 = epsilon * pow(sigma,3.0);
double rinv = 1.0/cutoff;
double r2inv = rinv*rinv;
double r4inv = r2inv*r2inv;
offset = coeff3*r4inv*r4inv*rinv - coeff4*r2inv*rinv;
} else if (style == LJ126) {
coeff1 = 48.0 * epsilon * pow(sigma,12.0);
coeff2 = 24.0 * epsilon * pow(sigma,6.0);
coeff3 = 4.0 * epsilon * pow(sigma,12.0);
coeff4 = 4.0 * epsilon * pow(sigma,6.0);
double r2inv = 1.0/(cutoff*cutoff);
double r6inv = r2inv*r2inv*r2inv;
offset = r6inv*(coeff3*r6inv - coeff4);
} else if (style == COLLOID) {
coeff1 = -4.0/315.0 * epsilon * pow(sigma,6.0);
coeff2 = -2.0/3.0 * epsilon;
coeff3 = epsilon * pow(sigma,6.0)/7560.0;
coeff4 = epsilon/6.0;
double rinv = 1.0/cutoff;
double r2inv = rinv*rinv;
double r4inv = r2inv*r2inv;
offset = coeff3*r4inv*r4inv*rinv - coeff4*r2inv*rinv;
}
if (strstr(update->integrate_style,"respa")) {
ilevel_respa = ((Respa *) update->integrate)->nlevels-1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel_respa);
}
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::post_force(int vflag)
{
int i,m,n;
double rinv,fx,fy,fz,tooclose;
double **x = atom->x;
double **f = atom->f;
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
Region *region = domain->regions[iregion];
region->prematch();
int onflag = 0;
// region->match() insures particle is in region or on surface, else error
// if returned contact dist r = 0, is on surface, also an error
// in COLLOID case, r <= radius is an error
// initilize ewall after region->prematch(),
// so a dynamic region can access last timestep values
eflag = 0;
ewall[0] = ewall[1] = ewall[2] = ewall[3] = 0.0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (!region->match(x[i][0],x[i][1],x[i][2])) {
onflag = 1;
continue;
}
if (style == COLLOID) tooclose = radius[i];
else tooclose = 0.0;
n = region->surface(x[i][0],x[i][1],x[i][2],cutoff);
for (m = 0; m < n; m++) {
if (region->contact[m].r <= tooclose) {
onflag = 1;
continue;
} else rinv = 1.0/region->contact[m].r;
if (style == LJ93) lj93(region->contact[m].r);
else if (style == LJ126) lj126(region->contact[m].r);
else if (style == COLLOID) colloid(region->contact[m].r,radius[i]);
else harmonic(region->contact[m].r);
ewall[0] += eng;
fx = fwall * region->contact[m].delx * rinv;
fy = fwall * region->contact[m].dely * rinv;
fz = fwall * region->contact[m].delz * rinv;
f[i][0] += fx;
f[i][1] += fy;
f[i][2] += fz;
ewall[1] -= fx;
ewall[2] -= fy;
ewall[3] -= fz;
}
}
if (onflag) error->one(FLERR,"Particle outside surface of region "
"used in fix wall/region");
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == ilevel_respa) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
energy of wall interaction
------------------------------------------------------------------------- */
double FixWallRegion::compute_scalar()
{
// only sum across procs one time
if (eflag == 0) {
MPI_Allreduce(ewall,ewall_all,4,MPI_DOUBLE,MPI_SUM,world);
eflag = 1;
}
return ewall_all[0];
}
/* ----------------------------------------------------------------------
components of force on wall
------------------------------------------------------------------------- */
double FixWallRegion::compute_vector(int n)
{
// only sum across procs one time
if (eflag == 0) {
MPI_Allreduce(ewall,ewall_all,4,MPI_DOUBLE,MPI_SUM,world);
eflag = 1;
}
return ewall_all[n+1];
}
/* ----------------------------------------------------------------------
LJ 9/3 interaction for particle with wall
compute eng and fwall = magnitude of wall force
------------------------------------------------------------------------- */
void FixWallRegion::lj93(double r)
{
double rinv = 1.0/r;
double r2inv = rinv*rinv;
double r4inv = r2inv*r2inv;
double r10inv = r4inv*r4inv*r2inv;
fwall = coeff1*r10inv - coeff2*r4inv;
eng = coeff3*r4inv*r4inv*rinv - coeff4*r2inv*rinv - offset;
}
/* ----------------------------------------------------------------------
LJ 12/6 interaction for particle with wall
compute eng and fwall = magnitude of wall force
------------------------------------------------------------------------- */
void FixWallRegion::lj126(double r)
{
double rinv = 1.0/r;
double r2inv = rinv*rinv;
double r6inv = r2inv*r2inv*r2inv;
fwall = r6inv*(coeff1*r6inv - coeff2) * rinv;
eng = r6inv*(coeff3*r6inv - coeff4) - offset;
}
/* ----------------------------------------------------------------------
colloid interaction for finite-size particle of rad with wall
compute eng and fwall = magnitude of wall force
------------------------------------------------------------------------- */
void FixWallRegion::colloid(double r, double rad)
{
double new_coeff2 = coeff2*rad*rad*rad;
double diam = 2.0*rad;
double rad2 = rad*rad;
double rad4 = rad2*rad2;
double rad8 = rad4*rad4;
double delta2 = rad2 - r*r;
double rinv = 1.0/delta2;
double r2inv = rinv*rinv;
double r4inv = r2inv*r2inv;
double r8inv = r4inv*r4inv;
fwall = coeff1*(rad8*rad + 27.0*rad4*rad2*rad*pow(r,2.0)
+ 63.0*rad4*rad*pow(r,4.0)
+ 21.0*rad2*rad*pow(r,6.0))*r8inv - new_coeff2*r2inv;
double r2 = 0.5*diam - r;
double rinv2 = 1.0/r2;
double r2inv2 = rinv2*rinv2;
double r4inv2 = r2inv2*r2inv2;
double r3 = r + 0.5*diam;
double rinv3 = 1.0/r3;
double r2inv3 = rinv3*rinv3;
double r4inv3 = r2inv3*r2inv3;
eng = coeff3*((-3.5*diam+r)*r4inv2*r2inv2*rinv2
+ (3.5*diam+r)*r4inv3*r2inv3*rinv3) -
coeff4*((-diam*r+r2*r3*(log(-r2)-log(r3)))*
(-rinv2)*rinv3) - offset;
}
/* ----------------------------------------------------------------------
harmonic interaction for particle with wall
compute eng and fwall = magnitude of wall force
------------------------------------------------------------------------- */
void FixWallRegion::harmonic(double r)
{
double dr = cutoff - r;
fwall = 2.0*epsilon*dr;
eng = epsilon*dr*dr;
}
diff --git a/src/lammps.cpp b/src/lammps.cpp
index 8230b8ece..4c4e31487 100644
--- a/src/lammps.cpp
+++ b/src/lammps.cpp
@@ -1,930 +1,929 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <string.h>
#include <ctype.h>
#include "lammps.h"
#include "style_angle.h"
#include "style_atom.h"
#include "style_bond.h"
#include "style_command.h"
#include "style_compute.h"
#include "style_dihedral.h"
#include "style_dump.h"
#include "style_fix.h"
#include "style_improper.h"
#include "style_integrate.h"
#include "style_kspace.h"
#include "style_minimize.h"
#include "style_pair.h"
#include "style_region.h"
#include "universe.h"
#include "input.h"
#include "atom.h"
#include "update.h"
#include "neighbor.h"
#include "comm.h"
#include "comm_brick.h"
#include "domain.h"
#include "force.h"
#include "modify.h"
#include "group.h"
#include "output.h"
#include "citeme.h"
#include "accelerator_kokkos.h"
#include "accelerator_omp.h"
-#include "accelerator_intel.h"
#include "timer.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ----------------------------------------------------------------------
start up LAMMPS
allocate fundamental classes (memory, error, universe, input)
parse input switches
initialize communicators, screen & logfile output
input is allocated at end after MPI info is setup
------------------------------------------------------------------------- */
LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator)
{
memory = new Memory(this);
error = new Error(this);
universe = new Universe(this,communicator);
output = NULL;
screen = NULL;
logfile = NULL;
infile = NULL;
initclock = MPI_Wtime();
// parse input switches
int inflag = 0;
int screenflag = 0;
int logflag = 0;
int partscreenflag = 0;
int partlogflag = 0;
int kokkosflag = 0;
int restartflag = 0;
int restartremapflag = 0;
int citeflag = 1;
int helpflag = 0;
suffix = suffix2 = NULL;
suffix_enable = 0;
packargs = NULL;
num_package = 0;
char *rfile = NULL;
char *dfile = NULL;
int wdfirst,wdlast;
int kkfirst,kklast;
int npack = 0;
int *pfirst = NULL;
int *plast = NULL;
int iarg = 1;
while (iarg < narg) {
if (strcmp(arg[iarg],"-partition") == 0 ||
strcmp(arg[iarg],"-p") == 0) {
universe->existflag = 1;
if (iarg+2 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
iarg++;
while (iarg < narg && arg[iarg][0] != '-') {
universe->add_world(arg[iarg]);
iarg++;
}
} else if (strcmp(arg[iarg],"-in") == 0 ||
strcmp(arg[iarg],"-i") == 0) {
if (iarg+2 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
inflag = iarg + 1;
iarg += 2;
} else if (strcmp(arg[iarg],"-screen") == 0 ||
strcmp(arg[iarg],"-sc") == 0) {
if (iarg+2 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
screenflag = iarg + 1;
iarg += 2;
} else if (strcmp(arg[iarg],"-log") == 0 ||
strcmp(arg[iarg],"-l") == 0) {
if (iarg+2 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
logflag = iarg + 1;
iarg += 2;
} else if (strcmp(arg[iarg],"-var") == 0 ||
strcmp(arg[iarg],"-v") == 0) {
if (iarg+3 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
iarg += 3;
while (iarg < narg && arg[iarg][0] != '-') iarg++;
} else if (strcmp(arg[iarg],"-echo") == 0 ||
strcmp(arg[iarg],"-e") == 0) {
if (iarg+2 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
iarg += 2;
} else if (strcmp(arg[iarg],"-pscreen") == 0 ||
strcmp(arg[iarg],"-ps") == 0) {
if (iarg+2 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
partscreenflag = iarg + 1;
iarg += 2;
} else if (strcmp(arg[iarg],"-plog") == 0 ||
strcmp(arg[iarg],"-pl") == 0) {
if (iarg+2 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
partlogflag = iarg + 1;
iarg += 2;
} else if (strcmp(arg[iarg],"-kokkos") == 0 ||
strcmp(arg[iarg],"-k") == 0) {
if (iarg+2 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
if (strcmp(arg[iarg+1],"on") == 0) kokkosflag = 1;
else if (strcmp(arg[iarg+1],"off") == 0) kokkosflag = 0;
else error->universe_all(FLERR,"Invalid command-line argument");
iarg += 2;
// delimit any extra args for the Kokkos instantiation
kkfirst = iarg;
while (iarg < narg && arg[iarg][0] != '-') iarg++;
kklast = iarg;
} else if (strcmp(arg[iarg],"-package") == 0 ||
strcmp(arg[iarg],"-pk") == 0) {
if (iarg+2 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
memory->grow(pfirst,npack+1,"lammps:pfirst");
memory->grow(plast,npack+1,"lammps:plast");
// delimit args for package command invocation
// any package arg with leading "-" will be followed by numeric digit
iarg++;
pfirst[npack] = iarg;
while (iarg < narg) {
if (arg[iarg][0] != '-') iarg++;
else if (isdigit(arg[iarg][1])) iarg++;
else break;
}
plast[npack++] = iarg;
} else if (strcmp(arg[iarg],"-suffix") == 0 ||
strcmp(arg[iarg],"-sf") == 0) {
if (iarg+2 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
delete [] suffix;
delete [] suffix2;
suffix2 = NULL;
suffix_enable = 1;
// hybrid option to set fall-back for suffix2
if (strcmp(arg[iarg+1],"hybrid") == 0) {
if (iarg+4 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
int n = strlen(arg[iarg+2]) + 1;
suffix = new char[n];
strcpy(suffix,arg[iarg+2]);
n = strlen(arg[iarg+3]) + 1;
suffix2 = new char[n];
strcpy(suffix2,arg[iarg+3]);
iarg += 4;
} else {
int n = strlen(arg[iarg+1]) + 1;
suffix = new char[n];
strcpy(suffix,arg[iarg+1]);
iarg += 2;
}
} else if (strcmp(arg[iarg],"-reorder") == 0 ||
strcmp(arg[iarg],"-ro") == 0) {
if (iarg+3 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
if (universe->existflag)
error->universe_all(FLERR,"Cannot use -reorder after -partition");
universe->reorder(arg[iarg+1],arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg],"-restart") == 0 ||
strcmp(arg[iarg],"-r") == 0) {
if (iarg+3 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
restartflag = 1;
rfile = arg[iarg+1];
dfile = arg[iarg+2];
// check for restart remap flag
if (strcmp(dfile,"remap") == 0) {
if (iarg+4 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
restartremapflag = 1;
dfile = arg[iarg+3];
iarg++;
}
iarg += 3;
// delimit any extra args for the write_data command
wdfirst = iarg;
while (iarg < narg && arg[iarg][0] != '-') iarg++;
wdlast = iarg;
} else if (strcmp(arg[iarg],"-nocite") == 0 ||
strcmp(arg[iarg],"-nc") == 0) {
citeflag = 0;
iarg++;
} else if (strcmp(arg[iarg],"-help") == 0 ||
strcmp(arg[iarg],"-h") == 0) {
if (iarg+1 > narg)
error->universe_all(FLERR,"Invalid command-line argument");
helpflag = 1;
citeflag = 0;
iarg += 1;
} else error->universe_all(FLERR,"Invalid command-line argument");
}
// if no partition command-line switch, universe is one world with all procs
if (universe->existflag == 0) universe->add_world(NULL);
// sum of procs in all worlds must equal total # of procs
if (!universe->consistent())
error->universe_all(FLERR,"Processor partitions do not match "
"number of allocated processors");
// universe cannot use stdin for input file
if (universe->existflag && inflag == 0)
error->universe_all(FLERR,"Must use -in switch with multiple partitions");
// if no partition command-line switch, cannot use -pscreen option
if (universe->existflag == 0 && partscreenflag)
error->universe_all(FLERR,"Can only use -pscreen with multiple partitions");
// if no partition command-line switch, cannot use -plog option
if (universe->existflag == 0 && partlogflag)
error->universe_all(FLERR,"Can only use -plog with multiple partitions");
// set universe screen and logfile
if (universe->me == 0) {
if (screenflag == 0)
universe->uscreen = stdout;
else if (strcmp(arg[screenflag],"none") == 0)
universe->uscreen = NULL;
else {
universe->uscreen = fopen(arg[screenflag],"w");
if (universe->uscreen == NULL)
error->universe_one(FLERR,"Cannot open universe screen file");
}
if (logflag == 0) {
if (helpflag == 0) {
universe->ulogfile = fopen("log.lammps","w");
if (universe->ulogfile == NULL)
error->universe_warn(FLERR,"Cannot open log.lammps for writing");
}
} else if (strcmp(arg[logflag],"none") == 0)
universe->ulogfile = NULL;
else {
universe->ulogfile = fopen(arg[logflag],"w");
if (universe->ulogfile == NULL)
error->universe_one(FLERR,"Cannot open universe log file");
}
}
if (universe->me > 0) {
if (screenflag == 0) universe->uscreen = stdout;
else universe->uscreen = NULL;
universe->ulogfile = NULL;
}
// make universe and single world the same, since no partition switch
// world inherits settings from universe
// set world screen, logfile, communicator, infile
// open input script if from file
if (universe->existflag == 0) {
screen = universe->uscreen;
logfile = universe->ulogfile;
world = universe->uworld;
if (universe->me == 0) {
if (inflag == 0) infile = stdin;
else infile = fopen(arg[inflag],"r");
if (infile == NULL) {
char str[128];
sprintf(str,"Cannot open input script %s",arg[inflag]);
error->one(FLERR,str);
}
}
if (universe->me == 0) {
if (screen) fprintf(screen,"LAMMPS (%s)\n",universe->version);
if (logfile) fprintf(logfile,"LAMMPS (%s)\n",universe->version);
}
// universe is one or more worlds, as setup by partition switch
// split universe communicator into separate world communicators
// set world screen, logfile, communicator, infile
// open input script
} else {
int me;
MPI_Comm_split(universe->uworld,universe->iworld,0,&world);
MPI_Comm_rank(world,&me);
if (me == 0)
if (partscreenflag == 0)
if (screenflag == 0) {
char str[32];
sprintf(str,"screen.%d",universe->iworld);
screen = fopen(str,"w");
if (screen == NULL) error->one(FLERR,"Cannot open screen file");
} else if (strcmp(arg[screenflag],"none") == 0)
screen = NULL;
else {
char str[128];
sprintf(str,"%s.%d",arg[screenflag],universe->iworld);
screen = fopen(str,"w");
if (screen == NULL) error->one(FLERR,"Cannot open screen file");
}
else if (strcmp(arg[partscreenflag],"none") == 0)
screen = NULL;
else {
char str[128];
sprintf(str,"%s.%d",arg[partscreenflag],universe->iworld);
screen = fopen(str,"w");
if (screen == NULL) error->one(FLERR,"Cannot open screen file");
} else screen = NULL;
if (me == 0)
if (partlogflag == 0)
if (logflag == 0) {
char str[32];
sprintf(str,"log.lammps.%d",universe->iworld);
logfile = fopen(str,"w");
if (logfile == NULL) error->one(FLERR,"Cannot open logfile");
} else if (strcmp(arg[logflag],"none") == 0)
logfile = NULL;
else {
char str[128];
sprintf(str,"%s.%d",arg[logflag],universe->iworld);
logfile = fopen(str,"w");
if (logfile == NULL) error->one(FLERR,"Cannot open logfile");
}
else if (strcmp(arg[partlogflag],"none") == 0)
logfile = NULL;
else {
char str[128];
sprintf(str,"%s.%d",arg[partlogflag],universe->iworld);
logfile = fopen(str,"w");
if (logfile == NULL) error->one(FLERR,"Cannot open logfile");
} else logfile = NULL;
if (me == 0) {
infile = fopen(arg[inflag],"r");
if (infile == NULL) {
char str[128];
sprintf(str,"Cannot open input script %s",arg[inflag]);
error->one(FLERR,str);
}
} else infile = NULL;
// screen and logfile messages for universe and world
if (universe->me == 0) {
if (universe->uscreen) {
fprintf(universe->uscreen,"LAMMPS (%s)\n",universe->version);
fprintf(universe->uscreen,"Running on %d partitions of processors\n",
universe->nworlds);
}
if (universe->ulogfile) {
fprintf(universe->ulogfile,"LAMMPS (%s)\n",universe->version);
fprintf(universe->ulogfile,"Running on %d partitions of processors\n",
universe->nworlds);
}
}
if (me == 0) {
if (screen) {
fprintf(screen,"LAMMPS (%s)\n",universe->version);
fprintf(screen,"Processor partition = %d\n",universe->iworld);
}
if (logfile) {
fprintf(logfile,"LAMMPS (%s)\n",universe->version);
fprintf(logfile,"Processor partition = %d\n",universe->iworld);
}
}
}
// check consistency of datatype settings in lmptype.h
if (sizeof(smallint) != sizeof(int))
error->all(FLERR,"Smallint setting in lmptype.h is invalid");
if (sizeof(imageint) < sizeof(smallint))
error->all(FLERR,"Imageint setting in lmptype.h is invalid");
if (sizeof(tagint) < sizeof(smallint))
error->all(FLERR,"Tagint setting in lmptype.h is invalid");
if (sizeof(bigint) < sizeof(imageint) || sizeof(bigint) < sizeof(tagint))
error->all(FLERR,"Bigint setting in lmptype.h is invalid");
int mpisize;
MPI_Type_size(MPI_LMP_TAGINT,&mpisize);
if (mpisize != sizeof(tagint))
error->all(FLERR,"MPI_LMP_TAGINT and tagint in "
"lmptype.h are not compatible");
MPI_Type_size(MPI_LMP_BIGINT,&mpisize);
if (mpisize != sizeof(bigint))
error->all(FLERR,"MPI_LMP_BIGINT and bigint in "
"lmptype.h are not compatible");
#ifdef LAMMPS_SMALLBIG
if (sizeof(smallint) != 4 || sizeof(imageint) != 4 ||
sizeof(tagint) != 4 || sizeof(bigint) != 8)
error->all(FLERR,"Small to big integers are not sized correctly");
#endif
#ifdef LAMMPS_BIGBIG
if (sizeof(smallint) != 4 || sizeof(imageint) != 8 ||
sizeof(tagint) != 8 || sizeof(bigint) != 8)
error->all(FLERR,"Small to big integers are not sized correctly");
#endif
#ifdef LAMMPS_SMALLSMALL
if (sizeof(smallint) != 4 || sizeof(imageint) != 4 ||
sizeof(tagint) != 4 || sizeof(bigint) != 4)
error->all(FLERR,"Small to big integers are not sized correctly");
#endif
// create Kokkos class if KOKKOS installed, unless explicitly switched off
// instantiation creates dummy Kokkos class if KOKKOS is not installed
// add args between kkfirst and kklast to Kokkos instantiation
kokkos = NULL;
if (kokkosflag == 1) {
kokkos = new KokkosLMP(this,kklast-kkfirst,&arg[kkfirst]);
if (!kokkos->kokkos_exists)
error->all(FLERR,"Cannot use -kokkos on without KOKKOS installed");
}
// allocate CiteMe class if enabled
if (citeflag) citeme = new CiteMe(this);
else citeme = NULL;
// allocate input class now that MPI is fully setup
input = new Input(this,narg,arg);
// copy package cmdline arguments
if (npack > 0) {
num_package = npack;
packargs = new char**[npack];
for (int i=0; i < npack; ++i) {
int n = plast[i] - pfirst[i];
packargs[i] = new char*[n+1];
for (int j=0; j < n; ++j)
packargs[i][j] = strdup(arg[pfirst[i]+j]);
packargs[i][n] = NULL;
}
memory->destroy(pfirst);
memory->destroy(plast);
}
// allocate top-level classes
create();
post_create();
// if helpflag set, print help and quit with "success" status
if (helpflag) {
if (universe->me == 0 && screen) help();
error->done(0);
}
// if restartflag set, invoke 2 commands and quit
// add args between wdfirst and wdlast to write_data command
// also add "noinit" to prevent write_data from doing system init
if (restartflag) {
char cmd[128];
sprintf(cmd,"read_restart %s\n",rfile);
if (restartremapflag) strcat(cmd," remap\n");
input->one(cmd);
sprintf(cmd,"write_data %s",dfile);
for (iarg = wdfirst; iarg < wdlast; iarg++)
sprintf(&cmd[strlen(cmd)]," %s",arg[iarg]);
strcat(cmd," noinit\n");
input->one(cmd);
error->done(0);
}
}
/* ----------------------------------------------------------------------
shutdown LAMMPS
delete top-level classes
close screen and log files in world and universe
output files were already closed in destroy()
delete fundamental classes
------------------------------------------------------------------------- */
LAMMPS::~LAMMPS()
{
const int me = comm->me;
destroy();
delete citeme;
if (num_package) {
for (int i = 0; i < num_package; i++) {
for (char **ptr = packargs[i]; *ptr != NULL; ++ptr)
free(*ptr);
delete[] packargs[i];
}
delete[] packargs;
}
num_package = 0;
packargs = NULL;
double totalclock = MPI_Wtime() - initclock;
if ((me == 0) && (screen || logfile)) {
char outtime[128];
int seconds = fmod(totalclock,60.0);
totalclock = (totalclock - seconds) / 60.0;
int minutes = fmod(totalclock,60.0);
int hours = (totalclock - minutes) / 60.0;
sprintf(outtime,"Total wall time: "
"%d:%02d:%02d\n", hours, minutes, seconds);
if (screen) fputs(outtime,screen);
if (logfile) fputs(outtime,logfile);
}
if (universe->nworlds == 1) {
if (screen && screen != stdout) fclose(screen);
if (logfile) fclose(logfile);
logfile = NULL;
if (screen != stdout) screen = NULL;
} else {
if (screen && screen != stdout) fclose(screen);
if (logfile) fclose(logfile);
if (universe->ulogfile) fclose(universe->ulogfile);
logfile = NULL;
if (screen != stdout) screen = NULL;
}
if (infile && infile != stdin) fclose(infile);
if (world != universe->uworld) MPI_Comm_free(&world);
delete kokkos;
delete [] suffix;
delete [] suffix2;
delete input;
delete universe;
delete error;
delete memory;
}
/* ----------------------------------------------------------------------
allocate single instance of top-level classes
fundamental classes are allocated in constructor
some classes have package variants
------------------------------------------------------------------------- */
void LAMMPS::create()
{
force = NULL; // Domain->Lattice checks if Force exists
// Comm class must be created before Atom class
// so that nthreads is defined when create_avec invokes grow()
if (kokkos) comm = new CommKokkos(this);
else comm = new CommBrick(this);
if (kokkos) neighbor = new NeighborKokkos(this);
else neighbor = new Neighbor(this);
if (kokkos) domain = new DomainKokkos(this);
#ifdef LMP_USER_OMP
else domain = new DomainOMP(this);
#else
else domain = new Domain(this);
#endif
if (kokkos) atom = new AtomKokkos(this);
else atom = new Atom(this);
if (kokkos)
atom->create_avec("atomic/kk",0,NULL,1);
else
atom->create_avec("atomic",0,NULL,1);
group = new Group(this);
force = new Force(this); // must be after group, to create temperature
if (kokkos) modify = new ModifyKokkos(this);
else modify = new Modify(this);
output = new Output(this); // must be after group, so "all" exists
// must be after modify so can create Computes
update = new Update(this); // must be after output, force, neighbor
timer = new Timer(this);
}
/* ----------------------------------------------------------------------
check suffix consistency with installed packages
invoke package-specific deafult package commands
only invoke if suffix is set and enabled
also check if suffix2 is set
called from LAMMPS constructor and after clear() command
so that package-specific core classes have been instantiated
------------------------------------------------------------------------- */
void LAMMPS::post_create()
{
// default package command triggered by "-k on"
if (kokkos && kokkos->kokkos_exists) input->one("package kokkos");
// suffix will always be set if suffix_enable = 1
// check that KOKKOS package classes were instantiated
// check that GPU, INTEL, USER-OMP fixes were compiled with LAMMPS
if (!suffix_enable) return;
if (strcmp(suffix,"gpu") == 0 && !modify->check_package("GPU"))
error->all(FLERR,"Using suffix gpu without GPU package installed");
if (strcmp(suffix,"intel") == 0 && !modify->check_package("INTEL"))
error->all(FLERR,"Using suffix intel without USER-INTEL package installed");
if (strcmp(suffix,"kk") == 0 &&
(kokkos == NULL || kokkos->kokkos_exists == 0))
error->all(FLERR,"Using suffix kk without KOKKOS package enabled");
if (strcmp(suffix,"omp") == 0 && !modify->check_package("OMP"))
error->all(FLERR,"Using suffix omp without USER-OMP package installed");
if (strcmp(suffix,"gpu") == 0) input->one("package gpu 1");
if (strcmp(suffix,"intel") == 0) input->one("package intel 1");
if (strcmp(suffix,"omp") == 0) input->one("package omp 0");
if (suffix2) {
if (strcmp(suffix2,"gpu") == 0) input->one("package gpu 1");
if (strcmp(suffix2,"intel") == 0) input->one("package intel 1");
if (strcmp(suffix2,"omp") == 0) input->one("package omp 0");
}
// invoke any command-line package commands
if (num_package) {
char str[256];
for (int i = 0; i < num_package; i++) {
strcpy(str,"package");
for (char **ptr = packargs[i]; *ptr != NULL; ++ptr) {
if (strlen(str) + strlen(*ptr) + 2 > 256)
error->all(FLERR,"Too many -pk arguments in command line");
strcat(str," ");
strcat(str,*ptr);
}
input->one(str);
}
}
}
/* ----------------------------------------------------------------------
initialize top-level classes
do not initialize Timer class, other classes like Run() do that explicitly
------------------------------------------------------------------------- */
void LAMMPS::init()
{
update->init();
force->init(); // pair must come after update due to minimizer
domain->init();
atom->init(); // atom must come after force and domain
// atom deletes extra array
// used by fix shear_history::unpack_restart()
// when force->pair->gran_history creates fix ??
// atom_vec init uses deform_vremap
modify->init(); // modify must come after update, force, atom, domain
neighbor->init(); // neighbor must come after force, modify
comm->init(); // comm must come after force, modify, neighbor, atom
output->init(); // output must come after domain, force, modify
}
/* ----------------------------------------------------------------------
delete single instance of top-level classes
fundamental classes are deleted in destructor
------------------------------------------------------------------------- */
void LAMMPS::destroy()
{
delete update;
update = NULL;
delete neighbor;
neighbor = NULL;
delete comm;
comm = NULL;
delete force;
force = NULL;
delete group;
group = NULL;
delete output;
output = NULL;
delete modify; // modify must come after output, force, update
// since they delete fixes
modify = NULL;
delete domain; // domain must come after modify
// since fix destructors access domain
domain = NULL;
delete atom; // atom must come after modify, neighbor
// since fixes delete callbacks in atom
atom = NULL;
delete timer;
timer = NULL;
}
/* ----------------------------------------------------------------------
help message for command line options and styles present in executable
------------------------------------------------------------------------- */
void LAMMPS::help()
{
fprintf(screen,
"\nCommand line options:\n\n"
"-echo none/screen/log/both : echoing of input script (-e)\n"
"-help : print this help message (-h)\n"
"-in filename : read input from file, not stdin (-i)\n"
"-kokkos on/off ... : turn KOKKOS mode on or off (-k)\n"
"-log none/filename : where to send log output (-l)\n"
"-nocite : disable writing log.cite file (-nc)\n"
"-package style ... : invoke package command (-pk)\n"
"-partition size1 size2 ... : assign partition sizes (-p)\n"
"-plog basename : basename for partition logs (-pl)\n"
"-pscreen basename : basename for partition screens (-ps)\n"
"-restart rfile dfile ... : convert restart to data file (-r)\n"
"-reorder topology-specs : processor reordering (-r)\n"
"-screen none/filename : where to send screen output (-sc)\n"
"-suffix gpu/intel/opt/omp : style suffix to apply (-sf)\n"
"-var varname value : set index style variable (-v)\n\n");
fprintf(screen,"Style options compiled with this executable\n\n");
int pos = 80;
fprintf(screen,"* Atom styles:\n");
#define ATOM_CLASS
#define AtomStyle(key,Class) print_style(#key,pos);
#include "style_atom.h"
#undef ATOM_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Integrate styles:\n");
#define INTEGRATE_CLASS
#define IntegrateStyle(key,Class) print_style(#key,pos);
#include "style_integrate.h"
#undef INTEGRATE_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Minimize styles:\n");
#define MINIMIZE_CLASS
#define MinimizeStyle(key,Class) print_style(#key,pos);
#include "style_minimize.h"
#undef MINIMIZE_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Pair styles:\n");
#define PAIR_CLASS
#define PairStyle(key,Class) print_style(#key,pos);
#include "style_pair.h"
#undef PAIR_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Bond styles:\n");
#define BOND_CLASS
#define BondStyle(key,Class) print_style(#key,pos);
#include "style_bond.h"
#undef BOND_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Angle styles:\n");
#define ANGLE_CLASS
#define AngleStyle(key,Class) print_style(#key,pos);
#include "style_angle.h"
#undef ANGLE_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Dihedral styles:\n");
#define DIHEDRAL_CLASS
#define DihedralStyle(key,Class) print_style(#key,pos);
#include "style_dihedral.h"
#undef DIHEDRAL_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Improper styles:\n");
#define IMPROPER_CLASS
#define ImproperStyle(key,Class) print_style(#key,pos);
#include "style_improper.h"
#undef IMPROPER_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* KSpace styles:\n");
#define KSPACE_CLASS
#define KSpaceStyle(key,Class) print_style(#key,pos);
#include "style_kspace.h"
#undef KSPACE_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Fix styles\n");
#define FIX_CLASS
#define FixStyle(key,Class) print_style(#key,pos);
#include "style_fix.h"
#undef FIX_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Compute styles:\n");
#define COMPUTE_CLASS
#define ComputeStyle(key,Class) print_style(#key,pos);
#include "style_compute.h"
#undef COMPUTE_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Region styles:\n");
#define REGION_CLASS
#define RegionStyle(key,Class) print_style(#key,pos);
#include "style_region.h"
#undef REGION_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Dump styles:\n");
#define DUMP_CLASS
#define DumpStyle(key,Class) print_style(#key,pos);
#include "style_dump.h"
#undef DUMP_CLASS
fprintf(screen,"\n\n");
pos = 80;
fprintf(screen,"* Command styles\n");
#define COMMAND_CLASS
#define CommandStyle(key,Class) print_style(#key,pos);
#include "style_command.h"
#undef COMMAND_CLASS
fprintf(screen,"\n");
}
/* ----------------------------------------------------------------------
print style names in columns
skip any style that starts with upper-case letter, since internal
------------------------------------------------------------------------- */
void LAMMPS::print_style(const char *str, int &pos)
{
if (isupper(str[0])) return;
int len = strlen(str);
if (pos+len > 80) {
fprintf(screen,"\n");
pos = 0;
}
if (len < 16) {
fprintf(screen,"%-16s",str);
pos += 16;
} else if (len < 32) {
fprintf(screen,"%-32s",str);
pos += 32;
} else if (len < 48) {
fprintf(screen,"%-48s",str);
pos += 48;
} else if (len < 64) {
fprintf(screen,"%-64s",str);
pos += 64;
} else {
fprintf(screen,"%-80s",str);
pos += 80;
}
}
diff --git a/src/variable.cpp b/src/variable.cpp
index f27de2777..05c55ec7c 100644
--- a/src/variable.cpp
+++ b/src/variable.cpp
@@ -1,5024 +1,5024 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include "variable.h"
#include "universe.h"
#include "atom.h"
#include "update.h"
#include "group.h"
#include "domain.h"
#include "comm.h"
#include "region.h"
#include "modify.h"
#include "compute.h"
#include "fix.h"
#include "fix_store.h"
#include "force.h"
#include "output.h"
#include "thermo.h"
#include "random_mars.h"
#include "math_const.h"
#include "atom_masks.h"
#include "python_wrapper.h"
#include "memory.h"
#include "info.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace MathConst;
#define VARDELTA 4
#define MAXLEVEL 4
#define MAXLINE 256
#define CHUNK 1024
#define VALUELENGTH 64 // also in python.cpp
#define MAXFUNCARG 6
#define MYROUND(a) (( a-floor(a) ) >= .5) ? ceil(a) : floor(a)
enum{INDEX,LOOP,WORLD,UNIVERSE,ULOOP,STRING,GETENV,
SCALARFILE,ATOMFILE,FORMAT,EQUAL,ATOM,VECTOR,PYTHON,INTERNAL};
enum{ARG,OP};
// customize by adding a function
// if add before OR,
// also set precedence level in constructor and precedence length in *.h
enum{DONE,ADD,SUBTRACT,MULTIPLY,DIVIDE,CARAT,MODULO,UNARY,
NOT,EQ,NE,LT,LE,GT,GE,AND,OR,
SQRT,EXP,LN,LOG,ABS,SIN,COS,TAN,ASIN,ACOS,ATAN,ATAN2,
RANDOM,NORMAL,CEIL,FLOOR,ROUND,RAMP,STAGGER,LOGFREQ,LOGFREQ2,
STRIDE,STRIDE2,VDISPLACE,SWIGGLE,CWIGGLE,GMASK,RMASK,GRMASK,
IS_ACTIVE,IS_DEFINED,IS_AVAILABLE,
VALUE,ATOMARRAY,TYPEARRAY,INTARRAY,BIGINTARRAY,VECTORARRAY};
// customize by adding a special function
enum{SUM,XMIN,XMAX,AVE,TRAP,SLOPE};
#define INVOKED_SCALAR 1
#define INVOKED_VECTOR 2
#define INVOKED_ARRAY 4
#define INVOKED_PERATOM 8
#define BIG 1.0e20
/* ---------------------------------------------------------------------- */
Variable::Variable(LAMMPS *lmp) : Pointers(lmp)
{
MPI_Comm_rank(world,&me);
nvar = maxvar = 0;
names = NULL;
style = NULL;
num = NULL;
which = NULL;
pad = NULL;
reader = NULL;
data = NULL;
dvalue = NULL;
vecs = NULL;
eval_in_progress = NULL;
randomequal = NULL;
randomatom = NULL;
// customize by assigning a precedence level
precedence[DONE] = 0;
precedence[OR] = 1;
precedence[AND] = 2;
precedence[EQ] = precedence[NE] = 3;
precedence[LT] = precedence[LE] = precedence[GT] = precedence[GE] = 4;
precedence[ADD] = precedence[SUBTRACT] = 5;
precedence[MULTIPLY] = precedence[DIVIDE] = precedence[MODULO] = 6;
precedence[CARAT] = 7;
precedence[UNARY] = precedence[NOT] = 8;
// Python wrapper, real or dummy
python = new Python(lmp);
}
/* ---------------------------------------------------------------------- */
Variable::~Variable()
{
for (int i = 0; i < nvar; i++) {
delete [] names[i];
delete reader[i];
if (style[i] == LOOP || style[i] == ULOOP) delete [] data[i][0];
else for (int j = 0; j < num[i]; j++) delete [] data[i][j];
delete [] data[i];
if (style[i] == VECTOR) memory->destroy(vecs[i].values);
}
memory->sfree(names);
memory->destroy(style);
memory->destroy(num);
memory->destroy(which);
memory->destroy(pad);
memory->sfree(reader);
memory->sfree(data);
memory->sfree(dvalue);
memory->sfree(vecs);
memory->destroy(eval_in_progress);
delete randomequal;
delete randomatom;
delete python;
}
/* ----------------------------------------------------------------------
called by variable command in input script
------------------------------------------------------------------------- */
void Variable::set(int narg, char **arg)
{
if (narg < 2) error->all(FLERR,"Illegal variable command");
int replaceflag = 0;
// DELETE
// doesn't matter if variable no longer exists
if (strcmp(arg[1],"delete") == 0) {
if (narg != 2) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) remove(find(arg[0]));
return;
// INDEX
// num = listed args, which = 1st value, data = copied args
} else if (strcmp(arg[1],"index") == 0) {
if (narg < 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = INDEX;
num[nvar] = narg - 2;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(num[nvar],&arg[2],data[nvar]);
// LOOP
// 1 arg + pad: num = N, which = 1st value, data = single string
// 2 args + pad: num = N2, which = N1, data = single string
} else if (strcmp(arg[1],"loop") == 0) {
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = LOOP;
int nfirst,nlast;
if (narg == 3 || (narg == 4 && strcmp(arg[3],"pad") == 0)) {
nfirst = 1;
nlast = force->inumeric(FLERR,arg[2]);
if (nlast <= 0) error->all(FLERR,"Illegal variable command");
if (narg == 4 && strcmp(arg[3],"pad") == 0) {
char digits[12];
sprintf(digits,"%d",nlast);
pad[nvar] = strlen(digits);
} else pad[nvar] = 0;
} else if (narg == 4 || (narg == 5 && strcmp(arg[4],"pad") == 0)) {
nfirst = force->inumeric(FLERR,arg[2]);
nlast = force->inumeric(FLERR,arg[3]);
if (nfirst > nlast || nlast < 0)
error->all(FLERR,"Illegal variable command");
if (narg == 5 && strcmp(arg[4],"pad") == 0) {
char digits[12];
sprintf(digits,"%d",nlast);
pad[nvar] = strlen(digits);
} else pad[nvar] = 0;
} else error->all(FLERR,"Illegal variable command");
num[nvar] = nlast;
which[nvar] = nfirst-1;
data[nvar] = new char*[1];
data[nvar][0] = NULL;
// WORLD
// num = listed args, which = partition this proc is in, data = copied args
// error check that num = # of worlds in universe
} else if (strcmp(arg[1],"world") == 0) {
if (narg < 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = WORLD;
num[nvar] = narg - 2;
if (num[nvar] != universe->nworlds)
error->all(FLERR,"World variable count doesn't match # of partitions");
which[nvar] = universe->iworld;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(num[nvar],&arg[2],data[nvar]);
// UNIVERSE and ULOOP
// for UNIVERSE: num = listed args, data = copied args
// for ULOOP: num = N, data = single string
// which = partition this proc is in
// universe proc 0 creates lock file
// error check that all other universe/uloop variables are same length
} else if (strcmp(arg[1],"universe") == 0 || strcmp(arg[1],"uloop") == 0) {
if (strcmp(arg[1],"universe") == 0) {
if (narg < 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = UNIVERSE;
num[nvar] = narg - 2;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(num[nvar],&arg[2],data[nvar]);
} else if (strcmp(arg[1],"uloop") == 0) {
if (narg < 3 || narg > 4 || (narg == 4 && strcmp(arg[3],"pad") != 0))
error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = ULOOP;
num[nvar] = force->inumeric(FLERR,arg[2]);
data[nvar] = new char*[1];
data[nvar][0] = NULL;
if (narg == 4) {
char digits[12];
sprintf(digits,"%d",num[nvar]);
pad[nvar] = strlen(digits);
} else pad[nvar] = 0;
}
if (num[nvar] < universe->nworlds)
error->all(FLERR,"Universe/uloop variable count < # of partitions");
which[nvar] = universe->iworld;
if (universe->me == 0) {
FILE *fp = fopen("tmp.lammps.variable","w");
if (fp == NULL)
error->one(FLERR,"Cannot open temporary file for world counter.");
fprintf(fp,"%d\n",universe->nworlds);
fclose(fp);
fp = NULL;
}
for (int jvar = 0; jvar < nvar; jvar++)
if (num[jvar] && (style[jvar] == UNIVERSE || style[jvar] == ULOOP) &&
num[nvar] != num[jvar])
error->all(FLERR,
"All universe/uloop variables must have same # of values");
// STRING
// replace pre-existing var if also style STRING (allows it to be reset)
// num = 1, which = 1st value
// data = 1 value, string to eval
} else if (strcmp(arg[1],"string") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
int ivar = find(arg[0]);
if (ivar >= 0) {
if (style[ivar] != STRING)
error->all(FLERR,"Cannot redefine variable as a different style");
delete [] data[ivar][0];
copy(1,&arg[2],data[ivar]);
replaceflag = 1;
} else {
if (nvar == maxvar) grow();
style[nvar] = STRING;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
}
// GETENV
// remove pre-existing var if also style GETENV (allows it to be reset)
// num = 1, which = 1st value
// data = 1 value, string to eval
} else if (strcmp(arg[1],"getenv") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) {
if (style[find(arg[0])] != GETENV)
error->all(FLERR,"Cannot redefine variable as a different style");
remove(find(arg[0]));
}
if (nvar == maxvar) grow();
style[nvar] = GETENV;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
data[nvar][1] = new char[VALUELENGTH];
strcpy(data[nvar][1],"(undefined)");
// SCALARFILE for strings or numbers
// which = 1st value
// data = 1 value, string to eval
} else if (strcmp(arg[1],"file") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = SCALARFILE;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
data[nvar][0] = new char[MAXLINE];
reader[nvar] = new VarReader(lmp,arg[0],arg[2],SCALARFILE);
int flag = reader[nvar]->read_scalar(data[nvar][0]);
if (flag) error->all(FLERR,"File variable could not read value");
// ATOMFILE for numbers
// which = 1st value
// data = NULL
} else if (strcmp(arg[1],"atomfile") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = ATOMFILE;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
data[nvar][0] = NULL;
reader[nvar] = new VarReader(lmp,arg[0],arg[2],ATOMFILE);
int flag = reader[nvar]->read_peratom();
if (flag) error->all(FLERR,"Atomfile variable could not read values");
// FORMAT
// num = 3, which = 1st value
// data = 3 values
// 1st is name of variable to eval, 2nd is format string,
// 3rd is filled on retrieval
} else if (strcmp(arg[1],"format") == 0) {
if (narg != 4) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = FORMAT;
num[nvar] = 3;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(2,&arg[2],data[nvar]);
data[nvar][2] = new char[VALUELENGTH];
strcpy(data[nvar][2],"(undefined)");
// EQUAL
// replace pre-existing var if also style EQUAL (allows it to be reset)
// num = 2, which = 1st value
// data = 2 values, 1st is string to eval, 2nd is filled on retrieval
} else if (strcmp(arg[1],"equal") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
int ivar = find(arg[0]);
if (ivar >= 0) {
if (style[ivar] != EQUAL)
error->all(FLERR,"Cannot redefine variable as a different style");
delete [] data[ivar][0];
copy(1,&arg[2],data[ivar]);
replaceflag = 1;
} else {
if (nvar == maxvar) grow();
style[nvar] = EQUAL;
num[nvar] = 2;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
data[nvar][1] = new char[VALUELENGTH];
strcpy(data[nvar][1],"(undefined)");
}
// ATOM
// replace pre-existing var if also style ATOM (allows it to be reset)
// num = 1, which = 1st value
// data = 1 value, string to eval
} else if (strcmp(arg[1],"atom") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
int ivar = find(arg[0]);
if (ivar >= 0) {
if (style[ivar] != ATOM)
error->all(FLERR,"Cannot redefine variable as a different style");
delete [] data[ivar][0];
copy(1,&arg[2],data[ivar]);
replaceflag = 1;
} else {
if (nvar == maxvar) grow();
style[nvar] = ATOM;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
}
// VECTOR
// replace pre-existing var if also style VECTOR (allows it to be reset)
// num = 1, which = 1st value
// data = 1 value, string to eval
} else if (strcmp(arg[1],"vector") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
int ivar = find(arg[0]);
if (ivar >= 0) {
if (style[ivar] != VECTOR)
error->all(FLERR,"Cannot redefine variable as a different style");
delete [] data[ivar][0];
copy(1,&arg[2],data[ivar]);
replaceflag = 1;
} else {
if (nvar == maxvar) grow();
style[nvar] = VECTOR;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
}
// PYTHON
// replace pre-existing var if also style PYTHON (allows it to be reset)
// num = 2, which = 1st value
// data = 2 values, 1st is Python func to invoke, 2nd is filled by invoke
} else if (strcmp(arg[1],"python") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (!python->python_exists)
error->all(FLERR,"LAMMPS is not built with Python embedded");
int ivar = find(arg[0]);
if (ivar >= 0) {
if (style[ivar] != PYTHON)
error->all(FLERR,"Cannot redefine variable as a different style");
delete [] data[ivar][0];
copy(1,&arg[2],data[ivar]);
replaceflag = 1;
} else {
if (nvar == maxvar) grow();
style[nvar] = PYTHON;
num[nvar] = 2;
which[nvar] = 1;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
data[nvar][1] = new char[VALUELENGTH];
strcpy(data[nvar][1],"(undefined)");
}
// INTERNAL
// replace pre-existing var if also style INTERNAL (allows it to be reset)
// num = 1, for string representation of dvalue, set by retrieve()
// dvalue = numeric initialization from 2nd arg, reset by internal_set()
} else if (strcmp(arg[1],"internal") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
int ivar = find(arg[0]);
if (ivar >= 0) {
if (style[ivar] != INTERNAL)
error->all(FLERR,"Cannot redefine variable as a different style");
dvalue[nvar] = force->numeric(FLERR,arg[2]);
replaceflag = 1;
} else {
if (nvar == maxvar) grow();
style[nvar] = INTERNAL;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
data[nvar][0] = new char[VALUELENGTH];
dvalue[nvar] = force->numeric(FLERR,arg[2]);
}
} else error->all(FLERR,"Illegal variable command");
// set name of variable, if not replacing one flagged with replaceflag
// name must be all alphanumeric chars or underscores
if (replaceflag) return;
int n = strlen(arg[0]) + 1;
names[nvar] = new char[n];
strcpy(names[nvar],arg[0]);
for (int i = 0; i < n-1; i++)
if (!isalnum(names[nvar][i]) && names[nvar][i] != '_')
error->all(FLERR,"Variable name must be alphanumeric or "
"underscore characters");
nvar++;
}
/* ----------------------------------------------------------------------
INDEX variable created by command-line argument
make it INDEX rather than STRING so cannot be re-defined in input script
------------------------------------------------------------------------- */
void Variable::set(char *name, int narg, char **arg)
{
char **newarg = new char*[2+narg];
newarg[0] = name;
newarg[1] = (char *) "index";
for (int i = 0; i < narg; i++) newarg[2+i] = arg[i];
set(2+narg,newarg);
delete [] newarg;
}
/* ----------------------------------------------------------------------
set existing STRING variable to str
return 0 if successful
return -1 if variable doesn't exist or isn't a STRING variable
called via library interface, so external programs can set variables
------------------------------------------------------------------------- */
int Variable::set_string(char *name, char *str)
{
int ivar = find(name);
if (ivar < 0) return -1;
if (style[ivar] != STRING) return -1;
delete [] data[ivar][0];
copy(1,&str,data[ivar]);
return 0;
}
/* ----------------------------------------------------------------------
increment variable(s)
return 0 if OK if successfully incremented
return 1 if any variable is exhausted, free the variable to allow re-use
------------------------------------------------------------------------- */
int Variable::next(int narg, char **arg)
{
int ivar;
if (narg == 0) error->all(FLERR,"Illegal next command");
// check that variables exist and are all the same style
// exception: UNIVERSE and ULOOP variables can be mixed in same next command
for (int iarg = 0; iarg < narg; iarg++) {
ivar = find(arg[iarg]);
if (ivar < 0) error->all(FLERR,"Invalid variable in next command");
if (style[ivar] == ULOOP && style[find(arg[0])] == UNIVERSE) continue;
else if (style[ivar] == UNIVERSE && style[find(arg[0])] == ULOOP) continue;
else if (style[ivar] != style[find(arg[0])])
error->all(FLERR,"All variables in next command must be same style");
}
// invalid styles: STRING, EQUAL, WORLD, ATOM, VECTOR, GETENV,
// FORMAT, PYTHON, INTERNAL
int istyle = style[find(arg[0])];
if (istyle == STRING || istyle == EQUAL || istyle == WORLD ||
istyle == GETENV || istyle == ATOM || istyle == VECTOR ||
istyle == FORMAT || istyle == PYTHON || istyle == INTERNAL)
error->all(FLERR,"Invalid variable style with next command");
// if istyle = UNIVERSE or ULOOP, insure all such variables are incremented
if (istyle == UNIVERSE || istyle == ULOOP)
for (int i = 0; i < nvar; i++) {
if (style[i] != UNIVERSE && style[i] != ULOOP) continue;
int iarg = 0;
for (iarg = 0; iarg < narg; iarg++)
if (strcmp(arg[iarg],names[i]) == 0) break;
if (iarg == narg)
error->universe_one(FLERR,"Next command must list all "
"universe and uloop variables");
}
// increment all variables in list
// if any variable is exhausted, set flag = 1 and remove var to allow re-use
int flag = 0;
if (istyle == INDEX || istyle == LOOP) {
for (int iarg = 0; iarg < narg; iarg++) {
ivar = find(arg[iarg]);
which[ivar]++;
if (which[ivar] >= num[ivar]) {
flag = 1;
remove(ivar);
}
}
} else if (istyle == SCALARFILE) {
for (int iarg = 0; iarg < narg; iarg++) {
ivar = find(arg[iarg]);
int done = reader[ivar]->read_scalar(data[ivar][0]);
if (done) {
flag = 1;
remove(ivar);
}
}
} else if (istyle == ATOMFILE) {
for (int iarg = 0; iarg < narg; iarg++) {
ivar = find(arg[iarg]);
int done = reader[ivar]->read_peratom();
if (done) {
flag = 1;
remove(ivar);
}
}
} else if (istyle == UNIVERSE || istyle == ULOOP) {
// wait until lock file can be created and owned by proc 0 of this world
// rename() is not atomic in practice, but no known simple fix
// means multiple procs can read/write file at the same time (bad!)
// random delays help
// delay for random fraction of 1 second before first rename() call
// delay for random fraction of 1 second before subsequent tries
// when successful, read next available index and Bcast it within my world
int nextindex;
if (me == 0) {
int seed = 12345 + universe->me + which[find(arg[0])];
RanMars *random = new RanMars(lmp,seed);
int delay = (int) (1000000*random->uniform());
usleep(delay);
while (1) {
if (!rename("tmp.lammps.variable","tmp.lammps.variable.lock")) break;
delay = (int) (1000000*random->uniform());
usleep(delay);
}
delete random;
FILE *fp = fopen("tmp.lammps.variable.lock","r");
fscanf(fp,"%d",&nextindex);
//printf("READ %d %d\n",universe->me,nextindex);
fclose(fp);
fp = fopen("tmp.lammps.variable.lock","w");
fprintf(fp,"%d\n",nextindex+1);
//printf("WRITE %d %d\n",universe->me,nextindex+1);
fclose(fp);
fp = NULL;
rename("tmp.lammps.variable.lock","tmp.lammps.variable");
if (universe->uscreen)
fprintf(universe->uscreen,
"Increment via next: value %d on partition %d\n",
nextindex+1,universe->iworld);
if (universe->ulogfile)
fprintf(universe->ulogfile,
"Increment via next: value %d on partition %d\n",
nextindex+1,universe->iworld);
}
MPI_Bcast(&nextindex,1,MPI_INT,0,world);
// set all variables in list to nextindex
// must increment all UNIVERSE and ULOOP variables here
// error check above tested for this
for (int iarg = 0; iarg < narg; iarg++) {
ivar = find(arg[iarg]);
which[ivar] = nextindex;
if (which[ivar] >= num[ivar]) {
flag = 1;
remove(ivar);
}
}
}
return flag;
}
/* ----------------------------------------------------------------------
search for name in list of variables names
return index or -1 if not found
------------------------------------------------------------------------- */
int Variable::find(char *name)
{
for (int i = 0; i < nvar; i++)
if (strcmp(name,names[i]) == 0) return i;
return -1;
}
/* ----------------------------------------------------------------------
initialize one atom's storage values in all VarReaders via fix STORE
called when atom is created
------------------------------------------------------------------------- */
void Variable::set_arrays(int i)
{
for (int i = 0; i < nvar; i++)
if (reader[i] && style[i] == ATOMFILE)
reader[i]->fixstore->vstore[i] = 0.0;
}
/* ----------------------------------------------------------------------
called by python command in input script
simply pass input script line args to Python class
------------------------------------------------------------------------- */
void Variable::python_command(int narg, char **arg)
{
if (!python->python_exists)
error->all(FLERR,"LAMMPS is not built with Python embedded");
python->command(narg,arg);
}
/* ----------------------------------------------------------------------
return 1 if variable is EQUAL or INTERNAL or PYTHON numeric style, 0 if not
this is checked before call to compute_equal() to return a double
------------------------------------------------------------------------- */
int Variable::equalstyle(int ivar)
{
if (style[ivar] == EQUAL || style[ivar] == INTERNAL) return 1;
if (style[ivar] == PYTHON) {
int ifunc = python->variable_match(data[ivar][0],names[ivar],1);
if (ifunc < 0) return 0;
else return 1;
}
return 0;
}
/* ----------------------------------------------------------------------
return 1 if variable is ATOM or ATOMFILE style, 0 if not
this is checked before call to compute_atom() to return a vector of doubles
------------------------------------------------------------------------- */
int Variable::atomstyle(int ivar)
{
if (style[ivar] == ATOM || style[ivar] == ATOMFILE) return 1;
return 0;
}
/* ----------------------------------------------------------------------
return 1 if variable is VECTOR style, 0 if not
this is checked before call to compute_vector() to return a vector of doubles
------------------------------------------------------------------------- */
int Variable::vectorstyle(int ivar)
{
if (style[ivar] == VECTOR) return 1;
return 0;
}
/* ----------------------------------------------------------------------
check if variable with name is PYTHON and matches funcname
called by Python class before it invokes a Python function
return data storage so Python function can return a value for this variable
return NULL if not a match
------------------------------------------------------------------------- */
char *Variable::pythonstyle(char *name, char *funcname)
{
int ivar = find(name);
if (ivar < 0) return NULL;
if (style[ivar] != PYTHON) return NULL;
if (strcmp(data[ivar][0],funcname) != 0) return NULL;
return data[ivar][1];
}
/* ----------------------------------------------------------------------
return 1 if variable is INTERNAL style, 0 if not
this is checked before call to set_internal() to assure it can be set
------------------------------------------------------------------------- */
int Variable::internalstyle(int ivar)
{
if (style[ivar] == INTERNAL) return 1;
return 0;
}
/* ----------------------------------------------------------------------
return ptr to the data text associated with a variable
if INDEX or WORLD or UNIVERSE or STRING or SCALARFILE,
return ptr to stored string
if LOOP or ULOOP, write int to data[0] and return ptr to string
if EQUAL, evaluate variable and put result in str
if FORMAT, evaluate its variable and put formatted result in str
if GETENV, query environment and put result in str
if PYTHON, evaluate Python function, it will put result in str
if INTERNAL, convert dvalue and put result in str
if ATOM or ATOMFILE or VECTOR, return NULL
return NULL if no variable with name, or which value is bad,
caller must respond
------------------------------------------------------------------------- */
char *Variable::retrieve(char *name)
{
int ivar = find(name);
if (ivar < 0) return NULL;
if (which[ivar] >= num[ivar]) return NULL;
if (eval_in_progress[ivar])
error->all(FLERR,"Variable has circular dependency");
eval_in_progress[ivar] = 1;
char *str = NULL;
if (style[ivar] == INDEX || style[ivar] == WORLD ||
style[ivar] == UNIVERSE || style[ivar] == STRING ||
style[ivar] == SCALARFILE) {
str = data[ivar][which[ivar]];
} else if (style[ivar] == LOOP || style[ivar] == ULOOP) {
char result[16];
if (pad[ivar] == 0) sprintf(result,"%d",which[ivar]+1);
else {
char padstr[16];
sprintf(padstr,"%%0%dd",pad[ivar]);
sprintf(result,padstr,which[ivar]+1);
}
int n = strlen(result) + 1;
delete [] data[ivar][0];
data[ivar][0] = new char[n];
strcpy(data[ivar][0],result);
str = data[ivar][0];
} else if (style[ivar] == EQUAL) {
double answer = evaluate(data[ivar][0],NULL);
sprintf(data[ivar][1],"%.15g",answer);
str = data[ivar][1];
} else if (style[ivar] == FORMAT) {
int jvar = find(data[ivar][0]);
if (jvar == -1) return NULL;
if (!equalstyle(jvar)) return NULL;
double answer = compute_equal(jvar);
sprintf(data[ivar][2],data[ivar][1],answer);
str = data[ivar][2];
} else if (style[ivar] == GETENV) {
const char *result = getenv(data[ivar][0]);
if (result == NULL) result = (const char *) "";
int n = strlen(result) + 1;
if (n > VALUELENGTH) {
delete [] data[ivar][1];
data[ivar][1] = new char[n];
}
strcpy(data[ivar][1],result);
str = data[ivar][1];
} else if (style[ivar] == PYTHON) {
int ifunc = python->variable_match(data[ivar][0],names[ivar],0);
if (ifunc < 0)
error->all(FLERR,"Python variable does not match Python function");
python->invoke_function(ifunc,data[ivar][1]);
str = data[ivar][1];
} else if (style[ivar] == INTERNAL) {
sprintf(data[ivar][0],"%.15g",dvalue[ivar]);
str = data[ivar][0];
} else if (style[ivar] == ATOM || style[ivar] == ATOMFILE ||
style[ivar] == VECTOR) return NULL;
eval_in_progress[ivar] = 0;
return str;
}
/* ----------------------------------------------------------------------
return result of equal-style variable evaluation
can be EQUAL or INTERNAL style or PYTHON numeric style
for PYTHON, don't need to check python->variable_match() error return,
since caller will have already checked via equalstyle()
------------------------------------------------------------------------- */
double Variable::compute_equal(int ivar)
{
if (eval_in_progress[ivar])
error->all(FLERR,"Variable has circular dependency");
eval_in_progress[ivar] = 1;
- double value;
+ double value = 0.0;
if (style[ivar] == EQUAL) value = evaluate(data[ivar][0],NULL);
else if (style[ivar] == INTERNAL) value = dvalue[ivar];
else if (style[ivar] == PYTHON) {
int ifunc = python->find(data[ivar][0]);
if (ifunc < 0) error->all(FLERR,"Python variable has no function");
python->invoke_function(ifunc,data[ivar][1]);
value = atof(data[ivar][1]);
}
eval_in_progress[ivar] = 0;
return value;
}
/* ----------------------------------------------------------------------
return result of immediate equal-style variable evaluation
called from Input::substitute()
don't need to flag eval_in_progress since is an immediate variable
------------------------------------------------------------------------- */
double Variable::compute_equal(char *str)
{
return evaluate(str,NULL);
}
/* ----------------------------------------------------------------------
compute result of atom-style and atomfile-style variable evaluation
only computed for atoms in igroup, else result is 0.0
answers are placed every stride locations into result
if sumflag, add variable values to existing result
------------------------------------------------------------------------- */
void Variable::compute_atom(int ivar, int igroup,
double *result, int stride, int sumflag)
{
Tree *tree;
double *vstore;
if (eval_in_progress[ivar])
error->all(FLERR,"Variable has circular dependency");
eval_in_progress[ivar] = 1;
if (style[ivar] == ATOM) {
treetype = ATOM;
evaluate(data[ivar][0],&tree);
collapse_tree(tree);
} else vstore = reader[ivar]->fixstore->vstore;
if (result == NULL) {
eval_in_progress[ivar] = 0;
return;
}
int groupbit = group->bitmask[igroup];
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (style[ivar] == ATOM) {
if (sumflag == 0) {
int m = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) result[m] = eval_tree(tree,i);
else result[m] = 0.0;
m += stride;
}
} else {
int m = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) result[m] += eval_tree(tree,i);
m += stride;
}
}
} else {
if (sumflag == 0) {
int m = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) result[m] = vstore[i];
else result[m] = 0.0;
m += stride;
}
} else {
int m = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) result[m] += vstore[i];
m += stride;
}
}
}
if (style[ivar] == ATOM) free_tree(tree);
eval_in_progress[ivar] = 0;
}
/* ----------------------------------------------------------------------
compute result of vector-style variable evaluation
return length of vector and result pointer to vector values
if length == 0 or -1 (mismatch), generate an error
if variable already computed on this timestep, just return
else evaulate the formula and its length, store results in VecVar entry
------------------------------------------------------------------------- */
int Variable::compute_vector(int ivar, double **result)
{
Tree *tree;
if (vecs[ivar].currentstep == update->ntimestep) {
*result = vecs[ivar].values;
return vecs[ivar].n;
}
if (eval_in_progress[ivar])
error->all(FLERR,"Variable has circular dependency");
eval_in_progress[ivar] = 1;
treetype = VECTOR;
evaluate(data[ivar][0],&tree);
collapse_tree(tree);
int nlen = size_tree_vector(tree);
if (nlen == 0) error->all(FLERR,"Vector-style variable has zero length");
if (nlen < 0) error->all(FLERR,
"Inconsistent lengths in vector-style variable");
// (re)allocate space for results if necessary
if (nlen > vecs[ivar].nmax) {
memory->destroy(vecs[ivar].values);
vecs[ivar].nmax = nlen;
memory->create(vecs[ivar].values,vecs[ivar].nmax,"variable:values");
}
vecs[ivar].n = nlen;
vecs[ivar].currentstep = update->ntimestep;
double *vec = vecs[ivar].values;
for (int i = 0; i < nlen; i++)
vec[i] = eval_tree(tree,i);
free_tree(tree);
eval_in_progress[ivar] = 0;
*result = vec;
return nlen;
}
/* ----------------------------------------------------------------------
set value stored by INTERNAL style ivar
------------------------------------------------------------------------- */
void Variable::internal_set(int ivar, double value)
{
dvalue[ivar] = value;
}
/* ----------------------------------------------------------------------
remove Nth variable from list and compact list
delete reader explicitly if it exists
------------------------------------------------------------------------- */
void Variable::remove(int n)
{
delete [] names[n];
if (style[n] == LOOP || style[n] == ULOOP) delete [] data[n][0];
else for (int i = 0; i < num[n]; i++) delete [] data[n][i];
delete [] data[n];
delete reader[n];
for (int i = n+1; i < nvar; i++) {
names[i-1] = names[i];
style[i-1] = style[i];
num[i-1] = num[i];
which[i-1] = which[i];
pad[i-1] = pad[i];
reader[i-1] = reader[i];
data[i-1] = data[i];
}
nvar--;
}
/* ----------------------------------------------------------------------
make space in arrays for new variable
------------------------------------------------------------------------- */
void Variable::grow()
{
int old = maxvar;
maxvar += VARDELTA;
names = (char **) memory->srealloc(names,maxvar*sizeof(char *),"var:names");
memory->grow(style,maxvar,"var:style");
memory->grow(num,maxvar,"var:num");
memory->grow(which,maxvar,"var:which");
memory->grow(pad,maxvar,"var:pad");
reader = (VarReader **)
memory->srealloc(reader,maxvar*sizeof(VarReader *),"var:reader");
for (int i = old; i < maxvar; i++) reader[i] = NULL;
data = (char ***) memory->srealloc(data,maxvar*sizeof(char **),"var:data");
memory->grow(dvalue,maxvar,"var:dvalue");
vecs = (VecVar *) memory->srealloc(vecs,maxvar*sizeof(VecVar),"var:vecvar");
for (int i = old; i < maxvar; i++) {
vecs[i].nmax = 0;
vecs[i].currentstep = -1;
vecs[i].values = NULL;
}
memory->grow(eval_in_progress,maxvar,"var:eval_in_progress");
for (int i = 0; i < maxvar; i++) eval_in_progress[i] = 0;
}
/* ----------------------------------------------------------------------
copy narg strings from **from to **to, and allocate space for them
------------------------------------------------------------------------- */
void Variable::copy(int narg, char **from, char **to)
{
int n;
for (int i = 0; i < narg; i++) {
n = strlen(from[i]) + 1;
to[i] = new char[n];
strcpy(to[i],from[i]);
}
}
/* ----------------------------------------------------------------------
recursive evaluation of a string str
str is an equal-style or atom-style or vector-style formula
containing one or more items:
number = 0.0, -5.45, 2.8e-4, ...
constant = PI, version, yes, no, on, off
thermo keyword = ke, vol, atoms, ...
math operation = (),-x,x+y,x-y,x*y,x/y,x^y,
x==y,x!=y,x<y,x<=y,x>y,x>=y,x&&y,x||y,
sqrt(x),exp(x),ln(x),log(x),abs(x),
sin(x),cos(x),tan(x),asin(x),atan2(y,x),...
group function = count(group), mass(group), xcm(group,x), ...
special function = sum(x),min(x), ...
atom value = x[i], y[i], vx[i], ...
atom vector = x, y, vx, ...
compute = c_ID, c_ID[i], c_ID[i][j]
fix = f_ID, f_ID[i], f_ID[i][j]
variable = v_name, v_name[i]
equal-style variables passes in tree = NULL:
evaluate the formula, return result as a double
atom-style and vector-style variables pass in tree = non-NULL:
parse the formula but do not evaluate it
create a parse tree and return it
------------------------------------------------------------------------- */
double Variable::evaluate(char *str, Tree **tree)
{
int op,opprevious;
double value1,value2;
char onechar;
char *ptr;
double argstack[MAXLEVEL];
Tree *treestack[MAXLEVEL];
int opstack[MAXLEVEL];
int nargstack = 0;
int ntreestack = 0;
int nopstack = 0;
int i = 0;
int expect = ARG;
while (1) {
onechar = str[i];
// whitespace: just skip
if (isspace(onechar)) i++;
// ----------------
// parentheses: recursively evaluate contents of parens
// ----------------
else if (onechar == '(') {
if (expect == OP) error->all(FLERR,"Invalid syntax in variable formula");
expect = OP;
char *contents;
i = find_matching_paren(str,i,contents);
i++;
// evaluate contents and push on stack
if (tree) {
Tree *newtree;
evaluate(contents,&newtree);
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = evaluate(contents,NULL);
delete [] contents;
// ----------------
// number: push value onto stack
// ----------------
} else if (isdigit(onechar) || onechar == '.') {
if (expect == OP) error->all(FLERR,"Invalid syntax in variable formula");
expect = OP;
// istop = end of number, including scientific notation
int istart = i;
while (isdigit(str[i]) || str[i] == '.') i++;
if (str[i] == 'e' || str[i] == 'E') {
i++;
if (str[i] == '+' || str[i] == '-') i++;
while (isdigit(str[i])) i++;
}
int istop = i - 1;
int n = istop - istart + 1;
char *number = new char[n+1];
strncpy(number,&str[istart],n);
number[n] = '\0';
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = atof(number);
newtree->first = newtree->second = NULL;
newtree->extra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = atof(number);
delete [] number;
// ----------------
// letter: c_ID, c_ID[], c_ID[][], f_ID, f_ID[], f_ID[][],
// v_name, v_name[], exp(), xcm(,), x, x[], PI, vol
// ----------------
} else if (isalpha(onechar)) {
if (expect == OP) error->all(FLERR,"Invalid syntax in variable formula");
expect = OP;
// istop = end of word
// word = all alphanumeric or underscore
int istart = i;
while (isalnum(str[i]) || str[i] == '_') i++;
int istop = i-1;
int n = istop - istart + 1;
char *word = new char[n+1];
strncpy(word,&str[istart],n);
word[n] = '\0';
// ----------------
// compute
// ----------------
if (strncmp(word,"c_",2) == 0 || strncmp(word,"C_",2) == 0) {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
// uppercase used to force access of
// global vector vs global scalar, and global array vs global vector
int lowercase = 1;
if (word[0] == 'C') lowercase = 0;
int icompute = modify->find_compute(word+2);
if (icompute < 0)
error->all(FLERR,"Invalid compute ID in variable formula");
Compute *compute = modify->compute[icompute];
// parse zero or one or two trailing brackets
// point i beyond last bracket
// nbracket = # of bracket pairs
// index1,index2 = int inside each bracket pair, possibly an atom ID
int nbracket;
tagint index1,index2;
if (str[i] != '[') nbracket = 0;
else {
nbracket = 1;
ptr = &str[i];
index1 = int_between_brackets(ptr,1);
i = ptr-str+1;
if (str[i] == '[') {
nbracket = 2;
ptr = &str[i];
index2 = int_between_brackets(ptr,1);
i = ptr-str+1;
}
}
// c_ID = scalar from global scalar, must be lowercase
if (nbracket == 0 && compute->scalar_flag && lowercase) {
if (update->whichflag == 0) {
if (compute->invoked_scalar != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_SCALAR)) {
compute->compute_scalar();
compute->invoked_flag |= INVOKED_SCALAR;
}
value1 = compute->scalar;
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// c_ID[i] = scalar from global vector, must be lowercase
} else if (nbracket == 1 && compute->vector_flag && lowercase) {
if (index1 > compute->size_vector &&
compute->size_vector_variable == 0)
error->all(FLERR,"Variable formula compute vector "
"is accessed out-of-range");
if (update->whichflag == 0) {
if (compute->invoked_vector != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
if (compute->size_vector_variable &&
index1 > compute->size_vector) value1 = 0.0;
else value1 = compute->vector[index1-1];
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// c_ID[i][j] = scalar from global array, must be lowercase
} else if (nbracket == 2 && compute->array_flag && lowercase) {
if (index1 > compute->size_array_rows &&
compute->size_array_rows_variable == 0)
error->all(FLERR,"Variable formula compute array "
"is accessed out-of-range");
if (index2 > compute->size_array_cols)
error->all(FLERR,"Variable formula compute array "
"is accessed out-of-range");
if (update->whichflag == 0) {
if (compute->invoked_array != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_ARRAY)) {
compute->compute_array();
compute->invoked_flag |= INVOKED_ARRAY;
}
if (compute->size_array_rows_variable &&
index1 > compute->size_array_rows) value1 = 0.0;
else value1 = compute->array[index1-1][index2-1];
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// c_ID = vector from global vector, lowercase or uppercase
} else if (nbracket == 0 && compute->vector_flag) {
if (tree == NULL)
error->all(FLERR,
"Compute global vector in equal-style variable formula");
if (treetype == ATOM)
error->all(FLERR,
"Compute global vector in atom-style variable formula");
if (compute->size_vector == 0)
error->all(FLERR,"Variable formula compute vector is zero length");
if (update->whichflag == 0) {
if (compute->invoked_vector != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
Tree *newtree = new Tree();
newtree->type = VECTORARRAY;
newtree->array = compute->vector;
newtree->nvector = compute->size_vector;
newtree->nstride = 1;
newtree->selfalloc = 0;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
// c_ID[i] = vector from global array, lowercase or uppercase
} else if (nbracket == 1 && compute->array_flag) {
if (tree == NULL)
error->all(FLERR,
"Compute global vector in equal-style variable formula");
if (treetype == ATOM)
error->all(FLERR,
"Compute global vector in atom-style variable formula");
if (compute->size_array_rows == 0)
error->all(FLERR,"Variable formula compute array is zero length");
if (update->whichflag == 0) {
if (compute->invoked_array != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_ARRAY)) {
compute->compute_array();
compute->invoked_flag |= INVOKED_ARRAY;
}
Tree *newtree = new Tree();
newtree->type = VECTORARRAY;
newtree->array = &compute->array[0][index1-1];
newtree->nvector = compute->size_array_rows;
newtree->nstride = compute->size_array_cols;
newtree->selfalloc = 0;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
// c_ID[i] = scalar from per-atom vector
} else if (nbracket == 1 && compute->peratom_flag &&
compute->size_peratom_cols == 0) {
if (update->whichflag == 0) {
if (compute->invoked_peratom != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
peratom2global(1,NULL,compute->vector_atom,1,index1,
tree,treestack,ntreestack,argstack,nargstack);
// c_ID[i][j] = scalar from per-atom array
} else if (nbracket == 2 && compute->peratom_flag &&
compute->size_peratom_cols > 0) {
if (index2 > compute->size_peratom_cols)
error->all(FLERR,"Variable formula compute array "
"is accessed out-of-range");
if (update->whichflag == 0) {
if (compute->invoked_peratom != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
if (compute->array_atom)
peratom2global(1,NULL,&compute->array_atom[0][index2-1],
compute->size_peratom_cols,index1,
tree,treestack,ntreestack,argstack,nargstack);
else
peratom2global(1,NULL,NULL,
compute->size_peratom_cols,index1,
tree,treestack,ntreestack,argstack,nargstack);
// c_ID = vector from per-atom vector
} else if (nbracket == 0 && compute->peratom_flag &&
compute->size_peratom_cols == 0) {
if (tree == NULL)
error->all(FLERR,
"Per-atom compute in equal-style variable formula");
if (treetype == VECTOR)
error->all(FLERR,
"Per-atom compute in vector-style variable formula");
if (update->whichflag == 0) {
if (compute->invoked_peratom != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
newtree->array = compute->vector_atom;
newtree->nstride = 1;
newtree->selfalloc = 0;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
// c_ID[i] = vector from per-atom array
} else if (nbracket == 1 && compute->peratom_flag &&
compute->size_peratom_cols > 0) {
if (tree == NULL)
error->all(FLERR,
"Per-atom compute in equal-style variable formula");
if (treetype == VECTOR)
error->all(FLERR,
"Per-atom compute in vector-style variable formula");
if (index1 > compute->size_peratom_cols)
error->all(FLERR,"Variable formula compute array "
"is accessed out-of-range");
if (update->whichflag == 0) {
if (compute->invoked_peratom != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
if (compute->array_atom)
newtree->array = &compute->array_atom[0][index1-1];
else
newtree->array = NULL;
newtree->nstride = compute->size_peratom_cols;
newtree->selfalloc = 0;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else error->all(FLERR,"Mismatched compute in variable formula");
// ----------------
// fix
// ----------------
} else if (strncmp(word,"f_",2) == 0 || strncmp(word,"F_",2) == 0) {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
// uppercase used to force access of
// global vector vs global scalar, and global array vs global vector
int lowercase = 1;
if (word[0] == 'F') lowercase = 0;
int ifix = modify->find_fix(word+2);
if (ifix < 0) error->all(FLERR,"Invalid fix ID in variable formula");
Fix *fix = modify->fix[ifix];
// parse zero or one or two trailing brackets
// point i beyond last bracket
// nbracket = # of bracket pairs
// index1,index2 = int inside each bracket pair, possibly an atom ID
int nbracket;
tagint index1,index2;
if (str[i] != '[') nbracket = 0;
else {
nbracket = 1;
ptr = &str[i];
index1 = int_between_brackets(ptr,1);
i = ptr-str+1;
if (str[i] == '[') {
nbracket = 2;
ptr = &str[i];
index2 = int_between_brackets(ptr,1);
i = ptr-str+1;
}
}
// f_ID = scalar from global scalar, must be lowercase
if (nbracket == 0 && fix->scalar_flag && lowercase) {
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
value1 = fix->compute_scalar();
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// f_ID[i] = scalar from global vector, must be lowercase
} else if (nbracket == 1 && fix->vector_flag && lowercase) {
if (index1 > fix->size_vector &&
fix->size_vector_variable == 0)
error->all(FLERR,"Variable formula fix vector is "
"accessed out-of-range");
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
value1 = fix->compute_vector(index1-1);
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// f_ID[i][j] = scalar from global array, must be lowercase
} else if (nbracket == 2 && fix->array_flag && lowercase) {
if (index1 > fix->size_array_rows &&
fix->size_array_rows_variable == 0)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
if (index2 > fix->size_array_cols)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
value1 = fix->compute_array(index1-1,index2-1);
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// f_ID = vector from global vector, lowercase or uppercase
} else if (nbracket == 0 && fix->vector_flag) {
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
if (tree == NULL)
error->all(FLERR,"Fix global vector in "
"equal-style variable formula");
if (treetype == ATOM)
error->all(FLERR,"Fix global vector in "
"atom-style variable formula");
if (fix->size_vector == 0)
error->all(FLERR,"Variable formula fix vector is zero length");
int nvec = fix->size_vector;
double *vec;
memory->create(vec,nvec,"variable:values");
for (int m = 0; m < nvec; m++)
vec[m] = fix->compute_vector(m);
Tree *newtree = new Tree();
newtree->type = VECTORARRAY;
newtree->array = vec;
newtree->nvector = nvec;
newtree->nstride = 1;
newtree->selfalloc = 1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
// f_ID[i] = vector from global array, lowercase or uppercase
} else if (nbracket == 1 && fix->array_flag) {
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
if (tree == NULL)
error->all(FLERR,"Fix global vector in "
"equal-style variable formula");
if (treetype == ATOM)
error->all(FLERR,"Fix global vector in "
"atom-style variable formula");
if (fix->size_array_rows == 0)
error->all(FLERR,"Variable formula fix array is zero length");
int nvec = fix->size_array_rows;
double *vec;
memory->create(vec,nvec,"variable:values");
for (int m = 0; m < nvec; m++)
vec[m] = fix->compute_array(m,index1-1);
Tree *newtree = new Tree();
newtree->type = VECTORARRAY;
newtree->array = vec;
newtree->nvector = nvec;
newtree->nstride = 1;
newtree->selfalloc = 1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
// f_ID[i] = scalar from per-atom vector
} else if (nbracket == 1 && fix->peratom_flag &&
fix->size_peratom_cols == 0) {
if (update->whichflag > 0 &&
update->ntimestep % fix->peratom_freq)
error->all(FLERR,
"Fix in variable not computed at compatible time");
peratom2global(1,NULL,fix->vector_atom,1,index1,
tree,treestack,ntreestack,argstack,nargstack);
// f_ID[i][j] = scalar from per-atom array
} else if (nbracket == 2 && fix->peratom_flag &&
fix->size_peratom_cols > 0) {
if (index2 > fix->size_peratom_cols)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
if (update->whichflag > 0 &&
update->ntimestep % fix->peratom_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
if (fix->array_atom)
peratom2global(1,NULL,&fix->array_atom[0][index2-1],
fix->size_peratom_cols,index1,
tree,treestack,ntreestack,argstack,nargstack);
else
peratom2global(1,NULL,NULL,
fix->size_peratom_cols,index1,
tree,treestack,ntreestack,argstack,nargstack);
// f_ID = vector from per-atom vector
} else if (nbracket == 0 && fix->peratom_flag &&
fix->size_peratom_cols == 0) {
if (tree == NULL)
error->all(FLERR,"Per-atom fix in equal-style variable formula");
if (update->whichflag > 0 &&
update->ntimestep % fix->peratom_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
newtree->array = fix->vector_atom;
newtree->nstride = 1;
newtree->selfalloc = 0;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
// f_ID[i] = vector from per-atom array
} else if (nbracket == 1 && fix->peratom_flag &&
fix->size_peratom_cols > 0) {
if (tree == NULL)
error->all(FLERR,"Per-atom fix in equal-style variable formula");
if (index1 > fix->size_peratom_cols)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
if (update->whichflag > 0 &&
update->ntimestep % fix->peratom_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
if (fix->array_atom)
newtree->array = &fix->array_atom[0][index1-1];
else
newtree->array = NULL;
newtree->nstride = fix->size_peratom_cols;
newtree->selfalloc = 0;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else error->all(FLERR,"Mismatched fix in variable formula");
// ----------------
// variable
// ----------------
} else if (strncmp(word,"v_",2) == 0) {
int ivar = find(word+2);
if (ivar < 0)
error->all(FLERR,"Invalid variable name in variable formula");
if (eval_in_progress[ivar])
error->all(FLERR,"Variable has circular dependency");
// parse zero or one trailing brackets
// point i beyond last bracket
// nbracket = # of bracket pairs
// index = int inside bracket, possibly an atom ID
int nbracket;
tagint index;
if (str[i] != '[') nbracket = 0;
else {
nbracket = 1;
ptr = &str[i];
index = int_between_brackets(ptr,1);
i = ptr-str+1;
}
// v_name = scalar from internal-style variable
// access value directly
if (nbracket == 0 && style[ivar] == INTERNAL) {
value1 = dvalue[ivar];
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// v_name = scalar from non atom/atomfile & non vector-style variable
// access value via retrieve()
} else if (nbracket == 0 && style[ivar] != ATOM &&
style[ivar] != ATOMFILE && style[ivar] != VECTOR) {
char *var = retrieve(word+2);
if (var == NULL)
error->all(FLERR,"Invalid variable evaluation in variable formula");
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = atof(var);
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = atof(var);
// v_name = per-atom vector from atom-style variable
// evaluate the atom-style variable as newtree
} else if (nbracket == 0 && style[ivar] == ATOM) {
if (tree == NULL)
error->all(FLERR,
"Atom-style variable in equal-style variable formula");
if (treetype == VECTOR)
error->all(FLERR,
"Atom-style variable in vector-style variable formula");
Tree *newtree;
evaluate(data[ivar][0],&newtree);
treestack[ntreestack++] = newtree;
// v_name = per-atom vector from atomfile-style variable
} else if (nbracket == 0 && style[ivar] == ATOMFILE) {
if (tree == NULL)
error->all(FLERR,"Atomfile-style variable in "
"equal-style variable formula");
if (treetype == VECTOR)
error->all(FLERR,"Atomfile-style variable in "
"vector-style variable formula");
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
newtree->array = reader[ivar]->fixstore->vstore;
newtree->nstride = 1;
newtree->selfalloc = 0;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
// v_name = vector from vector-style variable
// evaluate the vector-style variable, put result in newtree
} else if (nbracket == 0 && style[ivar] == VECTOR) {
if (tree == NULL)
error->all(FLERR,
"Vector-style variable in equal-style variable formula");
if (treetype == ATOM)
error->all(FLERR,
"Vector-style variable in atom-style variable formula");
double *vec;
int nvec = compute_vector(ivar,&vec);
Tree *newtree = new Tree();
newtree->type = VECTORARRAY;
newtree->array = vec;
newtree->nvector = nvec;
newtree->nstride = 1;
newtree->selfalloc = 0;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
// v_name[N] = scalar from atom-style variable
// compute the per-atom variable in result
// use peratom2global to extract single value from result
} else if (nbracket && style[ivar] == ATOM) {
double *result;
memory->create(result,atom->nlocal,"variable:result");
compute_atom(ivar,0,result,1,0);
peratom2global(1,NULL,result,1,index,
tree,treestack,ntreestack,argstack,nargstack);
memory->destroy(result);
// v_name[N] = scalar from atomfile-style variable
} else if (nbracket && style[ivar] == ATOMFILE) {
peratom2global(1,NULL,reader[ivar]->fixstore->vstore,1,index,
tree,treestack,ntreestack,argstack,nargstack);
// v_name[N] = scalar from vector-style variable
// compute the vector-style variable, extract single value
} else if (nbracket && style[ivar] == VECTOR) {
double *vec;
int nvec = compute_vector(ivar,&vec);
if (index <= 0 || index > nvec)
error->all(FLERR,"Invalid index into vector-style variable");
int m = index; // convert from tagint to int
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = vec[m-1];
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = vec[m-1];
} else error->all(FLERR,"Mismatched variable in variable formula");
// ----------------
// math/group/special function or atom value/vector or
// constant or thermo keyword
// ----------------
} else {
// ----------------
// math or group or special function
// ----------------
if (str[i] == '(') {
char *contents;
i = find_matching_paren(str,i,contents);
i++;
if (math_function(word,contents,tree,
treestack,ntreestack,argstack,nargstack));
else if (group_function(word,contents,tree,
treestack,ntreestack,argstack,nargstack));
else if (special_function(word,contents,tree,
treestack,ntreestack,argstack,nargstack));
else error->all(FLERR,"Invalid math/group/special function "
"in variable formula");
delete [] contents;
// ----------------
// atom value
// ----------------
} else if (str[i] == '[') {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
ptr = &str[i];
tagint id = int_between_brackets(ptr,1);
i = ptr-str+1;
peratom2global(0,word,NULL,0,id,
tree,treestack,ntreestack,argstack,nargstack);
// ----------------
// atom vector
// ----------------
} else if (is_atom_vector(word)) {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
atom_vector(word,tree,treestack,ntreestack);
// ----------------
// constant
// ----------------
} else if (is_constant(word)) {
value1 = constant(word);
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// ----------------
// thermo keyword
// ----------------
} else {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
int flag = output->thermo->evaluate_keyword(word,&value1);
if (flag)
error->all(FLERR,"Invalid thermo keyword in variable formula");
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
}
}
delete [] word;
// ----------------
// math operator, including end-of-string
// ----------------
} else if (strchr("+-*/^<>=!&|%\0",onechar)) {
if (onechar == '+') op = ADD;
else if (onechar == '-') op = SUBTRACT;
else if (onechar == '*') op = MULTIPLY;
else if (onechar == '/') op = DIVIDE;
else if (onechar == '%') op = MODULO;
else if (onechar == '^') op = CARAT;
else if (onechar == '=') {
if (str[i+1] != '=')
error->all(FLERR,"Invalid syntax in variable formula");
op = EQ;
i++;
} else if (onechar == '!') {
if (str[i+1] == '=') {
op = NE;
i++;
} else op = NOT;
} else if (onechar == '<') {
if (str[i+1] != '=') op = LT;
else {
op = LE;
i++;
}
} else if (onechar == '>') {
if (str[i+1] != '=') op = GT;
else {
op = GE;
i++;
}
} else if (onechar == '&') {
if (str[i+1] != '&')
error->all(FLERR,"Invalid syntax in variable formula");
op = AND;
i++;
} else if (onechar == '|') {
if (str[i+1] != '|')
error->all(FLERR,"Invalid syntax in variable formula");
op = OR;
i++;
} else op = DONE;
i++;
if (op == SUBTRACT && expect == ARG) {
opstack[nopstack++] = UNARY;
continue;
}
if (op == NOT && expect == ARG) {
opstack[nopstack++] = op;
continue;
}
if (expect == ARG) error->all(FLERR,"Invalid syntax in variable formula");
expect = ARG;
// evaluate stack as deep as possible while respecting precedence
// before pushing current op onto stack
while (nopstack && precedence[opstack[nopstack-1]] >= precedence[op]) {
opprevious = opstack[--nopstack];
if (tree) {
Tree *newtree = new Tree();
newtree->type = opprevious;
if (opprevious == UNARY) {
newtree->first = treestack[--ntreestack];
newtree->second = NULL;
newtree->nextra = 0;
} else {
newtree->second = treestack[--ntreestack];
newtree->first = treestack[--ntreestack];
newtree->nextra = 0;
}
treestack[ntreestack++] = newtree;
} else {
value2 = argstack[--nargstack];
if (opprevious != UNARY && opprevious != NOT)
value1 = argstack[--nargstack];
if (opprevious == ADD)
argstack[nargstack++] = value1 + value2;
else if (opprevious == SUBTRACT)
argstack[nargstack++] = value1 - value2;
else if (opprevious == MULTIPLY)
argstack[nargstack++] = value1 * value2;
else if (opprevious == DIVIDE) {
if (value2 == 0.0)
error->all(FLERR,"Divide by 0 in variable formula");
argstack[nargstack++] = value1 / value2;
} else if (opprevious == MODULO) {
if (value2 == 0.0)
error->all(FLERR,"Modulo 0 in variable formula");
argstack[nargstack++] = fmod(value1,value2);
} else if (opprevious == CARAT) {
if (value2 == 0.0)
error->all(FLERR,"Power by 0 in variable formula");
argstack[nargstack++] = pow(value1,value2);
} else if (opprevious == UNARY) {
argstack[nargstack++] = -value2;
} else if (opprevious == NOT) {
if (value2 == 0.0) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == EQ) {
if (value1 == value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == NE) {
if (value1 != value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == LT) {
if (value1 < value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == LE) {
if (value1 <= value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == GT) {
if (value1 > value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == GE) {
if (value1 >= value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == AND) {
if (value1 != 0.0 && value2 != 0.0) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == OR) {
if (value1 != 0.0 || value2 != 0.0) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
}
}
}
// if end-of-string, break out of entire formula evaluation loop
if (op == DONE) break;
// push current operation onto stack
opstack[nopstack++] = op;
} else error->all(FLERR,"Invalid syntax in variable formula");
}
if (nopstack) error->all(FLERR,"Invalid syntax in variable formula");
// for atom-style variable, return remaining tree
// for equal-style variable, return remaining arg
if (tree) {
if (ntreestack != 1) error->all(FLERR,"Invalid syntax in variable formula");
*tree = treestack[0];
return 0.0;
} else {
if (nargstack != 1) error->all(FLERR,"Invalid syntax in variable formula");
return argstack[0];
}
}
/* ----------------------------------------------------------------------
one-time collapse of an atom-style variable parse tree
tree was created by one-time parsing of formula string via evaluate()
only keep tree nodes that depend on
ATOMARRAY, TYPEARRAY, INTARRAY, BIGINTARRAY, VECTOR
remainder is converted to single VALUE
this enables optimal eval_tree loop over atoms
customize by adding a function:
sqrt(),exp(),ln(),log(),abs(),sin(),cos(),tan(),asin(),acos(),atan(),
atan2(y,x),random(x,y,z),normal(x,y,z),ceil(),floor(),round(),
ramp(x,y),stagger(x,y),logfreq(x,y,z),logfreq2(x,y,z),
stride(x,y,z),vdisplace(x,y),swiggle(x,y,z),cwiggle(x,y,z),
gmask(x),rmask(x),grmask(x,y)
---------------------------------------------------------------------- */
double Variable::collapse_tree(Tree *tree)
{
double arg1,arg2;
if (tree->type == VALUE) return tree->value;
if (tree->type == ATOMARRAY) return 0.0;
if (tree->type == TYPEARRAY) return 0.0;
if (tree->type == INTARRAY) return 0.0;
if (tree->type == BIGINTARRAY) return 0.0;
if (tree->type == VECTORARRAY) return 0.0;
if (tree->type == ADD) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = arg1 + arg2;
return tree->value;
}
if (tree->type == SUBTRACT) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = arg1 - arg2;
return tree->value;
}
if (tree->type == MULTIPLY) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = arg1 * arg2;
return tree->value;
}
if (tree->type == DIVIDE) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg2 == 0.0) error->one(FLERR,"Divide by 0 in variable formula");
tree->value = arg1 / arg2;
return tree->value;
}
if (tree->type == MODULO) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg2 == 0.0) error->one(FLERR,"Modulo 0 in variable formula");
tree->value = fmod(arg1,arg2);
return tree->value;
}
if (tree->type == CARAT) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg2 == 0.0) error->one(FLERR,"Power by 0 in variable formula");
tree->value = pow(arg1,arg2);
return tree->value;
}
if (tree->type == UNARY) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = -arg1;
return tree->value;
}
if (tree->type == NOT) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 == 0.0) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == EQ) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 == arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == NE) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 != arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == LT) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 < arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == LE) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 <= arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == GT) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 > arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == GE) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 >= arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == AND) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 != 0.0 && arg2 != 0.0) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == OR) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 != 0.0 || arg2 != 0.0) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == SQRT) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 < 0.0)
error->one(FLERR,"Sqrt of negative value in variable formula");
tree->value = sqrt(arg1);
return tree->value;
}
if (tree->type == EXP) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = exp(arg1);
return tree->value;
}
if (tree->type == LN) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 <= 0.0)
error->one(FLERR,"Log of zero/negative value in variable formula");
tree->value = log(arg1);
return tree->value;
}
if (tree->type == LOG) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 <= 0.0)
error->one(FLERR,"Log of zero/negative value in variable formula");
tree->value = log10(arg1);
return tree->value;
}
if (tree->type == ABS) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = fabs(arg1);
return tree->value;
}
if (tree->type == SIN) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = sin(arg1);
return tree->value;
}
if (tree->type == COS) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = cos(arg1);
return tree->value;
}
if (tree->type == TAN) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = tan(arg1);
return tree->value;
}
if (tree->type == ASIN) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 < -1.0 || arg1 > 1.0)
error->one(FLERR,"Arcsin of invalid value in variable formula");
tree->value = asin(arg1);
return tree->value;
}
if (tree->type == ACOS) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 < -1.0 || arg1 > 1.0)
error->one(FLERR,"Arccos of invalid value in variable formula");
tree->value = acos(arg1);
return tree->value;
}
if (tree->type == ATAN) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = atan(arg1);
return tree->value;
}
if (tree->type == ATAN2) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = atan2(arg1,arg2);
return tree->value;
}
// random() or normal() do not become a single collapsed value
if (tree->type == RANDOM) {
collapse_tree(tree->first);
collapse_tree(tree->second);
if (randomatom == NULL) {
int seed = static_cast<int> (collapse_tree(tree->extra[0]));
if (seed <= 0)
error->one(FLERR,"Invalid math function in variable formula");
randomatom = new RanMars(lmp,seed+me);
}
return 0.0;
}
if (tree->type == NORMAL) {
collapse_tree(tree->first);
double sigma = collapse_tree(tree->second);
if (sigma < 0.0)
error->one(FLERR,"Invalid math function in variable formula");
if (randomatom == NULL) {
int seed = static_cast<int> (collapse_tree(tree->extra[0]));
if (seed <= 0)
error->one(FLERR,"Invalid math function in variable formula");
randomatom = new RanMars(lmp,seed+me);
}
return 0.0;
}
if (tree->type == CEIL) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = ceil(arg1);
return tree->value;
}
if (tree->type == FLOOR) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = floor(arg1);
return tree->value;
}
if (tree->type == ROUND) {
arg1 = collapse_tree(tree->first);
if (tree->first->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = MYROUND(arg1);
return tree->value;
}
if (tree->type == RAMP) {
arg1 = collapse_tree(tree->first);
arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
tree->value = arg1 + delta*(arg2-arg1);
return tree->value;
}
if (tree->type == STAGGER) {
int ivalue1 = static_cast<int> (collapse_tree(tree->first));
int ivalue2 = static_cast<int> (collapse_tree(tree->second));
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue1 <= ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
int lower = update->ntimestep/ivalue1 * ivalue1;
int delta = update->ntimestep - lower;
if (delta < ivalue2) tree->value = lower+ivalue2;
else tree->value = lower+ivalue1;
return tree->value;
}
if (tree->type == LOGFREQ) {
int ivalue1 = static_cast<int> (collapse_tree(tree->first));
int ivalue2 = static_cast<int> (collapse_tree(tree->second));
int ivalue3 = static_cast<int> (collapse_tree(tree->extra[0]));
if (tree->first->type != VALUE || tree->second->type != VALUE ||
tree->extra[0]->type != VALUE) return 0.0;
tree->type = VALUE;
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue3 <= 0 || ivalue2 >= ivalue3)
error->one(FLERR,"Invalid math function in variable formula");
if (update->ntimestep < ivalue1) tree->value = ivalue1;
else {
int lower = ivalue1;
while (update->ntimestep >= ivalue3*lower) lower *= ivalue3;
int multiple = update->ntimestep/lower;
if (multiple < ivalue2) tree->value = (multiple+1)*lower;
else tree->value = lower*ivalue3;
}
return tree->value;
}
if (tree->type == LOGFREQ2) {
int ivalue1 = static_cast<int> (collapse_tree(tree->first));
int ivalue2 = static_cast<int> (collapse_tree(tree->second));
int ivalue3 = static_cast<int> (collapse_tree(tree->extra[0]));
if (tree->first->type != VALUE || tree->second->type != VALUE ||
tree->extra[0]->type != VALUE) return 0.0;
tree->type = VALUE;
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue3 <= 0 )
error->all(FLERR,"Invalid math function in variable formula");
if (update->ntimestep < ivalue1) tree->value = ivalue1;
else {
tree->value = ivalue1;
double delta = ivalue1*(ivalue3-1.0)/ivalue2;
int count = 0;
while (update->ntimestep >= tree->value) {
tree->value += delta;
count++;
if (count % ivalue2 == 0) delta *= ivalue3;
}
}
tree->value = ceil(tree->value);
return tree->value;
}
if (tree->type == STRIDE) {
int ivalue1 = static_cast<int> (collapse_tree(tree->first));
int ivalue2 = static_cast<int> (collapse_tree(tree->second));
int ivalue3 = static_cast<int> (collapse_tree(tree->extra[0]));
if (tree->first->type != VALUE || tree->second->type != VALUE ||
tree->extra[0]->type != VALUE) return 0.0;
tree->type = VALUE;
if (ivalue1 < 0 || ivalue2 < 0 || ivalue3 <= 0 || ivalue1 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
if (update->ntimestep < ivalue1) tree->value = ivalue1;
else if (update->ntimestep < ivalue2) {
int offset = update->ntimestep - ivalue1;
tree->value = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (tree->value > ivalue2) tree->value = MAXBIGINT;
} else tree->value = MAXBIGINT;
return tree->value;
}
if (tree->type == STRIDE2) {
int ivalue1 = static_cast<int> (collapse_tree(tree->first));
int ivalue2 = static_cast<int> (collapse_tree(tree->second));
int ivalue3 = static_cast<int> (collapse_tree(tree->extra[0]));
int ivalue4 = static_cast<int> (collapse_tree(tree->extra[1]));
int ivalue5 = static_cast<int> (collapse_tree(tree->extra[2]));
int ivalue6 = static_cast<int> (collapse_tree(tree->extra[3]));
if (tree->first->type != VALUE || tree->second->type != VALUE ||
tree->extra[0]->type != VALUE || tree->extra[1]->type != VALUE ||
tree->extra[2]->type != VALUE || tree->extra[3]->type != VALUE)
return 0.0;
tree->type = VALUE;
if (ivalue1 < 0 || ivalue2 < 0 || ivalue3 <= 0 || ivalue1 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
if (ivalue4 < 0 || ivalue5 < 0 || ivalue6 <= 0 || ivalue4 > ivalue5)
error->one(FLERR,"Invalid math function in variable formula");
if (ivalue4 < ivalue1 || ivalue5 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
bigint istep;
if (update->ntimestep < ivalue1) istep = ivalue1;
else if (update->ntimestep < ivalue2) {
if (update->ntimestep < ivalue4 || update->ntimestep > ivalue5) {
int offset = update->ntimestep - ivalue1;
istep = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (update->ntimestep < ivalue2 && istep > ivalue4)
tree->value = ivalue4;
} else {
int offset = update->ntimestep - ivalue4;
istep = ivalue4 + (offset/ivalue6)*ivalue6 + ivalue6;
if (istep > ivalue5) {
int offset = ivalue5 - ivalue1;
istep = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (istep > ivalue2) istep = MAXBIGINT;
}
}
} else istep = MAXBIGINT;
tree->value = istep;
return tree->value;
}
if (tree->type == VDISPLACE) {
double arg1 = collapse_tree(tree->first);
double arg2 = collapse_tree(tree->second);
if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0;
tree->type = VALUE;
double delta = update->ntimestep - update->beginstep;
tree->value = arg1 + arg2*delta*update->dt;
return tree->value;
}
if (tree->type == SWIGGLE) {
double arg1 = collapse_tree(tree->first);
double arg2 = collapse_tree(tree->second);
double arg3 = collapse_tree(tree->extra[0]);
if (tree->first->type != VALUE || tree->second->type != VALUE ||
tree->extra[0]->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg3 == 0.0)
error->one(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/arg3;
tree->value = arg1 + arg2*sin(omega*delta*update->dt);
return tree->value;
}
if (tree->type == CWIGGLE) {
double arg1 = collapse_tree(tree->first);
double arg2 = collapse_tree(tree->second);
double arg3 = collapse_tree(tree->extra[0]);
if (tree->first->type != VALUE || tree->second->type != VALUE ||
tree->extra[0]->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg3 == 0.0)
error->one(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/arg3;
tree->value = arg1 + arg2*(1.0-cos(omega*delta*update->dt));
return tree->value;
}
// mask functions do not become a single collapsed value
if (tree->type == GMASK) return 0.0;
if (tree->type == RMASK) return 0.0;
if (tree->type == GRMASK) return 0.0;
return 0.0;
}
/* ----------------------------------------------------------------------
evaluate an atom-style or vector-style variable parse tree
index I = atom I or vector index I
tree was created by one-time parsing of formula string via evaulate()
customize by adding a function:
sqrt(),exp(),ln(),log(),sin(),cos(),tan(),asin(),acos(),atan(),
atan2(y,x),random(x,y,z),normal(x,y,z),ceil(),floor(),round(),
ramp(x,y),stagger(x,y),logfreq(x,y,z),logfreq2(x,y,z),
stride(x,y,z),stride2(x,y,z),vdisplace(x,y),swiggle(x,y,z),
cwiggle(x,y,z),gmask(x),rmask(x),grmask(x,y)
---------------------------------------------------------------------- */
double Variable::eval_tree(Tree *tree, int i)
{
double arg,arg1,arg2,arg3;
if (tree->type == VALUE) return tree->value;
if (tree->type == ATOMARRAY) return tree->array[i*tree->nstride];
if (tree->type == TYPEARRAY) return tree->array[atom->type[i]];
if (tree->type == INTARRAY) return (double) tree->iarray[i*tree->nstride];
if (tree->type == BIGINTARRAY) return (double) tree->barray[i*tree->nstride];
if (tree->type == VECTORARRAY) return tree->array[i*tree->nstride];
if (tree->type == ADD)
return eval_tree(tree->first,i) + eval_tree(tree->second,i);
if (tree->type == SUBTRACT)
return eval_tree(tree->first,i) - eval_tree(tree->second,i);
if (tree->type == MULTIPLY)
return eval_tree(tree->first,i) * eval_tree(tree->second,i);
if (tree->type == DIVIDE) {
double denom = eval_tree(tree->second,i);
if (denom == 0.0) error->one(FLERR,"Divide by 0 in variable formula");
return eval_tree(tree->first,i) / denom;
}
if (tree->type == MODULO) {
double denom = eval_tree(tree->second,i);
if (denom == 0.0) error->one(FLERR,"Modulo 0 in variable formula");
return fmod(eval_tree(tree->first,i),denom);
}
if (tree->type == CARAT) {
double exponent = eval_tree(tree->second,i);
if (exponent == 0.0) error->one(FLERR,"Power by 0 in variable formula");
return pow(eval_tree(tree->first,i),exponent);
}
if (tree->type == UNARY) return -eval_tree(tree->first,i);
if (tree->type == NOT) {
if (eval_tree(tree->first,i) == 0.0) return 1.0;
else return 0.0;
}
if (tree->type == EQ) {
if (eval_tree(tree->first,i) == eval_tree(tree->second,i)) return 1.0;
else return 0.0;
}
if (tree->type == NE) {
if (eval_tree(tree->first,i) != eval_tree(tree->second,i)) return 1.0;
else return 0.0;
}
if (tree->type == LT) {
if (eval_tree(tree->first,i) < eval_tree(tree->second,i)) return 1.0;
else return 0.0;
}
if (tree->type == LE) {
if (eval_tree(tree->first,i) <= eval_tree(tree->second,i)) return 1.0;
else return 0.0;
}
if (tree->type == GT) {
if (eval_tree(tree->first,i) > eval_tree(tree->second,i)) return 1.0;
else return 0.0;
}
if (tree->type == GE) {
if (eval_tree(tree->first,i) >= eval_tree(tree->second,i)) return 1.0;
else return 0.0;
}
if (tree->type == AND) {
if (eval_tree(tree->first,i) != 0.0 && eval_tree(tree->second,i) != 0.0)
return 1.0;
else return 0.0;
}
if (tree->type == OR) {
if (eval_tree(tree->first,i) != 0.0 || eval_tree(tree->second,i) != 0.0)
return 1.0;
else return 0.0;
}
if (tree->type == SQRT) {
arg1 = eval_tree(tree->first,i);
if (arg1 < 0.0)
error->one(FLERR,"Sqrt of negative value in variable formula");
return sqrt(arg1);
}
if (tree->type == EXP)
return exp(eval_tree(tree->first,i));
if (tree->type == LN) {
arg1 = eval_tree(tree->first,i);
if (arg1 <= 0.0)
error->one(FLERR,"Log of zero/negative value in variable formula");
return log(arg1);
}
if (tree->type == LOG) {
arg1 = eval_tree(tree->first,i);
if (arg1 <= 0.0)
error->one(FLERR,"Log of zero/negative value in variable formula");
return log10(arg1);
}
if (tree->type == ABS)
return fabs(eval_tree(tree->first,i));
if (tree->type == SIN)
return sin(eval_tree(tree->first,i));
if (tree->type == COS)
return cos(eval_tree(tree->first,i));
if (tree->type == TAN)
return tan(eval_tree(tree->first,i));
if (tree->type == ASIN) {
arg1 = eval_tree(tree->first,i);
if (arg1 < -1.0 || arg1 > 1.0)
error->one(FLERR,"Arcsin of invalid value in variable formula");
return asin(arg1);
}
if (tree->type == ACOS) {
arg1 = eval_tree(tree->first,i);
if (arg1 < -1.0 || arg1 > 1.0)
error->one(FLERR,"Arccos of invalid value in variable formula");
return acos(arg1);
}
if (tree->type == ATAN)
return atan(eval_tree(tree->first,i));
if (tree->type == ATAN2)
return atan2(eval_tree(tree->first,i),eval_tree(tree->second,i));
if (tree->type == RANDOM) {
double lower = eval_tree(tree->first,i);
double upper = eval_tree(tree->second,i);
if (randomatom == NULL) {
int seed = static_cast<int> (eval_tree(tree->extra[0],i));
if (seed <= 0)
error->one(FLERR,"Invalid math function in variable formula");
randomatom = new RanMars(lmp,seed+me);
}
return randomatom->uniform()*(upper-lower)+lower;
}
if (tree->type == NORMAL) {
double mu = eval_tree(tree->first,i);
double sigma = eval_tree(tree->second,i);
if (sigma < 0.0)
error->one(FLERR,"Invalid math function in variable formula");
if (randomatom == NULL) {
int seed = static_cast<int> (eval_tree(tree->extra[0],i));
if (seed <= 0)
error->one(FLERR,"Invalid math function in variable formula");
randomatom = new RanMars(lmp,seed+me);
}
return mu + sigma*randomatom->gaussian();
}
if (tree->type == CEIL)
return ceil(eval_tree(tree->first,i));
if (tree->type == FLOOR)
return floor(eval_tree(tree->first,i));
if (tree->type == ROUND)
return MYROUND(eval_tree(tree->first,i));
if (tree->type == RAMP) {
arg1 = eval_tree(tree->first,i);
arg2 = eval_tree(tree->second,i);
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
arg = arg1 + delta*(arg2-arg1);
return arg;
}
if (tree->type == STAGGER) {
int ivalue1 = static_cast<int> (eval_tree(tree->first,i));
int ivalue2 = static_cast<int> (eval_tree(tree->second,i));
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue1 <= ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
int lower = update->ntimestep/ivalue1 * ivalue1;
int delta = update->ntimestep - lower;
if (delta < ivalue2) arg = lower+ivalue2;
else arg = lower+ivalue1;
return arg;
}
if (tree->type == LOGFREQ) {
int ivalue1 = static_cast<int> (eval_tree(tree->first,i));
int ivalue2 = static_cast<int> (eval_tree(tree->second,i));
int ivalue3 = static_cast<int> (eval_tree(tree->extra[0],i));
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue3 <= 0 || ivalue2 >= ivalue3)
error->one(FLERR,"Invalid math function in variable formula");
if (update->ntimestep < ivalue1) arg = ivalue1;
else {
int lower = ivalue1;
while (update->ntimestep >= ivalue3*lower) lower *= ivalue3;
int multiple = update->ntimestep/lower;
if (multiple < ivalue2) arg = (multiple+1)*lower;
else arg = lower*ivalue3;
}
return arg;
}
if (tree->type == LOGFREQ2) {
int ivalue1 = static_cast<int> (eval_tree(tree->first,i));
int ivalue2 = static_cast<int> (eval_tree(tree->second,i));
int ivalue3 = static_cast<int> (eval_tree(tree->extra[0],i));
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue3 <= 0 )
error->all(FLERR,"Invalid math function in variable formula");
if (update->ntimestep < ivalue1) arg = ivalue1;
else {
arg = ivalue1;
double delta = ivalue1*(ivalue3-1.0)/ivalue2;
int count = 0;
while (update->ntimestep >= arg) {
arg += delta;
count++;
if (count % ivalue2 == 0) delta *= ivalue3;
}
}
arg = ceil(arg);
return arg;
}
if (tree->type == STRIDE) {
int ivalue1 = static_cast<int> (eval_tree(tree->first,i));
int ivalue2 = static_cast<int> (eval_tree(tree->second,i));
int ivalue3 = static_cast<int> (eval_tree(tree->extra[0],i));
if (ivalue1 < 0 || ivalue2 < 0 || ivalue3 <= 0 || ivalue1 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
if (update->ntimestep < ivalue1) arg = ivalue1;
else if (update->ntimestep < ivalue2) {
int offset = update->ntimestep - ivalue1;
arg = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (arg > ivalue2) arg = MAXBIGINT;
} else arg = MAXBIGINT;
return arg;
}
if (tree->type == STRIDE2) {
int ivalue1 = static_cast<int> (eval_tree(tree->first,i));
int ivalue2 = static_cast<int> (eval_tree(tree->second,i));
int ivalue3 = static_cast<int> (eval_tree(tree->extra[0],i));
int ivalue4 = static_cast<int> (eval_tree(tree->extra[1],i));
int ivalue5 = static_cast<int> (eval_tree(tree->extra[2],i));
int ivalue6 = static_cast<int> (eval_tree(tree->extra[3],i));
if (ivalue1 < 0 || ivalue2 < 0 || ivalue3 <= 0 || ivalue1 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
if (ivalue4 < 0 || ivalue5 < 0 || ivalue6 <= 0 || ivalue4 > ivalue5)
error->one(FLERR,"Invalid math function in variable formula");
if (ivalue4 < ivalue1 || ivalue5 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
bigint istep;
if (update->ntimestep < ivalue1) istep = ivalue1;
else if (update->ntimestep < ivalue2) {
if (update->ntimestep < ivalue4 || update->ntimestep > ivalue5) {
int offset = update->ntimestep - ivalue1;
istep = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (update->ntimestep < ivalue2 && istep > ivalue4)
tree->value = ivalue4;
} else {
int offset = update->ntimestep - ivalue4;
istep = ivalue4 + (offset/ivalue6)*ivalue6 + ivalue6;
if (istep > ivalue5) {
int offset = ivalue5 - ivalue1;
istep = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (istep > ivalue2) istep = MAXBIGINT;
}
}
} else istep = MAXBIGINT;
arg = istep;
return arg;
}
if (tree->type == VDISPLACE) {
arg1 = eval_tree(tree->first,i);
arg2 = eval_tree(tree->second,i);
double delta = update->ntimestep - update->beginstep;
arg = arg1 + arg2*delta*update->dt;
return arg;
}
if (tree->type == SWIGGLE) {
arg1 = eval_tree(tree->first,i);
arg2 = eval_tree(tree->second,i);
arg3 = eval_tree(tree->extra[0],i);
if (arg3 == 0.0)
error->one(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/arg3;
arg = arg1 + arg2*sin(omega*delta*update->dt);
return arg;
}
if (tree->type == CWIGGLE) {
arg1 = eval_tree(tree->first,i);
arg2 = eval_tree(tree->second,i);
arg3 = eval_tree(tree->extra[0],i);
if (arg3 == 0.0)
error->one(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/arg3;
arg = arg1 + arg2*(1.0-cos(omega*delta*update->dt));
return arg;
}
if (tree->type == GMASK) {
if (atom->mask[i] & tree->ivalue1) return 1.0;
else return 0.0;
}
if (tree->type == RMASK) {
if (domain->regions[tree->ivalue1]->match(atom->x[i][0],
atom->x[i][1],
atom->x[i][2])) return 1.0;
else return 0.0;
}
if (tree->type == GRMASK) {
if ((atom->mask[i] & tree->ivalue1) &&
(domain->regions[tree->ivalue2]->match(atom->x[i][0],
atom->x[i][1],
atom->x[i][2]))) return 1.0;
else return 0.0;
}
return 0.0;
}
/* ----------------------------------------------------------------------
scan entire tree, find size of vectors for vector-style variable
return N for consistent vector size
return 0 for no vector size, caller flags as error
return -1 for inconsistent vector size, caller flags as error
------------------------------------------------------------------------- */
int Variable::size_tree_vector(Tree *tree)
{
int nsize = 0;
if (tree->type == VECTORARRAY) nsize = tree->nvector;
if (tree->first) nsize = compare_tree_vector(nsize,
size_tree_vector(tree->first));
if (tree->second) nsize = compare_tree_vector(nsize,
size_tree_vector(tree->second));
if (tree->nextra) {
for (int i = 0; i < tree->nextra; i++)
nsize = compare_tree_vector(nsize,size_tree_vector(tree->extra[i]));
}
return nsize;
}
/* ----------------------------------------------------------------------
compare size of two vectors for vector-style variable
return positive size if same or one has no size 0
return -1 error if one is already error or not same positive size
------------------------------------------------------------------------- */
int Variable::compare_tree_vector(int i, int j)
{
if (i < 0 || j < 0) return -1;
if (i == 0 || j == 0) return MAX(i,j);
if (i != j) return -1;
return i;
}
/* ---------------------------------------------------------------------- */
void Variable::free_tree(Tree *tree)
{
if (tree->first) free_tree(tree->first);
if (tree->second) free_tree(tree->second);
if (tree->nextra) {
for (int i = 0; i < tree->nextra; i++) free_tree(tree->extra[i]);
delete [] tree->extra;
}
if (tree->selfalloc) memory->destroy(tree->array);
delete tree;
}
/* ----------------------------------------------------------------------
find matching parenthesis in str, allocate contents = str between parens
i = left paren
return loc or right paren
------------------------------------------------------------------------- */
int Variable::find_matching_paren(char *str, int i,char *&contents)
{
// istop = matching ')' at same level, allowing for nested parens
int istart = i;
int ilevel = 0;
while (1) {
i++;
if (!str[i]) break;
if (str[i] == '(') ilevel++;
else if (str[i] == ')' && ilevel) ilevel--;
else if (str[i] == ')') break;
}
if (!str[i]) error->all(FLERR,"Invalid syntax in variable formula");
int istop = i;
int n = istop - istart - 1;
contents = new char[n+1];
strncpy(contents,&str[istart+1],n);
contents[n] = '\0';
return istop;
}
/* ----------------------------------------------------------------------
find int between brackets and return it
return a tagint, since value can be an atom ID
ptr initially points to left bracket
return it pointing to right bracket
error if no right bracket or brackets are empty or index = 0
if varallow = 0: error if any between-bracket chars are non-digits
if varallow = 1: also allow for v_name, where name is variable name
------------------------------------------------------------------------- */
tagint Variable::int_between_brackets(char *&ptr, int varallow)
{
int varflag;
tagint index;
char *start = ++ptr;
if (varallow && strstr(ptr,"v_") == ptr) {
varflag = 1;
while (*ptr && *ptr != ']') {
if (!isalnum(*ptr) && *ptr != '_')
error->all(FLERR,"Variable name between brackets must be "
"alphanumeric or underscore characters");
ptr++;
}
} else {
varflag = 0;
while (*ptr && *ptr != ']') {
if (!isdigit(*ptr))
error->all(FLERR,"Non digit character between brackets in variable");
ptr++;
}
}
if (*ptr != ']') error->all(FLERR,"Mismatched brackets in variable");
if (ptr == start) error->all(FLERR,"Empty brackets in variable");
*ptr = '\0';
// evaluate index as floating point variable or as tagint via ATOTAGINT()
if (varflag) {
char *id = start+2;
int ivar = find(id);
if (ivar < 0)
error->all(FLERR,"Invalid variable name in variable formula");
char *var = retrieve(id);
if (var == NULL)
error->all(FLERR,"Invalid variable evaluation in variable formula");
index = static_cast<tagint> (atof(var));
} else index = ATOTAGINT(start);
*ptr = ']';
if (index == 0)
error->all(FLERR,"Index between variable brackets must be positive");
return index;
}
/* ----------------------------------------------------------------------
process a math function in formula
push result onto tree or arg stack
word = math function
contents = str between parentheses with comma-separated args
return 0 if not a match, 1 if successfully processed
customize by adding a math function:
sqrt(),exp(),ln(),log(),abs(),sin(),cos(),tan(),asin(),acos(),atan(),
atan2(y,x),random(x,y,z),normal(x,y,z),ceil(),floor(),round(),
ramp(x,y),stagger(x,y),logfreq(x,y,z),logfreq2(x,y,z),
stride(x,y,z),stride2(x,y,z,a,b,c),vdisplace(x,y),swiggle(x,y,z),
cwiggle(x,y,z)
------------------------------------------------------------------------- */
int Variable::math_function(char *word, char *contents, Tree **tree,
Tree **treestack, int &ntreestack,
double *argstack, int &nargstack)
{
// word not a match to any math function
if (strcmp(word,"sqrt") && strcmp(word,"exp") &&
strcmp(word,"ln") && strcmp(word,"log") &&
strcmp(word,"abs") &&
strcmp(word,"sin") && strcmp(word,"cos") &&
strcmp(word,"tan") && strcmp(word,"asin") &&
strcmp(word,"acos") && strcmp(word,"atan") &&
strcmp(word,"atan2") && strcmp(word,"random") &&
strcmp(word,"normal") && strcmp(word,"ceil") &&
strcmp(word,"floor") && strcmp(word,"round") &&
strcmp(word,"ramp") && strcmp(word,"stagger") &&
strcmp(word,"logfreq") && strcmp(word,"logfreq2") &&
strcmp(word,"stride") && strcmp(word,"stride2") &&
strcmp(word,"vdisplace") && strcmp(word,"swiggle") &&
strcmp(word,"cwiggle"))
return 0;
// parse contents for comma-separated args
// narg = number of args, args = strings between commas
char *args[MAXFUNCARG];
int narg = parse_args(contents,args);
Tree *newtree;
double value1,value2;
double values[MAXFUNCARG-2];
if (tree) {
newtree = new Tree();
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
Tree *argtree;
evaluate(args[0],&argtree);
newtree->first = argtree;
if (narg > 1) {
evaluate(args[1],&argtree);
newtree->second = argtree;
if (narg > 2) {
newtree->nextra = narg-2;
newtree->extra = new Tree*[narg-2];
for (int i = 2; i < narg; i++) {
evaluate(args[i],&argtree);
newtree->extra[i-2] = argtree;
}
}
}
treestack[ntreestack++] = newtree;
} else {
value1 = evaluate(args[0],NULL);
if (narg > 1) {
value2 = evaluate(args[1],NULL);
if (narg > 2) {
for (int i = 2; i < narg; i++)
values[i-2] = evaluate(args[i],NULL);
}
}
}
// individual math functions
// customize by adding a function
if (strcmp(word,"sqrt") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = SQRT;
else {
if (value1 < 0.0)
error->all(FLERR,"Sqrt of negative value in variable formula");
argstack[nargstack++] = sqrt(value1);
}
} else if (strcmp(word,"exp") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = EXP;
else argstack[nargstack++] = exp(value1);
} else if (strcmp(word,"ln") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = LN;
else {
if (value1 <= 0.0)
error->all(FLERR,"Log of zero/negative value in variable formula");
argstack[nargstack++] = log(value1);
}
} else if (strcmp(word,"log") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = LOG;
else {
if (value1 <= 0.0)
error->all(FLERR,"Log of zero/negative value in variable formula");
argstack[nargstack++] = log10(value1);
}
} else if (strcmp(word,"abs") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ABS;
else argstack[nargstack++] = fabs(value1);
} else if (strcmp(word,"sin") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = SIN;
else argstack[nargstack++] = sin(value1);
} else if (strcmp(word,"cos") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = COS;
else argstack[nargstack++] = cos(value1);
} else if (strcmp(word,"tan") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = TAN;
else argstack[nargstack++] = tan(value1);
} else if (strcmp(word,"asin") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ASIN;
else {
if (value1 < -1.0 || value1 > 1.0)
error->all(FLERR,"Arcsin of invalid value in variable formula");
argstack[nargstack++] = asin(value1);
}
} else if (strcmp(word,"acos") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ACOS;
else {
if (value1 < -1.0 || value1 > 1.0)
error->all(FLERR,"Arccos of invalid value in variable formula");
argstack[nargstack++] = acos(value1);
}
} else if (strcmp(word,"atan") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ATAN;
else argstack[nargstack++] = atan(value1);
} else if (strcmp(word,"atan2") == 0) {
if (narg != 2)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ATAN2;
else argstack[nargstack++] = atan2(value1,value2);
} else if (strcmp(word,"random") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = RANDOM;
else {
if (randomequal == NULL) {
int seed = static_cast<int> (values[0]);
if (seed <= 0)
error->all(FLERR,"Invalid math function in variable formula");
randomequal = new RanMars(lmp,seed);
}
argstack[nargstack++] = randomequal->uniform()*(value2-value1) + value1;
}
} else if (strcmp(word,"normal") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = NORMAL;
else {
if (value2 < 0.0)
error->all(FLERR,"Invalid math function in variable formula");
if (randomequal == NULL) {
int seed = static_cast<int> (values[0]);
if (seed <= 0)
error->all(FLERR,"Invalid math function in variable formula");
randomequal = new RanMars(lmp,seed);
}
argstack[nargstack++] = value1 + value2*randomequal->gaussian();
}
} else if (strcmp(word,"ceil") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = CEIL;
else argstack[nargstack++] = ceil(value1);
} else if (strcmp(word,"floor") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = FLOOR;
else argstack[nargstack++] = floor(value1);
} else if (strcmp(word,"round") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ROUND;
else argstack[nargstack++] = MYROUND(value1);
} else if (strcmp(word,"ramp") == 0) {
if (narg != 2)
error->all(FLERR,"Invalid math function in variable formula");
if (update->whichflag == 0)
error->all(FLERR,"Cannot use ramp in variable formula between runs");
if (tree) newtree->type = RAMP;
else {
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
double value = value1 + delta*(value2-value1);
argstack[nargstack++] = value;
}
} else if (strcmp(word,"stagger") == 0) {
if (narg != 2)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = STAGGER;
else {
int ivalue1 = static_cast<int> (value1);
int ivalue2 = static_cast<int> (value2);
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue1 <= ivalue2)
error->all(FLERR,"Invalid math function in variable formula");
int lower = update->ntimestep/ivalue1 * ivalue1;
int delta = update->ntimestep - lower;
double value;
if (delta < ivalue2) value = lower+ivalue2;
else value = lower+ivalue1;
argstack[nargstack++] = value;
}
} else if (strcmp(word,"logfreq") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = LOGFREQ;
else {
int ivalue1 = static_cast<int> (value1);
int ivalue2 = static_cast<int> (value2);
int ivalue3 = static_cast<int> (values[0]);
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue3 <= 0 || ivalue2 >= ivalue3)
error->all(FLERR,"Invalid math function in variable formula");
double value;
if (update->ntimestep < ivalue1) value = ivalue1;
else {
int lower = ivalue1;
while (update->ntimestep >= ivalue3*lower) lower *= ivalue3;
int multiple = update->ntimestep/lower;
if (multiple < ivalue2) value = (multiple+1)*lower;
else value = lower*ivalue3;
}
argstack[nargstack++] = value;
}
} else if (strcmp(word,"logfreq2") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = LOGFREQ2;
else {
int ivalue1 = static_cast<int> (value1);
int ivalue2 = static_cast<int> (value2);
int ivalue3 = static_cast<int> (values[0]);
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue3 <= 0 )
error->all(FLERR,"Invalid math function in variable formula");
double value;
if (update->ntimestep < ivalue1) value = ivalue1;
else {
value = ivalue1;
double delta = ivalue1*(ivalue3-1.0)/ivalue2;
int count = 0;
while (update->ntimestep >= value) {
value += delta;
count++;
if (count % ivalue2 == 0) delta *= ivalue3;
}
}
argstack[nargstack++] = ceil(value);
}
} else if (strcmp(word,"stride") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = STRIDE;
else {
int ivalue1 = static_cast<int> (value1);
int ivalue2 = static_cast<int> (value2);
int ivalue3 = static_cast<int> (values[0]);
if (ivalue1 < 0 || ivalue2 < 0 || ivalue3 <= 0 || ivalue1 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
double value;
if (update->ntimestep < ivalue1) value = ivalue1;
else if (update->ntimestep < ivalue2) {
int offset = update->ntimestep - ivalue1;
value = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (value > ivalue2) value = MAXBIGINT;
} else value = MAXBIGINT;
argstack[nargstack++] = value;
}
} else if (strcmp(word,"stride2") == 0) {
if (narg != 6)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = STRIDE2;
else {
int ivalue1 = static_cast<int> (value1);
int ivalue2 = static_cast<int> (value2);
int ivalue3 = static_cast<int> (values[0]);
int ivalue4 = static_cast<int> (values[1]);
int ivalue5 = static_cast<int> (values[2]);
int ivalue6 = static_cast<int> (values[3]);
if (ivalue1 < 0 || ivalue2 < 0 || ivalue3 <= 0 || ivalue1 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
if (ivalue4 < 0 || ivalue5 < 0 || ivalue6 <= 0 || ivalue4 > ivalue5)
error->one(FLERR,"Invalid math function in variable formula");
if (ivalue4 < ivalue1 || ivalue5 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
bigint istep;
if (update->ntimestep < ivalue1) istep = ivalue1;
else if (update->ntimestep < ivalue2) {
if (update->ntimestep < ivalue4 || update->ntimestep > ivalue5) {
int offset = update->ntimestep - ivalue1;
istep = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (update->ntimestep < ivalue4 && istep > ivalue4) istep = ivalue4;
} else {
int offset = update->ntimestep - ivalue4;
istep = ivalue4 + (offset/ivalue6)*ivalue6 + ivalue6;
if (istep > ivalue5) {
int offset = ivalue5 - ivalue1;
istep = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (istep > ivalue2) istep = MAXBIGINT;
}
}
} else istep = MAXBIGINT;
double value = istep;
argstack[nargstack++] = value;
}
} else if (strcmp(word,"vdisplace") == 0) {
if (narg != 2)
error->all(FLERR,"Invalid math function in variable formula");
if (update->whichflag == 0)
error->all(FLERR,"Cannot use vdisplace in variable formula between runs");
if (tree) newtree->type = VDISPLACE;
else {
double delta = update->ntimestep - update->beginstep;
double value = value1 + value2*delta*update->dt;
argstack[nargstack++] = value;
}
} else if (strcmp(word,"swiggle") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (update->whichflag == 0)
error->all(FLERR,"Cannot use swiggle in variable formula between runs");
if (tree) newtree->type = CWIGGLE;
else {
if (values[0] == 0.0)
error->all(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/values[0];
double value = value1 + value2*sin(omega*delta*update->dt);
argstack[nargstack++] = value;
}
} else if (strcmp(word,"cwiggle") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (update->whichflag == 0)
error->all(FLERR,"Cannot use cwiggle in variable formula between runs");
if (tree) newtree->type = CWIGGLE;
else {
if (values[0] == 0.0)
error->all(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/values[0];
double value = value1 + value2*(1.0-cos(omega*delta*update->dt));
argstack[nargstack++] = value;
}
}
// delete stored args
for (int i = 0; i < narg; i++) delete [] args[i];
return 1;
}
/* ----------------------------------------------------------------------
process a group function in formula with optional region arg
push result onto tree or arg stack
word = group function
contents = str between parentheses with one,two,three args
return 0 if not a match, 1 if successfully processed
customize by adding a group function with optional region arg:
count(group),mass(group),charge(group),
xcm(group,dim),vcm(group,dim),fcm(group,dim),
bound(group,xmin),gyration(group),ke(group),angmom(group,dim),
torque(group,dim),inertia(group,dim),omega(group,dim)
------------------------------------------------------------------------- */
int Variable::group_function(char *word, char *contents, Tree **tree,
Tree **treestack, int &ntreestack,
double *argstack, int &nargstack)
{
// word not a match to any group function
if (strcmp(word,"count") && strcmp(word,"mass") &&
strcmp(word,"charge") && strcmp(word,"xcm") &&
strcmp(word,"vcm") && strcmp(word,"fcm") &&
strcmp(word,"bound") && strcmp(word,"gyration") &&
strcmp(word,"ke") && strcmp(word,"angmom") &&
strcmp(word,"torque") && strcmp(word,"inertia") &&
strcmp(word,"omega"))
return 0;
// parse contents for comma-separated args
// narg = number of args, args = strings between commas
char *args[MAXFUNCARG];
int narg = parse_args(contents,args);
// group to operate on
int igroup = group->find(args[0]);
if (igroup == -1)
error->all(FLERR,"Group ID in variable formula does not exist");
// match word to group function
double value;
if (strcmp(word,"count") == 0) {
if (narg == 1) value = group->count(igroup);
else if (narg == 2) value = group->count(igroup,region_function(args[1]));
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"mass") == 0) {
if (narg == 1) value = group->mass(igroup);
else if (narg == 2) value = group->mass(igroup,region_function(args[1]));
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"charge") == 0) {
if (narg == 1) value = group->charge(igroup);
else if (narg == 2) value = group->charge(igroup,region_function(args[1]));
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"xcm") == 0) {
atom->check_mass();
double xcm[3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
} else if (narg == 3) {
int iregion = region_function(args[2]);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(args[1],"x") == 0) value = xcm[0];
else if (strcmp(args[1],"y") == 0) value = xcm[1];
else if (strcmp(args[1],"z") == 0) value = xcm[2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"vcm") == 0) {
atom->check_mass();
double vcm[3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->vcm(igroup,masstotal,vcm);
} else if (narg == 3) {
int iregion = region_function(args[2]);
double masstotal = group->mass(igroup,iregion);
group->vcm(igroup,masstotal,vcm,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(args[1],"x") == 0) value = vcm[0];
else if (strcmp(args[1],"y") == 0) value = vcm[1];
else if (strcmp(args[1],"z") == 0) value = vcm[2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"fcm") == 0) {
double fcm[3];
if (narg == 2) group->fcm(igroup,fcm);
else if (narg == 3) group->fcm(igroup,fcm,region_function(args[2]));
else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(args[1],"x") == 0) value = fcm[0];
else if (strcmp(args[1],"y") == 0) value = fcm[1];
else if (strcmp(args[1],"z") == 0) value = fcm[2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"bound") == 0) {
double minmax[6];
if (narg == 2) group->bounds(igroup,minmax);
else if (narg == 3) group->bounds(igroup,minmax,region_function(args[2]));
else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(args[1],"xmin") == 0) value = minmax[0];
else if (strcmp(args[1],"xmax") == 0) value = minmax[1];
else if (strcmp(args[1],"ymin") == 0) value = minmax[2];
else if (strcmp(args[1],"ymax") == 0) value = minmax[3];
else if (strcmp(args[1],"zmin") == 0) value = minmax[4];
else if (strcmp(args[1],"zmax") == 0) value = minmax[5];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"gyration") == 0) {
atom->check_mass();
double xcm[3];
if (narg == 1) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
value = group->gyration(igroup,masstotal,xcm);
} else if (narg == 2) {
int iregion = region_function(args[1]);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
value = group->gyration(igroup,masstotal,xcm,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"ke") == 0) {
if (narg == 1) value = group->ke(igroup);
else if (narg == 2) value = group->ke(igroup,region_function(args[1]));
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"angmom") == 0) {
atom->check_mass();
double xcm[3],lmom[3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
group->angmom(igroup,xcm,lmom);
} else if (narg == 3) {
int iregion = region_function(args[2]);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
group->angmom(igroup,xcm,lmom,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(args[1],"x") == 0) value = lmom[0];
else if (strcmp(args[1],"y") == 0) value = lmom[1];
else if (strcmp(args[1],"z") == 0) value = lmom[2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"torque") == 0) {
atom->check_mass();
double xcm[3],tq[3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
group->torque(igroup,xcm,tq);
} else if (narg == 3) {
int iregion = region_function(args[2]);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
group->torque(igroup,xcm,tq,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(args[1],"x") == 0) value = tq[0];
else if (strcmp(args[1],"y") == 0) value = tq[1];
else if (strcmp(args[1],"z") == 0) value = tq[2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"inertia") == 0) {
atom->check_mass();
double xcm[3],inertia[3][3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
group->inertia(igroup,xcm,inertia);
} else if (narg == 3) {
int iregion = region_function(args[2]);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
group->inertia(igroup,xcm,inertia,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(args[1],"xx") == 0) value = inertia[0][0];
else if (strcmp(args[1],"yy") == 0) value = inertia[1][1];
else if (strcmp(args[1],"zz") == 0) value = inertia[2][2];
else if (strcmp(args[1],"xy") == 0) value = inertia[0][1];
else if (strcmp(args[1],"yz") == 0) value = inertia[1][2];
else if (strcmp(args[1],"xz") == 0) value = inertia[0][2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"omega") == 0) {
atom->check_mass();
double xcm[3],angmom[3],inertia[3][3],omega[3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
group->angmom(igroup,xcm,angmom);
group->inertia(igroup,xcm,inertia);
group->omega(angmom,inertia,omega);
} else if (narg == 3) {
int iregion = region_function(args[2]);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
group->angmom(igroup,xcm,angmom,iregion);
group->inertia(igroup,xcm,inertia,iregion);
group->omega(angmom,inertia,omega);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(args[1],"x") == 0) value = omega[0];
else if (strcmp(args[1],"y") == 0) value = omega[1];
else if (strcmp(args[1],"z") == 0) value = omega[2];
else error->all(FLERR,"Invalid group function in variable formula");
}
// delete stored args
for (int i = 0; i < narg; i++) delete [] args[i];
// save value in tree or on argstack
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value;
return 1;
}
/* ---------------------------------------------------------------------- */
int Variable::region_function(char *id)
{
int iregion = domain->find_region(id);
if (iregion == -1)
error->all(FLERR,"Region ID in variable formula does not exist");
// init region in case sub-regions have been deleted
domain->regions[iregion]->init();
return iregion;
}
/* ----------------------------------------------------------------------
process a special function in formula
push result onto tree or arg stack
word = special function
contents = str between parentheses with one,two,three args
return 0 if not a match, 1 if successfully processed
customize by adding a special function:
sum(x),min(x),max(x),ave(x),trap(x),slope(x),
gmask(x),rmask(x),grmask(x,y),next(x)
------------------------------------------------------------------------- */
int Variable::special_function(char *word, char *contents, Tree **tree,
Tree **treestack, int &ntreestack,
double *argstack, int &nargstack)
{
double value,xvalue,sx,sy,sxx,sxy;
// word not a match to any special function
if (strcmp(word,"sum") && strcmp(word,"min") && strcmp(word,"max") &&
strcmp(word,"ave") && strcmp(word,"trap") && strcmp(word,"slope") &&
strcmp(word,"gmask") && strcmp(word,"rmask") &&
strcmp(word,"grmask") && strcmp(word,"next") &&
strcmp(word,"is_active") && strcmp(word,"is_defined") &&
strcmp(word,"is_available"))
return 0;
// parse contents for comma-separated args
// narg = number of args, args = strings between commas
char *args[MAXFUNCARG];
int narg = parse_args(contents,args);
// special functions that operate on global vectors
if (strcmp(word,"sum") == 0 || strcmp(word,"min") == 0 ||
strcmp(word,"max") == 0 || strcmp(word,"ave") == 0 ||
strcmp(word,"trap") == 0 || strcmp(word,"slope") == 0) {
int method;
if (strcmp(word,"sum") == 0) method = SUM;
else if (strcmp(word,"min") == 0) method = XMIN;
else if (strcmp(word,"max") == 0) method = XMAX;
else if (strcmp(word,"ave") == 0) method = AVE;
else if (strcmp(word,"trap") == 0) method = TRAP;
else if (strcmp(word,"slope") == 0) method = SLOPE;
if (narg != 1)
error->all(FLERR,"Invalid special function in variable formula");
Compute *compute = NULL;
Fix *fix = NULL;
int ivar = -1;
int index,nvec,nstride;
char *ptr1,*ptr2;
// argument is compute
if (strstr(args[0],"c_") == args[0]) {
ptr1 = strchr(args[0],'[');
if (ptr1) {
ptr2 = ptr1;
index = (int) int_between_brackets(ptr2,0);
*ptr1 = '\0';
} else index = 0;
int icompute = modify->find_compute(&args[0][2]);
if (icompute < 0)
error->all(FLERR,"Invalid compute ID in variable formula");
compute = modify->compute[icompute];
if (index == 0 && compute->vector_flag) {
if (update->whichflag == 0) {
if (compute->invoked_vector != update->ntimestep)
error->all(FLERR,
"Compute used in variable between runs is not current");
} else if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
nvec = compute->size_vector;
nstride = 1;
} else if (index && compute->array_flag) {
if (index > compute->size_array_cols)
error->all(FLERR,"Variable formula compute array "
"is accessed out-of-range");
if (update->whichflag == 0) {
if (compute->invoked_array != update->ntimestep)
error->all(FLERR,
"Compute used in variable between runs is not current");
} else if (!(compute->invoked_flag & INVOKED_ARRAY)) {
compute->compute_array();
compute->invoked_flag |= INVOKED_ARRAY;
}
nvec = compute->size_array_rows;
nstride = compute->size_array_cols;
} else error->all(FLERR,"Mismatched compute in variable formula");
// argument is fix
} else if (strstr(args[0],"f_") == args[0]) {
ptr1 = strchr(args[0],'[');
if (ptr1) {
ptr2 = ptr1;
index = (int) int_between_brackets(ptr2,0);
*ptr1 = '\0';
} else index = 0;
int ifix = modify->find_fix(&args[0][2]);
if (ifix < 0) error->all(FLERR,"Invalid fix ID in variable formula");
fix = modify->fix[ifix];
if (index == 0 && fix->vector_flag) {
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
nvec = fix->size_vector;
nstride = 1;
} else if (index && fix->array_flag) {
if (index > fix->size_array_cols)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
nvec = fix->size_array_rows;
nstride = fix->size_array_cols;
} else error->all(FLERR,"Mismatched fix in variable formula");
// argument is vector-style variable
} else if (strstr(args[0],"v_") == args[0]) {
ptr1 = strchr(args[0],'[');
if (ptr1) {
ptr2 = ptr1;
index = (int) int_between_brackets(ptr2,0);
*ptr1 = '\0';
} else index = 0;
if (index)
error->all(FLERR,"Invalid special function in variable formula");
ivar = find(&args[0][2]);
if (ivar < 0)
error->all(FLERR,"Invalid special function in variable formula");
if (style[ivar] != VECTOR)
error->all(FLERR,
"Mis-matched special function variable in variable formula");
if (eval_in_progress[ivar])
error->all(FLERR,"Variable has circular dependency");
double *vec;
nvec = compute_vector(ivar,&vec);
nstride = 1;
} else error->all(FLERR,"Invalid special function in variable formula");
value = 0.0;
if (method == SLOPE) sx = sy = sxx = sxy = 0.0;
if (method == XMIN) value = BIG;
if (method == XMAX) value = -BIG;
if (compute) {
double *vec;
if (index) {
if (compute->array) vec = &compute->array[0][index-1];
else vec = NULL;
} else vec = compute->vector;
int j = 0;
for (int i = 0; i < nvec; i++) {
if (method == SUM) value += vec[j];
else if (method == XMIN) value = MIN(value,vec[j]);
else if (method == XMAX) value = MAX(value,vec[j]);
else if (method == AVE) value += vec[j];
else if (method == TRAP) value += vec[j];
else if (method == SLOPE) {
if (nvec > 1) xvalue = (double) i / (nvec-1);
else xvalue = 0.0;
sx += xvalue;
sy += vec[j];
sxx += xvalue*xvalue;
sxy += xvalue*vec[j];
}
j += nstride;
}
if (method == TRAP) value -= 0.5*vec[0] + 0.5*vec[nvec-1];
}
if (fix) {
double one;
for (int i = 0; i < nvec; i++) {
if (index) one = fix->compute_array(i,index-1);
else one = fix->compute_vector(i);
if (method == SUM) value += one;
else if (method == XMIN) value = MIN(value,one);
else if (method == XMAX) value = MAX(value,one);
else if (method == AVE) value += one;
else if (method == TRAP) value += one;
else if (method == SLOPE) {
if (nvec > 1) xvalue = (double) i / (nvec-1);
else xvalue = 0.0;
sx += xvalue;
sy += one;
sxx += xvalue*xvalue;
sxy += xvalue*one;
}
}
if (method == TRAP) {
if (index) value -= 0.5*fix->compute_array(0,index-1) +
0.5*fix->compute_array(nvec-1,index-1);
else value -= 0.5*fix->compute_vector(0) +
0.5*fix->compute_vector(nvec-1);
}
}
if (ivar >= 0) {
double one;
double *vec = vecs[ivar].values;
for (int i = 0; i < nvec; i++) {
one = vec[i];
if (method == SUM) value += one;
else if (method == XMIN) value = MIN(value,one);
else if (method == XMAX) value = MAX(value,one);
else if (method == AVE) value += one;
else if (method == TRAP) value += one;
else if (method == SLOPE) {
if (nvec > 1) xvalue = (double) i / (nvec-1);
else xvalue = 0.0;
sx += xvalue;
sy += one;
sxx += xvalue*xvalue;
sxy += xvalue*one;
}
}
if (method == TRAP) value -= 0.5*vec[0] + 0.5*vec[nvec-1];
}
if (method == AVE) value /= nvec;
if (method == SLOPE) {
double numerator = sxy - sx*sy;
double denominator = sxx - sx*sx;
if (denominator != 0.0) value = numerator/denominator / nvec;
else value = BIG;
}
// save value in tree or on argstack
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value;
// mask special functions
} else if (strcmp(word,"gmask") == 0) {
if (tree == NULL)
error->all(FLERR,"Gmask function in equal-style variable formula");
if (narg != 1)
error->all(FLERR,"Invalid special function in variable formula");
int igroup = group->find(args[0]);
if (igroup == -1)
error->all(FLERR,"Group ID in variable formula does not exist");
Tree *newtree = new Tree();
newtree->type = GMASK;
newtree->ivalue1 = group->bitmask[igroup];
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else if (strcmp(word,"rmask") == 0) {
if (tree == NULL)
error->all(FLERR,"Rmask function in equal-style variable formula");
if (narg != 1)
error->all(FLERR,"Invalid special function in variable formula");
int iregion = region_function(args[0]);
domain->regions[iregion]->prematch();
Tree *newtree = new Tree();
newtree->type = RMASK;
newtree->ivalue1 = iregion;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else if (strcmp(word,"grmask") == 0) {
if (tree == NULL)
error->all(FLERR,"Grmask function in equal-style variable formula");
if (narg != 2)
error->all(FLERR,"Invalid special function in variable formula");
int igroup = group->find(args[0]);
if (igroup == -1)
error->all(FLERR,"Group ID in variable formula does not exist");
int iregion = region_function(args[1]);
domain->regions[iregion]->prematch();
Tree *newtree = new Tree();
newtree->type = GRMASK;
newtree->ivalue1 = group->bitmask[igroup];
newtree->ivalue2 = iregion;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
// special function for file-style or atomfile-style variables
} else if (strcmp(word,"next") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid special function in variable formula");
int ivar = find(args[0]);
if (ivar < 0)
error->all(FLERR,"Variable ID in variable formula does not exist");
// SCALARFILE has single current value, read next one
// save value in tree or on argstack
if (style[ivar] == SCALARFILE) {
double value = atof(data[ivar][0]);
int done = reader[ivar]->read_scalar(data[ivar][0]);
if (done) remove(ivar);
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value;
// ATOMFILE has per-atom values, save values in tree
// copy current per-atom values into result so can read next ones
// set selfalloc = 1 so result will be deleted by free_tree() after eval
} else if (style[ivar] == ATOMFILE) {
if (tree == NULL)
error->all(FLERR,"Atomfile variable in equal-style variable formula");
double *result;
memory->create(result,atom->nlocal,"variable:result");
memcpy(result,reader[ivar]->fixstore->vstore,atom->nlocal*sizeof(double));
int done = reader[ivar]->read_peratom();
if (done) remove(ivar);
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
newtree->array = result;
newtree->nstride = 1;
newtree->selfalloc = 1;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else error->all(FLERR,"Invalid variable style in special function next");
} else if (strcmp(word,"is_active") == 0) {
if (narg != 2)
error->all(FLERR,"Invalid is_active() function in variable formula");
Info info(lmp);
value = (info.is_active(args[0],args[1])) ? 1.0 : 0.0;
// save value in tree or on argstack
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value;
} else if (strcmp(word,"is_available") == 0) {
if (narg != 2)
error->all(FLERR,"Invalid is_available() function in variable formula");
Info info(lmp);
value = (info.is_available(args[0],args[1])) ? 1.0 : 0.0;
// save value in tree or on argstack
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value;
} else if (strcmp(word,"is_defined") == 0) {
if (narg != 2)
error->all(FLERR,"Invalid is_defined() function in variable formula");
Info info(lmp);
value = (info.is_defined(args[0],args[1])) ? 1.0 : 0.0;
// save value in tree or on argstack
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value;
}
// delete stored args
for (int i = 0; i < narg; i++) delete [] args[i];
return 1;
}
/* ----------------------------------------------------------------------
extract a global value from a per-atom quantity in a formula
flag = 0 -> word is an atom vector
flag = 1 -> vector is a per-atom compute or fix quantity with nstride
id = global ID of atom, converted to local index
push result onto tree or arg stack
customize by adding an atom vector:
id,mass,type,mol,x,y,z,vx,vy,vz,fx,fy,fz,q
------------------------------------------------------------------------- */
void Variable::peratom2global(int flag, char *word,
double *vector, int nstride, tagint id,
Tree **tree, Tree **treestack, int &ntreestack,
double *argstack, int &nargstack)
{
// error check for ID larger than any atom
// int_between_brackets() already checked for ID <= 0
if (atom->map_style == 0)
error->all(FLERR,
"Indexed per-atom vector in variable formula without atom map");
if (id > atom->map_tag_max)
error->all(FLERR,"Variable atom ID is too large");
// if ID does not exist, index will be -1 for all procs,
// and mine will be set to 0.0
int index = atom->map(id);
double mine;
if (index >= 0 && index < atom->nlocal) {
if (flag == 0) {
if (strcmp(word,"id") == 0) mine = atom->tag[index];
else if (strcmp(word,"mass") == 0) {
if (atom->rmass) mine = atom->rmass[index];
else mine = atom->mass[atom->type[index]];
}
else if (strcmp(word,"type") == 0) mine = atom->type[index];
else if (strcmp(word,"mol") == 0) {
if (!atom->molecule_flag)
error->one(FLERR,"Variable uses atom property that isn't allocated");
mine = atom->molecule[index];
}
else if (strcmp(word,"x") == 0) mine = atom->x[index][0];
else if (strcmp(word,"y") == 0) mine = atom->x[index][1];
else if (strcmp(word,"z") == 0) mine = atom->x[index][2];
else if (strcmp(word,"vx") == 0) mine = atom->v[index][0];
else if (strcmp(word,"vy") == 0) mine = atom->v[index][1];
else if (strcmp(word,"vz") == 0) mine = atom->v[index][2];
else if (strcmp(word,"fx") == 0) mine = atom->f[index][0];
else if (strcmp(word,"fy") == 0) mine = atom->f[index][1];
else if (strcmp(word,"fz") == 0) mine = atom->f[index][2];
else if (strcmp(word,"q") == 0) {
if (!atom->q_flag)
error->one(FLERR,"Variable uses atom property that isn't allocated");
mine = atom->q[index];
}
else error->one(FLERR,"Invalid atom vector in variable formula");
} else mine = vector[index*nstride];
} else mine = 0.0;
double value;
MPI_Allreduce(&mine,&value,1,MPI_DOUBLE,MPI_SUM,world);
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value;
}
/* ----------------------------------------------------------------------
check if word matches an atom vector
return 1 if yes, else 0
customize by adding an atom vector:
id,mass,type,mol,x,y,z,vx,vy,vz,fx,fy,fz,q
------------------------------------------------------------------------- */
int Variable::is_atom_vector(char *word)
{
if (strcmp(word,"id") == 0) return 1;
if (strcmp(word,"mass") == 0) return 1;
if (strcmp(word,"type") == 0) return 1;
if (strcmp(word,"mol") == 0) return 1;
if (strcmp(word,"x") == 0) return 1;
if (strcmp(word,"y") == 0) return 1;
if (strcmp(word,"z") == 0) return 1;
if (strcmp(word,"vx") == 0) return 1;
if (strcmp(word,"vy") == 0) return 1;
if (strcmp(word,"vz") == 0) return 1;
if (strcmp(word,"fx") == 0) return 1;
if (strcmp(word,"fy") == 0) return 1;
if (strcmp(word,"fz") == 0) return 1;
if (strcmp(word,"q") == 0) return 1;
return 0;
}
/* ----------------------------------------------------------------------
process an atom vector in formula
push result onto tree
word = atom vector
customize by adding an atom vector:
id,mass,type,mol,x,y,z,vx,vy,vz,fx,fy,fz,q
------------------------------------------------------------------------- */
void Variable::atom_vector(char *word, Tree **tree,
Tree **treestack, int &ntreestack)
{
if (tree == NULL)
error->all(FLERR,"Atom vector in equal-style variable formula");
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
newtree->nstride = 3;
newtree->selfalloc = 0;
newtree->first = newtree->second = NULL;
newtree->nextra = 0;
treestack[ntreestack++] = newtree;
if (strcmp(word,"id") == 0) {
if (sizeof(tagint) == sizeof(smallint)) {
newtree->type = INTARRAY;
newtree->iarray = (int *) atom->tag;
} else {
newtree->type = BIGINTARRAY;
newtree->barray = (bigint *) atom->tag;
}
newtree->nstride = 1;
} else if (strcmp(word,"mass") == 0) {
if (atom->rmass) {
newtree->nstride = 1;
newtree->array = atom->rmass;
} else {
newtree->type = TYPEARRAY;
newtree->array = atom->mass;
}
} else if (strcmp(word,"type") == 0) {
newtree->type = INTARRAY;
newtree->nstride = 1;
newtree->iarray = atom->type;
} else if (strcmp(word,"mol") == 0) {
if (!atom->molecule_flag)
error->one(FLERR,"Variable uses atom property that isn't allocated");
if (sizeof(tagint) == sizeof(smallint)) {
newtree->type = INTARRAY;
newtree->iarray = (int *) atom->molecule;
} else {
newtree->type = BIGINTARRAY;
newtree->barray = (bigint *) atom->molecule;
}
newtree->nstride = 1;
}
else if (strcmp(word,"x") == 0) newtree->array = &atom->x[0][0];
else if (strcmp(word,"y") == 0) newtree->array = &atom->x[0][1];
else if (strcmp(word,"z") == 0) newtree->array = &atom->x[0][2];
else if (strcmp(word,"vx") == 0) newtree->array = &atom->v[0][0];
else if (strcmp(word,"vy") == 0) newtree->array = &atom->v[0][1];
else if (strcmp(word,"vz") == 0) newtree->array = &atom->v[0][2];
else if (strcmp(word,"fx") == 0) newtree->array = &atom->f[0][0];
else if (strcmp(word,"fy") == 0) newtree->array = &atom->f[0][1];
else if (strcmp(word,"fz") == 0) newtree->array = &atom->f[0][2];
else if (strcmp(word,"q") == 0) {
newtree->nstride = 1;
newtree->array = atom->q;
}
}
/* ----------------------------------------------------------------------
check if word matches a constant
return 1 if yes, else 0
customize by adding a constant: PI, version
------------------------------------------------------------------------- */
int Variable::is_constant(char *word)
{
if (strcmp(word,"PI") == 0) return 1;
if (strcmp(word,"version") == 0) return 1;
if (strcmp(word,"yes") == 0) return 1;
if (strcmp(word,"no") == 0) return 1;
if (strcmp(word,"on") == 0) return 1;
if (strcmp(word,"off") == 0) return 1;
if (strcmp(word,"true") == 0) return 1;
if (strcmp(word,"false") == 0) return 1;
return 0;
}
/* ----------------------------------------------------------------------
process a constant in formula
customize by adding a constant: PI, version
------------------------------------------------------------------------- */
double Variable::constant(char *word)
{
if (strcmp(word,"PI") == 0) return MY_PI;
if (strcmp(word,"version") == 0) return atof(universe->num_ver);
if (strcmp(word,"yes") == 0) return 1.0;
if (strcmp(word,"no") == 0) return 0.0;
if (strcmp(word,"on") == 0) return 1.0;
if (strcmp(word,"off") == 0) return 0.0;
if (strcmp(word,"true") == 0) return 1.0;
if (strcmp(word,"false") == 0) return 0.0;
return 0.0;
}
/* ----------------------------------------------------------------------
parse string for comma-separated args
store copy of each arg in args array
max allowed # of args = MAXFUNCARG
------------------------------------------------------------------------- */
int Variable::parse_args(char *str, char **args)
{
int n;
char *ptrnext;
int narg = 0;
char *ptr = str;
while (ptr && narg < MAXFUNCARG) {
ptrnext = find_next_comma(ptr);
if (ptrnext) *ptrnext = '\0';
n = strlen(ptr) + 1;
args[narg] = new char[n];
strcpy(args[narg],ptr);
narg++;
ptr = ptrnext;
if (ptr) ptr++;
}
if (ptr) error->all(FLERR,"Too many args in variable function");
return narg;
}
/* ----------------------------------------------------------------------
find next comma in str
skip commas inside one or more nested parenthesis
only return ptr to comma at level 0, else NULL if not found
------------------------------------------------------------------------- */
char *Variable::find_next_comma(char *str)
{
int level = 0;
for (char *p = str; *p; ++p) {
if ('(' == *p) level++;
else if (')' == *p) level--;
else if (',' == *p && !level) return p;
}
return NULL;
}
/* ----------------------------------------------------------------------
debug routine for printing formula tree recursively
------------------------------------------------------------------------- */
void Variable::print_tree(Tree *tree, int level)
{
printf("TREE %d: %d %g\n",level,tree->type,tree->value);
if (tree->first) print_tree(tree->first,level+1);
if (tree->second) print_tree(tree->second,level+1);
if (tree->nextra)
for (int i = 0; i < tree->nextra; i++) print_tree(tree->extra[i],level+1);
return;
}
/* ----------------------------------------------------------------------
recursive evaluation of string str
called from "if" command in input script
str is a boolean expression containing one or more items:
number = 0.0, -5.45, 2.8e-4, ...
math operation = (),x==y,x!=y,x<y,x<=y,x>y,x>=y,x&&y,x||y
------------------------------------------------------------------------- */
double Variable::evaluate_boolean(char *str)
{
int op,opprevious,flag1,flag2;
double value1,value2;
char onechar;
char *str1,*str2;
struct Arg {
int flag; // 0 for numeric value, 1 for string
double value; // stored numeric value
char *str; // stored string
};
Arg argstack[MAXLEVEL];
int opstack[MAXLEVEL];
int nargstack = 0;
int nopstack = 0;
int i = 0;
int expect = ARG;
while (1) {
onechar = str[i];
// whitespace: just skip
if (isspace(onechar)) i++;
// ----------------
// parentheses: recursively evaluate contents of parens
// ----------------
else if (onechar == '(') {
if (expect == OP)
error->all(FLERR,"Invalid Boolean syntax in if command");
expect = OP;
char *contents;
i = find_matching_paren(str,i,contents);
i++;
// evaluate contents and push on stack
argstack[nargstack].value = evaluate_boolean(contents);
argstack[nargstack].flag = 0;
nargstack++;
delete [] contents;
// ----------------
// number: push value onto stack
// ----------------
} else if (isdigit(onechar) || onechar == '.' || onechar == '-') {
if (expect == OP)
error->all(FLERR,"Invalid Boolean syntax in if command");
expect = OP;
// set I to end of number, including scientific notation
int istart = i++;
while (isdigit(str[i]) || str[i] == '.') i++;
if (str[i] == 'e' || str[i] == 'E') {
i++;
if (str[i] == '+' || str[i] == '-') i++;
while (isdigit(str[i])) i++;
}
onechar = str[i];
str[i] = '\0';
argstack[nargstack].value = atof(&str[istart]);
str[i] = onechar;
argstack[nargstack++].flag = 0;
// ----------------
// string: push string onto stack
// ----------------
} else if (isalpha(onechar)) {
if (expect == OP)
error->all(FLERR,"Invalid Boolean syntax in if command");
expect = OP;
// set I to end of string
int istart = i++;
while (isalnum(str[i]) || str[i] == '_') i++;
int n = i - istart + 1;
argstack[nargstack].str = new char[n];
onechar = str[i];
str[i] = '\0';
strcpy(argstack[nargstack].str,&str[istart]);
str[i] = onechar;
argstack[nargstack++].flag = 1;
// ----------------
// Boolean operator, including end-of-string
// ----------------
} else if (strchr("<>=!&|\0",onechar)) {
if (onechar == '=') {
if (str[i+1] != '=')
error->all(FLERR,"Invalid Boolean syntax in if command");
op = EQ;
i++;
} else if (onechar == '!') {
if (str[i+1] == '=') {
op = NE;
i++;
} else op = NOT;
} else if (onechar == '<') {
if (str[i+1] != '=') op = LT;
else {
op = LE;
i++;
}
} else if (onechar == '>') {
if (str[i+1] != '=') op = GT;
else {
op = GE;
i++;
}
} else if (onechar == '&') {
if (str[i+1] != '&')
error->all(FLERR,"Invalid Boolean syntax in if command");
op = AND;
i++;
} else if (onechar == '|') {
if (str[i+1] != '|')
error->all(FLERR,"Invalid Boolean syntax in if command");
op = OR;
i++;
} else op = DONE;
i++;
if (op == NOT && expect == ARG) {
opstack[nopstack++] = op;
continue;
}
if (expect == ARG)
error->all(FLERR,"Invalid Boolean syntax in if command");
expect = ARG;
// evaluate stack as deep as possible while respecting precedence
// before pushing current op onto stack
while (nopstack && precedence[opstack[nopstack-1]] >= precedence[op]) {
opprevious = opstack[--nopstack];
nargstack--;
flag2 = argstack[nargstack].flag;
value2 = argstack[nargstack].value;
str2 = argstack[nargstack].str;
if (opprevious != NOT) {
nargstack--;
flag1 = argstack[nargstack].flag;
value1 = argstack[nargstack].value;
str1 = argstack[nargstack].str;
}
if (opprevious == NOT) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value2 == 0.0) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == EQ) {
if (flag1 != flag2)
error->all(FLERR,"Invalid Boolean syntax in if command");
if (flag2 == 0) {
if (value1 == value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else {
if (strcmp(str1,str2) == 0) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
delete [] str1;
delete [] str2;
}
} else if (opprevious == NE) {
if (flag1 != flag2)
error->all(FLERR,"Invalid Boolean syntax in if command");
if (flag2 == 0) {
if (value1 != value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else {
if (strcmp(str1,str2) != 0) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
delete [] str1;
delete [] str2;
}
} else if (opprevious == LT) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 < value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == LE) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 <= value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == GT) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 > value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == GE) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 >= value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == AND) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 != 0.0 && value2 != 0.0) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == OR) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 != 0.0 || value2 != 0.0) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
}
argstack[nargstack++].flag = 0;
}
// if end-of-string, break out of entire formula evaluation loop
if (op == DONE) break;
// push current operation onto stack
opstack[nopstack++] = op;
} else error->all(FLERR,"Invalid Boolean syntax in if command");
}
if (nopstack) error->all(FLERR,"Invalid Boolean syntax in if command");
if (nargstack != 1) error->all(FLERR,"Invalid Boolean syntax in if command");
return argstack[0].value;
}
/* ---------------------------------------------------------------------- */
unsigned int Variable::data_mask(int ivar)
{
if (eval_in_progress[ivar]) return EMPTY_MASK;
eval_in_progress[ivar] = 1;
unsigned int datamask = data_mask(data[ivar][0]);
eval_in_progress[ivar] = 0;
return datamask;
}
/* ---------------------------------------------------------------------- */
unsigned int Variable::data_mask(char *str)
{
unsigned int datamask = EMPTY_MASK;
for (unsigned int i = 0; i < strlen(str)-2; i++) {
int istart = i;
while (isalnum(str[i]) || str[i] == '_') i++;
int istop = i-1;
int n = istop - istart + 1;
char *word = new char[n+1];
strncpy(word,&str[istart],n);
word[n] = '\0';
// ----------------
// compute
// ----------------
if ((strncmp(word,"c_",2) == 0) && (i>0) && (!isalnum(str[i-1]))) {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
int icompute = modify->find_compute(word+2);
if (icompute < 0)
error->all(FLERR,"Invalid compute ID in variable formula");
datamask &= modify->compute[icompute]->data_mask();
}
if ((strncmp(word,"f_",2) == 0) && (i>0) && (!isalnum(str[i-1]))) {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
int ifix = modify->find_fix(word+2);
if (ifix < 0) error->all(FLERR,"Invalid fix ID in variable formula");
datamask &= modify->fix[ifix]->data_mask();
}
if ((strncmp(word,"v_",2) == 0) && (i>0) && (!isalnum(str[i-1]))) {
int ivar = find(word+2);
if (ivar < 0) error->all(FLERR,"Invalid variable name in variable formula");
datamask &= data_mask(ivar);
}
delete [] word;
}
return datamask;
}
/* ----------------------------------------------------------------------
class to read variable values from a file
for flag = SCALARFILE, reads one value per line
for flag = ATOMFILE, reads set of one value per atom
------------------------------------------------------------------------- */
VarReader::VarReader(LAMMPS *lmp, char *name, char *file, int flag) :
Pointers(lmp)
{
me = comm->me;
style = flag;
fp = NULL;
if (me == 0) {
fp = fopen(file,"r");
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open file variable file %s",file);
error->one(FLERR,str);
}
}
// if atomfile-style variable, must store per-atom values read from file
// allocate a new fix STORE, so they persist
// id = variable-ID + VARIABLE_STORE, fix group = all
fixstore = NULL;
id_fix = NULL;
buffer = NULL;
if (style == ATOMFILE) {
if (atom->map_style == 0)
error->all(FLERR,
"Cannot use atomfile-style variable unless atom map exists");
int n = strlen(name) + strlen("_VARIABLE_STORE") + 1;
id_fix = new char[n];
strcpy(id_fix,name);
strcat(id_fix,"_VARIABLE_STORE");
char **newarg = new char*[6];
newarg[0] = id_fix;
newarg[1] = (char *) "all";
newarg[2] = (char *) "STORE";
newarg[3] = (char *) "peratom";
newarg[4] = (char *) "0";
newarg[5] = (char *) "1";
modify->add_fix(6,newarg);
fixstore = (FixStore *) modify->fix[modify->nfix-1];
delete [] newarg;
buffer = new char[CHUNK*MAXLINE];
}
}
/* ---------------------------------------------------------------------- */
VarReader::~VarReader()
{
if (me == 0) {
fclose(fp);
fp = NULL;
}
// check modify in case all fixes have already been deleted
if (fixstore) {
if (modify) modify->delete_fix(id_fix);
delete [] id_fix;
delete [] buffer;
}
}
/* ----------------------------------------------------------------------
read for SCALARFILE style
read next value from file into str for file-style variable
strip comments, skip blank lines
return 0 if successful, 1 if end-of-file
------------------------------------------------------------------------- */
int VarReader::read_scalar(char *str)
{
int n;
char *ptr;
// read one string from file
if (me == 0) {
while (1) {
if (fgets(str,MAXLINE,fp) == NULL) n = 0;
else n = strlen(str);
if (n == 0) break; // end of file
str[n-1] = '\0'; // strip newline
if ((ptr = strchr(str,'#'))) *ptr = '\0'; // strip comment
if (strtok(str," \t\n\r\f") == NULL) continue; // skip if blank
n = strlen(str) + 1;
break;
}
}
MPI_Bcast(&n,1,MPI_INT,0,world);
if (n == 0) return 1;
MPI_Bcast(str,n,MPI_CHAR,0,world);
return 0;
}
/* ----------------------------------------------------------------------
read snapshot of per-atom values from file
into str for atomfile-style variable
return 0 if successful, 1 if end-of-file
------------------------------------------------------------------------- */
int VarReader::read_peratom()
{
int i,m,n,nchunk,eof;
tagint tag;
char *ptr,*next;
double value;
// set all per-atom values to 0.0
// values that appear in file will overwrite this
double *vstore = fixstore->vstore;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++) vstore[i] = 0.0;
// read one string from file, convert to Nlines
char str[MAXLINE];
if (me == 0) {
while (1) {
if (fgets(str,MAXLINE,fp) == NULL) n = 0;
else n = strlen(str);
if (n == 0) break; // end of file
str[n-1] = '\0'; // strip newline
if ((ptr = strchr(str,'#'))) *ptr = '\0'; // strip comment
if (strtok(str," \t\n\r\f") == NULL) continue; // skip if blank
n = strlen(str) + 1;
break;
}
}
MPI_Bcast(&n,1,MPI_INT,0,world);
if (n == 0) return 1;
MPI_Bcast(str,n,MPI_CHAR,0,world);
bigint nlines = force->bnumeric(FLERR,str);
tagint map_tag_max = atom->map_tag_max;
bigint nread = 0;
while (nread < nlines) {
nchunk = MIN(nlines-nread,CHUNK);
eof = comm->read_lines_from_file(fp,nchunk,MAXLINE,buffer);
if (eof) return 1;
char *buf = buffer;
for (i = 0; i < nchunk; i++) {
next = strchr(buf,'\n');
*next = '\0';
sscanf(buf,TAGINT_FORMAT " %lg",&tag,&value);
if (tag <= 0 || tag > map_tag_max)
error->one(FLERR,"Invalid atom ID in variable file");
if ((m = atom->map(tag)) >= 0) vstore[m] = value;
buf = next + 1;
}
nread += nchunk;
}
return 0;
}
diff --git a/src/velocity.cpp b/src/velocity.cpp
index e5eb19c81..0e964a27b 100644
--- a/src/velocity.cpp
+++ b/src/velocity.cpp
@@ -1,904 +1,905 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "velocity.h"
#include "atom.h"
#include "update.h"
#include "domain.h"
#include "lattice.h"
#include "input.h"
#include "variable.h"
#include "force.h"
#include "modify.h"
#include "fix.h"
#include "compute.h"
#include "compute_temp.h"
#include "random_park.h"
#include "group.h"
#include "comm.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{CREATE,SET,SCALE,RAMP,ZERO};
enum{ALL,LOCAL,GEOM};
enum{NONE,CONSTANT,EQUAL,ATOM};
#define WARMUP 100
#define SMALL 0.001
/* ---------------------------------------------------------------------- */
Velocity::Velocity(LAMMPS *lmp) : Pointers(lmp) {}
/* ---------------------------------------------------------------------- */
void Velocity::command(int narg, char **arg)
{
if (narg < 2) error->all(FLERR,"Illegal velocity command");
if (domain->box_exist == 0)
error->all(FLERR,"Velocity command before simulation box is defined");
if (atom->natoms == 0)
error->all(FLERR,"Velocity command with no atoms existing");
// atom masses must all be set
atom->check_mass();
// identify group
igroup = group->find(arg[0]);
if (igroup == -1) error->all(FLERR,"Could not find velocity group ID");
groupbit = group->bitmask[igroup];
// identify style
if (strcmp(arg[1],"create") == 0) style = CREATE;
else if (strcmp(arg[1],"set") == 0) style = SET;
else if (strcmp(arg[1],"scale") == 0) style = SCALE;
else if (strcmp(arg[1],"ramp") == 0) style = RAMP;
else if (strcmp(arg[1],"zero") == 0) style = ZERO;
else error->all(FLERR,"Illegal velocity command");
// set defaults
temperature = NULL;
dist_flag = 0;
sum_flag = 0;
momentum_flag = 1;
rotation_flag = 0;
bias_flag = 0;
loop_flag = ALL;
scale_flag = 1;
rfix = -1;
// read options from end of input line
// change defaults as options specify
if (style == CREATE) options(narg-4,&arg[4]);
else if (style == SET) options(narg-5,&arg[5]);
else if (style == SCALE) options(narg-3,&arg[3]);
else if (style == RAMP) options(narg-8,&arg[8]);
else if (style == ZERO) options(narg-3,&arg[3]);
// special cases where full init and border communication must be done first
// for ZERO if fix rigid/small is used
// for CREATE/SET if compute temp/cs is used
// b/c methods invoked in the compute/fix perform forward/reverse comm
int initcomm = 0;
if (style == ZERO && rfix >= 0 &&
strcmp(modify->fix[rfix]->style,"rigid/small") == 0) initcomm = 1;
if ((style == CREATE || style == SET) && temperature &&
strcmp(temperature->style,"temp/cs") == 0) initcomm = 1;
if (initcomm) {
lmp->init();
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
domain->reset_box();
comm->setup();
comm->exchange();
comm->borders();
if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
}
// initialize velocities based on style
// create() invoked differently, so can be called externally
if (style == CREATE) {
double t_desired = force->numeric(FLERR,arg[2]);
int seed = force->inumeric(FLERR,arg[3]);
create(t_desired,seed);
}
else if (style == SET) set(narg-2,&arg[2]);
else if (style == SCALE) scale(narg-2,&arg[2]);
else if (style == RAMP) ramp(narg-2,&arg[2]);
else if (style == ZERO) zero(narg-2,&arg[2]);
}
/* ----------------------------------------------------------------------
initialization of defaults before calling velocity methods externaly
------------------------------------------------------------------------- */
void Velocity::init_external(const char *extgroup)
{
igroup = group->find(extgroup);
if (igroup == -1) error->all(FLERR,"Could not find velocity group ID");
groupbit = group->bitmask[igroup];
temperature = NULL;
dist_flag = 0;
sum_flag = 0;
momentum_flag = 1;
rotation_flag = 0;
loop_flag = ALL;
scale_flag = 1;
+ bias_flag = 0;
}
/* ---------------------------------------------------------------------- */
void Velocity::create(double t_desired, int seed)
{
int i;
double **vhold;
if (seed <= 0) error->all(FLERR,"Illegal velocity create command");
// if sum_flag set, store a copy of current velocities
if (sum_flag) {
double **v = atom->v;
int nlocal = atom->nlocal;
memory->create(vhold,nlocal,3,"velocity:vhold");
for (i = 0; i < nlocal; i++) {
vhold[i][0] = v[i][0];
vhold[i][1] = v[i][1];
vhold[i][2] = v[i][2];
}
}
// if temperature = NULL or bias_flag set,
// create a new ComputeTemp with the velocity group
int tcreate_flag = 0;
Compute *temperature_nobias = NULL;
if (temperature == NULL || bias_flag) {
char **arg = new char*[3];
arg[0] = (char *) "velocity_temp";
arg[1] = group->names[igroup];
arg[2] = (char *) "temp";
if (temperature == NULL) {
temperature = new ComputeTemp(lmp,3,arg);
tcreate_flag = 1;
} else temperature_nobias = new ComputeTemp(lmp,3,arg);
delete [] arg;
}
// initialize temperature computation(s)
// warn if groups don't match
if (igroup != temperature->igroup && comm->me == 0)
error->warning(FLERR,"Mismatch between velocity and compute groups");
temperature->init();
temperature->setup();
if (temperature_nobias) {
temperature_nobias->init();
temperature_nobias->setup();
}
// if bias_flag set, remove bias velocity from all atoms
// for some temperature computes, must first calculate temp to do that
if (bias_flag) {
temperature->compute_scalar();
temperature->remove_bias_all();
}
// create new velocities, in uniform or gaussian distribution
// loop option determines looping style, ALL is default
// ALL = loop over all natoms, only set those I own via atom->map
// cannot do this if atom IDs do not span 1-Natoms (some were deleted)
// will produce same V, independent of P, if atoms were read-in
// will NOT produce same V, independent of P, if used create_atoms
// LOCAL = only loop over my atoms, adjust RNG to be proc-specific
// will never produce same V, independent of P
// GEOM = only loop over my atoms
// choose RNG for each atom based on its xyz coord (geometry)
// via random->reset()
// will always produce same V, independent of P
// adjust by factor for atom mass
// set xdim,ydim,zdim = 1/0 for whether to create velocity in those dims
// zdim = 0 for 2d
// any dims can be 0 if bias temperature compute turns them off
// currently only temp/partial does
double **v = atom->v;
double *rmass = atom->rmass;
double *mass = atom->mass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int dim = domain->dimension;
int m;
double vx,vy,vz,factor;
RanPark *random = NULL;
if (loop_flag == ALL) {
// create an atom map if one doesn't exist already
int mapflag = 0;
if (atom->map_style == 0) {
mapflag = 1;
atom->nghost = 0;
atom->map_init();
atom->map_set();
}
// error check
if (atom->natoms > MAXSMALLINT)
error->all(FLERR,"Too big a problem to use velocity create loop all");
if (atom->tag_enable == 0)
error->all(FLERR,
"Cannot use velocity create loop all unless atoms have IDs");
if (atom->tag_consecutive() == 0)
error->all(FLERR,
"Atom IDs must be consecutive for velocity create loop all");
// loop over all atoms in system
// generate RNGs for all atoms, only assign to ones I own
// use either per-type mass or per-atom rmass
random = new RanPark(lmp,seed);
int natoms = static_cast<int> (atom->natoms);
for (i = 1; i <= natoms; i++) {
if (dist_flag == 0) {
vx = random->uniform() - 0.5;
vy = random->uniform() - 0.5;
vz = random->uniform() - 0.5;
} else {
vx = random->gaussian();
vy = random->gaussian();
vz = random->gaussian();
}
m = atom->map(i);
if (m >= 0 && m < nlocal) {
if (mask[m] & groupbit) {
if (rmass) factor = 1.0/sqrt(rmass[m]);
else factor = 1.0/sqrt(mass[type[m]]);
v[m][0] = vx * factor;
v[m][1] = vy * factor;
if (dim == 3) v[m][2] = vz * factor;
else v[m][2] = 0.0;
}
}
}
// delete temporary atom map
if (mapflag) {
atom->map_delete();
atom->map_style = 0;
}
} else if (loop_flag == LOCAL) {
random = new RanPark(lmp,seed + comm->me);
for (i = 0; i < WARMUP; i++) random->uniform();
for (i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
if (dist_flag == 0) {
vx = random->uniform() - 0.5;
vy = random->uniform() - 0.5;
vz = random->uniform() - 0.5;
} else {
vx = random->gaussian();
vy = random->gaussian();
vz = random->gaussian();
}
if (rmass) factor = 1.0/sqrt(rmass[i]);
else factor = 1.0/sqrt(mass[type[i]]);
v[i][0] = vx * factor;
v[i][1] = vy * factor;
if (dim == 3) v[i][2] = vz * factor;
else v[i][2] = 0.0;
}
}
} else if (loop_flag == GEOM) {
random = new RanPark(lmp,1);
double **x = atom->x;
for (i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
random->reset(seed,x[i]);
if (dist_flag == 0) {
vx = random->uniform() - 0.5;
vy = random->uniform() - 0.5;
vz = random->uniform() - 0.5;
} else {
vx = random->gaussian();
vy = random->gaussian();
vz = random->gaussian();
}
if (rmass) factor = 1.0/sqrt(rmass[i]);
else factor = 1.0/sqrt(mass[type[i]]);
v[i][0] = vx * factor;
v[i][1] = vy * factor;
if (dim == 3) v[i][2] = vz * factor;
else v[i][2] = 0.0;
}
}
}
// apply momentum and rotation zeroing
if (momentum_flag) zero_momentum();
if (rotation_flag) zero_rotation();
// scale temp to desired value
// if bias flag is set, bias velocities have already been removed:
// no-bias compute calculates temp only for new thermal velocities
double t;
if ((bias_flag == 0) || (temperature_nobias == NULL))
t = temperature->compute_scalar();
else t = temperature_nobias->compute_scalar();
rescale(t,t_desired);
// if bias_flag set, restore bias velocity to all atoms
// reapply needed for temperature computes where velocity
// creation has messed up the bias that was already removed:
// compute temp/partial needs to reset v dims to 0.0
// compute temp/cs needs to reset v to COM velocity of each C/S pair
if (bias_flag) {
temperature->reapply_bias_all();
temperature->restore_bias_all();
}
// if sum_flag set, add back in previous velocities
if (sum_flag) {
for (i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
v[i][0] += vhold[i][0];
v[i][1] += vhold[i][1];
v[i][2] += vhold[i][2];
}
}
memory->destroy(vhold);
}
// free local memory
// if temperature compute was created, delete it
delete random;
if (tcreate_flag) delete temperature;
if (temperature_nobias) delete temperature_nobias;
}
/* ---------------------------------------------------------------------- */
void Velocity::set(int narg, char **arg)
{
int xstyle,ystyle,zstyle,varflag;
double vx,vy,vz;
char *xstr,*ystr,*zstr;
int xvar,yvar,zvar;
// parse 3 args
xstyle = ystyle = zstyle = CONSTANT;
xstr = ystr = zstr = NULL;
if (strstr(arg[0],"v_") == arg[0]) {
int n = strlen(&arg[0][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[0][2]);
} else if (strcmp(arg[0],"NULL") == 0) xstyle = NONE;
else vx = force->numeric(FLERR,arg[0]);
if (strstr(arg[1],"v_") == arg[1]) {
int n = strlen(&arg[1][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[1][2]);
} else if (strcmp(arg[1],"NULL") == 0) ystyle = NONE;
else vy = force->numeric(FLERR,arg[1]);
if (strstr(arg[2],"v_") == arg[2]) {
int n = strlen(&arg[2][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[2][2]);
} else if (strcmp(arg[2],"NULL") == 0) zstyle = NONE;
else vz = force->numeric(FLERR,arg[2]);
// set and apply scale factors
xscale = yscale = zscale = 1.0;
if (xstyle && !xstr) {
if (scale_flag) xscale = domain->lattice->xlattice;
vx *= xscale;
}
if (ystyle && !ystr) {
if (scale_flag) yscale = domain->lattice->ylattice;
vy *= yscale;
}
if (zstyle && !zstr) {
if (scale_flag) zscale = domain->lattice->zlattice;
vz *= zscale;
}
// check variables
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0)
error->all(FLERR,"Variable name for velocity set does not exist");
if (input->variable->equalstyle(xvar)) xstyle = EQUAL;
else if (input->variable->atomstyle(xvar)) xstyle = ATOM;
else error->all(FLERR,"Variable for velocity set is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0)
error->all(FLERR,"Variable name for velocity set does not exist");
if (input->variable->equalstyle(yvar)) ystyle = EQUAL;
else if (input->variable->atomstyle(yvar)) ystyle = ATOM;
else error->all(FLERR,"Variable for velocity set is invalid style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0)
error->all(FLERR,"Variable name for velocity set does not exist");
if (input->variable->equalstyle(zvar)) zstyle = EQUAL;
else if (input->variable->atomstyle(zvar)) zstyle = ATOM;
else error->all(FLERR,"Variable for velocity set is invalid style");
}
if (xstyle == ATOM || ystyle == ATOM || zstyle == ATOM)
varflag = ATOM;
else if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL)
varflag = EQUAL;
else varflag = CONSTANT;
// error check for 2d models
if (domain->dimension == 2) {
if (zstyle == CONSTANT && vz != 0.0)
error->all(FLERR,"Cannot set non-zero z velocity for 2d simulation");
if (zstyle == EQUAL || zstyle == ATOM)
error->all(FLERR,"Cannot set variable z velocity for 2d simulation");
}
// allocate vfield array if necessary
double **vfield = NULL;
if (varflag == ATOM) memory->create(vfield,atom->nlocal,3,"velocity:vfield");
// set velocities via constants
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (varflag == CONSTANT) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
if (sum_flag == 0) {
if (xstyle) v[i][0] = vx;
if (ystyle) v[i][1] = vy;
if (zstyle) v[i][2] = vz;
} else {
if (xstyle) v[i][0] += vx;
if (ystyle) v[i][1] += vy;
if (zstyle) v[i][2] += vz;
}
}
}
// set velocities via variables
} else {
if (xstyle == EQUAL) vx = input->variable->compute_equal(xvar);
else if (xstyle == ATOM) {
if (vfield) input->variable->compute_atom(xvar,igroup,&vfield[0][0],3,0);
else input->variable->compute_atom(xvar,igroup,NULL,3,0);
}
if (ystyle == EQUAL) vy = input->variable->compute_equal(yvar);
else if (ystyle == ATOM) {
if (vfield) input->variable->compute_atom(yvar,igroup,&vfield[0][1],3,0);
else input->variable->compute_atom(yvar,igroup,NULL,3,0);
}
if (zstyle == EQUAL) vz = input->variable->compute_equal(zvar);
else if (zstyle == ATOM) {
if (vfield) input->variable->compute_atom(zvar,igroup,&vfield[0][2],3,0);
else input->variable->compute_atom(zvar,igroup,NULL,3,0);
}
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (sum_flag == 0) {
if (xstyle == ATOM) v[i][0] = vfield[i][0];
else if (xstyle) v[i][0] = vx;
if (ystyle == ATOM) v[i][1] = vfield[i][1];
else if (ystyle) v[i][1] = vy;
if (zstyle == ATOM) v[i][2] = vfield[i][2];
else if (zstyle) v[i][2] = vz;
} else {
if (xstyle == ATOM) v[i][0] += vfield[i][0];
else if (xstyle) v[i][0] += vx;
if (ystyle == ATOM) v[i][1] += vfield[i][1];
else if (ystyle) v[i][1] += vy;
if (zstyle == ATOM) v[i][2] += vfield[i][2];
else if (zstyle) v[i][2] += vz;
}
}
}
// clean up
delete [] xstr;
delete [] ystr;
delete [] zstr;
memory->destroy(vfield);
}
/* ----------------------------------------------------------------------
rescale velocities of a group after computing its temperature
------------------------------------------------------------------------- */
void Velocity::scale(int narg, char **arg)
{
double t_desired = force->numeric(FLERR,arg[0]);
// if temperature = NULL, create a new ComputeTemp with the velocity group
int tflag = 0;
if (temperature == NULL) {
char **arg = new char*[3];
arg[0] = (char *) "velocity_temp";
arg[1] = group->names[igroup];
arg[2] = (char *) "temp";
temperature = new ComputeTemp(lmp,3,arg);
tflag = 1;
delete [] arg;
}
// initialize temperature computation
// warn if groups don't match
if (igroup != temperature->igroup && comm->me == 0)
error->warning(FLERR,"Mismatch between velocity and compute groups");
temperature->init();
temperature->setup();
// scale temp to desired value
// if bias flag is set:
// temperature calculation will be done accounting for bias
// remove/restore bias velocities before/after rescale
if (bias_flag == 0) {
double t = temperature->compute_scalar();
rescale(t,t_desired);
} else {
double t = temperature->compute_scalar();
temperature->remove_bias_all();
rescale(t,t_desired);
temperature->restore_bias_all();
}
// if temperature was created, delete it
if (tflag) delete temperature;
}
/* ----------------------------------------------------------------------
apply a ramped set of velocities
------------------------------------------------------------------------- */
void Velocity::ramp(int narg, char **arg)
{
// set scale factors
if (scale_flag) {
xscale = domain->lattice->xlattice;
yscale = domain->lattice->ylattice;
zscale = domain->lattice->zlattice;
}
else xscale = yscale = zscale = 1.0;
// parse args
int v_dim;
if (strcmp(arg[0],"vx") == 0) v_dim = 0;
else if (strcmp(arg[0],"vy") == 0) v_dim = 1;
else if (strcmp(arg[0],"vz") == 0) v_dim = 2;
else error->all(FLERR,"Illegal velocity command");
if (v_dim == 2 && domain->dimension == 2)
error->all(FLERR,"Velocity ramp in z for a 2d problem");
double v_lo,v_hi;
if (v_dim == 0) {
v_lo = xscale*force->numeric(FLERR,arg[1]);
v_hi = xscale*force->numeric(FLERR,arg[2]);
} else if (v_dim == 1) {
v_lo = yscale*force->numeric(FLERR,arg[1]);
v_hi = yscale*force->numeric(FLERR,arg[2]);
} else if (v_dim == 2) {
v_lo = zscale*force->numeric(FLERR,arg[1]);
v_hi = zscale*force->numeric(FLERR,arg[2]);
}
int coord_dim;
if (strcmp(arg[3],"x") == 0) coord_dim = 0;
else if (strcmp(arg[3],"y") == 0) coord_dim = 1;
else if (strcmp(arg[3],"z") == 0) coord_dim = 2;
else error->all(FLERR,"Illegal velocity command");
double coord_lo,coord_hi;
if (coord_dim == 0) {
coord_lo = xscale*force->numeric(FLERR,arg[4]);
coord_hi = xscale*force->numeric(FLERR,arg[5]);
} else if (coord_dim == 1) {
coord_lo = yscale*force->numeric(FLERR,arg[4]);
coord_hi = yscale*force->numeric(FLERR,arg[5]);
} else if (coord_dim == 2) {
coord_lo = zscale*force->numeric(FLERR,arg[4]);
coord_hi = zscale*force->numeric(FLERR,arg[5]);
}
// vramp = ramped velocity component for v_dim
// add or set based on sum_flag
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double fraction,vramp;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
fraction = (x[i][coord_dim] - coord_lo) / (coord_hi - coord_lo);
fraction = MAX(fraction,0.0);
fraction = MIN(fraction,1.0);
vramp = v_lo + fraction*(v_hi - v_lo);
if (sum_flag) v[i][v_dim] += vramp;
else v[i][v_dim] = vramp;
}
}
/* ----------------------------------------------------------------------
zero linear or angular momentum of a group
------------------------------------------------------------------------- */
void Velocity::zero(int narg, char **arg)
{
if (strcmp(arg[0],"linear") == 0) {
if (rfix < 0) zero_momentum();
else if (strcmp(modify->fix[rfix]->style,"rigid/small") == 0) {
modify->fix[rfix]->setup_pre_neighbor();
modify->fix[rfix]->zero_momentum();
} else if (strstr(modify->fix[rfix]->style,"rigid")) {
modify->fix[rfix]->zero_momentum();
} else error->all(FLERR,"Velocity rigid used with non-rigid fix-ID");
} else if (strcmp(arg[0],"angular") == 0) {
if (rfix < 0) zero_rotation();
else if (strcmp(modify->fix[rfix]->style,"rigid/small") == 0) {
modify->fix[rfix]->setup_pre_neighbor();
modify->fix[rfix]->zero_rotation();
} else if (strstr(modify->fix[rfix]->style,"rigid")) {
modify->fix[rfix]->zero_rotation();
} else error->all(FLERR,"Velocity rigid used with non-rigid fix-ID");
} else error->all(FLERR,"Illegal velocity command");
}
/* ----------------------------------------------------------------------
rescale velocities of group atoms to t_new from t_old
no bias applied here, since done in create() and scale()
------------------------------------------------------------------------- */
void Velocity::rescale(double t_old, double t_new)
{
if (t_old == 0.0) error->all(FLERR,"Attempting to rescale a 0.0 temperature");
double factor = sqrt(t_new/t_old);
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
v[i][0] *= factor;
v[i][1] *= factor;
v[i][2] *= factor;
}
}
/* ----------------------------------------------------------------------
zero the linear momentum of a group of atoms by adjusting v by -Vcm
------------------------------------------------------------------------- */
void Velocity::zero_momentum()
{
// cannot have no atoms in group
if (group->count(igroup) == 0)
error->all(FLERR,"Cannot zero momentum of no atoms");
// compute velocity of center-of-mass of group
double masstotal = group->mass(igroup);
double vcm[3];
group->vcm(igroup,masstotal,vcm);
// adjust velocities by vcm to zero linear momentum
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
v[i][0] -= vcm[0];
v[i][1] -= vcm[1];
v[i][2] -= vcm[2];
}
}
/* ----------------------------------------------------------------------
zero the angular momentum of a group of atoms by adjusting v by -(w x r)
------------------------------------------------------------------------- */
void Velocity::zero_rotation()
{
int i;
// cannot have no atoms in group
if (group->count(igroup) == 0)
error->all(FLERR,"Cannot zero momentum of no atoms");
// compute omega (angular velocity) of group around center-of-mass
double xcm[3],angmom[3],inertia[3][3],omega[3];
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
group->angmom(igroup,xcm,angmom);
group->inertia(igroup,xcm,inertia);
group->omega(angmom,inertia,omega);
// adjust velocities to zero omega
// vnew_i = v_i - w x r_i
// must use unwrapped coords to compute r_i correctly
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
double dx,dy,dz;
double unwrap[3];
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - xcm[0];
dy = unwrap[1] - xcm[1];
dz = unwrap[2] - xcm[2];
v[i][0] -= omega[1]*dz - omega[2]*dy;
v[i][1] -= omega[2]*dx - omega[0]*dz;
v[i][2] -= omega[0]*dy - omega[1]*dx;
}
}
/* ----------------------------------------------------------------------
parse optional parameters at end of velocity input line
------------------------------------------------------------------------- */
void Velocity::options(int narg, char **arg)
{
if (narg < 0) error->all(FLERR,"Illegal velocity command");
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"dist") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command");
if (strcmp(arg[iarg+1],"uniform") == 0) dist_flag = 0;
else if (strcmp(arg[iarg+1],"gaussian") == 0) dist_flag = 1;
else error->all(FLERR,"Illegal velocity command");
iarg += 2;
} else if (strcmp(arg[iarg],"sum") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command");
if (strcmp(arg[iarg+1],"no") == 0) sum_flag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) sum_flag = 1;
else error->all(FLERR,"Illegal velocity command");
iarg += 2;
} else if (strcmp(arg[iarg],"mom") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command");
if (strcmp(arg[iarg+1],"no") == 0) momentum_flag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) momentum_flag = 1;
else error->all(FLERR,"Illegal velocity command");
iarg += 2;
} else if (strcmp(arg[iarg],"rot") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command");
if (strcmp(arg[iarg+1],"no") == 0) rotation_flag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) rotation_flag = 1;
else error->all(FLERR,"Illegal velocity command");
iarg += 2;
} else if (strcmp(arg[iarg],"temp") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command");
int icompute;
for (icompute = 0; icompute < modify->ncompute; icompute++)
if (strcmp(arg[iarg+1],modify->compute[icompute]->id) == 0) break;
if (icompute == modify->ncompute)
error->all(FLERR,"Could not find velocity temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,
"Velocity temperature ID does not compute temperature");
iarg += 2;
} else if (strcmp(arg[iarg],"bias") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command");
if (strcmp(arg[iarg+1],"no") == 0) bias_flag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) bias_flag = 1;
else error->all(FLERR,"Illegal velocity command");
iarg += 2;
} else if (strcmp(arg[iarg],"loop") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command");
if (strcmp(arg[iarg+1],"all") == 0) loop_flag = ALL;
else if (strcmp(arg[iarg+1],"local") == 0) loop_flag = LOCAL;
else if (strcmp(arg[iarg+1],"geom") == 0) loop_flag = GEOM;
else error->all(FLERR,"Illegal velocity command");
iarg += 2;
} else if (strcmp(arg[iarg],"rigid") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command");
rfix = modify->find_fix(arg[iarg+1]);
if (rfix < 0) error->all(FLERR,"Fix ID for velocity does not exist");
iarg += 2;
} else if (strcmp(arg[iarg],"units") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal velocity command");
if (strcmp(arg[iarg+1],"box") == 0) scale_flag = 0;
else if (strcmp(arg[iarg+1],"lattice") == 0) scale_flag = 1;
else error->all(FLERR,"Illegal velocity command");
iarg += 2;
} else error->all(FLERR,"Illegal velocity command");
}
// error check
if (bias_flag && temperature == NULL)
error->all(FLERR,"Cannot use velocity bias command without temp keyword");
if (bias_flag && temperature->tempbias == 0)
error->all(FLERR,"Velocity temperature ID does calculate a velocity bias");
}
diff --git a/src/version.h b/src/version.h
index bf4a4e19f..9725014aa 100644
--- a/src/version.h
+++ b/src/version.h
@@ -1 +1 @@
-#define LAMMPS_VERSION "20 Aug 2016"
+#define LAMMPS_VERSION "27 Aug 2016"

Event Timeline